diff --git a/lapack/.gitignore b/lapack/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/lapack/.travis.yml b/lapack/.travis.yml new file mode 100644 index 00000000..34e33b37 --- /dev/null +++ b/lapack/.travis.yml @@ -0,0 +1,47 @@ +sudo: required + +language: go + +env: + matrix: + - BLAS_LIB=OpenBLAS + - BLAS_LIB=gonum + # Does not currently link correctly. Note that there is an issue with drotgm in ATLAS. + # - BLAS_LIB=ATLAS + # If we can get multiarch builds on travis. + # There are some issues with the Accellerate implementation. + #- BLAS_LIB=Accellerate + +# Versions of go that are explicitly supported by gonum. +go: + - 1.5.4 + - 1.6.3 + - 1.7.3 + +# Cache used to persist the compiled BLAS library between CI calls. +cache: + directories: + - .travis/OpenBLAS.cache + +# Required for coverage. +before_install: + - go get golang.org/x/tools/cmd/cover + - go get github.com/mattn/goveralls + - go get github.com/cznic/cc + - go get github.com/gonum/internal/binding + +# Install the appropriate BLAS library. +install: + - bash .travis/$TRAVIS_OS_NAME/$BLAS_LIB/install.sh + +# Get deps, build, test, and ensure the code is gofmt'ed. +# If we are building as gonum, then we have access to the coveralls api key, so we can run coverage as well. +script: + - if [[ "$BLAS_LIB" == "gonum" ]]; then pushd native; fi + - go get -d -t -v ./... + - go build -v ./... + - go test -v ./... + - test -z "$(gofmt -d *.go)" + - if [[ $TRAVIS_SECURE_ENV_VARS = "true" ]]; then bash -c "${TRAVIS_BUILD_DIR}/.travis/test-coverage.sh"; fi + # This is run last since it alters the tree. + - ${TRAVIS_BUILD_DIR}/.travis/check-generate.sh diff --git a/lapack/.travis/check-generate.sh b/lapack/.travis/check-generate.sh new file mode 100755 index 00000000..d25efa7f --- /dev/null +++ b/lapack/.travis/check-generate.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -ex + +go generate github.com/gonum/lapack/cgo/lapacke +if [ -n "$(git diff)" ]; then + exit 1 +fi diff --git a/lapack/.travis/linux/ATLAS/install.sh b/lapack/.travis/linux/ATLAS/install.sh new file mode 100644 index 00000000..9c93a053 --- /dev/null +++ b/lapack/.travis/linux/ATLAS/install.sh @@ -0,0 +1,26 @@ +set -ex + +# fetch and install ATLAS +sudo apt-get update -qq +sudo apt-get install -qq libatlas-base-dev + + +# fetch and install gonum/blas and gonum/matrix +export CGO_LDFLAGS="-L/usr/lib -latlas -llapack_atlas" +go get github.com/gonum/blas +go get github.com/gonum/matrix/mat64 + +# install lapack against ATLAS +pushd cgo/lapacke +go install -v -x +popd + +# travis compiles commands in script and then executes in bash. By adding +# set -e we are changing the travis build script's behavior, and the set +# -e lives on past the commands we are providing it. Some of the travis +# commands are supposed to exit with non zero status, but then continue +# executing. set -x makes the travis log files extremely verbose and +# difficult to understand. +# +# see travis-ci/travis-ci#5120 +set +ex diff --git a/lapack/.travis/linux/OpenBLAS/install.sh b/lapack/.travis/linux/OpenBLAS/install.sh new file mode 100644 index 00000000..bddd62df --- /dev/null +++ b/lapack/.travis/linux/OpenBLAS/install.sh @@ -0,0 +1,71 @@ +set -ex + +CACHE_DIR=${TRAVIS_BUILD_DIR}/.travis/${BLAS_LIB}.cache + +# fetch fortran to build OpenBLAS +sudo apt-get update -qq && sudo apt-get install -qq gfortran + +# check if cache exists +if [ -e ${CACHE_DIR}/last_commit_id ]; then + echo "Cache $CACHE_DIR hit" + LAST_COMMIT="$(git ls-remote git://github.com/xianyi/OpenBLAS HEAD | grep -o '^\S*')" + CACHED_COMMIT="$(cat ${CACHE_DIR}/last_commit_id)" + # determine current OpenBLAS master commit id and compare + # with commit id in cache directory + if [ "$LAST_COMMIT" != "$CACHED_COMMIT" ]; then + echo "Cache Directory $CACHE_DIR has stale commit" + # if commit is different, delete the cache + rm -rf ${CACHE_DIR} + fi +fi + +if [ ! -e ${CACHE_DIR}/last_commit_id ]; then + # Clear cache. + rm -rf ${CACHE_DIR} + + # cache generation + echo "Building cache at $CACHE_DIR" + mkdir ${CACHE_DIR} + sudo git clone --depth=1 git://github.com/xianyi/OpenBLAS + + pushd OpenBLAS + sudo make FC=gfortran &> /dev/null && sudo make PREFIX=${CACHE_DIR} install + popd + + curl http://www.netlib.org/blas/blast-forum/cblas.tgz | tar -zx + + pushd CBLAS + sudo mv Makefile.LINUX Makefile.in + sudo BLLIB=${CACHE_DIR}/lib/libopenblas.a make alllib + sudo mv lib/cblas_LINUX.a ${CACHE_DIR}/lib/libcblas.a + popd + + # Record commit id used to generate cache. + pushd OpenBLAS + echo $(git rev-parse HEAD) > ${CACHE_DIR}/last_commit_id + popd + +fi + +# copy the cache files into /usr +sudo cp -r ${CACHE_DIR}/* /usr/ + +# install gonum/blas against OpenBLAS +# fetch and install gonum/blas +export CGO_LDFLAGS="-L/usr/lib -lopenblas" +go get github.com/gonum/blas + +# install lapacke against OpenBLAS +pushd cgo/lapacke +go install -v -x +popd + +# travis compiles commands in script and then executes in bash. By adding +# set -e we are changing the travis build script's behavior, and the set +# -e lives on past the commands we are providing it. Some of the travis +# commands are supposed to exit with non zero status, but then continue +# executing. set -x makes the travis log files extremely verbose and +# difficult to understand. +# +# see travis-ci/travis-ci#5120 +set +ex diff --git a/lapack/.travis/linux/gonum/install.sh b/lapack/.travis/linux/gonum/install.sh new file mode 100644 index 00000000..4ebb7009 --- /dev/null +++ b/lapack/.travis/linux/gonum/install.sh @@ -0,0 +1,14 @@ +set -ex + +# fetch gonum/blas +go get github.com/gonum/blas/native + +# travis compiles commands in script and then executes in bash. By adding +# set -e we are changing the travis build script's behavior, and the set +# -e lives on past the commands we are providing it. Some of the travis +# commands are supposed to exit with non zero status, but then continue +# executing. set -x makes the travis log files extremely verbose and +# difficult to understand. +# +# see travis-ci/travis-ci#5120 +set +ex diff --git a/lapack/.travis/test-coverage.sh b/lapack/.travis/test-coverage.sh new file mode 100755 index 00000000..40487506 --- /dev/null +++ b/lapack/.travis/test-coverage.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +PROFILE_OUT=$PWD/profile.out +ACC_OUT=$PWD/acc.out + +testCover() { + # set the return value to 0 (succesful) + retval=0 + # get the directory to check from the parameter. Default to '.' + d=${1:-.} + # skip if there are no Go files here + ls $d/*.go &> /dev/null || return $retval + # switch to the directory to check + pushd $d > /dev/null + # create the coverage profile + coverageresult=`go test -v -coverprofile=$PROFILE_OUT` + # output the result so we can check the shell output + echo ${coverageresult} + # append the results to acc.out if coverage didn't fail, else set the retval to 1 (failed) + ( [[ ${coverageresult} == *FAIL* ]] && retval=1 ) || ( [ -f $PROFILE_OUT ] && grep -v "mode: set" $PROFILE_OUT >> $ACC_OUT ) + # return to our working dir + popd > /dev/null + # return our return value + return $retval +} + +# Init acc.out +echo "mode: set" > $ACC_OUT + +# Run test coverage on all directories containing go files except testlapack. +find . -maxdepth 10 -type d -not -path './testlapack*' | while read d; do testCover $d || exit; done + +# Upload the coverage profile to coveralls.io +[ -n "$COVERALLS_TOKEN" ] && goveralls -coverprofile=$ACC_OUT -service=travis-ci -repotoken $COVERALLS_TOKEN + diff --git a/lapack/README.md b/lapack/README.md new file mode 100644 index 00000000..4e61e4d9 --- /dev/null +++ b/lapack/README.md @@ -0,0 +1,58 @@ +Gonum LAPACK [![Build Status](https://travis-ci.org/gonum/lapack.svg?branch=master)](https://travis-ci.org/gonum/lapack) [![Coverage Status](https://coveralls.io/repos/gonum/lapack/badge.svg?branch=master&service=github)](https://coveralls.io/github/gonum/lapack?branch=master) [![GoDoc](https://godoc.org/github.com/gonum/lapack?status.svg)](https://godoc.org/github.com/gonum/lapack) +====== + +A collection of packages to provide LAPACK functionality for the Go programming +language (http://golang.org). This provides a partial implementation in native go +and a wrapper using cgo to a c-based implementation. + +## Installation + +``` + go get github.com/gonum/lapack +``` + + +Install OpenBLAS: +``` + git clone https://github.com/xianyi/OpenBLAS + cd OpenBLAS + make +``` + +Then install the lapack/cgo package: +```sh + CGO_LDFLAGS="-L/path/to/OpenBLAS -lopenblas" go install github.com/gonum/lapack/cgo +``` + +For Windows you can download binary packages for OpenBLAS at +http://sourceforge.net/projects/openblas/files/ + +If you want to use a different BLAS package such as the Intel MKL you can +adjust the `CGO_LDFLAGS` variable: +```sh + CGO_LDFLAGS="-lmkl_rt" go install github.com/gonum/lapack/cgo +``` + +## Packages + +### lapack + +Defines the LAPACK API based on http://www.netlib.org/lapack/lapacke.html + +### lapack/lapacke + +Binding to a C implementation of the lapacke interface (e.g. OpenBLAS or intel MKL) + +The linker flags (i.e. path to the BLAS library and library name) might have to be adapted. + +The recommended (free) option for good performance on both linux and darwin is OpenBLAS. + +## Issues + +If you find any bugs, feel free to file an issue on the github issue tracker. Discussions on API changes, added features, code review, or similar requests are preferred on the gonum-dev Google Group. + +https://groups.google.com/forum/#!forum/gonum-dev + +## License + +Please see github.com/gonum/license for general license information, contributors, authors, etc on the Gonum suite of packages. diff --git a/lapack/cgo/bench_test.go b/lapack/cgo/bench_test.go new file mode 100644 index 00000000..5deae590 --- /dev/null +++ b/lapack/cgo/bench_test.go @@ -0,0 +1,15 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package cgo + +import ( + "testing" + + "github.com/gonum/lapack/testlapack" +) + +func BenchmarkDgeev(b *testing.B) { testlapack.DgeevBenchmark(b, impl) } diff --git a/lapack/cgo/lapack.go b/lapack/cgo/lapack.go new file mode 100644 index 00000000..e99455bc --- /dev/null +++ b/lapack/cgo/lapack.go @@ -0,0 +1,2982 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cgo provides an interface to bindings for a C LAPACK library. +package cgo + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/lapack" + "github.com/gonum/lapack/cgo/lapacke" +) + +// Copied from lapack/native. Keep in sync. +const ( + absIncNotOne = "lapack: increment not one or negative one" + badAlpha = "lapack: bad alpha length" + badAuxv = "lapack: auxv has insufficient length" + badBeta = "lapack: bad beta length" + badD = "lapack: d has insufficient length" + badDecompUpdate = "lapack: bad decomp update" + badDiag = "lapack: bad diag" + badDims = "lapack: bad input dimensions" + badDirect = "lapack: bad direct" + badE = "lapack: e has insufficient length" + badEVComp = "lapack: bad EVComp" + badEVJob = "lapack: bad EVJob" + badEVSide = "lapack: bad EVSide" + badGSVDJob = "lapack: bad GSVDJob" + badHowMany = "lapack: bad HowMany" + badIlo = "lapack: ilo out of range" + badIhi = "lapack: ihi out of range" + badIpiv = "lapack: bad permutation length" + badJob = "lapack: bad Job" + badK1 = "lapack: k1 out of range" + badK2 = "lapack: k2 out of range" + badKperm = "lapack: incorrect permutation length" + badLdA = "lapack: index of a out of range" + badNb = "lapack: nb out of range" + badNorm = "lapack: bad norm" + badPivot = "lapack: bad pivot" + badS = "lapack: s has insufficient length" + badShifts = "lapack: bad shifts" + badSide = "lapack: bad side" + badSlice = "lapack: bad input slice length" + badSort = "lapack: bad Sort" + badStore = "lapack: bad store" + badTau = "lapack: tau has insufficient length" + badTauQ = "lapack: tauQ has insufficient length" + badTauP = "lapack: tauP has insufficient length" + badTrans = "lapack: bad trans" + badVn1 = "lapack: vn1 has insufficient length" + badVn2 = "lapack: vn2 has insufficient length" + badUplo = "lapack: illegal triangle" + badWork = "lapack: insufficient working memory" + badWorkStride = "lapack: insufficient working array stride" + badZ = "lapack: insufficient z length" + kGTM = "lapack: k > m" + kGTN = "lapack: k > n" + kLT0 = "lapack: k < 0" + mLT0 = "lapack: m < 0" + mLTN = "lapack: m < n" + nanScale = "lapack: NaN scale factor" + negDimension = "lapack: negative matrix dimension" + negZ = "lapack: negative z value" + nLT0 = "lapack: n < 0" + nLTM = "lapack: n < m" + offsetGTM = "lapack: offset > m" + shortWork = "lapack: working array shorter than declared" + zeroDiv = "lapack: zero divisor" +) + +func min(m, n int) int { + if m < n { + return m + } + return n +} + +func max(m, n int) int { + if m < n { + return n + } + return m +} + +// checkMatrix verifies the parameters of a matrix input. +// Copied from lapack/native. Keep in sync. +func checkMatrix(m, n int, a []float64, lda int) { + if m < 0 { + panic("lapack: has negative number of rows") + } + if n < 0 { + panic("lapack: has negative number of columns") + } + if lda < n { + panic("lapack: stride less than number of columns") + } + if len(a) < (m-1)*lda+n { + panic("lapack: insufficient matrix slice length") + } +} + +// checkVector verifies the parameters of a vector input. +// Copied from lapack/native. Keep in sync. +func checkVector(n int, v []float64, inc int) { + if n < 0 { + panic("lapack: negative vector length") + } + if (inc > 0 && (n-1)*inc >= len(v)) || (inc < 0 && (1-n)*inc >= len(v)) { + panic("lapack: insufficient vector slice length") + } +} + +// Implementation is the cgo-based C implementation of LAPACK routines. +type Implementation struct{} + +var _ lapack.Float64 = Implementation{} + +// Dgeqp3 computes a QR factorization with column pivoting of the +// m×n matrix A: A*P = Q*R using Level 3 BLAS. +// +// The matrix Q is represented as a product of elementary reflectors +// Q = H_0 H_1 . . . H_{k-1}, where k = min(m,n). +// Each H_i has the form +// H_i = I - tau * v * v^T +// where tau and v are real vectors with v[0:i-1] = 0 and v[i] = 1; +// v[i:m] is stored on exit in A[i:m, i], and tau in tau[i]. +// +// jpvt specifies a column pivot to be applied to A. If +// jpvt[j] is at least zero, the jth column of A is permuted +// to the front of A*P (a leading column), if jpvt[j] is -1 +// the jth column of A is a free column. If jpvt[j] < -1, Dgeqp3 +// will panic. On return, jpvt holds the permutation that was +// applied; the jth column of A*P was the jpvt[j] column of A. +// jpvt must have length n or Dgeqp3 will panic. +// +// tau holds the scalar factors of the elementary reflectors. +// It must have length min(m, n), otherwise Dgeqp3 will panic. +// +// work must have length at least max(1,lwork), and lwork must be at least +// 3*n+1, otherwise Dgeqp3 will panic. For optimal performance lwork must +// be at least 2*n+(n+1)*nb, where nb is the optimal blocksize. On return, +// work[0] will contain the optimal value of lwork. +// +// If lwork == -1, instead of performing Dgeqp3, only the optimal value of lwork +// will be stored in work[0]. +// +// Dgeqp3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgeqp3(m, n int, a []float64, lda int, jpvt []int, tau, work []float64, lwork int) { + checkMatrix(m, n, a, lda) + if len(jpvt) != n { + panic(badIpiv) + } + if len(tau) != min(m, n) { + panic(badTau) + } + if len(work) < max(1, lwork) { + panic(badWork) + } + + // Don't update jpvt if querying lwkopt. + if lwork == -1 { + lapacke.Dgeqp3(m, n, a, lda, nil, nil, work, -1) + return + } + + jpvt32 := make([]int32, len(jpvt)) + for i, v := range jpvt { + v++ + if v != int(int32(v)) || v < 0 || n < v { + panic("lapack: jpvt element out of range") + } + jpvt32[i] = int32(v) + } + + lapacke.Dgeqp3(m, n, a, lda, jpvt32, tau, work, lwork) + + for i, v := range jpvt32 { + jpvt[i] = int(v - 1) + } +} + +// Dgerqf computes an RQ factorization of the m×n matrix A, +// A = R * Q. +// On exit, if m <= n, the upper triangle of the subarray +// A[0:m, n-m:n] contains the m×m upper triangular matrix R. +// If m >= n, the elements on and above the (m-n)-th subdiagonal +// contain the m×n upper trapezoidal matrix R. +// The remaining elements, with tau, represent the +// orthogonal matrix Q as a product of min(m,n) elementary +// reflectors. +// +// The matrix Q is represented as a product of elementary reflectors +// Q = H_0 H_1 . . . H_{min(m,n)-1}. +// Each H(i) has the form +// H_i = I - tau_i * v * v^T +// where v is a vector with v[0:n-k+i-1] stored in A[m-k+i, 0:n-k+i-1], +// v[n-k+i:n] = 0 and v[n-k+i] = 1. +// +// tau must have length min(m,n), work must have length max(1, lwork), +// and lwork must be -1 or at least max(1, m), otherwise Dgerqf will panic. +// On exit, work[0] will contain the optimal length for work. +// +// Dgerqf is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgerqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(m, n, a, lda) + + if len(work) < max(1, lwork) { + panic(shortWork) + } + if lwork != -1 && lwork < max(1, m) { + panic(badWork) + } + + k := min(m, n) + if len(tau) != k { + panic(badTau) + } + + lapacke.Dgerqf(m, n, a, lda, tau, work, lwork) +} + +// Dlacn2 estimates the 1-norm of an n×n matrix A using sequential updates with +// matrix-vector products provided externally. +// +// Dlacn2 is called sequentially and it returns the value of est and kase to be +// used on the next call. +// On the initial call, kase must be 0. +// In between calls, x must be overwritten by +// A * X if kase was returned as 1, +// A^T * X if kase was returned as 2, +// and all other parameters must not be changed. +// On the final return, kase is returned as 0, v contains A*W where W is a +// vector, and est = norm(V)/norm(W) is a lower bound for 1-norm of A. +// +// v, x, and isgn must all have length n and n must be at least 1, otherwise +// Dlacn2 will panic. isave is used for temporary storage. +// +// Dlacn2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlacn2(n int, v, x []float64, isgn []int, est float64, kase int, isave *[3]int) (float64, int) { + if n < 1 { + panic("lapack: non-positive n") + } + checkVector(n, x, 1) + checkVector(n, v, 1) + if len(isgn) < n { + panic("lapack: insufficient isgn length") + } + if isave[0] < 0 || isave[0] > 5 { + panic("lapack: bad isave value") + } + if isave[0] == 0 && kase != 0 { + panic("lapack: bad isave value") + } + + isgn32 := make([]int32, n) + for i, v := range isgn { + isgn32[i] = int32(v) + } + pest := []float64{est} + // Save one allocation by putting isave and kase into the same slice. + isavekase := []int32{int32(isave[0]), int32(isave[1]), int32(isave[2]), int32(kase)} + lapacke.Dlacn2(n, v, x, isgn32, pest, isavekase[3:], isavekase[:3]) + for i, v := range isgn32 { + isgn[i] = int(v) + } + isave[0] = int(isavekase[0]) + isave[1] = int(isavekase[1]) + isave[2] = int(isavekase[2]) + + return pest[0], int(isavekase[3]) +} + +// Dlacpy copies the elements of A specified by uplo into B. Uplo can specify +// a triangular portion with blas.Upper or blas.Lower, or can specify all of the +// elemest with blas.All. +func (impl Implementation) Dlacpy(uplo blas.Uplo, m, n int, a []float64, lda int, b []float64, ldb int) { + checkMatrix(m, n, a, lda) + checkMatrix(m, n, b, ldb) + lapacke.Dlacpy(uplo, m, n, a, lda, b, ldb) +} + +// Dlapmt rearranges the columns of the m×n matrix X as specified by the +// permutation k_0, k_1, ..., k_n-1 of the integers 0, ..., n-1. +// +// If forward is true a forward permutation is performed: +// +// X[0:m, k[j]] is moved to X[0:m, j] for j = 0, 1, ..., n-1. +// +// otherwise a backward permutation is performed: +// +// X[0:m, j] is moved to X[0:m, k[j]] for j = 0, 1, ..., n-1. +// +// k must have length n, otherwise Dlapmt will panic. k is zero-indexed. +func (impl Implementation) Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int) { + checkMatrix(m, n, x, ldx) + if len(k) != n { + panic(badKperm) + } + + if n <= 1 { + return + } + + var forwrd int32 + if forward { + forwrd = 1 + } + k32 := make([]int32, len(k)) + for i, v := range k { + v++ // Convert to 1-based indexing. + if v != int(int32(v)) { + panic("lapack: k element out of range") + } + k32[i] = int32(v) + } + + lapacke.Dlapmt(forwrd, m, n, x, ldx, k32) +} + +// Dlapy2 is the LAPACK version of math.Hypot. +// +// Dlapy2 is an internal routine. It is exported for testing purposes. +func (Implementation) Dlapy2(x, y float64) float64 { + return lapacke.Dlapy2(x, y) +} + +// Dlarfb applies a block reflector to a matrix. +// +// In the call to Dlarfb, the mxn c is multiplied by the implicitly defined matrix h as follows: +// c = h * c if side == Left and trans == NoTrans +// c = c * h if side == Right and trans == NoTrans +// c = h^T * c if side == Left and trans == Trans +// c = c * h^T if side == Right and trans == Trans +// h is a product of elementary reflectors. direct sets the direction of multiplication +// h = h_1 * h_2 * ... * h_k if direct == Forward +// h = h_k * h_k-1 * ... * h_1 if direct == Backward +// The combination of direct and store defines the orientation of the elementary +// reflectors. In all cases the ones on the diagonal are implicitly represented. +// +// If direct == lapack.Forward and store == lapack.ColumnWise +// V = [ 1 ] +// [v1 1 ] +// [v1 v2 1] +// [v1 v2 v3] +// [v1 v2 v3] +// If direct == lapack.Forward and store == lapack.RowWise +// V = [ 1 v1 v1 v1 v1] +// [ 1 v2 v2 v2] +// [ 1 v3 v3] +// If direct == lapack.Backward and store == lapack.ColumnWise +// V = [v1 v2 v3] +// [v1 v2 v3] +// [ 1 v2 v3] +// [ 1 v3] +// [ 1] +// If direct == lapack.Backward and store == lapack.RowWise +// V = [v1 v1 1 ] +// [v2 v2 v2 1 ] +// [v3 v3 v3 v3 1] +// An elementary reflector can be explicitly constructed by extracting the +// corresponding elements of v, placing a 1 where the diagonal would be, and +// placing zeros in the remaining elements. +// +// t is a k×k matrix containing the block reflector, and this function will panic +// if t is not of sufficient size. See Dlarft for more information. +// +// work is a temporary storage matrix with stride ldwork. +// work must be of size at least n×k side == Left and m×k if side == Right, and +// this function will panic if this size is not met. +// +// Dlarfb is an internal routine. It is exported for testing purposes. +func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack.Direct, store lapack.StoreV, m, n, k int, v []float64, ldv int, t []float64, ldt int, c []float64, ldc int, work []float64, ldwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.ColumnWise && store != lapack.RowWise { + panic(badStore) + } + checkMatrix(m, n, c, ldc) + if k < 0 { + panic(kLT0) + } + checkMatrix(k, k, t, ldt) + nv := m + nw := n + if side == blas.Right { + nv = n + nw = m + } + if store == lapack.ColumnWise { + checkMatrix(nv, k, v, ldv) + } else { + checkMatrix(k, nv, v, ldv) + } + // TODO(vladimir-ch): Replace the following two lines with + // checkMatrix(nw, k, work, ldwork) + // if and when the issue + // https://github.com/Reference-LAPACK/lapack/issues/37 + // has been resolved. + ldwork = nw + work = make([]float64, ldwork*k) + + lapacke.Dlarfb(side, trans, byte(direct), byte(store), m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork) +} + +// Dlarfg generates an elementary reflector for a Householder matrix. It creates +// a real elementary reflector of order n such that +// H * (alpha) = (beta) +// ( x) ( 0) +// H^T * H = I +// H is represented in the form +// H = 1 - tau * (1; v) * (1 v^T) +// where tau is a real scalar. +// +// On entry, x contains the vector x, on exit it contains v. +// +// Dlarfg is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlarfg(n int, alpha float64, x []float64, incX int) (beta, tau float64) { + if n < 0 { + panic(nLT0) + } + if n <= 1 { + return alpha, 0 + } + checkVector(n-1, x, incX) + _alpha := []float64{alpha} + _tau := []float64{0} + lapacke.Dlarfg(n, _alpha, x, incX, _tau) + return _alpha[0], _tau[0] +} + +// Dlarft forms the triangular factor T of a block reflector H, storing the answer +// in t. +// H = I - V * T * V^T if store == lapack.ColumnWise +// H = I - V^T * T * V if store == lapack.RowWise +// H is defined by a product of the elementary reflectors where +// H = H_0 * H_1 * ... * H_{k-1} if direct == lapack.Forward +// H = H_{k-1} * ... * H_1 * H_0 if direct == lapack.Backward +// +// t is a k×k triangular matrix. t is upper triangular if direct = lapack.Forward +// and lower triangular otherwise. This function will panic if t is not of +// sufficient size. +// +// store describes the storage of the elementary reflectors in v. Please see +// Dlarfb for a description of layout. +// +// tau contains the scalar factors of the elementary reflectors H_i. +// +// Dlarft is an internal routine. It is exported for testing purposes. +func (Implementation) Dlarft(direct lapack.Direct, store lapack.StoreV, n, k int, + v []float64, ldv int, tau []float64, t []float64, ldt int) { + if n == 0 { + return + } + if n < 0 || k < 0 { + panic(negDimension) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.RowWise && store != lapack.ColumnWise { + panic(badStore) + } + if len(tau) < k { + panic(badTau) + } + checkMatrix(k, k, t, ldt) + + lapacke.Dlarft(byte(direct), byte(store), n, k, v, ldv, tau, t, ldt) +} + +// Dlange computes the matrix norm of the general m×n matrix a. The input norm +// specifies the norm computed. +// lapack.MaxAbs: the maximum absolute value of an element. +// lapack.MaxColumnSum: the maximum column sum of the absolute values of the entries. +// lapack.MaxRowSum: the maximum row sum of the absolute values of the entries. +// lapack.NormFrob: the square root of the sum of the squares of the entries. +// If norm == lapack.MaxColumnSum, work must be of length n, and this function will panic otherwise. +// There are no restrictions on work for the other matrix norms. +func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64, lda int, work []float64) float64 { + checkMatrix(m, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if norm == lapack.MaxColumnSum && len(work) < n { + panic(badWork) + } + return lapacke.Dlange(byte(norm), m, n, a, lda, work) +} + +// Dlansy computes the specified norm of an n×n symmetric matrix. If +// norm == lapack.MaxColumnSum or norm == lapackMaxRowSum work must have length +// at least n, otherwise work is unused. +func (impl Implementation) Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 { + checkMatrix(n, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if (norm == lapack.MaxColumnSum || norm == lapack.MaxRowSum) && len(work) < n { + panic(badWork) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + return lapacke.Dlansy(byte(norm), uplo, n, a, lda, work) +} + +// Dlantr computes the specified norm of an m×n trapezoidal matrix A. If +// norm == lapack.MaxColumnSum work must have length at least n, otherwise work +// is unused. +func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64 { + checkMatrix(m, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.Unit && diag != blas.NonUnit { + panic(badDiag) + } + if norm == lapack.MaxColumnSum && len(work) < n { + panic(badWork) + } + return lapacke.Dlantr(byte(norm), uplo, diag, m, n, a, lda, work) +} + +// Dlarfx applies an elementary reflector H to a real m×n matrix C, from either +// the left or the right, with loop unrolling when the reflector has order less +// than 11. +// +// H is represented in the form +// H = I - tau * v * v^T, +// where tau is a real scalar and v is a real vector. If tau = 0, then H is +// taken to be the identity matrix. +// +// v must have length equal to m if side == blas.Left, and equal to n if side == +// blas.Right, otherwise Dlarfx will panic. +// +// c and ldc represent the m×n matrix C. On return, C is overwritten by the +// matrix H * C if side == blas.Left, or C * H if side == blas.Right. +// +// work must have length at least n if side == blas.Left, and at least m if side +// == blas.Right, otherwise Dlarfx will panic. work is not referenced if H has +// order < 11. +func (impl Implementation) Dlarfx(side blas.Side, m, n int, v []float64, tau float64, c []float64, ldc int, work []float64) { + checkMatrix(m, n, c, ldc) + switch side { + case blas.Left: + checkVector(m, v, 1) + if len(work) < n && m > 10 { + panic(badWork) + } + case blas.Right: + checkVector(n, v, 1) + if len(work) < m && n > 10 { + panic(badWork) + } + default: + panic(badSide) + } + + lapacke.Dlarfx(side, m, n, v, tau, c, ldc, work) +} + +// Dlascl multiplies an m×n matrix by the scalar cto/cfrom. +// +// cfrom must not be zero, and cto and cfrom must not be NaN, otherwise Dlascl +// will panic. +// +// Dlascl is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlascl(kind lapack.MatrixType, kl, ku int, cfrom, cto float64, m, n int, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if cfrom == 0 { + panic(zeroDiv) + } + if math.IsNaN(cfrom) || math.IsNaN(cto) { + panic(nanScale) + } + lapacke.Dlascl(byte(kind), kl, ku, cfrom, cto, m, n, a, lda) +} + +// Dlaset sets the off-diagonal elements of A to alpha, and the diagonal +// elements to beta. If uplo == blas.Upper, only the elements in the upper +// triangular part are set. If uplo == blas.Lower, only the elements in the +// lower triangular part are set. If uplo is otherwise, all of the elements of A +// are set. +// +// Dlaset is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaset(uplo blas.Uplo, m, n int, alpha, beta float64, a []float64, lda int) { + checkMatrix(m, n, a, lda) + lapacke.Dlaset(uplo, m, n, alpha, beta, a, lda) +} + +// Dlasrt sorts the numbers in the input slice d. If s == lapack.SortIncreasing, +// the elements are sorted in increasing order. If s == lapack.SortDecreasing, +// the elements are sorted in decreasing order. For other values of s Dlasrt +// will panic. +// +// Dlasrt is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasrt(s lapack.Sort, n int, d []float64) { + checkVector(n, d, 1) + switch s { + default: + panic(badSort) + case lapack.SortIncreasing, lapack.SortDecreasing: + } + lapacke.Dlasrt(byte(s), n, d[:n]) +} + +// Dlaswp swaps the rows k1 to k2 of a rectangular matrix A according to the +// indices in ipiv so that row k is swapped with ipiv[k]. +// +// n is the number of columns of A and incX is the increment for ipiv. If incX +// is 1, the swaps are applied from k1 to k2. If incX is -1, the swaps are +// applied in reverse order from k2 to k1. For other values of incX Dlaswp will +// panic. ipiv must have length k2+1, otherwise Dlaswp will panic. +// +// The indices k1, k2, and the elements of ipiv are zero-based. +// +// Dlaswp is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaswp(n int, a []float64, lda, k1, k2 int, ipiv []int, incX int) { + switch { + case n < 0: + panic(nLT0) + case k2 < 0: + panic(badK2) + case k1 < 0 || k2 < k1: + panic(badK1) + case len(ipiv) != k2+1: + panic(badIpiv) + case incX != 1 && incX != -1: + panic(absIncNotOne) + } + + ipiv32 := make([]int32, len(ipiv)) + for i, v := range ipiv { + ipiv32[i] = int32(v + 1) + } + lapacke.Dlaswp(n, a, lda, k1+1, k2+1, ipiv32, incX) +} + +// Dpotrf computes the Cholesky decomposition of the symmetric positive definite +// matrix a. If ul == blas.Upper, then a is stored as an upper-triangular matrix, +// and a = U U^T is stored in place into a. If ul == blas.Lower, then a = L L^T +// is computed and stored in-place into a. If a is not positive definite, false +// is returned. This is the blocked version of the algorithm. +func (impl Implementation) Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) { + // ul is checked in lapacke.Dpotrf. + if n < 0 { + panic(nLT0) + } + if lda < n { + panic(badLdA) + } + if n == 0 { + return true + } + return lapacke.Dpotrf(ul, n, a, lda) +} + +// Dgebal balances an n×n matrix A. Balancing consists of two stages, permuting +// and scaling. Both steps are optional and depend on the value of job. +// +// Permuting consists of applying a permutation matrix P such that the matrix +// that results from P^T*A*P takes the upper block triangular form +// [ T1 X Y ] +// P^T A P = [ 0 B Z ], +// [ 0 0 T2 ] +// where T1 and T2 are upper triangular matrices and B contains at least one +// nonzero off-diagonal element in each row and column. The indices ilo and ihi +// mark the starting and ending columns of the submatrix B. The eigenvalues of A +// isolated in the first 0 to ilo-1 and last ihi+1 to n-1 elements on the +// diagonal can be read off without any roundoff error. +// +// Scaling consists of applying a diagonal similarity transformation D such that +// D^{-1}*B*D has the 1-norm of each row and its corresponding column nearly +// equal. The output matrix is +// [ T1 X*D Y ] +// [ 0 inv(D)*B*D inv(D)*Z ]. +// [ 0 0 T2 ] +// Scaling may reduce the 1-norm of the matrix, and improve the accuracy of +// the computed eigenvalues and/or eigenvectors. +// +// job specifies the operations that will be performed on A. +// If job is lapack.None, Dgebal sets scale[i] = 1 for all i and returns ilo=0, ihi=n-1. +// If job is lapack.Permute, only permuting will be done. +// If job is lapack.Scale, only scaling will be done. +// If job is lapack.PermuteScale, both permuting and scaling will be done. +// +// On return, if job is lapack.Permute or lapack.PermuteScale, it will hold that +// A[i,j] == 0, for i > j and j ∈ {0, ..., ilo-1, ihi+1, ..., n-1}. +// If job is lapack.None or lapack.Scale, or if n == 0, it will hold that +// ilo == 0 and ihi == n-1. +// +// On return, scale will contain information about the permutations and scaling +// factors applied to A. If π(j) denotes the index of the column interchanged +// with column j, and D[j,j] denotes the scaling factor applied to column j, +// then +// scale[j] == π(j), for j ∈ {0, ..., ilo-1, ihi+1, ..., n-1}, +// == D[j,j], for j ∈ {ilo, ..., ihi}. +// scale must have length equal to n, otherwise Dgebal will panic. +// +// Dgebal is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebal(job lapack.Job, n int, a []float64, lda int, scale []float64) (ilo, ihi int) { + switch job { + default: + panic(badJob) + case lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale: + } + checkMatrix(n, n, a, lda) + if len(scale) != n { + panic("lapack: bad length of scale") + } + + ilo32 := make([]int32, 1) + ihi32 := make([]int32, 1) + lapacke.Dgebal(job, n, a, lda, ilo32, ihi32, scale) + ilo = int(ilo32[0]) - 1 + ihi = int(ihi32[0]) - 1 + for j := 0; j < ilo; j++ { + scale[j]-- + } + for j := ihi + 1; j < n; j++ { + scale[j]-- + } + return ilo, ihi +} + +// Dgebak transforms an n×m matrix V as +// V = P D V, if side == blas.Right, +// V = P D^{-1} V, if side == blas.Left, +// where P and D are n×n permutation and scaling matrices, respectively, +// implicitly represented by job, scale, ilo and ihi as returned by Dgebal. +// +// Typically, columns of the matrix V contain the right or left (determined by +// side) eigenvectors of the balanced matrix output by Dgebal, and Dgebak forms +// the eigenvectors of the original matrix. +// +// Dgebak is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebak(job lapack.Job, side lapack.EVSide, n, ilo, ihi int, scale []float64, m int, v []float64, ldv int) { + switch job { + default: + panic(badJob) + case lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale: + } + var bside blas.Side + switch side { + default: + panic(badSide) + case lapack.LeftEV: + bside = blas.Left + case lapack.RightEV: + bside = blas.Right + } + checkMatrix(n, m, v, ldv) + switch { + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + } + + // Convert permutation indices to 1-based. + for j := 0; j < ilo; j++ { + scale[j]++ + } + for j := ihi + 1; j < n; j++ { + scale[j]++ + } + lapacke.Dgebak(job, bside, n, ilo+1, ihi+1, scale, m, v, ldv) + // Convert permutation indices back to 0-based. + for j := 0; j < ilo; j++ { + scale[j]-- + } + for j := ihi + 1; j < n; j++ { + scale[j]-- + } +} + +// Dbdsqr performs a singular value decomposition of a real n×n bidiagonal matrix. +// +// The SVD of the bidiagonal matrix B is +// B = Q * S * P^T +// where S is a diagonal matrix of singular values, Q is an orthogonal matrix of +// left singular vectors, and P is an orthogonal matrix of right singular vectors. +// +// Q and P are only computed if requested. If left singular vectors are requested, +// this routine returns U * Q instead of Q, and if right singular vectors are +// requested P^T * VT is returned instead of P^T. +// +// Frequently Dbdsqr is used in conjunction with Dgebrd which reduces a general +// matrix A into bidiagonal form. In this case, the SVD of A is +// A = (U * Q) * S * (P^T * VT) +// +// This routine may also compute Q^T * C. +// +// d and e contain the elements of the bidiagonal matrix b. d must have length at +// least n, and e must have length at least n-1. Dbdsqr will panic if there is +// insufficient length. On exit, D contains the singular values of B in decreasing +// order. +// +// VT is a matrix of size n×ncvt whose elements are stored in vt. The elements +// of vt are modified to contain P^T * VT on exit. VT is not used if ncvt == 0. +// +// U is a matrix of size nru×n whose elements are stored in u. The elements +// of u are modified to contain U * Q on exit. U is not used if nru == 0. +// +// C is a matrix of size n×ncc whose elements are stored in c. The elements +// of c are modified to contain Q^T * C on exit. C is not used if ncc == 0. +// +// work contains temporary storage and must have length at least 4*n. Dbdsqr +// will panic if there is insufficient working memory. +// +// Dbdsqr returns whether the decomposition was successful. +func (impl Implementation) Dbdsqr(uplo blas.Uplo, n, ncvt, nru, ncc int, d, e, vt []float64, ldvt int, u []float64, ldu int, c []float64, ldc int, work []float64) (ok bool) { + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if ncvt != 0 { + checkMatrix(n, ncvt, vt, ldvt) + } + if nru != 0 { + checkMatrix(nru, n, u, ldu) + } + if ncc != 0 { + checkMatrix(n, ncc, c, ldc) + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if len(work) < 4*n { + panic(badWork) + } + // An address must be passed to cgo. If lengths are zero, allocate a slice. + if len(vt) == 0 { + vt = make([]float64, 1) + } + if len(u) == 0 { + vt = make([]float64, 1) + } + if len(c) == 0 { + c = make([]float64, 1) + } + return lapacke.Dbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work) +} + +// Dgebrd reduces a general m×n matrix A to upper or lower bidiagonal form B by +// an orthogonal transformation: +// Q^T * A * P = B. +// The diagonal elements of B are stored in d and the off-diagonal elements are +// stored in e. These are additionally stored along the diagonal of A and the +// off-diagonal of A. If m >= n B is an upper-bidiagonal matrix, and if m < n B +// is a lower-bidiagonal matrix. +// +// The remaining elements of A store the data needed to construct Q and P. +// The matrices Q and P are products of elementary reflectors +// if m >= n, Q = H_0 * H_1 * ... * H_{n-1}, +// P = G_0 * G_1 * ... * G_{n-2}, +// if m < n, Q = H_0 * H_1 * ... * H_{m-2}, +// P = G_0 * G_1 * ... * G_{m-1}, +// where +// H_i = I - tauQ[i] * v_i * v_i^T, +// G_i = I - tauP[i] * u_i * u_i^T. +// +// As an example, on exit the entries of A when m = 6, and n = 5 +// [ d e u1 u1 u1] +// [v1 d e u2 u2] +// [v1 v2 d e u3] +// [v1 v2 v3 d e] +// [v1 v2 v3 v4 d] +// [v1 v2 v3 v4 v5] +// and when m = 5, n = 6 +// [ d u1 u1 u1 u1 u1] +// [ e d u2 u2 u2 u2] +// [v1 e d u3 u3 u3] +// [v1 v2 e d u4 u4] +// [v1 v2 v3 e d u5] +// +// d, tauQ, and tauP must all have length at least min(m,n), and e must have +// length min(m,n) - 1, unless lwork is -1 when there is no check except for +// work which must have a length of at least one. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(1,m,n) or be -1 and this function will panic otherwise. +// Dgebrd is blocked decomposition, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgebrd, +// the optimal work length will be stored into work[0]. +// +// Dgebrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebrd(m, n int, a []float64, lda int, d, e, tauQ, tauP, work []float64, lwork int) { + checkMatrix(m, n, a, lda) + minmn := min(m, n) + if len(d) < minmn { + panic(badD) + } + if len(e) < minmn-1 { + panic(badE) + } + if len(tauQ) < minmn { + panic(badTauQ) + } + if len(tauP) < minmn { + panic(badTauP) + } + if lwork != -1 && lwork < max(1, max(m, n)) { + panic(badWork) + } + if len(work) < max(1, lwork) { + panic(badWork) + } + + lapacke.Dgebrd(m, n, a, lda, d, e, tauQ, tauP, work, lwork) +} + +// Dgecon estimates the reciprocal of the condition number of the n×n matrix A +// given the LU decomposition of the matrix. The condition number computed may +// be based on the 1-norm or the ∞-norm. +// +// The slice a contains the result of the LU decomposition of A as computed by Dgetrf. +// +// anorm is the corresponding 1-norm or ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 4*n and Dgecon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dgecon will panic otherwise. +// Elements of iwork must fit within the int32 type or Dgecon will panic. +func (impl Implementation) Dgecon(norm lapack.MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 { + checkMatrix(n, n, a, lda) + if norm != lapack.MaxColumnSum && norm != lapack.MaxRowSum { + panic("bad norm") + } + if len(work) < 4*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + rcond := make([]float64, 1) + _iwork := make([]int32, len(iwork)) + for i, v := range iwork { + if v != int(int32(v)) { + panic("lapack: iwork element out of range") + } + _iwork[i] = int32(v) + } + lapacke.Dgecon(byte(norm), n, a, lda, anorm, rcond, work, _iwork) + for i, v := range _iwork { + iwork[i] = int(v) + } + return rcond[0] +} + +// Dgelq2 computes the LQ factorization of the m×n matrix A. +// +// In an LQ factorization, L is a lower triangular m×n matrix, and Q is an n×n +// orthonormal matrix. +// +// a is modified to contain the information to construct L and Q. +// The lower triangle of a contains the matrix L. The upper triangular elements +// (not including the diagonal) contain the elementary reflectors. Tau is modified +// to contain the reflector scales. tau must have length of at least k = min(m,n) +// and this function will panic otherwise. +// +// See Dgeqr2 for a description of the elementary reflectors and orthonormal +// matrix Q. Q is constructed as a product of these elementary reflectors, +// Q = H_{k-1} * ... * H_1 * H_0, +// where k = min(m,n). +// +// Work is temporary storage of length at least m and this function will panic otherwise. +func (impl Implementation) Dgelq2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + if len(tau) < min(m, n) { + panic(badTau) + } + if len(work) < m { + panic(badWork) + } + lapacke.Dgelq2(m, n, a, lda, tau, work) +} + +// Dgelqf computes the LQ factorization of the m×n matrix A using a blocked +// algorithm. See the documentation for Dgelq2 for a description of the +// parameters at entry and exit. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m, and this function will panic otherwise. +// Dgelqf is a blocked LQ factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgelqf, +// the optimal work length will be stored into work[0]. +// +// tau must have length at least min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + if lwork == -1 { + work[0] = float64(m) + return + } + checkMatrix(m, n, a, lda) + if len(work) < lwork { + panic(shortWork) + } + if lwork < m { + panic(badWork) + } + if len(tau) < min(m, n) { + panic(badTau) + } + lapacke.Dgelqf(m, n, a, lda, tau, work, lwork) +} + +// Dgeqr2 computes a QR factorization of the m×n matrix A. +// +// In a QR factorization, Q is an m×m orthonormal matrix, and R is an +// upper triangular m×n matrix. +// +// A is modified to contain the information to construct Q and R. +// The upper triangle of a contains the matrix R. The lower triangular elements +// (not including the diagonal) contain the elementary reflectors. Tau is modified +// to contain the reflector scales. tau must have length at least min(m,n), and +// this function will panic otherwise. +// +// The ith elementary reflector can be explicitly constructed by first extracting +// the +// v[j] = 0 j < i +// v[j] = 1 j == i +// v[j] = a[j*lda+i] j > i +// and computing H_i = I - tau[i] * v * v^T. +// +// The orthonormal matrix Q can be constucted from a product of these elementary +// reflectors, Q = H_0 * H_1 * ... * H_{k-1}, where k = min(m,n). +// +// Work is temporary storage of length at least n and this function will panic otherwise. +func (impl Implementation) Dgeqr2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + if len(work) < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + lapacke.Dgeqr2(m, n, a, lda, tau, work) +} + +// Dgeqrf computes the QR factorization of the m×n matrix A using a blocked +// algorithm. See the documentation for Dgeqr2 for a description of the +// parameters at entry and exit. +// +// work is temporary storage, and lwork specifies the usable memory length. +// The length of work must be at least max(1, lwork) and lwork must be -1 +// or at least n, otherwise this function will panic. +// Dgeqrf is a blocked QR factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgeqrf, +// the optimal work length will be stored into work[0]. +// +// tau must have length at least min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + if len(work) < max(1, lwork) { + panic(shortWork) + } + if lwork == -1 { + work[0] = float64(n) + return + } + checkMatrix(m, n, a, lda) + if lwork < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + lapacke.Dgeqrf(m, n, a, lda, tau, work, lwork) +} + +// Dgehrd reduces a block of a real n×n general matrix A to upper Hessenberg +// form H by an orthogonal similarity transformation Q^T * A * Q = H. +// +// The matrix Q is represented as a product of (ihi-ilo) elementary +// reflectors +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// Each H_i has the form +// H_i = I - tau[i] * v * v^T +// where v is a real vector with v[0:i+1] = 0, v[i+1] = 1 and v[ihi+1:n] = 0. +// v[i+2:ihi+1] is stored on exit in A[i+2:ihi+1,i]. +// +// On entry, a contains the n×n general matrix to be reduced. On return, the +// upper triangle and the first subdiagonal of A will be overwritten with the +// upper Hessenberg matrix H, and the elements below the first subdiagonal, with +// the slice tau, represent the orthogonal matrix Q as a product of elementary +// reflectors. +// +// The contents of a are illustrated by the following example, with n = 7, ilo = +// 1 and ihi = 5. +// On entry, +// [ a a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a ] +// on return, +// [ a a h h h h a ] +// [ a h h h h a ] +// [ h h h h h h ] +// [ v1 h h h h h ] +// [ v1 v2 h h h h ] +// [ v1 v2 v3 h h h ] +// [ a ] +// where a denotes an element of the original matrix A, h denotes a +// modified element of the upper Hessenberg matrix H, and vi denotes an +// element of the vector defining H_i. +// +// ilo and ihi determine the block of A that will be reduced to upper Hessenberg +// form. It must hold that 0 <= ilo <= ihi < n if n > 0, and ilo == 0 and ihi == +// -1 if n == 0, otherwise Dgehrd will panic. +// +// On return, tau will contain the scalar factors of the elementary reflectors. +// Elements tau[:ilo] and tau[ihi:] will be set to zero. tau must have length +// equal to n-1 if n > 0, otherwise Dgehrd will panic. +// +// work must have length at least lwork and lwork must be at least max(1,n), +// otherwise Dgehrd will panic. On return, work[0] contains the optimal value of +// lwork. +// +// If lwork == -1, instead of performing Dgehrd, only the optimal value of lwork +// will be stored in work[0]. +// +// Dgehrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgehrd(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) { + switch { + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + case len(work) < lwork: + panic(shortWork) + } + if lwork != -1 { + checkMatrix(n, n, a, lda) + if len(tau) != n-1 && n > 0 { + panic(badTau) + } + } + lapacke.Dgehrd(n, ilo+1, ihi+1, a, lda, tau, work, lwork) +} + +// Dgels finds a minimum-norm solution based on the matrices A and B using the +// QR or LQ factorization. Dgels returns false if the matrix +// A is singular, and true if this solution was successfully found. +// +// The minimization problem solved depends on the input parameters. +// +// 1. If m >= n and trans == blas.NoTrans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// 2. If m < n and trans == blas.NoTrans, Dgels finds the minimum norm solution of +// A * X = B. +// 3. If m >= n and trans == blas.Trans, Dgels finds the minimum norm solution of +// A^T * X = B. +// 4. If m < n and trans == blas.Trans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// Note that the least-squares solutions (cases 1 and 3) perform the minimization +// per column of B. This is not the same as finding the minimum-norm matrix. +// +// The matrix A is a general matrix of size m×n and is modified during this call. +// The input matrix B is of size max(m,n)×nrhs, and serves two purposes. On entry, +// the elements of b specify the input matrix B. B has size m×nrhs if +// trans == blas.NoTrans, and n×nrhs if trans == blas.Trans. On exit, the +// leading submatrix of b contains the solution vectors X. If trans == blas.NoTrans, +// this submatrix is of size n×nrhs, and of size m×nrhs otherwise. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(m,n) + max(m,n,nrhs), and this function will panic +// otherwise. A longer work will enable blocked algorithms to be called. +// In the special case that lwork == -1, work[0] will be set to the optimal working +// length. +func (impl Implementation) Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool { + mn := min(m, n) + if lwork == -1 { + work[0] = float64(mn + max(mn, nrhs)) + return true + } + checkMatrix(m, n, a, lda) + checkMatrix(max(m, n), nrhs, b, ldb) + if len(work) < lwork { + panic(shortWork) + } + if lwork < mn+max(mn, nrhs) { + panic(badWork) + } + return lapacke.Dgels(trans, m, n, nrhs, a, lda, b, ldb, work, lwork) +} + +const noSVDO = "dgesvd: not coded for overwrite" + +// Dgesvd computes the singular value decomposition of the input matrix A. +// +// The singular value decomposition is +// A = U * Sigma * V^T +// where Sigma is an m×n diagonal matrix containing the singular values of A, +// U is an m×m orthogonal matrix and V is an n×n orthogonal matrix. The first +// min(m,n) columns of U and V are the left and right singular vectors of A +// respectively. +// +// jobU and jobVT are options for computing the singular vectors. The behavior +// is as follows +// jobU == lapack.SVDAll All m columns of U are returned in u +// jobU == lapack.SVDInPlace The first min(m,n) columns are returned in u +// jobU == lapack.SVDOverwrite The first min(m,n) columns of U are written into a +// jobU == lapack.SVDNone The columns of U are not computed. +// The behavior is the same for jobVT and the rows of V^T. At most one of jobU +// and jobVT can equal lapack.SVDOverwrite, and Dgesvd will panic otherwise. +// +// On entry, a contains the data for the m×n matrix A. During the call to Dgesvd +// the data is overwritten. On exit, A contains the appropriate singular vectors +// if either job is lapack.SVDOverwrite. +// +// s is a slice of length at least min(m,n) and on exit contains the singular +// values in decreasing order. +// +// u contains the left singular vectors on exit, stored column-wise. If +// jobU == lapack.SVDAll, u is of size m×m. If jobU == lapack.SVDInPlace u is +// of size m×min(m,n). If jobU == lapack.SVDOverwrite or lapack.SVDNone, u is +// not used. +// +// vt contains the left singular vectors on exit, stored rowwise. If +// jobV == lapack.SVDAll, vt is of size n×m. If jobVT == lapack.SVDInPlace vt is +// of size min(m,n)×n. If jobVT == lapack.SVDOverwrite or lapack.SVDNone, vt is +// not used. +// +// work is a slice for storing temporary memory, and lwork is the usable size of +// the slice. lwork must be at least max(5*min(m,n), 3*min(m,n)+max(m,n)). +// If lwork == -1, instead of performing Dgesvd, the optimal work length will be +// stored into work[0]. Dgesvd will panic if the working memory has insufficient +// storage. +// +// Dgesvd returns whether the decomposition successfully completed. +func (impl Implementation) Dgesvd(jobU, jobVT lapack.SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool) { + checkMatrix(m, n, a, lda) + if jobU == lapack.SVDAll { + checkMatrix(m, m, u, ldu) + } else if jobU == lapack.SVDInPlace { + checkMatrix(m, min(m, n), u, ldu) + } + if jobVT == lapack.SVDAll { + checkMatrix(n, n, vt, ldvt) + } else if jobVT == lapack.SVDInPlace { + checkMatrix(min(m, n), n, vt, ldvt) + } + if jobU == lapack.SVDOverwrite && jobVT == lapack.SVDOverwrite { + panic(noSVDO) + } + if len(s) < min(m, n) { + panic(badS) + } + if jobU == lapack.SVDOverwrite || jobVT == lapack.SVDOverwrite { + panic("lapack: SVD not coded to overwrite original matrix") + } + minWork := max(5*min(m, n), 3*min(m, n)+max(m, n)) + if lwork != -1 { + if len(work) < lwork { + panic(badWork) + } + if lwork < minWork { + panic(badWork) + } + } + if lwork == -1 { + work[0] = float64(minWork) + return true + } + return lapacke.Dgesvd(lapack.Job(jobU), lapack.Job(jobVT), m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork) +} + +// Dgetf2 computes the LU decomposition of the m×n matrix A. +// The LU decomposition is a factorization of a into +// A = P * L * U +// where P is a permutation matrix, L is a unit lower triangular matrix, and +// U is a (usually) non-unit upper triangular matrix. On exit, L and U are stored +// in place into a. +// +// ipiv is a permutation vector. It indicates that row i of the matrix was +// changed with ipiv[i]. ipiv must have length at least min(m,n), and will panic +// otherwise. ipiv is zero-indexed. +// +// Dgetf2 returns whether the matrix A is singular. The LU decomposition will +// be computed regardless of the singularity of A, but division by zero +// will occur if the false is returned and the result is used to solve a +// system of equations. +func (Implementation) Dgetf2(m, n int, a []float64, lda int, ipiv []int) (ok bool) { + mn := min(m, n) + checkMatrix(m, n, a, lda) + if len(ipiv) < mn { + panic(badIpiv) + } + ipiv32 := make([]int32, len(ipiv)) + ok = lapacke.Dgetf2(m, n, a, lda, ipiv32) + for i, v := range ipiv32 { + ipiv[i] = int(v) - 1 // Transform to zero-indexed. + } + return ok +} + +// Dgetrf computes the LU decomposition of the m×n matrix A. +// The LU decomposition is a factorization of A into +// A = P * L * U +// where P is a permutation matrix, L is a unit lower triangular matrix, and +// U is a (usually) non-unit upper triangular matrix. On exit, L and U are stored +// in place into a. +// +// ipiv is a permutation vector. It indicates that row i of the matrix was +// changed with ipiv[i]. ipiv must have length at least min(m,n), and will panic +// otherwise. ipiv is zero-indexed. +// +// Dgetrf is the blocked version of the algorithm. +// +// Dgetrf returns whether the matrix A is singular. The LU decomposition will +// be computed regardless of the singularity of A, but division by zero +// will occur if the false is returned and the result is used to solve a +// system of equations. +func (impl Implementation) Dgetrf(m, n int, a []float64, lda int, ipiv []int) (ok bool) { + mn := min(m, n) + checkMatrix(m, n, a, lda) + if len(ipiv) < mn { + panic(badIpiv) + } + ipiv32 := make([]int32, len(ipiv)) + ok = lapacke.Dgetrf(m, n, a, lda, ipiv32) + for i, v := range ipiv32 { + ipiv[i] = int(v) - 1 // Transform to zero-indexed. + } + return ok +} + +// Dgetri computes the inverse of the matrix A using the LU factorization computed +// by Dgetrf. On entry, a contains the PLU decomposition of A as computed by +// Dgetrf and on exit contains the reciprocal of the original matrix. +// +// Dgetri will not perform the inversion if the matrix is singular, and returns +// a boolean indicating whether the inversion was successful. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= n and this function will panic otherwise. +// Dgetri is a blocked inversion, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgetri, +// the optimal work length will be stored into work[0]. +func (impl Implementation) Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) (ok bool) { + checkMatrix(n, n, a, lda) + if len(ipiv) < n { + panic(badIpiv) + } + if lwork == -1 { + work[0] = float64(n) + return true + } + if lwork < n { + panic(badWork) + } + if len(work) < lwork { + panic(badWork) + } + ipiv32 := make([]int32, len(ipiv)) + for i, v := range ipiv { + ipiv32[i] = int32(v) + 1 // Transform to one-indexed. + } + return lapacke.Dgetri(n, a, lda, ipiv32, work, lwork) +} + +// Dgetrs solves a system of equations using an LU factorization. +// The system of equations solved is +// A * X = B if trans == blas.Trans +// A^T * X = B if trans == blas.NoTrans +// A is a general n×n matrix with stride lda. B is a general matrix of size n×nrhs. +// +// On entry b contains the elements of the matrix B. On exit, b contains the +// elements of X, the solution to the system of equations. +// +// a and ipiv contain the LU factorization of A and the permutation indices as +// computed by Dgetrf. ipiv is zero-indexed. +func (impl Implementation) Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int) { + checkMatrix(n, n, a, lda) + checkMatrix(n, nrhs, b, ldb) + if len(ipiv) < n { + panic(badIpiv) + } + ipiv32 := make([]int32, len(ipiv)) + for i, v := range ipiv { + ipiv32[i] = int32(v) + 1 // Transform to one-indexed. + } + lapacke.Dgetrs(trans, n, nrhs, a, lda, ipiv32, b, ldb) +} + +// Dggsvd3 computes the generalized singular value decomposition (GSVD) +// of an m×n matrix A and p×n matrix B: +// U^T*A*Q = D1*[ 0 R ] +// +// V^T*B*Q = D2*[ 0 R ] +// where U, V and Q are orthogonal matrices. +// +// Dggsvd3 returns k and l, the dimensions of the sub-blocks. k+l +// is the effective numerical rank of the (m+p)×n matrix [ A^T B^T ]^T. +// R is a (k+l)×(k+l) nonsingular upper triangular matrix, D1 and +// D2 are m×(k+l) and p×(k+l) diagonal matrices and of the following +// structures, respectively: +// +// If m-k-l >= 0, +// +// k l +// D1 = k [ I 0 ] +// l [ 0 C ] +// m-k-l [ 0 0 ] +// +// k l +// D2 = l [ 0 S ] +// p-l [ 0 0 ] +// +// n-k-l k l +// [ 0 R ] = k [ 0 R11 R12 ] k +// l [ 0 0 R22 ] l +// +// where +// +// C = diag( alpha_k, ... , alpha_{k+l} ), +// S = diag( beta_k, ... , beta_{k+l} ), +// C^2 + S^2 = I. +// +// R is stored in +// A[0:k+l, n-k-l:n] +// on exit. +// +// If m-k-l < 0, +// +// k m-k k+l-m +// D1 = k [ I 0 0 ] +// m-k [ 0 C 0 ] +// +// k m-k k+l-m +// D2 = m-k [ 0 S 0 ] +// k+l-m [ 0 0 I ] +// p-l [ 0 0 0 ] +// +// n-k-l k m-k k+l-m +// [ 0 R ] = k [ 0 R11 R12 R13 ] +// m-k [ 0 0 R22 R23 ] +// k+l-m [ 0 0 0 R33 ] +// +// where +// C = diag( alpha_k, ... , alpha_m ), +// S = diag( beta_k, ... , beta_m ), +// C^2 + S^2 = I. +// +// R = [ R11 R12 R13 ] is stored in A[1:m, n-k-l+1:n] +// [ 0 R22 R23 ] +// and R33 is stored in +// B[m-k:l, n+m-k-l:n] on exit. +// +// Dggsvd3 computes C, S, R, and optionally the orthogonal transformation +// matrices U, V and Q. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// alpha and beta must have length n or Dggsvd3 will panic. On exit, alpha and +// beta contain the generalized singular value pairs of A and B +// alpha[0:k] = 1, +// beta[0:k] = 0, +// if m-k-l >= 0, +// alpha[k:k+l] = diag(C), +// beta[k:k+l] = diag(S), +// if m-k-l < 0, +// alpha[k:m]= C, alpha[m:k+l]= 0 +// beta[k:m] = S, beta[m:k+l] = 1. +// if k+l < n, +// alpha[k+l:n] = 0 and +// beta[k+l:n] = 0. +// +// On exit, iwork contains the permutation required to sort alpha descending. +// +// iwork must have length n, work must have length at least max(1, lwork), and +// lwork must be -1 or greater than n, otherwise Dggsvd3 will panic. If +// lwork is -1, work[0] holds the optimal lwork on return, but Dggsvd3 does +// not perform the GSVD. +func (impl Implementation) Dggsvd3(jobU, jobV, jobQ lapack.GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool) { + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + switch jobU { + case lapack.GSVDU: + checkMatrix(m, m, u, ldu) + case lapack.GSVDNone: + default: + panic(badGSVDJob + "U") + } + switch jobV { + case lapack.GSVDV: + checkMatrix(p, p, v, ldv) + case lapack.GSVDNone: + default: + panic(badGSVDJob + "V") + } + switch jobQ { + case lapack.GSVDQ: + checkMatrix(n, n, q, ldq) + case lapack.GSVDNone: + default: + panic(badGSVDJob + "Q") + } + + if len(alpha) != n { + panic(badAlpha) + } + if len(beta) != n { + panic(badBeta) + } + + if lwork != -1 && lwork <= n { + panic(badWork) + } + if len(work) < max(1, lwork) { + panic(shortWork) + } + if len(iwork) < n { + panic(badWork) + } + + _k := []int32{0} + _l := []int32{0} + _iwork := make([]int32, len(iwork)) + for i, v := range iwork { + v++ + if v != int(int32(v)) { + panic("lapack: iwork element out of range") + } + _iwork[i] = int32(v) + } + ok = lapacke.Dggsvd3(lapack.Job(jobU), lapack.Job(jobV), lapack.Job(jobQ), m, n, p, _k, _l, a, lda, b, ldb, alpha, beta, u, ldu, v, ldv, q, ldq, work, lwork, _iwork) + for i, v := range _iwork { + iwork[i] = int(v - 1) + } + + return int(_k[0]), int(_l[0]), ok +} + +// Dggsvp3 computes orthogonal matrices U, V and Q such that +// +// n-k-l k l +// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l >= 0; +// l [ 0 0 A23 ] +// m-k-l [ 0 0 0 ] +// +// n-k-l k l +// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l < 0; +// m-k [ 0 0 A23 ] +// +// n-k-l k l +// V^T*B*Q = l [ 0 0 B13 ] +// p-l [ 0 0 0 ] +// +// where the k×k matrix A12 and l×l matrix B13 are non-singular +// upper triangular. A23 is l×l upper triangular if m-k-l >= 0, +// otherwise A23 is (m-k)×l upper trapezoidal. +// +// Dggsvp3 returns k and l, the dimensions of the sub-blocks. k+l +// is the effective numerical rank of the (m+p)×n matrix [ A^T B^T ]^T. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// tola and tolb are the convergence criteria for the Jacobi-Kogbetliantz +// iteration procedure. Generally, they are the same as used in the preprocessing +// step, for example, +// tola = max(m, n)*norm(A)*eps, +// tolb = max(p, n)*norm(B)*eps. +// Where eps is the machine epsilon. +// +// iwork must have length n, work must have length at least max(1, lwork), and +// lwork must be -1 or greater than zero, otherwise Dggsvp3 will panic. +// +// Dggsvp3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, iwork []int, tau, work []float64, lwork int) (k, l int) { + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + wantu := jobU == lapack.GSVDU + if !wantu && jobU != lapack.GSVDNone { + panic(badGSVDJob + "U") + } + if jobU != lapack.GSVDNone { + checkMatrix(m, m, u, ldu) + } + + wantv := jobV == lapack.GSVDV + if !wantv && jobV != lapack.GSVDNone { + panic(badGSVDJob + "V") + } + if jobV != lapack.GSVDNone { + checkMatrix(p, p, v, ldv) + } + + wantq := jobQ == lapack.GSVDQ + if !wantq && jobQ != lapack.GSVDNone { + panic(badGSVDJob + "Q") + } + if jobQ != lapack.GSVDNone { + checkMatrix(n, n, q, ldq) + } + + if len(tau) < n { + panic(badTau) + } + if len(iwork) != n { + panic(badWork) + } + if lwork != -1 && lwork < 1 { + panic(badWork) + } + if len(work) < max(1, lwork) { + panic(shortWork) + } + + _k := []int32{0} + _l := []int32{0} + _iwork := make([]int32, len(iwork)) + for i, v := range iwork { + v++ + if v != int(int32(v)) { + panic("lapack: iwork element out of range") + } + _iwork[i] = int32(v) + } + lapacke.Dggsvp3(lapack.Job(jobU), lapack.Job(jobV), lapack.Job(jobQ), m, p, n, a, lda, b, ldb, tola, tolb, _k, _l, u, ldu, v, ldv, q, ldq, _iwork, tau, work, lwork) + for i, v := range _iwork { + iwork[i] = int(v - 1) + } + + return int(_k[0]), int(_l[0]) +} + +// Dorgbr generates one of the matrices Q or P^T computed by Dgebrd. +// See Dgebrd for the description of Q and P^T. +// +// If vect == lapack.ApplyQ, then a is assumed to have been an m×k matrix and +// Q is of order m. If m >= k, then Dorgbr returns the first n columns of Q +// where m >= n >= k. If m < k, then Dorgbr returns Q as an m×m matrix. +// +// If vect == lapack.ApplyP, then A is assumed to have been a k×n matrix, and +// P^T is of order n. If k < n, then Dorgbr returns the first m rows of P^T, +// where n >= m >= k. If k >= n, then Dorgbr returns P^T as an n×n matrix. +func (impl Implementation) Dorgbr(vect lapack.DecompUpdate, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + mn := min(m, n) + wantq := vect == lapack.ApplyQ + if wantq { + if m < n || n < min(m, k) || m < min(m, k) { + panic(badDims) + } + } else { + if n < m || m < min(n, k) || n < min(n, k) { + panic(badDims) + } + } + if wantq { + checkMatrix(m, k, a, lda) + } else { + checkMatrix(k, n, a, lda) + } + if lwork == -1 { + work[0] = float64(mn) + return + } + if len(work) < lwork { + panic(badWork) + } + if lwork < mn { + panic(badWork) + } + lapacke.Dorgbr(byte(vect), m, n, k, a, lda, tau, work, lwork) +} + +// Dorghr generates an n×n orthogonal matrix Q which is defined as the product +// of ihi-ilo elementary reflectors: +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// +// a and lda represent an n×n matrix that contains the elementary reflectors, as +// returned by Dgehrd. On return, a is overwritten by the n×n orthogonal matrix +// Q. Q will be equal to the identity matrix except in the submatrix +// Q[ilo+1:ihi+1,ilo+1:ihi+1]. +// +// ilo and ihi must have the same values as in the previous call of Dgehrd. It +// must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo = 0, ihi = -1, if n == 0. +// +// tau contains the scalar factors of the elementary reflectors, as returned by +// Dgehrd. tau must have length n-1. +// +// work must have length at least max(1,lwork) and lwork must be at least +// ihi-ilo. For optimum performance lwork must be at least (ihi-ilo)*nb where nb +// is the optimal blocksize. On return, work[0] will contain the optimal value +// of lwork. +// +// If lwork == -1, instead of performing Dorghr, only the optimal value of lwork +// will be stored into work[0]. +// +// If any requirement on input sizes is not met, Dorghr will panic. +// +// Dorghr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorghr(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + nh := ihi - ilo + switch { + case ilo < 0 || max(1, n) <= ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case lwork < max(1, nh) && lwork != -1: + panic(badWork) + case len(work) < max(1, lwork): + panic(shortWork) + } + lapacke.Dorghr(n, ilo+1, ihi+1, a, lda, tau, work, lwork) +} + +// Dorglq generates an m×n matrix Q with orthonormal rows defined by the product +// of elementary reflectors +// Q = H_{k-1} * ... * H_1 * H_0 +// as computed by Dgelqf. Dorglq is the blocked version of Dorgl2 that makes +// greater use of level-3 BLAS routines. +// +// len(tau) >= k, 0 <= k <= n, and 0 <= m <= n. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= m, and the amount of blocking is limited by the usable length. +// If lwork == -1, instead of computing Dorglq the optimal work length is stored +// into work[0]. +// +// Dorglq will panic if the conditions on input values are not met. +// +// Dorglq is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorglq(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + if lwork == -1 { + work[0] = float64(m) + return + } + checkMatrix(m, n, a, lda) + if k < 0 { + panic(kLT0) + } + if k > m { + panic(kGTM) + } + if m > n { + panic(nLTM) + } + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork < m { + panic(badWork) + } + lapacke.Dorglq(m, n, k, a, lda, tau, work, lwork) +} + +// Dorgql generates the m×n matrix Q with orthonormal columns defined as the +// last n columns of a product of k elementary reflectors of order m +// Q = H_{k-1} * ... * H_1 * H_0. +// +// It must hold that +// 0 <= k <= n <= m, +// and Dorgql will panic otherwise. +// +// On entry, the (n-k+i)-th column of A must contain the vector which defines +// the elementary reflector H_i, for i=0,...,k-1, and tau[i] must contain its +// scalar factor. On return, a contains the m×n matrix Q. +// +// tau must have length at least k, and Dorgql will panic otherwise. +// +// work must have length at least max(1,lwork), and lwork must be at least +// max(1,n), otherwise Dorgql will panic. For optimum performance lwork must +// be a sufficiently large multiple of n. +// +// If lwork == -1, instead of computing Dorgql the optimal work length is stored +// into work[0]. +// +// Dorgql is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgql(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + switch { + case n < 0: + panic(nLT0) + case m < n: + panic(mLTN) + case k < 0: + panic(kLT0) + case k > n: + panic(kGTN) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + case len(work) < lwork: + panic(shortWork) + } + if lwork != -1 { + checkMatrix(m, n, a, lda) + if len(tau) < k { + panic(badTau) + } + } + + lapacke.Dorgql(m, n, k, a, lda, tau, work, lwork) +} + +// Dorgqr generates an m×n matrix Q with orthonormal columns defined by the +// product of elementary reflectors +// Q = H_0 * H_1 * ... * H_{k-1} +// as computed by Dgeqrf. Dorgqr is the blocked version of Dorg2r that makes +// greater use of level-3 BLAS routines. +// +// The length of tau must be at least k, and the length of work must be at least n. +// It also must be that 0 <= k <= n and 0 <= n <= m. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= n, and the amount of blocking is limited by the usable +// length. If lwork == -1, instead of computing Dorgqr the optimal work length +// is stored into work[0]. +// +// Dorgqr will panic if the conditions on input values are not met. +// +// Dorgqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + if lwork == -1 { + work[0] = float64(n) + return + } + checkMatrix(m, n, a, lda) + if k < 0 { + panic(kLT0) + } + if k > n { + panic(kGTN) + } + if n > m { + panic(mLTN) + } + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork < n { + panic(badWork) + } + lapacke.Dorgqr(m, n, k, a, lda, tau, work, lwork) +} + +// Dorgtr generates a real orthogonal matrix Q which is defined as the product +// of n-1 elementary reflectors of order n as returned by Dsytrd. +// +// The construction of Q depends on the value of uplo: +// Q = H_{n-1} * ... * H_1 * H_0 if uplo == blas.Upper +// Q = H_0 * H_1 * ... * H_{n-1} if uplo == blas.Lower +// where H_i is constructed from the elementary reflectors as computed by Dsytrd. +// See the documentation for Dsytrd for more information. +// +// tau must have length at least n-1, and Dorgtr will panic otherwise. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= max(1,n-1), and Dorgtr will panic otherwise. The amount of blocking +// is limited by the usable length. +// If lwork == -1, instead of computing Dorgtr the optimal work length is stored +// into work[0]. +// +// Dorgtr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgtr(uplo blas.Uplo, n int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + if len(tau) < n-1 { + panic(badTau) + } + if len(work) < lwork { + panic(badWork) + } + if lwork < n-1 && lwork != -1 { + panic(badWork) + } + upper := uplo == blas.Upper + if !upper && uplo != blas.Lower { + panic(badUplo) + } + lapacke.Dorgtr(uplo, n, a, lda, tau, work, lwork) +} + +// Dormbr applies a multiplicative update to the matrix C based on a +// decomposition computed by Dgebrd. +// +// Dormbr overwrites the m×n matrix C with +// Q * C if vect == lapack.ApplyQ, side == blas.Left, and trans == blas.NoTrans +// C * Q if vect == lapack.ApplyQ, side == blas.Right, and trans == blas.NoTrans +// Q^T * C if vect == lapack.ApplyQ, side == blas.Left, and trans == blas.Trans +// C * Q^T if vect == lapack.ApplyQ, side == blas.Right, and trans == blas.Trans +// +// P * C if vect == lapack.ApplyP, side == blas.Left, and trans == blas.NoTrans +// C * P if vect == lapack.ApplyP, side == blas.Right, and trans == blas.NoTrans +// P^T * C if vect == lapack.ApplyP, side == blas.Left, and trans == blas.Trans +// C * P^T if vect == lapack.ApplyP, side == blas.Right, and trans == blas.Trans +// where P and Q are the orthogonal matrices determined by Dgebrd when reducing +// a matrix A to bidiagonal form: A = Q * B * P^T. See Dgebrd for the +// definitions of Q and P. +// +// If vect == lapack.ApplyQ, A is assumed to have been an nq×k matrix, while if +// vect == lapack.ApplyP, A is assumed to have been a k×nq matrix. nq = m if +// side == blas.Left, while nq = n if side == blas.Right. +// +// tau must have length min(nq,k), and Dormbr will panic otherwise. tau contains +// the elementary reflectors to construct Q or P depending on the value of +// vect. +// +// work must have length at least max(1,lwork), and lwork must be either -1 or +// at least max(1,n) if side == blas.Left, and at least max(1,m) if side == +// blas.Right. For optimum performance lwork should be at least n*nb if side == +// blas.Left, and at least m*nb if side == blas.Right, where nb is the optimal +// block size. On return, work[0] will contain the optimal value of lwork. +// +// If lwork == -1, the function only calculates the optimal value of lwork and +// returns it in work[0]. +// +// Dormbr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dormbr(vect lapack.DecompUpdate, side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.NoTrans && trans != blas.Trans { + panic(badTrans) + } + if vect != lapack.ApplyP && vect != lapack.ApplyQ { + panic(badDecompUpdate) + } + nq := n + nw := m + if side == blas.Left { + nq = m + nw = n + } + if vect == lapack.ApplyQ { + checkMatrix(nq, min(nq, k), a, lda) + } else { + checkMatrix(min(nq, k), nq, a, lda) + } + if len(tau) < min(nq, k) { + panic(badTau) + } + checkMatrix(m, n, c, ldc) + if len(work) < lwork { + panic(shortWork) + } + if lwork < max(1, nw) && lwork != -1 { + panic(badWork) + } + lapacke.Dormbr(byte(vect), side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork) +} + +// Dormhr multiplies an m×n general matrix C with an nq×nq orthogonal matrix Q +// Q * C, if side == blas.Left and trans == blas.NoTrans, +// Q^T * C, if side == blas.Left and trans == blas.Trans, +// C * Q, if side == blas.Right and trans == blas.NoTrans, +// C * Q^T, if side == blas.Right and trans == blas.Trans, +// where nq == m if side == blas.Left and nq == n if side == blas.Right. +// +// Q is defined implicitly as the product of ihi-ilo elementary reflectors, as +// returned by Dgehrd: +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// Q is equal to the identity matrix except in the submatrix +// Q[ilo+1:ihi+1,ilo+1:ihi+1]. +// +// ilo and ihi must have the same values as in the previous call of Dgehrd. It +// must hold that +// 0 <= ilo <= ihi < m, if m > 0 and side == blas.Left, +// ilo = 0 and ihi = -1, if m = 0 and side == blas.Left, +// 0 <= ilo <= ihi < n, if n > 0 and side == blas.Right, +// ilo = 0 and ihi = -1, if n = 0 and side == blas.Right. +// +// a and lda represent an m×m matrix if side == blas.Left and an n×n matrix if +// side == blas.Right. The matrix contains vectors which define the elementary +// reflectors, as returned by Dgehrd. +// +// tau contains the scalar factors of the elementary reflectors, as returned by +// Dgehrd. tau must have length m-1 if side == blas.Left and n-1 if side == +// blas.Right. +// +// c and ldc represent the m×n matrix C. On return, c is overwritten by the +// product with Q. +// +// work must have length at least max(1,lwork), and lwork must be at least +// max(1,n), if side == blas.Left, and max(1,m), if side == blas.Right. For +// optimum performance lwork should be at least n*nb if side == blas.Left and +// m*nb if side == blas.Right, where nb is the optimal block size. On return, +// work[0] will contain the optimal value of lwork. +// +// If lwork == -1, instead of performing Dormhr, only the optimal value of lwork +// will be stored in work[0]. +// +// If any requirement on input sizes is not met, Dormhr will panic. +// +// Dormhr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dormhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + var ( + nq int // The order of Q. + nw int // The minimum length of work. + ) + switch side { + case blas.Left: + nq = m + nw = n + case blas.Right: + nq = n + nw = m + default: + panic(badSide) + } + switch { + case trans != blas.NoTrans && trans != blas.Trans: + panic(badTrans) + case ilo < 0 || max(1, nq) <= ilo: + panic(badIlo) + case ihi < min(ilo, nq-1) || nq <= ihi: + panic(badIhi) + case lwork < max(1, nw) && lwork != -1: + panic(badWork) + case len(work) < max(1, lwork): + panic(shortWork) + } + if lwork != -1 { + checkMatrix(m, n, c, ldc) + checkMatrix(nq, nq, a, lda) + if len(tau) != nq-1 && nq > 0 { + panic(badTau) + } + } + lapacke.Dormhr(side, trans, m, n, ilo+1, ihi+1, a, lda, tau, c, ldc, work, lwork) +} + +// Dormlq multiplies the matrix C by the orthogonal matrix Q defined by the +// slices a and tau. A and tau are as returned from Dgelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, A is a matrix of side k×m, and if side == blas.Right +// A is of size k×n. This uses a blocked algorithm. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m if side == blas.Left and lwork >= n if side == blas.Right, +// and this function will panic otherwise. +// Dormlq uses a block algorithm, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dormlq, +// the optimal work length will be stored into work[0]. +// +// tau contains the Householder scales and must have length at least k, and +// this function will panic otherwise. +func (impl Implementation) Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + left := side == blas.Left + if left { + checkMatrix(k, m, a, lda) + } else { + checkMatrix(k, n, a, lda) + } + checkMatrix(m, n, c, ldc) + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + nw := m + if left { + nw = n + } + if lwork < max(1, nw) && lwork != -1 { + panic(badWork) + } + + lapacke.Dormlq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork) +} + +// Dormqr multiplies an m×n matrix C by an orthogonal matrix Q as +// C = Q * C, if side == blas.Left and trans == blas.NoTrans, +// C = Q^T * C, if side == blas.Left and trans == blas.Trans, +// C = C * Q, if side == blas.Right and trans == blas.NoTrans, +// C = C * Q^T, if side == blas.Right and trans == blas.Trans, +// where Q is defined as the product of k elementary reflectors +// Q = H_0 * H_1 * ... * H_{k-1}. +// +// If side == blas.Left, A is an m×k matrix and 0 <= k <= m. +// If side == blas.Right, A is an n×k matrix and 0 <= k <= n. +// The ith column of A contains the vector which defines the elementary +// reflector H_i and tau[i] contains its scalar factor. tau must have length k +// and Dormqr will panic otherwise. Dgeqrf returns A and tau in the required +// form. +// +// work must have length at least max(1,lwork), and lwork must be at least n if +// side == blas.Left and at least m if side == blas.Right, otherwise Dormqr will +// panic. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= m if side == blas.Left and lwork >= n if side == +// blas.Right, and this function will panic otherwise. Larger values of lwork +// will generally give better performance. On return, work[0] will contain the +// optimal value of lwork. +// +// If lwork is -1, instead of performing Dormqr, the optimal workspace size will +// be stored into work[0]. +func (impl Implementation) Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + var nq, nw int + switch side { + default: + panic(badSide) + case blas.Left: + nq = m + nw = n + case blas.Right: + nq = n + nw = m + } + switch { + case trans != blas.NoTrans && trans != blas.Trans: + panic(badTrans) + case m < 0 || n < 0: + panic(negDimension) + case k < 0 || nq < k: + panic("lapack: invalid value of k") + case len(work) < lwork: + panic(shortWork) + case lwork < max(1, nw) && lwork != -1: + panic(badWork) + } + if lwork != -1 { + checkMatrix(nq, k, a, lda) + checkMatrix(m, n, c, ldc) + if len(tau) != k { + panic(badTau) + } + } + + lapacke.Dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork) +} + +// Dpocon estimates the reciprocal of the condition number of a positive-definite +// matrix A given the Cholesky decomposition of A. The condition number computed +// is based on the 1-norm and the ∞-norm. +// +// anorm is the 1-norm and the ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 3*n and Dpocon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dpocon will panic otherwise. +// Elements of iwork must fit within the int32 type or Dpocon will panic. +func (impl Implementation) Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 { + checkMatrix(n, n, a, lda) + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if len(work) < 3*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + rcond := make([]float64, 1) + _iwork := make([]int32, len(iwork)) + for i, v := range iwork { + if v != int(int32(v)) { + panic("lapack: iwork element out of range") + } + _iwork[i] = int32(v) + } + lapacke.Dpocon(uplo, n, a, lda, anorm, rcond, work, _iwork) + for i, v := range _iwork { + iwork[i] = int(v) + } + return rcond[0] +} + +// Dsteqr computes the eigenvalues and optionally the eigenvectors of a symmetric +// tridiagonal matrix using the implicit QL or QR method. The eigenvectors of a +// full or band symmetric matrix can also be found if Dsytrd, Dsptrd, or Dsbtrd +// have been used to reduce this matrix to tridiagonal form. +// +// d, on entry, contains the diagonal elements of the tridiagonal matrix. On exit, +// d contains the eigenvalues in ascending order. d must have length n and +// Dsteqr will panic otherwise. +// +// e, on entry, contains the off-diagonal elements of the tridiagonal matrix on +// entry, and is overwritten during the call to Dsteqr. e must have length n-1 and +// Dsteqr will panic otherwise. +// +// z, on entry, contains the n×n orthogonal matrix used in the reduction to +// tridiagonal form if compz == lapack.OriginalEV. On exit, if +// compz == lapack.OriginalEV, z contains the orthonormal eigenvectors of the +// original symmetric matrix, and if compz == lapack.TridiagEV, z contains the +// orthonormal eigenvectors of the symmetric tridiagonal matrix. z is not used +// if compz == lapack.None. +// +// work must have length at least max(1, 2*n-2) if the eigenvectors are computed, +// and Dsteqr will panic otherwise. +// +// Dsteqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsteqr(compz lapack.EVComp, n int, d, e, z []float64, ldz int, work []float64) (ok bool) { + if n < 0 { + panic(nLT0) + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if compz != lapack.None && compz != lapack.TridiagEV && compz != lapack.OriginalEV { + panic(badEVComp) + } + if compz != lapack.None { + if len(work) < max(1, 2*n-2) { + panic(badWork) + } + checkMatrix(n, n, z, ldz) + } + + return lapacke.Dsteqr(lapack.Comp(compz), n, d, e, z, ldz, work) +} + +// Dsterf computes all eigenvalues of a symmetric tridiagonal matrix using the +// Pal-Walker-Kahan variant of the QL or QR algorithm. +// +// d contains the diagonal elements of the tridiagonal matrix on entry, and +// contains the eigenvalues in ascending order on exit. d must have length at +// least n, or Dsterf will panic. +// +// e contains the off-diagonal elements of the tridiagonal matrix on entry, and is +// overwritten during the call to Dsterf. e must have length of at least n-1 or +// Dsterf will panic. +// +// Dsterf is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsterf(n int, d, e []float64) (ok bool) { + if n < 0 { + panic(nLT0) + } + if n == 0 { + return true + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + + return lapacke.Dsterf(n, d, e) +} + +// Dsyev computes all eigenvalues and, optionally, the eigenvectors of a real +// symmetric matrix A. +// +// w contains the eigenvalues in ascending order upon return. w must have length +// at least n, and Dsyev will panic otherwise. +// +// On entry, a contains the elements of the symmetric matrix A in the triangular +// portion specified by uplo. If jobz == lapack.ComputeEV a contains the +// orthonormal eigenvectors of A on exit, otherwise on exit the specified +// triangular region is overwritten. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= 3*n-1, and Dsyev will panic otherwise. The amount of blocking is +// limited by the usable length. If lwork == -1, instead of computing Dsyev the +// optimal work length is stored into work[0]. +func (impl Implementation) Dsyev(jobz lapack.EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool) { + checkMatrix(n, n, a, lda) + if lwork == -1 { + work[0] = 3*float64(n) - 1 + return + } + if len(work) < lwork { + panic(badWork) + } + if lwork < 3*n-1 { + panic(badWork) + } + return lapacke.Dsyev(lapack.Job(jobz), uplo, n, a, lda, w, work, lwork) +} + +// Dsytrd reduces a symmetric n×n matrix A to symmetric tridiagonal form by an +// orthogonal similarity transformation +// Q^T * A * Q = T +// where Q is an orthonormal matrix and T is symmetric and tridiagonal. +// +// On entry, a contains the elements of the input matrix in the triangle specified +// by uplo. On exit, the diagonal and sub/super-diagonal are overwritten by the +// corresponding elements of the tridiagonal matrix T. The remaining elements in +// the triangle, along with the array tau, contain the data to construct Q as +// the product of elementary reflectors. +// +// If uplo == blas.Upper, Q is constructed with +// Q = H_{n-2} * ... * H_1 * H_0 +// where +// H_i = I - tau_i * v * v^T +// v is constructed as v[i+1:n] = 0, v[i] = 1, v[0:i-1] is stored in A[0:i-1, i+1]. +// The elements of A are +// [ d e v1 v2 v3] +// [ d e v2 v3] +// [ d e v3] +// [ d e] +// [ e] +// +// If uplo == blas.Lower, Q is constructed with +// Q = H_0 * H_1 * ... * H_{n-2} +// where +// H_i = I - tau_i * v * v^T +// v is constructed as v[0:i+1] = 0, v[i+1] = 1, v[i+2:n] is stored in A[i+2:n, i]. +// The elements of A are +// [ d ] +// [ e d ] +// [v0 e d ] +// [v0 v1 e d ] +// [v0 v1 v2 e d] +// +// d must have length n, and e and tau must have length n-1. Dsytrd will panic if +// these conditions are not met. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= 1, and Dsytrd will panic otherwise. The amount of blocking is +// limited by the usable length. +// If lwork == -1, instead of computing Dsytrd the optimal work length is stored +// into work[0]. +// +// Dsytrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsytrd(uplo blas.Uplo, n int, a []float64, lda int, d, e, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if len(tau) < n-1 { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork != -1 && lwork < 1 { + panic(badWork) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + + lapacke.Dsytrd(uplo, n, a, lda, d, e, tau, work, lwork) +} + +// Dtrcon estimates the reciprocal of the condition number of a triangular matrix A. +// The condition number computed may be based on the 1-norm or the ∞-norm. +// +// work is a temporary data slice of length at least 3*n and Dtrcon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dtrcon will panic otherwise. +// Elements of iwork must fit within the int32 type or Dtrcon will panic. +func (impl Implementation) Dtrcon(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64 { + if norm != lapack.MaxColumnSum && norm != lapack.MaxRowSum { + panic(badNorm) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.NonUnit && diag != blas.Unit { + panic(badDiag) + } + if len(work) < 3*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + rcond := []float64{0} + _iwork := make([]int32, len(iwork)) + for i, v := range iwork { + if v != int(int32(v)) { + panic("lapack: iwork element out of range") + } + _iwork[i] = int32(v) + } + lapacke.Dtrcon(byte(norm), uplo, diag, n, a, lda, rcond, work, _iwork) + for i, v := range _iwork { + iwork[i] = int(v) + } + return rcond[0] +} + +// Dtrexc reorders the real Schur factorization of a n×n real matrix +// A = Q*T*Q^T +// so that the diagonal block of T with row index ifst is moved to row ilst. +// +// On entry, T must be in Schur canonical form, that is, block upper triangular +// with 1×1 and 2×2 diagonal blocks; each 2×2 diagonal block has its diagonal +// elements equal and its off-diagonal elements of opposite sign. +// +// On return, T will be reordered by an orthogonal similarity transformation Z +// as Z^T*T*Z, and will be again in Schur canonical form. +// +// If compq is lapack.UpdateSchur, on return the matrix Q of Schur vectors will be +// updated by postmultiplying it with Z. +// If compq is lapack.None, the matrix Q is not referenced and will not be +// updated. +// For other values of compq Dtrexc will panic. +// +// ifst and ilst specify the reordering of the diagonal blocks of T. The block +// with row index ifst is moved to row ilst, by a sequence of transpositions +// between adjacent blocks. +// +// If ifst points to the second row of a 2×2 block, ifstOut will point to the +// first row, otherwise it will be equal to ifst. +// +// ilstOut will point to the first row of the block in its final position. If ok +// is true, ilstOut may differ from ilst by +1 or -1. +// +// It must hold that +// 0 <= ifst < n, and 0 <= ilst < n, +// otherwise Dtrexc will panic. +// +// If ok is false, two adjacent blocks were too close to swap because the +// problem is very ill-conditioned. T may have been partially reordered, and +// ilstOut will point to the first row of the block at the position to which it +// has been moved. +// +// work must have length at least n, otherwise Dtrexc will panic. +// +// Dtrexc is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtrexc(compq lapack.EVComp, n int, t []float64, ldt int, q []float64, ldq int, ifst, ilst int, work []float64) (ifstOut, ilstOut int, ok bool) { + checkMatrix(n, n, t, ldt) + switch compq { + default: + panic("lapack: bad value of compq") + case lapack.None: + // q is not referenced but LAPACKE checks that ldq >= n always. + q = nil + ldq = max(1, n) + case lapack.UpdateSchur: + checkMatrix(n, n, q, ldq) + } + if (ifst < 0 || n <= ifst) && n > 0 { + panic("lapack: ifst out of range") + } + if (ilst < 0 || n <= ilst) && n > 0 { + panic("lapack: ilst out of range") + } + if len(work) < n { + panic(badWork) + } + + // Quick return if possible. + if n <= 1 { + return ifst, ilst, true + } + + ifst32 := []int32{int32(ifst + 1)} + ilst32 := []int32{int32(ilst + 1)} + ok = lapacke.Dtrexc(lapack.Comp(compq), n, t, ldt, q, ldq, ifst32, ilst32, work) + ifst = int(ifst32[0] - 1) + ilst = int(ilst32[0] - 1) + return ifst, ilst, ok +} + +// Dtrtri computes the inverse of a triangular matrix, storing the result in place +// into a. This is the BLAS level 3 version of the algorithm which builds upon +// Dtrti2 to operate on matrix blocks instead of only individual columns. +// +// Dtrtri returns whether the matrix a is singular. +// If the matrix is singular, the inversion is not performed. +func (impl Implementation) Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool) { + checkMatrix(n, n, a, lda) + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.NonUnit && diag != blas.Unit { + panic(badDiag) + } + return lapacke.Dtrtri(uplo, diag, n, a, lda) +} + +// Dtrtrs solves a triangular system of the form A * X = B or A^T * X = B. +// Dtrtrs returns whether the solve completed successfully. +// If A is singular, no solve is performed. +func (impl Implementation) Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool) { + return lapacke.Dtrtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb) +} + +// Dhseqr computes the eigenvalues of an n×n Hessenberg matrix H and, +// optionally, the matrices T and Z from the Schur decomposition +// H = Z T Z^T, +// where T is an n×n upper quasi-triangular matrix (the Schur form), and Z is +// the n×n orthogonal matrix of Schur vectors. +// +// Optionally Z may be postmultiplied into an input orthogonal matrix Q so that +// this routine can give the Schur factorization of a matrix A which has been +// reduced to the Hessenberg form H by the orthogonal matrix Q: +// A = Q H Q^T = (QZ) T (QZ)^T. +// +// If job == lapack.EigenvaluesOnly, only the eigenvalues will be computed. +// If job == lapack.EigenvaluesAndSchur, the eigenvalues and the Schur form T will +// be computed. +// For other values of job Dhseqr will panic. +// +// If compz == lapack.None, no Schur vectors will be computed and Z will not be +// referenced. +// If compz == lapack.HessEV, on return Z will contain the matrix of Schur +// vectors of H. +// If compz == lapack.OriginalEV, on entry z is assumed to contain the orthogonal +// matrix Q that is the identity except for the submatrix +// Q[ilo:ihi+1,ilo:ihi+1]. On return z will be updated to the product Q*Z. +// +// ilo and ihi determine the block of H on which Dhseqr operates. It is assumed +// that H is already upper triangular in rows and columns [0:ilo] and [ihi+1:n], +// although it will be only checked that the block is isolated, that is, +// ilo == 0 or H[ilo,ilo-1] == 0, +// ihi == n-1 or H[ihi+1,ihi] == 0, +// and Dhseqr will panic otherwise. ilo and ihi are typically set by a previous +// call to Dgebal, otherwise they should be set to 0 and n-1, respectively. It +// must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo == 0 and ihi == -1, if n == 0. +// +// wr and wi must have length n. +// +// work must have length at least lwork and lwork must be at least max(1,n) +// otherwise Dhseqr will panic. The minimum lwork delivers very good and +// sometimes optimal performance, although lwork as large as 11*n may be +// required. On return, work[0] will contain the optimal value of lwork. +// +// If lwork is -1, instead of performing Dhseqr, the function only estimates the +// optimal workspace size and stores it into work[0]. Neither h nor z are +// accessed. +// +// unconverged indicates whether Dhseqr computed all the eigenvalues. +// +// If unconverged == 0, all the eigenvalues have been computed and their real +// and imaginary parts will be stored on return in wr and wi, respectively. If +// two eigenvalues are computed as a complex conjugate pair, they are stored in +// consecutive elements of wr and wi, say the i-th and (i+1)th, with wi[i] > 0 +// and wi[i+1] < 0. +// +// If unconverged == 0 and job == lapack.EigenvaluesAndSchur, on return H will +// contain the upper quasi-triangular matrix T from the Schur decomposition (the +// Schur form). 2×2 diagonal blocks (corresponding to complex conjugate pairs of +// eigenvalues) will be returned in standard form, with +// H[i,i] == H[i+1,i+1], +// and +// H[i+1,i]*H[i,i+1] < 0. +// The eigenvalues will be stored in wr and wi in the same order as on the +// diagonal of the Schur form returned in H, with +// wr[i] = H[i,i], +// and, if H[i:i+2,i:i+2] is a 2×2 diagonal block, +// wi[i] = sqrt(-H[i+1,i]*H[i,i+1]), +// wi[i+1] = -wi[i]. +// +// If unconverged == 0 and job == lapack.EigenvaluesOnly, the contents of h +// on return is unspecified. +// +// If unconverged > 0, some eigenvalues have not converged, and the blocks +// [0:ilo] and [unconverged:n] of wr and wi will contain those eigenvalues which +// have been successfully computed. Failures are rare. +// +// If unconverged > 0 and job == lapack.EigenvaluesOnly, on return the +// remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg +// matrix H[ilo:unconverged,ilo:unconverged]. +// +// If unconverged > 0 and job == lapack.EigenvaluesAndSchur, then on +// return +// (initial H) U = U (final H), (*) +// where U is an orthogonal matrix. The final H is upper Hessenberg and +// H[unconverged:ihi+1,unconverged:ihi+1] is upper quasi-triangular. +// +// If unconverged > 0 and compz == lapack.OriginalEV, then on return +// (final Z) = (initial Z) U, +// where U is the orthogonal matrix in (*) regardless of the value of job. +// +// If unconverged > 0 and compz == lapack.InitZ, then on return +// (final Z) = U, +// where U is the orthogonal matrix in (*) regardless of the value of job. +// +// References: +// [1] R. Byers. LAPACK 3.1 xHSEQR: Tuning and Implementation Notes on the +// Small Bulge Multi-Shift QR Algorithm with Aggressive Early Deflation. +// LAPACK Working Note 187 (2007) +// URL: http://www.netlib.org/lapack/lawnspdf/lawn187.pdf +// [2] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part I: +// Maintaining Well-Focused Shifts and Level 3 Performance. SIAM J. Matrix +// Anal. Appl. 23(4) (2002), pp. 929—947 +// URL: http://dx.doi.org/10.1137/S0895479801384573 +// [3] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part II: +// Aggressive Early Deflation. SIAM J. Matrix Anal. Appl. 23(4) (2002), pp. 948—973 +// URL: http://dx.doi.org/10.1137/S0895479801384585 +// +// Dhseqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dhseqr(job lapack.EVJob, compz lapack.EVComp, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, z []float64, ldz int, work []float64, lwork int) (unconverged int) { + switch job { + default: + panic(badEVJob) + case lapack.EigenvaluesOnly, lapack.EigenvaluesAndSchur: + } + var wantz bool + switch compz { + default: + panic(badEVComp) + case lapack.None: + case lapack.HessEV, lapack.OriginalEV: + wantz = true + } + switch { + case n < 0: + panic(nLT0) + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case len(work) < lwork: + panic(shortWork) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + } + if lwork != -1 { + checkMatrix(n, n, h, ldh) + switch { + case wantz: + checkMatrix(n, n, z, ldz) + case len(wr) < n: + panic("lapack: wr has insufficient length") + case len(wi) < n: + panic("lapack: wi has insufficient length") + } + } + + return lapacke.Dhseqr(lapack.Job(job), lapack.Comp(compz), n, ilo+1, ihi+1, + h, ldh, wr, wi, z, ldz, work, lwork) +} + +// Dgeev computes the eigenvalues and, optionally, the left and/or right +// eigenvectors for an n×n real nonsymmetric matrix A. +// +// The right eigenvector v_j of A corresponding to an eigenvalue λ_j +// is defined by +// A v_j = λ_j v_j, +// and the left eigenvector u_j corresponding to an eigenvalue λ_j is defined by +// u_j^H A = λ_j u_j^H, +// where u_j^H is the conjugate transpose of u_j. +// +// On return, A will be overwritten and the left and right eigenvectors will be +// stored, respectively, in the columns of the n×n matrices VL and VR in the +// same order as their eigenvalues. If the j-th eigenvalue is real, then +// u_j = VL[:,j], +// v_j = VR[:,j], +// and if it is not real, then j and j+1 form a complex conjugate pair and the +// eigenvectors can be recovered as +// u_j = VL[:,j] + i*VL[:,j+1], +// u_{j+1} = VL[:,j] - i*VL[:,j+1], +// v_j = VR[:,j] + i*VR[:,j+1], +// v_{j+1} = VR[:,j] - i*VR[:,j+1]. +// where i is the imaginary unit. The computed eigenvectors are normalized to +// have Euclidean norm equal to 1 and largest component real. +// +// Left eigenvectors will be computed only if jobvl == lapack.ComputeLeftEV, +// otherwise jobvl must be lapack.None. Right eigenvectors will be computed +// only if jobvr == lapack.ComputeRightEV, otherwise jobvr must be lapack.None. +// For other values of jobvl and jobvr Dgeev will panic. +// +// wr and wi contain the real and imaginary parts, respectively, of the computed +// eigenvalues. Complex conjugate pairs of eigenvalues appear consecutively with +// the eigenvalue having the positive imaginary part first. +// wr and wi must have length n, and Dgeev will panic otherwise. +// +// work must have length at least lwork and lwork must be at least max(1,4*n) if +// the left or right eigenvectors are computed, and at least max(1,3*n) if no +// eigenvectors are computed. For good performance, lwork must generally be +// larger. On return, optimal value of lwork will be stored in work[0]. +// +// If lwork == -1, instead of performing Dgeev, the function only calculates the +// optimal vaule of lwork and stores it into work[0]. +// +// On return, first is the index of the first valid eigenvalue. If first == 0, +// all eigenvalues and eigenvectors have been computed. If first is positive, +// Dgeev failed to compute all the eigenvalues, no eigenvectors have been +// computed and wr[first:] and wi[first:] contain those eigenvalues which have +// converged. +func (impl Implementation) Dgeev(jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, n int, a []float64, lda int, wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) (first int) { + var wantvl bool + switch jobvl { + default: + panic("lapack: invalid LeftEVJob") + case lapack.ComputeLeftEV: + wantvl = true + case lapack.None: + wantvl = false + } + var wantvr bool + switch jobvr { + default: + panic("lapack: invalid RightEVJob") + case lapack.ComputeRightEV: + wantvr = true + case lapack.None: + wantvr = false + } + switch { + case n < 0: + panic(nLT0) + case len(work) < lwork: + panic(shortWork) + } + var minwrk int + if wantvl || wantvr { + minwrk = max(1, 4*n) + } else { + minwrk = max(1, 3*n) + } + if lwork != -1 { + checkMatrix(n, n, a, lda) + if wantvl { + checkMatrix(n, n, vl, ldvl) + } + if wantvr { + checkMatrix(n, n, vr, ldvr) + } + switch { + case len(wr) != n: + panic("lapack: bad length of wr") + case len(wi) != n: + panic("lapack: bad length of wi") + case lwork < minwrk: + panic(badWork) + } + } + + // Quick return if possible. + if n == 0 { + work[0] = 1 + return 0 + } + + first = lapacke.Dgeev(lapack.Job(jobvl), lapack.Job(jobvr), n, a, max(n, lda), wr, wi, + vl, max(n, ldvl), vr, max(n, ldvr), work, lwork) + if lwork == -1 && int(work[0]) < minwrk { + work[0] = float64(minwrk) + } + return first +} + +// Dtgsja computes the generalized singular value decomposition (GSVD) +// of two real upper triangular or trapezoidal matrices A and B. +// +// A and B have the following forms, which may be obtained by the +// preprocessing subroutine Dggsvp from a general m×n matrix A and p×n +// matrix B: +// +// n-k-l k l +// A = k [ 0 A12 A13 ] if m-k-l >= 0; +// l [ 0 0 A23 ] +// m-k-l [ 0 0 0 ] +// +// n-k-l k l +// A = k [ 0 A12 A13 ] if m-k-l < 0; +// m-k [ 0 0 A23 ] +// +// n-k-l k l +// B = l [ 0 0 B13 ] +// p-l [ 0 0 0 ] +// +// where the k×k matrix A12 and l×l matrix B13 are non-singular +// upper triangular. A23 is l×l upper triangular if m-k-l >= 0, +// otherwise A23 is (m-k)×l upper trapezoidal. +// +// On exit, +// +// U^T*A*Q = D1*[ 0 R ], V^T*B*Q = D2*[ 0 R ], +// +// where U, V and Q are orthogonal matrices. +// R is a non-singular upper triangular matrix, and D1 and D2 are +// diagonal matrices, which are of the following structures: +// +// If m-k-l >= 0, +// +// k l +// D1 = k [ I 0 ] +// l [ 0 C ] +// m-k-l [ 0 0 ] +// +// k l +// D2 = l [ 0 S ] +// p-l [ 0 0 ] +// +// n-k-l k l +// [ 0 R ] = k [ 0 R11 R12 ] k +// l [ 0 0 R22 ] l +// +// where +// +// C = diag( alpha_k, ... , alpha_{k+l} ), +// S = diag( beta_k, ... , beta_{k+l} ), +// C^2 + S^2 = I. +// +// R is stored in +// A[0:k+l, n-k-l:n] +// on exit. +// +// If m-k-l < 0, +// +// k m-k k+l-m +// D1 = k [ I 0 0 ] +// m-k [ 0 C 0 ] +// +// k m-k k+l-m +// D2 = m-k [ 0 S 0 ] +// k+l-m [ 0 0 I ] +// p-l [ 0 0 0 ] +// +// n-k-l k m-k k+l-m +// [ 0 R ] = k [ 0 R11 R12 R13 ] +// m-k [ 0 0 R22 R23 ] +// k+l-m [ 0 0 0 R33 ] +// +// where +// C = diag( alpha_k, ... , alpha_m ), +// S = diag( beta_k, ... , beta_m ), +// C^2 + S^2 = I. +// +// R = [ R11 R12 R13 ] is stored in A[1:m, n-k-l+1:n] +// [ 0 R22 R23 ] +// and R33 is stored in +// B[m-k:l, n+m-k-l:n] on exit. +// +// The computation of the orthogonal transformation matrices U, V or Q +// is optional. These matrices may either be formed explicitly, or they +// may be post-multiplied into input matrices U1, V1, or Q1. +// +// Dtgsja essentially uses a variant of Kogbetliantz algorithm to reduce +// min(l,m-k)×l triangular or trapezoidal matrix A23 and l×l +// matrix B13 to the form: +// +// U1^T*A13*Q1 = C1*R1; V1^T*B13*Q1 = S1*R1, +// +// where U1, V1 and Q1 are orthogonal matrices. C1 and S1 are diagonal +// matrices satisfying +// +// C1^2 + S1^2 = I, +// +// and R1 is an l×l non-singular upper triangular matrix. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDUnit Use unit-initialized matrix +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// k and l specify the sub-blocks in the input matrices A and B: +// A23 = A[k:min(k+l,m), n-l:n) and B13 = B[0:l, n-l:n] +// of A and B, whose GSVD is going to be computed by Dtgsja. +// +// tola and tolb are the convergence criteria for the Jacobi-Kogbetliantz +// iteration procedure. Generally, they are the same as used in the preprocessing +// step, for example, +// tola = max(m, n)*norm(A)*eps, +// tolb = max(p, n)*norm(B)*eps, +// where eps is the machine epsilon. +// +// work must have length at least 2*n, otherwise Dtgsja will panic. +// +// alpha and beta must have length n or Dtgsja will panic. On exit, alpha and +// beta contain the generalized singular value pairs of A and B +// alpha[0:k] = 1, +// beta[0:k] = 0, +// if m-k-l >= 0, +// alpha[k:k+l] = diag(C), +// beta[k:k+l] = diag(S), +// if m-k-l < 0, +// alpha[k:m]= C, alpha[m:k+l]= 0 +// beta[k:m] = S, beta[m:k+l] = 1. +// if k+l < n, +// alpha[k+l:n] = 0 and +// beta[k+l:n] = 0. +// +// On exit, A[n-k:n, 0:min(k+l,m)] contains the triangular matrix R or part of R +// and if necessary, B[m-k:l, n+m-k-l:n] contains a part of R. +// +// Dtgsja returns whether the routine converged and the number of iteration cycles +// that were run. +// +// Dtgsja is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtgsja(jobU, jobV, jobQ lapack.GSVDJob, m, p, n, k, l int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64) (cycles int, ok bool) { + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + if len(alpha) != n { + panic(badAlpha) + } + if len(beta) != n { + panic(badBeta) + } + + initu := jobU == lapack.GSVDUnit + wantu := initu || jobU == lapack.GSVDU + if !initu && !wantu && jobU != lapack.GSVDNone { + panic(badGSVDJob + "U") + } + if jobU != lapack.GSVDNone { + checkMatrix(m, m, u, ldu) + } + + initv := jobV == lapack.GSVDUnit + wantv := initv || jobV == lapack.GSVDV + if !initv && !wantv && jobV != lapack.GSVDNone { + panic(badGSVDJob + "V") + } + if jobV != lapack.GSVDNone { + checkMatrix(p, p, v, ldv) + } + + initq := jobQ == lapack.GSVDUnit + wantq := initq || jobQ == lapack.GSVDQ + if !initq && !wantq && jobQ != lapack.GSVDNone { + panic(badGSVDJob + "Q") + } + if jobQ != lapack.GSVDNone { + checkMatrix(n, n, q, ldq) + } + + if len(work) < 2*n { + panic(badWork) + } + + ncycle := []int32{0} + ok = lapacke.Dtgsja(lapack.Job(jobU), lapack.Job(jobV), lapack.Job(jobQ), m, p, n, k, l, a, lda, b, ldb, tola, tolb, alpha, beta, u, ldu, v, ldv, q, ldq, work, ncycle) + return int(ncycle[0]), ok +} diff --git a/lapack/cgo/lapack_test.go b/lapack/cgo/lapack_test.go new file mode 100644 index 00000000..63b57622 --- /dev/null +++ b/lapack/cgo/lapack_test.go @@ -0,0 +1,273 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cgo + +import ( + "testing" + + "github.com/gonum/blas" + "github.com/gonum/lapack/testlapack" +) + +var impl = Implementation{} + +// blockedTranslate transforms some blocked C calls to be the unblocked algorithms +// for testing, as several of the unblocked algorithms are not defined by the C +// interface. +type blockedTranslate struct { + Implementation +} + +func TestDbdsqr(t *testing.T) { + testlapack.DbdsqrTest(t, impl) +} + +func (bl blockedTranslate) Dgebd2(m, n int, a []float64, lda int, d, e, tauQ, tauP, work []float64) { + impl.Dgebrd(m, n, a, lda, d, e, tauQ, tauP, work, len(work)) +} + +func (bl blockedTranslate) Dorm2r(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + impl.Dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, len(work)) +} + +func (bl blockedTranslate) Dorml2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + impl.Dormlq(side, trans, m, n, k, a, lda, tau, c, ldc, work, len(work)) +} + +func (bl blockedTranslate) Dorg2r(m, n, k int, a []float64, lda int, tau, work []float64) { + impl.Dorgqr(m, n, k, a, lda, tau, work, len(work)) +} + +func (bl blockedTranslate) Dorgl2(m, n, k int, a []float64, lda int, tau, work []float64) { + impl.Dorglq(m, n, k, a, lda, tau, work, len(work)) +} + +func TestDgeqp3(t *testing.T) { + testlapack.Dgeqp3Test(t, impl) +} + +func TestDlacn2(t *testing.T) { + testlapack.Dlacn2Test(t, impl) +} + +func TestDlascl(t *testing.T) { + testlapack.DlasclTest(t, impl) +} + +func TestDlacpy(t *testing.T) { + testlapack.DlacpyTest(t, impl) +} + +func TestDlange(t *testing.T) { + testlapack.DlangeTest(t, impl) +} + +func TestDlarfb(t *testing.T) { + testlapack.DlarfbTest(t, impl) +} + +func TestDlarfg(t *testing.T) { + testlapack.DlarfgTest(t, impl) +} + +func TestDlarft(t *testing.T) { + testlapack.DlarftTest(t, impl) +} + +func TestDlantr(t *testing.T) { + testlapack.DlantrTest(t, impl) +} + +func TestDlapmt(t *testing.T) { + testlapack.DlapmtTest(t, impl) +} + +func TestDlapy2(t *testing.T) { + testlapack.Dlapy2Test(t, impl) +} + +func TestDlarfx(t *testing.T) { + testlapack.DlarfxTest(t, impl) +} + +func TestDlaset(t *testing.T) { + testlapack.DlasetTest(t, impl) +} + +func TestDlasrt(t *testing.T) { + testlapack.DlasrtTest(t, impl) +} + +func TestDlaswp(t *testing.T) { + testlapack.DlaswpTest(t, impl) +} + +func TestDpotrf(t *testing.T) { + testlapack.DpotrfTest(t, impl) +} + +func TestDgebak(t *testing.T) { + testlapack.DgebakTest(t, impl) +} + +func TestDgebal(t *testing.T) { + testlapack.DgebalTest(t, impl) +} + +func TestDgebd2(t *testing.T) { + testlapack.Dgebd2Test(t, blockedTranslate{impl}) +} + +func TestDgecon(t *testing.T) { + testlapack.DgeconTest(t, impl) +} + +func TestDgeev(t *testing.T) { + testlapack.DgeevTest(t, impl) +} + +func TestDgehrd(t *testing.T) { + testlapack.DgehrdTest(t, impl) +} + +func TestDgelq2(t *testing.T) { + testlapack.Dgelq2Test(t, impl) +} + +func TestDgels(t *testing.T) { + testlapack.DgelsTest(t, impl) +} + +func TestDgelqf(t *testing.T) { + testlapack.DgelqfTest(t, impl) +} + +func TestDgeqr2(t *testing.T) { + testlapack.Dgeqr2Test(t, impl) +} + +func TestDgeqrf(t *testing.T) { + testlapack.DgeqrfTest(t, impl) +} + +func TestDgerqf(t *testing.T) { + testlapack.DgerqfTest(t, impl) +} + +func TestDgesvd(t *testing.T) { + testlapack.DgesvdTest(t, impl) +} + +func TestDgetf2(t *testing.T) { + testlapack.Dgetf2Test(t, impl) +} + +func TestDgetrf(t *testing.T) { + testlapack.DgetrfTest(t, impl) +} + +func TestDgetri(t *testing.T) { + testlapack.DgetriTest(t, impl) +} + +func TestDgetrs(t *testing.T) { + testlapack.DgetrsTest(t, impl) +} + +func TestDggsvd3(t *testing.T) { + testlapack.Dggsvd3Test(t, impl) +} + +func TestDggsvp3(t *testing.T) { + testlapack.Dggsvp3Test(t, impl) +} + +func TestDhseqr(t *testing.T) { + testlapack.DhseqrTest(t, impl) +} + +func TestDorglq(t *testing.T) { + testlapack.DorglqTest(t, blockedTranslate{impl}) +} + +func TestDorgql(t *testing.T) { + testlapack.DorgqlTest(t, impl) +} + +func TestDorgqr(t *testing.T) { + testlapack.DorgqrTest(t, blockedTranslate{impl}) +} + +func TestDorgtr(t *testing.T) { + testlapack.DorgtrTest(t, impl) +} + +func TestDorgl2(t *testing.T) { + testlapack.Dorgl2Test(t, blockedTranslate{impl}) +} + +func TestDorg2r(t *testing.T) { + testlapack.Dorg2rTest(t, blockedTranslate{impl}) +} + +func TestDormbr(t *testing.T) { + testlapack.DormbrTest(t, blockedTranslate{impl}) +} + +func TestDormhr(t *testing.T) { + testlapack.DormhrTest(t, impl) +} + +func TestDorgbr(t *testing.T) { + testlapack.DorgbrTest(t, blockedTranslate{impl}) +} + +func TestDorghr(t *testing.T) { + testlapack.DorghrTest(t, impl) +} + +func TestDormqr(t *testing.T) { + testlapack.Dorm2rTest(t, blockedTranslate{impl}) +} + +func TestDormlq(t *testing.T) { + testlapack.Dorml2Test(t, blockedTranslate{impl}) +} + +func TestDpocon(t *testing.T) { + testlapack.DpoconTest(t, impl) +} + +func TestDsteqr(t *testing.T) { + testlapack.DsteqrTest(t, impl) +} + +func TestDsterf(t *testing.T) { + testlapack.DsterfTest(t, impl) +} + +func TestDsyev(t *testing.T) { + testlapack.DsyevTest(t, impl) +} + +func TestDsytrd(t *testing.T) { + testlapack.DsytrdTest(t, impl) +} + +func TestDtgsja(t *testing.T) { + testlapack.DtgsjaTest(t, impl) +} + +func TestDtrexc(t *testing.T) { + testlapack.DtrexcTest(t, impl) +} + +func TestDtrcon(t *testing.T) { + testlapack.DtrconTest(t, impl) +} + +func TestDtrtri(t *testing.T) { + testlapack.DtrtriTest(t, impl) +} diff --git a/lapack/cgo/lapacke/generate.go b/lapack/cgo/lapacke/generate.go new file mode 100644 index 00000000..e50c2da1 --- /dev/null +++ b/lapack/cgo/lapacke/generate.go @@ -0,0 +1,7 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run generate_lapacke.go + +package lapacke diff --git a/lapack/cgo/lapacke/generate_lapacke.go b/lapack/cgo/lapacke/generate_lapacke.go new file mode 100644 index 00000000..9d82f86a --- /dev/null +++ b/lapack/cgo/lapacke/generate_lapacke.go @@ -0,0 +1,551 @@ +// Copyright ©2016 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// generate_lapacke creates a lapacke.go file from the provided C header file +// with optionally added documentation from the documentation package. +package main + +import ( + "bytes" + "fmt" + "go/format" + "io/ioutil" + "log" + "os" + "strings" + "text/template" + + "github.com/cznic/cc" + + "github.com/gonum/internal/binding" +) + +const ( + header = "lapacke.h" + target = "lapacke.go" + + prefix = "LAPACKE_" + suffix = "_work" +) + +const ( + elideRepeat = true + noteOrigin = false +) + +var skip = map[string]bool{ + // Deprecated. + "LAPACKE_cggsvp_work": true, + "LAPACKE_dggsvp_work": true, + "LAPACKE_sggsvp_work": true, + "LAPACKE_zggsvp_work": true, + "LAPACKE_cggsvd_work": true, + "LAPACKE_dggsvd_work": true, + "LAPACKE_sggsvd_work": true, + "LAPACKE_zggsvd_work": true, + "LAPACKE_cgeqpf_work": true, + "LAPACKE_dgeqpf_work": true, + "LAPACKE_sgeqpf_work": true, + "LAPACKE_zgeqpf_work": true, +} + +// needsInt is a list of routines that need to return the integer info value and +// and cannot convert to a success boolean. +var needsInt = map[string]bool{ + "hseqr": true, + "geev": true, + "geevx": true, +} + +// allUplo is a list of routines that allow 'A' for their uplo argument. +// The list keys are truncated by one character to cover all four numeric types. +var allUplo = map[string]bool{ + "lacpy": true, + "laset": true, +} + +var cToGoType = map[string]string{ + "char": "byte", + "int_must": "int", + "int_must32": "int32", + "int": "bool", + "float": "float32", + "double": "float64", + "float complex": "complex64", + "double complex": "complex128", +} + +var cToGoTypeConv = map[string]string{ + "int_must": "int", + "int": "isZero", + "float": "float32", + "double": "float64", + "float complex": "complex64", + "double complex": "complex128", +} + +var cgoEnums = map[string]*template.Template{} + +var byteTypes = map[string]string{ + "compq": "lapack.Comp", + "compz": "lapack.Comp", + + "d": "blas.Diag", + + "job": "lapack.Job", + "joba": "lapack.Job", + "jobr": "lapack.Job", + "jobp": "lapack.Job", + "jobq": "lapack.Job", + "jobt": "lapack.Job", + "jobu": "lapack.Job", + "jobu1": "lapack.Job", + "jobu2": "lapack.Job", + "jobv": "lapack.Job", + "jobv1t": "lapack.Job", + "jobv2t": "lapack.Job", + "jobvl": "lapack.Job", + "jobvr": "lapack.Job", + "jobvt": "lapack.Job", + "jobz": "lapack.Job", + + "side": "blas.Side", + + "trans": "blas.Transpose", + "trana": "blas.Transpose", + "tranb": "blas.Transpose", + "transr": "blas.Transpose", + + "ul": "blas.Uplo", + + "balanc": "byte", + "cmach": "byte", + "direct": "byte", + "dist": "byte", + "equed": "byte", + "eigsrc": "byte", + "fact": "byte", + "howmny": "byte", + "id": "byte", + "initv": "byte", + "norm": "byte", + "order": "byte", + "pack": "byte", + "sense": "byte", + "signs": "byte", + "storev": "byte", + "sym": "byte", + "typ": "byte", + "rng": "byte", + "vect": "byte", + "way": "byte", +} + +func typeForByte(n string) string { + t, ok := byteTypes[n] + if !ok { + return fmt.Sprintf("", n) + } + return t +} + +var intTypes = map[string]string{ + "forwrd": "int32", + + "ijob": "lapack.Job", + + "wantq": "int32", + "wantz": "int32", +} + +func typeForInt(n string) string { + t, ok := intTypes[n] + if !ok { + return "int" + } + return t +} + +// TODO(kortschak): convForInt* are for #define types, +// so they could go away. Kept here now for diff reduction. + +func convForInt(n string) string { + switch n { + case "rowMajor": + return "C.int" + case "forwrd", "wantq", "wantz": + return "C.lapack_logical" + default: + return "C.lapack_int" + } +} + +func convForIntSlice(n string) string { + switch n { + case "bwork", "tryrac": + return "*C.lapack_logical" + default: + return "*C.lapack_int" + } +} + +var goTypes = map[binding.TypeKey]*template.Template{ + {Kind: cc.Char}: template.Must(template.New("byte").Funcs(map[string]interface{}{"typefor": typeForByte}).Parse("{{typefor .}}")), + {Kind: cc.Int}: template.Must(template.New("int").Funcs(map[string]interface{}{"typefor": typeForInt}).Parse("{{typefor .}}")), + {Kind: cc.Char, IsPointer: true}: template.Must(template.New("[]byte").Parse("[]byte")), + {Kind: cc.Int, IsPointer: true}: template.Must(template.New("[]int32").Parse("[]int32")), + {Kind: cc.FloatComplex, IsPointer: true}: template.Must(template.New("[]complex64").Parse("[]complex64")), + {Kind: cc.DoubleComplex, IsPointer: true}: template.Must(template.New("[]complex128").Parse("[]complex128")), +} + +var cgoTypes = map[binding.TypeKey]*template.Template{ + {Kind: cc.Char}: template.Must(template.New("char").Parse("(C.char)({{.}})")), + {Kind: cc.Int}: template.Must(template.New("int").Funcs(map[string]interface{}{"conv": convForInt}).Parse(`({{conv .}})({{.}})`)), + {Kind: cc.Float}: template.Must(template.New("float").Parse("(C.float)({{.}})")), + {Kind: cc.Double}: template.Must(template.New("double").Parse("(C.double)({{.}})")), + {Kind: cc.FloatComplex}: template.Must(template.New("lapack_complex_float").Parse("(C.lapack_complex_float)({{.}})")), + {Kind: cc.DoubleComplex}: template.Must(template.New("lapack_complex_double").Parse("(C.lapack_complex_double)({{.}})")), + {Kind: cc.Char, IsPointer: true}: template.Must(template.New("char*").Parse("(*C.char)(unsafe.Pointer(_{{.}}))")), + {Kind: cc.Int, IsPointer: true}: template.Must(template.New("int*").Funcs(map[string]interface{}{"conv": convForIntSlice}).Parse("({{conv .}})(_{{.}})")), + {Kind: cc.Float, IsPointer: true}: template.Must(template.New("float").Parse("(*C.float)(_{{.}})")), + {Kind: cc.Double, IsPointer: true}: template.Must(template.New("double").Parse("(*C.double)(_{{.}})")), + {Kind: cc.FloatComplex, IsPointer: true}: template.Must(template.New("lapack_complex_float*").Parse("(*C.lapack_complex_float)(_{{.}})")), + {Kind: cc.DoubleComplex, IsPointer: true}: template.Must(template.New("lapack_complex_double*").Parse("(*C.lapack_complex_double)(_{{.}})")), +} + +var names = map[string]string{ + "matrix_layout": "rowMajor", + "uplo": "ul", + "range": "rng", + "diag": "d", + "select": "sel", + "type": "typ", +} + +func shorten(n string) string { + s, ok := names[n] + if ok { + return s + } + return n +} + +func join(a []string) string { + return strings.Join(a, " ") +} + +func main() { + decls, err := binding.Declarations(header) + if err != nil { + log.Fatal(err) + } + + var buf bytes.Buffer + + h, err := template.New("handwritten"). + Funcs(map[string]interface{}{"join": join}). + Parse(handwritten) + if err != nil { + log.Fatal(err) + } + err = h.Execute(&buf, struct { + Header string + Lib []string + }{ + Header: header, + Lib: os.Args[1:], + }) + if err != nil { + log.Fatal(err) + } + + for _, d := range decls { + if !strings.HasPrefix(d.Name, prefix) || !strings.HasSuffix(d.Name, suffix) || skip[d.Name] { + continue + } + lapackeName := strings.TrimSuffix(strings.TrimPrefix(d.Name, prefix), suffix) + switch { + case strings.HasSuffix(lapackeName, "fsx"): + continue + case strings.HasSuffix(lapackeName, "vxx"): + continue + case strings.HasSuffix(lapackeName, "rook"): + continue + } + if hasFuncParameter(d) { + continue + } + + goSignature(&buf, d) + if noteOrigin { + fmt.Fprintf(&buf, "\t// %s %s %s ...\n\n", d.Position(), d.Return, d.Name) + } + parameterChecks(&buf, d, parameterCheckRules) + buf.WriteByte('\t') + cgoCall(&buf, d) + buf.WriteString("}\n") + } + + b, err := format.Source(buf.Bytes()) + if err != nil { + log.Fatal(err) + } + err = ioutil.WriteFile(target, b, 0664) + if err != nil { + log.Fatal(err) + } +} + +// This removes select and selctg parameterised functions. +func hasFuncParameter(d binding.Declaration) bool { + for _, p := range d.Parameters() { + if p.Kind() != cc.Ptr { + continue + } + if p.Elem().Kind() == cc.Function { + return true + } + } + return false +} + +func goSignature(buf *bytes.Buffer, d binding.Declaration) { + lapackeName := strings.TrimSuffix(strings.TrimPrefix(d.Name, prefix), suffix) + goName := binding.UpperCaseFirst(lapackeName) + + parameters := d.Parameters() + + fmt.Fprintf(buf, "\n// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/%s.f.\n", lapackeName) + fmt.Fprintf(buf, "func %s(", goName) + c := 0 + for i, p := range parameters { + if p.Name() == "matrix_layout" { + continue + } + if c != 0 { + buf.WriteString(", ") + } + c++ + + n := shorten(binding.LowerCaseFirst(p.Name())) + var this, next string + + if p.Kind() == cc.Enum { + this = binding.GoTypeForEnum(p.Type(), n) + } else { + this = binding.GoTypeFor(p.Type(), n, goTypes) + } + + if elideRepeat && i < len(parameters)-1 && p.Type().Kind() == parameters[i+1].Type().Kind() { + p := parameters[i+1] + n := shorten(binding.LowerCaseFirst(p.Name())) + if p.Kind() == cc.Enum { + next = binding.GoTypeForEnum(p.Type(), n) + } else { + next = binding.GoTypeFor(p.Type(), n, goTypes) + } + } + if next == this { + buf.WriteString(n) + } else { + fmt.Fprintf(buf, "%s %s", n, this) + } + } + if d.Return.Kind() != cc.Void { + var must string + if needsInt[lapackeName[1:]] { + must = "_must" + } + fmt.Fprintf(buf, ") %s {\n", cToGoType[d.Return.String()+must]) + } else { + buf.WriteString(") {\n") + } +} + +func parameterChecks(buf *bytes.Buffer, d binding.Declaration, rules []func(*bytes.Buffer, binding.Declaration, binding.Parameter) bool) { + done := make(map[int]bool) + for _, p := range d.Parameters() { + for i, r := range rules { + if done[i] { + continue + } + done[i] = r(buf, d, p) + } + } +} + +func cgoCall(buf *bytes.Buffer, d binding.Declaration) { + if d.Return.Kind() != cc.Void { + lapackeName := strings.TrimSuffix(strings.TrimPrefix(d.Name, prefix), suffix) + var must string + if needsInt[lapackeName[1:]] { + must = "_must" + } + fmt.Fprintf(buf, "return %s(", cToGoTypeConv[d.Return.String()+must]) + } + fmt.Fprintf(buf, "C.%s(", d.Name) + for i, p := range d.Parameters() { + if i != 0 { + buf.WriteString(", ") + } + if p.Type().Kind() == cc.Enum { + buf.WriteString(binding.CgoConversionForEnum(shorten(binding.LowerCaseFirst(p.Name())), p.Type())) + } else { + buf.WriteString(binding.CgoConversionFor(shorten(binding.LowerCaseFirst(p.Name())), p.Type(), cgoTypes)) + } + } + if d.Return.Kind() != cc.Void { + buf.WriteString(")") + } + buf.WriteString(")\n") +} + +var parameterCheckRules = []func(*bytes.Buffer, binding.Declaration, binding.Parameter) bool{ + uplo, + diag, + side, + trans, + address, +} + +func uplo(buf *bytes.Buffer, d binding.Declaration, p binding.Parameter) bool { + if p.Name() != "uplo" { + return false + } + lapackeName := strings.TrimSuffix(strings.TrimPrefix(d.Name, prefix), suffix) + if allUplo[lapackeName[1:]] { + fmt.Fprint(buf, ` switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } +`) + } else { + fmt.Fprint(buf, ` switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } +`) + } + return true +} + +func diag(buf *bytes.Buffer, d binding.Declaration, p binding.Parameter) bool { + if p.Name() != "diag" { + return false + } + fmt.Fprint(buf, ` switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } +`) + return true +} + +func side(buf *bytes.Buffer, d binding.Declaration, p binding.Parameter) bool { + if p.Name() != "side" { + return false + } + fmt.Fprint(buf, ` switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } +`) + return true +} + +func trans(buf *bytes.Buffer, d binding.Declaration, p binding.Parameter) bool { + n := shorten(binding.LowerCaseFirst(p.Name())) + if !strings.HasPrefix(n, "tran") { + return false + } + fmt.Fprintf(buf, ` switch %[1]s { + case blas.NoTrans: + %[1]s = 'N' + case blas.Trans: + %[1]s = 'T' + case blas.ConjTrans: + %[1]s = 'C' + default: + panic("lapack: bad trans") + } +`, n) + return false +} + +var addrTypes = map[string]string{ + "char": "byte", + "int": "int32", + "float": "float32", + "double": "float64", + "float complex": "complex64", + "double complex": "complex128", +} + +func address(buf *bytes.Buffer, d binding.Declaration, p binding.Parameter) bool { + n := shorten(binding.LowerCaseFirst(p.Name())) + if p.Type().Kind() == cc.Ptr { + t := strings.TrimPrefix(p.Type().Element().String(), "const ") + fmt.Fprintf(buf, ` var _%[1]s *%[2]s + if len(%[1]s) > 0 { + _%[1]s = &%[1]s[0] + } +`, n, addrTypes[t]) + } + return false +} + +const handwritten = `// Code generated by "go generate github.com/gonum/lapack/cgo/lapacke" from {{.Header}}; DO NOT EDIT. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lapacke provides bindings to the LAPACKE C Interface to LAPACK. +// +// Links are provided to the NETLIB fortran implementation/dependencies for each function. +package lapacke + +/* +#cgo CFLAGS: -g -O2{{if .Lib}} +#cgo LDFLAGS: {{join .Lib}}{{end}} +#include "{{.Header}}" +*/ +import "C" + +import ( + "unsafe" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Type order is used to specify the matrix storage format. We still interact with +// an API that allows client calls to specify order, so this is here to document that fact. +type order int + +const ( + rowMajor order = 101 + iota + colMajor +) + +func isZero(ret C.int) bool { return ret == 0 } +` diff --git a/lapack/cgo/lapacke/lapacke.go b/lapack/cgo/lapacke/lapacke.go new file mode 100644 index 00000000..31d6669d --- /dev/null +++ b/lapack/cgo/lapacke/lapacke.go @@ -0,0 +1,31444 @@ +// Code generated by "go generate github.com/gonum/lapack/cgo/lapacke" from lapacke.h; DO NOT EDIT. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lapacke provides bindings to the LAPACKE C Interface to LAPACK. +// +// Links are provided to the NETLIB fortran implementation/dependencies for each function. +package lapacke + +/* +#cgo CFLAGS: -g -O2 +#include "lapacke.h" +*/ +import "C" + +import ( + "unsafe" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Type order is used to specify the matrix storage format. We still interact with +// an API that allows client calls to specify order, so this is here to document that fact. +type order int + +const ( + rowMajor order = 101 + iota + colMajor +) + +func isZero(ret C.int) bool { return ret == 0 } + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbdsdc.f. +func Sbdsdc(ul blas.Uplo, compq lapack.Comp, n int, d, e, u []float32, ldu int, vt []float32, ldvt int, q []float32, iq []int32, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float32 + if len(vt) > 0 { + _vt = &vt[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _iq *int32 + if len(iq) > 0 { + _iq = &iq[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sbdsdc_work((C.int)(rowMajor), (C.char)(ul), (C.char)(compq), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_vt), (C.lapack_int)(ldvt), (*C.float)(_q), (*C.lapack_int)(_iq), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsdc.f. +func Dbdsdc(ul blas.Uplo, compq lapack.Comp, n int, d, e, u []float64, ldu int, vt []float64, ldvt int, q []float64, iq []int32, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _iq *int32 + if len(iq) > 0 { + _iq = &iq[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dbdsdc_work((C.int)(rowMajor), (C.char)(ul), (C.char)(compq), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_vt), (C.lapack_int)(ldvt), (*C.double)(_q), (*C.lapack_int)(_iq), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbdsvdx.f. +func Sbdsvdx(ul blas.Uplo, jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu, il, iu, ns int, s, z []float32, ldz int, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sbdsvdx_work((C.int)(rowMajor), (C.char)(ul), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.float)(_s), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsvdx.f. +func Dbdsvdx(ul blas.Uplo, jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu, il, iu, ns int, s, z []float64, ldz int, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dbdsvdx_work((C.int)(rowMajor), (C.char)(ul), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.double)(_s), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbdsqr.f. +func Sbdsqr(ul blas.Uplo, n, ncvt, nru, ncc int, d, e, vt []float32, ldvt int, u []float32, ldu int, c []float32, ldc int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _vt *float32 + if len(vt) > 0 { + _vt = &vt[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sbdsqr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ncvt), (C.lapack_int)(nru), (C.lapack_int)(ncc), (*C.float)(_d), (*C.float)(_e), (*C.float)(_vt), (C.lapack_int)(ldvt), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsqr.f. +func Dbdsqr(ul blas.Uplo, n, ncvt, nru, ncc int, d, e, vt []float64, ldvt int, u []float64, ldu int, c []float64, ldc int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _vt *float64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dbdsqr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ncvt), (C.lapack_int)(nru), (C.lapack_int)(ncc), (*C.double)(_d), (*C.double)(_e), (*C.double)(_vt), (C.lapack_int)(ldvt), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbdsqr.f. +func Cbdsqr(ul blas.Uplo, n, ncvt, nru, ncc int, d, e []float32, vt []complex64, ldvt int, u []complex64, ldu int, c []complex64, ldc int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _vt *complex64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cbdsqr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ncvt), (C.lapack_int)(nru), (C.lapack_int)(ncc), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zbdsqr.f. +func Zbdsqr(ul blas.Uplo, n, ncvt, nru, ncc int, d, e []float64, vt []complex128, ldvt int, u []complex128, ldu int, c []complex128, ldc int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _vt *complex128 + if len(vt) > 0 { + _vt = &vt[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zbdsqr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ncvt), (C.lapack_int)(nru), (C.lapack_int)(ncc), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sdisna.f. +func Sdisna(job lapack.Job, m, n int, d, sep []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _sep *float32 + if len(sep) > 0 { + _sep = &sep[0] + } + return isZero(C.LAPACKE_sdisna_work((C.char)(job), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_sep))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ddisna.f. +func Ddisna(job lapack.Job, m, n int, d, sep []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _sep *float64 + if len(sep) > 0 { + _sep = &sep[0] + } + return isZero(C.LAPACKE_ddisna_work((C.char)(job), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_sep))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbbrd.f. +func Sgbbrd(vect byte, m, n, ncc, kl, ku int, ab []float32, ldab int, d, e, q []float32, ldq int, pt []float32, ldpt int, c []float32, ldc int, work []float32) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _pt *float32 + if len(pt) > 0 { + _pt = &pt[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgbbrd_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ncc), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_d), (*C.float)(_e), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_pt), (C.lapack_int)(ldpt), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbbrd.f. +func Dgbbrd(vect byte, m, n, ncc, kl, ku int, ab []float64, ldab int, d, e, q []float64, ldq int, pt []float64, ldpt int, c []float64, ldc int, work []float64) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _pt *float64 + if len(pt) > 0 { + _pt = &pt[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgbbrd_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ncc), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_d), (*C.double)(_e), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_pt), (C.lapack_int)(ldpt), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbbrd.f. +func Cgbbrd(vect byte, m, n, ncc, kl, ku int, ab []complex64, ldab int, d, e []float32, q []complex64, ldq int, pt []complex64, ldpt int, c []complex64, ldc int, work []complex64, rwork []float32) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _pt *complex64 + if len(pt) > 0 { + _pt = &pt[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgbbrd_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ncc), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_pt), (C.lapack_int)(ldpt), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbbrd.f. +func Zgbbrd(vect byte, m, n, ncc, kl, ku int, ab []complex128, ldab int, d, e []float64, q []complex128, ldq int, pt []complex128, ldpt int, c []complex128, ldc int, work []complex128, rwork []float64) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _pt *complex128 + if len(pt) > 0 { + _pt = &pt[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgbbrd_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ncc), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_pt), (C.lapack_int)(ldpt), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbcon.f. +func Sgbcon(norm byte, n, kl, ku int, ab []float32, ldab int, ipiv []int32, anorm float32, rcond, work []float32, iwork []int32) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgbcon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbcon.f. +func Dgbcon(norm byte, n, kl, ku int, ab []float64, ldab int, ipiv []int32, anorm float64, rcond, work []float64, iwork []int32) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgbcon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbcon.f. +func Cgbcon(norm byte, n, kl, ku int, ab []complex64, ldab int, ipiv []int32, anorm float32, rcond []float32, work []complex64, rwork []float32) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgbcon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbcon.f. +func Zgbcon(norm byte, n, kl, ku int, ab []complex128, ldab int, ipiv []int32, anorm float64, rcond []float64, work []complex128, rwork []float64) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgbcon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbequ.f. +func Sgbequ(m, n, kl, ku int, ab []float32, ldab int, r, c, rowcnd, colcnd, amax []float32) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_sgbequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequ.f. +func Dgbequ(m, n, kl, ku int, ab []float64, ldab int, r, c, rowcnd, colcnd, amax []float64) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dgbequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequ.f. +func Cgbequ(m, n, kl, ku int, ab []complex64, ldab int, r, c, rowcnd, colcnd, amax []float32) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cgbequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbequ.f. +func Zgbequ(m, n, kl, ku int, ab []complex128, ldab int, r, c, rowcnd, colcnd, amax []float64) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zgbequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbequb.f. +func Sgbequb(m, n, kl, ku int, ab []float32, ldab int, r, c, rowcnd, colcnd, amax []float32) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_sgbequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequb.f. +func Dgbequb(m, n, kl, ku int, ab []float64, ldab int, r, c, rowcnd, colcnd, amax []float64) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dgbequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequb.f. +func Cgbequb(m, n, kl, ku int, ab []complex64, ldab int, r, c, rowcnd, colcnd, amax []float32) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cgbequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbequb.f. +func Zgbequb(m, n, kl, ku int, ab []complex128, ldab int, r, c, rowcnd, colcnd, amax []float64) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zgbequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbrfs.f. +func Sgbrfs(trans blas.Transpose, n, kl, ku, nrhs int, ab []float32, ldab int, afb []float32, ldafb int, ipiv []int32, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float32 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgbrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbrfs.f. +func Dgbrfs(trans blas.Transpose, n, kl, ku, nrhs int, ab []float64, ldab int, afb []float64, ldafb int, ipiv []int32, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgbrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbrfs.f. +func Cgbrfs(trans blas.Transpose, n, kl, ku, nrhs int, ab []complex64, ldab int, afb []complex64, ldafb int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgbrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbrfs.f. +func Zgbrfs(trans blas.Transpose, n, kl, ku, nrhs int, ab []complex128, ldab int, afb []complex128, ldafb int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex128 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgbrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbsv.f. +func Sgbsv(n, kl, ku, nrhs int, ab []float32, ldab int, ipiv []int32, b []float32, ldb int) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgbsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsv.f. +func Dgbsv(n, kl, ku, nrhs int, ab []float64, ldab int, ipiv []int32, b []float64, ldb int) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgbsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbsv.f. +func Cgbsv(n, kl, ku, nrhs int, ab []complex64, ldab int, ipiv []int32, b []complex64, ldb int) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgbsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbsv.f. +func Zgbsv(n, kl, ku, nrhs int, ab []complex128, ldab int, ipiv []int32, b []complex128, ldb int) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgbsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbsvx.f. +func Sgbsvx(fact byte, trans blas.Transpose, n, kl, ku, nrhs int, ab []float32, ldab int, afb []float32, ldafb int, ipiv []int32, equed []byte, r, c, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float32 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_r), (*C.float)(_c), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsvx.f. +func Dgbsvx(fact byte, trans blas.Transpose, n, kl, ku, nrhs int, ab []float64, ldab int, afb []float64, ldafb int, ipiv []int32, equed []byte, r, c, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_r), (*C.double)(_c), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbsvx.f. +func Cgbsvx(fact byte, trans blas.Transpose, n, kl, ku, nrhs int, ab []complex64, ldab int, afb []complex64, ldafb int, ipiv []int32, equed []byte, r, c []float32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_r), (*C.float)(_c), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbsvx.f. +func Zgbsvx(fact byte, trans blas.Transpose, n, kl, ku, nrhs int, ab []complex128, ldab int, afb []complex128, ldafb int, ipiv []int32, equed []byte, r, c []float64, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex128 + if len(afb) > 0 { + _afb = &afb[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_afb), (C.lapack_int)(ldafb), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_r), (*C.double)(_c), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbtrf.f. +func Sgbtrf(m, n, kl, ku int, ab []float32, ldab int, ipiv []int32) bool { + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_sgbtrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrf.f. +func Dgbtrf(m, n, kl, ku int, ab []float64, ldab int, ipiv []int32) bool { + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dgbtrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbtrf.f. +func Cgbtrf(m, n, kl, ku int, ab []complex64, ldab int, ipiv []int32) bool { + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_cgbtrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbtrf.f. +func Zgbtrf(m, n, kl, ku int, ab []complex128, ldab int, ipiv []int32) bool { + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zgbtrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbtrs.f. +func Sgbtrs(trans blas.Transpose, n, kl, ku, nrhs int, ab []float32, ldab int, ipiv []int32, b []float32, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgbtrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrs.f. +func Dgbtrs(trans blas.Transpose, n, kl, ku, nrhs int, ab []float64, ldab int, ipiv []int32, b []float64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgbtrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbtrs.f. +func Cgbtrs(trans blas.Transpose, n, kl, ku, nrhs int, ab []complex64, ldab int, ipiv []int32, b []complex64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgbtrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbtrs.f. +func Zgbtrs(trans blas.Transpose, n, kl, ku, nrhs int, ab []complex128, ldab int, ipiv []int32, b []complex128, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgbtrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebak.f. +func Sgebak(job lapack.Job, side blas.Side, n, ilo, ihi int, scale []float32, m int, v []float32, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_sgebak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_scale), (C.lapack_int)(m), (*C.float)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebak.f. +func Dgebak(job lapack.Job, side blas.Side, n, ilo, ihi int, scale []float64, m int, v []float64, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_dgebak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_scale), (C.lapack_int)(m), (*C.double)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebak.f. +func Cgebak(job lapack.Job, side blas.Side, n, ilo, ihi int, scale []float32, m int, v []complex64, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_cgebak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_scale), (C.lapack_int)(m), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebak.f. +func Zgebak(job lapack.Job, side blas.Side, n, ilo, ihi int, scale []float64, m int, v []complex128, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_zgebak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_scale), (C.lapack_int)(m), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebal.f. +func Sgebal(job lapack.Job, n int, a []float32, lda int, ilo, ihi []int32, scale []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_sgebal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebal.f. +func Dgebal(job lapack.Job, n int, a []float64, lda int, ilo, ihi []int32, scale []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_dgebal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebal.f. +func Cgebal(job lapack.Job, n int, a []complex64, lda int, ilo, ihi []int32, scale []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_cgebal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebal.f. +func Zgebal(job lapack.Job, n int, a []complex128, lda int, ilo, ihi []int32, scale []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_zgebal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebrd.f. +func Sgebrd(m, n int, a []float32, lda int, d, e, tauq, taup, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tauq *float32 + if len(tauq) > 0 { + _tauq = &tauq[0] + } + var _taup *float32 + if len(taup) > 0 { + _taup = &taup[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgebrd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_d), (*C.float)(_e), (*C.float)(_tauq), (*C.float)(_taup), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebrd.f. +func Dgebrd(m, n int, a []float64, lda int, d, e, tauq, taup, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tauq *float64 + if len(tauq) > 0 { + _tauq = &tauq[0] + } + var _taup *float64 + if len(taup) > 0 { + _taup = &taup[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgebrd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_d), (*C.double)(_e), (*C.double)(_tauq), (*C.double)(_taup), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebrd.f. +func Cgebrd(m, n int, a []complex64, lda int, d, e []float32, tauq, taup, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tauq *complex64 + if len(tauq) > 0 { + _tauq = &tauq[0] + } + var _taup *complex64 + if len(taup) > 0 { + _taup = &taup[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgebrd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_tauq), (*C.lapack_complex_float)(_taup), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebrd.f. +func Zgebrd(m, n int, a []complex128, lda int, d, e []float64, tauq, taup, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tauq *complex128 + if len(tauq) > 0 { + _tauq = &tauq[0] + } + var _taup *complex128 + if len(taup) > 0 { + _taup = &taup[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgebrd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_tauq), (*C.lapack_complex_double)(_taup), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgecon.f. +func Sgecon(norm byte, n int, a []float32, lda int, anorm float32, rcond, work []float32, iwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgecon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgecon.f. +func Dgecon(norm byte, n int, a []float64, lda int, anorm float64, rcond, work []float64, iwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgecon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgecon.f. +func Cgecon(norm byte, n int, a []complex64, lda int, anorm float32, rcond []float32, work []complex64, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgecon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgecon.f. +func Zgecon(norm byte, n int, a []complex128, lda int, anorm float64, rcond []float64, work []complex128, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgecon_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeequ.f. +func Sgeequ(m, n int, a []float32, lda int, r, c, rowcnd, colcnd, amax []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_sgeequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequ.f. +func Dgeequ(m, n int, a []float64, lda int, r, c, rowcnd, colcnd, amax []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dgeequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequ.f. +func Cgeequ(m, n int, a []complex64, lda int, r, c, rowcnd, colcnd, amax []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cgeequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeequ.f. +func Zgeequ(m, n int, a []complex128, lda int, r, c, rowcnd, colcnd, amax []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zgeequ_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeequb.f. +func Sgeequb(m, n int, a []float32, lda int, r, c, rowcnd, colcnd, amax []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_sgeequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequb.f. +func Dgeequb(m, n int, a []float64, lda int, r, c, rowcnd, colcnd, amax []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dgeequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequb.f. +func Cgeequb(m, n int, a []complex64, lda int, r, c, rowcnd, colcnd, amax []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float32 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float32 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cgeequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_r), (*C.float)(_c), (*C.float)(_rowcnd), (*C.float)(_colcnd), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeequb.f. +func Zgeequb(m, n int, a []complex128, lda int, r, c, rowcnd, colcnd, amax []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _rowcnd *float64 + if len(rowcnd) > 0 { + _rowcnd = &rowcnd[0] + } + var _colcnd *float64 + if len(colcnd) > 0 { + _colcnd = &colcnd[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zgeequb_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_r), (*C.double)(_c), (*C.double)(_rowcnd), (*C.double)(_colcnd), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeev.f. +func Sgeev(jobvl, jobvr lapack.Job, n int, a []float32, lda int, wr, wi, vl []float32, ldvl int, vr []float32, ldvr int, work []float32, lwork int) int { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _wr *float32 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float32 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_sgeev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_wr), (*C.float)(_wi), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeev.f. +func Dgeev(jobvl, jobvr lapack.Job, n int, a []float64, lda int, wr, wi, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) int { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _wr *float64 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float64 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_dgeev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_wr), (*C.double)(_wi), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeev.f. +func Cgeev(jobvl, jobvr lapack.Job, n int, a []complex64, lda int, w, vl []complex64, ldvl int, vr []complex64, ldvr int, work []complex64, lwork int, rwork []float32) int { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _w *complex64 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return int(C.LAPACKE_cgeev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_w), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeev.f. +func Zgeev(jobvl, jobvr lapack.Job, n int, a []complex128, lda int, w, vl []complex128, ldvl int, vr []complex128, ldvr int, work []complex128, lwork int, rwork []float64) int { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _w *complex128 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return int(C.LAPACKE_zgeev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_w), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeevx.f. +func Sgeevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []float32, lda int, wr, wi, vl []float32, ldvl int, vr []float32, ldvr int, ilo, ihi []int32, scale, abnrm, rconde, rcondv, work []float32, lwork int, iwork []int32) int { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _wr *float32 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float32 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _abnrm *float32 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _rconde *float32 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float32 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return int(C.LAPACKE_sgeevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_wr), (*C.float)(_wi), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_scale), (*C.float)(_abnrm), (*C.float)(_rconde), (*C.float)(_rcondv), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeevx.f. +func Dgeevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []float64, lda int, wr, wi, vl []float64, ldvl int, vr []float64, ldvr int, ilo, ihi []int32, scale, abnrm, rconde, rcondv, work []float64, lwork int, iwork []int32) int { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _wr *float64 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float64 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _abnrm *float64 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _rconde *float64 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float64 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return int(C.LAPACKE_dgeevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_wr), (*C.double)(_wi), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_scale), (*C.double)(_abnrm), (*C.double)(_rconde), (*C.double)(_rcondv), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeevx.f. +func Cgeevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []complex64, lda int, w, vl []complex64, ldvl int, vr []complex64, ldvr int, ilo, ihi []int32, scale, abnrm, rconde, rcondv []float32, work []complex64, lwork int, rwork []float32) int { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _w *complex64 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _abnrm *float32 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _rconde *float32 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float32 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return int(C.LAPACKE_cgeevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_w), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_scale), (*C.float)(_abnrm), (*C.float)(_rconde), (*C.float)(_rcondv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeevx.f. +func Zgeevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []complex128, lda int, w, vl []complex128, ldvl int, vr []complex128, ldvr int, ilo, ihi []int32, scale, abnrm, rconde, rcondv []float64, work []complex128, lwork int, rwork []float64) int { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _w *complex128 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _abnrm *float64 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _rconde *float64 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float64 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return int(C.LAPACKE_zgeevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_w), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_scale), (*C.double)(_abnrm), (*C.double)(_rconde), (*C.double)(_rcondv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgehrd.f. +func Sgehrd(n, ilo, ihi int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgehrd_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgehrd.f. +func Dgehrd(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgehrd_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgehrd.f. +func Cgehrd(n, ilo, ihi int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgehrd_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgehrd.f. +func Zgehrd(n, ilo, ihi int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgehrd_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgejsv.f. +func Sgejsv(joba, jobu, jobv, jobr, jobt, jobp lapack.Job, m, n int, a []float32, lda int, sva, u []float32, ldu int, v []float32, ldv int, work []float32, lwork int, iwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float32 + if len(sva) > 0 { + _sva = &sva[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgejsv_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.char)(jobr), (C.char)(jobt), (C.char)(jobp), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_sva), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgejsv.f. +func Dgejsv(joba, jobu, jobv, jobr, jobt, jobp lapack.Job, m, n int, a []float64, lda int, sva, u []float64, ldu int, v []float64, ldv int, work []float64, lwork int, iwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float64 + if len(sva) > 0 { + _sva = &sva[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgejsv_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.char)(jobr), (C.char)(jobt), (C.char)(jobp), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_sva), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgejsv.f. +func Cgejsv(joba, jobu, jobv, jobr, jobt, jobp lapack.Job, m, n int, a []complex64, lda int, sva []float32, u []complex64, ldu int, v []complex64, ldv int, cwork []complex64, lwork int, work []float32, lrwork int, iwork []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float32 + if len(sva) > 0 { + _sva = &sva[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _cwork *complex64 + if len(cwork) > 0 { + _cwork = &cwork[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cgejsv_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.char)(jobr), (C.char)(jobt), (C.char)(jobp), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_sva), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_cwork), (C.lapack_int)(lwork), (*C.float)(_work), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgejsv.f. +func Zgejsv(joba, jobu, jobv, jobr, jobt, jobp lapack.Job, m, n int, a []complex128, lda int, sva []float64, u []complex128, ldu int, v []complex128, ldv int, cwork []complex128, lwork int, work []float64, lrwork int, iwork []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float64 + if len(sva) > 0 { + _sva = &sva[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _cwork *complex128 + if len(cwork) > 0 { + _cwork = &cwork[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zgejsv_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.char)(jobr), (C.char)(jobt), (C.char)(jobp), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_sva), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_cwork), (C.lapack_int)(lwork), (*C.double)(_work), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelq2.f. +func Sgelq2(m, n int, a []float32, lda int, tau, work []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgelq2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelq2.f. +func Dgelq2(m, n int, a []float64, lda int, tau, work []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgelq2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelq2.f. +func Cgelq2(m, n int, a []complex64, lda int, tau, work []complex64) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgelq2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelq2.f. +func Zgelq2(m, n int, a []complex128, lda int, tau, work []complex128) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgelq2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelqf.f. +func Sgelqf(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgelqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelqf.f. +func Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgelqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelqf.f. +func Cgelqf(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgelqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelqf.f. +func Zgelqf(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgelqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgels.f. +func Sgels(trans blas.Transpose, m, n, nrhs int, a []float32, lda int, b []float32, ldb int, work []float32, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgels_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgels.f. +func Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgels_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgels.f. +func Cgels(trans blas.Transpose, m, n, nrhs int, a []complex64, lda int, b []complex64, ldb int, work []complex64, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgels_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgels.f. +func Zgels(trans blas.Transpose, m, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, work []complex128, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgels_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelsd.f. +func Sgelsd(m, n, nrhs int, a []float32, lda int, b []float32, ldb int, s []float32, rcond float32, rank []int32, work []float32, lwork int, iwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgelsd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_s), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsd.f. +func Dgelsd(m, n, nrhs int, a []float64, lda int, b []float64, ldb int, s []float64, rcond float64, rank []int32, work []float64, lwork int, iwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgelsd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_s), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelsd.f. +func Cgelsd(m, n, nrhs int, a []complex64, lda int, b []complex64, ldb int, s []float32, rcond float32, rank []int32, work []complex64, lwork int, rwork []float32, iwork []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cgelsd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.float)(_s), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelsd.f. +func Zgelsd(m, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, s []float64, rcond float64, rank []int32, work []complex128, lwork int, rwork []float64, iwork []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zgelsd_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.double)(_s), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelss.f. +func Sgelss(m, n, nrhs int, a []float32, lda int, b []float32, ldb int, s []float32, rcond float32, rank []int32, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgelss_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_s), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelss.f. +func Dgelss(m, n, nrhs int, a []float64, lda int, b []float64, ldb int, s []float64, rcond float64, rank []int32, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgelss_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_s), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelss.f. +func Cgelss(m, n, nrhs int, a []complex64, lda int, b []complex64, ldb int, s []float32, rcond float32, rank []int32, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgelss_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.float)(_s), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelss.f. +func Zgelss(m, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, s []float64, rcond float64, rank []int32, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgelss_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.double)(_s), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelsy.f. +func Sgelsy(m, n, nrhs int, a []float32, lda int, b []float32, ldb int, jpvt []int32, rcond float32, rank []int32, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgelsy_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_jpvt), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsy.f. +func Dgelsy(m, n, nrhs int, a []float64, lda int, b []float64, ldb int, jpvt []int32, rcond float64, rank []int32, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgelsy_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_jpvt), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelsy.f. +func Cgelsy(m, n, nrhs int, a []complex64, lda int, b []complex64, ldb int, jpvt []int32, rcond float32, rank []int32, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgelsy_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_jpvt), (C.float)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelsy.f. +func Zgelsy(m, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, jpvt []int32, rcond float64, rank []int32, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgelsy_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_jpvt), (C.double)(rcond), (*C.lapack_int)(_rank), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqlf.f. +func Sgeqlf(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqlf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqlf.f. +func Dgeqlf(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqlf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqlf.f. +func Cgeqlf(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgeqlf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqlf.f. +func Zgeqlf(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgeqlf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqp3.f. +func Sgeqp3(m, n int, a []float32, lda int, jpvt []int32, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqp3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_jpvt), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqp3.f. +func Dgeqp3(m, n int, a []float64, lda int, jpvt []int32, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqp3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_jpvt), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqp3.f. +func Cgeqp3(m, n int, a []complex64, lda int, jpvt []int32, tau, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgeqp3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_jpvt), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqp3.f. +func Zgeqp3(m, n int, a []complex128, lda int, jpvt []int32, tau, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _jpvt *int32 + if len(jpvt) > 0 { + _jpvt = &jpvt[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgeqp3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_jpvt), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqr2.f. +func Sgeqr2(m, n int, a []float32, lda int, tau, work []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqr2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2.f. +func Dgeqr2(m, n int, a []float64, lda int, tau, work []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqr2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqr2.f. +func Cgeqr2(m, n int, a []complex64, lda int, tau, work []complex64) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgeqr2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqr2.f. +func Zgeqr2(m, n int, a []complex128, lda int, tau, work []complex128) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgeqr2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrf.f. +func Sgeqrf(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrf.f. +func Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrf.f. +func Cgeqrf(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgeqrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrf.f. +func Zgeqrf(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgeqrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrfp.f. +func Sgeqrfp(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqrfp_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrfp.f. +func Dgeqrfp(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqrfp_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrfp.f. +func Cgeqrfp(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgeqrfp_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrfp.f. +func Zgeqrfp(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgeqrfp_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgerfs.f. +func Sgerfs(trans blas.Transpose, n, nrhs int, a []float32, lda int, af []float32, ldaf int, ipiv []int32, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgerfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerfs.f. +func Dgerfs(trans blas.Transpose, n, nrhs int, a []float64, lda int, af []float64, ldaf int, ipiv []int32, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgerfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerfs.f. +func Cgerfs(trans blas.Transpose, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgerfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgerfs.f. +func Zgerfs(trans blas.Transpose, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgerfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgerqf.f. +func Sgerqf(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgerqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerqf.f. +func Dgerqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgerqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerqf.f. +func Cgerqf(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgerqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgerqf.f. +func Zgerqf(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgerqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesdd.f. +func Sgesdd(jobz lapack.Job, m, n int, a []float32, lda int, s, u []float32, ldu int, vt []float32, ldvt int, work []float32, lwork int, iwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float32 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgesdd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_vt), (C.lapack_int)(ldvt), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesdd.f. +func Dgesdd(jobz lapack.Job, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int, iwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgesdd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_vt), (C.lapack_int)(ldvt), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesdd.f. +func Cgesdd(jobz lapack.Job, m, n int, a []complex64, lda int, s []float32, u []complex64, ldu int, vt []complex64, ldvt int, work []complex64, lwork int, rwork []float32, iwork []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cgesdd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesdd.f. +func Zgesdd(jobz lapack.Job, m, n int, a []complex128, lda int, s []float64, u []complex128, ldu int, vt []complex128, ldvt int, work []complex128, lwork int, rwork []float64, iwork []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex128 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zgesdd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesv.f. +func Sgesv(n, nrhs int, a []float32, lda int, ipiv []int32, b []float32, ldb int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f. +func Dgesv(n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesv.f. +func Cgesv(n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesv.f. +func Zgesv(n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsgesv.f. +func Dsgesv(n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int, x []float64, ldx int, work []float64, swork []float32, iter []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _swork *float32 + if len(swork) > 0 { + _swork = &swork[0] + } + var _iter *int32 + if len(iter) > 0 { + _iter = &iter[0] + } + return isZero(C.LAPACKE_dsgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_work), (*C.float)(_swork), (*C.lapack_int)(_iter))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zcgesv.f. +func Zcgesv(n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, work []complex128, swork []complex64, rwork []float64, iter []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _swork *complex64 + if len(swork) > 0 { + _swork = &swork[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iter *int32 + if len(iter) > 0 { + _iter = &iter[0] + } + return isZero(C.LAPACKE_zcgesv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.lapack_complex_double)(_work), (*C.lapack_complex_float)(_swork), (*C.double)(_rwork), (*C.lapack_int)(_iter))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvd.f. +func Sgesvd(jobu, jobvt lapack.Job, m, n int, a []float32, lda int, s, u []float32, ldu int, vt []float32, ldvt int, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float32 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgesvd_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_vt), (C.lapack_int)(ldvt), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvd.f. +func Dgesvd(jobu, jobvt lapack.Job, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgesvd_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_vt), (C.lapack_int)(ldvt), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvd.f. +func Cgesvd(jobu, jobvt lapack.Job, m, n int, a []complex64, lda int, s []float32, u []complex64, ldu int, vt []complex64, ldvt int, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgesvd_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvd.f. +func Zgesvd(jobu, jobvt lapack.Job, m, n int, a []complex128, lda int, s []float64, u []complex128, ldu int, vt []complex128, ldvt int, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex128 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgesvd_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvdx.f. +func Sgesvdx(jobu, jobvt lapack.Job, rng byte, m, n int, a []float32, lda, vl, vu, il, iu, ns int, s, u []float32, ldu int, vt []float32, ldvt int, work []float32, lwork int, iwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float32 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgesvdx_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.char)(rng), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.float)(_s), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_vt), (C.lapack_int)(ldvt), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvdx.f. +func Dgesvdx(jobu, jobvt lapack.Job, rng byte, m, n int, a []float64, lda, vl, vu, il, iu, ns int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int, iwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *float64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgesvdx_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.char)(rng), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.double)(_s), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_vt), (C.lapack_int)(ldvt), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvdx.f. +func Cgesvdx(jobu, jobvt lapack.Job, rng byte, m, n int, a []complex64, lda, vl, vu, il, iu, ns int, s []float32, u []complex64, ldu int, vt []complex64, ldvt int, work []complex64, lwork int, rwork []float32, iwork []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex64 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cgesvdx_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.char)(rng), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.float)(_s), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvdx.f. +func Zgesvdx(jobu, jobvt lapack.Job, rng byte, m, n int, a []complex128, lda, vl, vu, il, iu, ns int, s []float64, u []complex128, ldu int, vt []complex128, ldvt int, work []complex128, lwork int, rwork []float64, iwork []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _vt *complex128 + if len(vt) > 0 { + _vt = &vt[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zgesvdx_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobvt), (C.char)(rng), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.lapack_int)(vl), (C.lapack_int)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.lapack_int)(ns), (*C.double)(_s), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_vt), (C.lapack_int)(ldvt), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvj.f. +func Sgesvj(joba, jobu, jobv lapack.Job, m, n int, a []float32, lda int, sva []float32, mv int, v []float32, ldv int, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float32 + if len(sva) > 0 { + _sva = &sva[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgesvj_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_sva), (C.lapack_int)(mv), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvj.f. +func Dgesvj(joba, jobu, jobv lapack.Job, m, n int, a []float64, lda int, sva []float64, mv int, v []float64, ldv int, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float64 + if len(sva) > 0 { + _sva = &sva[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgesvj_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_sva), (C.lapack_int)(mv), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvj.f. +func Cgesvj(joba, jobu, jobv lapack.Job, m, n int, a []complex64, lda int, sva []float32, mv int, v []complex64, ldv int, cwork []complex64, lwork int, rwork []float32, lrwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float32 + if len(sva) > 0 { + _sva = &sva[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _cwork *complex64 + if len(cwork) > 0 { + _cwork = &cwork[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgesvj_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_sva), (C.lapack_int)(mv), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_cwork), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvj.f. +func Zgesvj(joba, jobu, jobv lapack.Job, m, n int, a []complex128, lda int, sva []float64, mv int, v []complex128, ldv int, cwork []complex128, lwork int, rwork []float64, lrwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _sva *float64 + if len(sva) > 0 { + _sva = &sva[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _cwork *complex128 + if len(cwork) > 0 { + _cwork = &cwork[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgesvj_work((C.int)(rowMajor), (C.char)(joba), (C.char)(jobu), (C.char)(jobv), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_sva), (C.lapack_int)(mv), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_cwork), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvx.f. +func Sgesvx(fact byte, trans blas.Transpose, n, nrhs int, a []float32, lda int, af []float32, ldaf int, ipiv []int32, equed []byte, r, c, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_r), (*C.float)(_c), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvx.f. +func Dgesvx(fact byte, trans blas.Transpose, n, nrhs int, a []float64, lda int, af []float64, ldaf int, ipiv []int32, equed []byte, r, c, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_r), (*C.double)(_c), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvx.f. +func Cgesvx(fact byte, trans blas.Transpose, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, equed []byte, r, c []float32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_r), (*C.float)(_c), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvx.f. +func Zgesvx(fact byte, trans blas.Transpose, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, equed []byte, r, c []float64, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_r), (*C.double)(_c), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetf2.f. +func Sgetf2(m, n int, a []float32, lda int, ipiv []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_sgetf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetf2.f. +func Dgetf2(m, n int, a []float64, lda int, ipiv []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dgetf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetf2.f. +func Cgetf2(m, n int, a []complex64, lda int, ipiv []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_cgetf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetf2.f. +func Zgetf2(m, n int, a []complex128, lda int, ipiv []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zgetf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetrf.f. +func Sgetrf(m, n int, a []float32, lda int, ipiv []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_sgetrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf.f. +func Dgetrf(m, n int, a []float64, lda int, ipiv []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dgetrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetrf.f. +func Cgetrf(m, n int, a []complex64, lda int, ipiv []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_cgetrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetrf.f. +func Zgetrf(m, n int, a []complex128, lda int, ipiv []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zgetrf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetrf2.f. +func Sgetrf2(m, n int, a []float32, lda int, ipiv []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_sgetrf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf2.f. +func Dgetrf2(m, n int, a []float64, lda int, ipiv []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dgetrf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetrf2.f. +func Cgetrf2(m, n int, a []complex64, lda int, ipiv []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_cgetrf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetrf2.f. +func Zgetrf2(m, n int, a []complex128, lda int, ipiv []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zgetrf2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetri.f. +func Sgetri(n int, a []float32, lda int, ipiv []int32, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgetri_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetri.f. +func Dgetri(n int, a []float64, lda int, ipiv []int32, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgetri_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetri.f. +func Cgetri(n int, a []complex64, lda int, ipiv []int32, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgetri_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetri.f. +func Zgetri(n int, a []complex128, lda int, ipiv []int32, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgetri_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetrs.f. +func Sgetrs(trans blas.Transpose, n, nrhs int, a []float32, lda int, ipiv []int32, b []float32, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgetrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrs.f. +func Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgetrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetrs.f. +func Cgetrs(trans blas.Transpose, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgetrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetrs.f. +func Zgetrs(trans blas.Transpose, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgetrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggbak.f. +func Sggbak(job lapack.Job, side blas.Side, n, ilo, ihi int, lscale, rscale []float32, m int, v []float32, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_sggbak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_lscale), (*C.float)(_rscale), (C.lapack_int)(m), (*C.float)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbak.f. +func Dggbak(job lapack.Job, side blas.Side, n, ilo, ihi int, lscale, rscale []float64, m int, v []float64, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_dggbak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_lscale), (*C.double)(_rscale), (C.lapack_int)(m), (*C.double)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggbak.f. +func Cggbak(job lapack.Job, side blas.Side, n, ilo, ihi int, lscale, rscale []float32, m int, v []complex64, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_cggbak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_lscale), (*C.float)(_rscale), (C.lapack_int)(m), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggbak.f. +func Zggbak(job lapack.Job, side blas.Side, n, ilo, ihi int, lscale, rscale []float64, m int, v []complex128, ldv int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + return isZero(C.LAPACKE_zggbak_work((C.int)(rowMajor), (C.char)(job), (C.char)(side), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_lscale), (*C.double)(_rscale), (C.lapack_int)(m), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggbal.f. +func Sggbal(job lapack.Job, n int, a []float32, lda int, b []float32, ldb int, ilo, ihi []int32, lscale, rscale, work []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggbal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_lscale), (*C.float)(_rscale), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbal.f. +func Dggbal(job lapack.Job, n int, a []float64, lda int, b []float64, ldb int, ilo, ihi []int32, lscale, rscale, work []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggbal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_lscale), (*C.double)(_rscale), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggbal.f. +func Cggbal(job lapack.Job, n int, a []complex64, lda int, b []complex64, ldb int, ilo, ihi []int32, lscale, rscale, work []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cggbal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_lscale), (*C.float)(_rscale), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggbal.f. +func Zggbal(job lapack.Job, n int, a []complex128, lda int, b []complex128, ldb int, ilo, ihi []int32, lscale, rscale, work []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zggbal_work((C.int)(rowMajor), (C.char)(job), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_lscale), (*C.double)(_rscale), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggev.f. +func Sggev(jobvl, jobvr lapack.Job, n int, a []float32, lda int, b []float32, ldb int, alphar, alphai, beta, vl []float32, ldvl int, vr []float32, ldvr int, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float32 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float32 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_alphar), (*C.float)(_alphai), (*C.float)(_beta), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggev.f. +func Dggev(jobvl, jobvr lapack.Job, n int, a []float64, lda int, b []float64, ldb int, alphar, alphai, beta, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float64 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float64 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_alphar), (*C.double)(_alphai), (*C.double)(_beta), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggev.f. +func Cggev(jobvl, jobvr lapack.Job, n int, a []complex64, lda int, b []complex64, ldb int, alpha, beta, vl []complex64, ldvl int, vr []complex64, ldvr int, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cggev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_beta), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggev.f. +func Zggev(jobvl, jobvr lapack.Job, n int, a []complex128, lda int, b []complex128, ldb int, alpha, beta, vl []complex128, ldvl int, vr []complex128, ldvr int, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex128 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zggev_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_beta), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggev3.f. +func Sggev3(jobvl, jobvr lapack.Job, n int, a []float32, lda int, b []float32, ldb int, alphar, alphai, beta, vl []float32, ldvl int, vr []float32, ldvr int, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float32 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float32 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggev3_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_alphar), (*C.float)(_alphai), (*C.float)(_beta), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggev3.f. +func Dggev3(jobvl, jobvr lapack.Job, n int, a []float64, lda int, b []float64, ldb int, alphar, alphai, beta, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float64 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float64 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggev3_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_alphar), (*C.double)(_alphai), (*C.double)(_beta), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggev3.f. +func Cggev3(jobvl, jobvr lapack.Job, n int, a []complex64, lda int, b []complex64, ldb int, alpha, beta, vl []complex64, ldvl int, vr []complex64, ldvr int, work []complex64, lwork int, rwork []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cggev3_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_beta), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggev3.f. +func Zggev3(jobvl, jobvr lapack.Job, n int, a []complex128, lda int, b []complex128, ldb int, alpha, beta, vl []complex128, ldvl int, vr []complex128, ldvr int, work []complex128, lwork int, rwork []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex128 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zggev3_work((C.int)(rowMajor), (C.char)(jobvl), (C.char)(jobvr), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_beta), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggevx.f. +func Sggevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []float32, lda int, b []float32, ldb int, alphar, alphai, beta, vl []float32, ldvl int, vr []float32, ldvr int, ilo, ihi []int32, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work []float32, lwork int, iwork, bwork []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float32 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float32 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _abnrm *float32 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _bbnrm *float32 + if len(bbnrm) > 0 { + _bbnrm = &bbnrm[0] + } + var _rconde *float32 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float32 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _bwork *int32 + if len(bwork) > 0 { + _bwork = &bwork[0] + } + return isZero(C.LAPACKE_sggevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_alphar), (*C.float)(_alphai), (*C.float)(_beta), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_lscale), (*C.float)(_rscale), (*C.float)(_abnrm), (*C.float)(_bbnrm), (*C.float)(_rconde), (*C.float)(_rcondv), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_logical)(_bwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggevx.f. +func Dggevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []float64, lda int, b []float64, ldb int, alphar, alphai, beta, vl []float64, ldvl int, vr []float64, ldvr int, ilo, ihi []int32, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work []float64, lwork int, iwork, bwork []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float64 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float64 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _abnrm *float64 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _bbnrm *float64 + if len(bbnrm) > 0 { + _bbnrm = &bbnrm[0] + } + var _rconde *float64 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float64 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _bwork *int32 + if len(bwork) > 0 { + _bwork = &bwork[0] + } + return isZero(C.LAPACKE_dggevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_alphar), (*C.double)(_alphai), (*C.double)(_beta), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_lscale), (*C.double)(_rscale), (*C.double)(_abnrm), (*C.double)(_bbnrm), (*C.double)(_rconde), (*C.double)(_rcondv), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_logical)(_bwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggevx.f. +func Cggevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []complex64, lda int, b []complex64, ldb int, alpha, beta, vl []complex64, ldvl int, vr []complex64, ldvr int, ilo, ihi []int32, lscale, rscale, abnrm, bbnrm, rconde, rcondv []float32, work []complex64, lwork int, rwork []float32, iwork, bwork []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float32 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float32 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _abnrm *float32 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _bbnrm *float32 + if len(bbnrm) > 0 { + _bbnrm = &bbnrm[0] + } + var _rconde *float32 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float32 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _bwork *int32 + if len(bwork) > 0 { + _bwork = &bwork[0] + } + return isZero(C.LAPACKE_cggevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_beta), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.float)(_lscale), (*C.float)(_rscale), (*C.float)(_abnrm), (*C.float)(_bbnrm), (*C.float)(_rconde), (*C.float)(_rcondv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_logical)(_bwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggevx.f. +func Zggevx(balanc byte, jobvl, jobvr lapack.Job, sense byte, n int, a []complex128, lda int, b []complex128, ldb int, alpha, beta, vl []complex128, ldvl int, vr []complex128, ldvr int, ilo, ihi []int32, lscale, rscale, abnrm, bbnrm, rconde, rcondv []float64, work []complex128, lwork int, rwork []float64, iwork, bwork []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex128 + if len(beta) > 0 { + _beta = &beta[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _ilo *int32 + if len(ilo) > 0 { + _ilo = &ilo[0] + } + var _ihi *int32 + if len(ihi) > 0 { + _ihi = &ihi[0] + } + var _lscale *float64 + if len(lscale) > 0 { + _lscale = &lscale[0] + } + var _rscale *float64 + if len(rscale) > 0 { + _rscale = &rscale[0] + } + var _abnrm *float64 + if len(abnrm) > 0 { + _abnrm = &abnrm[0] + } + var _bbnrm *float64 + if len(bbnrm) > 0 { + _bbnrm = &bbnrm[0] + } + var _rconde *float64 + if len(rconde) > 0 { + _rconde = &rconde[0] + } + var _rcondv *float64 + if len(rcondv) > 0 { + _rcondv = &rcondv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _bwork *int32 + if len(bwork) > 0 { + _bwork = &bwork[0] + } + return isZero(C.LAPACKE_zggevx_work((C.int)(rowMajor), (C.char)(balanc), (C.char)(jobvl), (C.char)(jobvr), (C.char)(sense), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_beta), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.lapack_int)(_ilo), (*C.lapack_int)(_ihi), (*C.double)(_lscale), (*C.double)(_rscale), (*C.double)(_abnrm), (*C.double)(_bbnrm), (*C.double)(_rconde), (*C.double)(_rcondv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_logical)(_bwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggglm.f. +func Sggglm(n, m, p int, a []float32, lda int, b []float32, ldb int, d, x, y, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _y *float32 + if len(y) > 0 { + _y = &y[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggglm_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_d), (*C.float)(_x), (*C.float)(_y), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggglm.f. +func Dggglm(n, m, p int, a []float64, lda int, b []float64, ldb int, d, x, y, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _y *float64 + if len(y) > 0 { + _y = &y[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggglm_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_d), (*C.double)(_x), (*C.double)(_y), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggglm.f. +func Cggglm(n, m, p int, a []complex64, lda int, b []complex64, ldb int, d, x, y, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _y *complex64 + if len(y) > 0 { + _y = &y[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cggglm_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_x), (*C.lapack_complex_float)(_y), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggglm.f. +func Zggglm(n, m, p int, a []complex128, lda int, b []complex128, ldb int, d, x, y, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _y *complex128 + if len(y) > 0 { + _y = &y[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zggglm_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_x), (*C.lapack_complex_double)(_y), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgghrd.f. +func Sgghrd(compq, compz lapack.Comp, n, ilo, ihi int, a []float32, lda int, b []float32, ldb int, q []float32, ldq int, z []float32, ldz int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_sgghrd_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_z), (C.lapack_int)(ldz))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgghrd.f. +func Dgghrd(compq, compz lapack.Comp, n, ilo, ihi int, a []float64, lda int, b []float64, ldb int, q []float64, ldq int, z []float64, ldz int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_dgghrd_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_z), (C.lapack_int)(ldz))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgghrd.f. +func Cgghrd(compq, compz lapack.Comp, n, ilo, ihi int, a []complex64, lda int, b []complex64, ldb int, q []complex64, ldq int, z []complex64, ldz int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_cgghrd_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgghrd.f. +func Zgghrd(compq, compz lapack.Comp, n, ilo, ihi int, a []complex128, lda int, b []complex128, ldb int, q []complex128, ldq int, z []complex128, ldz int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_zgghrd_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgghd3.f. +func Sgghd3(compq, compz lapack.Comp, n, ilo, ihi int, a []float32, lda int, b []float32, ldb int, q []float32, ldq int, z []float32, ldz int, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgghd3_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgghd3.f. +func Dgghd3(compq, compz lapack.Comp, n, ilo, ihi int, a []float64, lda int, b []float64, ldb int, q []float64, ldq int, z []float64, ldz int, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgghd3_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgghd3.f. +func Cgghd3(compq, compz lapack.Comp, n, ilo, ihi int, a []complex64, lda int, b []complex64, ldb int, q []complex64, ldq int, z []complex64, ldz int, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgghd3_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgghd3.f. +func Zgghd3(compq, compz lapack.Comp, n, ilo, ihi int, a []complex128, lda int, b []complex128, ldb int, q []complex128, ldq int, z []complex128, ldz int, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgghd3_work((C.int)(rowMajor), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgglse.f. +func Sgglse(m, n, p int, a []float32, lda int, b []float32, ldb int, c, d, x, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgglse_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_c), (*C.float)(_d), (*C.float)(_x), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgglse.f. +func Dgglse(m, n, p int, a []float64, lda int, b []float64, ldb int, c, d, x, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgglse_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_c), (*C.double)(_d), (*C.double)(_x), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgglse.f. +func Cgglse(m, n, p int, a []complex64, lda int, b []complex64, ldb int, c, d, x, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgglse_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_c), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_x), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgglse.f. +func Zgglse(m, n, p int, a []complex128, lda int, b []complex128, ldb int, c, d, x, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgglse_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_c), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_x), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggqrf.f. +func Sggqrf(n, m, p int, a []float32, lda int, taua, b []float32, ldb int, taub, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _taua *float32 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _taub *float32 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggqrf_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_taua), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_taub), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggqrf.f. +func Dggqrf(n, m, p int, a []float64, lda int, taua, b []float64, ldb int, taub, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _taua *float64 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _taub *float64 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggqrf_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_taua), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_taub), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggqrf.f. +func Cggqrf(n, m, p int, a []complex64, lda int, taua, b []complex64, ldb int, taub, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _taua *complex64 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _taub *complex64 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cggqrf_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_taua), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_taub), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggqrf.f. +func Zggqrf(n, m, p int, a []complex128, lda int, taua, b []complex128, ldb int, taub, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _taua *complex128 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _taub *complex128 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zggqrf_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(m), (C.lapack_int)(p), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_taua), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_taub), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggrqf.f. +func Sggrqf(m, p, n int, a []float32, lda int, taua, b []float32, ldb int, taub, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _taua *float32 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _taub *float32 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggrqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_taua), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_taub), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggrqf.f. +func Dggrqf(m, p, n int, a []float64, lda int, taua, b []float64, ldb int, taub, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _taua *float64 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _taub *float64 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggrqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_taua), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_taub), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggrqf.f. +func Cggrqf(m, p, n int, a []complex64, lda int, taua, b []complex64, ldb int, taub, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _taua *complex64 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _taub *complex64 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cggrqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_taua), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_taub), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggrqf.f. +func Zggrqf(m, p, n int, a []complex128, lda int, taua, b []complex128, ldb int, taub, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _taua *complex128 + if len(taua) > 0 { + _taua = &taua[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _taub *complex128 + if len(taub) > 0 { + _taub = &taub[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zggrqf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_taua), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_taub), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggsvd3.f. +func Sggsvd3(jobu, jobv, jobq lapack.Job, m, n, p int, k, l []int32, a []float32, lda int, b []float32, ldb int, alpha, beta, u []float32, ldu int, v []float32, ldv int, q []float32, ldq int, work []float32, lwork int, iwork []int32) bool { + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float32 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sggsvd3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_alpha), (*C.float)(_beta), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggsvd3.f. +func Dggsvd3(jobu, jobv, jobq lapack.Job, m, n, p int, k, l []int32, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int32) bool { + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dggsvd3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_alpha), (*C.double)(_beta), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggsvd3.f. +func Cggsvd3(jobu, jobv, jobq lapack.Job, m, n, p int, k, l []int32, a []complex64, lda int, b []complex64, ldb int, alpha, beta []float32, u []complex64, ldu int, v []complex64, ldv int, q []complex64, ldq int, work []complex64, lwork int, rwork []float32, iwork []int32) bool { + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float32 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cggsvd3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.float)(_alpha), (*C.float)(_beta), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggsvd3.f. +func Zggsvd3(jobu, jobv, jobq lapack.Job, m, n, p int, k, l []int32, a []complex128, lda int, b []complex128, ldb int, alpha, beta []float64, u []complex128, ldu int, v []complex128, ldv int, q []complex128, ldq int, work []complex128, lwork int, rwork []float64, iwork []int32) bool { + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zggsvd3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(p), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.double)(_alpha), (*C.double)(_beta), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggsvp3.f. +func Sggsvp3(jobu, jobv, jobq lapack.Job, m, p, n int, a []float32, lda int, b []float32, ldb int, tola, tolb float32, k, l []int32, u []float32, ldu int, v []float32, ldv int, q []float32, ldq int, iwork []int32, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sggsvp3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (C.float)(tola), (C.float)(tolb), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_iwork), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggsvp3.f. +func Dggsvp3(jobu, jobv, jobq lapack.Job, m, p, n int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, k, l []int32, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, iwork []int32, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dggsvp3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (C.double)(tola), (C.double)(tolb), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_iwork), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggsvp3.f. +func Cggsvp3(jobu, jobv, jobq lapack.Job, m, p, n int, a []complex64, lda int, b []complex64, ldb int, tola, tolb float32, k, l []int32, u []complex64, ldu int, v []complex64, ldv int, q []complex64, ldq int, iwork []int32, rwork []float32, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cggsvp3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (C.float)(tola), (C.float)(tolb), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_iwork), (*C.float)(_rwork), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggsvp3.f. +func Zggsvp3(jobu, jobv, jobq lapack.Job, m, p, n int, a []complex128, lda int, b []complex128, ldb int, tola, tolb float64, k, l []int32, u []complex128, ldu int, v []complex128, ldv int, q []complex128, ldq int, iwork []int32, rwork []float64, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + var _l *int32 + if len(l) > 0 { + _l = &l[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zggsvp3_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (C.double)(tola), (C.double)(tolb), (*C.lapack_int)(_k), (*C.lapack_int)(_l), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_iwork), (*C.double)(_rwork), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtcon.f. +func Sgtcon(norm byte, n int, dl, d, du, du2 []float32, ipiv []int32, anorm float32, rcond, work []float32, iwork []int32) bool { + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float32 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgtcon_work((C.char)(norm), (C.lapack_int)(n), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_du2), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtcon.f. +func Dgtcon(norm byte, n int, dl, d, du, du2 []float64, ipiv []int32, anorm float64, rcond, work []float64, iwork []int32) bool { + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgtcon_work((C.char)(norm), (C.lapack_int)(n), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_du2), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtcon.f. +func Cgtcon(norm byte, n int, dl, d, du, du2 []complex64, ipiv []int32, anorm float32, rcond []float32, work []complex64) bool { + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgtcon_work((C.char)(norm), (C.lapack_int)(n), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_du2), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtcon.f. +func Zgtcon(norm byte, n int, dl, d, du, du2 []complex128, ipiv []int32, anorm float64, rcond []float64, work []complex128) bool { + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex128 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgtcon_work((C.char)(norm), (C.lapack_int)(n), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_du2), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtrfs.f. +func Sgtrfs(trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []float32, ipiv []int32, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *float32 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _duf *float32 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *float32 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgtrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_dlf), (*C.float)(_df), (*C.float)(_duf), (*C.float)(_du2), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtrfs.f. +func Dgtrfs(trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []float64, ipiv []int32, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *float64 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _duf *float64 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *float64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgtrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_dlf), (*C.double)(_df), (*C.double)(_duf), (*C.double)(_du2), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtrfs.f. +func Cgtrfs(trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *complex64 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *complex64 + if len(df) > 0 { + _df = &df[0] + } + var _duf *complex64 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *complex64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgtrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_dlf), (*C.lapack_complex_float)(_df), (*C.lapack_complex_float)(_duf), (*C.lapack_complex_float)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtrfs.f. +func Zgtrfs(trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *complex128 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *complex128 + if len(df) > 0 { + _df = &df[0] + } + var _duf *complex128 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *complex128 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgtrfs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_dlf), (*C.lapack_complex_double)(_df), (*C.lapack_complex_double)(_duf), (*C.lapack_complex_double)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtsv.f. +func Sgtsv(n, nrhs int, dl, d, du, b []float32, ldb int) bool { + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgtsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsv.f. +func Dgtsv(n, nrhs int, dl, d, du, b []float64, ldb int) bool { + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgtsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtsv.f. +func Cgtsv(n, nrhs int, dl, d, du, b []complex64, ldb int) bool { + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgtsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtsv.f. +func Zgtsv(n, nrhs int, dl, d, du, b []complex128, ldb int) bool { + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgtsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtsvx.f. +func Sgtsvx(fact byte, trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []float32, ipiv []int32, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *float32 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _duf *float32 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *float32 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sgtsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_dlf), (*C.float)(_df), (*C.float)(_duf), (*C.float)(_du2), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsvx.f. +func Dgtsvx(fact byte, trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []float64, ipiv []int32, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *float64 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _duf *float64 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *float64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dgtsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_dlf), (*C.double)(_df), (*C.double)(_duf), (*C.double)(_du2), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtsvx.f. +func Cgtsvx(fact byte, trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *complex64 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *complex64 + if len(df) > 0 { + _df = &df[0] + } + var _duf *complex64 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *complex64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cgtsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_dlf), (*C.lapack_complex_float)(_df), (*C.lapack_complex_float)(_duf), (*C.lapack_complex_float)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtsvx.f. +func Zgtsvx(fact byte, trans blas.Transpose, n, nrhs int, dl, d, du, dlf, df, duf, du2 []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _dlf *complex128 + if len(dlf) > 0 { + _dlf = &dlf[0] + } + var _df *complex128 + if len(df) > 0 { + _df = &df[0] + } + var _duf *complex128 + if len(duf) > 0 { + _duf = &duf[0] + } + var _du2 *complex128 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zgtsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_dlf), (*C.lapack_complex_double)(_df), (*C.lapack_complex_double)(_duf), (*C.lapack_complex_double)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgttrf.f. +func Sgttrf(n int, dl, d, du, du2 []float32, ipiv []int32) bool { + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float32 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_sgttrf_work((C.lapack_int)(n), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_du2), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrf.f. +func Dgttrf(n int, dl, d, du, du2 []float64, ipiv []int32) bool { + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dgttrf_work((C.lapack_int)(n), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_du2), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgttrf.f. +func Cgttrf(n int, dl, d, du, du2 []complex64, ipiv []int32) bool { + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_cgttrf_work((C.lapack_int)(n), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_du2), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgttrf.f. +func Zgttrf(n int, dl, d, du, du2 []complex128, ipiv []int32) bool { + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex128 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zgttrf_work((C.lapack_int)(n), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_du2), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgttrs.f. +func Sgttrs(trans blas.Transpose, n, nrhs int, dl, d, du, du2 []float32, ipiv []int32, b []float32, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float32 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _du *float32 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float32 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sgttrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_dl), (*C.float)(_d), (*C.float)(_du), (*C.float)(_du2), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrs.f. +func Dgttrs(trans blas.Transpose, n, nrhs int, dl, d, du, du2 []float64, ipiv []int32, b []float64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *float64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _du *float64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *float64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dgttrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_dl), (*C.double)(_d), (*C.double)(_du), (*C.double)(_du2), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgttrs.f. +func Cgttrs(trans blas.Transpose, n, nrhs int, dl, d, du, du2 []complex64, ipiv []int32, b []complex64, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex64 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex64 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex64 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cgttrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_dl), (*C.lapack_complex_float)(_d), (*C.lapack_complex_float)(_du), (*C.lapack_complex_float)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgttrs.f. +func Zgttrs(trans blas.Transpose, n, nrhs int, dl, d, du, du2 []complex128, ipiv []int32, b []complex128, ldb int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _dl *complex128 + if len(dl) > 0 { + _dl = &dl[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _du *complex128 + if len(du) > 0 { + _du = &du[0] + } + var _du2 *complex128 + if len(du2) > 0 { + _du2 = &du2[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zgttrs_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_dl), (*C.lapack_complex_double)(_d), (*C.lapack_complex_double)(_du), (*C.lapack_complex_double)(_du2), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbev.f. +func Chbev(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []complex64, ldab int, w []float32, z []complex64, ldz int, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chbev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbev.f. +func Zhbev(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []complex128, ldab int, w []float64, z []complex128, ldz int, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhbev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbevd.f. +func Chbevd(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []complex64, ldab int, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_chbevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbevd.f. +func Zhbevd(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []complex128, ldab int, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zhbevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbevx.f. +func Chbevx(jobz lapack.Job, rng byte, ul blas.Uplo, n, kd int, ab []complex64, ldab int, q []complex64, ldq int, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_chbevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbevx.f. +func Zhbevx(jobz lapack.Job, rng byte, ul blas.Uplo, n, kd int, ab []complex128, ldab int, q []complex128, ldq int, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zhbevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgst.f. +func Chbgst(vect byte, ul blas.Uplo, n, ka, kb int, ab []complex64, ldab int, bb []complex64, ldbb int, x []complex64, ldx int, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chbgst_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_bb), (C.lapack_int)(ldbb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgst.f. +func Zhbgst(vect byte, ul blas.Uplo, n, ka, kb int, ab []complex128, ldab int, bb []complex128, ldbb int, x []complex128, ldx int, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex128 + if len(bb) > 0 { + _bb = &bb[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhbgst_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_bb), (C.lapack_int)(ldbb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgv.f. +func Chbgv(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []complex64, ldab int, bb []complex64, ldbb int, w []float32, z []complex64, ldz int, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chbgv_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgv.f. +func Zhbgv(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []complex128, ldab int, bb []complex128, ldbb int, w []float64, z []complex128, ldz int, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex128 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhbgv_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgvd.f. +func Chbgvd(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []complex64, ldab int, bb []complex64, ldbb int, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_chbgvd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgvd.f. +func Zhbgvd(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []complex128, ldab int, bb []complex128, ldbb int, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex128 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zhbgvd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgvx.f. +func Chbgvx(jobz lapack.Job, rng byte, ul blas.Uplo, n, ka, kb int, ab []complex64, ldab int, bb []complex64, ldbb int, q []complex64, ldq int, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_chbgvx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_bb), (C.lapack_int)(ldbb), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgvx.f. +func Zhbgvx(jobz lapack.Job, rng byte, ul blas.Uplo, n, ka, kb int, ab []complex128, ldab int, bb []complex128, ldbb int, q []complex128, ldq int, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *complex128 + if len(bb) > 0 { + _bb = &bb[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zhbgvx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_bb), (C.lapack_int)(ldbb), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbtrd.f. +func Chbtrd(vect byte, ul blas.Uplo, n, kd int, ab []complex64, ldab int, d, e []float32, q []complex64, ldq int, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chbtrd_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbtrd.f. +func Zhbtrd(vect byte, ul blas.Uplo, n, kd int, ab []complex128, ldab int, d, e []float64, q []complex128, ldq int, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhbtrd_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/checon.f. +func Checon(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, anorm float32, rcond []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_checon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhecon.f. +func Zhecon(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, anorm float64, rcond []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhecon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheequb.f. +func Cheequb(ul blas.Uplo, n int, a []complex64, lda int, s, scond, amax []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cheequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheequb.f. +func Zheequb(ul blas.Uplo, n int, a []complex128, lda int, s, scond, amax []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zheequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheev.f. +func Cheev(jobz lapack.Job, ul blas.Uplo, n int, a []complex64, lda int, w []float32, work []complex64, lwork int, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cheev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_w), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheev.f. +func Zheev(jobz lapack.Job, ul blas.Uplo, n int, a []complex128, lda int, w []float64, work []complex128, lwork int, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zheev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_w), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevd.f. +func Cheevd(jobz lapack.Job, ul blas.Uplo, n int, a []complex64, lda int, w []float32, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cheevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_w), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevd.f. +func Zheevd(jobz lapack.Job, ul blas.Uplo, n int, a []complex128, lda int, w []float64, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zheevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_w), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevr.f. +func Cheevr(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex64, lda int, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, isuppz []int32, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cheevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevr.f. +func Zheevr(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex128, lda int, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, isuppz []int32, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zheevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevx.f. +func Cheevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex64, lda int, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_cheevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevx.f. +func Zheevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex128, lda int, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zheevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegst.f. +func Chegst(itype int, ul blas.Uplo, n int, a []complex64, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_chegst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegst.f. +func Zhegst(itype int, ul blas.Uplo, n int, a []complex128, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zhegst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegv.f. +func Chegv(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []complex64, lda int, b []complex64, ldb int, w []float32, work []complex64, lwork int, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chegv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.float)(_w), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegv.f. +func Zhegv(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []complex128, lda int, b []complex128, ldb int, w []float64, work []complex128, lwork int, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhegv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.double)(_w), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvd.f. +func Chegvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []complex64, lda int, b []complex64, ldb int, w []float32, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_chegvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.float)(_w), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegvd.f. +func Zhegvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []complex128, lda int, b []complex128, ldb int, w []float64, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zhegvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.double)(_w), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvx.f. +func Chegvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex64, lda int, b []complex64, ldb int, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_chegvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegvx.f. +func Zhegvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []complex128, lda int, b []complex128, ldb int, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zhegvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cherfs.f. +func Cherfs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cherfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zherfs.f. +func Zherfs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zherfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chesv.f. +func Chesv(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chesv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhesv.f. +func Zhesv(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhesv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chesvx.f. +func Chesvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, lwork int, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhesvx.f. +func Zhesvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, lwork int, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhesvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrd.f. +func Chetrd(ul blas.Uplo, n int, a []complex64, lda int, d, e []float32, tau, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrd.f. +func Zhetrd(ul blas.Uplo, n int, a []complex128, lda int, d, e []float64, tau, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrf.f. +func Chetrf(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrf.f. +func Zhetrf(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri.f. +func Chetri(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri.f. +func Zhetri(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrs.f. +func Chetrs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_chetrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs.f. +func Zhetrs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zhetrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chfrk.f. +func Chfrk(transr blas.Transpose, ul blas.Uplo, trans blas.Transpose, n, k int, alpha float32, a []complex64, lda int, beta float32, c []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + return isZero(C.LAPACKE_chfrk_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(k), (C.float)(alpha), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.float)(beta), (*C.lapack_complex_float)(_c))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhfrk.f. +func Zhfrk(transr blas.Transpose, ul blas.Uplo, trans blas.Transpose, n, k int, alpha float64, a []complex128, lda int, beta float64, c []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + return isZero(C.LAPACKE_zhfrk_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(k), (C.double)(alpha), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.double)(beta), (*C.lapack_complex_double)(_c))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shgeqz.f. +func Shgeqz(job lapack.Job, compq, compz lapack.Comp, n, ilo, ihi int, h []float32, ldh int, t []float32, ldt int, alphar, alphai, beta, q []float32, ldq int, z []float32, ldz int, work []float32, lwork int) bool { + var _h *float32 + if len(h) > 0 { + _h = &h[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _alphar *float32 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float32 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_shgeqz_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_h), (C.lapack_int)(ldh), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_alphar), (*C.float)(_alphai), (*C.float)(_beta), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhgeqz.f. +func Dhgeqz(job lapack.Job, compq, compz lapack.Comp, n, ilo, ihi int, h []float64, ldh int, t []float64, ldt int, alphar, alphai, beta, q []float64, ldq int, z []float64, ldz int, work []float64, lwork int) bool { + var _h *float64 + if len(h) > 0 { + _h = &h[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _alphar *float64 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float64 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dhgeqz_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_h), (C.lapack_int)(ldh), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_alphar), (*C.double)(_alphai), (*C.double)(_beta), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chgeqz.f. +func Chgeqz(job lapack.Job, compq, compz lapack.Comp, n, ilo, ihi int, h []complex64, ldh int, t []complex64, ldt int, alpha, beta, q []complex64, ldq int, z []complex64, ldz int, work []complex64, lwork int, rwork []float32) bool { + var _h *complex64 + if len(h) > 0 { + _h = &h[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chgeqz_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_beta), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhgeqz.f. +func Zhgeqz(job lapack.Job, compq, compz lapack.Comp, n, ilo, ihi int, h []complex128, ldh int, t []complex128, ldt int, alpha, beta, q []complex128, ldq int, z []complex128, ldz int, work []complex128, lwork int, rwork []float64) bool { + var _h *complex128 + if len(h) > 0 { + _h = &h[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex128 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhgeqz_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_beta), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpcon.f. +func Chpcon(ul blas.Uplo, n int, ap []complex64, ipiv []int32, anorm float32, rcond []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chpcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpcon.f. +func Zhpcon(ul blas.Uplo, n int, ap []complex128, ipiv []int32, anorm float64, rcond []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhpcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpev.f. +func Chpev(jobz lapack.Job, ul blas.Uplo, n int, ap []complex64, w []float32, z []complex64, ldz int, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chpev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpev.f. +func Zhpev(jobz lapack.Job, ul blas.Uplo, n int, ap []complex128, w []float64, z []complex128, ldz int, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhpev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpevd.f. +func Chpevd(jobz lapack.Job, ul blas.Uplo, n int, ap []complex64, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_chpevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpevd.f. +func Zhpevd(jobz lapack.Job, ul blas.Uplo, n int, ap []complex128, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zhpevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpevx.f. +func Chpevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap []complex64, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_chpevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpevx.f. +func Zhpevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap []complex128, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zhpevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgst.f. +func Chpgst(itype int, ul blas.Uplo, n int, ap, bp []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex64 + if len(bp) > 0 { + _bp = &bp[0] + } + return isZero(C.LAPACKE_chpgst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_bp))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgst.f. +func Zhpgst(itype int, ul blas.Uplo, n int, ap, bp []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex128 + if len(bp) > 0 { + _bp = &bp[0] + } + return isZero(C.LAPACKE_zhpgst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_bp))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgv.f. +func Chpgv(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp []complex64, w []float32, z []complex64, ldz int, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chpgv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_bp), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgv.f. +func Zhpgv(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp []complex128, w []float64, z []complex128, ldz int, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex128 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhpgv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_bp), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgvd.f. +func Chpgvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp []complex64, w []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_chpgvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_bp), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgvd.f. +func Zhpgvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp []complex128, w []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex128 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zhpgvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_bp), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgvx.f. +func Chpgvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap, bp []complex64, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, work []complex64, rwork []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_chpgvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_bp), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (*C.float)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgvx.f. +func Zhpgvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap, bp []complex128, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, work []complex128, rwork []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *complex128 + if len(bp) > 0 { + _bp = &bp[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_zhpgvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_bp), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (*C.double)(_rwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chprfs.f. +func Chprfs(ul blas.Uplo, n, nrhs int, ap, afp []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhprfs.f. +func Zhprfs(ul blas.Uplo, n, nrhs int, ap, afp []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpsv.f. +func Chpsv(ul blas.Uplo, n, nrhs int, ap []complex64, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_chpsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpsv.f. +func Zhpsv(ul blas.Uplo, n, nrhs int, ap []complex128, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zhpsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpsvx.f. +func Chpsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_chpsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpsvx.f. +func Zhpsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zhpsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrd.f. +func Chptrd(ul blas.Uplo, n int, ap []complex64, d, e []float32, tau []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_chptrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrd.f. +func Zhptrd(ul blas.Uplo, n int, ap []complex128, d, e []float64, tau []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_zhptrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrf.f. +func Chptrf(ul blas.Uplo, n int, ap []complex64, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_chptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrf.f. +func Zhptrf(ul blas.Uplo, n int, ap []complex128, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zhptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptri.f. +func Chptri(ul blas.Uplo, n int, ap []complex64, ipiv []int32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptri.f. +func Zhptri(ul blas.Uplo, n int, ap []complex128, ipiv []int32, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrs.f. +func Chptrs(ul blas.Uplo, n, nrhs int, ap []complex64, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_chptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrs.f. +func Zhptrs(ul blas.Uplo, n, nrhs int, ap []complex128, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zhptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shsein.f. +func Shsein(job lapack.Job, eigsrc, initv byte, sel []int32, n int, h []float32, ldh int, wr, wi, vl []float32, ldvl int, vr []float32, ldvr, mm int, m []int32, work []float32, ifaill, ifailr []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _h *float32 + if len(h) > 0 { + _h = &h[0] + } + var _wr *float32 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float32 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _ifaill *int32 + if len(ifaill) > 0 { + _ifaill = &ifaill[0] + } + var _ifailr *int32 + if len(ifailr) > 0 { + _ifailr = &ifailr[0] + } + return isZero(C.LAPACKE_shsein_work((C.int)(rowMajor), (C.char)(job), (C.char)(eigsrc), (C.char)(initv), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_h), (C.lapack_int)(ldh), (*C.float)(_wr), (*C.float)(_wi), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.float)(_work), (*C.lapack_int)(_ifaill), (*C.lapack_int)(_ifailr))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhsein.f. +func Dhsein(job lapack.Job, eigsrc, initv byte, sel []int32, n int, h []float64, ldh int, wr, wi, vl []float64, ldvl int, vr []float64, ldvr, mm int, m []int32, work []float64, ifaill, ifailr []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _h *float64 + if len(h) > 0 { + _h = &h[0] + } + var _wr *float64 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float64 + if len(wi) > 0 { + _wi = &wi[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _ifaill *int32 + if len(ifaill) > 0 { + _ifaill = &ifaill[0] + } + var _ifailr *int32 + if len(ifailr) > 0 { + _ifailr = &ifailr[0] + } + return isZero(C.LAPACKE_dhsein_work((C.int)(rowMajor), (C.char)(job), (C.char)(eigsrc), (C.char)(initv), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_h), (C.lapack_int)(ldh), (*C.double)(_wr), (*C.double)(_wi), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.double)(_work), (*C.lapack_int)(_ifaill), (*C.lapack_int)(_ifailr))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chsein.f. +func Chsein(job lapack.Job, eigsrc, initv byte, sel []int32, n int, h []complex64, ldh int, w, vl []complex64, ldvl int, vr []complex64, ldvr, mm int, m []int32, work []complex64, rwork []float32, ifaill, ifailr []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _h *complex64 + if len(h) > 0 { + _h = &h[0] + } + var _w *complex64 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _ifaill *int32 + if len(ifaill) > 0 { + _ifaill = &ifaill[0] + } + var _ifailr *int32 + if len(ifailr) > 0 { + _ifailr = &ifailr[0] + } + return isZero(C.LAPACKE_chsein_work((C.int)(rowMajor), (C.char)(job), (C.char)(eigsrc), (C.char)(initv), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_float)(_w), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_float)(_work), (*C.float)(_rwork), (*C.lapack_int)(_ifaill), (*C.lapack_int)(_ifailr))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhsein.f. +func Zhsein(job lapack.Job, eigsrc, initv byte, sel []int32, n int, h []complex128, ldh int, w, vl []complex128, ldvl int, vr []complex128, ldvr, mm int, m []int32, work []complex128, rwork []float64, ifaill, ifailr []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _h *complex128 + if len(h) > 0 { + _h = &h[0] + } + var _w *complex128 + if len(w) > 0 { + _w = &w[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _ifaill *int32 + if len(ifaill) > 0 { + _ifaill = &ifaill[0] + } + var _ifailr *int32 + if len(ifailr) > 0 { + _ifailr = &ifailr[0] + } + return isZero(C.LAPACKE_zhsein_work((C.int)(rowMajor), (C.char)(job), (C.char)(eigsrc), (C.char)(initv), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_double)(_w), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_double)(_work), (*C.double)(_rwork), (*C.lapack_int)(_ifaill), (*C.lapack_int)(_ifailr))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shseqr.f. +func Shseqr(job lapack.Job, compz lapack.Comp, n, ilo, ihi int, h []float32, ldh int, wr, wi, z []float32, ldz int, work []float32, lwork int) int { + var _h *float32 + if len(h) > 0 { + _h = &h[0] + } + var _wr *float32 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float32 + if len(wi) > 0 { + _wi = &wi[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_shseqr_work((C.int)(rowMajor), (C.char)(job), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_h), (C.lapack_int)(ldh), (*C.float)(_wr), (*C.float)(_wi), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhseqr.f. +func Dhseqr(job lapack.Job, compz lapack.Comp, n, ilo, ihi int, h []float64, ldh int, wr, wi, z []float64, ldz int, work []float64, lwork int) int { + var _h *float64 + if len(h) > 0 { + _h = &h[0] + } + var _wr *float64 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float64 + if len(wi) > 0 { + _wi = &wi[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_dhseqr_work((C.int)(rowMajor), (C.char)(job), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_h), (C.lapack_int)(ldh), (*C.double)(_wr), (*C.double)(_wi), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chseqr.f. +func Chseqr(job lapack.Job, compz lapack.Comp, n, ilo, ihi int, h []complex64, ldh int, w, z []complex64, ldz int, work []complex64, lwork int) int { + var _h *complex64 + if len(h) > 0 { + _h = &h[0] + } + var _w *complex64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_chseqr_work((C.int)(rowMajor), (C.char)(job), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhseqr.f. +func Zhseqr(job lapack.Job, compz lapack.Comp, n, ilo, ihi int, h []complex128, ldh int, w, z []complex128, ldz int, work []complex128, lwork int) int { + var _h *complex128 + if len(h) > 0 { + _h = &h[0] + } + var _w *complex128 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return int(C.LAPACKE_zhseqr_work((C.int)(rowMajor), (C.char)(job), (C.char)(compz), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_h), (C.lapack_int)(ldh), (*C.lapack_complex_double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacgv.f. +func Clacgv(n int, x []complex64, incx int) bool { + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_clacgv_work((C.lapack_int)(n), (*C.lapack_complex_float)(_x), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacgv.f. +func Zlacgv(n int, x []complex128, incx int) bool { + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_zlacgv_work((C.lapack_int)(n), (*C.lapack_complex_double)(_x), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slacn2.f. +func Slacn2(n int, v, x []float32, isgn []int32, est []float32, kase, isave []int32) bool { + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _isgn *int32 + if len(isgn) > 0 { + _isgn = &isgn[0] + } + var _est *float32 + if len(est) > 0 { + _est = &est[0] + } + var _kase *int32 + if len(kase) > 0 { + _kase = &kase[0] + } + var _isave *int32 + if len(isave) > 0 { + _isave = &isave[0] + } + return isZero(C.LAPACKE_slacn2_work((C.lapack_int)(n), (*C.float)(_v), (*C.float)(_x), (*C.lapack_int)(_isgn), (*C.float)(_est), (*C.lapack_int)(_kase), (*C.lapack_int)(_isave))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f. +func Dlacn2(n int, v, x []float64, isgn []int32, est []float64, kase, isave []int32) bool { + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _isgn *int32 + if len(isgn) > 0 { + _isgn = &isgn[0] + } + var _est *float64 + if len(est) > 0 { + _est = &est[0] + } + var _kase *int32 + if len(kase) > 0 { + _kase = &kase[0] + } + var _isave *int32 + if len(isave) > 0 { + _isave = &isave[0] + } + return isZero(C.LAPACKE_dlacn2_work((C.lapack_int)(n), (*C.double)(_v), (*C.double)(_x), (*C.lapack_int)(_isgn), (*C.double)(_est), (*C.lapack_int)(_kase), (*C.lapack_int)(_isave))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacn2.f. +func Clacn2(n int, v, x []complex64, est []float32, kase, isave []int32) bool { + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _est *float32 + if len(est) > 0 { + _est = &est[0] + } + var _kase *int32 + if len(kase) > 0 { + _kase = &kase[0] + } + var _isave *int32 + if len(isave) > 0 { + _isave = &isave[0] + } + return isZero(C.LAPACKE_clacn2_work((C.lapack_int)(n), (*C.lapack_complex_float)(_v), (*C.lapack_complex_float)(_x), (*C.float)(_est), (*C.lapack_int)(_kase), (*C.lapack_int)(_isave))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacn2.f. +func Zlacn2(n int, v, x []complex128, est []float64, kase, isave []int32) bool { + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _est *float64 + if len(est) > 0 { + _est = &est[0] + } + var _kase *int32 + if len(kase) > 0 { + _kase = &kase[0] + } + var _isave *int32 + if len(isave) > 0 { + _isave = &isave[0] + } + return isZero(C.LAPACKE_zlacn2_work((C.lapack_int)(n), (*C.lapack_complex_double)(_v), (*C.lapack_complex_double)(_x), (*C.double)(_est), (*C.lapack_int)(_kase), (*C.lapack_int)(_isave))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slacpy.f. +func Slacpy(ul blas.Uplo, m, n int, a []float32, lda int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_slacpy_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacpy.f. +func Dlacpy(ul blas.Uplo, m, n int, a []float64, lda int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dlacpy_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacpy.f. +func Clacpy(ul blas.Uplo, m, n int, a []complex64, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_clacpy_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacpy.f. +func Zlacpy(ul blas.Uplo, m, n int, a []complex128, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zlacpy_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacp2.f. +func Clacp2(ul blas.Uplo, m, n int, a []float32, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_clacp2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacp2.f. +func Zlacp2(ul blas.Uplo, m, n int, a []float64, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zlacp2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlag2c.f. +func Zlag2c(m, n int, a []complex128, lda int, sa []complex64, ldsa int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _sa *complex64 + if len(sa) > 0 { + _sa = &sa[0] + } + return isZero(C.LAPACKE_zlag2c_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_sa), (C.lapack_int)(ldsa))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slag2d.f. +func Slag2d(m, n int, sa []float32, ldsa int, a []float64, lda int) bool { + var _sa *float32 + if len(sa) > 0 { + _sa = &sa[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_slag2d_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_sa), (C.lapack_int)(ldsa), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlag2s.f. +func Dlag2s(m, n int, a []float64, lda int, sa []float32, ldsa int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _sa *float32 + if len(sa) > 0 { + _sa = &sa[0] + } + return isZero(C.LAPACKE_dlag2s_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.float)(_sa), (C.lapack_int)(ldsa))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clag2z.f. +func Clag2z(m, n int, sa []complex64, ldsa int, a []complex128, lda int) bool { + var _sa *complex64 + if len(sa) > 0 { + _sa = &sa[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_clag2z_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_sa), (C.lapack_int)(ldsa), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagge.f. +func Slagge(m, n, kl, ku int, d, a []float32, lda int, iseed []int32, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_slagge_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_d), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagge.f. +func Dlagge(m, n, kl, ku int, d, a []float64, lda int, iseed []int32, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dlagge_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_d), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clagge.f. +func Clagge(m, n, kl, ku int, d []float32, a []complex64, lda int, iseed []int32, work []complex64) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_clagge_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.float)(_d), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlagge.f. +func Zlagge(m, n, kl, ku int, d []float64, a []complex128, lda int, iseed []int32, work []complex128) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlagge_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(kl), (C.lapack_int)(ku), (*C.double)(_d), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claghe.f. +func Claghe(n, k int, d []float32, a []complex64, lda int, iseed []int32, work []complex64) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_claghe_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_d), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaghe.f. +func Zlaghe(n, k int, d []float64, a []complex128, lda int, iseed []int32, work []complex128) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlaghe_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_d), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagsy.f. +func Slagsy(n, k int, d, a []float32, lda int, iseed []int32, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_slagsy_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_d), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagsy.f. +func Dlagsy(n, k int, d, a []float64, lda int, iseed []int32, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dlagsy_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_d), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clagsy.f. +func Clagsy(n, k int, d []float32, a []complex64, lda int, iseed []int32, work []complex64) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_clagsy_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_d), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlagsy.f. +func Zlagsy(n, k int, d []float64, a []complex128, lda int, iseed []int32, work []complex128) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlagsy_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_d), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_iseed), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapmr.f. +func Slapmr(forwrd int32, m, n int, x []float32, ldx int, k []int32) bool { + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_slapmr_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmr.f. +func Dlapmr(forwrd int32, m, n int, x []float64, ldx int, k []int32) bool { + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_dlapmr_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmr.f. +func Clapmr(forwrd int32, m, n int, x []complex64, ldx int, k []int32) bool { + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_clapmr_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlapmr.f. +func Zlapmr(forwrd int32, m, n int, x []complex128, ldx int, k []int32) bool { + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_zlapmr_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapmt.f. +func Slapmt(forwrd int32, m, n int, x []float32, ldx int, k []int32) bool { + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_slapmt_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmt.f. +func Dlapmt(forwrd int32, m, n int, x []float64, ldx int, k []int32) bool { + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_dlapmt_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmt.f. +func Clapmt(forwrd int32, m, n int, x []complex64, ldx int, k []int32) bool { + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_clapmt_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlapmt.f. +func Zlapmt(forwrd int32, m, n int, x []complex128, ldx int, k []int32) bool { + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _k *int32 + if len(k) > 0 { + _k = &k[0] + } + return isZero(C.LAPACKE_zlapmt_work((C.int)(rowMajor), (C.lapack_logical)(forwrd), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.lapack_int)(_k))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartgp.f. +func Slartgp(f, g float32, cs, sn, r []float32) bool { + var _cs *float32 + if len(cs) > 0 { + _cs = &cs[0] + } + var _sn *float32 + if len(sn) > 0 { + _sn = &sn[0] + } + var _r *float32 + if len(r) > 0 { + _r = &r[0] + } + return isZero(C.LAPACKE_slartgp_work((C.float)(f), (C.float)(g), (*C.float)(_cs), (*C.float)(_sn), (*C.float)(_r))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgp.f. +func Dlartgp(f, g float64, cs, sn, r []float64) bool { + var _cs *float64 + if len(cs) > 0 { + _cs = &cs[0] + } + var _sn *float64 + if len(sn) > 0 { + _sn = &sn[0] + } + var _r *float64 + if len(r) > 0 { + _r = &r[0] + } + return isZero(C.LAPACKE_dlartgp_work((C.double)(f), (C.double)(g), (*C.double)(_cs), (*C.double)(_sn), (*C.double)(_r))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartgs.f. +func Slartgs(x, y, sigma float32, cs, sn []float32) bool { + var _cs *float32 + if len(cs) > 0 { + _cs = &cs[0] + } + var _sn *float32 + if len(sn) > 0 { + _sn = &sn[0] + } + return isZero(C.LAPACKE_slartgs_work((C.float)(x), (C.float)(y), (C.float)(sigma), (*C.float)(_cs), (*C.float)(_sn))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgs.f. +func Dlartgs(x, y, sigma float64, cs, sn []float64) bool { + var _cs *float64 + if len(cs) > 0 { + _cs = &cs[0] + } + var _sn *float64 + if len(sn) > 0 { + _sn = &sn[0] + } + return isZero(C.LAPACKE_dlartgs_work((C.double)(x), (C.double)(y), (C.double)(sigma), (*C.double)(_cs), (*C.double)(_sn))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy2.f. +func Slapy2(x, y float32) float32 { + return float32(C.LAPACKE_slapy2_work((C.float)(x), (C.float)(y))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f. +func Dlapy2(x, y float64) float64 { + return float64(C.LAPACKE_dlapy2_work((C.double)(x), (C.double)(y))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy3.f. +func Slapy3(x, y, z float32) float32 { + return float32(C.LAPACKE_slapy3_work((C.float)(x), (C.float)(y), (C.float)(z))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f. +func Dlapy3(x, y, z float64) float64 { + return float64(C.LAPACKE_dlapy3_work((C.double)(x), (C.double)(y), (C.double)(z))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slamch.f. +func Slamch(cmach byte) float32 { + return float32(C.LAPACKE_slamch_work((C.char)(cmach))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlamch.f. +func Dlamch(cmach byte) float64 { + return float64(C.LAPACKE_dlamch_work((C.char)(cmach))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slange.f. +func Slange(norm byte, m, n int, a []float32, lda int, work []float32) float32 { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_slange_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlange.f. +func Dlange(norm byte, m, n int, a []float64, lda int, work []float64) float64 { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_dlange_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clange.f. +func Clange(norm byte, m, n int, a []complex64, lda int, work []float32) float32 { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_clange_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlange.f. +func Zlange(norm byte, m, n int, a []complex128, lda int, work []float64) float64 { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_zlange_work((C.int)(rowMajor), (C.char)(norm), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhe.f. +func Clanhe(norm byte, ul blas.Uplo, n int, a []complex64, lda int, work []float32) float32 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_clanhe_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhe.f. +func Zlanhe(norm byte, ul blas.Uplo, n int, a []complex128, lda int, work []float64) float64 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_zlanhe_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansy.f. +func Slansy(norm byte, ul blas.Uplo, n int, a []float32, lda int, work []float32) float32 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_slansy_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansy.f. +func Dlansy(norm byte, ul blas.Uplo, n int, a []float64, lda int, work []float64) float64 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_dlansy_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansy.f. +func Clansy(norm byte, ul blas.Uplo, n int, a []complex64, lda int, work []float32) float32 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_clansy_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlansy.f. +func Zlansy(norm byte, ul blas.Uplo, n int, a []complex128, lda int, work []float64) float64 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_zlansy_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slantr.f. +func Slantr(norm byte, ul blas.Uplo, d blas.Diag, m, n int, a []float32, lda int, work []float32) float32 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_slantr_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantr.f. +func Dlantr(norm byte, ul blas.Uplo, d blas.Diag, m, n int, a []float64, lda int, work []float64) float64 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_dlantr_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantr.f. +func Clantr(norm byte, ul blas.Uplo, d blas.Diag, m, n int, a []complex64, lda int, work []float32) float32 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return float32(C.LAPACKE_clantr_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlantr.f. +func Zlantr(norm byte, ul blas.Uplo, d blas.Diag, m, n int, a []complex128, lda int, work []float64) float64 { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return float64(C.LAPACKE_zlantr_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfb.f. +func Slarfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k int, v []float32, ldv int, t []float32, ldt int, c []float32, ldc int, work []float32, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_slarfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f. +func Dlarfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k int, v []float64, ldv int, t []float64, ldt int, c []float64, ldc int, work []float64, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dlarfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfb.f. +func Clarfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k int, v []complex64, ldv int, t []complex64, ldt int, c []complex64, ldc int, work []complex64, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_clarfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfb.f. +func Zlarfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k int, v []complex128, ldv int, t []complex128, ldt int, c []complex128, ldc int, work []complex128, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlarfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfg.f. +func Slarfg(n int, alpha, x []float32, incx int, tau []float32) bool { + var _alpha *float32 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_slarfg_work((C.lapack_int)(n), (*C.float)(_alpha), (*C.float)(_x), (C.lapack_int)(incx), (*C.float)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f. +func Dlarfg(n int, alpha, x []float64, incx int, tau []float64) bool { + var _alpha *float64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_dlarfg_work((C.lapack_int)(n), (*C.double)(_alpha), (*C.double)(_x), (C.lapack_int)(incx), (*C.double)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfg.f. +func Clarfg(n int, alpha, x []complex64, incx int, tau []complex64) bool { + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_clarfg_work((C.lapack_int)(n), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_x), (C.lapack_int)(incx), (*C.lapack_complex_float)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfg.f. +func Zlarfg(n int, alpha, x []complex128, incx int, tau []complex128) bool { + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_zlarfg_work((C.lapack_int)(n), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_x), (C.lapack_int)(incx), (*C.lapack_complex_double)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarft.f. +func Slarft(direct, storev byte, n, k int, v []float32, ldv int, tau, t []float32, ldt int) bool { + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_slarft_work((C.int)(rowMajor), (C.char)(direct), (C.char)(storev), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_tau), (*C.float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f. +func Dlarft(direct, storev byte, n, k int, v []float64, ldv int, tau, t []float64, ldt int) bool { + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_dlarft_work((C.int)(rowMajor), (C.char)(direct), (C.char)(storev), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_tau), (*C.double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarft.f. +func Clarft(direct, storev byte, n, k int, v []complex64, ldv int, tau, t []complex64, ldt int) bool { + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_clarft_work((C.int)(rowMajor), (C.char)(direct), (C.char)(storev), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarft.f. +func Zlarft(direct, storev byte, n, k int, v []complex128, ldv int, tau, t []complex128, ldt int) bool { + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_zlarft_work((C.int)(rowMajor), (C.char)(direct), (C.char)(storev), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfx.f. +func Slarfx(side blas.Side, m, n int, v []float32, tau float32, c []float32, ldc int, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_slarfx_work((C.int)(rowMajor), (C.char)(side), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_v), (C.float)(tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfx.f. +func Dlarfx(side blas.Side, m, n int, v []float64, tau float64, c []float64, ldc int, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dlarfx_work((C.int)(rowMajor), (C.char)(side), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_v), (C.double)(tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfx.f. +func Clarfx(side blas.Side, m, n int, v []complex64, tau complex64, c []complex64, ldc int, work []complex64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_clarfx_work((C.int)(rowMajor), (C.char)(side), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_v), (C.lapack_complex_float)(tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfx.f. +func Zlarfx(side blas.Side, m, n int, v []complex128, tau complex128, c []complex128, ldc int, work []complex128) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlarfx_work((C.int)(rowMajor), (C.char)(side), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_v), (C.lapack_complex_double)(tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarnv.f. +func Slarnv(idist int, iseed []int32, n int, x []float32) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_slarnv_work((C.lapack_int)(idist), (*C.lapack_int)(_iseed), (C.lapack_int)(n), (*C.float)(_x))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarnv.f. +func Dlarnv(idist int, iseed []int32, n int, x []float64) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_dlarnv_work((C.lapack_int)(idist), (*C.lapack_int)(_iseed), (C.lapack_int)(n), (*C.double)(_x))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarnv.f. +func Clarnv(idist int, iseed []int32, n int, x []complex64) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_clarnv_work((C.lapack_int)(idist), (*C.lapack_int)(_iseed), (C.lapack_int)(n), (*C.lapack_complex_float)(_x))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarnv.f. +func Zlarnv(idist int, iseed []int32, n int, x []complex128) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + return isZero(C.LAPACKE_zlarnv_work((C.lapack_int)(idist), (*C.lapack_int)(_iseed), (C.lapack_int)(n), (*C.lapack_complex_double)(_x))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slascl.f. +func Slascl(typ byte, kl, ku int, cfrom, cto float32, m, n int, a []float32, lda int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_slascl_work((C.int)(rowMajor), (C.char)(typ), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.float)(cfrom), (C.float)(cto), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlascl.f. +func Dlascl(typ byte, kl, ku int, cfrom, cto float64, m, n int, a []float64, lda int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dlascl_work((C.int)(rowMajor), (C.char)(typ), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.double)(cfrom), (C.double)(cto), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clascl.f. +func Clascl(typ byte, kl, ku int, cfrom, cto float32, m, n int, a []complex64, lda int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_clascl_work((C.int)(rowMajor), (C.char)(typ), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.float)(cfrom), (C.float)(cto), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlascl.f. +func Zlascl(typ byte, kl, ku int, cfrom, cto float64, m, n int, a []complex128, lda int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zlascl_work((C.int)(rowMajor), (C.char)(typ), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.double)(cfrom), (C.double)(cto), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaset.f. +func Slaset(ul blas.Uplo, m, n int, alpha, beta float32, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_slaset_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (C.float)(alpha), (C.float)(beta), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaset.f. +func Dlaset(ul blas.Uplo, m, n int, alpha, beta float64, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dlaset_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (C.double)(alpha), (C.double)(beta), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claset.f. +func Claset(ul blas.Uplo, m, n int, alpha, beta complex64, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_claset_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_complex_float)(alpha), (C.lapack_complex_float)(beta), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaset.f. +func Zlaset(ul blas.Uplo, m, n int, alpha, beta complex128, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + ul = 'A' + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zlaset_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_complex_double)(alpha), (C.lapack_complex_double)(beta), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasrt.f. +func Slasrt(id byte, n int, d []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + return isZero(C.LAPACKE_slasrt_work((C.char)(id), (C.lapack_int)(n), (*C.float)(_d))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasrt.f. +func Dlasrt(id byte, n int, d []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + return isZero(C.LAPACKE_dlasrt_work((C.char)(id), (C.lapack_int)(n), (*C.double)(_d))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaswp.f. +func Slaswp(n int, a []float32, lda, k1, k2 int, ipiv []int32, incx int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_slaswp_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.lapack_int)(k1), (C.lapack_int)(k2), (*C.lapack_int)(_ipiv), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f. +func Dlaswp(n int, a []float64, lda, k1, k2 int, ipiv []int32, incx int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dlaswp_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.lapack_int)(k1), (C.lapack_int)(k2), (*C.lapack_int)(_ipiv), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claswp.f. +func Claswp(n int, a []complex64, lda, k1, k2 int, ipiv []int32, incx int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_claswp_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.lapack_int)(k1), (C.lapack_int)(k2), (*C.lapack_int)(_ipiv), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaswp.f. +func Zlaswp(n int, a []complex128, lda, k1, k2 int, ipiv []int32, incx int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zlaswp_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.lapack_int)(k1), (C.lapack_int)(k2), (*C.lapack_int)(_ipiv), (C.lapack_int)(incx))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatms.f. +func Slatms(m, n int, dist byte, iseed []int32, sym byte, d []float32, mode int, cond, dmax float32, kl, ku int, pack byte, a []float32, lda int, work []float32) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_slatms_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.char)(dist), (*C.lapack_int)(_iseed), (C.char)(sym), (*C.float)(_d), (C.lapack_int)(mode), (C.float)(cond), (C.float)(dmax), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.char)(pack), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatms.f. +func Dlatms(m, n int, dist byte, iseed []int32, sym byte, d []float64, mode int, cond, dmax float64, kl, ku int, pack byte, a []float64, lda int, work []float64) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dlatms_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.char)(dist), (*C.lapack_int)(_iseed), (C.char)(sym), (*C.double)(_d), (C.lapack_int)(mode), (C.double)(cond), (C.double)(dmax), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.char)(pack), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatms.f. +func Clatms(m, n int, dist byte, iseed []int32, sym byte, d []float32, mode int, cond, dmax float32, kl, ku int, pack byte, a []complex64, lda int, work []complex64) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_clatms_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.char)(dist), (*C.lapack_int)(_iseed), (C.char)(sym), (*C.float)(_d), (C.lapack_int)(mode), (C.float)(cond), (C.float)(dmax), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.char)(pack), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatms.f. +func Zlatms(m, n int, dist byte, iseed []int32, sym byte, d []float64, mode int, cond, dmax float64, kl, ku int, pack byte, a []complex128, lda int, work []complex128) bool { + var _iseed *int32 + if len(iseed) > 0 { + _iseed = &iseed[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zlatms_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.char)(dist), (*C.lapack_int)(_iseed), (C.char)(sym), (*C.double)(_d), (C.lapack_int)(mode), (C.double)(cond), (C.double)(dmax), (C.lapack_int)(kl), (C.lapack_int)(ku), (C.char)(pack), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slauum.f. +func Slauum(ul blas.Uplo, n int, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_slauum_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlauum.f. +func Dlauum(ul blas.Uplo, n int, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dlauum_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clauum.f. +func Clauum(ul blas.Uplo, n int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_clauum_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlauum.f. +func Zlauum(ul blas.Uplo, n int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zlauum_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sopgtr.f. +func Sopgtr(ul blas.Uplo, n int, ap, tau, q []float32, ldq int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sopgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_tau), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopgtr.f. +func Dopgtr(ul blas.Uplo, n int, ap, tau, q []float64, ldq int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dopgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_tau), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sopmtr.f. +func Sopmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, ap, tau, c []float32, ldc int, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sopmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopmtr.f. +func Dopmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, ap, tau, c []float64, ldc int, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dopmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgbr.f. +func Sorgbr(vect byte, m, n, k int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorgbr_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f. +func Dorgbr(vect byte, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorgbr_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorghr.f. +func Sorghr(n, ilo, ihi int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorghr_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorghr.f. +func Dorghr(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorghr_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorglq.f. +func Sorglq(m, n, k int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorglq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorglq.f. +func Dorglq(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorglq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgql.f. +func Sorgql(m, n, k int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorgql_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgql.f. +func Dorgql(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorgql_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgqr.f. +func Sorgqr(m, n, k int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorgqr_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgqr.f. +func Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorgqr_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgrq.f. +func Sorgrq(m, n, k int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorgrq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgrq.f. +func Dorgrq(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorgrq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgtr.f. +func Sorgtr(ul blas.Uplo, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgtr.f. +func Dorgtr(ul blas.Uplo, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormbr.f. +func Sormbr(vect byte, side blas.Side, trans blas.Transpose, m, n, k int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormbr_work((C.int)(rowMajor), (C.char)(vect), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormbr.f. +func Dormbr(vect byte, side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormbr_work((C.int)(rowMajor), (C.char)(vect), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormhr.f. +func Sormhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormhr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormhr.f. +func Dormhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormhr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormlq.f. +func Sormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormlq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormlq.f. +func Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormlq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormql.f. +func Sormql(side blas.Side, trans blas.Transpose, m, n, k int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormql_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormql.f. +func Dormql(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormql_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormqr.f. +func Sormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormqr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormqr.f. +func Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormqr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormrq.f. +func Sormrq(side blas.Side, trans blas.Transpose, m, n, k int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormrq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrq.f. +func Dormrq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormrq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormrz.f. +func Sormrz(side blas.Side, trans blas.Transpose, m, n, k, l int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormrz_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrz.f. +func Dormrz(side blas.Side, trans blas.Transpose, m, n, k, l int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormrz_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormtr.f. +func Sormtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, a []float32, lda int, tau, c []float32, ldc int, work []float32, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sormtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormtr.f. +func Dormtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dormtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbcon.f. +func Spbcon(ul blas.Uplo, n, kd int, ab []float32, ldab int, anorm float32, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_spbcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbcon.f. +func Dpbcon(ul blas.Uplo, n, kd int, ab []float64, ldab int, anorm float64, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dpbcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbcon.f. +func Cpbcon(ul blas.Uplo, n, kd int, ab []complex64, ldab int, anorm float32, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cpbcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbcon.f. +func Zpbcon(ul blas.Uplo, n, kd int, ab []complex128, ldab int, anorm float64, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zpbcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbequ.f. +func Spbequ(ul blas.Uplo, n, kd int, ab []float32, ldab int, s, scond, amax []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_spbequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbequ.f. +func Dpbequ(ul blas.Uplo, n, kd int, ab []float64, ldab int, s, scond, amax []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dpbequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbequ.f. +func Cpbequ(ul blas.Uplo, n, kd int, ab []complex64, ldab int, s, scond, amax []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cpbequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbequ.f. +func Zpbequ(ul blas.Uplo, n, kd int, ab []complex128, ldab int, s, scond, amax []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zpbequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbrfs.f. +func Spbrfs(ul blas.Uplo, n, kd, nrhs int, ab []float32, ldab int, afb []float32, ldafb int, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float32 + if len(afb) > 0 { + _afb = &afb[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_spbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_afb), (C.lapack_int)(ldafb), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbrfs.f. +func Dpbrfs(ul blas.Uplo, n, kd, nrhs int, ab []float64, ldab int, afb []float64, ldafb int, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dpbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_afb), (C.lapack_int)(ldafb), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbrfs.f. +func Cpbrfs(ul blas.Uplo, n, kd, nrhs int, ab []complex64, ldab int, afb []complex64, ldafb int, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cpbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_afb), (C.lapack_int)(ldafb), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbrfs.f. +func Zpbrfs(ul blas.Uplo, n, kd, nrhs int, ab []complex128, ldab int, afb []complex128, ldafb int, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex128 + if len(afb) > 0 { + _afb = &afb[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zpbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_afb), (C.lapack_int)(ldafb), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbstf.f. +func Spbstf(ul blas.Uplo, n, kb int, bb []float32, ldbb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _bb *float32 + if len(bb) > 0 { + _bb = &bb[0] + } + return isZero(C.LAPACKE_spbstf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kb), (*C.float)(_bb), (C.lapack_int)(ldbb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbstf.f. +func Dpbstf(ul blas.Uplo, n, kb int, bb []float64, ldbb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _bb *float64 + if len(bb) > 0 { + _bb = &bb[0] + } + return isZero(C.LAPACKE_dpbstf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kb), (*C.double)(_bb), (C.lapack_int)(ldbb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbstf.f. +func Cpbstf(ul blas.Uplo, n, kb int, bb []complex64, ldbb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _bb *complex64 + if len(bb) > 0 { + _bb = &bb[0] + } + return isZero(C.LAPACKE_cpbstf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kb), (*C.lapack_complex_float)(_bb), (C.lapack_int)(ldbb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbstf.f. +func Zpbstf(ul blas.Uplo, n, kb int, bb []complex128, ldbb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _bb *complex128 + if len(bb) > 0 { + _bb = &bb[0] + } + return isZero(C.LAPACKE_zpbstf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kb), (*C.lapack_complex_double)(_bb), (C.lapack_int)(ldbb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbsv.f. +func Spbsv(ul blas.Uplo, n, kd, nrhs int, ab []float32, ldab int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spbsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsv.f. +func Dpbsv(ul blas.Uplo, n, kd, nrhs int, ab []float64, ldab int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpbsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbsv.f. +func Cpbsv(ul blas.Uplo, n, kd, nrhs int, ab []complex64, ldab int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpbsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbsv.f. +func Zpbsv(ul blas.Uplo, n, kd, nrhs int, ab []complex128, ldab int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpbsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbsvx.f. +func Spbsvx(fact byte, ul blas.Uplo, n, kd, nrhs int, ab []float32, ldab int, afb []float32, ldafb int, equed []byte, s, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float32 + if len(afb) > 0 { + _afb = &afb[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_spbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_afb), (C.lapack_int)(ldafb), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsvx.f. +func Dpbsvx(fact byte, ul blas.Uplo, n, kd, nrhs int, ab []float64, ldab int, afb []float64, ldafb int, equed []byte, s, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *float64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dpbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_afb), (C.lapack_int)(ldafb), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbsvx.f. +func Cpbsvx(fact byte, ul blas.Uplo, n, kd, nrhs int, ab []complex64, ldab int, afb []complex64, ldafb int, equed []byte, s []float32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex64 + if len(afb) > 0 { + _afb = &afb[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cpbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_afb), (C.lapack_int)(ldafb), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbsvx.f. +func Zpbsvx(fact byte, ul blas.Uplo, n, kd, nrhs int, ab []complex128, ldab int, afb []complex128, ldafb int, equed []byte, s []float64, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _afb *complex128 + if len(afb) > 0 { + _afb = &afb[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zpbsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_afb), (C.lapack_int)(ldafb), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbtrf.f. +func Spbtrf(ul blas.Uplo, n, kd int, ab []float32, ldab int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + return isZero(C.LAPACKE_spbtrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrf.f. +func Dpbtrf(ul blas.Uplo, n, kd int, ab []float64, ldab int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + return isZero(C.LAPACKE_dpbtrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbtrf.f. +func Cpbtrf(ul blas.Uplo, n, kd int, ab []complex64, ldab int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + return isZero(C.LAPACKE_cpbtrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtrf.f. +func Zpbtrf(ul blas.Uplo, n, kd int, ab []complex128, ldab int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + return isZero(C.LAPACKE_zpbtrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbtrs.f. +func Spbtrs(ul blas.Uplo, n, kd, nrhs int, ab []float32, ldab int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrs.f. +func Dpbtrs(ul blas.Uplo, n, kd, nrhs int, ab []float64, ldab int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbtrs.f. +func Cpbtrs(ul blas.Uplo, n, kd, nrhs int, ab []complex64, ldab int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtrs.f. +func Zpbtrs(ul blas.Uplo, n, kd, nrhs int, ab []complex128, ldab int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftrf.f. +func Spftrf(transr blas.Transpose, ul blas.Uplo, n int, a []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_spftrf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrf.f. +func Dpftrf(transr blas.Transpose, ul blas.Uplo, n int, a []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dpftrf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftrf.f. +func Cpftrf(transr blas.Transpose, ul blas.Uplo, n int, a []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cpftrf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftrf.f. +func Zpftrf(transr blas.Transpose, ul blas.Uplo, n int, a []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zpftrf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftri.f. +func Spftri(transr blas.Transpose, ul blas.Uplo, n int, a []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_spftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftri.f. +func Dpftri(transr blas.Transpose, ul blas.Uplo, n int, a []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dpftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftri.f. +func Cpftri(transr blas.Transpose, ul blas.Uplo, n int, a []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cpftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftri.f. +func Zpftri(transr blas.Transpose, ul blas.Uplo, n int, a []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zpftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftrs.f. +func Spftrs(transr blas.Transpose, ul blas.Uplo, n, nrhs int, a, b []float32, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spftrs_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrs.f. +func Dpftrs(transr blas.Transpose, ul blas.Uplo, n, nrhs int, a, b []float64, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpftrs_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftrs.f. +func Cpftrs(transr blas.Transpose, ul blas.Uplo, n, nrhs int, a, b []complex64, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpftrs_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftrs.f. +func Zpftrs(transr blas.Transpose, ul blas.Uplo, n, nrhs int, a, b []complex128, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpftrs_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spocon.f. +func Spocon(ul blas.Uplo, n int, a []float32, lda int, anorm float32, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_spocon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpocon.f. +func Dpocon(ul blas.Uplo, n int, a []float64, lda int, anorm float64, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dpocon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpocon.f. +func Cpocon(ul blas.Uplo, n int, a []complex64, lda int, anorm float32, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cpocon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpocon.f. +func Zpocon(ul blas.Uplo, n int, a []complex128, lda int, anorm float64, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zpocon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spoequ.f. +func Spoequ(n int, a []float32, lda int, s, scond, amax []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_spoequ_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequ.f. +func Dpoequ(n int, a []float64, lda int, s, scond, amax []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dpoequ_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequ.f. +func Cpoequ(n int, a []complex64, lda int, s, scond, amax []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cpoequ_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpoequ.f. +func Zpoequ(n int, a []complex128, lda int, s, scond, amax []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zpoequ_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spoequb.f. +func Spoequb(n int, a []float32, lda int, s, scond, amax []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_spoequb_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequb.f. +func Dpoequb(n int, a []float64, lda int, s, scond, amax []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dpoequb_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequb.f. +func Cpoequb(n int, a []complex64, lda int, s, scond, amax []float32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cpoequb_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpoequb.f. +func Zpoequb(n int, a []complex128, lda int, s, scond, amax []float64) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zpoequb_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sporfs.f. +func Sporfs(ul blas.Uplo, n, nrhs int, a []float32, lda int, af []float32, ldaf int, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sporfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dporfs.f. +func Dporfs(ul blas.Uplo, n, nrhs int, a []float64, lda int, af []float64, ldaf int, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dporfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cporfs.f. +func Cporfs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cporfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zporfs.f. +func Zporfs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zporfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sposv.f. +func Sposv(ul blas.Uplo, n, nrhs int, a []float32, lda int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposv.f. +func Dposv(ul blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cposv.f. +func Cposv(ul blas.Uplo, n, nrhs int, a []complex64, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zposv.f. +func Zposv(ul blas.Uplo, n, nrhs int, a []complex128, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsposv.f. +func Dsposv(ul blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int, x []float64, ldx int, work []float64, swork []float32, iter []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _swork *float32 + if len(swork) > 0 { + _swork = &swork[0] + } + var _iter *int32 + if len(iter) > 0 { + _iter = &iter[0] + } + return isZero(C.LAPACKE_dsposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_work), (*C.float)(_swork), (*C.lapack_int)(_iter))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zcposv.f. +func Zcposv(ul blas.Uplo, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, x []complex128, ldx int, work []complex128, swork []complex64, rwork []float64, iter []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _swork *complex64 + if len(swork) > 0 { + _swork = &swork[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iter *int32 + if len(iter) > 0 { + _iter = &iter[0] + } + return isZero(C.LAPACKE_zcposv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.lapack_complex_double)(_work), (*C.lapack_complex_float)(_swork), (*C.double)(_rwork), (*C.lapack_int)(_iter))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sposvx.f. +func Sposvx(fact byte, ul blas.Uplo, n, nrhs int, a []float32, lda int, af []float32, ldaf int, equed []byte, s, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sposvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposvx.f. +func Dposvx(fact byte, ul blas.Uplo, n, nrhs int, a []float64, lda int, af []float64, ldaf int, equed []byte, s, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dposvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cposvx.f. +func Cposvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, equed []byte, s []float32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cposvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zposvx.f. +func Zposvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, equed []byte, s []float64, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zposvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotrf2.f. +func Spotrf2(ul blas.Uplo, n int, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_spotrf2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrf2.f. +func Dpotrf2(ul blas.Uplo, n int, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dpotrf2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotrf2.f. +func Cpotrf2(ul blas.Uplo, n int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cpotrf2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotrf2.f. +func Zpotrf2(ul blas.Uplo, n int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zpotrf2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotrf.f. +func Spotrf(ul blas.Uplo, n int, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_spotrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrf.f. +func Dpotrf(ul blas.Uplo, n int, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dpotrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotrf.f. +func Cpotrf(ul blas.Uplo, n int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cpotrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotrf.f. +func Zpotrf(ul blas.Uplo, n int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zpotrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotri.f. +func Spotri(ul blas.Uplo, n int, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_spotri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotri.f. +func Dpotri(ul blas.Uplo, n int, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dpotri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotri.f. +func Cpotri(ul blas.Uplo, n int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cpotri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotri.f. +func Zpotri(ul blas.Uplo, n int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zpotri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotrs.f. +func Spotrs(ul blas.Uplo, n, nrhs int, a []float32, lda int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spotrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrs.f. +func Dpotrs(ul blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpotrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotrs.f. +func Cpotrs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpotrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotrs.f. +func Zpotrs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpotrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppcon.f. +func Sppcon(ul blas.Uplo, n int, ap []float32, anorm float32, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sppcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppcon.f. +func Dppcon(ul blas.Uplo, n int, ap []float64, anorm float64, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dppcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppcon.f. +func Cppcon(ul blas.Uplo, n int, ap []complex64, anorm float32, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cppcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppcon.f. +func Zppcon(ul blas.Uplo, n int, ap []complex128, anorm float64, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zppcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppequ.f. +func Sppequ(ul blas.Uplo, n int, ap, s, scond, amax []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_sppequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppequ.f. +func Dppequ(ul blas.Uplo, n int, ap, s, scond, amax []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_dppequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppequ.f. +func Cppequ(ul blas.Uplo, n int, ap []complex64, s, scond, amax []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_cppequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppequ.f. +func Zppequ(ul blas.Uplo, n int, ap []complex128, s, scond, amax []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + return isZero(C.LAPACKE_zppequ_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spprfs.f. +func Spprfs(ul blas.Uplo, n, nrhs int, ap, afp, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float32 + if len(afp) > 0 { + _afp = &afp[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_spprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_afp), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpprfs.f. +func Dpprfs(ul blas.Uplo, n, nrhs int, ap, afp, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dpprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_afp), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpprfs.f. +func Cpprfs(ul blas.Uplo, n, nrhs int, ap, afp, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cpprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpprfs.f. +func Zpprfs(ul blas.Uplo, n, nrhs int, ap, afp, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zpprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppsv.f. +func Sppsv(ul blas.Uplo, n, nrhs int, ap, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sppsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsv.f. +func Dppsv(ul blas.Uplo, n, nrhs int, ap, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dppsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppsv.f. +func Cppsv(ul blas.Uplo, n, nrhs int, ap, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cppsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppsv.f. +func Zppsv(ul blas.Uplo, n, nrhs int, ap, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zppsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppsvx.f. +func Sppsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []float32, equed []byte, s, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float32 + if len(afp) > 0 { + _afp = &afp[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sppsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_afp), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsvx.f. +func Dppsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []float64, equed []byte, s, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dppsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_afp), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppsvx.f. +func Cppsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex64, equed []byte, s []float32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cppsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.char)(unsafe.Pointer(_equed)), (*C.float)(_s), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppsvx.f. +func Zppsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex128, equed []byte, s []float64, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _equed *byte + if len(equed) > 0 { + _equed = &equed[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zppsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.char)(unsafe.Pointer(_equed)), (*C.double)(_s), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptrf.f. +func Spptrf(ul blas.Uplo, n int, ap []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_spptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrf.f. +func Dpptrf(ul blas.Uplo, n int, ap []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_dpptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptrf.f. +func Cpptrf(ul blas.Uplo, n int, ap []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_cpptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptrf.f. +func Zpptrf(ul blas.Uplo, n int, ap []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_zpptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptri.f. +func Spptri(ul blas.Uplo, n int, ap []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_spptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptri.f. +func Dpptri(ul blas.Uplo, n int, ap []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_dpptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptri.f. +func Cpptri(ul blas.Uplo, n int, ap []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_cpptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptri.f. +func Zpptri(ul blas.Uplo, n int, ap []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_zpptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptrs.f. +func Spptrs(ul blas.Uplo, n, nrhs int, ap, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrs.f. +func Dpptrs(ul blas.Uplo, n, nrhs int, ap, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptrs.f. +func Cpptrs(ul blas.Uplo, n, nrhs int, ap, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptrs.f. +func Zpptrs(ul blas.Uplo, n, nrhs int, ap, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spstrf.f. +func Spstrf(ul blas.Uplo, n int, a []float32, lda int, piv, rank []int32, tol float32, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _piv *int32 + if len(piv) > 0 { + _piv = &piv[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_spstrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_piv), (*C.lapack_int)(_rank), (C.float)(tol), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpstrf.f. +func Dpstrf(ul blas.Uplo, n int, a []float64, lda int, piv, rank []int32, tol float64, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _piv *int32 + if len(piv) > 0 { + _piv = &piv[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dpstrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_piv), (*C.lapack_int)(_rank), (C.double)(tol), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpstrf.f. +func Cpstrf(ul blas.Uplo, n int, a []complex64, lda int, piv, rank []int32, tol float32, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _piv *int32 + if len(piv) > 0 { + _piv = &piv[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cpstrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_piv), (*C.lapack_int)(_rank), (C.float)(tol), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpstrf.f. +func Zpstrf(ul blas.Uplo, n int, a []complex128, lda int, piv, rank []int32, tol float64, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _piv *int32 + if len(piv) > 0 { + _piv = &piv[0] + } + var _rank *int32 + if len(rank) > 0 { + _rank = &rank[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zpstrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_piv), (*C.lapack_int)(_rank), (C.double)(tol), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptcon.f. +func Sptcon(n int, d, e []float32, anorm float32, rcond, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sptcon_work((C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptcon.f. +func Dptcon(n int, d, e []float64, anorm float64, rcond, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dptcon_work((C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptcon.f. +func Cptcon(n int, d []float32, e []complex64, anorm float32, rcond, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cptcon_work((C.lapack_int)(n), (*C.float)(_d), (*C.lapack_complex_float)(_e), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptcon.f. +func Zptcon(n int, d []float64, e []complex128, anorm float64, rcond, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zptcon_work((C.lapack_int)(n), (*C.double)(_d), (*C.lapack_complex_double)(_e), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spteqr.f. +func Spteqr(compz lapack.Comp, n int, d, e, z []float32, ldz int, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_spteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpteqr.f. +func Dpteqr(compz lapack.Comp, n int, d, e, z []float64, ldz int, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dpteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpteqr.f. +func Cpteqr(compz lapack.Comp, n int, d, e []float32, z []complex64, ldz int, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cpteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpteqr.f. +func Zpteqr(compz lapack.Comp, n int, d, e []float64, z []complex128, ldz int, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zpteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptrfs.f. +func Sptrfs(n, nrhs int, d, e, df, ef, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _ef *float32 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sptrfs_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.float)(_e), (*C.float)(_df), (*C.float)(_ef), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptrfs.f. +func Dptrfs(n, nrhs int, d, e, df, ef, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _ef *float64 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dptrfs_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.double)(_e), (*C.double)(_df), (*C.double)(_ef), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptrfs.f. +func Cptrfs(ul blas.Uplo, n, nrhs int, d []float32, e []complex64, df []float32, ef, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _ef *complex64 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cptrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.lapack_complex_float)(_e), (*C.float)(_df), (*C.lapack_complex_float)(_ef), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptrfs.f. +func Zptrfs(ul blas.Uplo, n, nrhs int, d []float64, e []complex128, df []float64, ef, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _ef *complex128 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zptrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.lapack_complex_double)(_e), (*C.double)(_df), (*C.lapack_complex_double)(_ef), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptsv.f. +func Sptsv(n, nrhs int, d, e, b []float32, ldb int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sptsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.float)(_e), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsv.f. +func Dptsv(n, nrhs int, d, e, b []float64, ldb int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dptsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.double)(_e), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptsv.f. +func Cptsv(n, nrhs int, d []float32, e, b []complex64, ldb int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cptsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.lapack_complex_float)(_e), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptsv.f. +func Zptsv(n, nrhs int, d []float64, e, b []complex128, ldb int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zptsv_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.lapack_complex_double)(_e), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptsvx.f. +func Sptsvx(fact byte, n, nrhs int, d, e, df, ef, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _ef *float32 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sptsvx_work((C.int)(rowMajor), (C.char)(fact), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.float)(_e), (*C.float)(_df), (*C.float)(_ef), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsvx.f. +func Dptsvx(fact byte, n, nrhs int, d, e, df, ef, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _ef *float64 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dptsvx_work((C.int)(rowMajor), (C.char)(fact), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.double)(_e), (*C.double)(_df), (*C.double)(_ef), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptsvx.f. +func Cptsvx(fact byte, n, nrhs int, d []float32, e []complex64, df []float32, ef, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _df *float32 + if len(df) > 0 { + _df = &df[0] + } + var _ef *complex64 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cptsvx_work((C.int)(rowMajor), (C.char)(fact), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.lapack_complex_float)(_e), (*C.float)(_df), (*C.lapack_complex_float)(_ef), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptsvx.f. +func Zptsvx(fact byte, n, nrhs int, d []float64, e []complex128, df []float64, ef, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _df *float64 + if len(df) > 0 { + _df = &df[0] + } + var _ef *complex128 + if len(ef) > 0 { + _ef = &ef[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zptsvx_work((C.int)(rowMajor), (C.char)(fact), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.lapack_complex_double)(_e), (*C.double)(_df), (*C.lapack_complex_double)(_ef), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spttrf.f. +func Spttrf(n int, d, e []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_spttrf_work((C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrf.f. +func Dpttrf(n int, d, e []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_dpttrf_work((C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpttrf.f. +func Cpttrf(n int, d []float32, e []complex64) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_cpttrf_work((C.lapack_int)(n), (*C.float)(_d), (*C.lapack_complex_float)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpttrf.f. +func Zpttrf(n int, d []float64, e []complex128) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_zpttrf_work((C.lapack_int)(n), (*C.double)(_d), (*C.lapack_complex_double)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spttrs.f. +func Spttrs(n, nrhs int, d, e, b []float32, ldb int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_spttrs_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.float)(_e), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrs.f. +func Dpttrs(n, nrhs int, d, e, b []float64, ldb int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dpttrs_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.double)(_e), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpttrs.f. +func Cpttrs(ul blas.Uplo, n, nrhs int, d []float32, e, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cpttrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_d), (*C.lapack_complex_float)(_e), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpttrs.f. +func Zpttrs(ul blas.Uplo, n, nrhs int, d []float64, e, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zpttrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_d), (*C.lapack_complex_double)(_e), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbev.f. +func Ssbev(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []float32, ldab int, w, z []float32, ldz int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssbev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbev.f. +func Dsbev(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []float64, ldab int, w, z []float64, ldz int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsbev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbevd.f. +func Ssbevd(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []float32, ldab int, w, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssbevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevd.f. +func Dsbevd(jobz lapack.Job, ul blas.Uplo, n, kd int, ab []float64, ldab int, w, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsbevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbevx.f. +func Ssbevx(jobz lapack.Job, rng byte, ul blas.Uplo, n, kd int, ab []float32, ldab int, q []float32, ldq int, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_ssbevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_q), (C.lapack_int)(ldq), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevx.f. +func Dsbevx(jobz lapack.Job, rng byte, ul blas.Uplo, n, kd int, ab []float64, ldab int, q []float64, ldq int, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dsbevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_q), (C.lapack_int)(ldq), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgst.f. +func Ssbgst(vect byte, ul blas.Uplo, n, ka, kb int, ab []float32, ldab int, bb []float32, ldbb int, x []float32, ldx int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float32 + if len(bb) > 0 { + _bb = &bb[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssbgst_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgst.f. +func Dsbgst(vect byte, ul blas.Uplo, n, ka, kb int, ab []float64, ldab int, bb []float64, ldbb int, x []float64, ldx int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsbgst_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgv.f. +func Ssbgv(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []float32, ldab int, bb []float32, ldbb int, w, z []float32, ldz int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float32 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssbgv_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgv.f. +func Dsbgv(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []float64, ldab int, bb []float64, ldbb int, w, z []float64, ldz int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsbgv_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgvd.f. +func Ssbgvd(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []float32, ldab int, bb []float32, ldbb int, w, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float32 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssbgvd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvd.f. +func Dsbgvd(jobz lapack.Job, ul blas.Uplo, n, ka, kb int, ab []float64, ldab int, bb []float64, ldbb int, w, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsbgvd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgvx.f. +func Ssbgvx(jobz lapack.Job, rng byte, ul blas.Uplo, n, ka, kb int, ab []float32, ldab int, bb []float32, ldbb int, q []float32, ldq int, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float32 + if len(bb) > 0 { + _bb = &bb[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_ssbgvx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_bb), (C.lapack_int)(ldbb), (*C.float)(_q), (C.lapack_int)(ldq), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvx.f. +func Dsbgvx(jobz lapack.Job, rng byte, ul blas.Uplo, n, ka, kb int, ab []float64, ldab int, bb []float64, ldbb int, q []float64, ldq int, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _bb *float64 + if len(bb) > 0 { + _bb = &bb[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dsbgvx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(ka), (C.lapack_int)(kb), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_bb), (C.lapack_int)(ldbb), (*C.double)(_q), (C.lapack_int)(ldq), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbtrd.f. +func Ssbtrd(vect byte, ul blas.Uplo, n, kd int, ab []float32, ldab int, d, e, q []float32, ldq int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssbtrd_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_d), (*C.float)(_e), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbtrd.f. +func Dsbtrd(vect byte, ul blas.Uplo, n, kd int, ab []float64, ldab int, d, e, q []float64, ldq int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsbtrd_work((C.int)(rowMajor), (C.char)(vect), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_d), (*C.double)(_e), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssfrk.f. +func Ssfrk(transr blas.Transpose, ul blas.Uplo, trans blas.Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + return isZero(C.LAPACKE_ssfrk_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(k), (C.float)(alpha), (*C.float)(_a), (C.lapack_int)(lda), (C.float)(beta), (*C.float)(_c))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsfrk.f. +func Dsfrk(transr blas.Transpose, ul blas.Uplo, trans blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + return isZero(C.LAPACKE_dsfrk_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(trans), (C.lapack_int)(n), (C.lapack_int)(k), (C.double)(alpha), (*C.double)(_a), (C.lapack_int)(lda), (C.double)(beta), (*C.double)(_c))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspcon.f. +func Sspcon(ul blas.Uplo, n int, ap []float32, ipiv []int32, anorm float32, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sspcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspcon.f. +func Dspcon(ul blas.Uplo, n int, ap []float64, ipiv []int32, anorm float64, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dspcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspcon.f. +func Cspcon(ul blas.Uplo, n int, ap []complex64, ipiv []int32, anorm float32, rcond []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cspcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspcon.f. +func Zspcon(ul blas.Uplo, n int, ap []complex128, ipiv []int32, anorm float64, rcond []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zspcon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspev.f. +func Sspev(jobz lapack.Job, ul blas.Uplo, n int, ap, w, z []float32, ldz int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sspev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspev.f. +func Dspev(jobz lapack.Job, ul blas.Uplo, n int, ap, w, z []float64, ldz int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dspev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspevd.f. +func Sspevd(jobz lapack.Job, ul blas.Uplo, n int, ap, w, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sspevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevd.f. +func Dspevd(jobz lapack.Job, ul blas.Uplo, n int, ap, w, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dspevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspevx.f. +func Sspevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_sspevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevx.f. +func Dspevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dspevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgst.f. +func Sspgst(itype int, ul blas.Uplo, n int, ap, bp []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float32 + if len(bp) > 0 { + _bp = &bp[0] + } + return isZero(C.LAPACKE_sspgst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_bp))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgst.f. +func Dspgst(itype int, ul blas.Uplo, n int, ap, bp []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float64 + if len(bp) > 0 { + _bp = &bp[0] + } + return isZero(C.LAPACKE_dspgst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_bp))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgv.f. +func Sspgv(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp, w, z []float32, ldz int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float32 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sspgv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_bp), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgv.f. +func Dspgv(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp, w, z []float64, ldz int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dspgv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_bp), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgvd.f. +func Sspgvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp, w, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float32 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sspgvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_bp), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvd.f. +func Dspgvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, ap, bp, w, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dspgvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_bp), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgvx.f. +func Sspgvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap, bp []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float32 + if len(bp) > 0 { + _bp = &bp[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_sspgvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_bp), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvx.f. +func Dspgvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, ap, bp []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _bp *float64 + if len(bp) > 0 { + _bp = &bp[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dspgvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_bp), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssprfs.f. +func Ssprfs(ul blas.Uplo, n, nrhs int, ap, afp []float32, ipiv []int32, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float32 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_afp), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsprfs.f. +func Dsprfs(ul blas.Uplo, n, nrhs int, ap, afp []float64, ipiv []int32, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_afp), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csprfs.f. +func Csprfs(ul blas.Uplo, n, nrhs int, ap, afp []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_csprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsprfs.f. +func Zsprfs(ul blas.Uplo, n, nrhs int, ap, afp []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zsprfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspsv.f. +func Sspsv(ul blas.Uplo, n, nrhs int, ap []float32, ipiv []int32, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_sspsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsv.f. +func Dspsv(ul blas.Uplo, n, nrhs int, ap []float64, ipiv []int32, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dspsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspsv.f. +func Cspsv(ul blas.Uplo, n, nrhs int, ap []complex64, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_cspsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspsv.f. +func Zspsv(ul blas.Uplo, n, nrhs int, ap []complex128, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zspsv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspsvx.f. +func Sspsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []float32, ipiv []int32, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float32 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sspsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_afp), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsvx.f. +func Dspsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []float64, ipiv []int32, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *float64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dspsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_afp), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspsvx.f. +func Cspsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex64, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex64 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cspsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspsvx.f. +func Zspsvx(fact byte, ul blas.Uplo, n, nrhs int, ap, afp []complex128, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _afp *complex128 + if len(afp) > 0 { + _afp = &afp[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zspsvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_afp), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrd.f. +func Ssptrd(ul blas.Uplo, n int, ap, d, e, tau []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_ssptrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_d), (*C.float)(_e), (*C.float)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrd.f. +func Dsptrd(ul blas.Uplo, n int, ap, d, e, tau []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + return isZero(C.LAPACKE_dsptrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_d), (*C.double)(_e), (*C.double)(_tau))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrf.f. +func Ssptrf(ul blas.Uplo, n int, ap []float32, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_ssptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrf.f. +func Dsptrf(ul blas.Uplo, n int, ap []float64, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_dsptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptrf.f. +func Csptrf(ul blas.Uplo, n int, ap []complex64, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_csptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptrf.f. +func Zsptrf(ul blas.Uplo, n int, ap []complex128, ipiv []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + return isZero(C.LAPACKE_zsptrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptri.f. +func Ssptri(ul blas.Uplo, n int, ap []float32, ipiv []int32, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.lapack_int)(_ipiv), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptri.f. +func Dsptri(ul blas.Uplo, n int, ap []float64, ipiv []int32, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.lapack_int)(_ipiv), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptri.f. +func Csptri(ul blas.Uplo, n int, ap []complex64, ipiv []int32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptri.f. +func Zsptri(ul blas.Uplo, n int, ap []complex128, ipiv []int32, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsptri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrs.f. +func Ssptrs(ul blas.Uplo, n, nrhs int, ap []float32, ipiv []int32, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ssptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrs.f. +func Dsptrs(ul blas.Uplo, n, nrhs int, ap []float64, ipiv []int32, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dsptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptrs.f. +func Csptrs(ul blas.Uplo, n, nrhs int, ap []complex64, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_csptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptrs.f. +func Zsptrs(ul blas.Uplo, n, nrhs int, ap []complex128, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zsptrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstebz.f. +func Sstebz(rng, order byte, n int, vl, vu float32, il, iu int, abstol float32, d, e []float32, m, nsplit []int32, w []float32, iblock, isplit []int32, work []float32, iwork []int32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _nsplit *int32 + if len(nsplit) > 0 { + _nsplit = &nsplit[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstebz_work((C.char)(rng), (C.char)(order), (C.lapack_int)(n), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.float)(_d), (*C.float)(_e), (*C.lapack_int)(_m), (*C.lapack_int)(_nsplit), (*C.float)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstebz.f. +func Dstebz(rng, order byte, n int, vl, vu float64, il, iu int, abstol float64, d, e []float64, m, nsplit []int32, w []float64, iblock, isplit []int32, work []float64, iwork []int32) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _nsplit *int32 + if len(nsplit) > 0 { + _nsplit = &nsplit[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstebz_work((C.char)(rng), (C.char)(order), (C.lapack_int)(n), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.double)(_d), (*C.double)(_e), (*C.lapack_int)(_m), (*C.lapack_int)(_nsplit), (*C.double)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstedc.f. +func Sstedc(compz lapack.Comp, n int, d, e, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstedc_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstedc.f. +func Dstedc(compz lapack.Comp, n int, d, e, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstedc_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstedc.f. +func Cstedc(compz lapack.Comp, n int, d, e []float32, z []complex64, ldz int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cstedc_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstedc.f. +func Zstedc(compz lapack.Comp, n int, d, e []float64, z []complex128, ldz int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zstedc_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstegr.f. +func Sstegr(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, isuppz []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstegr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstegr.f. +func Dstegr(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, isuppz []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstegr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstegr.f. +func Cstegr(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w []float32, z []complex64, ldz int, isuppz []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cstegr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstegr.f. +func Zstegr(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w []float64, z []complex128, ldz int, isuppz []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zstegr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstein.f. +func Sstein(n int, d, e []float32, m int, w []float32, iblock, isplit []int32, z []float32, ldz int, work []float32, iwork, ifailv []int32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifailv *int32 + if len(ifailv) > 0 { + _ifailv = &ifailv[0] + } + return isZero(C.LAPACKE_sstein_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.lapack_int)(m), (*C.float)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifailv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstein.f. +func Dstein(n int, d, e []float64, m int, w []float64, iblock, isplit []int32, z []float64, ldz int, work []float64, iwork, ifailv []int32) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifailv *int32 + if len(ifailv) > 0 { + _ifailv = &ifailv[0] + } + return isZero(C.LAPACKE_dstein_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.lapack_int)(m), (*C.double)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifailv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstein.f. +func Cstein(n int, d, e []float32, m int, w []float32, iblock, isplit []int32, z []complex64, ldz int, work []float32, iwork, ifailv []int32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifailv *int32 + if len(ifailv) > 0 { + _ifailv = &ifailv[0] + } + return isZero(C.LAPACKE_cstein_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.lapack_int)(m), (*C.float)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifailv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstein.f. +func Zstein(n int, d, e []float64, m int, w []float64, iblock, isplit []int32, z []complex128, ldz int, work []float64, iwork, ifailv []int32) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _iblock *int32 + if len(iblock) > 0 { + _iblock = &iblock[0] + } + var _isplit *int32 + if len(isplit) > 0 { + _isplit = &isplit[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifailv *int32 + if len(ifailv) > 0 { + _ifailv = &ifailv[0] + } + return isZero(C.LAPACKE_zstein_work((C.int)(rowMajor), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.lapack_int)(m), (*C.double)(_w), (*C.lapack_int)(_iblock), (*C.lapack_int)(_isplit), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifailv))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstemr.f. +func Sstemr(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, m []int32, w, z []float32, ldz, nzc int, isuppz, tryrac []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _tryrac *int32 + if len(tryrac) > 0 { + _tryrac = &tryrac[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstemr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (C.lapack_int)(nzc), (*C.lapack_int)(_isuppz), (*C.lapack_logical)(_tryrac), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstemr.f. +func Dstemr(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, m []int32, w, z []float64, ldz, nzc int, isuppz, tryrac []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _tryrac *int32 + if len(tryrac) > 0 { + _tryrac = &tryrac[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstemr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (C.lapack_int)(nzc), (*C.lapack_int)(_isuppz), (*C.lapack_logical)(_tryrac), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstemr.f. +func Cstemr(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, m []int32, w []float32, z []complex64, ldz, nzc int, isuppz, tryrac []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _tryrac *int32 + if len(tryrac) > 0 { + _tryrac = &tryrac[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cstemr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (*C.lapack_int)(_m), (*C.float)(_w), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (C.lapack_int)(nzc), (*C.lapack_int)(_isuppz), (*C.lapack_logical)(_tryrac), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstemr.f. +func Zstemr(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, m []int32, w []float64, z []complex128, ldz, nzc int, isuppz, tryrac []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _tryrac *int32 + if len(tryrac) > 0 { + _tryrac = &tryrac[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zstemr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (*C.lapack_int)(_m), (*C.double)(_w), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (C.lapack_int)(nzc), (*C.lapack_int)(_isuppz), (*C.lapack_logical)(_tryrac), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssteqr.f. +func Ssteqr(compz lapack.Comp, n int, d, e, z []float32, ldz int, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsteqr.f. +func Dsteqr(compz lapack.Comp, n int, d, e, z []float64, ldz int, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csteqr.f. +func Csteqr(compz lapack.Comp, n int, d, e []float32, z []complex64, ldz int, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsteqr.f. +func Zsteqr(compz lapack.Comp, n int, d, e []float64, z []complex128, ldz int, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsteqr_work((C.int)(rowMajor), (C.char)(compz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssterf.f. +func Ssterf(n int, d, e []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_ssterf_work((C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsterf.f. +func Dsterf(n int, d, e []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + return isZero(C.LAPACKE_dsterf_work((C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstev.f. +func Sstev(jobz lapack.Job, n int, d, e, z []float32, ldz int, work []float32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sstev_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstev.f. +func Dstev(jobz lapack.Job, n int, d, e, z []float64, ldz int, work []float64) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dstev_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevd.f. +func Sstevd(jobz lapack.Job, n int, d, e, z []float32, ldz int, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstevd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevd.f. +func Dstevd(jobz lapack.Job, n int, d, e, z []float64, ldz int, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstevd_work((C.int)(rowMajor), (C.char)(jobz), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevr.f. +func Sstevr(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, isuppz []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sstevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevr.f. +func Dstevr(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, isuppz []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dstevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevx.f. +func Sstevx(jobz lapack.Job, rng byte, n int, d, e []float32, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, iwork, ifail []int32) bool { + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_sstevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.float)(_d), (*C.float)(_e), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevx.f. +func Dstevx(jobz lapack.Job, rng byte, n int, d, e []float64, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, iwork, ifail []int32) bool { + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dstevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.lapack_int)(n), (*C.double)(_d), (*C.double)(_e), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssycon.f. +func Ssycon(ul blas.Uplo, n int, a []float32, lda int, ipiv []int32, anorm float32, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssycon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsycon.f. +func Dsycon(ul blas.Uplo, n int, a []float64, lda int, ipiv []int32, anorm float64, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsycon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csycon.f. +func Csycon(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, anorm float32, rcond []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csycon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.float)(anorm), (*C.float)(_rcond), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsycon.f. +func Zsycon(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, anorm float64, rcond []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsycon_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (C.double)(anorm), (*C.double)(_rcond), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyequb.f. +func Ssyequb(ul blas.Uplo, n int, a []float32, lda int, s, scond, amax, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssyequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyequb.f. +func Dsyequb(ul blas.Uplo, n int, a []float64, lda int, s, scond, amax, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsyequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyequb.f. +func Csyequb(ul blas.Uplo, n int, a []complex64, lda int, s, scond, amax []float32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float32 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float32 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csyequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_s), (*C.float)(_scond), (*C.float)(_amax), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyequb.f. +func Zsyequb(ul blas.Uplo, n int, a []complex128, lda int, s, scond, amax []float64, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _scond *float64 + if len(scond) > 0 { + _scond = &scond[0] + } + var _amax *float64 + if len(amax) > 0 { + _amax = &amax[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsyequb_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_s), (*C.double)(_scond), (*C.double)(_amax), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyev.f. +func Ssyev(jobz lapack.Job, ul blas.Uplo, n int, a []float32, lda int, w, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssyev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_w), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyev.f. +func Dsyev(jobz lapack.Job, ul blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsyev_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_w), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevd.f. +func Ssyevd(jobz lapack.Job, ul blas.Uplo, n int, a []float32, lda int, w, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssyevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_w), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevd.f. +func Dsyevd(jobz lapack.Job, ul blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsyevd_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_w), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevr.f. +func Ssyevr(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float32, lda int, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, isuppz []int32, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssyevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevr.f. +func Dsyevr(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float64, lda int, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, isuppz []int32, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _isuppz *int32 + if len(isuppz) > 0 { + _isuppz = &isuppz[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsyevr_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_isuppz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevx.f. +func Ssyevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float32, lda int, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, lwork int, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_ssyevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevx.f. +func Dsyevx(jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float64, lda int, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, lwork int, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dsyevx_work((C.int)(rowMajor), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygst.f. +func Ssygst(itype int, ul blas.Uplo, n int, a []float32, lda int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ssygst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygst.f. +func Dsygst(itype int, ul blas.Uplo, n int, a []float64, lda int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dsygst_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygv.f. +func Ssygv(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []float32, lda int, b []float32, ldb int, w, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssygv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_w), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygv.f. +func Dsygv(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []float64, lda int, b []float64, ldb int, w, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsygv_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_w), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygvd.f. +func Ssygvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []float32, lda int, b []float32, ldb int, w, work []float32, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssygvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_w), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvd.f. +func Dsygvd(itype int, jobz lapack.Job, ul blas.Uplo, n int, a []float64, lda int, b []float64, ldb int, w, work []float64, lwork int, iwork []int32, liwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsygvd_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_w), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygvx.f. +func Ssygvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float32, lda int, b []float32, ldb int, vl, vu float32, il, iu int, abstol float32, m []int32, w, z []float32, ldz int, work []float32, lwork int, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float32 + if len(w) > 0 { + _w = &w[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_ssygvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (C.float)(vl), (C.float)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.float)(abstol), (*C.lapack_int)(_m), (*C.float)(_w), (*C.float)(_z), (C.lapack_int)(ldz), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvx.f. +func Dsygvx(itype int, jobz lapack.Job, rng byte, ul blas.Uplo, n int, a []float64, lda int, b []float64, ldb int, vl, vu float64, il, iu int, abstol float64, m []int32, w, z []float64, ldz int, work []float64, lwork int, iwork, ifail []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _w *float64 + if len(w) > 0 { + _w = &w[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + var _ifail *int32 + if len(ifail) > 0 { + _ifail = &ifail[0] + } + return isZero(C.LAPACKE_dsygvx_work((C.int)(rowMajor), (C.lapack_int)(itype), (C.char)(jobz), (C.char)(rng), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (C.double)(vl), (C.double)(vu), (C.lapack_int)(il), (C.lapack_int)(iu), (C.double)(abstol), (*C.lapack_int)(_m), (*C.double)(_w), (*C.double)(_z), (C.lapack_int)(ldz), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (*C.lapack_int)(_ifail))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyrfs.f. +func Ssyrfs(ul blas.Uplo, n, nrhs int, a []float32, lda int, af []float32, ldaf int, ipiv []int32, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssyrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyrfs.f. +func Dsyrfs(ul blas.Uplo, n, nrhs int, a []float64, lda int, af []float64, ldaf int, ipiv []int32, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsyrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyrfs.f. +func Csyrfs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_csyrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyrfs.f. +func Zsyrfs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zsyrfs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssysv.f. +func Ssysv(ul blas.Uplo, n, nrhs int, a []float32, lda int, ipiv []int32, b []float32, ldb int, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssysv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysv.f. +func Dsysv(ul blas.Uplo, n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsysv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csysv.f. +func Csysv(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csysv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsysv.f. +func Zsysv(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsysv_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssysvx.f. +func Ssysvx(fact byte, ul blas.Uplo, n, nrhs int, a []float32, lda int, af []float32, ldaf int, ipiv []int32, b []float32, ldb int, x []float32, ldx int, rcond, ferr, berr, work []float32, lwork int, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _af *float32 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ssysvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysvx.f. +func Dsysvx(fact byte, ul blas.Uplo, n, nrhs int, a []float64, lda int, af []float64, ldaf int, ipiv []int32, b []float64, ldb int, x []float64, ldx int, rcond, ferr, berr, work []float64, lwork int, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _af *float64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dsysvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csysvx.f. +func Csysvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex64, lda int, af []complex64, ldaf int, ipiv []int32, b []complex64, ldb int, x []complex64, ldx int, rcond, ferr, berr []float32, work []complex64, lwork int, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex64 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_csysvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_rcond), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsysvx.f. +func Zsysvx(fact byte, ul blas.Uplo, n, nrhs int, a []complex128, lda int, af []complex128, ldaf int, ipiv []int32, b []complex128, ldb int, x []complex128, ldx int, rcond, ferr, berr []float64, work []complex128, lwork int, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _af *complex128 + if len(af) > 0 { + _af = &af[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zsysvx_work((C.int)(rowMajor), (C.char)(fact), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_af), (C.lapack_int)(ldaf), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_rcond), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrd.f. +func Ssytrd(ul blas.Uplo, n int, a []float32, lda int, d, e, tau, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_d), (*C.float)(_e), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrd.f. +func Dsytrd(ul blas.Uplo, n int, a []float64, lda int, d, e, tau, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytrd_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_d), (*C.double)(_e), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrf.f. +func Ssytrf(ul blas.Uplo, n int, a []float32, lda int, ipiv []int32, work []float32, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrf.f. +func Dsytrf(ul blas.Uplo, n int, a []float64, lda int, ipiv []int32, work []float64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrf.f. +func Csytrf(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csytrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrf.f. +func Zsytrf(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsytrf_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri.f. +func Ssytri(ul blas.Uplo, n int, a []float32, lda int, ipiv []int32, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri.f. +func Dsytri(ul blas.Uplo, n int, a []float64, lda int, ipiv []int32, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri.f. +func Csytri(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csytri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri.f. +func Zsytri(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsytri_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrs.f. +func Ssytrs(ul blas.Uplo, n, nrhs int, a []float32, lda int, ipiv []int32, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ssytrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs.f. +func Dsytrs(ul blas.Uplo, n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dsytrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrs.f. +func Csytrs(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_csytrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrs.f. +func Zsytrs(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_zsytrs_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbcon.f. +func Stbcon(norm byte, ul blas.Uplo, d blas.Diag, n, kd int, ab []float32, ldab int, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stbcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbcon.f. +func Dtbcon(norm byte, ul blas.Uplo, d blas.Diag, n, kd int, ab []float64, ldab int, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtbcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbcon.f. +func Ctbcon(norm byte, ul blas.Uplo, d blas.Diag, n, kd int, ab []complex64, ldab int, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctbcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbcon.f. +func Ztbcon(norm byte, ul blas.Uplo, d blas.Diag, n, kd int, ab []complex128, ldab int, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztbcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbrfs.f. +func Stbrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []float32, ldab int, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbrfs.f. +func Dtbrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []float64, ldab int, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbrfs.f. +func Ctbrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []complex64, ldab int, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbrfs.f. +func Ztbrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []complex128, ldab int, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztbrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbtrs.f. +func Stbtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []float32, ldab int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float32 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_stbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.float)(_ab), (C.lapack_int)(ldab), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbtrs.f. +func Dtbtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []float64, ldab int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *float64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dtbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.double)(_ab), (C.lapack_int)(ldab), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbtrs.f. +func Ctbtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []complex64, ldab int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex64 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ctbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbtrs.f. +func Ztbtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, kd, nrhs int, ab []complex128, ldab int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ab *complex128 + if len(ab) > 0 { + _ab = &ab[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ztbtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(kd), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ab), (C.lapack_int)(ldab), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfsm.f. +func Stfsm(transr blas.Transpose, side blas.Side, ul blas.Uplo, trans blas.Transpose, d blas.Diag, m, n int, alpha float32, a, b []float32, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_stfsm_work((C.int)(rowMajor), (C.char)(transr), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (C.float)(alpha), (*C.float)(_a), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfsm.f. +func Dtfsm(transr blas.Transpose, side blas.Side, ul blas.Uplo, trans blas.Transpose, d blas.Diag, m, n int, alpha float64, a, b []float64, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dtfsm_work((C.int)(rowMajor), (C.char)(transr), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (C.double)(alpha), (*C.double)(_a), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfsm.f. +func Ctfsm(transr blas.Transpose, side blas.Side, ul blas.Uplo, trans blas.Transpose, d blas.Diag, m, n int, alpha complex64, a, b []complex64, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ctfsm_work((C.int)(rowMajor), (C.char)(transr), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_complex_float)(alpha), (*C.lapack_complex_float)(_a), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfsm.f. +func Ztfsm(transr blas.Transpose, side blas.Side, ul blas.Uplo, trans blas.Transpose, d blas.Diag, m, n int, alpha complex128, a, b []complex128, ldb int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ztfsm_work((C.int)(rowMajor), (C.char)(transr), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_complex_double)(alpha), (*C.lapack_complex_double)(_a), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stftri.f. +func Stftri(transr blas.Transpose, ul blas.Uplo, d blas.Diag, n int, a []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_stftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtftri.f. +func Dtftri(transr blas.Transpose, ul blas.Uplo, d blas.Diag, n int, a []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dtftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctftri.f. +func Ctftri(transr blas.Transpose, ul blas.Uplo, d blas.Diag, n int, a []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ctftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_float)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztftri.f. +func Ztftri(transr blas.Transpose, ul blas.Uplo, d blas.Diag, n int, a []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ztftri_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_double)(_a))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfttp.f. +func Stfttp(transr blas.Transpose, ul blas.Uplo, n int, arf, ap []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *float32 + if len(arf) > 0 { + _arf = &arf[0] + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_stfttp_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_arf), (*C.float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttp.f. +func Dtfttp(transr blas.Transpose, ul blas.Uplo, n int, arf, ap []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *float64 + if len(arf) > 0 { + _arf = &arf[0] + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_dtfttp_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_arf), (*C.double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfttp.f. +func Ctfttp(transr blas.Transpose, ul blas.Uplo, n int, arf, ap []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *complex64 + if len(arf) > 0 { + _arf = &arf[0] + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ctfttp_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_arf), (*C.lapack_complex_float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfttp.f. +func Ztfttp(transr blas.Transpose, ul blas.Uplo, n int, arf, ap []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *complex128 + if len(arf) > 0 { + _arf = &arf[0] + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ztfttp_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_arf), (*C.lapack_complex_double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfttr.f. +func Stfttr(transr blas.Transpose, ul blas.Uplo, n int, arf, a []float32, lda int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *float32 + if len(arf) > 0 { + _arf = &arf[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_stfttr_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_arf), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttr.f. +func Dtfttr(transr blas.Transpose, ul blas.Uplo, n int, arf, a []float64, lda int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *float64 + if len(arf) > 0 { + _arf = &arf[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dtfttr_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_arf), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfttr.f. +func Ctfttr(transr blas.Transpose, ul blas.Uplo, n int, arf, a []complex64, lda int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *complex64 + if len(arf) > 0 { + _arf = &arf[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ctfttr_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_arf), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfttr.f. +func Ztfttr(transr blas.Transpose, ul blas.Uplo, n int, arf, a []complex128, lda int) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _arf *complex128 + if len(arf) > 0 { + _arf = &arf[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ztfttr_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_arf), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgevc.f. +func Stgevc(side blas.Side, howmny byte, sel []int32, n int, s []float32, lds int, p []float32, ldp int, vl []float32, ldvl int, vr []float32, ldvr, mm int, m []int32, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _p *float32 + if len(p) > 0 { + _p = &p[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stgevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_s), (C.lapack_int)(lds), (*C.float)(_p), (C.lapack_int)(ldp), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgevc.f. +func Dtgevc(side blas.Side, howmny byte, sel []int32, n int, s []float64, lds int, p []float64, ldp int, vl []float64, ldvl int, vr []float64, ldvr, mm int, m []int32, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _p *float64 + if len(p) > 0 { + _p = &p[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtgevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_s), (C.lapack_int)(lds), (*C.double)(_p), (C.lapack_int)(ldp), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgevc.f. +func Ctgevc(side blas.Side, howmny byte, sel []int32, n int, s []complex64, lds int, p []complex64, ldp int, vl []complex64, ldvl int, vr []complex64, ldvr, mm int, m []int32, work []complex64, rwork []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _s *complex64 + if len(s) > 0 { + _s = &s[0] + } + var _p *complex64 + if len(p) > 0 { + _p = &p[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctgevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_s), (C.lapack_int)(lds), (*C.lapack_complex_float)(_p), (C.lapack_int)(ldp), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgevc.f. +func Ztgevc(side blas.Side, howmny byte, sel []int32, n int, s []complex128, lds int, p []complex128, ldp int, vl []complex128, ldvl int, vr []complex128, ldvr, mm int, m []int32, work []complex128, rwork []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _s *complex128 + if len(s) > 0 { + _s = &s[0] + } + var _p *complex128 + if len(p) > 0 { + _p = &p[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztgevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_s), (C.lapack_int)(lds), (*C.lapack_complex_double)(_p), (C.lapack_int)(ldp), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgexc.f. +func Stgexc(wantq, wantz int32, n int, a []float32, lda int, b []float32, ldb int, q []float32, ldq int, z []float32, ldz int, ifst, ilst []int32, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _ifst *int32 + if len(ifst) > 0 { + _ifst = &ifst[0] + } + var _ilst *int32 + if len(ilst) > 0 { + _ilst = &ilst[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stgexc_work((C.int)(rowMajor), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_ifst), (*C.lapack_int)(_ilst), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgexc.f. +func Dtgexc(wantq, wantz int32, n int, a []float64, lda int, b []float64, ldb int, q []float64, ldq int, z []float64, ldz int, ifst, ilst []int32, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _ifst *int32 + if len(ifst) > 0 { + _ifst = &ifst[0] + } + var _ilst *int32 + if len(ilst) > 0 { + _ilst = &ilst[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtgexc_work((C.int)(rowMajor), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_ifst), (*C.lapack_int)(_ilst), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgexc.f. +func Ctgexc(wantq, wantz int32, n int, a []complex64, lda int, b []complex64, ldb int, q []complex64, ldq int, z []complex64, ldz, ifst, ilst int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_ctgexc_work((C.int)(rowMajor), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (C.lapack_int)(ifst), (C.lapack_int)(ilst))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgexc.f. +func Ztgexc(wantq, wantz int32, n int, a []complex128, lda int, b []complex128, ldb int, q []complex128, ldq int, z []complex128, ldz, ifst, ilst int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + return isZero(C.LAPACKE_ztgexc_work((C.int)(rowMajor), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (C.lapack_int)(ifst), (C.lapack_int)(ilst))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsen.f. +func Stgsen(ijob lapack.Job, wantq, wantz int32, sel []int32, n int, a []float32, lda int, b []float32, ldb int, alphar, alphai, beta, q []float32, ldq int, z []float32, ldz int, m []int32, pl, pr, dif, work []float32, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float32 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float32 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _z *float32 + if len(z) > 0 { + _z = &z[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _pl *float32 + if len(pl) > 0 { + _pl = &pl[0] + } + var _pr *float32 + if len(pr) > 0 { + _pr = &pr[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stgsen_work((C.int)(rowMajor), (C.lapack_int)(ijob), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_alphar), (*C.float)(_alphai), (*C.float)(_beta), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_m), (*C.float)(_pl), (*C.float)(_pr), (*C.float)(_dif), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsen.f. +func Dtgsen(ijob lapack.Job, wantq, wantz int32, sel []int32, n int, a []float64, lda int, b []float64, ldb int, alphar, alphai, beta, q []float64, ldq int, z []float64, ldz int, m []int32, pl, pr, dif, work []float64, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alphar *float64 + if len(alphar) > 0 { + _alphar = &alphar[0] + } + var _alphai *float64 + if len(alphai) > 0 { + _alphai = &alphai[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _z *float64 + if len(z) > 0 { + _z = &z[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _pl *float64 + if len(pl) > 0 { + _pl = &pl[0] + } + var _pr *float64 + if len(pr) > 0 { + _pr = &pr[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtgsen_work((C.int)(rowMajor), (C.lapack_int)(ijob), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_alphar), (*C.double)(_alphai), (*C.double)(_beta), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_m), (*C.double)(_pl), (*C.double)(_pr), (*C.double)(_dif), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsen.f. +func Ctgsen(ijob lapack.Job, wantq, wantz int32, sel []int32, n int, a []complex64, lda int, b []complex64, ldb int, alpha, beta, q []complex64, ldq int, z []complex64, ldz int, m []int32, pl, pr, dif []float32, work []complex64, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex64 + if len(z) > 0 { + _z = &z[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _pl *float32 + if len(pl) > 0 { + _pl = &pl[0] + } + var _pr *float32 + if len(pr) > 0 { + _pr = &pr[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ctgsen_work((C.int)(rowMajor), (C.lapack_int)(ijob), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_alpha), (*C.lapack_complex_float)(_beta), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_m), (*C.float)(_pl), (*C.float)(_pr), (*C.float)(_dif), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsen.f. +func Ztgsen(ijob lapack.Job, wantq, wantz int32, sel []int32, n int, a []complex128, lda int, b []complex128, ldb int, alpha, beta, q []complex128, ldq int, z []complex128, ldz int, m []int32, pl, pr, dif []float64, work []complex128, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *complex128 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *complex128 + if len(beta) > 0 { + _beta = &beta[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _z *complex128 + if len(z) > 0 { + _z = &z[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _pl *float64 + if len(pl) > 0 { + _pl = &pl[0] + } + var _pr *float64 + if len(pr) > 0 { + _pr = &pr[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ztgsen_work((C.int)(rowMajor), (C.lapack_int)(ijob), (C.lapack_logical)(wantq), (C.lapack_logical)(wantz), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_alpha), (*C.lapack_complex_double)(_beta), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_z), (C.lapack_int)(ldz), (*C.lapack_int)(_m), (*C.double)(_pl), (*C.double)(_pr), (*C.double)(_dif), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsja.f. +func Stgsja(jobu, jobv, jobq lapack.Job, m, p, n, k, l int, a []float32, lda int, b []float32, ldb int, tola, tolb float32, alpha, beta, u []float32, ldu int, v []float32, ldv int, q []float32, ldq int, work []float32, ncycle []int32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float32 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *float32 + if len(u) > 0 { + _u = &u[0] + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _ncycle *int32 + if len(ncycle) > 0 { + _ncycle = &ncycle[0] + } + return isZero(C.LAPACKE_stgsja_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (C.float)(tola), (C.float)(tolb), (*C.float)(_alpha), (*C.float)(_beta), (*C.float)(_u), (C.lapack_int)(ldu), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_work), (*C.lapack_int)(_ncycle))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsja.f. +func Dtgsja(jobu, jobv, jobq lapack.Job, m, p, n, k, l int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, ncycle []int32) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *float64 + if len(u) > 0 { + _u = &u[0] + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _ncycle *int32 + if len(ncycle) > 0 { + _ncycle = &ncycle[0] + } + return isZero(C.LAPACKE_dtgsja_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (C.double)(tola), (C.double)(tolb), (*C.double)(_alpha), (*C.double)(_beta), (*C.double)(_u), (C.lapack_int)(ldu), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_work), (*C.lapack_int)(_ncycle))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsja.f. +func Ctgsja(jobu, jobv, jobq lapack.Job, m, p, n, k, l int, a []complex64, lda int, b []complex64, ldb int, tola, tolb float32, alpha, beta []float32, u []complex64, ldu int, v []complex64, ldv int, q []complex64, ldq int, work []complex64, ncycle []int32) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float32 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float32 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *complex64 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _ncycle *int32 + if len(ncycle) > 0 { + _ncycle = &ncycle[0] + } + return isZero(C.LAPACKE_ctgsja_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (C.float)(tola), (C.float)(tolb), (*C.float)(_alpha), (*C.float)(_beta), (*C.lapack_complex_float)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_work), (*C.lapack_int)(_ncycle))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsja.f. +func Ztgsja(jobu, jobv, jobq lapack.Job, m, p, n, k, l int, a []complex128, lda int, b []complex128, ldb int, tola, tolb float64, alpha, beta []float64, u []complex128, ldu int, v []complex128, ldv int, q []complex128, ldq int, work []complex128, ncycle []int32) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _alpha *float64 + if len(alpha) > 0 { + _alpha = &alpha[0] + } + var _beta *float64 + if len(beta) > 0 { + _beta = &beta[0] + } + var _u *complex128 + if len(u) > 0 { + _u = &u[0] + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _ncycle *int32 + if len(ncycle) > 0 { + _ncycle = &ncycle[0] + } + return isZero(C.LAPACKE_ztgsja_work((C.int)(rowMajor), (C.char)(jobu), (C.char)(jobv), (C.char)(jobq), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (C.double)(tola), (C.double)(tolb), (*C.double)(_alpha), (*C.double)(_beta), (*C.lapack_complex_double)(_u), (C.lapack_int)(ldu), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_work), (*C.lapack_int)(_ncycle))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsna.f. +func Stgsna(job lapack.Job, howmny byte, sel []int32, n int, a []float32, lda int, b []float32, ldb int, vl []float32, ldvl int, vr []float32, ldvr int, s, dif []float32, mm int, m []int32, work []float32, lwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stgsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_s), (*C.float)(_dif), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsna.f. +func Dtgsna(job lapack.Job, howmny byte, sel []int32, n int, a []float64, lda int, b []float64, ldb int, vl []float64, ldvl int, vr []float64, ldvr int, s, dif []float64, mm int, m []int32, work []float64, lwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtgsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_s), (*C.double)(_dif), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsna.f. +func Ctgsna(job lapack.Job, howmny byte, sel []int32, n int, a []complex64, lda int, b []complex64, ldb int, vl []complex64, ldvl int, vr []complex64, ldvr int, s, dif []float32, mm int, m []int32, work []complex64, lwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ctgsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_s), (*C.float)(_dif), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsna.f. +func Ztgsna(job lapack.Job, howmny byte, sel []int32, n int, a []complex128, lda int, b []complex128, ldb int, vl []complex128, ldvl int, vr []complex128, ldvr int, s, dif []float64, mm int, m []int32, work []complex128, lwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ztgsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_s), (*C.double)(_dif), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsyl.f. +func Stgsyl(trans blas.Transpose, ijob lapack.Job, m, n int, a []float32, lda int, b []float32, ldb int, c []float32, ldc int, d []float32, ldd int, e []float32, lde int, f []float32, ldf int, scale, dif, work []float32, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _d *float32 + if len(d) > 0 { + _d = &d[0] + } + var _e *float32 + if len(e) > 0 { + _e = &e[0] + } + var _f *float32 + if len(f) > 0 { + _f = &f[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stgsyl_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(ijob), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_d), (C.lapack_int)(ldd), (*C.float)(_e), (C.lapack_int)(lde), (*C.float)(_f), (C.lapack_int)(ldf), (*C.float)(_scale), (*C.float)(_dif), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsyl.f. +func Dtgsyl(trans blas.Transpose, ijob lapack.Job, m, n int, a []float64, lda int, b []float64, ldb int, c []float64, ldc int, d []float64, ldd int, e []float64, lde int, f []float64, ldf int, scale, dif, work []float64, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _d *float64 + if len(d) > 0 { + _d = &d[0] + } + var _e *float64 + if len(e) > 0 { + _e = &e[0] + } + var _f *float64 + if len(f) > 0 { + _f = &f[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtgsyl_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(ijob), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_d), (C.lapack_int)(ldd), (*C.double)(_e), (C.lapack_int)(lde), (*C.double)(_f), (C.lapack_int)(ldf), (*C.double)(_scale), (*C.double)(_dif), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsyl.f. +func Ctgsyl(trans blas.Transpose, ijob lapack.Job, m, n int, a []complex64, lda int, b []complex64, ldb int, c []complex64, ldc int, d []complex64, ldd int, e []complex64, lde int, f []complex64, ldf int, scale, dif []float32, work []complex64, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _d *complex64 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex64 + if len(e) > 0 { + _e = &e[0] + } + var _f *complex64 + if len(f) > 0 { + _f = &f[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + var _dif *float32 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ctgsyl_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(ijob), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_d), (C.lapack_int)(ldd), (*C.lapack_complex_float)(_e), (C.lapack_int)(lde), (*C.lapack_complex_float)(_f), (C.lapack_int)(ldf), (*C.float)(_scale), (*C.float)(_dif), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsyl.f. +func Ztgsyl(trans blas.Transpose, ijob lapack.Job, m, n int, a []complex128, lda int, b []complex128, ldb int, c []complex128, ldc int, d []complex128, ldd int, e []complex128, lde int, f []complex128, ldf int, scale, dif []float64, work []complex128, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _d *complex128 + if len(d) > 0 { + _d = &d[0] + } + var _e *complex128 + if len(e) > 0 { + _e = &e[0] + } + var _f *complex128 + if len(f) > 0 { + _f = &f[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + var _dif *float64 + if len(dif) > 0 { + _dif = &dif[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_ztgsyl_work((C.int)(rowMajor), (C.char)(trans), (C.lapack_int)(ijob), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_d), (C.lapack_int)(ldd), (*C.lapack_complex_double)(_e), (C.lapack_int)(lde), (*C.lapack_complex_double)(_f), (C.lapack_int)(ldf), (*C.double)(_scale), (*C.double)(_dif), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpcon.f. +func Stpcon(norm byte, ul blas.Uplo, d blas.Diag, n int, ap, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stpcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpcon.f. +func Dtpcon(norm byte, ul blas.Uplo, d blas.Diag, n int, ap, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtpcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpcon.f. +func Ctpcon(norm byte, ul blas.Uplo, d blas.Diag, n int, ap []complex64, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctpcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpcon.f. +func Ztpcon(norm byte, ul blas.Uplo, d blas.Diag, n int, ap []complex128, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztpcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stprfs.f. +func Stprfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_stprfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtprfs.f. +func Dtprfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtprfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctprfs.f. +func Ctprfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctprfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztprfs.f. +func Ztprfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztprfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stptri.f. +func Stptri(ul blas.Uplo, d blas.Diag, n int, ap []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_stptri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptri.f. +func Dtptri(ul blas.Uplo, d blas.Diag, n int, ap []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_dtptri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctptri.f. +func Ctptri(ul blas.Uplo, d blas.Diag, n int, ap []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ctptri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztptri.f. +func Ztptri(ul blas.Uplo, d blas.Diag, n int, ap []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ztptri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stptrs.f. +func Stptrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_stptrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_ap), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptrs.f. +func Dtptrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dtptrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_ap), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctptrs.f. +func Ctptrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ctptrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztptrs.f. +func Ztptrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, ap, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ztptrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpttf.f. +func Stpttf(transr blas.Transpose, ul blas.Uplo, n int, ap, arf []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _arf *float32 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_stpttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttf.f. +func Dtpttf(transr blas.Transpose, ul blas.Uplo, n int, ap, arf []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _arf *float64 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_dtpttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpttf.f. +func Ctpttf(transr blas.Transpose, ul blas.Uplo, n int, ap, arf []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _arf *complex64 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_ctpttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpttf.f. +func Ztpttf(transr blas.Transpose, ul blas.Uplo, n int, ap, arf []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _arf *complex128 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_ztpttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpttr.f. +func Stpttr(ul blas.Uplo, n int, ap, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_stpttr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_ap), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttr.f. +func Dtpttr(ul blas.Uplo, n int, ap, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dtpttr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_ap), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpttr.f. +func Ctpttr(ul blas.Uplo, n int, ap, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ctpttr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpttr.f. +func Ztpttr(ul blas.Uplo, n int, ap, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ztpttr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strcon.f. +func Strcon(norm byte, ul blas.Uplo, d blas.Diag, n int, a []float32, lda int, rcond, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_strcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_rcond), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrcon.f. +func Dtrcon(norm byte, ul blas.Uplo, d blas.Diag, n int, a []float64, lda int, rcond, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtrcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_rcond), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrcon.f. +func Ctrcon(norm byte, ul blas.Uplo, d blas.Diag, n int, a []complex64, lda int, rcond []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float32 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctrcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.float)(_rcond), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrcon.f. +func Ztrcon(norm byte, ul blas.Uplo, d blas.Diag, n int, a []complex128, lda int, rcond []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _rcond *float64 + if len(rcond) > 0 { + _rcond = &rcond[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztrcon_work((C.int)(rowMajor), (C.char)(norm), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.double)(_rcond), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strevc.f. +func Strevc(side blas.Side, howmny byte, sel []int32, n int, t []float32, ldt int, vl []float32, ldvl int, vr []float32, ldvr, mm int, m []int32, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_strevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrevc.f. +func Dtrevc(side blas.Side, howmny byte, sel []int32, n int, t []float64, ldt int, vl []float64, ldvl int, vr []float64, ldvr, mm int, m []int32, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtrevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrevc.f. +func Ctrevc(side blas.Side, howmny byte, sel []int32, n int, t []complex64, ldt int, vl []complex64, ldvl int, vr []complex64, ldvr, mm int, m []int32, work []complex64, rwork []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctrevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrevc.f. +func Ztrevc(side blas.Side, howmny byte, sel []int32, n int, t []complex128, ldt int, vl []complex128, ldvl int, vr []complex128, ldvr, mm int, m []int32, work []complex128, rwork []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztrevc_work((C.int)(rowMajor), (C.char)(side), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strexc.f. +func Strexc(compq lapack.Comp, n int, t []float32, ldt int, q []float32, ldq int, ifst, ilst []int32, work []float32) bool { + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _ifst *int32 + if len(ifst) > 0 { + _ifst = &ifst[0] + } + var _ilst *int32 + if len(ilst) > 0 { + _ilst = &ilst[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_strexc_work((C.int)(rowMajor), (C.char)(compq), (C.lapack_int)(n), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_ifst), (*C.lapack_int)(_ilst), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrexc.f. +func Dtrexc(compq lapack.Comp, n int, t []float64, ldt int, q []float64, ldq int, ifst, ilst []int32, work []float64) bool { + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _ifst *int32 + if len(ifst) > 0 { + _ifst = &ifst[0] + } + var _ilst *int32 + if len(ilst) > 0 { + _ilst = &ilst[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtrexc_work((C.int)(rowMajor), (C.char)(compq), (C.lapack_int)(n), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_q), (C.lapack_int)(ldq), (*C.lapack_int)(_ifst), (*C.lapack_int)(_ilst), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrexc.f. +func Ctrexc(compq lapack.Comp, n int, t []complex64, ldt int, q []complex64, ldq, ifst, ilst int) bool { + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + return isZero(C.LAPACKE_ctrexc_work((C.int)(rowMajor), (C.char)(compq), (C.lapack_int)(n), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (C.lapack_int)(ifst), (C.lapack_int)(ilst))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrexc.f. +func Ztrexc(compq lapack.Comp, n int, t []complex128, ldt int, q []complex128, ldq, ifst, ilst int) bool { + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + return isZero(C.LAPACKE_ztrexc_work((C.int)(rowMajor), (C.char)(compq), (C.lapack_int)(n), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (C.lapack_int)(ifst), (C.lapack_int)(ilst))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strrfs.f. +func Strrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []float32, lda int, b []float32, ldb int, x []float32, ldx int, ferr, berr, work []float32, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _x *float32 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_strrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.float)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrrfs.f. +func Dtrrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int, x []float64, ldx int, ferr, berr, work []float64, iwork []int32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _x *float64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtrrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.double)(_work), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrrfs.f. +func Ctrrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []complex64, lda int, b []complex64, ldb int, x []complex64, ldx int, ferr, berr []float32, work []complex64, rwork []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float32 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float32 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctrrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_x), (C.lapack_int)(ldx), (*C.float)(_ferr), (*C.float)(_berr), (*C.lapack_complex_float)(_work), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrrfs.f. +func Ztrrfs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []complex128, lda int, b []complex128, ldb int, x []complex128, ldx int, ferr, berr []float64, work []complex128, rwork []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _ferr *float64 + if len(ferr) > 0 { + _ferr = &ferr[0] + } + var _berr *float64 + if len(berr) > 0 { + _berr = &berr[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztrrfs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_x), (C.lapack_int)(ldx), (*C.double)(_ferr), (*C.double)(_berr), (*C.lapack_complex_double)(_work), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsen.f. +func Strsen(job lapack.Job, compq lapack.Comp, sel []int32, n int, t []float32, ldt int, q []float32, ldq int, wr, wi []float32, m []int32, s, sep, work []float32, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _q *float32 + if len(q) > 0 { + _q = &q[0] + } + var _wr *float32 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float32 + if len(wi) > 0 { + _wi = &wi[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float32 + if len(sep) > 0 { + _sep = &sep[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_strsen_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_q), (C.lapack_int)(ldq), (*C.float)(_wr), (*C.float)(_wi), (*C.lapack_int)(_m), (*C.float)(_s), (*C.float)(_sep), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsen.f. +func Dtrsen(job lapack.Job, compq lapack.Comp, sel []int32, n int, t []float64, ldt int, q []float64, ldq int, wr, wi []float64, m []int32, s, sep, work []float64, lwork int, iwork []int32, liwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _q *float64 + if len(q) > 0 { + _q = &q[0] + } + var _wr *float64 + if len(wr) > 0 { + _wr = &wr[0] + } + var _wi *float64 + if len(wi) > 0 { + _wi = &wi[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float64 + if len(sep) > 0 { + _sep = &sep[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtrsen_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_q), (C.lapack_int)(ldq), (*C.double)(_wr), (*C.double)(_wi), (*C.lapack_int)(_m), (*C.double)(_s), (*C.double)(_sep), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork), (C.lapack_int)(liwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsen.f. +func Ctrsen(job lapack.Job, compq lapack.Comp, sel []int32, n int, t []complex64, ldt int, q []complex64, ldq int, w []complex64, m []int32, s, sep []float32, work []complex64, lwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _w *complex64 + if len(w) > 0 { + _w = &w[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float32 + if len(sep) > 0 { + _sep = &sep[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ctrsen_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_w), (*C.lapack_int)(_m), (*C.float)(_s), (*C.float)(_sep), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsen.f. +func Ztrsen(job lapack.Job, compq lapack.Comp, sel []int32, n int, t []complex128, ldt int, q []complex128, ldq int, w []complex128, m []int32, s, sep []float64, work []complex128, lwork int) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _w *complex128 + if len(w) > 0 { + _w = &w[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float64 + if len(sep) > 0 { + _sep = &sep[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ztrsen_work((C.int)(rowMajor), (C.char)(job), (C.char)(compq), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_w), (*C.lapack_int)(_m), (*C.double)(_s), (*C.double)(_sep), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsna.f. +func Strsna(job lapack.Job, howmny byte, sel []int32, n int, t []float32, ldt int, vl []float32, ldvl int, vr []float32, ldvr int, s, sep []float32, mm int, m []int32, work []float32, ldwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _vl *float32 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float32 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float32 + if len(sep) > 0 { + _sep = &sep[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_strsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_vl), (C.lapack_int)(ldvl), (*C.float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_s), (*C.float)(_sep), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.float)(_work), (C.lapack_int)(ldwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsna.f. +func Dtrsna(job lapack.Job, howmny byte, sel []int32, n int, t []float64, ldt int, vl []float64, ldvl int, vr []float64, ldvr int, s, sep []float64, mm int, m []int32, work []float64, ldwork int, iwork []int32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _vl *float64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *float64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float64 + if len(sep) > 0 { + _sep = &sep[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dtrsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_vl), (C.lapack_int)(ldvl), (*C.double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_s), (*C.double)(_sep), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.double)(_work), (C.lapack_int)(ldwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsna.f. +func Ctrsna(job lapack.Job, howmny byte, sel []int32, n int, t []complex64, ldt int, vl []complex64, ldvl int, vr []complex64, ldvr int, s, sep []float32, mm int, m []int32, work []complex64, ldwork int, rwork []float32) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _vl *complex64 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex64 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float32 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float32 + if len(sep) > 0 { + _sep = &sep[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ctrsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_float)(_vr), (C.lapack_int)(ldvr), (*C.float)(_s), (*C.float)(_sep), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_float)(_work), (C.lapack_int)(ldwork), (*C.float)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsna.f. +func Ztrsna(job lapack.Job, howmny byte, sel []int32, n int, t []complex128, ldt int, vl []complex128, ldvl int, vr []complex128, ldvr int, s, sep []float64, mm int, m []int32, work []complex128, ldwork int, rwork []float64) bool { + var _sel *int32 + if len(sel) > 0 { + _sel = &sel[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _vl *complex128 + if len(vl) > 0 { + _vl = &vl[0] + } + var _vr *complex128 + if len(vr) > 0 { + _vr = &vr[0] + } + var _s *float64 + if len(s) > 0 { + _s = &s[0] + } + var _sep *float64 + if len(sep) > 0 { + _sep = &sep[0] + } + var _m *int32 + if len(m) > 0 { + _m = &m[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_ztrsna_work((C.int)(rowMajor), (C.char)(job), (C.char)(howmny), (*C.lapack_int)(_sel), (C.lapack_int)(n), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_vl), (C.lapack_int)(ldvl), (*C.lapack_complex_double)(_vr), (C.lapack_int)(ldvr), (*C.double)(_s), (*C.double)(_sep), (C.lapack_int)(mm), (*C.lapack_int)(_m), (*C.lapack_complex_double)(_work), (C.lapack_int)(ldwork), (*C.double)(_rwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsyl.f. +func Strsyl(trana, tranb blas.Transpose, isgn, m, n int, a []float32, lda int, b []float32, ldb int, c []float32, ldc int, scale []float32) bool { + switch trana { + case blas.NoTrans: + trana = 'N' + case blas.Trans: + trana = 'T' + case blas.ConjTrans: + trana = 'C' + default: + panic("lapack: bad trans") + } + switch tranb { + case blas.NoTrans: + tranb = 'N' + case blas.Trans: + tranb = 'T' + case blas.ConjTrans: + tranb = 'C' + default: + panic("lapack: bad trans") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_strsyl_work((C.int)(rowMajor), (C.char)(trana), (C.char)(tranb), (C.lapack_int)(isgn), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsyl.f. +func Dtrsyl(trana, tranb blas.Transpose, isgn, m, n int, a []float64, lda int, b []float64, ldb int, c []float64, ldc int, scale []float64) bool { + switch trana { + case blas.NoTrans: + trana = 'N' + case blas.Trans: + trana = 'T' + case blas.ConjTrans: + trana = 'C' + default: + panic("lapack: bad trans") + } + switch tranb { + case blas.NoTrans: + tranb = 'N' + case blas.Trans: + tranb = 'T' + case blas.ConjTrans: + tranb = 'C' + default: + panic("lapack: bad trans") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_dtrsyl_work((C.int)(rowMajor), (C.char)(trana), (C.char)(tranb), (C.lapack_int)(isgn), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsyl.f. +func Ctrsyl(trana, tranb blas.Transpose, isgn, m, n int, a []complex64, lda int, b []complex64, ldb int, c []complex64, ldc int, scale []float32) bool { + switch trana { + case blas.NoTrans: + trana = 'N' + case blas.Trans: + trana = 'T' + case blas.ConjTrans: + trana = 'C' + default: + panic("lapack: bad trans") + } + switch tranb { + case blas.NoTrans: + tranb = 'N' + case blas.Trans: + tranb = 'T' + case blas.ConjTrans: + tranb = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _scale *float32 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_ctrsyl_work((C.int)(rowMajor), (C.char)(trana), (C.char)(tranb), (C.lapack_int)(isgn), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.float)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsyl.f. +func Ztrsyl(trana, tranb blas.Transpose, isgn, m, n int, a []complex128, lda int, b []complex128, ldb int, c []complex128, ldc int, scale []float64) bool { + switch trana { + case blas.NoTrans: + trana = 'N' + case blas.Trans: + trana = 'T' + case blas.ConjTrans: + trana = 'C' + default: + panic("lapack: bad trans") + } + switch tranb { + case blas.NoTrans: + tranb = 'N' + case blas.Trans: + tranb = 'T' + case blas.ConjTrans: + tranb = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _scale *float64 + if len(scale) > 0 { + _scale = &scale[0] + } + return isZero(C.LAPACKE_ztrsyl_work((C.int)(rowMajor), (C.char)(trana), (C.char)(tranb), (C.lapack_int)(isgn), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.double)(_scale))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strtri.f. +func Strtri(ul blas.Uplo, d blas.Diag, n int, a []float32, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_strtri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtri.f. +func Dtrtri(ul blas.Uplo, d blas.Diag, n int, a []float64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dtrtri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrtri.f. +func Ctrtri(ul blas.Uplo, d blas.Diag, n int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ctrtri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrtri.f. +func Ztrtri(ul blas.Uplo, d blas.Diag, n int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ztrtri_work((C.int)(rowMajor), (C.char)(ul), (C.char)(d), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strtrs.f. +func Strtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []float32, lda int, b []float32, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_strtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtrs.f. +func Dtrtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_dtrtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrtrs.f. +func Ctrtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []complex64, lda int, b []complex64, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ctrtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrtrs.f. +func Ztrtrs(ul blas.Uplo, trans blas.Transpose, d blas.Diag, n, nrhs int, a []complex128, lda int, b []complex128, ldb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + switch d { + case blas.Unit: + d = 'U' + case blas.NonUnit: + d = 'N' + default: + panic("lapack: illegal diagonal") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + return isZero(C.LAPACKE_ztrtrs_work((C.int)(rowMajor), (C.char)(ul), (C.char)(trans), (C.char)(d), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strttf.f. +func Strttf(transr blas.Transpose, ul blas.Uplo, n int, a []float32, lda int, arf []float32) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _arf *float32 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_strttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttf.f. +func Dtrttf(transr blas.Transpose, ul blas.Uplo, n int, a []float64, lda int, arf []float64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _arf *float64 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_dtrttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrttf.f. +func Ctrttf(transr blas.Transpose, ul blas.Uplo, n int, a []complex64, lda int, arf []complex64) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _arf *complex64 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_ctrttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrttf.f. +func Ztrttf(transr blas.Transpose, ul blas.Uplo, n int, a []complex128, lda int, arf []complex128) bool { + switch transr { + case blas.NoTrans: + transr = 'N' + case blas.Trans: + transr = 'T' + case blas.ConjTrans: + transr = 'C' + default: + panic("lapack: bad trans") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _arf *complex128 + if len(arf) > 0 { + _arf = &arf[0] + } + return isZero(C.LAPACKE_ztrttf_work((C.int)(rowMajor), (C.char)(transr), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_arf))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strttp.f. +func Strttp(ul blas.Uplo, n int, a []float32, lda int, ap []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ap *float32 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_strttp_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttp.f. +func Dtrttp(ul blas.Uplo, n int, a []float64, lda int, ap []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ap *float64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_dtrttp_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrttp.f. +func Ctrttp(ul blas.Uplo, n int, a []complex64, lda int, ap []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ctrttp_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrttp.f. +func Ztrttp(ul blas.Uplo, n int, a []complex128, lda int, ap []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + return isZero(C.LAPACKE_ztrttp_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_ap))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stzrzf.f. +func Stzrzf(m, n int, a []float32, lda int, tau, work []float32, lwork int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float32 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stzrzf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_tau), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtzrzf.f. +func Dtzrzf(m, n int, a []float64, lda int, tau, work []float64, lwork int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *float64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtzrzf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_tau), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctzrzf.f. +func Ctzrzf(m, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ctzrzf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztzrzf.f. +func Ztzrzf(m, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ztzrzf_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungbr.f. +func Cungbr(vect byte, m, n, k int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cungbr_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungbr.f. +func Zungbr(vect byte, m, n, k int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zungbr_work((C.int)(rowMajor), (C.char)(vect), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunghr.f. +func Cunghr(n, ilo, ihi int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunghr_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunghr.f. +func Zunghr(n, ilo, ihi int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunghr_work((C.int)(rowMajor), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunglq.f. +func Cunglq(m, n, k int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunglq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunglq.f. +func Zunglq(m, n, k int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunglq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungql.f. +func Cungql(m, n, k int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cungql_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungql.f. +func Zungql(m, n, k int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zungql_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungqr.f. +func Cungqr(m, n, k int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cungqr_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungqr.f. +func Zungqr(m, n, k int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zungqr_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungrq.f. +func Cungrq(m, n, k int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cungrq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungrq.f. +func Zungrq(m, n, k int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zungrq_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungtr.f. +func Cungtr(ul blas.Uplo, n int, a []complex64, lda int, tau, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cungtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungtr.f. +func Zungtr(ul blas.Uplo, n int, a []complex128, lda int, tau, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zungtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmbr.f. +func Cunmbr(vect byte, side blas.Side, trans blas.Transpose, m, n, k int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmbr_work((C.int)(rowMajor), (C.char)(vect), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmbr.f. +func Zunmbr(vect byte, side blas.Side, trans blas.Transpose, m, n, k int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmbr_work((C.int)(rowMajor), (C.char)(vect), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmhr.f. +func Cunmhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmhr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmhr.f. +func Zunmhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmhr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(ilo), (C.lapack_int)(ihi), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmlq.f. +func Cunmlq(side blas.Side, trans blas.Transpose, m, n, k int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmlq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmlq.f. +func Zunmlq(side blas.Side, trans blas.Transpose, m, n, k int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmlq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmql.f. +func Cunmql(side blas.Side, trans blas.Transpose, m, n, k int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmql_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmql.f. +func Zunmql(side blas.Side, trans blas.Transpose, m, n, k int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmql_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmqr.f. +func Cunmqr(side blas.Side, trans blas.Transpose, m, n, k int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmqr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmqr.f. +func Zunmqr(side blas.Side, trans blas.Transpose, m, n, k int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmqr_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmrq.f. +func Cunmrq(side blas.Side, trans blas.Transpose, m, n, k int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmrq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmrq.f. +func Zunmrq(side blas.Side, trans blas.Transpose, m, n, k int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmrq_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmrz.f. +func Cunmrz(side blas.Side, trans blas.Transpose, m, n, k, l int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmrz_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmrz.f. +func Zunmrz(side blas.Side, trans blas.Transpose, m, n, k, l int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmrz_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmtr.f. +func Cunmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, a []complex64, lda int, tau, c []complex64, ldc int, work []complex64, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmtr.f. +func Zunmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, a []complex128, lda int, tau, c []complex128, ldc int, work []complex128, lwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cupgtr.f. +func Cupgtr(ul blas.Uplo, n int, ap, tau, q []complex64, ldq int, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _q *complex64 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cupgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zupgtr.f. +func Zupgtr(ul blas.Uplo, n int, ap, tau, q []complex128, ldq int, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _q *complex128 + if len(q) > 0 { + _q = &q[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zupgtr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_q), (C.lapack_int)(ldq), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cupmtr.f. +func Cupmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, ap, tau, c []complex64, ldc int, work []complex64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ap *complex64 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *complex64 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cupmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_ap), (*C.lapack_complex_float)(_tau), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zupmtr.f. +func Zupmtr(side blas.Side, ul blas.Uplo, trans blas.Transpose, m, n int, ap, tau, c []complex128, ldc int, work []complex128) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _ap *complex128 + if len(ap) > 0 { + _ap = &ap[0] + } + var _tau *complex128 + if len(tau) > 0 { + _tau = &tau[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zupmtr_work((C.int)(rowMajor), (C.char)(side), (C.char)(ul), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_ap), (*C.lapack_complex_double)(_tau), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbbcsd.f. +func Cbbcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, m, p, q int, theta, phi []float32, u1 []complex64, ldu1 int, u2 []complex64, ldu2 int, v1t []complex64, ldv1t int, v2t []complex64, ldv2t int, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork []float32, lrwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float32 + if len(phi) > 0 { + _phi = &phi[0] + } + var _u1 *complex64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *complex64 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _b11d *float32 + if len(b11d) > 0 { + _b11d = &b11d[0] + } + var _b11e *float32 + if len(b11e) > 0 { + _b11e = &b11e[0] + } + var _b12d *float32 + if len(b12d) > 0 { + _b12d = &b12d[0] + } + var _b12e *float32 + if len(b12e) > 0 { + _b12e = &b12e[0] + } + var _b21d *float32 + if len(b21d) > 0 { + _b21d = &b21d[0] + } + var _b21e *float32 + if len(b21e) > 0 { + _b21e = &b21e[0] + } + var _b22d *float32 + if len(b22d) > 0 { + _b22d = &b22d[0] + } + var _b22e *float32 + if len(b22e) > 0 { + _b22e = &b22e[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_cbbcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.float)(_theta), (*C.float)(_phi), (*C.lapack_complex_float)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_float)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_float)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_float)(_v2t), (C.lapack_int)(ldv2t), (*C.float)(_b11d), (*C.float)(_b11e), (*C.float)(_b12d), (*C.float)(_b12e), (*C.float)(_b21d), (*C.float)(_b21e), (*C.float)(_b22d), (*C.float)(_b22e), (*C.float)(_rwork), (C.lapack_int)(lrwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheswapr.f. +func Cheswapr(ul blas.Uplo, n int, a []complex64, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_cheswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri2.f. +func Chetri2(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri2x.f. +func Chetri2x(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrs2.f. +func Chetrs2(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_chetrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyconv.f. +func Csyconv(ul blas.Uplo, way byte, n int, a []complex64, lda int, ipiv []int32, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csyconv_work((C.int)(rowMajor), (C.char)(ul), (C.char)(way), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyswapr.f. +func Csyswapr(ul blas.Uplo, n int, a []complex64, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_csyswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri2.f. +func Csytri2(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csytri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri2x.f. +func Csytri2x(ul blas.Uplo, n int, a []complex64, lda int, ipiv []int32, work []complex64, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csytri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrs2.f. +func Csytrs2(ul blas.Uplo, n, nrhs int, a []complex64, lda int, ipiv []int32, b []complex64, ldb int, work []complex64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_csytrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunbdb.f. +func Cunbdb(trans blas.Transpose, signs byte, m, p, q int, x11 []complex64, ldx11 int, x12 []complex64, ldx12 int, x21 []complex64, ldx21 int, x22 []complex64, ldx22 int, theta, phi []float32, taup1, taup2, tauq1, tauq2, work []complex64, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *complex64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *complex64 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *complex64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *complex64 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float32 + if len(phi) > 0 { + _phi = &phi[0] + } + var _taup1 *complex64 + if len(taup1) > 0 { + _taup1 = &taup1[0] + } + var _taup2 *complex64 + if len(taup2) > 0 { + _taup2 = &taup2[0] + } + var _tauq1 *complex64 + if len(tauq1) > 0 { + _tauq1 = &tauq1[0] + } + var _tauq2 *complex64 + if len(tauq2) > 0 { + _tauq2 = &tauq2[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cunbdb_work((C.int)(rowMajor), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_float)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_float)(_x12), (C.lapack_int)(ldx12), (*C.lapack_complex_float)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_float)(_x22), (C.lapack_int)(ldx22), (*C.float)(_theta), (*C.float)(_phi), (*C.lapack_complex_float)(_taup1), (*C.lapack_complex_float)(_taup2), (*C.lapack_complex_float)(_tauq1), (*C.lapack_complex_float)(_tauq2), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cuncsd.f. +func Cuncsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, signs byte, m, p, q int, x11 []complex64, ldx11 int, x12 []complex64, ldx12 int, x21 []complex64, ldx21 int, x22 []complex64, ldx22 int, theta []float32, u1 []complex64, ldu1 int, u2 []complex64, ldu2 int, v1t []complex64, ldv1t int, v2t []complex64, ldv2t int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *complex64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *complex64 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *complex64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *complex64 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *complex64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *complex64 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cuncsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_float)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_float)(_x12), (C.lapack_int)(ldx12), (*C.lapack_complex_float)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_float)(_x22), (C.lapack_int)(ldx22), (*C.float)(_theta), (*C.lapack_complex_float)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_float)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_float)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_float)(_v2t), (C.lapack_int)(ldv2t), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cuncsd2by1.f. +func Cuncsd2by1(jobu1, jobu2, jobv1t lapack.Job, m, p, q int, x11 []complex64, ldx11 int, x21 []complex64, ldx21 int, theta, u1 []complex64, ldu1 int, u2 []complex64, ldu2 int, v1t []complex64, ldv1t int, work []complex64, lwork int, rwork []float32, lrwork int, iwork []int32) bool { + var _x11 *complex64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x21 *complex64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _theta *complex64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *complex64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float32 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_cuncsd2by1_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_float)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_float)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_float)(_theta), (*C.lapack_complex_float)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_float)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_float)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork), (*C.float)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbbcsd.f. +func Dbbcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, m, p, q int, theta, phi, u1 []float64, ldu1 int, u2 []float64, ldu2 int, v1t []float64, ldv1t int, v2t []float64, ldv2t int, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, work []float64, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float64 + if len(phi) > 0 { + _phi = &phi[0] + } + var _u1 *float64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *float64 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _b11d *float64 + if len(b11d) > 0 { + _b11d = &b11d[0] + } + var _b11e *float64 + if len(b11e) > 0 { + _b11e = &b11e[0] + } + var _b12d *float64 + if len(b12d) > 0 { + _b12d = &b12d[0] + } + var _b12e *float64 + if len(b12e) > 0 { + _b12e = &b12e[0] + } + var _b21d *float64 + if len(b21d) > 0 { + _b21d = &b21d[0] + } + var _b21e *float64 + if len(b21e) > 0 { + _b21e = &b21e[0] + } + var _b22d *float64 + if len(b22d) > 0 { + _b22d = &b22d[0] + } + var _b22e *float64 + if len(b22e) > 0 { + _b22e = &b22e[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dbbcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.double)(_theta), (*C.double)(_phi), (*C.double)(_u1), (C.lapack_int)(ldu1), (*C.double)(_u2), (C.lapack_int)(ldu2), (*C.double)(_v1t), (C.lapack_int)(ldv1t), (*C.double)(_v2t), (C.lapack_int)(ldv2t), (*C.double)(_b11d), (*C.double)(_b11e), (*C.double)(_b12d), (*C.double)(_b12e), (*C.double)(_b21d), (*C.double)(_b21e), (*C.double)(_b22d), (*C.double)(_b22e), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorbdb.f. +func Dorbdb(trans blas.Transpose, signs byte, m, p, q int, x11 []float64, ldx11 int, x12 []float64, ldx12 int, x21 []float64, ldx21 int, x22 []float64, ldx22 int, theta, phi, taup1, taup2, tauq1, tauq2, work []float64, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *float64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *float64 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *float64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *float64 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float64 + if len(phi) > 0 { + _phi = &phi[0] + } + var _taup1 *float64 + if len(taup1) > 0 { + _taup1 = &taup1[0] + } + var _taup2 *float64 + if len(taup2) > 0 { + _taup2 = &taup2[0] + } + var _tauq1 *float64 + if len(tauq1) > 0 { + _tauq1 = &tauq1[0] + } + var _tauq2 *float64 + if len(tauq2) > 0 { + _tauq2 = &tauq2[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dorbdb_work((C.int)(rowMajor), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.double)(_x11), (C.lapack_int)(ldx11), (*C.double)(_x12), (C.lapack_int)(ldx12), (*C.double)(_x21), (C.lapack_int)(ldx21), (*C.double)(_x22), (C.lapack_int)(ldx22), (*C.double)(_theta), (*C.double)(_phi), (*C.double)(_taup1), (*C.double)(_taup2), (*C.double)(_tauq1), (*C.double)(_tauq2), (*C.double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd.f. +func Dorcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, signs byte, m, p, q int, x11 []float64, ldx11 int, x12 []float64, ldx12 int, x21 []float64, ldx21 int, x22 []float64, ldx22 int, theta, u1 []float64, ldu1 int, u2 []float64, ldu2 int, v1t []float64, ldv1t int, v2t []float64, ldv2t int, work []float64, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *float64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *float64 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *float64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *float64 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *float64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *float64 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dorcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.double)(_x11), (C.lapack_int)(ldx11), (*C.double)(_x12), (C.lapack_int)(ldx12), (*C.double)(_x21), (C.lapack_int)(ldx21), (*C.double)(_x22), (C.lapack_int)(ldx22), (*C.double)(_theta), (*C.double)(_u1), (C.lapack_int)(ldu1), (*C.double)(_u2), (C.lapack_int)(ldu2), (*C.double)(_v1t), (C.lapack_int)(ldv1t), (*C.double)(_v2t), (C.lapack_int)(ldv2t), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd2by1.f. +func Dorcsd2by1(jobu1, jobu2, jobv1t lapack.Job, m, p, q int, x11 []float64, ldx11 int, x21 []float64, ldx21 int, theta, u1 []float64, ldu1 int, u2 []float64, ldu2 int, v1t []float64, ldv1t int, work []float64, lwork int, iwork []int32) bool { + var _x11 *float64 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x21 *float64 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *float64 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float64 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float64 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_dorcsd2by1_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.double)(_x11), (C.lapack_int)(ldx11), (*C.double)(_x21), (C.lapack_int)(ldx21), (*C.double)(_theta), (*C.double)(_u1), (C.lapack_int)(ldu1), (*C.double)(_u2), (C.lapack_int)(ldu2), (*C.double)(_v1t), (C.lapack_int)(ldv1t), (*C.double)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyconv.f. +func Dsyconv(ul blas.Uplo, way byte, n int, a []float64, lda int, ipiv []int32, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsyconv_work((C.int)(rowMajor), (C.char)(ul), (C.char)(way), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyswapr.f. +func Dsyswapr(ul blas.Uplo, n int, a []float64, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_dsyswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2.f. +func Dsytri2(ul blas.Uplo, n int, a []float64, lda int, ipiv []int32, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2x.f. +func Dsytri2x(ul blas.Uplo, n int, a []float64, lda int, ipiv []int32, work []float64, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs2.f. +func Dsytrs2(ul blas.Uplo, n, nrhs int, a []float64, lda int, ipiv []int32, b []float64, ldb int, work []float64) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dsytrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbbcsd.f. +func Sbbcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, m, p, q int, theta, phi, u1 []float32, ldu1 int, u2 []float32, ldu2 int, v1t []float32, ldv1t int, v2t []float32, ldv2t int, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, work []float32, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float32 + if len(phi) > 0 { + _phi = &phi[0] + } + var _u1 *float32 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float32 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float32 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *float32 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _b11d *float32 + if len(b11d) > 0 { + _b11d = &b11d[0] + } + var _b11e *float32 + if len(b11e) > 0 { + _b11e = &b11e[0] + } + var _b12d *float32 + if len(b12d) > 0 { + _b12d = &b12d[0] + } + var _b12e *float32 + if len(b12e) > 0 { + _b12e = &b12e[0] + } + var _b21d *float32 + if len(b21d) > 0 { + _b21d = &b21d[0] + } + var _b21e *float32 + if len(b21e) > 0 { + _b21e = &b21e[0] + } + var _b22d *float32 + if len(b22d) > 0 { + _b22d = &b22d[0] + } + var _b22e *float32 + if len(b22e) > 0 { + _b22e = &b22e[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sbbcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.float)(_theta), (*C.float)(_phi), (*C.float)(_u1), (C.lapack_int)(ldu1), (*C.float)(_u2), (C.lapack_int)(ldu2), (*C.float)(_v1t), (C.lapack_int)(ldv1t), (*C.float)(_v2t), (C.lapack_int)(ldv2t), (*C.float)(_b11d), (*C.float)(_b11e), (*C.float)(_b12d), (*C.float)(_b12e), (*C.float)(_b21d), (*C.float)(_b21e), (*C.float)(_b22d), (*C.float)(_b22e), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorbdb.f. +func Sorbdb(trans blas.Transpose, signs byte, m, p, q int, x11 []float32, ldx11 int, x12 []float32, ldx12 int, x21 []float32, ldx21 int, x22 []float32, ldx22 int, theta, phi, taup1, taup2, tauq1, tauq2, work []float32, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *float32 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *float32 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *float32 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *float32 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float32 + if len(phi) > 0 { + _phi = &phi[0] + } + var _taup1 *float32 + if len(taup1) > 0 { + _taup1 = &taup1[0] + } + var _taup2 *float32 + if len(taup2) > 0 { + _taup2 = &taup2[0] + } + var _tauq1 *float32 + if len(tauq1) > 0 { + _tauq1 = &tauq1[0] + } + var _tauq2 *float32 + if len(tauq2) > 0 { + _tauq2 = &tauq2[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sorbdb_work((C.int)(rowMajor), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.float)(_x11), (C.lapack_int)(ldx11), (*C.float)(_x12), (C.lapack_int)(ldx12), (*C.float)(_x21), (C.lapack_int)(ldx21), (*C.float)(_x22), (C.lapack_int)(ldx22), (*C.float)(_theta), (*C.float)(_phi), (*C.float)(_taup1), (*C.float)(_taup2), (*C.float)(_tauq1), (*C.float)(_tauq2), (*C.float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorcsd.f. +func Sorcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, signs byte, m, p, q int, x11 []float32, ldx11 int, x12 []float32, ldx12 int, x21 []float32, ldx21 int, x22 []float32, ldx22 int, theta, u1 []float32, ldu1 int, u2 []float32, ldu2 int, v1t []float32, ldv1t int, v2t []float32, ldv2t int, work []float32, lwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *float32 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *float32 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *float32 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *float32 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *float32 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float32 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float32 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *float32 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sorcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.float)(_x11), (C.lapack_int)(ldx11), (*C.float)(_x12), (C.lapack_int)(ldx12), (*C.float)(_x21), (C.lapack_int)(ldx21), (*C.float)(_x22), (C.lapack_int)(ldx22), (*C.float)(_theta), (*C.float)(_u1), (C.lapack_int)(ldu1), (*C.float)(_u2), (C.lapack_int)(ldu2), (*C.float)(_v1t), (C.lapack_int)(ldv1t), (*C.float)(_v2t), (C.lapack_int)(ldv2t), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorcsd2by1.f. +func Sorcsd2by1(jobu1, jobu2, jobv1t lapack.Job, m, p, q int, x11 []float32, ldx11 int, x21 []float32, ldx21 int, theta, u1 []float32, ldu1 int, u2 []float32, ldu2 int, v1t []float32, ldv1t int, work []float32, lwork int, iwork []int32) bool { + var _x11 *float32 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x21 *float32 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _theta *float32 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *float32 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *float32 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *float32 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_sorcsd2by1_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.float)(_x11), (C.lapack_int)(ldx11), (*C.float)(_x21), (C.lapack_int)(ldx21), (*C.float)(_theta), (*C.float)(_u1), (C.lapack_int)(ldu1), (*C.float)(_u2), (C.lapack_int)(ldu2), (*C.float)(_v1t), (C.lapack_int)(ldv1t), (*C.float)(_work), (C.lapack_int)(lwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyconv.f. +func Ssyconv(ul blas.Uplo, way byte, n int, a []float32, lda int, ipiv []int32, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssyconv_work((C.int)(rowMajor), (C.char)(ul), (C.char)(way), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyswapr.f. +func Ssyswapr(ul blas.Uplo, n int, a []float32, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_ssyswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri2.f. +func Ssytri2(ul blas.Uplo, n int, a []float32, lda int, ipiv []int32, work []complex64, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_float)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri2x.f. +func Ssytri2x(ul blas.Uplo, n int, a []float32, lda int, ipiv []int32, work []float32, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrs2.f. +func Ssytrs2(ul blas.Uplo, n, nrhs int, a []float32, lda int, ipiv []int32, b []float32, ldb int, work []float32) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ssytrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.float)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zbbcsd.f. +func Zbbcsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, m, p, q int, theta, phi []float64, u1 []complex128, ldu1 int, u2 []complex128, ldu2 int, v1t []complex128, ldv1t int, v2t []complex128, ldv2t int, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork []float64, lrwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float64 + if len(phi) > 0 { + _phi = &phi[0] + } + var _u1 *complex128 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex128 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex128 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *complex128 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _b11d *float64 + if len(b11d) > 0 { + _b11d = &b11d[0] + } + var _b11e *float64 + if len(b11e) > 0 { + _b11e = &b11e[0] + } + var _b12d *float64 + if len(b12d) > 0 { + _b12d = &b12d[0] + } + var _b12e *float64 + if len(b12e) > 0 { + _b12e = &b12e[0] + } + var _b21d *float64 + if len(b21d) > 0 { + _b21d = &b21d[0] + } + var _b21e *float64 + if len(b21e) > 0 { + _b21e = &b21e[0] + } + var _b22d *float64 + if len(b22d) > 0 { + _b22d = &b22d[0] + } + var _b22e *float64 + if len(b22e) > 0 { + _b22e = &b22e[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + return isZero(C.LAPACKE_zbbcsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.double)(_theta), (*C.double)(_phi), (*C.lapack_complex_double)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_double)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_double)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_double)(_v2t), (C.lapack_int)(ldv2t), (*C.double)(_b11d), (*C.double)(_b11e), (*C.double)(_b12d), (*C.double)(_b12e), (*C.double)(_b21d), (*C.double)(_b21e), (*C.double)(_b22d), (*C.double)(_b22e), (*C.double)(_rwork), (C.lapack_int)(lrwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheswapr.f. +func Zheswapr(ul blas.Uplo, n int, a []complex128, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zheswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri2.f. +func Zhetri2(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri2x.f. +func Zhetri2x(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs2.f. +func Zhetrs2(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zhetrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyconv.f. +func Zsyconv(ul blas.Uplo, way byte, n int, a []complex128, lda int, ipiv []int32, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsyconv_work((C.int)(rowMajor), (C.char)(ul), (C.char)(way), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyswapr.f. +func Zsyswapr(ul blas.Uplo, n int, a []complex128, i1, i2 int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zsyswapr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(i1), (C.lapack_int)(i2))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri2.f. +func Zsytri2(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, lwork int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsytri2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri2x.f. +func Zsytri2x(ul blas.Uplo, n int, a []complex128, lda int, ipiv []int32, work []complex128, nb int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsytri2x_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_work), (C.lapack_int)(nb))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrs2.f. +func Zsytrs2(ul blas.Uplo, n, nrhs int, a []complex128, lda int, ipiv []int32, b []complex128, ldb int, work []complex128) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _ipiv *int32 + if len(ipiv) > 0 { + _ipiv = &ipiv[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zsytrs2_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_int)(nrhs), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_int)(_ipiv), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunbdb.f. +func Zunbdb(trans blas.Transpose, signs byte, m, p, q int, x11 []complex128, ldx11 int, x12 []complex128, ldx12 int, x21 []complex128, ldx21 int, x22 []complex128, ldx22 int, theta, phi []float64, taup1, taup2, tauq1, tauq2, work []complex128, lwork int) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *complex128 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *complex128 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *complex128 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *complex128 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _phi *float64 + if len(phi) > 0 { + _phi = &phi[0] + } + var _taup1 *complex128 + if len(taup1) > 0 { + _taup1 = &taup1[0] + } + var _taup2 *complex128 + if len(taup2) > 0 { + _taup2 = &taup2[0] + } + var _tauq1 *complex128 + if len(tauq1) > 0 { + _tauq1 = &tauq1[0] + } + var _tauq2 *complex128 + if len(tauq2) > 0 { + _tauq2 = &tauq2[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zunbdb_work((C.int)(rowMajor), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_double)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_double)(_x12), (C.lapack_int)(ldx12), (*C.lapack_complex_double)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_double)(_x22), (C.lapack_int)(ldx22), (*C.double)(_theta), (*C.double)(_phi), (*C.lapack_complex_double)(_taup1), (*C.lapack_complex_double)(_taup2), (*C.lapack_complex_double)(_tauq1), (*C.lapack_complex_double)(_tauq2), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zuncsd.f. +func Zuncsd(jobu1, jobu2, jobv1t, jobv2t lapack.Job, trans blas.Transpose, signs byte, m, p, q int, x11 []complex128, ldx11 int, x12 []complex128, ldx12 int, x21 []complex128, ldx21 int, x22 []complex128, ldx22 int, theta []float64, u1 []complex128, ldu1 int, u2 []complex128, ldu2 int, v1t []complex128, ldv1t int, v2t []complex128, ldv2t int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32) bool { + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _x11 *complex128 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x12 *complex128 + if len(x12) > 0 { + _x12 = &x12[0] + } + var _x21 *complex128 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _x22 *complex128 + if len(x22) > 0 { + _x22 = &x22[0] + } + var _theta *float64 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *complex128 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex128 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex128 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _v2t *complex128 + if len(v2t) > 0 { + _v2t = &v2t[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zuncsd_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.char)(jobv2t), (C.char)(trans), (C.char)(signs), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_double)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_double)(_x12), (C.lapack_int)(ldx12), (*C.lapack_complex_double)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_double)(_x22), (C.lapack_int)(ldx22), (*C.double)(_theta), (*C.lapack_complex_double)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_double)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_double)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_double)(_v2t), (C.lapack_int)(ldv2t), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zuncsd2by1.f. +func Zuncsd2by1(jobu1, jobu2, jobv1t lapack.Job, m, p, q int, x11 []complex128, ldx11 int, x21 []complex128, ldx21 int, theta, u1 []complex128, ldu1 int, u2 []complex128, ldu2 int, v1t []complex128, ldv1t int, work []complex128, lwork int, rwork []float64, lrwork int, iwork []int32) bool { + var _x11 *complex128 + if len(x11) > 0 { + _x11 = &x11[0] + } + var _x21 *complex128 + if len(x21) > 0 { + _x21 = &x21[0] + } + var _theta *complex128 + if len(theta) > 0 { + _theta = &theta[0] + } + var _u1 *complex128 + if len(u1) > 0 { + _u1 = &u1[0] + } + var _u2 *complex128 + if len(u2) > 0 { + _u2 = &u2[0] + } + var _v1t *complex128 + if len(v1t) > 0 { + _v1t = &v1t[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + var _rwork *float64 + if len(rwork) > 0 { + _rwork = &rwork[0] + } + var _iwork *int32 + if len(iwork) > 0 { + _iwork = &iwork[0] + } + return isZero(C.LAPACKE_zuncsd2by1_work((C.int)(rowMajor), (C.char)(jobu1), (C.char)(jobu2), (C.char)(jobv1t), (C.lapack_int)(m), (C.lapack_int)(p), (C.lapack_int)(q), (*C.lapack_complex_double)(_x11), (C.lapack_int)(ldx11), (*C.lapack_complex_double)(_x21), (C.lapack_int)(ldx21), (*C.lapack_complex_double)(_theta), (*C.lapack_complex_double)(_u1), (C.lapack_int)(ldu1), (*C.lapack_complex_double)(_u2), (C.lapack_int)(ldu2), (*C.lapack_complex_double)(_v1t), (C.lapack_int)(ldv1t), (*C.lapack_complex_double)(_work), (C.lapack_int)(lwork), (*C.double)(_rwork), (C.lapack_int)(lrwork), (*C.lapack_int)(_iwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgemqrt.f. +func Sgemqrt(side blas.Side, trans blas.Transpose, m, n, k, nb int, v []float32, ldv int, t []float32, ldt int, c []float32, ldc int, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _c *float32 + if len(c) > 0 { + _c = &c[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgemqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(nb), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_c), (C.lapack_int)(ldc), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgemqrt.f. +func Dgemqrt(side blas.Side, trans blas.Transpose, m, n, k, nb int, v []float64, ldv int, t []float64, ldt int, c []float64, ldc int, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _c *float64 + if len(c) > 0 { + _c = &c[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgemqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(nb), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_c), (C.lapack_int)(ldc), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgemqrt.f. +func Cgemqrt(side blas.Side, trans blas.Transpose, m, n, k, nb int, v []complex64, ldv int, t []complex64, ldt int, c []complex64, ldc int, work []complex64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _c *complex64 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgemqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(nb), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgemqrt.f. +func Zgemqrt(side blas.Side, trans blas.Transpose, m, n, k, nb int, v []complex128, ldv int, t []complex128, ldt int, c []complex128, ldc int, work []complex128) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _c *complex128 + if len(c) > 0 { + _c = &c[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgemqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(nb), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_c), (C.lapack_int)(ldc), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrt.f. +func Sgeqrt(m, n, nb int, a []float32, lda int, t []float32, ldt int, work []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_sgeqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nb), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrt.f. +func Dgeqrt(m, n, nb int, a []float64, lda int, t []float64, ldt int, work []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dgeqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nb), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrt.f. +func Cgeqrt(m, n, nb int, a []complex64, lda int, t []complex64, ldt int, work []complex64) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_cgeqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nb), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrt.f. +func Zgeqrt(m, n, nb int, a []complex128, lda int, t []complex128, ldt int, work []complex128) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_zgeqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(nb), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrt2.f. +func Sgeqrt2(m, n int, a []float32, lda int, t []float32, ldt int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_sgeqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrt2.f. +func Dgeqrt2(m, n int, a []float64, lda int, t []float64, ldt int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_dgeqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrt2.f. +func Cgeqrt2(m, n int, a []complex64, lda int, t []complex64, ldt int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_cgeqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrt2.f. +func Zgeqrt2(m, n int, a []complex128, lda int, t []complex128, ldt int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_zgeqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrt3.f. +func Sgeqrt3(m, n int, a []float32, lda int, t []float32, ldt int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_sgeqrt3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrt3.f. +func Dgeqrt3(m, n int, a []float64, lda int, t []float64, ldt int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_dgeqrt3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrt3.f. +func Cgeqrt3(m, n int, a []complex64, lda int, t []complex64, ldt int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_cgeqrt3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrt3.f. +func Zgeqrt3(m, n int, a []complex128, lda int, t []complex128, ldt int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_zgeqrt3_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpmqrt.f. +func Stpmqrt(side blas.Side, trans blas.Transpose, m, n, k, l, nb int, v []float32, ldv int, t []float32, ldt int, a []float32, lda int, b []float32, ldb int, work []float32) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stpmqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpmqrt.f. +func Dtpmqrt(side blas.Side, trans blas.Transpose, m, n, k, l, nb int, v []float64, ldv int, t []float64, ldt int, a []float64, lda int, b []float64, ldb int, work []float64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtpmqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpmqrt.f. +func Ctpmqrt(side blas.Side, trans blas.Transpose, m, n, k, l, nb int, v []complex64, ldv int, t []complex64, ldt int, a []complex64, lda int, b []complex64, ldb int, work []complex64) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ctpmqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpmqrt.f. +func Ztpmqrt(side blas.Side, trans blas.Transpose, m, n, k, l, nb int, v []complex128, ldv int, t []complex128, ldt int, a []complex128, lda int, b []complex128, ldb int, work []complex128) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ztpmqrt_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpqrt.f. +func Stpqrt(m, n, l, nb int, a []float32, lda int, b []float32, ldb int, t []float32, ldt int, work []float32) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stpqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpqrt.f. +func Dtpqrt(m, n, l, nb int, a []float64, lda int, b []float64, ldb int, t []float64, ldt int, work []float64) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtpqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpqrt.f. +func Ctpqrt(m, n, l, nb int, a []complex64, lda int, b []complex64, ldb int, t []complex64, ldt int, work []complex64) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ctpqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpqrt.f. +func Ztpqrt(m, n, l, nb int, a []complex128, lda int, b []complex128, ldb int, t []complex128, ldt int, work []complex128) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ztpqrt_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (C.lapack_int)(nb), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_work))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpqrt2.f. +func Stpqrt2(m, n, l int, a []float32, lda int, b []float32, ldb int, t []float32, ldt int) bool { + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_stpqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpqrt2.f. +func Dtpqrt2(m, n, l int, a []float64, lda int, b []float64, ldb int, t []float64, ldt int) bool { + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_dtpqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpqrt2.f. +func Ctpqrt2(m, n, l int, a []complex64, lda int, b []complex64, ldb int, t []complex64, ldt int) bool { + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_ctpqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpqrt2.f. +func Ztpqrt2(m, n, l int, a []complex128, lda int, b []complex128, ldb int, t []complex128, ldt int) bool { + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + return isZero(C.LAPACKE_ztpqrt2_work((C.int)(rowMajor), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(l), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stprfb.f. +func Stprfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k, l int, v []float32, ldv int, t []float32, ldt int, a []float32, lda int, b []float32, ldb int, work []float32, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float32 + if len(v) > 0 { + _v = &v[0] + } + var _t *float32 + if len(t) > 0 { + _t = &t[0] + } + var _a *float32 + if len(a) > 0 { + _a = &a[0] + } + var _b *float32 + if len(b) > 0 { + _b = &b[0] + } + var _work *float32 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_stprfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.float)(_v), (C.lapack_int)(ldv), (*C.float)(_t), (C.lapack_int)(ldt), (*C.float)(_a), (C.lapack_int)(lda), (*C.float)(_b), (C.lapack_int)(ldb), (*C.float)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtprfb.f. +func Dtprfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k, l int, v []float64, ldv int, t []float64, ldt int, a []float64, lda int, b []float64, ldb int, work []float64, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *float64 + if len(v) > 0 { + _v = &v[0] + } + var _t *float64 + if len(t) > 0 { + _t = &t[0] + } + var _a *float64 + if len(a) > 0 { + _a = &a[0] + } + var _b *float64 + if len(b) > 0 { + _b = &b[0] + } + var _work *float64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_dtprfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.double)(_v), (C.lapack_int)(ldv), (*C.double)(_t), (C.lapack_int)(ldt), (*C.double)(_a), (C.lapack_int)(lda), (*C.double)(_b), (C.lapack_int)(ldb), (*C.double)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctprfb.f. +func Ctprfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k, l int, v []complex64, ldv int, t []complex64, ldt int, a []complex64, lda int, b []complex64, ldb int, work []complex64, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex64 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex64 + if len(t) > 0 { + _t = &t[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex64 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex64 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ctprfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_float)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_float)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda), (*C.lapack_complex_float)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_float)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztprfb.f. +func Ztprfb(side blas.Side, trans blas.Transpose, direct, storev byte, m, n, k, l int, v []complex128, ldv int, t []complex128, ldt int, a []complex128, lda int, b []complex128, ldb int, work []complex128, ldwork int) bool { + switch side { + case blas.Left: + side = 'L' + case blas.Right: + side = 'R' + default: + panic("lapack: bad side") + } + switch trans { + case blas.NoTrans: + trans = 'N' + case blas.Trans: + trans = 'T' + case blas.ConjTrans: + trans = 'C' + default: + panic("lapack: bad trans") + } + var _v *complex128 + if len(v) > 0 { + _v = &v[0] + } + var _t *complex128 + if len(t) > 0 { + _t = &t[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + var _b *complex128 + if len(b) > 0 { + _b = &b[0] + } + var _work *complex128 + if len(work) > 0 { + _work = &work[0] + } + return isZero(C.LAPACKE_ztprfb_work((C.int)(rowMajor), (C.char)(side), (C.char)(trans), (C.char)(direct), (C.char)(storev), (C.lapack_int)(m), (C.lapack_int)(n), (C.lapack_int)(k), (C.lapack_int)(l), (*C.lapack_complex_double)(_v), (C.lapack_int)(ldv), (*C.lapack_complex_double)(_t), (C.lapack_int)(ldt), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda), (*C.lapack_complex_double)(_b), (C.lapack_int)(ldb), (*C.lapack_complex_double)(_work), (C.lapack_int)(ldwork))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyr.f. +func Csyr(ul blas.Uplo, n int, alpha complex64, x []complex64, incx int, a []complex64, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _x *complex64 + if len(x) > 0 { + _x = &x[0] + } + var _a *complex64 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_csyr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_complex_float)(alpha), (*C.lapack_complex_float)(_x), (C.lapack_int)(incx), (*C.lapack_complex_float)(_a), (C.lapack_int)(lda))) +} + +// See http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyr.f. +func Zsyr(ul blas.Uplo, n int, alpha complex128, x []complex128, incx int, a []complex128, lda int) bool { + switch ul { + case blas.Upper: + ul = 'U' + case blas.Lower: + ul = 'L' + default: + panic("lapack: illegal triangle") + } + var _x *complex128 + if len(x) > 0 { + _x = &x[0] + } + var _a *complex128 + if len(a) > 0 { + _a = &a[0] + } + return isZero(C.LAPACKE_zsyr_work((C.int)(rowMajor), (C.char)(ul), (C.lapack_int)(n), (C.lapack_complex_double)(alpha), (*C.lapack_complex_double)(_x), (C.lapack_int)(incx), (*C.lapack_complex_double)(_a), (C.lapack_int)(lda))) +} diff --git a/lapack/cgo/lapacke/lapacke.h b/lapack/cgo/lapacke/lapacke.h new file mode 100644 index 00000000..03c33213 --- /dev/null +++ b/lapack/cgo/lapacke/lapacke.h @@ -0,0 +1,17553 @@ +/***************************************************************************** + Copyright (c) 2014, Intel Corp. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************** +* Contents: Native C interface to LAPACK +* Author: Intel Corporation +* Generated August, 2015 +*****************************************************************************/ + +#ifndef _LAPACKE_H_ +#define _LAPACKE_H_ + +/* +* Turn on HAVE_LAPACK_CONFIG_H to redefine C-LAPACK datatypes +*/ +#ifdef HAVE_LAPACK_CONFIG_H +#include "lapacke_config.h" +#endif + +#include + +#ifndef lapack_int +#define lapack_int int +#endif + +#ifndef lapack_logical +#define lapack_logical lapack_int +#endif + +/* Complex types are structures equivalent to the +* Fortran complex types COMPLEX(4) and COMPLEX(8). +* +* One can also redefine the types with his own types +* for example by including in the code definitions like +* +* #define lapack_complex_float std::complex +* #define lapack_complex_double std::complex +* +* or define these types in the command line: +* +* -Dlapack_complex_float="std::complex" +* -Dlapack_complex_double="std::complex" +*/ + +#ifndef LAPACK_COMPLEX_CUSTOM + +/* Complex type (single precision) */ +#ifndef lapack_complex_float +#include +#define lapack_complex_float float _Complex +#endif + +#ifndef lapack_complex_float_real +#define lapack_complex_float_real(z) (creal(z)) +#endif + +#ifndef lapack_complex_float_imag +#define lapack_complex_float_imag(z) (cimag(z)) +#endif + +lapack_complex_float lapack_make_complex_float( float re, float im ); + +/* Complex type (double precision) */ +#ifndef lapack_complex_double +#include +#define lapack_complex_double double _Complex +#endif + +#ifndef lapack_complex_double_real +#define lapack_complex_double_real(z) (creal(z)) +#endif + +#ifndef lapack_complex_double_imag +#define lapack_complex_double_imag(z) (cimag(z)) +#endif + +lapack_complex_double lapack_make_complex_double( double re, double im ); + +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef LAPACKE_malloc +#define LAPACKE_malloc( size ) malloc( size ) +#endif +#ifndef LAPACKE_free +#define LAPACKE_free( p ) free( p ) +#endif + +#define LAPACK_C2INT( x ) (lapack_int)(*((float*)&x )) +#define LAPACK_Z2INT( x ) (lapack_int)(*((double*)&x )) + +#define LAPACK_ROW_MAJOR 101 +#define LAPACK_COL_MAJOR 102 + +#define LAPACK_WORK_MEMORY_ERROR -1010 +#define LAPACK_TRANSPOSE_MEMORY_ERROR -1011 + +/* Callback logical functions of one, two, or three arguments are used +* to select eigenvalues to sort to the top left of the Schur form. +* The value is selected if function returns TRUE (non-zero). */ + +typedef lapack_logical (*LAPACK_S_SELECT2) ( const float*, const float* ); +typedef lapack_logical (*LAPACK_S_SELECT3) + ( const float*, const float*, const float* ); +typedef lapack_logical (*LAPACK_D_SELECT2) ( const double*, const double* ); +typedef lapack_logical (*LAPACK_D_SELECT3) + ( const double*, const double*, const double* ); + +typedef lapack_logical (*LAPACK_C_SELECT1) ( const lapack_complex_float* ); +typedef lapack_logical (*LAPACK_C_SELECT2) + ( const lapack_complex_float*, const lapack_complex_float* ); +typedef lapack_logical (*LAPACK_Z_SELECT1) ( const lapack_complex_double* ); +typedef lapack_logical (*LAPACK_Z_SELECT2) + ( const lapack_complex_double*, const lapack_complex_double* ); + +#include "lapacke_mangling.h" + +#define LAPACK_lsame LAPACK_GLOBAL(lsame,LSAME) +lapack_logical LAPACK_lsame( char* ca, char* cb, + lapack_int lca, lapack_int lcb ); + +/* C-LAPACK function prototypes */ + +lapack_int LAPACKE_sbdsdc( int matrix_layout, char uplo, char compq, + lapack_int n, float* d, float* e, float* u, + lapack_int ldu, float* vt, lapack_int ldvt, float* q, + lapack_int* iq ); +lapack_int LAPACKE_dbdsdc( int matrix_layout, char uplo, char compq, + lapack_int n, double* d, double* e, double* u, + lapack_int ldu, double* vt, lapack_int ldvt, + double* q, lapack_int* iq ); + +lapack_int LAPACKE_sbdsqr( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + float* d, float* e, float* vt, lapack_int ldvt, + float* u, lapack_int ldu, float* c, lapack_int ldc ); +lapack_int LAPACKE_dbdsqr( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + double* d, double* e, double* vt, lapack_int ldvt, + double* u, lapack_int ldu, double* c, + lapack_int ldc ); +lapack_int LAPACKE_cbdsqr( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + float* d, float* e, lapack_complex_float* vt, + lapack_int ldvt, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* c, + lapack_int ldc ); +lapack_int LAPACKE_zbdsqr( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + double* d, double* e, lapack_complex_double* vt, + lapack_int ldvt, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* c, + lapack_int ldc ); +lapack_int LAPACKE_sbdsvdx( int matrix_layout, char uplo, char jobz, char range, + lapack_int n, float* d, float* e, + lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, float* z, lapack_int ldz, + lapack_int* superb ); +lapack_int LAPACKE_dbdsvdx( int matrix_layout, char uplo, char jobz, char range, + lapack_int n, double* d, double* e, + lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, double* z, lapack_int ldz, + lapack_int* superb ); +lapack_int LAPACKE_sdisna( char job, lapack_int m, lapack_int n, const float* d, + float* sep ); +lapack_int LAPACKE_ddisna( char job, lapack_int m, lapack_int n, + const double* d, double* sep ); + +lapack_int LAPACKE_sgbbrd( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, float* ab, lapack_int ldab, float* d, + float* e, float* q, lapack_int ldq, float* pt, + lapack_int ldpt, float* c, lapack_int ldc ); +lapack_int LAPACKE_dgbbrd( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, double* ab, lapack_int ldab, + double* d, double* e, double* q, lapack_int ldq, + double* pt, lapack_int ldpt, double* c, + lapack_int ldc ); +lapack_int LAPACKE_cgbbrd( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, lapack_complex_float* ab, + lapack_int ldab, float* d, float* e, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* pt, lapack_int ldpt, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zgbbrd( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, lapack_complex_double* ab, + lapack_int ldab, double* d, double* e, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* pt, lapack_int ldpt, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_sgbcon( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, const lapack_int* ipiv, float anorm, + float* rcond ); +lapack_int LAPACKE_dgbcon( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, const lapack_int* ipiv, + double anorm, double* rcond ); +lapack_int LAPACKE_cgbcon( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zgbcon( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, lapack_int ldab, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_sgbequ( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, float* r, float* c, float* rowcnd, + float* colcnd, float* amax ); +lapack_int LAPACKE_dgbequ( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); +lapack_int LAPACKE_cgbequ( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, lapack_int ldab, + float* r, float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_zgbequ( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, lapack_int ldab, + double* r, double* c, double* rowcnd, double* colcnd, + double* amax ); + +lapack_int LAPACKE_sgbequb( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, float* r, float* c, float* rowcnd, + float* colcnd, float* amax ); +lapack_int LAPACKE_dgbequb( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); +lapack_int LAPACKE_cgbequb( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, lapack_int ldab, + float* r, float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_zgbequb( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, lapack_int ldab, + double* r, double* c, double* rowcnd, + double* colcnd, double* amax ); + +lapack_int LAPACKE_sgbrfs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const float* ab, lapack_int ldab, const float* afb, + lapack_int ldafb, const lapack_int* ipiv, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_dgbrfs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const double* ab, lapack_int ldab, const double* afb, + lapack_int ldafb, const lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr ); +lapack_int LAPACKE_cgbrfs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* afb, lapack_int ldafb, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zgbrfs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + const lapack_complex_double* afb, lapack_int ldafb, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sgbrfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const float* ab, lapack_int ldab, + const float* afb, lapack_int ldafb, + const lapack_int* ipiv, const float* r, + const float* c, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dgbrfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const double* ab, lapack_int ldab, + const double* afb, lapack_int ldafb, + const lapack_int* ipiv, const double* r, + const double* c, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); +lapack_int LAPACKE_cgbrfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const lapack_complex_float* ab, + lapack_int ldab, const lapack_complex_float* afb, + lapack_int ldafb, const lapack_int* ipiv, + const float* r, const float* c, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_zgbrfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const lapack_complex_double* ab, + lapack_int ldab, const lapack_complex_double* afb, + lapack_int ldafb, const lapack_int* ipiv, + const double* r, const double* c, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); + +lapack_int LAPACKE_sgbsv( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, float* ab, + lapack_int ldab, lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgbsv( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, double* ab, + lapack_int ldab, lapack_int* ipiv, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cgbsv( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgbsv( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sgbsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, float* ab, lapack_int ldab, + float* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, float* r, float* c, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* rpivot ); +lapack_int LAPACKE_dgbsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, double* ab, lapack_int ldab, + double* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, double* r, double* c, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* rpivot ); +lapack_int LAPACKE_cgbsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + float* r, float* c, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, float* rpivot ); +lapack_int LAPACKE_zgbsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + double* r, double* c, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, double* rpivot ); + +lapack_int LAPACKE_sgbsvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, float* ab, lapack_int ldab, + float* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, float* r, float* c, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dgbsvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, double* ab, lapack_int ldab, + double* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, double* r, double* c, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); +lapack_int LAPACKE_cgbsvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + float* r, float* c, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_zgbsvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + double* r, double* c, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); + +lapack_int LAPACKE_sgbtrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, float* ab, + lapack_int ldab, lapack_int* ipiv ); +lapack_int LAPACKE_dgbtrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, double* ab, + lapack_int ldab, lapack_int* ipiv ); +lapack_int LAPACKE_cgbtrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + lapack_complex_float* ab, lapack_int ldab, + lapack_int* ipiv ); +lapack_int LAPACKE_zgbtrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + lapack_complex_double* ab, lapack_int ldab, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgbtrs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const float* ab, lapack_int ldab, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dgbtrs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const double* ab, lapack_int ldab, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_cgbtrs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgbtrs( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sgebak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const float* scale, + lapack_int m, float* v, lapack_int ldv ); +lapack_int LAPACKE_dgebak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const double* scale, + lapack_int m, double* v, lapack_int ldv ); +lapack_int LAPACKE_cgebak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const float* scale, + lapack_int m, lapack_complex_float* v, + lapack_int ldv ); +lapack_int LAPACKE_zgebak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const double* scale, + lapack_int m, lapack_complex_double* v, + lapack_int ldv ); + +lapack_int LAPACKE_sgebal( int matrix_layout, char job, lapack_int n, float* a, + lapack_int lda, lapack_int* ilo, lapack_int* ihi, + float* scale ); +lapack_int LAPACKE_dgebal( int matrix_layout, char job, lapack_int n, double* a, + lapack_int lda, lapack_int* ilo, lapack_int* ihi, + double* scale ); +lapack_int LAPACKE_cgebal( int matrix_layout, char job, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ilo, lapack_int* ihi, float* scale ); +lapack_int LAPACKE_zgebal( int matrix_layout, char job, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ilo, lapack_int* ihi, double* scale ); + +lapack_int LAPACKE_sgebrd( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* d, float* e, + float* tauq, float* taup ); +lapack_int LAPACKE_dgebrd( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* d, double* e, + double* tauq, double* taup ); +lapack_int LAPACKE_cgebrd( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, float* d, + float* e, lapack_complex_float* tauq, + lapack_complex_float* taup ); +lapack_int LAPACKE_zgebrd( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, double* d, + double* e, lapack_complex_double* tauq, + lapack_complex_double* taup ); + +lapack_int LAPACKE_sgecon( int matrix_layout, char norm, lapack_int n, + const float* a, lapack_int lda, float anorm, + float* rcond ); +lapack_int LAPACKE_dgecon( int matrix_layout, char norm, lapack_int n, + const double* a, lapack_int lda, double anorm, + double* rcond ); +lapack_int LAPACKE_cgecon( int matrix_layout, char norm, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float anorm, float* rcond ); +lapack_int LAPACKE_zgecon( int matrix_layout, char norm, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double anorm, double* rcond ); + +lapack_int LAPACKE_sgeequ( int matrix_layout, lapack_int m, lapack_int n, + const float* a, lapack_int lda, float* r, float* c, + float* rowcnd, float* colcnd, float* amax ); +lapack_int LAPACKE_dgeequ( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, double* r, + double* c, double* rowcnd, double* colcnd, + double* amax ); +lapack_int LAPACKE_cgeequ( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* r, float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_zgeequ( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* r, double* c, double* rowcnd, double* colcnd, + double* amax ); + +lapack_int LAPACKE_sgeequb( int matrix_layout, lapack_int m, lapack_int n, + const float* a, lapack_int lda, float* r, float* c, + float* rowcnd, float* colcnd, float* amax ); +lapack_int LAPACKE_dgeequb( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, double* r, + double* c, double* rowcnd, double* colcnd, + double* amax ); +lapack_int LAPACKE_cgeequb( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* r, float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_zgeequb( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* r, double* c, double* rowcnd, + double* colcnd, double* amax ); + +lapack_int LAPACKE_sgees( int matrix_layout, char jobvs, char sort, + LAPACK_S_SELECT2 select, lapack_int n, float* a, + lapack_int lda, lapack_int* sdim, float* wr, + float* wi, float* vs, lapack_int ldvs ); +lapack_int LAPACKE_dgees( int matrix_layout, char jobvs, char sort, + LAPACK_D_SELECT2 select, lapack_int n, double* a, + lapack_int lda, lapack_int* sdim, double* wr, + double* wi, double* vs, lapack_int ldvs ); +lapack_int LAPACKE_cgees( int matrix_layout, char jobvs, char sort, + LAPACK_C_SELECT1 select, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* sdim, lapack_complex_float* w, + lapack_complex_float* vs, lapack_int ldvs ); +lapack_int LAPACKE_zgees( int matrix_layout, char jobvs, char sort, + LAPACK_Z_SELECT1 select, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* sdim, lapack_complex_double* w, + lapack_complex_double* vs, lapack_int ldvs ); + +lapack_int LAPACKE_sgeesx( int matrix_layout, char jobvs, char sort, + LAPACK_S_SELECT2 select, char sense, lapack_int n, + float* a, lapack_int lda, lapack_int* sdim, + float* wr, float* wi, float* vs, lapack_int ldvs, + float* rconde, float* rcondv ); +lapack_int LAPACKE_dgeesx( int matrix_layout, char jobvs, char sort, + LAPACK_D_SELECT2 select, char sense, lapack_int n, + double* a, lapack_int lda, lapack_int* sdim, + double* wr, double* wi, double* vs, lapack_int ldvs, + double* rconde, double* rcondv ); +lapack_int LAPACKE_cgeesx( int matrix_layout, char jobvs, char sort, + LAPACK_C_SELECT1 select, char sense, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* sdim, lapack_complex_float* w, + lapack_complex_float* vs, lapack_int ldvs, + float* rconde, float* rcondv ); +lapack_int LAPACKE_zgeesx( int matrix_layout, char jobvs, char sort, + LAPACK_Z_SELECT1 select, char sense, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* sdim, lapack_complex_double* w, + lapack_complex_double* vs, lapack_int ldvs, + double* rconde, double* rcondv ); + +lapack_int LAPACKE_sgeev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, float* a, lapack_int lda, float* wr, + float* wi, float* vl, lapack_int ldvl, float* vr, + lapack_int ldvr ); +lapack_int LAPACKE_dgeev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, double* a, lapack_int lda, double* wr, + double* wi, double* vl, lapack_int ldvl, double* vr, + lapack_int ldvr ); +lapack_int LAPACKE_cgeev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_float* a, lapack_int lda, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int ldvl, lapack_complex_float* vr, + lapack_int ldvr ); +lapack_int LAPACKE_zgeev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* w, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr ); + +lapack_int LAPACKE_sgeevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, float* a, + lapack_int lda, float* wr, float* wi, float* vl, + lapack_int ldvl, float* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, float* scale, + float* abnrm, float* rconde, float* rcondv ); +lapack_int LAPACKE_dgeevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, double* a, + lapack_int lda, double* wr, double* wi, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, double* scale, + double* abnrm, double* rconde, double* rcondv ); +lapack_int LAPACKE_cgeevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int ldvl, lapack_complex_float* vr, + lapack_int ldvr, lapack_int* ilo, lapack_int* ihi, + float* scale, float* abnrm, float* rconde, + float* rcondv ); +lapack_int LAPACKE_zgeevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* w, lapack_complex_double* vl, + lapack_int ldvl, lapack_complex_double* vr, + lapack_int ldvr, lapack_int* ilo, lapack_int* ihi, + double* scale, double* abnrm, double* rconde, + double* rcondv ); + +lapack_int LAPACKE_sgehrd( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, float* a, lapack_int lda, + float* tau ); +lapack_int LAPACKE_dgehrd( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, double* a, lapack_int lda, + double* tau ); +lapack_int LAPACKE_cgehrd( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* tau ); +lapack_int LAPACKE_zgehrd( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* tau ); + +lapack_int LAPACKE_sgejsv( int matrix_layout, char joba, char jobu, char jobv, + char jobr, char jobt, char jobp, lapack_int m, + lapack_int n, float* a, lapack_int lda, float* sva, + float* u, lapack_int ldu, float* v, lapack_int ldv, + float* stat, lapack_int* istat ); +lapack_int LAPACKE_dgejsv( int matrix_layout, char joba, char jobu, char jobv, + char jobr, char jobt, char jobp, lapack_int m, + lapack_int n, double* a, lapack_int lda, double* sva, + double* u, lapack_int ldu, double* v, lapack_int ldv, + double* stat, lapack_int* istat ); +lapack_int LAPACKE_cgejsv( int matrix_layout, char joba, char jobu, char jobv, + char jobr, char jobt, char jobp, lapack_int m, + lapack_int n, lapack_complex_float* a, lapack_int lda, float* sva, + lapack_complex_float* u, lapack_int ldu, lapack_complex_float* v, lapack_int ldv, + float* stat, lapack_int* istat ); +lapack_int LAPACKE_zgejsv( int matrix_layout, char joba, char jobu, char jobv, + char jobr, char jobt, char jobp, lapack_int m, + lapack_int n, lapack_complex_double* a, lapack_int lda, double* sva, + lapack_complex_double* u, lapack_int ldu, lapack_complex_double* v, lapack_int ldv, + double* stat, lapack_int* istat ); + +lapack_int LAPACKE_sgelq2( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgelq2( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgelq2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgelq2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgelqf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgelqf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgelqf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgelqf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgels( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* b, lapack_int ldb ); +lapack_int LAPACKE_dgels( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* b, lapack_int ldb ); +lapack_int LAPACKE_cgels( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zgels( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sgelsd( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_dgelsd( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* s, double rcond, + lapack_int* rank ); +lapack_int LAPACKE_cgelsd( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_zgelsd( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* s, double rcond, + lapack_int* rank ); + +lapack_int LAPACKE_sgelss( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_dgelss( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* s, double rcond, + lapack_int* rank ); +lapack_int LAPACKE_cgelss( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_zgelss( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* s, double rcond, + lapack_int* rank ); + +lapack_int LAPACKE_sgelsy( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, float* b, + lapack_int ldb, lapack_int* jpvt, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_dgelsy( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, lapack_int* jpvt, + double rcond, lapack_int* rank ); +lapack_int LAPACKE_cgelsy( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_int* jpvt, float rcond, + lapack_int* rank ); +lapack_int LAPACKE_zgelsy( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_int* jpvt, double rcond, + lapack_int* rank ); + +lapack_int LAPACKE_sgeqlf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgeqlf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgeqlf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqlf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgeqp3( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* jpvt, + float* tau ); +lapack_int LAPACKE_dgeqp3( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* jpvt, + double* tau ); +lapack_int LAPACKE_cgeqp3( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqp3( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_double* tau ); + +lapack_int LAPACKE_sgeqpf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* jpvt, + float* tau ); +lapack_int LAPACKE_dgeqpf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* jpvt, + double* tau ); +lapack_int LAPACKE_cgeqpf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqpf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_double* tau ); + +lapack_int LAPACKE_sgeqr2( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgeqr2( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgeqr2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqr2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgeqrf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgeqrf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgeqrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgeqrfp( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgeqrfp( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgeqrfp( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgeqrfp( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgerfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dgerfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr ); +lapack_int LAPACKE_cgerfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zgerfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sgerfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* r, + const float* c, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dgerfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* r, + const double* c, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); +lapack_int LAPACKE_cgerfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* r, + const float* c, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_zgerfsx( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* r, + const double* c, const lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); + +lapack_int LAPACKE_sgerqf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dgerqf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_cgerqf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_zgerqf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_sgesdd( int matrix_layout, char jobz, lapack_int m, + lapack_int n, float* a, lapack_int lda, float* s, + float* u, lapack_int ldu, float* vt, + lapack_int ldvt ); +lapack_int LAPACKE_dgesdd( int matrix_layout, char jobz, lapack_int m, + lapack_int n, double* a, lapack_int lda, double* s, + double* u, lapack_int ldu, double* vt, + lapack_int ldvt ); +lapack_int LAPACKE_cgesdd( int matrix_layout, char jobz, lapack_int m, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float* s, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* vt, + lapack_int ldvt ); +lapack_int LAPACKE_zgesdd( int matrix_layout, char jobz, lapack_int m, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double* s, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* vt, + lapack_int ldvt ); + +lapack_int LAPACKE_sgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + float* a, lapack_int lda, lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + double* a, lapack_int lda, lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); +lapack_int LAPACKE_dsgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + double* a, lapack_int lda, lapack_int* ipiv, + double* b, lapack_int ldb, double* x, lapack_int ldx, + lapack_int* iter ); +lapack_int LAPACKE_zcgesv( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, lapack_int* iter ); + +lapack_int LAPACKE_sgesvd( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, float* a, lapack_int lda, + float* s, float* u, lapack_int ldu, float* vt, + lapack_int ldvt, float* superb ); +lapack_int LAPACKE_dgesvd( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, double* a, + lapack_int lda, double* s, double* u, lapack_int ldu, + double* vt, lapack_int ldvt, double* superb ); +lapack_int LAPACKE_cgesvd( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, float* s, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* vt, + lapack_int ldvt, float* superb ); +lapack_int LAPACKE_zgesvd( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda, double* s, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* vt, + lapack_int ldvt, double* superb ); + +lapack_int LAPACKE_sgesvdx( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, float* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, float* u, lapack_int ldu, + float* vt, lapack_int ldvt, + lapack_int* superb ); +lapack_int LAPACKE_dgesvdx( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, double* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, double* u, lapack_int ldu, + double* vt, lapack_int ldvt, + lapack_int* superb ); +lapack_int LAPACKE_cgesvdx( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* vt, lapack_int ldvt, + lapack_int* superb ); +lapack_int LAPACKE_zgesvdx( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* vt, lapack_int ldvt, + lapack_int* superb ); + +lapack_int LAPACKE_sgesvj( int matrix_layout, char joba, char jobu, char jobv, + lapack_int m, lapack_int n, float* a, lapack_int lda, + float* sva, lapack_int mv, float* v, lapack_int ldv, + float* stat ); +lapack_int LAPACKE_dgesvj( int matrix_layout, char joba, char jobu, char jobv, + lapack_int m, lapack_int n, double* a, + lapack_int lda, double* sva, lapack_int mv, + double* v, lapack_int ldv, double* stat ); +lapack_int LAPACKE_cgesvj( int matrix_layout, char joba, char jobu, char jobv, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, float* sva, lapack_int mv, + lapack_complex_float* v, lapack_int ldv, float* stat ); +lapack_int LAPACKE_zgesvj( int matrix_layout, char joba, char jobu, char jobv, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda, double* sva, lapack_int mv, + lapack_complex_double* v, lapack_int ldv, double* stat ); + +lapack_int LAPACKE_sgesvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + float* b, lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* rpivot ); +lapack_int LAPACKE_dgesvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* rpivot ); +lapack_int LAPACKE_cgesvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* rpivot ); +lapack_int LAPACKE_zgesvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* rpivot ); + +lapack_int LAPACKE_sgesvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + float* b, lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dgesvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); +lapack_int LAPACKE_cgesvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_zgesvxx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); + +lapack_int LAPACKE_sgetf2( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetf2( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetf2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetf2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetrf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetrf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetrf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetrf2( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetrf2( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetrf2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetrf2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetri( int matrix_layout, lapack_int n, float* a, + lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_dgetri( int matrix_layout, lapack_int n, double* a, + lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_cgetri( int matrix_layout, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_zgetri( int matrix_layout, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv ); + +lapack_int LAPACKE_sgetrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dgetrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_cgetrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zgetrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sggbak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const float* lscale, + const float* rscale, lapack_int m, float* v, + lapack_int ldv ); +lapack_int LAPACKE_dggbak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const double* lscale, + const double* rscale, lapack_int m, double* v, + lapack_int ldv ); +lapack_int LAPACKE_cggbak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const float* lscale, + const float* rscale, lapack_int m, + lapack_complex_float* v, lapack_int ldv ); +lapack_int LAPACKE_zggbak( int matrix_layout, char job, char side, lapack_int n, + lapack_int ilo, lapack_int ihi, const double* lscale, + const double* rscale, lapack_int m, + lapack_complex_double* v, lapack_int ldv ); + +lapack_int LAPACKE_sggbal( int matrix_layout, char job, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale ); +lapack_int LAPACKE_dggbal( int matrix_layout, char job, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, double* lscale, + double* rscale ); +lapack_int LAPACKE_cggbal( int matrix_layout, char job, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale ); +lapack_int LAPACKE_zggbal( int matrix_layout, char job, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, double* lscale, + double* rscale ); + +lapack_int LAPACKE_sgges( int matrix_layout, char jobvsl, char jobvsr, char sort, + LAPACK_S_SELECT3 selctg, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + lapack_int* sdim, float* alphar, float* alphai, + float* beta, float* vsl, lapack_int ldvsl, float* vsr, + lapack_int ldvsr ); +lapack_int LAPACKE_dgges( int matrix_layout, char jobvsl, char jobvsr, char sort, + LAPACK_D_SELECT3 selctg, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + lapack_int* sdim, double* alphar, double* alphai, + double* beta, double* vsl, lapack_int ldvsl, + double* vsr, lapack_int ldvsr ); +lapack_int LAPACKE_cgges( int matrix_layout, char jobvsl, char jobvsr, char sort, + LAPACK_C_SELECT2 selctg, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_float* alpha, + lapack_complex_float* beta, lapack_complex_float* vsl, + lapack_int ldvsl, lapack_complex_float* vsr, + lapack_int ldvsr ); +lapack_int LAPACKE_zgges( int matrix_layout, char jobvsl, char jobvsr, char sort, + LAPACK_Z_SELECT2 selctg, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr ); + +lapack_int LAPACKE_sgges3( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_S_SELECT3 selctg, lapack_int n, + float* a, lapack_int lda, float* b, lapack_int ldb, + lapack_int* sdim, float* alphar, float* alphai, + float* beta, float* vsl, lapack_int ldvsl, + float* vsr, lapack_int ldvsr ); +lapack_int LAPACKE_dgges3( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_D_SELECT3 selctg, lapack_int n, + double* a, lapack_int lda, double* b, lapack_int ldb, + lapack_int* sdim, double* alphar, double* alphai, + double* beta, double* vsl, lapack_int ldvsl, + double* vsr, lapack_int ldvsr ); +lapack_int LAPACKE_cgges3( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_C_SELECT2 selctg, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int ldvsl, + lapack_complex_float* vsr, lapack_int ldvsr ); +lapack_int LAPACKE_zgges3( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr ); + +lapack_int LAPACKE_sggesx( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_S_SELECT3 selctg, char sense, + lapack_int n, float* a, lapack_int lda, float* b, + lapack_int ldb, lapack_int* sdim, float* alphar, + float* alphai, float* beta, float* vsl, + lapack_int ldvsl, float* vsr, lapack_int ldvsr, + float* rconde, float* rcondv ); +lapack_int LAPACKE_dggesx( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_D_SELECT3 selctg, char sense, + lapack_int n, double* a, lapack_int lda, double* b, + lapack_int ldb, lapack_int* sdim, double* alphar, + double* alphai, double* beta, double* vsl, + lapack_int ldvsl, double* vsr, lapack_int ldvsr, + double* rconde, double* rcondv ); +lapack_int LAPACKE_cggesx( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_C_SELECT2 selctg, char sense, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_int* sdim, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int ldvsl, + lapack_complex_float* vsr, lapack_int ldvsr, + float* rconde, float* rcondv ); +lapack_int LAPACKE_zggesx( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_Z_SELECT2 selctg, char sense, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_int* sdim, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr, + double* rconde, double* rcondv ); + +lapack_int LAPACKE_sggev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, float* a, lapack_int lda, float* b, + lapack_int ldb, float* alphar, float* alphai, + float* beta, float* vl, lapack_int ldvl, float* vr, + lapack_int ldvr ); +lapack_int LAPACKE_dggev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, double* a, lapack_int lda, double* b, + lapack_int ldb, double* alphar, double* alphai, + double* beta, double* vl, lapack_int ldvl, double* vr, + lapack_int ldvr ); +lapack_int LAPACKE_cggev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, lapack_complex_float* vl, + lapack_int ldvl, lapack_complex_float* vr, + lapack_int ldvr ); +lapack_int LAPACKE_zggev( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr ); + +lapack_int LAPACKE_sggev3( int matrix_layout, char jobvl, char jobvr, + lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, + float* alphar, float* alphai, float* beta, + float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr ); +lapack_int LAPACKE_dggev3( int matrix_layout, char jobvl, char jobvr, + lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, + double* alphar, double* alphai, double* beta, + double* vl, lapack_int ldvl, + double* vr, lapack_int ldvr ); +lapack_int LAPACKE_cggev3( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr ); +lapack_int LAPACKE_zggev3( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr ); + +lapack_int LAPACKE_sggevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* alphar, float* alphai, float* beta, float* vl, + lapack_int ldvl, float* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale, float* abnrm, float* bbnrm, + float* rconde, float* rcondv ); +lapack_int LAPACKE_dggevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* alphar, double* alphai, double* beta, + double* vl, lapack_int ldvl, double* vr, + lapack_int ldvr, lapack_int* ilo, lapack_int* ihi, + double* lscale, double* rscale, double* abnrm, + double* bbnrm, double* rconde, double* rcondv ); +lapack_int LAPACKE_cggevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, lapack_complex_float* vl, + lapack_int ldvl, lapack_complex_float* vr, + lapack_int ldvr, lapack_int* ilo, lapack_int* ihi, + float* lscale, float* rscale, float* abnrm, + float* bbnrm, float* rconde, float* rcondv ); +lapack_int LAPACKE_zggevx( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, double* lscale, + double* rscale, double* abnrm, double* bbnrm, + double* rconde, double* rcondv ); + +lapack_int LAPACKE_sggglm( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, float* a, lapack_int lda, float* b, + lapack_int ldb, float* d, float* x, float* y ); +lapack_int LAPACKE_dggglm( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, double* a, lapack_int lda, double* b, + lapack_int ldb, double* d, double* x, double* y ); +lapack_int LAPACKE_cggglm( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* d, + lapack_complex_float* x, lapack_complex_float* y ); +lapack_int LAPACKE_zggglm( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* d, + lapack_complex_double* x, lapack_complex_double* y ); + +lapack_int LAPACKE_sgghrd( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* a, lapack_int lda, float* b, lapack_int ldb, + float* q, lapack_int ldq, float* z, lapack_int ldz ); +lapack_int LAPACKE_dgghrd( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* a, lapack_int lda, double* b, lapack_int ldb, + double* q, lapack_int ldq, double* z, + lapack_int ldz ); +lapack_int LAPACKE_cgghrd( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zgghrd( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_sgghd3( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* a, lapack_int lda, float* b, lapack_int ldb, + float* q, lapack_int ldq, float* z, lapack_int ldz ); +lapack_int LAPACKE_dgghd3( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* a, lapack_int lda, double* b, lapack_int ldb, + double* q, lapack_int ldq, double* z, + lapack_int ldz ); +lapack_int LAPACKE_cgghd3( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zgghd3( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_sgglse( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, float* a, lapack_int lda, float* b, + lapack_int ldb, float* c, float* d, float* x ); +lapack_int LAPACKE_dgglse( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, double* a, lapack_int lda, double* b, + lapack_int ldb, double* c, double* d, double* x ); +lapack_int LAPACKE_cgglse( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* c, + lapack_complex_float* d, lapack_complex_float* x ); +lapack_int LAPACKE_zgglse( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* c, + lapack_complex_double* d, lapack_complex_double* x ); + +lapack_int LAPACKE_sggqrf( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, float* a, lapack_int lda, float* taua, + float* b, lapack_int ldb, float* taub ); +lapack_int LAPACKE_dggqrf( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, double* a, lapack_int lda, + double* taua, double* b, lapack_int ldb, + double* taub ); +lapack_int LAPACKE_cggqrf( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* taua, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* taub ); +lapack_int LAPACKE_zggqrf( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* taua, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* taub ); + +lapack_int LAPACKE_sggrqf( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, float* a, lapack_int lda, float* taua, + float* b, lapack_int ldb, float* taub ); +lapack_int LAPACKE_dggrqf( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, double* a, lapack_int lda, + double* taua, double* b, lapack_int ldb, + double* taub ); +lapack_int LAPACKE_cggrqf( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* taua, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* taub ); +lapack_int LAPACKE_zggrqf( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* taua, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* taub ); + +lapack_int LAPACKE_sggsvd( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* alpha, float* beta, float* u, lapack_int ldu, + float* v, lapack_int ldv, float* q, lapack_int ldq, + lapack_int* iwork ); +lapack_int LAPACKE_dggsvd( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* alpha, double* beta, double* u, + lapack_int ldu, double* v, lapack_int ldv, double* q, + lapack_int ldq, lapack_int* iwork ); +lapack_int LAPACKE_cggsvd( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float* alpha, float* beta, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* v, + lapack_int ldv, lapack_complex_float* q, + lapack_int ldq, lapack_int* iwork ); +lapack_int LAPACKE_zggsvd( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* alpha, double* beta, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_int* iwork ); + +lapack_int LAPACKE_sggsvd3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* alpha, float* beta, float* u, lapack_int ldu, + float* v, lapack_int ldv, float* q, lapack_int ldq, + lapack_int* iwork ); +lapack_int LAPACKE_dggsvd3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* alpha, double* beta, double* u, + lapack_int ldu, double* v, lapack_int ldv, double* q, + lapack_int ldq, lapack_int* iwork ); +lapack_int LAPACKE_cggsvd3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float* alpha, float* beta, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* v, + lapack_int ldv, lapack_complex_float* q, + lapack_int ldq, lapack_int* iwork ); +lapack_int LAPACKE_zggsvd3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int n, lapack_int p, + lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* alpha, double* beta, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_int* iwork ); + +lapack_int LAPACKE_sggsvp( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, float* u, + lapack_int ldu, float* v, lapack_int ldv, float* q, + lapack_int ldq ); +lapack_int LAPACKE_dggsvp( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double tola, double tolb, lapack_int* k, + lapack_int* l, double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq ); +lapack_int LAPACKE_cggsvp( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq ); +lapack_int LAPACKE_zggsvp( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double tola, double tolb, lapack_int* k, + lapack_int* l, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* v, + lapack_int ldv, lapack_complex_double* q, + lapack_int ldq ); + +lapack_int LAPACKE_sggsvp3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, float* u, + lapack_int ldu, float* v, lapack_int ldv, float* q, + lapack_int ldq ); +lapack_int LAPACKE_dggsvp3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double tola, double tolb, lapack_int* k, + lapack_int* l, double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq ); +lapack_int LAPACKE_cggsvp3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq ); +lapack_int LAPACKE_zggsvp3( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double tola, double tolb, lapack_int* k, + lapack_int* l, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* v, + lapack_int ldv, lapack_complex_double* q, + lapack_int ldq ); + +lapack_int LAPACKE_sgtcon( char norm, lapack_int n, const float* dl, + const float* d, const float* du, const float* du2, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_dgtcon( char norm, lapack_int n, const double* dl, + const double* d, const double* du, const double* du2, + const lapack_int* ipiv, double anorm, + double* rcond ); +lapack_int LAPACKE_cgtcon( char norm, lapack_int n, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zgtcon( char norm, lapack_int n, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_sgtrfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* dl, const float* d, + const float* du, const float* dlf, const float* df, + const float* duf, const float* du2, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dgtrfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* dl, const double* d, + const double* du, const double* dlf, + const double* df, const double* duf, + const double* du2, const lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr ); +lapack_int LAPACKE_cgtrfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* dlf, + const lapack_complex_float* df, + const lapack_complex_float* duf, + const lapack_complex_float* du2, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zgtrfs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* dlf, + const lapack_complex_double* df, + const lapack_complex_double* duf, + const lapack_complex_double* du2, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sgtsv( int matrix_layout, lapack_int n, lapack_int nrhs, + float* dl, float* d, float* du, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgtsv( int matrix_layout, lapack_int n, lapack_int nrhs, + double* dl, double* d, double* du, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cgtsv( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_float* dl, lapack_complex_float* d, + lapack_complex_float* du, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgtsv( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* dl, lapack_complex_double* d, + lapack_complex_double* du, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sgtsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, const float* dl, + const float* d, const float* du, float* dlf, + float* df, float* duf, float* du2, lapack_int* ipiv, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dgtsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, const double* dl, + const double* d, const double* du, double* dlf, + double* df, double* duf, double* du2, + lapack_int* ipiv, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* ferr, double* berr ); +lapack_int LAPACKE_cgtsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + lapack_complex_float* dlf, lapack_complex_float* df, + lapack_complex_float* duf, lapack_complex_float* du2, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_zgtsvx( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + lapack_complex_double* dlf, + lapack_complex_double* df, + lapack_complex_double* duf, + lapack_complex_double* du2, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_sgttrf( lapack_int n, float* dl, float* d, float* du, + float* du2, lapack_int* ipiv ); +lapack_int LAPACKE_dgttrf( lapack_int n, double* dl, double* d, double* du, + double* du2, lapack_int* ipiv ); +lapack_int LAPACKE_cgttrf( lapack_int n, lapack_complex_float* dl, + lapack_complex_float* d, lapack_complex_float* du, + lapack_complex_float* du2, lapack_int* ipiv ); +lapack_int LAPACKE_zgttrf( lapack_int n, lapack_complex_double* dl, + lapack_complex_double* d, lapack_complex_double* du, + lapack_complex_double* du2, lapack_int* ipiv ); + +lapack_int LAPACKE_sgttrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* dl, const float* d, + const float* du, const float* du2, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dgttrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* dl, const double* d, + const double* du, const double* du2, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_cgttrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgttrs( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_chbev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, lapack_complex_float* ab, + lapack_int ldab, float* w, lapack_complex_float* z, + lapack_int ldz ); +lapack_int LAPACKE_zhbev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, lapack_complex_double* ab, + lapack_int ldab, double* w, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_chbevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, lapack_complex_float* ab, + lapack_int ldab, float* w, lapack_complex_float* z, + lapack_int ldz ); +lapack_int LAPACKE_zhbevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, lapack_complex_double* ab, + lapack_int ldab, double* w, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_chbevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* q, lapack_int ldq, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* ifail ); +lapack_int LAPACKE_zhbevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* q, lapack_int ldq, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_chbgst( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* bb, lapack_int ldbb, + lapack_complex_float* x, lapack_int ldx ); +lapack_int LAPACKE_zhbgst( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + const lapack_complex_double* bb, lapack_int ldbb, + lapack_complex_double* x, lapack_int ldx ); + +lapack_int LAPACKE_chbgv( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* bb, lapack_int ldbb, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhbgv( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* bb, lapack_int ldbb, double* w, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chbgvd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* bb, lapack_int ldbb, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhbgvd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* bb, lapack_int ldbb, + double* w, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_chbgvx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* bb, lapack_int ldbb, + lapack_complex_float* q, lapack_int ldq, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* ifail ); +lapack_int LAPACKE_zhbgvx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* bb, lapack_int ldbb, + lapack_complex_double* q, lapack_int ldq, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_chbtrd( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int kd, lapack_complex_float* ab, + lapack_int ldab, float* d, float* e, + lapack_complex_float* q, lapack_int ldq ); +lapack_int LAPACKE_zhbtrd( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int kd, lapack_complex_double* ab, + lapack_int ldab, double* d, double* e, + lapack_complex_double* q, lapack_int ldq ); + +lapack_int LAPACKE_checon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zhecon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_cheequb( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zheequb( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_cheev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, float* w ); +lapack_int LAPACKE_zheev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, double* w ); + +lapack_int LAPACKE_cheevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, float* w ); +lapack_int LAPACKE_zheevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double* w ); + +lapack_int LAPACKE_cheevr( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_int* isuppz ); +lapack_int LAPACKE_zheevr( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, lapack_int ldz, + lapack_int* isuppz ); + +lapack_int LAPACKE_cheevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_zheevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_chegst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhegst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_chegv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* w ); +lapack_int LAPACKE_zhegv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* w ); + +lapack_int LAPACKE_chegvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* w ); +lapack_int LAPACKE_zhegvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* w ); + +lapack_int LAPACKE_chegvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* ifail ); +lapack_int LAPACKE_zhegvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_cherfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zherfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_cherfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* s, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_zherfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* s, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); + +lapack_int LAPACKE_chesv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zhesv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chesvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* af, + lapack_int ldaf, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zhesvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* af, + lapack_int ldaf, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_chesvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_zhesvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); + +lapack_int LAPACKE_chetrd( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, float* d, + float* e, lapack_complex_float* tau ); +lapack_int LAPACKE_zhetrd( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, double* d, + double* e, lapack_complex_double* tau ); + +lapack_int LAPACKE_chetrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zhetrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_chetri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_zhetri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv ); + +lapack_int LAPACKE_chetrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zhetrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chfrk( int matrix_layout, char transr, char uplo, char trans, + lapack_int n, lapack_int k, float alpha, + const lapack_complex_float* a, lapack_int lda, + float beta, lapack_complex_float* c ); +lapack_int LAPACKE_zhfrk( int matrix_layout, char transr, char uplo, char trans, + lapack_int n, lapack_int k, double alpha, + const lapack_complex_double* a, lapack_int lda, + double beta, lapack_complex_double* c ); + +lapack_int LAPACKE_shgeqz( int matrix_layout, char job, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* h, lapack_int ldh, float* t, lapack_int ldt, + float* alphar, float* alphai, float* beta, float* q, + lapack_int ldq, float* z, lapack_int ldz ); +lapack_int LAPACKE_dhgeqz( int matrix_layout, char job, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* h, lapack_int ldh, double* t, lapack_int ldt, + double* alphar, double* alphai, double* beta, + double* q, lapack_int ldq, double* z, + lapack_int ldz ); +lapack_int LAPACKE_chgeqz( int matrix_layout, char job, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* h, lapack_int ldh, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* alpha, + lapack_complex_float* beta, lapack_complex_float* q, + lapack_int ldq, lapack_complex_float* z, + lapack_int ldz ); +lapack_int LAPACKE_zhgeqz( int matrix_layout, char job, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* h, lapack_int ldh, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chpcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zhpcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_chpev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_float* ap, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhpev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_double* ap, double* w, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chpevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_float* ap, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhpevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_complex_double* ap, double* w, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chpevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_float* ap, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* ifail ); +lapack_int LAPACKE_zhpevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_complex_double* ap, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_chpgst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_float* ap, + const lapack_complex_float* bp ); +lapack_int LAPACKE_zhpgst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_double* ap, + const lapack_complex_double* bp ); + +lapack_int LAPACKE_chpgv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_float* ap, + lapack_complex_float* bp, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhpgv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_double* ap, + lapack_complex_double* bp, double* w, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chpgvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_float* ap, + lapack_complex_float* bp, float* w, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zhpgvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_double* ap, + lapack_complex_double* bp, double* w, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_chpgvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_float* ap, lapack_complex_float* bp, + float vl, float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_zhpgvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_double* ap, lapack_complex_double* bp, + double vl, double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_chprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zhprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_chpsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhpsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_chpsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + lapack_complex_float* afp, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zhpsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + lapack_complex_double* afp, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_chptrd( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, float* d, float* e, + lapack_complex_float* tau ); +lapack_int LAPACKE_zhptrd( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, double* d, double* e, + lapack_complex_double* tau ); + +lapack_int LAPACKE_chptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, lapack_int* ipiv ); +lapack_int LAPACKE_zhptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, lapack_int* ipiv ); + +lapack_int LAPACKE_chptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, const lapack_int* ipiv ); +lapack_int LAPACKE_zhptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, const lapack_int* ipiv ); + +lapack_int LAPACKE_chptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_shsein( int matrix_layout, char job, char eigsrc, char initv, + lapack_logical* select, lapack_int n, const float* h, + lapack_int ldh, float* wr, const float* wi, + float* vl, lapack_int ldvl, float* vr, + lapack_int ldvr, lapack_int mm, lapack_int* m, + lapack_int* ifaill, lapack_int* ifailr ); +lapack_int LAPACKE_dhsein( int matrix_layout, char job, char eigsrc, char initv, + lapack_logical* select, lapack_int n, + const double* h, lapack_int ldh, double* wr, + const double* wi, double* vl, lapack_int ldvl, + double* vr, lapack_int ldvr, lapack_int mm, + lapack_int* m, lapack_int* ifaill, + lapack_int* ifailr ); +lapack_int LAPACKE_chsein( int matrix_layout, char job, char eigsrc, char initv, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* h, lapack_int ldh, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int ldvl, lapack_complex_float* vr, + lapack_int ldvr, lapack_int mm, lapack_int* m, + lapack_int* ifaill, lapack_int* ifailr ); +lapack_int LAPACKE_zhsein( int matrix_layout, char job, char eigsrc, char initv, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* h, lapack_int ldh, + lapack_complex_double* w, lapack_complex_double* vl, + lapack_int ldvl, lapack_complex_double* vr, + lapack_int ldvr, lapack_int mm, lapack_int* m, + lapack_int* ifaill, lapack_int* ifailr ); + +lapack_int LAPACKE_shseqr( int matrix_layout, char job, char compz, lapack_int n, + lapack_int ilo, lapack_int ihi, float* h, + lapack_int ldh, float* wr, float* wi, float* z, + lapack_int ldz ); +lapack_int LAPACKE_dhseqr( int matrix_layout, char job, char compz, lapack_int n, + lapack_int ilo, lapack_int ihi, double* h, + lapack_int ldh, double* wr, double* wi, double* z, + lapack_int ldz ); +lapack_int LAPACKE_chseqr( int matrix_layout, char job, char compz, lapack_int n, + lapack_int ilo, lapack_int ihi, + lapack_complex_float* h, lapack_int ldh, + lapack_complex_float* w, lapack_complex_float* z, + lapack_int ldz ); +lapack_int LAPACKE_zhseqr( int matrix_layout, char job, char compz, lapack_int n, + lapack_int ilo, lapack_int ihi, + lapack_complex_double* h, lapack_int ldh, + lapack_complex_double* w, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_clacgv( lapack_int n, lapack_complex_float* x, + lapack_int incx ); +lapack_int LAPACKE_zlacgv( lapack_int n, lapack_complex_double* x, + lapack_int incx ); + +lapack_int LAPACKE_slacn2( lapack_int n, float* v, float* x, lapack_int* isgn, + float* est, lapack_int* kase, lapack_int* isave ); +lapack_int LAPACKE_dlacn2( lapack_int n, double* v, double* x, lapack_int* isgn, + double* est, lapack_int* kase, lapack_int* isave ); +lapack_int LAPACKE_clacn2( lapack_int n, lapack_complex_float* v, + lapack_complex_float* x, + float* est, lapack_int* kase, lapack_int* isave ); +lapack_int LAPACKE_zlacn2( lapack_int n, lapack_complex_double* v, + lapack_complex_double* x, + double* est, lapack_int* kase, lapack_int* isave ); + +lapack_int LAPACKE_slacpy( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const float* a, lapack_int lda, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dlacpy( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const double* a, lapack_int lda, double* b, + lapack_int ldb ); +lapack_int LAPACKE_clacpy( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zlacpy( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_clacp2( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zlacp2( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_zlag2c( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_float* sa, lapack_int ldsa ); + +lapack_int LAPACKE_slag2d( int matrix_layout, lapack_int m, lapack_int n, + const float* sa, lapack_int ldsa, double* a, + lapack_int lda ); + +lapack_int LAPACKE_dlag2s( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, float* sa, + lapack_int ldsa ); + +lapack_int LAPACKE_clag2z( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* sa, lapack_int ldsa, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_slagge( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* d, + float* a, lapack_int lda, lapack_int* iseed ); +lapack_int LAPACKE_dlagge( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* d, + double* a, lapack_int lda, lapack_int* iseed ); +lapack_int LAPACKE_clagge( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* d, + lapack_complex_float* a, lapack_int lda, + lapack_int* iseed ); +lapack_int LAPACKE_zlagge( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* d, + lapack_complex_double* a, lapack_int lda, + lapack_int* iseed ); + +float LAPACKE_slamch( char cmach ); +double LAPACKE_dlamch( char cmach ); + +float LAPACKE_slange( int matrix_layout, char norm, lapack_int m, + lapack_int n, const float* a, lapack_int lda ); +double LAPACKE_dlange( int matrix_layout, char norm, lapack_int m, + lapack_int n, const double* a, lapack_int lda ); +float LAPACKE_clange( int matrix_layout, char norm, lapack_int m, + lapack_int n, const lapack_complex_float* a, + lapack_int lda ); +double LAPACKE_zlange( int matrix_layout, char norm, lapack_int m, + lapack_int n, const lapack_complex_double* a, + lapack_int lda ); + +float LAPACKE_clanhe( int matrix_layout, char norm, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda ); +double LAPACKE_zlanhe( int matrix_layout, char norm, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda ); + +float LAPACKE_slansy( int matrix_layout, char norm, char uplo, lapack_int n, + const float* a, lapack_int lda ); +double LAPACKE_dlansy( int matrix_layout, char norm, char uplo, lapack_int n, + const double* a, lapack_int lda ); +float LAPACKE_clansy( int matrix_layout, char norm, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda ); +double LAPACKE_zlansy( int matrix_layout, char norm, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda ); + +float LAPACKE_slantr( int matrix_layout, char norm, char uplo, char diag, + lapack_int m, lapack_int n, const float* a, + lapack_int lda ); +double LAPACKE_dlantr( int matrix_layout, char norm, char uplo, char diag, + lapack_int m, lapack_int n, const double* a, + lapack_int lda ); +float LAPACKE_clantr( int matrix_layout, char norm, char uplo, char diag, + lapack_int m, lapack_int n, const lapack_complex_float* a, + lapack_int lda ); +double LAPACKE_zlantr( int matrix_layout, char norm, char uplo, char diag, + lapack_int m, lapack_int n, const lapack_complex_double* a, + lapack_int lda ); + + +lapack_int LAPACKE_slarfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, const float* v, lapack_int ldv, + const float* t, lapack_int ldt, float* c, + lapack_int ldc ); +lapack_int LAPACKE_dlarfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, const double* v, lapack_int ldv, + const double* t, lapack_int ldt, double* c, + lapack_int ldc ); +lapack_int LAPACKE_clarfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, const lapack_complex_float* v, + lapack_int ldv, const lapack_complex_float* t, + lapack_int ldt, lapack_complex_float* c, + lapack_int ldc ); +lapack_int LAPACKE_zlarfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, const lapack_complex_double* v, + lapack_int ldv, const lapack_complex_double* t, + lapack_int ldt, lapack_complex_double* c, + lapack_int ldc ); + +lapack_int LAPACKE_slarfg( lapack_int n, float* alpha, float* x, + lapack_int incx, float* tau ); +lapack_int LAPACKE_dlarfg( lapack_int n, double* alpha, double* x, + lapack_int incx, double* tau ); +lapack_int LAPACKE_clarfg( lapack_int n, lapack_complex_float* alpha, + lapack_complex_float* x, lapack_int incx, + lapack_complex_float* tau ); +lapack_int LAPACKE_zlarfg( lapack_int n, lapack_complex_double* alpha, + lapack_complex_double* x, lapack_int incx, + lapack_complex_double* tau ); + +lapack_int LAPACKE_slarft( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, const float* v, + lapack_int ldv, const float* tau, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dlarft( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, const double* v, + lapack_int ldv, const double* tau, double* t, + lapack_int ldt ); +lapack_int LAPACKE_clarft( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* tau, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zlarft( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* tau, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_slarfx( int matrix_layout, char side, lapack_int m, + lapack_int n, const float* v, float tau, float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_dlarfx( int matrix_layout, char side, lapack_int m, + lapack_int n, const double* v, double tau, double* c, + lapack_int ldc, double* work ); +lapack_int LAPACKE_clarfx( int matrix_layout, char side, lapack_int m, + lapack_int n, const lapack_complex_float* v, + lapack_complex_float tau, lapack_complex_float* c, + lapack_int ldc, lapack_complex_float* work ); +lapack_int LAPACKE_zlarfx( int matrix_layout, char side, lapack_int m, + lapack_int n, const lapack_complex_double* v, + lapack_complex_double tau, lapack_complex_double* c, + lapack_int ldc, lapack_complex_double* work ); + +lapack_int LAPACKE_slarnv( lapack_int idist, lapack_int* iseed, lapack_int n, + float* x ); +lapack_int LAPACKE_dlarnv( lapack_int idist, lapack_int* iseed, lapack_int n, + double* x ); +lapack_int LAPACKE_clarnv( lapack_int idist, lapack_int* iseed, lapack_int n, + lapack_complex_float* x ); +lapack_int LAPACKE_zlarnv( lapack_int idist, lapack_int* iseed, lapack_int n, + lapack_complex_double* x ); + +lapack_int LAPACKE_slascl( int matrix_layout, char type, lapack_int kl, + lapack_int ku, float cfrom, float cto, + lapack_int m, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlascl( int matrix_layout, char type, lapack_int kl, + lapack_int ku, double cfrom, double cto, + lapack_int m, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_clascl( int matrix_layout, char type, lapack_int kl, + lapack_int ku, float cfrom, float cto, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda ); +lapack_int LAPACKE_zlascl( int matrix_layout, char type, lapack_int kl, + lapack_int ku, double cfrom, double cto, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda ); + +lapack_int LAPACKE_slaset( int matrix_layout, char uplo, lapack_int m, + lapack_int n, float alpha, float beta, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlaset( int matrix_layout, char uplo, lapack_int m, + lapack_int n, double alpha, double beta, double* a, + lapack_int lda ); +lapack_int LAPACKE_claset( int matrix_layout, char uplo, lapack_int m, + lapack_int n, lapack_complex_float alpha, + lapack_complex_float beta, lapack_complex_float* a, + lapack_int lda ); +lapack_int LAPACKE_zlaset( int matrix_layout, char uplo, lapack_int m, + lapack_int n, lapack_complex_double alpha, + lapack_complex_double beta, lapack_complex_double* a, + lapack_int lda ); + +lapack_int LAPACKE_slasrt( char id, lapack_int n, float* d ); +lapack_int LAPACKE_dlasrt( char id, lapack_int n, double* d ); + +lapack_int LAPACKE_slaswp( int matrix_layout, lapack_int n, float* a, + lapack_int lda, lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); +lapack_int LAPACKE_dlaswp( int matrix_layout, lapack_int n, double* a, + lapack_int lda, lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); +lapack_int LAPACKE_claswp( int matrix_layout, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int k1, lapack_int k2, const lapack_int* ipiv, + lapack_int incx ); +lapack_int LAPACKE_zlaswp( int matrix_layout, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int k1, lapack_int k2, const lapack_int* ipiv, + lapack_int incx ); + +lapack_int LAPACKE_slatms( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, float* d, + lapack_int mode, float cond, float dmax, + lapack_int kl, lapack_int ku, char pack, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlatms( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, double* d, + lapack_int mode, double cond, double dmax, + lapack_int kl, lapack_int ku, char pack, double* a, + lapack_int lda ); +lapack_int LAPACKE_clatms( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, float* d, + lapack_int mode, float cond, float dmax, + lapack_int kl, lapack_int ku, char pack, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zlatms( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, double* d, + lapack_int mode, double cond, double dmax, + lapack_int kl, lapack_int ku, char pack, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_slauum( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlauum( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_clauum( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zlauum( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_sopgtr( int matrix_layout, char uplo, lapack_int n, + const float* ap, const float* tau, float* q, + lapack_int ldq ); +lapack_int LAPACKE_dopgtr( int matrix_layout, char uplo, lapack_int n, + const double* ap, const double* tau, double* q, + lapack_int ldq ); + +lapack_int LAPACKE_sopmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, const float* ap, + const float* tau, float* c, lapack_int ldc ); +lapack_int LAPACKE_dopmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, const double* ap, + const double* tau, double* c, lapack_int ldc ); + +lapack_int LAPACKE_sorgbr( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorgbr( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, double* a, + lapack_int lda, const double* tau ); + +lapack_int LAPACKE_sorghr( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorghr( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, double* a, lapack_int lda, + const double* tau ); + +lapack_int LAPACKE_sorglq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorglq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau ); + +lapack_int LAPACKE_sorgql( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorgql( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau ); + +lapack_int LAPACKE_sorgqr( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorgqr( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau ); + +lapack_int LAPACKE_sorgrq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau ); +lapack_int LAPACKE_dorgrq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau ); + +lapack_int LAPACKE_sorgtr( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, const float* tau ); +lapack_int LAPACKE_dorgtr( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, const double* tau ); + +lapack_int LAPACKE_sormbr( int matrix_layout, char vect, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, const float* tau, + float* c, lapack_int ldc ); +lapack_int LAPACKE_dormbr( int matrix_layout, char vect, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, const double* tau, + double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormhr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc ); +lapack_int LAPACKE_dormhr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormlq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, const float* tau, + float* c, lapack_int ldc ); +lapack_int LAPACKE_dormlq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, const double* tau, + double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormql( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, const float* tau, + float* c, lapack_int ldc ); +lapack_int LAPACKE_dormql( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, const double* tau, + double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormqr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, const float* tau, + float* c, lapack_int ldc ); +lapack_int LAPACKE_dormqr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, const double* tau, + double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormrq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, const float* tau, + float* c, lapack_int ldc ); +lapack_int LAPACKE_dormrq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, const double* tau, + double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormrz( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc ); +lapack_int LAPACKE_dormrz( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc ); + +lapack_int LAPACKE_sormtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, const float* a, + lapack_int lda, const float* tau, float* c, + lapack_int ldc ); +lapack_int LAPACKE_dormtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, const double* a, + lapack_int lda, const double* tau, double* c, + lapack_int ldc ); + +lapack_int LAPACKE_spbcon( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const float* ab, lapack_int ldab, + float anorm, float* rcond ); +lapack_int LAPACKE_dpbcon( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const double* ab, lapack_int ldab, + double anorm, double* rcond ); +lapack_int LAPACKE_cpbcon( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_float* ab, + lapack_int ldab, float anorm, float* rcond ); +lapack_int LAPACKE_zpbcon( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_double* ab, + lapack_int ldab, double anorm, double* rcond ); + +lapack_int LAPACKE_spbequ( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const float* ab, lapack_int ldab, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_dpbequ( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const double* ab, lapack_int ldab, + double* s, double* scond, double* amax ); +lapack_int LAPACKE_cpbequ( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_float* ab, + lapack_int ldab, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_zpbequ( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_double* ab, + lapack_int ldab, double* s, double* scond, + double* amax ); + +lapack_int LAPACKE_spbrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const float* ab, + lapack_int ldab, const float* afb, lapack_int ldafb, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_dpbrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const double* ab, + lapack_int ldab, const double* afb, lapack_int ldafb, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr ); +lapack_int LAPACKE_cpbrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* afb, lapack_int ldafb, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zpbrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + const lapack_complex_double* afb, lapack_int ldafb, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_spbstf( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, float* bb, lapack_int ldbb ); +lapack_int LAPACKE_dpbstf( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, double* bb, lapack_int ldbb ); +lapack_int LAPACKE_cpbstf( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, lapack_complex_float* bb, + lapack_int ldbb ); +lapack_int LAPACKE_zpbstf( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, lapack_complex_double* bb, + lapack_int ldbb ); + +lapack_int LAPACKE_spbsv( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, float* ab, + lapack_int ldab, float* b, lapack_int ldb ); +lapack_int LAPACKE_dpbsv( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, double* ab, + lapack_int ldab, double* b, lapack_int ldb ); +lapack_int LAPACKE_cpbsv( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpbsv( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spbsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, float* ab, + lapack_int ldab, float* afb, lapack_int ldafb, + char* equed, float* s, float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dpbsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, double* ab, + lapack_int ldab, double* afb, lapack_int ldafb, + char* equed, double* s, double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* ferr, double* berr ); +lapack_int LAPACKE_cpbsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* afb, lapack_int ldafb, + char* equed, float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_zpbsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* afb, lapack_int ldafb, + char* equed, double* s, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr ); + +lapack_int LAPACKE_spbtrf( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, float* ab, lapack_int ldab ); +lapack_int LAPACKE_dpbtrf( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, double* ab, lapack_int ldab ); +lapack_int LAPACKE_cpbtrf( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_complex_float* ab, + lapack_int ldab ); +lapack_int LAPACKE_zpbtrf( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_complex_double* ab, + lapack_int ldab ); + +lapack_int LAPACKE_spbtrs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const float* ab, + lapack_int ldab, float* b, lapack_int ldb ); +lapack_int LAPACKE_dpbtrs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const double* ab, + lapack_int ldab, double* b, lapack_int ldb ); +lapack_int LAPACKE_cpbtrs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpbtrs( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spftrf( int matrix_layout, char transr, char uplo, + lapack_int n, float* a ); +lapack_int LAPACKE_dpftrf( int matrix_layout, char transr, char uplo, + lapack_int n, double* a ); +lapack_int LAPACKE_cpftrf( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_float* a ); +lapack_int LAPACKE_zpftrf( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_double* a ); + +lapack_int LAPACKE_spftri( int matrix_layout, char transr, char uplo, + lapack_int n, float* a ); +lapack_int LAPACKE_dpftri( int matrix_layout, char transr, char uplo, + lapack_int n, double* a ); +lapack_int LAPACKE_cpftri( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_float* a ); +lapack_int LAPACKE_zpftri( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_double* a ); + +lapack_int LAPACKE_spftrs( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, const float* a, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dpftrs( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, const double* a, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cpftrs( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpftrs( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spocon( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float anorm, + float* rcond ); +lapack_int LAPACKE_dpocon( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double anorm, + double* rcond ); +lapack_int LAPACKE_cpocon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float anorm, float* rcond ); +lapack_int LAPACKE_zpocon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double anorm, double* rcond ); + +lapack_int LAPACKE_spoequ( int matrix_layout, lapack_int n, const float* a, + lapack_int lda, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dpoequ( int matrix_layout, lapack_int n, const double* a, + lapack_int lda, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cpoequ( int matrix_layout, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zpoequ( int matrix_layout, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_spoequb( int matrix_layout, lapack_int n, const float* a, + lapack_int lda, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dpoequb( int matrix_layout, lapack_int n, const double* a, + lapack_int lda, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cpoequb( int matrix_layout, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zpoequb( int matrix_layout, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_sporfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dporfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const double* af, lapack_int ldaf, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr ); +lapack_int LAPACKE_cporfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_zporfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* ferr, double* berr ); + +lapack_int LAPACKE_sporfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, lapack_int ldaf, + const float* s, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dporfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, lapack_int ldaf, + const double* s, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); +lapack_int LAPACKE_cporfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, lapack_int ldaf, + const float* s, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_zporfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, lapack_int ldaf, + const double* s, const lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); + +lapack_int LAPACKE_sposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); +lapack_int LAPACKE_dsposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* x, lapack_int ldx, + lapack_int* iter ); +lapack_int LAPACKE_zcposv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, lapack_int* iter ); + +lapack_int LAPACKE_sposvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, float* af, + lapack_int ldaf, char* equed, float* s, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_dposvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* af, lapack_int ldaf, char* equed, double* s, + double* b, lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); +lapack_int LAPACKE_cposvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* af, + lapack_int ldaf, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zposvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* af, + lapack_int ldaf, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_sposvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + char* equed, float* s, float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_dposvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + char* equed, double* s, double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); +lapack_int LAPACKE_cposvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + char* equed, float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_zposvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + char* equed, double* s, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); + +lapack_int LAPACKE_spotrf2( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dpotrf2( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_cpotrf2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotrf2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotrf( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dpotrf( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_cpotrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotri( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dpotri( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_cpotri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dpotrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cpotrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zpotrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sppcon( int matrix_layout, char uplo, lapack_int n, + const float* ap, float anorm, float* rcond ); +lapack_int LAPACKE_dppcon( int matrix_layout, char uplo, lapack_int n, + const double* ap, double anorm, double* rcond ); +lapack_int LAPACKE_cppcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, float anorm, + float* rcond ); +lapack_int LAPACKE_zppcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, double anorm, + double* rcond ); + +lapack_int LAPACKE_sppequ( int matrix_layout, char uplo, lapack_int n, + const float* ap, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dppequ( int matrix_layout, char uplo, lapack_int n, + const double* ap, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cppequ( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, float* s, + float* scond, float* amax ); +lapack_int LAPACKE_zppequ( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, double* s, + double* scond, double* amax ); + +lapack_int LAPACKE_spprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, const float* afp, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_dpprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, const double* afp, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr ); +lapack_int LAPACKE_cpprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zpprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sppsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* ap, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dppsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* ap, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cppsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zppsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sppsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, float* ap, float* afp, char* equed, + float* s, float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dppsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, double* ap, double* afp, + char* equed, double* s, double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* ferr, double* berr ); +lapack_int LAPACKE_cppsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_complex_float* afp, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zppsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_complex_double* afp, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_spptrf( int matrix_layout, char uplo, lapack_int n, + float* ap ); +lapack_int LAPACKE_dpptrf( int matrix_layout, char uplo, lapack_int n, + double* ap ); +lapack_int LAPACKE_cpptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap ); +lapack_int LAPACKE_zpptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap ); + +lapack_int LAPACKE_spptri( int matrix_layout, char uplo, lapack_int n, + float* ap ); +lapack_int LAPACKE_dpptri( int matrix_layout, char uplo, lapack_int n, + double* ap ); +lapack_int LAPACKE_cpptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap ); +lapack_int LAPACKE_zpptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap ); + +lapack_int LAPACKE_spptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dpptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cpptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spstrf( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, lapack_int* piv, lapack_int* rank, + float tol ); +lapack_int LAPACKE_dpstrf( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, lapack_int* piv, lapack_int* rank, + double tol ); +lapack_int LAPACKE_cpstrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* piv, lapack_int* rank, float tol ); +lapack_int LAPACKE_zpstrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* piv, lapack_int* rank, double tol ); + +lapack_int LAPACKE_sptcon( lapack_int n, const float* d, const float* e, + float anorm, float* rcond ); +lapack_int LAPACKE_dptcon( lapack_int n, const double* d, const double* e, + double anorm, double* rcond ); +lapack_int LAPACKE_cptcon( lapack_int n, const float* d, + const lapack_complex_float* e, float anorm, + float* rcond ); +lapack_int LAPACKE_zptcon( lapack_int n, const double* d, + const lapack_complex_double* e, double anorm, + double* rcond ); + +lapack_int LAPACKE_spteqr( int matrix_layout, char compz, lapack_int n, float* d, + float* e, float* z, lapack_int ldz ); +lapack_int LAPACKE_dpteqr( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz ); +lapack_int LAPACKE_cpteqr( int matrix_layout, char compz, lapack_int n, float* d, + float* e, lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zpteqr( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_sptrfs( int matrix_layout, lapack_int n, lapack_int nrhs, + const float* d, const float* e, const float* df, + const float* ef, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_dptrfs( int matrix_layout, lapack_int n, lapack_int nrhs, + const double* d, const double* e, const double* df, + const double* ef, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* ferr, + double* berr ); +lapack_int LAPACKE_cptrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, const float* df, + const lapack_complex_float* ef, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zptrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, const double* df, + const lapack_complex_double* ef, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sptsv( int matrix_layout, lapack_int n, lapack_int nrhs, + float* d, float* e, float* b, lapack_int ldb ); +lapack_int LAPACKE_dptsv( int matrix_layout, lapack_int n, lapack_int nrhs, + double* d, double* e, double* b, lapack_int ldb ); +lapack_int LAPACKE_cptsv( int matrix_layout, lapack_int n, lapack_int nrhs, + float* d, lapack_complex_float* e, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zptsv( int matrix_layout, lapack_int n, lapack_int nrhs, + double* d, lapack_complex_double* e, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sptsvx( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const float* d, const float* e, + float* df, float* ef, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dptsvx( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const double* d, const double* e, + double* df, double* ef, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); +lapack_int LAPACKE_cptsvx( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, float* df, + lapack_complex_float* ef, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zptsvx( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, double* df, + lapack_complex_double* ef, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_spttrf( lapack_int n, float* d, float* e ); +lapack_int LAPACKE_dpttrf( lapack_int n, double* d, double* e ); +lapack_int LAPACKE_cpttrf( lapack_int n, float* d, lapack_complex_float* e ); +lapack_int LAPACKE_zpttrf( lapack_int n, double* d, lapack_complex_double* e ); + +lapack_int LAPACKE_spttrs( int matrix_layout, lapack_int n, lapack_int nrhs, + const float* d, const float* e, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dpttrs( int matrix_layout, lapack_int n, lapack_int nrhs, + const double* d, const double* e, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cpttrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpttrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssbev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, float* ab, lapack_int ldab, float* w, + float* z, lapack_int ldz ); +lapack_int LAPACKE_dsbev( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, double* ab, lapack_int ldab, double* w, + double* z, lapack_int ldz ); + +lapack_int LAPACKE_ssbevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, float* ab, lapack_int ldab, float* w, + float* z, lapack_int ldz ); +lapack_int LAPACKE_dsbevd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int kd, double* ab, lapack_int ldab, + double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_ssbevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int kd, float* ab, + lapack_int ldab, float* q, lapack_int ldq, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dsbevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int kd, double* ab, + lapack_int ldab, double* q, lapack_int ldq, + double vl, double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* ifail ); + +lapack_int LAPACKE_ssbgst( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, float* ab, + lapack_int ldab, const float* bb, lapack_int ldbb, + float* x, lapack_int ldx ); +lapack_int LAPACKE_dsbgst( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, double* ab, + lapack_int ldab, const double* bb, lapack_int ldbb, + double* x, lapack_int ldx ); + +lapack_int LAPACKE_ssbgv( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, float* ab, + lapack_int ldab, float* bb, lapack_int ldbb, float* w, + float* z, lapack_int ldz ); +lapack_int LAPACKE_dsbgv( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, double* ab, + lapack_int ldab, double* bb, lapack_int ldbb, + double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_ssbgvd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, float* ab, + lapack_int ldab, float* bb, lapack_int ldbb, + float* w, float* z, lapack_int ldz ); +lapack_int LAPACKE_dsbgvd( int matrix_layout, char jobz, char uplo, lapack_int n, + lapack_int ka, lapack_int kb, double* ab, + lapack_int ldab, double* bb, lapack_int ldbb, + double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_ssbgvx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + float* ab, lapack_int ldab, float* bb, + lapack_int ldbb, float* q, lapack_int ldq, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dsbgvx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + double* ab, lapack_int ldab, double* bb, + lapack_int ldbb, double* q, lapack_int ldq, + double vl, double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* ifail ); + +lapack_int LAPACKE_ssbtrd( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int kd, float* ab, lapack_int ldab, float* d, + float* e, float* q, lapack_int ldq ); +lapack_int LAPACKE_dsbtrd( int matrix_layout, char vect, char uplo, lapack_int n, + lapack_int kd, double* ab, lapack_int ldab, + double* d, double* e, double* q, lapack_int ldq ); + +lapack_int LAPACKE_ssfrk( int matrix_layout, char transr, char uplo, char trans, + lapack_int n, lapack_int k, float alpha, + const float* a, lapack_int lda, float beta, + float* c ); +lapack_int LAPACKE_dsfrk( int matrix_layout, char transr, char uplo, char trans, + lapack_int n, lapack_int k, double alpha, + const double* a, lapack_int lda, double beta, + double* c ); + +lapack_int LAPACKE_sspcon( int matrix_layout, char uplo, lapack_int n, + const float* ap, const lapack_int* ipiv, float anorm, + float* rcond ); +lapack_int LAPACKE_dspcon( int matrix_layout, char uplo, lapack_int n, + const double* ap, const lapack_int* ipiv, + double anorm, double* rcond ); +lapack_int LAPACKE_cspcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zspcon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_sspev( int matrix_layout, char jobz, char uplo, lapack_int n, + float* ap, float* w, float* z, lapack_int ldz ); +lapack_int LAPACKE_dspev( int matrix_layout, char jobz, char uplo, lapack_int n, + double* ap, double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sspevd( int matrix_layout, char jobz, char uplo, lapack_int n, + float* ap, float* w, float* z, lapack_int ldz ); +lapack_int LAPACKE_dspevd( int matrix_layout, char jobz, char uplo, lapack_int n, + double* ap, double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sspevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, float* ap, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dspevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, double* ap, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_sspgst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, float* ap, const float* bp ); +lapack_int LAPACKE_dspgst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, double* ap, const double* bp ); + +lapack_int LAPACKE_sspgv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* ap, float* bp, + float* w, float* z, lapack_int ldz ); +lapack_int LAPACKE_dspgv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* ap, double* bp, + double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sspgvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* ap, float* bp, + float* w, float* z, lapack_int ldz ); +lapack_int LAPACKE_dspgvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* ap, double* bp, + double* w, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sspgvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, float* ap, + float* bp, float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, float* w, + float* z, lapack_int ldz, lapack_int* ifail ); +lapack_int LAPACKE_dspgvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, double* ap, + double* bp, double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, double* z, lapack_int ldz, + lapack_int* ifail ); + +lapack_int LAPACKE_ssprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, const float* afp, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dsprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, const double* afp, + const lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr ); +lapack_int LAPACKE_csprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zsprfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_sspsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* ap, lapack_int* ipiv, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dspsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* ap, lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cspsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zspsv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sspsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, float* afp, + lapack_int* ipiv, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dspsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, double* afp, + lapack_int* ipiv, const double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* ferr, double* berr ); +lapack_int LAPACKE_cspsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + lapack_complex_float* afp, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zspsvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + lapack_complex_double* afp, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_ssptrd( int matrix_layout, char uplo, lapack_int n, float* ap, + float* d, float* e, float* tau ); +lapack_int LAPACKE_dsptrd( int matrix_layout, char uplo, lapack_int n, + double* ap, double* d, double* e, double* tau ); + +lapack_int LAPACKE_ssptrf( int matrix_layout, char uplo, lapack_int n, float* ap, + lapack_int* ipiv ); +lapack_int LAPACKE_dsptrf( int matrix_layout, char uplo, lapack_int n, + double* ap, lapack_int* ipiv ); +lapack_int LAPACKE_csptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, lapack_int* ipiv ); +lapack_int LAPACKE_zsptrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, lapack_int* ipiv ); + +lapack_int LAPACKE_ssptri( int matrix_layout, char uplo, lapack_int n, float* ap, + const lapack_int* ipiv ); +lapack_int LAPACKE_dsptri( int matrix_layout, char uplo, lapack_int n, + double* ap, const lapack_int* ipiv ); +lapack_int LAPACKE_csptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, const lapack_int* ipiv ); +lapack_int LAPACKE_zsptri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, const lapack_int* ipiv ); + +lapack_int LAPACKE_ssptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dsptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_csptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zsptrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* ap, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sstebz( char range, char order, lapack_int n, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + const float* d, const float* e, lapack_int* m, + lapack_int* nsplit, float* w, lapack_int* iblock, + lapack_int* isplit ); +lapack_int LAPACKE_dstebz( char range, char order, lapack_int n, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, const double* d, const double* e, + lapack_int* m, lapack_int* nsplit, double* w, + lapack_int* iblock, lapack_int* isplit ); + +lapack_int LAPACKE_sstedc( int matrix_layout, char compz, lapack_int n, float* d, + float* e, float* z, lapack_int ldz ); +lapack_int LAPACKE_dstedc( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz ); +lapack_int LAPACKE_cstedc( int matrix_layout, char compz, lapack_int n, float* d, + float* e, lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zstedc( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_sstegr( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* isuppz ); +lapack_int LAPACKE_dstegr( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* isuppz ); +lapack_int LAPACKE_cstegr( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* isuppz ); +lapack_int LAPACKE_zstegr( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* isuppz ); + +lapack_int LAPACKE_sstein( int matrix_layout, lapack_int n, const float* d, + const float* e, lapack_int m, const float* w, + const lapack_int* iblock, const lapack_int* isplit, + float* z, lapack_int ldz, lapack_int* ifailv ); +lapack_int LAPACKE_dstein( int matrix_layout, lapack_int n, const double* d, + const double* e, lapack_int m, const double* w, + const lapack_int* iblock, const lapack_int* isplit, + double* z, lapack_int ldz, lapack_int* ifailv ); +lapack_int LAPACKE_cstein( int matrix_layout, lapack_int n, const float* d, + const float* e, lapack_int m, const float* w, + const lapack_int* iblock, const lapack_int* isplit, + lapack_complex_float* z, lapack_int ldz, + lapack_int* ifailv ); +lapack_int LAPACKE_zstein( int matrix_layout, lapack_int n, const double* d, + const double* e, lapack_int m, const double* w, + const lapack_int* iblock, const lapack_int* isplit, + lapack_complex_double* z, lapack_int ldz, + lapack_int* ifailv ); + +lapack_int LAPACKE_sstemr( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, lapack_int* m, + float* w, float* z, lapack_int ldz, lapack_int nzc, + lapack_int* isuppz, lapack_logical* tryrac ); +lapack_int LAPACKE_dstemr( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + lapack_int* m, double* w, double* z, lapack_int ldz, + lapack_int nzc, lapack_int* isuppz, + lapack_logical* tryrac ); +lapack_int LAPACKE_cstemr( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, lapack_int* m, + float* w, lapack_complex_float* z, lapack_int ldz, + lapack_int nzc, lapack_int* isuppz, + lapack_logical* tryrac ); +lapack_int LAPACKE_zstemr( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int ldz, lapack_int nzc, lapack_int* isuppz, + lapack_logical* tryrac ); + +lapack_int LAPACKE_ssteqr( int matrix_layout, char compz, lapack_int n, float* d, + float* e, float* z, lapack_int ldz ); +lapack_int LAPACKE_dsteqr( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz ); +lapack_int LAPACKE_csteqr( int matrix_layout, char compz, lapack_int n, float* d, + float* e, lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zsteqr( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz ); + +lapack_int LAPACKE_ssterf( lapack_int n, float* d, float* e ); +lapack_int LAPACKE_dsterf( lapack_int n, double* d, double* e ); + +lapack_int LAPACKE_sstev( int matrix_layout, char jobz, lapack_int n, float* d, + float* e, float* z, lapack_int ldz ); +lapack_int LAPACKE_dstev( int matrix_layout, char jobz, lapack_int n, double* d, + double* e, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sstevd( int matrix_layout, char jobz, lapack_int n, float* d, + float* e, float* z, lapack_int ldz ); +lapack_int LAPACKE_dstevd( int matrix_layout, char jobz, lapack_int n, double* d, + double* e, double* z, lapack_int ldz ); + +lapack_int LAPACKE_sstevr( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* isuppz ); +lapack_int LAPACKE_dstevr( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* isuppz ); + +lapack_int LAPACKE_sstevx( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dstevx( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* ifail ); + +lapack_int LAPACKE_ssycon( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_dsycon( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond ); +lapack_int LAPACKE_csycon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, float* rcond ); +lapack_int LAPACKE_zsycon( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond ); + +lapack_int LAPACKE_ssyequb( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float* s, + float* scond, float* amax ); +lapack_int LAPACKE_dsyequb( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double* s, + double* scond, double* amax ); +lapack_int LAPACKE_csyequb( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zsyequb( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_ssyev( int matrix_layout, char jobz, char uplo, lapack_int n, + float* a, lapack_int lda, float* w ); +lapack_int LAPACKE_dsyev( int matrix_layout, char jobz, char uplo, lapack_int n, + double* a, lapack_int lda, double* w ); + +lapack_int LAPACKE_ssyevd( int matrix_layout, char jobz, char uplo, lapack_int n, + float* a, lapack_int lda, float* w ); +lapack_int LAPACKE_dsyevd( int matrix_layout, char jobz, char uplo, lapack_int n, + double* a, lapack_int lda, double* w ); + +lapack_int LAPACKE_ssyevr( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, float* a, lapack_int lda, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* isuppz ); +lapack_int LAPACKE_dsyevr( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, double* a, lapack_int lda, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* isuppz ); + +lapack_int LAPACKE_ssyevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, float* a, lapack_int lda, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dsyevx( int matrix_layout, char jobz, char range, char uplo, + lapack_int n, double* a, lapack_int lda, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* ifail ); + +lapack_int LAPACKE_ssygst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, float* a, lapack_int lda, + const float* b, lapack_int ldb ); +lapack_int LAPACKE_dsygst( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, double* a, lapack_int lda, + const double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssygv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, float* w ); +lapack_int LAPACKE_dsygv( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, double* w ); + +lapack_int LAPACKE_ssygvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, float* w ); +lapack_int LAPACKE_dsygvd( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, double* w ); + +lapack_int LAPACKE_ssygvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, float vl, + float vu, lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, lapack_int ldz, + lapack_int* ifail ); +lapack_int LAPACKE_dsygvx( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* ifail ); + +lapack_int LAPACKE_ssyrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dsyrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr ); +lapack_int LAPACKE_csyrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_zsyrfs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_ssyrfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* s, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dsyrfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* s, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); +lapack_int LAPACKE_csyrfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* s, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params ); +lapack_int LAPACKE_zsyrfsx( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, lapack_int ldaf, + const lapack_int* ipiv, const double* s, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params ); + +lapack_int LAPACKE_ssysv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dsysv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_csysv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsysv( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssysvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + float* af, lapack_int ldaf, lapack_int* ipiv, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr ); +lapack_int LAPACKE_dsysvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + double* af, lapack_int ldaf, lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr ); +lapack_int LAPACKE_csysvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* af, + lapack_int ldaf, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr ); +lapack_int LAPACKE_zsysvx( int matrix_layout, char fact, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* af, + lapack_int ldaf, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr ); + +lapack_int LAPACKE_ssysvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_dsysvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); +lapack_int LAPACKE_csysvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params ); +lapack_int LAPACKE_zsysvxx( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params ); + +lapack_int LAPACKE_ssytrd( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, float* d, float* e, float* tau ); +lapack_int LAPACKE_dsytrd( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, double* d, double* e, double* tau ); + +lapack_int LAPACKE_ssytrf( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dsytrf( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_csytrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zsytrf( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_ssytri( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_dsytri( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_csytri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_zsytri( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv ); + +lapack_int LAPACKE_ssytrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dsytrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_csytrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsytrs( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stbcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, lapack_int kd, const float* ab, + lapack_int ldab, float* rcond ); +lapack_int LAPACKE_dtbcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, lapack_int kd, const double* ab, + lapack_int ldab, double* rcond ); +lapack_int LAPACKE_ctbcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_float* ab, lapack_int ldab, + float* rcond ); +lapack_int LAPACKE_ztbcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_double* ab, lapack_int ldab, + double* rcond ); + +lapack_int LAPACKE_stbrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const float* ab, lapack_int ldab, const float* b, + lapack_int ldb, const float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_dtbrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const double* ab, lapack_int ldab, const double* b, + lapack_int ldb, const double* x, lapack_int ldx, + double* ferr, double* berr ); +lapack_int LAPACKE_ctbrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_ztbrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_stbtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const float* ab, lapack_int ldab, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dtbtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const double* ab, lapack_int ldab, double* b, + lapack_int ldb ); +lapack_int LAPACKE_ctbtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztbtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stfsm( int matrix_layout, char transr, char side, char uplo, + char trans, char diag, lapack_int m, lapack_int n, + float alpha, const float* a, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dtfsm( int matrix_layout, char transr, char side, char uplo, + char trans, char diag, lapack_int m, lapack_int n, + double alpha, const double* a, double* b, + lapack_int ldb ); +lapack_int LAPACKE_ctfsm( int matrix_layout, char transr, char side, char uplo, + char trans, char diag, lapack_int m, lapack_int n, + lapack_complex_float alpha, + const lapack_complex_float* a, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztfsm( int matrix_layout, char transr, char side, char uplo, + char trans, char diag, lapack_int m, lapack_int n, + lapack_complex_double alpha, + const lapack_complex_double* a, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stftri( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, float* a ); +lapack_int LAPACKE_dtftri( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, double* a ); +lapack_int LAPACKE_ctftri( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, lapack_complex_float* a ); +lapack_int LAPACKE_ztftri( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, lapack_complex_double* a ); + +lapack_int LAPACKE_stfttp( int matrix_layout, char transr, char uplo, + lapack_int n, const float* arf, float* ap ); +lapack_int LAPACKE_dtfttp( int matrix_layout, char transr, char uplo, + lapack_int n, const double* arf, double* ap ); +lapack_int LAPACKE_ctfttp( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* arf, + lapack_complex_float* ap ); +lapack_int LAPACKE_ztfttp( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* arf, + lapack_complex_double* ap ); + +lapack_int LAPACKE_stfttr( int matrix_layout, char transr, char uplo, + lapack_int n, const float* arf, float* a, + lapack_int lda ); +lapack_int LAPACKE_dtfttr( int matrix_layout, char transr, char uplo, + lapack_int n, const double* arf, double* a, + lapack_int lda ); +lapack_int LAPACKE_ctfttr( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* arf, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_ztfttr( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* arf, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_stgevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const float* s, lapack_int lds, const float* p, + lapack_int ldp, float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, lapack_int mm, + lapack_int* m ); +lapack_int LAPACKE_dtgevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const double* s, lapack_int lds, const double* p, + lapack_int ldp, double* vl, lapack_int ldvl, + double* vr, lapack_int ldvr, lapack_int mm, + lapack_int* m ); +lapack_int LAPACKE_ctgevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* s, lapack_int lds, + const lapack_complex_float* p, lapack_int ldp, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ztgevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* s, lapack_int lds, + const lapack_complex_double* p, lapack_int ldp, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m ); + +lapack_int LAPACKE_stgexc( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, float* q, + lapack_int ldq, float* z, lapack_int ldz, + lapack_int* ifst, lapack_int* ilst ); +lapack_int LAPACKE_dtgexc( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, double* q, + lapack_int ldq, double* z, lapack_int ldz, + lapack_int* ifst, lapack_int* ilst ); +lapack_int LAPACKE_ctgexc( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz, + lapack_int ifst, lapack_int ilst ); +lapack_int LAPACKE_ztgexc( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_int ifst, lapack_int ilst ); + +lapack_int LAPACKE_stgsen( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* alphar, float* alphai, float* beta, float* q, + lapack_int ldq, float* z, lapack_int ldz, + lapack_int* m, float* pl, float* pr, float* dif ); +lapack_int LAPACKE_dtgsen( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + double* a, lapack_int lda, double* b, lapack_int ldb, + double* alphar, double* alphai, double* beta, + double* q, lapack_int ldq, double* z, lapack_int ldz, + lapack_int* m, double* pl, double* pr, double* dif ); +lapack_int LAPACKE_ctgsen( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, lapack_complex_float* q, + lapack_int ldq, lapack_complex_float* z, + lapack_int ldz, lapack_int* m, float* pl, float* pr, + float* dif ); +lapack_int LAPACKE_ztgsen( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_int* m, double* pl, double* pr, double* dif ); + +lapack_int LAPACKE_stgsja( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_int k, lapack_int l, float* a, lapack_int lda, + float* b, lapack_int ldb, float tola, float tolb, + float* alpha, float* beta, float* u, lapack_int ldu, + float* v, lapack_int ldv, float* q, lapack_int ldq, + lapack_int* ncycle ); +lapack_int LAPACKE_dtgsja( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_int k, lapack_int l, double* a, + lapack_int lda, double* b, lapack_int ldb, + double tola, double tolb, double* alpha, + double* beta, double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq, + lapack_int* ncycle ); +lapack_int LAPACKE_ctgsja( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_int k, lapack_int l, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float tola, float tolb, float* alpha, + float* beta, lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq, + lapack_int* ncycle ); +lapack_int LAPACKE_ztgsja( int matrix_layout, char jobu, char jobv, char jobq, + lapack_int m, lapack_int p, lapack_int n, + lapack_int k, lapack_int l, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double tola, double tolb, + double* alpha, double* beta, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_int* ncycle ); + +lapack_int LAPACKE_stgsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const float* a, lapack_int lda, const float* b, + lapack_int ldb, const float* vl, lapack_int ldvl, + const float* vr, lapack_int ldvr, float* s, + float* dif, lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_dtgsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const double* a, lapack_int lda, const double* b, + lapack_int ldb, const double* vl, lapack_int ldvl, + const double* vr, lapack_int ldvr, double* s, + double* dif, lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ctgsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* vl, lapack_int ldvl, + const lapack_complex_float* vr, lapack_int ldvr, + float* s, float* dif, lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ztgsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* vl, lapack_int ldvl, + const lapack_complex_double* vr, lapack_int ldvr, + double* s, double* dif, lapack_int mm, + lapack_int* m ); + +lapack_int LAPACKE_stgsyl( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, const float* a, + lapack_int lda, const float* b, lapack_int ldb, + float* c, lapack_int ldc, const float* d, + lapack_int ldd, const float* e, lapack_int lde, + float* f, lapack_int ldf, float* scale, float* dif ); +lapack_int LAPACKE_dtgsyl( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, const double* a, + lapack_int lda, const double* b, lapack_int ldb, + double* c, lapack_int ldc, const double* d, + lapack_int ldd, const double* e, lapack_int lde, + double* f, lapack_int ldf, double* scale, + double* dif ); +lapack_int LAPACKE_ctgsyl( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* c, lapack_int ldc, + const lapack_complex_float* d, lapack_int ldd, + const lapack_complex_float* e, lapack_int lde, + lapack_complex_float* f, lapack_int ldf, + float* scale, float* dif ); +lapack_int LAPACKE_ztgsyl( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* c, lapack_int ldc, + const lapack_complex_double* d, lapack_int ldd, + const lapack_complex_double* e, lapack_int lde, + lapack_complex_double* f, lapack_int ldf, + double* scale, double* dif ); + +lapack_int LAPACKE_stpcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const float* ap, float* rcond ); +lapack_int LAPACKE_dtpcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const double* ap, double* rcond ); +lapack_int LAPACKE_ctpcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const lapack_complex_float* ap, + float* rcond ); +lapack_int LAPACKE_ztpcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const lapack_complex_double* ap, + double* rcond ); + +lapack_int LAPACKE_stprfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const float* ap, + const float* b, lapack_int ldb, const float* x, + lapack_int ldx, float* ferr, float* berr ); +lapack_int LAPACKE_dtprfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const double* ap, + const double* b, lapack_int ldb, const double* x, + lapack_int ldx, double* ferr, double* berr ); +lapack_int LAPACKE_ctprfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_ztprfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_stptri( int matrix_layout, char uplo, char diag, lapack_int n, + float* ap ); +lapack_int LAPACKE_dtptri( int matrix_layout, char uplo, char diag, lapack_int n, + double* ap ); +lapack_int LAPACKE_ctptri( int matrix_layout, char uplo, char diag, lapack_int n, + lapack_complex_float* ap ); +lapack_int LAPACKE_ztptri( int matrix_layout, char uplo, char diag, lapack_int n, + lapack_complex_double* ap ); + +lapack_int LAPACKE_stptrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const float* ap, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dtptrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const double* ap, + double* b, lapack_int ldb ); +lapack_int LAPACKE_ctptrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztptrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stpttf( int matrix_layout, char transr, char uplo, + lapack_int n, const float* ap, float* arf ); +lapack_int LAPACKE_dtpttf( int matrix_layout, char transr, char uplo, + lapack_int n, const double* ap, double* arf ); +lapack_int LAPACKE_ctpttf( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* ap, + lapack_complex_float* arf ); +lapack_int LAPACKE_ztpttf( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* ap, + lapack_complex_double* arf ); + +lapack_int LAPACKE_stpttr( int matrix_layout, char uplo, lapack_int n, + const float* ap, float* a, lapack_int lda ); +lapack_int LAPACKE_dtpttr( int matrix_layout, char uplo, lapack_int n, + const double* ap, double* a, lapack_int lda ); +lapack_int LAPACKE_ctpttr( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_ztpttr( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_strcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const float* a, lapack_int lda, + float* rcond ); +lapack_int LAPACKE_dtrcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const double* a, lapack_int lda, + double* rcond ); +lapack_int LAPACKE_ctrcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, float* rcond ); +lapack_int LAPACKE_ztrcon( int matrix_layout, char norm, char uplo, char diag, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, double* rcond ); + +lapack_int LAPACKE_strevc( int matrix_layout, char side, char howmny, + lapack_logical* select, lapack_int n, const float* t, + lapack_int ldt, float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, lapack_int mm, + lapack_int* m ); +lapack_int LAPACKE_dtrevc( int matrix_layout, char side, char howmny, + lapack_logical* select, lapack_int n, + const double* t, lapack_int ldt, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ctrevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ztrevc( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m ); + +lapack_int LAPACKE_strexc( int matrix_layout, char compq, lapack_int n, float* t, + lapack_int ldt, float* q, lapack_int ldq, + lapack_int* ifst, lapack_int* ilst ); +lapack_int LAPACKE_dtrexc( int matrix_layout, char compq, lapack_int n, + double* t, lapack_int ldt, double* q, lapack_int ldq, + lapack_int* ifst, lapack_int* ilst ); +lapack_int LAPACKE_ctrexc( int matrix_layout, char compq, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* q, lapack_int ldq, + lapack_int ifst, lapack_int ilst ); +lapack_int LAPACKE_ztrexc( int matrix_layout, char compq, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* q, lapack_int ldq, + lapack_int ifst, lapack_int ilst ); + +lapack_int LAPACKE_strrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* b, lapack_int ldb, + const float* x, lapack_int ldx, float* ferr, + float* berr ); +lapack_int LAPACKE_dtrrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* b, lapack_int ldb, + const double* x, lapack_int ldx, double* ferr, + double* berr ); +lapack_int LAPACKE_ctrrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr ); +lapack_int LAPACKE_ztrrfs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr ); + +lapack_int LAPACKE_strsen( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, float* t, + lapack_int ldt, float* q, lapack_int ldq, float* wr, + float* wi, lapack_int* m, float* s, float* sep ); +lapack_int LAPACKE_dtrsen( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + double* t, lapack_int ldt, double* q, lapack_int ldq, + double* wr, double* wi, lapack_int* m, double* s, + double* sep ); +lapack_int LAPACKE_ctrsen( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* w, lapack_int* m, float* s, + float* sep ); +lapack_int LAPACKE_ztrsen( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* w, lapack_int* m, double* s, + double* sep ); + +lapack_int LAPACKE_strsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const float* t, lapack_int ldt, const float* vl, + lapack_int ldvl, const float* vr, lapack_int ldvr, + float* s, float* sep, lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_dtrsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const double* t, lapack_int ldt, const double* vl, + lapack_int ldvl, const double* vr, lapack_int ldvr, + double* s, double* sep, lapack_int mm, + lapack_int* m ); +lapack_int LAPACKE_ctrsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* t, lapack_int ldt, + const lapack_complex_float* vl, lapack_int ldvl, + const lapack_complex_float* vr, lapack_int ldvr, + float* s, float* sep, lapack_int mm, lapack_int* m ); +lapack_int LAPACKE_ztrsna( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* t, lapack_int ldt, + const lapack_complex_double* vl, lapack_int ldvl, + const lapack_complex_double* vr, lapack_int ldvr, + double* s, double* sep, lapack_int mm, + lapack_int* m ); + +lapack_int LAPACKE_strsyl( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const float* a, lapack_int lda, const float* b, + lapack_int ldb, float* c, lapack_int ldc, + float* scale ); +lapack_int LAPACKE_dtrsyl( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const double* a, lapack_int lda, const double* b, + lapack_int ldb, double* c, lapack_int ldc, + double* scale ); +lapack_int LAPACKE_ctrsyl( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* c, lapack_int ldc, + float* scale ); +lapack_int LAPACKE_ztrsyl( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* c, lapack_int ldc, + double* scale ); + +lapack_int LAPACKE_strtri( int matrix_layout, char uplo, char diag, lapack_int n, + float* a, lapack_int lda ); +lapack_int LAPACKE_dtrtri( int matrix_layout, char uplo, char diag, lapack_int n, + double* a, lapack_int lda ); +lapack_int LAPACKE_ctrtri( int matrix_layout, char uplo, char diag, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_ztrtri( int matrix_layout, char uplo, char diag, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_strtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, float* b, lapack_int ldb ); +lapack_int LAPACKE_dtrtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, double* b, lapack_int ldb ); +lapack_int LAPACKE_ctrtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztrtrs( int matrix_layout, char uplo, char trans, char diag, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_strttf( int matrix_layout, char transr, char uplo, + lapack_int n, const float* a, lapack_int lda, + float* arf ); +lapack_int LAPACKE_dtrttf( int matrix_layout, char transr, char uplo, + lapack_int n, const double* a, lapack_int lda, + double* arf ); +lapack_int LAPACKE_ctrttf( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* arf ); +lapack_int LAPACKE_ztrttf( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* arf ); + +lapack_int LAPACKE_strttp( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float* ap ); +lapack_int LAPACKE_dtrttp( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double* ap ); +lapack_int LAPACKE_ctrttp( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* ap ); +lapack_int LAPACKE_ztrttp( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* ap ); + +lapack_int LAPACKE_stzrzf( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau ); +lapack_int LAPACKE_dtzrzf( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau ); +lapack_int LAPACKE_ctzrzf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau ); +lapack_int LAPACKE_ztzrzf( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau ); + +lapack_int LAPACKE_cungbr( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zungbr( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cunghr( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zunghr( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cunglq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zunglq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cungql( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zungql( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cungqr( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zungqr( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cungrq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau ); +lapack_int LAPACKE_zungrq( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau ); + +lapack_int LAPACKE_cungtr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau ); +lapack_int LAPACKE_zungtr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau ); + +lapack_int LAPACKE_cunmbr( int matrix_layout, char vect, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmbr( int matrix_layout, char vect, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmhr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmhr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmlq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmlq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmql( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmql( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmqr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmqr( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmrq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmrq( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmrz( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmrz( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cunmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zunmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_cupgtr( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_complex_float* tau, + lapack_complex_float* q, lapack_int ldq ); +lapack_int LAPACKE_zupgtr( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_complex_double* tau, + lapack_complex_double* q, lapack_int ldq ); + +lapack_int LAPACKE_cupmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, + const lapack_complex_float* ap, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc ); +lapack_int LAPACKE_zupmtr( int matrix_layout, char side, char uplo, char trans, + lapack_int m, lapack_int n, + const lapack_complex_double* ap, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc ); + +lapack_int LAPACKE_sbdsdc_work( int matrix_layout, char uplo, char compq, + lapack_int n, float* d, float* e, float* u, + lapack_int ldu, float* vt, lapack_int ldvt, + float* q, lapack_int* iq, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dbdsdc_work( int matrix_layout, char uplo, char compq, + lapack_int n, double* d, double* e, double* u, + lapack_int ldu, double* vt, lapack_int ldvt, + double* q, lapack_int* iq, double* work, + lapack_int* iwork ); + +lapack_int LAPACKE_sbdsvdx_work( int matrix_layout, char uplo, char jobz, char range, + lapack_int n, float* d, float* e, + lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, float* z, lapack_int ldz, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dbdsvdx_work( int matrix_layout, char uplo, char jobz, char range, + lapack_int n, double* d, double* e, + lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, double* z, lapack_int ldz, + double* work, lapack_int* iwork ); + +lapack_int LAPACKE_sbdsqr_work( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + float* d, float* e, float* vt, lapack_int ldvt, + float* u, lapack_int ldu, float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_dbdsqr_work( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + double* d, double* e, double* vt, + lapack_int ldvt, double* u, lapack_int ldu, + double* c, lapack_int ldc, double* work ); +lapack_int LAPACKE_cbdsqr_work( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + float* d, float* e, lapack_complex_float* vt, + lapack_int ldvt, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_zbdsqr_work( int matrix_layout, char uplo, lapack_int n, + lapack_int ncvt, lapack_int nru, lapack_int ncc, + double* d, double* e, lapack_complex_double* vt, + lapack_int ldvt, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* c, + lapack_int ldc, double* work ); + +lapack_int LAPACKE_sdisna_work( char job, lapack_int m, lapack_int n, + const float* d, float* sep ); +lapack_int LAPACKE_ddisna_work( char job, lapack_int m, lapack_int n, + const double* d, double* sep ); + +lapack_int LAPACKE_sgbbrd_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, float* ab, lapack_int ldab, + float* d, float* e, float* q, lapack_int ldq, + float* pt, lapack_int ldpt, float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_dgbbrd_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, double* ab, lapack_int ldab, + double* d, double* e, double* q, lapack_int ldq, + double* pt, lapack_int ldpt, double* c, + lapack_int ldc, double* work ); +lapack_int LAPACKE_cgbbrd_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, lapack_complex_float* ab, + lapack_int ldab, float* d, float* e, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* pt, lapack_int ldpt, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgbbrd_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int ncc, lapack_int kl, + lapack_int ku, lapack_complex_double* ab, + lapack_int ldab, double* d, double* e, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* pt, lapack_int ldpt, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgbcon_work( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, const lapack_int* ipiv, + float anorm, float* rcond, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgbcon_work( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, const lapack_int* ipiv, + double anorm, double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgbcon_work( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgbcon_work( int matrix_layout, char norm, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, + lapack_int ldab, const lapack_int* ipiv, + double anorm, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgbequ_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, float* r, float* c, + float* rowcnd, float* colcnd, float* amax ); +lapack_int LAPACKE_dgbequ_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); +lapack_int LAPACKE_cgbequ_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, lapack_int ldab, + float* r, float* c, float* rowcnd, + float* colcnd, float* amax ); +lapack_int LAPACKE_zgbequ_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); + +lapack_int LAPACKE_sgbequb_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* ab, + lapack_int ldab, float* r, float* c, + float* rowcnd, float* colcnd, float* amax ); +lapack_int LAPACKE_dgbequb_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); +lapack_int LAPACKE_cgbequb_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float* ab, + lapack_int ldab, float* r, float* c, + float* rowcnd, float* colcnd, float* amax ); +lapack_int LAPACKE_zgbequb_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double* ab, + lapack_int ldab, double* r, double* c, + double* rowcnd, double* colcnd, double* amax ); + +lapack_int LAPACKE_sgbrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const float* ab, lapack_int ldab, + const float* afb, lapack_int ldafb, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgbrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const double* ab, lapack_int ldab, + const double* afb, lapack_int ldafb, + const lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgbrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* afb, + lapack_int ldafb, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgbrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, + const lapack_complex_double* afb, + lapack_int ldafb, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgbrfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const float* ab, + lapack_int ldab, const float* afb, + lapack_int ldafb, const lapack_int* ipiv, + const float* r, const float* c, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgbrfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, const double* ab, + lapack_int ldab, const double* afb, + lapack_int ldafb, const lapack_int* ipiv, + const double* r, const double* c, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgbrfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, + const lapack_complex_float* ab, + lapack_int ldab, + const lapack_complex_float* afb, + lapack_int ldafb, const lapack_int* ipiv, + const float* r, const float* c, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgbrfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, + const lapack_complex_double* afb, + lapack_int ldafb, const lapack_int* ipiv, + const double* r, const double* c, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sgbsv_work( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, float* ab, + lapack_int ldab, lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgbsv_work( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, double* ab, + lapack_int ldab, lapack_int* ipiv, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cgbsv_work( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgbsv_work( int matrix_layout, lapack_int n, lapack_int kl, + lapack_int ku, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sgbsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, float* ab, lapack_int ldab, + float* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, float* r, float* c, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dgbsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, double* ab, lapack_int ldab, + double* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, double* r, double* c, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cgbsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + float* r, float* c, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgbsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* afb, + lapack_int ldafb, lapack_int* ipiv, char* equed, + double* r, double* c, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sgbsvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, float* ab, lapack_int ldab, + float* afb, lapack_int ldafb, lapack_int* ipiv, + char* equed, float* r, float* c, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgbsvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, double* ab, lapack_int ldab, + double* afb, lapack_int ldafb, + lapack_int* ipiv, char* equed, double* r, + double* c, double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgbsvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* afb, + lapack_int ldafb, lapack_int* ipiv, + char* equed, float* r, float* c, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgbsvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int kl, lapack_int ku, + lapack_int nrhs, lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* afb, + lapack_int ldafb, lapack_int* ipiv, + char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sgbtrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, float* ab, + lapack_int ldab, lapack_int* ipiv ); +lapack_int LAPACKE_dgbtrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, double* ab, + lapack_int ldab, lapack_int* ipiv ); +lapack_int LAPACKE_cgbtrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + lapack_complex_float* ab, lapack_int ldab, + lapack_int* ipiv ); +lapack_int LAPACKE_zgbtrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + lapack_complex_double* ab, lapack_int ldab, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgbtrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const float* ab, lapack_int ldab, + const lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgbtrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const double* ab, lapack_int ldab, + const lapack_int* ipiv, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cgbtrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgbtrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int kl, lapack_int ku, lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sgebak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const float* scale, lapack_int m, float* v, + lapack_int ldv ); +lapack_int LAPACKE_dgebak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const double* scale, lapack_int m, double* v, + lapack_int ldv ); +lapack_int LAPACKE_cgebak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const float* scale, lapack_int m, + lapack_complex_float* v, lapack_int ldv ); +lapack_int LAPACKE_zgebak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const double* scale, lapack_int m, + lapack_complex_double* v, lapack_int ldv ); + +lapack_int LAPACKE_sgebal_work( int matrix_layout, char job, lapack_int n, + float* a, lapack_int lda, lapack_int* ilo, + lapack_int* ihi, float* scale ); +lapack_int LAPACKE_dgebal_work( int matrix_layout, char job, lapack_int n, + double* a, lapack_int lda, lapack_int* ilo, + lapack_int* ihi, double* scale ); +lapack_int LAPACKE_cgebal_work( int matrix_layout, char job, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ilo, lapack_int* ihi, + float* scale ); +lapack_int LAPACKE_zgebal_work( int matrix_layout, char job, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ilo, lapack_int* ihi, + double* scale ); + +lapack_int LAPACKE_sgebrd_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* d, float* e, + float* tauq, float* taup, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dgebrd_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* d, double* e, + double* tauq, double* taup, double* work, + lapack_int lwork ); +lapack_int LAPACKE_cgebrd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + float* d, float* e, lapack_complex_float* tauq, + lapack_complex_float* taup, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgebrd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double* d, double* e, + lapack_complex_double* tauq, + lapack_complex_double* taup, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgecon_work( int matrix_layout, char norm, lapack_int n, + const float* a, lapack_int lda, float anorm, + float* rcond, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dgecon_work( int matrix_layout, char norm, lapack_int n, + const double* a, lapack_int lda, double anorm, + double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgecon_work( int matrix_layout, char norm, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float anorm, float* rcond, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgecon_work( int matrix_layout, char norm, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double anorm, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgeequ_work( int matrix_layout, lapack_int m, lapack_int n, + const float* a, lapack_int lda, float* r, + float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_dgeequ_work( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, double* r, + double* c, double* rowcnd, double* colcnd, + double* amax ); +lapack_int LAPACKE_cgeequ_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* r, float* c, float* rowcnd, + float* colcnd, float* amax ); +lapack_int LAPACKE_zgeequ_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* r, double* c, double* rowcnd, + double* colcnd, double* amax ); + +lapack_int LAPACKE_sgeequb_work( int matrix_layout, lapack_int m, lapack_int n, + const float* a, lapack_int lda, float* r, + float* c, float* rowcnd, float* colcnd, + float* amax ); +lapack_int LAPACKE_dgeequb_work( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, double* r, + double* c, double* rowcnd, double* colcnd, + double* amax ); +lapack_int LAPACKE_cgeequb_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* r, float* c, float* rowcnd, + float* colcnd, float* amax ); +lapack_int LAPACKE_zgeequb_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* r, double* c, double* rowcnd, + double* colcnd, double* amax ); + +lapack_int LAPACKE_sgees_work( int matrix_layout, char jobvs, char sort, + LAPACK_S_SELECT2 select, lapack_int n, float* a, + lapack_int lda, lapack_int* sdim, float* wr, + float* wi, float* vs, lapack_int ldvs, + float* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_dgees_work( int matrix_layout, char jobvs, char sort, + LAPACK_D_SELECT2 select, lapack_int n, double* a, + lapack_int lda, lapack_int* sdim, double* wr, + double* wi, double* vs, lapack_int ldvs, + double* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_cgees_work( int matrix_layout, char jobvs, char sort, + LAPACK_C_SELECT1 select, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* sdim, lapack_complex_float* w, + lapack_complex_float* vs, lapack_int ldvs, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_logical* bwork ); +lapack_int LAPACKE_zgees_work( int matrix_layout, char jobvs, char sort, + LAPACK_Z_SELECT1 select, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* sdim, lapack_complex_double* w, + lapack_complex_double* vs, lapack_int ldvs, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_logical* bwork ); + +lapack_int LAPACKE_sgeesx_work( int matrix_layout, char jobvs, char sort, + LAPACK_S_SELECT2 select, char sense, + lapack_int n, float* a, lapack_int lda, + lapack_int* sdim, float* wr, float* wi, + float* vs, lapack_int ldvs, float* rconde, + float* rcondv, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork, + lapack_logical* bwork ); +lapack_int LAPACKE_dgeesx_work( int matrix_layout, char jobvs, char sort, + LAPACK_D_SELECT2 select, char sense, + lapack_int n, double* a, lapack_int lda, + lapack_int* sdim, double* wr, double* wi, + double* vs, lapack_int ldvs, double* rconde, + double* rcondv, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork, + lapack_logical* bwork ); +lapack_int LAPACKE_cgeesx_work( int matrix_layout, char jobvs, char sort, + LAPACK_C_SELECT1 select, char sense, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_int* sdim, + lapack_complex_float* w, + lapack_complex_float* vs, lapack_int ldvs, + float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_logical* bwork ); +lapack_int LAPACKE_zgeesx_work( int matrix_layout, char jobvs, char sort, + LAPACK_Z_SELECT1 select, char sense, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_int* sdim, + lapack_complex_double* w, + lapack_complex_double* vs, lapack_int ldvs, + double* rconde, double* rcondv, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_logical* bwork ); + +lapack_int LAPACKE_sgeev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, float* a, lapack_int lda, + float* wr, float* wi, float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dgeev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, double* a, lapack_int lda, + double* wr, double* wi, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgeev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* w, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zgeev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* w, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_sgeevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, float* a, + lapack_int lda, float* wr, float* wi, float* vl, + lapack_int ldvl, float* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, float* scale, + float* abnrm, float* rconde, float* rcondv, + float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dgeevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, double* a, + lapack_int lda, double* wr, double* wi, + double* vl, lapack_int ldvl, double* vr, + lapack_int ldvr, lapack_int* ilo, + lapack_int* ihi, double* scale, double* abnrm, + double* rconde, double* rcondv, double* work, + lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_cgeevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* w, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, float* scale, + float* abnrm, float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zgeevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* w, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, double* scale, + double* abnrm, double* rconde, double* rcondv, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_sgehrd_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, float* a, lapack_int lda, + float* tau, float* work, lapack_int lwork ); +lapack_int LAPACKE_dgehrd_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, double* a, lapack_int lda, + double* tau, double* work, lapack_int lwork ); +lapack_int LAPACKE_cgehrd_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgehrd_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgejsv_work( int matrix_layout, char joba, char jobu, + char jobv, char jobr, char jobt, char jobp, + lapack_int m, lapack_int n, float* a, + lapack_int lda, float* sva, float* u, + lapack_int ldu, float* v, lapack_int ldv, + float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dgejsv_work( int matrix_layout, char joba, char jobu, + char jobv, char jobr, char jobt, char jobp, + lapack_int m, lapack_int n, double* a, + lapack_int lda, double* sva, double* u, + lapack_int ldu, double* v, lapack_int ldv, + double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_cgejsv_work( int matrix_layout, char joba, char jobu, + char jobv, char jobr, char jobt, char jobp, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, float* sva, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* cwork, lapack_int lwork, + float* work, lapack_int lrwork, + lapack_int* iwork ); +lapack_int LAPACKE_zgejsv_work( int matrix_layout, char joba, char jobu, + char jobv, char jobr, char jobt, char jobp, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda, double* sva, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* cwork, lapack_int lwork, + double* work, lapack_int lrwork, + lapack_int* iwork ); + +lapack_int LAPACKE_sgelq2_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work ); +lapack_int LAPACKE_dgelq2_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work ); +lapack_int LAPACKE_cgelq2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work ); +lapack_int LAPACKE_zgelq2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work ); + +lapack_int LAPACKE_sgelqf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgelqf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgelqf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgelqf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgels_work( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgels_work( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgels_work( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgels_work( int matrix_layout, char trans, lapack_int m, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgelsd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + float* b, lapack_int ldb, float* s, float rcond, + lapack_int* rank, float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dgelsd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* s, + double rcond, lapack_int* rank, double* work, + lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_cgelsd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int* iwork ); +lapack_int LAPACKE_zgelsd_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* s, double rcond, + lapack_int* rank, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int* iwork ); + +lapack_int LAPACKE_sgelss_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + float* b, lapack_int ldb, float* s, float rcond, + lapack_int* rank, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dgelss_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* s, + double rcond, lapack_int* rank, double* work, + lapack_int lwork ); +lapack_int LAPACKE_cgelss_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* s, float rcond, + lapack_int* rank, lapack_complex_float* work, + lapack_int lwork, float* rwork ); +lapack_int LAPACKE_zgelss_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double* s, double rcond, + lapack_int* rank, lapack_complex_double* work, + lapack_int lwork, double* rwork ); + +lapack_int LAPACKE_sgelsy_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + float* b, lapack_int ldb, lapack_int* jpvt, + float rcond, lapack_int* rank, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dgelsy_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, lapack_int* jpvt, + double rcond, lapack_int* rank, double* work, + lapack_int lwork ); +lapack_int LAPACKE_cgelsy_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_int* jpvt, float rcond, + lapack_int* rank, lapack_complex_float* work, + lapack_int lwork, float* rwork ); +lapack_int LAPACKE_zgelsy_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_int* jpvt, double rcond, + lapack_int* rank, lapack_complex_double* work, + lapack_int lwork, double* rwork ); + +lapack_int LAPACKE_sgeqlf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgeqlf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgeqlf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgeqlf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgeqp3_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* jpvt, + float* tau, float* work, lapack_int lwork ); +lapack_int LAPACKE_dgeqp3_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* jpvt, + double* tau, double* work, lapack_int lwork ); +lapack_int LAPACKE_cgeqp3_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zgeqp3_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_sgeqpf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* jpvt, + float* tau, float* work ); +lapack_int LAPACKE_dgeqpf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* jpvt, + double* tau, double* work ); +lapack_int LAPACKE_cgeqpf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_float* tau, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgeqpf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* jpvt, lapack_complex_double* tau, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgeqr2_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work ); +lapack_int LAPACKE_dgeqr2_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work ); +lapack_int LAPACKE_cgeqr2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work ); +lapack_int LAPACKE_zgeqr2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work ); + +lapack_int LAPACKE_sgeqrf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgeqrf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgeqrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgeqrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgeqrfp_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgeqrfp_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgeqrfp_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgeqrfp_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sgerfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgerfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cgerfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgerfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgerfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, + lapack_int ldaf, const lapack_int* ipiv, + const float* r, const float* c, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgerfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* r, const double* c, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgerfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const float* r, const float* c, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgerfsx_work( int matrix_layout, char trans, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* r, const double* c, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sgerqf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgerqf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgerqf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgerqf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m, + lapack_int n, float* a, lapack_int lda, + float* s, float* u, lapack_int ldu, float* vt, + lapack_int ldvt, float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m, + lapack_int n, double* a, lapack_int lda, + double* s, double* u, lapack_int ldu, + double* vt, lapack_int ldvt, double* work, + lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float* s, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* vt, lapack_int ldvt, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int* iwork ); +lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double* s, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* vt, lapack_int ldvt, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int* iwork ); + +lapack_int LAPACKE_sgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + float* a, lapack_int lda, lapack_int* ipiv, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + double* a, lapack_int lda, lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); +lapack_int LAPACKE_dsgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + double* a, lapack_int lda, lapack_int* ipiv, + double* b, lapack_int ldb, double* x, + lapack_int ldx, double* work, float* swork, + lapack_int* iter ); +lapack_int LAPACKE_zcgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, lapack_complex_double* work, + lapack_complex_float* swork, double* rwork, + lapack_int* iter ); + +lapack_int LAPACKE_sgesvd_work( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, float* a, + lapack_int lda, float* s, float* u, + lapack_int ldu, float* vt, lapack_int ldvt, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgesvd_work( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, double* a, + lapack_int lda, double* s, double* u, + lapack_int ldu, double* vt, lapack_int ldvt, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgesvd_work( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + float* s, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* vt, + lapack_int ldvt, lapack_complex_float* work, + lapack_int lwork, float* rwork ); +lapack_int LAPACKE_zgesvd_work( int matrix_layout, char jobu, char jobvt, + lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double* s, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* vt, + lapack_int ldvt, lapack_complex_double* work, + lapack_int lwork, double* rwork ); + +lapack_int LAPACKE_sgesvdx_work( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, float* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, float* u, lapack_int ldu, + float* vt, lapack_int ldvt, + float* work, lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_dgesvdx_work( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, double* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, double* u, lapack_int ldu, + double* vt, lapack_int ldvt, + double* work, lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_cgesvdx_work( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + float* s, lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* vt, lapack_int ldvt, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int* iwork ); +lapack_int LAPACKE_zgesvdx_work( int matrix_layout, char jobu, char jobvt, char range, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_int vl, lapack_int vu, + lapack_int il, lapack_int iu, lapack_int ns, + double* s, lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* vt, lapack_int ldvt, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int* iwork ); + +lapack_int LAPACKE_sgesvj_work( int matrix_layout, char joba, char jobu, + char jobv, lapack_int m, lapack_int n, float* a, + lapack_int lda, float* sva, lapack_int mv, + float* v, lapack_int ldv, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dgesvj_work( int matrix_layout, char joba, char jobu, + char jobv, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* sva, + lapack_int mv, double* v, lapack_int ldv, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgesvj_work( int matrix_layout, char joba, char jobu, + char jobv, lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda, float* sva, lapack_int mv, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* cwork, lapack_int lwork, + float* rwork,lapack_int lrwork ); +lapack_int LAPACKE_zgesvj_work( int matrix_layout, char joba, char jobu, + char jobv, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, double* sva, + lapack_int mv, lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* cwork, lapack_int lwork, + double* rwork, lapack_int lrwork ); + +lapack_int LAPACKE_sgesvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, + float* c, float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dgesvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, + double* c, double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, double* work, lapack_int* iwork ); +lapack_int LAPACKE_cgesvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, + float* c, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zgesvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, + double* c, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sgesvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, + float* c, float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgesvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, + double* c, double* b, lapack_int ldb, + double* x, lapack_int ldx, double* rcond, + double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgesvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* r, + float* c, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgesvxx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* r, + double* c, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgetf2_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetf2_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetf2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetf2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetrf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetrf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetrf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetrf2_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dgetrf2_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_cgetrf2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zgetrf2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_sgetri_work( int matrix_layout, lapack_int n, float* a, + lapack_int lda, const lapack_int* ipiv, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgetri_work( int matrix_layout, lapack_int n, double* a, + lapack_int lda, const lapack_int* ipiv, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgetri_work( int matrix_layout, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgetri_work( int matrix_layout, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgetrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgetrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cgetrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zgetrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sggbak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const float* lscale, const float* rscale, + lapack_int m, float* v, lapack_int ldv ); +lapack_int LAPACKE_dggbak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const double* lscale, const double* rscale, + lapack_int m, double* v, lapack_int ldv ); +lapack_int LAPACKE_cggbak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const float* lscale, const float* rscale, + lapack_int m, lapack_complex_float* v, + lapack_int ldv ); +lapack_int LAPACKE_zggbak_work( int matrix_layout, char job, char side, + lapack_int n, lapack_int ilo, lapack_int ihi, + const double* lscale, const double* rscale, + lapack_int m, lapack_complex_double* v, + lapack_int ldv ); + +lapack_int LAPACKE_sggbal_work( int matrix_layout, char job, lapack_int n, + float* a, lapack_int lda, float* b, + lapack_int ldb, lapack_int* ilo, + lapack_int* ihi, float* lscale, float* rscale, + float* work ); +lapack_int LAPACKE_dggbal_work( int matrix_layout, char job, lapack_int n, + double* a, lapack_int lda, double* b, + lapack_int ldb, lapack_int* ilo, + lapack_int* ihi, double* lscale, double* rscale, + double* work ); +lapack_int LAPACKE_cggbal_work( int matrix_layout, char job, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale, float* work ); +lapack_int LAPACKE_zggbal_work( int matrix_layout, char job, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* ilo, lapack_int* ihi, + double* lscale, double* rscale, double* work ); + +lapack_int LAPACKE_sgges_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_S_SELECT3 selctg, lapack_int n, + float* a, lapack_int lda, float* b, + lapack_int ldb, lapack_int* sdim, float* alphar, + float* alphai, float* beta, float* vsl, + lapack_int ldvsl, float* vsr, lapack_int ldvsr, + float* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_dgges_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_D_SELECT3 selctg, lapack_int n, + double* a, lapack_int lda, double* b, + lapack_int ldb, lapack_int* sdim, double* alphar, + double* alphai, double* beta, double* vsl, + lapack_int ldvsl, double* vsr, lapack_int ldvsr, + double* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_cgges_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_C_SELECT2 selctg, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int ldvsl, + lapack_complex_float* vsr, lapack_int ldvsr, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_logical* bwork ); +lapack_int LAPACKE_zgges_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_logical* bwork ); + +lapack_int LAPACKE_sgges3_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_S_SELECT3 selctg, + lapack_int n, + float* a, lapack_int lda, + float* b, lapack_int ldb, lapack_int* sdim, + float* alphar, float* alphai, float* beta, + float* vsl, lapack_int ldvsl, + float* vsr, lapack_int ldvsr, + float* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_dgges3_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_D_SELECT3 selctg, + lapack_int n, + double* a, lapack_int lda, + double* b, lapack_int ldb, lapack_int* sdim, + double* alphar, double* alphai, double* beta, + double* vsl, lapack_int ldvsl, + double* vsr, lapack_int ldvsr, + double* work, lapack_int lwork, + lapack_logical* bwork ); +lapack_int LAPACKE_cgges3_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_C_SELECT2 selctg, + lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int ldvsl, + lapack_complex_float* vsr, lapack_int ldvsr, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_logical* bwork ); +lapack_int LAPACKE_zgges3_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_Z_SELECT2 selctg, + lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_int* sdim, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_logical* bwork ); + +lapack_int LAPACKE_sggesx_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_S_SELECT3 selctg, char sense, + lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, lapack_int* sdim, + float* alphar, float* alphai, float* beta, + float* vsl, lapack_int ldvsl, float* vsr, + lapack_int ldvsr, float* rconde, float* rcondv, + float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork, + lapack_logical* bwork ); +lapack_int LAPACKE_dggesx_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_D_SELECT3 selctg, char sense, + lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, lapack_int* sdim, + double* alphar, double* alphai, double* beta, + double* vsl, lapack_int ldvsl, double* vsr, + lapack_int ldvsr, double* rconde, + double* rcondv, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork, + lapack_logical* bwork ); +lapack_int LAPACKE_cggesx_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_C_SELECT2 selctg, char sense, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_int* sdim, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int ldvsl, + lapack_complex_float* vsr, lapack_int ldvsr, + float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int* iwork, + lapack_int liwork, lapack_logical* bwork ); +lapack_int LAPACKE_zggesx_work( int matrix_layout, char jobvsl, char jobvsr, + char sort, LAPACK_Z_SELECT2 selctg, char sense, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_int* sdim, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int ldvsl, + lapack_complex_double* vsr, lapack_int ldvsr, + double* rconde, double* rcondv, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int* iwork, + lapack_int liwork, lapack_logical* bwork ); + +lapack_int LAPACKE_sggev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, float* a, lapack_int lda, float* b, + lapack_int ldb, float* alphar, float* alphai, + float* beta, float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dggev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, double* alphar, + double* alphai, double* beta, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cggev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zggev_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_sggev3_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + float* a, lapack_int lda, + float* b, lapack_int ldb, + float* alphar, float* alphai, float* beta, + float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dggev3_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + double* a, lapack_int lda, + double* b, lapack_int ldb, + double* alphar, double* alphai, double* beta, + double* vl, lapack_int ldvl, + double* vr, lapack_int ldvr, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cggev3_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zggev3_work( int matrix_layout, char jobvl, char jobvr, + lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_sggevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* alphar, float* alphai, float* beta, + float* vl, lapack_int ldvl, float* vr, + lapack_int ldvr, lapack_int* ilo, + lapack_int* ihi, float* lscale, float* rscale, + float* abnrm, float* bbnrm, float* rconde, + float* rcondv, float* work, lapack_int lwork, + lapack_int* iwork, lapack_logical* bwork ); +lapack_int LAPACKE_dggevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* alphar, double* alphai, double* beta, + double* vl, lapack_int ldvl, double* vr, + lapack_int ldvr, lapack_int* ilo, + lapack_int* ihi, double* lscale, double* rscale, + double* abnrm, double* bbnrm, double* rconde, + double* rcondv, double* work, lapack_int lwork, + lapack_int* iwork, lapack_logical* bwork ); +lapack_int LAPACKE_cggevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale, float* abnrm, float* bbnrm, + float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int* iwork, + lapack_logical* bwork ); +lapack_int LAPACKE_zggevx_work( int matrix_layout, char balanc, char jobvl, + char jobvr, char sense, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int* ilo, lapack_int* ihi, + double* lscale, double* rscale, double* abnrm, + double* bbnrm, double* rconde, double* rcondv, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int* iwork, + lapack_logical* bwork ); + +lapack_int LAPACKE_sggglm_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, float* a, lapack_int lda, + float* b, lapack_int ldb, float* d, float* x, + float* y, float* work, lapack_int lwork ); +lapack_int LAPACKE_dggglm_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, double* a, lapack_int lda, + double* b, lapack_int ldb, double* d, double* x, + double* y, double* work, lapack_int lwork ); +lapack_int LAPACKE_cggglm_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* d, + lapack_complex_float* x, + lapack_complex_float* y, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zggglm_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* d, + lapack_complex_double* x, + lapack_complex_double* y, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgghrd_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* a, lapack_int lda, float* b, + lapack_int ldb, float* q, lapack_int ldq, + float* z, lapack_int ldz ); +lapack_int LAPACKE_dgghrd_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* a, lapack_int lda, double* b, + lapack_int ldb, double* q, lapack_int ldq, + double* z, lapack_int ldz ); +lapack_int LAPACKE_cgghrd_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz ); +lapack_int LAPACKE_zgghrd_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz ); + +lapack_int LAPACKE_sgghd3_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* a, lapack_int lda, + float* b, lapack_int ldb, + float* q, lapack_int ldq, + float* z, lapack_int ldz, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dgghd3_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* a, lapack_int lda, + double* b, lapack_int ldb, + double* q, lapack_int ldq, + double* z, lapack_int ldz, + double* work, lapack_int lwork ); +lapack_int LAPACKE_cgghd3_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgghd3_work( int matrix_layout, char compq, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sgglse_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, float* a, lapack_int lda, + float* b, lapack_int ldb, float* c, float* d, + float* x, float* work, lapack_int lwork ); +lapack_int LAPACKE_dgglse_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, double* a, lapack_int lda, + double* b, lapack_int ldb, double* c, double* d, + double* x, double* work, lapack_int lwork ); +lapack_int LAPACKE_cgglse_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* c, + lapack_complex_float* d, + lapack_complex_float* x, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zgglse_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* c, + lapack_complex_double* d, + lapack_complex_double* x, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sggqrf_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, float* a, lapack_int lda, + float* taua, float* b, lapack_int ldb, + float* taub, float* work, lapack_int lwork ); +lapack_int LAPACKE_dggqrf_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, double* a, lapack_int lda, + double* taua, double* b, lapack_int ldb, + double* taub, double* work, lapack_int lwork ); +lapack_int LAPACKE_cggqrf_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* taua, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* taub, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zggqrf_work( int matrix_layout, lapack_int n, lapack_int m, + lapack_int p, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* taua, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* taub, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sggrqf_work( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, float* a, lapack_int lda, + float* taua, float* b, lapack_int ldb, + float* taub, float* work, lapack_int lwork ); +lapack_int LAPACKE_dggrqf_work( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, double* a, lapack_int lda, + double* taua, double* b, lapack_int ldb, + double* taub, double* work, lapack_int lwork ); +lapack_int LAPACKE_cggrqf_work( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* taua, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* taub, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zggrqf_work( int matrix_layout, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* taua, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* taub, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sggsvd_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + float* a, lapack_int lda, float* b, + lapack_int ldb, float* alpha, float* beta, + float* u, lapack_int ldu, float* v, + lapack_int ldv, float* q, lapack_int ldq, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dggsvd_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + double* a, lapack_int lda, double* b, + lapack_int ldb, double* alpha, double* beta, + double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cggsvd_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float* alpha, float* beta, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* work, float* rwork, + lapack_int* iwork ); +lapack_int LAPACKE_zggsvd_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* alpha, double* beta, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* work, double* rwork, + lapack_int* iwork ); + +lapack_int LAPACKE_sggsvd3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + float* a, lapack_int lda, float* b, + lapack_int ldb, float* alpha, float* beta, + float* u, lapack_int ldu, float* v, + lapack_int ldv, float* q, lapack_int ldq, + float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dggsvd3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + double* a, lapack_int lda, double* b, + lapack_int ldb, double* alpha, double* beta, + double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq, + double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_cggsvd3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float* alpha, float* beta, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int* iwork ); +lapack_int LAPACKE_zggsvd3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int n, + lapack_int p, lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* alpha, double* beta, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int* iwork ); + +lapack_int LAPACKE_sggsvp_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, + float* u, lapack_int ldu, float* v, + lapack_int ldv, float* q, lapack_int ldq, + lapack_int* iwork, float* tau, float* work ); +lapack_int LAPACKE_dggsvp_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, double tola, + double tolb, lapack_int* k, lapack_int* l, + double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq, + lapack_int* iwork, double* tau, double* work ); +lapack_int LAPACKE_cggsvp_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float tola, float tolb, + lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq, + lapack_int* iwork, float* rwork, + lapack_complex_float* tau, + lapack_complex_float* work ); +lapack_int LAPACKE_zggsvp_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double tola, double tolb, + lapack_int* k, lapack_int* l, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_int* iwork, double* rwork, + lapack_complex_double* tau, + lapack_complex_double* work ); + +lapack_int LAPACKE_sggsvp3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, float* a, lapack_int lda, + float* b, lapack_int ldb, float tola, + float tolb, lapack_int* k, lapack_int* l, + float* u, lapack_int ldu, float* v, + lapack_int ldv, float* q, lapack_int ldq, + lapack_int* iwork, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dggsvp3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, double* a, lapack_int lda, + double* b, lapack_int ldb, double tola, + double tolb, lapack_int* k, lapack_int* l, + double* u, lapack_int ldu, double* v, + lapack_int ldv, double* q, lapack_int ldq, + lapack_int* iwork, double* tau, double* work, + lapack_int lwork ); +lapack_int LAPACKE_cggsvp3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float tola, float tolb, + lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int ldu, + lapack_complex_float* v, lapack_int ldv, + lapack_complex_float* q, lapack_int ldq, + lapack_int* iwork, float* rwork, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zggsvp3_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, double tola, double tolb, + lapack_int* k, lapack_int* l, + lapack_complex_double* u, lapack_int ldu, + lapack_complex_double* v, lapack_int ldv, + lapack_complex_double* q, lapack_int ldq, + lapack_int* iwork, double* rwork, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_sgtcon_work( char norm, lapack_int n, const float* dl, + const float* d, const float* du, + const float* du2, const lapack_int* ipiv, + float anorm, float* rcond, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgtcon_work( char norm, lapack_int n, const double* dl, + const double* d, const double* du, + const double* du2, const lapack_int* ipiv, + double anorm, double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgtcon_work( char norm, lapack_int n, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work ); +lapack_int LAPACKE_zgtcon_work( char norm, lapack_int n, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, + const lapack_int* ipiv, double anorm, + double* rcond, lapack_complex_double* work ); + +lapack_int LAPACKE_sgtrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* dl, + const float* d, const float* du, + const float* dlf, const float* df, + const float* duf, const float* du2, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dgtrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* dl, + const double* d, const double* du, + const double* dlf, const double* df, + const double* duf, const double* du2, + const lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cgtrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* dlf, + const lapack_complex_float* df, + const lapack_complex_float* duf, + const lapack_complex_float* du2, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgtrfs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* dlf, + const lapack_complex_double* df, + const lapack_complex_double* duf, + const lapack_complex_double* du2, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgtsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + float* dl, float* d, float* du, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dgtsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + double* dl, double* d, double* du, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cgtsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_float* dl, + lapack_complex_float* d, + lapack_complex_float* du, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zgtsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + lapack_complex_double* dl, + lapack_complex_double* d, + lapack_complex_double* du, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sgtsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, const float* dl, + const float* d, const float* du, float* dlf, + float* df, float* duf, float* du2, + lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dgtsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, const double* dl, + const double* d, const double* du, double* dlf, + double* df, double* duf, double* du2, + lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cgtsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + lapack_complex_float* dlf, + lapack_complex_float* df, + lapack_complex_float* duf, + lapack_complex_float* du2, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zgtsvx_work( int matrix_layout, char fact, char trans, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + lapack_complex_double* dlf, + lapack_complex_double* df, + lapack_complex_double* duf, + lapack_complex_double* du2, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sgttrf_work( lapack_int n, float* dl, float* d, float* du, + float* du2, lapack_int* ipiv ); +lapack_int LAPACKE_dgttrf_work( lapack_int n, double* dl, double* d, double* du, + double* du2, lapack_int* ipiv ); +lapack_int LAPACKE_cgttrf_work( lapack_int n, lapack_complex_float* dl, + lapack_complex_float* d, + lapack_complex_float* du, + lapack_complex_float* du2, lapack_int* ipiv ); +lapack_int LAPACKE_zgttrf_work( lapack_int n, lapack_complex_double* dl, + lapack_complex_double* d, + lapack_complex_double* du, + lapack_complex_double* du2, lapack_int* ipiv ); + +lapack_int LAPACKE_sgttrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const float* dl, + const float* d, const float* du, + const float* du2, const lapack_int* ipiv, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dgttrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const double* dl, + const double* d, const double* du, + const double* du2, const lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cgttrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zgttrs_work( int matrix_layout, char trans, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, + const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chbev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_float* ab, lapack_int ldab, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zhbev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_double* ab, lapack_int ldab, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chbevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_float* ab, lapack_int ldab, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zhbevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_double* ab, lapack_int ldab, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_chbevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int kd, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* q, lapack_int ldq, + float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + float* rwork, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_zhbevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int kd, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* q, lapack_int ldq, + double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + double* rwork, lapack_int* iwork, + lapack_int* ifail ); + +lapack_int LAPACKE_chbgst_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* bb, lapack_int ldbb, + lapack_complex_float* x, lapack_int ldx, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zhbgst_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + const lapack_complex_double* bb, + lapack_int ldbb, lapack_complex_double* x, + lapack_int ldx, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chbgv_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* bb, lapack_int ldbb, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zhbgv_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* bb, lapack_int ldbb, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chbgvd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* bb, lapack_int ldbb, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zhbgvd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* bb, lapack_int ldbb, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_chbgvx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int ka, + lapack_int kb, lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* bb, + lapack_int ldbb, lapack_complex_float* q, + lapack_int ldq, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_zhbgvx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int ka, + lapack_int kb, lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* bb, + lapack_int ldbb, lapack_complex_double* q, + lapack_int ldq, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_chbtrd_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_float* ab, lapack_int ldab, + float* d, float* e, lapack_complex_float* q, + lapack_int ldq, lapack_complex_float* work ); +lapack_int LAPACKE_zhbtrd_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int kd, + lapack_complex_double* ab, lapack_int ldab, + double* d, double* e, lapack_complex_double* q, + lapack_int ldq, lapack_complex_double* work ); + +lapack_int LAPACKE_checon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work ); +lapack_int LAPACKE_zhecon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond, lapack_complex_double* work ); + +lapack_int LAPACKE_cheequb_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax, + lapack_complex_float* work ); +lapack_int LAPACKE_zheequb_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax, + lapack_complex_double* work ); + +lapack_int LAPACKE_cheev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float* w, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zheev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double* w, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_cheevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, float* w, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_zheevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, double* w, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_cheevr_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_int* isuppz, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_zheevr_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_int* isuppz, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_cheevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_zheevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_chegst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhegst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_chegv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb, float* w, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zhegv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* w, lapack_complex_double* work, + lapack_int lwork, double* rwork ); + +lapack_int LAPACKE_chegvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float* w, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zhegvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double* w, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_chegvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_zhegvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_cherfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zherfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_cherfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const float* s, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zherfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* s, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chesv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zhesv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_chesvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + lapack_int lwork, float* rwork ); +lapack_int LAPACKE_zhesvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_chesvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zhesvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chetrd_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + float* d, float* e, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zhetrd_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + double* d, double* e, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_chetrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* work, + lapack_int lwork ); +lapack_int LAPACKE_zhetrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_chetri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work ); +lapack_int LAPACKE_zhetri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work ); + +lapack_int LAPACKE_chetrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zhetrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chfrk_work( int matrix_layout, char transr, char uplo, + char trans, lapack_int n, lapack_int k, + float alpha, const lapack_complex_float* a, + lapack_int lda, float beta, + lapack_complex_float* c ); +lapack_int LAPACKE_zhfrk_work( int matrix_layout, char transr, char uplo, + char trans, lapack_int n, lapack_int k, + double alpha, const lapack_complex_double* a, + lapack_int lda, double beta, + lapack_complex_double* c ); + +lapack_int LAPACKE_shgeqz_work( int matrix_layout, char job, char compq, + char compz, lapack_int n, lapack_int ilo, + lapack_int ihi, float* h, lapack_int ldh, + float* t, lapack_int ldt, float* alphar, + float* alphai, float* beta, float* q, + lapack_int ldq, float* z, lapack_int ldz, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dhgeqz_work( int matrix_layout, char job, char compq, + char compz, lapack_int n, lapack_int ilo, + lapack_int ihi, double* h, lapack_int ldh, + double* t, lapack_int ldt, double* alphar, + double* alphai, double* beta, double* q, + lapack_int ldq, double* z, lapack_int ldz, + double* work, lapack_int lwork ); +lapack_int LAPACKE_chgeqz_work( int matrix_layout, char job, char compq, + char compz, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_float* h, + lapack_int ldh, lapack_complex_float* t, + lapack_int ldt, lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, lapack_int lwork, + float* rwork ); +lapack_int LAPACKE_zhgeqz_work( int matrix_layout, char job, char compq, + char compz, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_double* h, + lapack_int ldh, lapack_complex_double* t, + lapack_int ldt, lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_chpcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work ); +lapack_int LAPACKE_zhpcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_int* ipiv, double anorm, + double* rcond, lapack_complex_double* work ); + +lapack_int LAPACKE_chpev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_float* ap, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zhpev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_double* ap, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_chpevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_float* ap, + float* w, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zhpevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_complex_double* ap, + double* w, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_chpevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_float* ap, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_zhpevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, + lapack_complex_double* ap, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_chpgst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_float* ap, + const lapack_complex_float* bp ); +lapack_int LAPACKE_zhpgst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, lapack_complex_double* ap, + const lapack_complex_double* bp ); + +lapack_int LAPACKE_chpgv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_float* ap, + lapack_complex_float* bp, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zhpgv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_double* ap, + lapack_complex_double* bp, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_chpgvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_float* ap, + lapack_complex_float* bp, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_zhpgvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, + lapack_complex_double* ap, + lapack_complex_double* bp, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int lrwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_chpgvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_float* ap, + lapack_complex_float* bp, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_zhpgvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, + lapack_complex_double* ap, + lapack_complex_double* bp, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_chprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zhprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_chpsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhpsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_chpsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + lapack_complex_float* afp, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zhpsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + lapack_complex_double* afp, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_chptrd_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, float* d, float* e, + lapack_complex_float* tau ); +lapack_int LAPACKE_zhptrd_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, double* d, double* e, + lapack_complex_double* tau ); + +lapack_int LAPACKE_chptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, lapack_int* ipiv ); +lapack_int LAPACKE_zhptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, lapack_int* ipiv ); + +lapack_int LAPACKE_chptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, + const lapack_int* ipiv, + lapack_complex_float* work ); +lapack_int LAPACKE_zhptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, + const lapack_int* ipiv, + lapack_complex_double* work ); + +lapack_int LAPACKE_chptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zhptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_shsein_work( int matrix_layout, char job, char eigsrc, + char initv, lapack_logical* select, + lapack_int n, const float* h, lapack_int ldh, + float* wr, const float* wi, float* vl, + lapack_int ldvl, float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, float* work, + lapack_int* ifaill, lapack_int* ifailr ); +lapack_int LAPACKE_dhsein_work( int matrix_layout, char job, char eigsrc, + char initv, lapack_logical* select, + lapack_int n, const double* h, lapack_int ldh, + double* wr, const double* wi, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, double* work, + lapack_int* ifaill, lapack_int* ifailr ); +lapack_int LAPACKE_chsein_work( int matrix_layout, char job, char eigsrc, + char initv, const lapack_logical* select, + lapack_int n, const lapack_complex_float* h, + lapack_int ldh, lapack_complex_float* w, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_float* work, float* rwork, + lapack_int* ifaill, lapack_int* ifailr ); +lapack_int LAPACKE_zhsein_work( int matrix_layout, char job, char eigsrc, + char initv, const lapack_logical* select, + lapack_int n, const lapack_complex_double* h, + lapack_int ldh, lapack_complex_double* w, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_double* work, double* rwork, + lapack_int* ifaill, lapack_int* ifailr ); + +lapack_int LAPACKE_shseqr_work( int matrix_layout, char job, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + float* h, lapack_int ldh, float* wr, float* wi, + float* z, lapack_int ldz, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dhseqr_work( int matrix_layout, char job, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + double* h, lapack_int ldh, double* wr, + double* wi, double* z, lapack_int ldz, + double* work, lapack_int lwork ); +lapack_int LAPACKE_chseqr_work( int matrix_layout, char job, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_float* h, lapack_int ldh, + lapack_complex_float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zhseqr_work( int matrix_layout, char job, char compz, + lapack_int n, lapack_int ilo, lapack_int ihi, + lapack_complex_double* h, lapack_int ldh, + lapack_complex_double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_clacgv_work( lapack_int n, lapack_complex_float* x, + lapack_int incx ); +lapack_int LAPACKE_zlacgv_work( lapack_int n, lapack_complex_double* x, + lapack_int incx ); + +lapack_int LAPACKE_slacn2_work( lapack_int n, float* v, float* x, + lapack_int* isgn, float* est, lapack_int* kase, + lapack_int* isave ); +lapack_int LAPACKE_dlacn2_work( lapack_int n, double* v, double* x, + lapack_int* isgn, double* est, lapack_int* kase, + lapack_int* isave ); +lapack_int LAPACKE_clacn2_work( lapack_int n, lapack_complex_float* v, + lapack_complex_float* x, + float* est, lapack_int* kase, + lapack_int* isave ); +lapack_int LAPACKE_zlacn2_work( lapack_int n, lapack_complex_double* v, + lapack_complex_double* x, + double* est, lapack_int* kase, + lapack_int* isave ); + +lapack_int LAPACKE_slacpy_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const float* a, lapack_int lda, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dlacpy_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const double* a, lapack_int lda, + double* b, lapack_int ldb ); +lapack_int LAPACKE_clacpy_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zlacpy_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_clacp2_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zlacp2_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, const double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_zlag2c_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_float* sa, lapack_int ldsa ); + +lapack_int LAPACKE_slag2d_work( int matrix_layout, lapack_int m, lapack_int n, + const float* sa, lapack_int ldsa, double* a, + lapack_int lda ); + +lapack_int LAPACKE_dlag2s_work( int matrix_layout, lapack_int m, lapack_int n, + const double* a, lapack_int lda, float* sa, + lapack_int ldsa ); + +lapack_int LAPACKE_clag2z_work( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* sa, lapack_int ldsa, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_slagge_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* d, + float* a, lapack_int lda, lapack_int* iseed, + float* work ); +lapack_int LAPACKE_dlagge_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* d, + double* a, lapack_int lda, lapack_int* iseed, + double* work ); +lapack_int LAPACKE_clagge_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const float* d, + lapack_complex_float* a, lapack_int lda, + lapack_int* iseed, lapack_complex_float* work ); +lapack_int LAPACKE_zlagge_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, const double* d, + lapack_complex_double* a, lapack_int lda, + lapack_int* iseed, + lapack_complex_double* work ); + +lapack_int LAPACKE_claghe_work( int matrix_layout, lapack_int n, lapack_int k, + const float* d, lapack_complex_float* a, + lapack_int lda, lapack_int* iseed, + lapack_complex_float* work ); +lapack_int LAPACKE_zlaghe_work( int matrix_layout, lapack_int n, lapack_int k, + const double* d, lapack_complex_double* a, + lapack_int lda, lapack_int* iseed, + lapack_complex_double* work ); + +lapack_int LAPACKE_slagsy_work( int matrix_layout, lapack_int n, lapack_int k, + const float* d, float* a, lapack_int lda, + lapack_int* iseed, float* work ); +lapack_int LAPACKE_dlagsy_work( int matrix_layout, lapack_int n, lapack_int k, + const double* d, double* a, lapack_int lda, + lapack_int* iseed, double* work ); +lapack_int LAPACKE_clagsy_work( int matrix_layout, lapack_int n, lapack_int k, + const float* d, lapack_complex_float* a, + lapack_int lda, lapack_int* iseed, + lapack_complex_float* work ); +lapack_int LAPACKE_zlagsy_work( int matrix_layout, lapack_int n, lapack_int k, + const double* d, lapack_complex_double* a, + lapack_int lda, lapack_int* iseed, + lapack_complex_double* work ); + +lapack_int LAPACKE_slapmr_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, float* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_dlapmr_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, double* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_clapmr_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, + lapack_complex_float* x, lapack_int ldx, + lapack_int* k ); +lapack_int LAPACKE_zlapmr_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, + lapack_complex_double* x, lapack_int ldx, + lapack_int* k ); + +lapack_int LAPACKE_slapmt_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, float* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_dlapmt_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, double* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_clapmt_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, + lapack_complex_float* x, lapack_int ldx, + lapack_int* k ); +lapack_int LAPACKE_zlapmt_work( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, + lapack_complex_double* x, lapack_int ldx, + lapack_int* k ); + +lapack_int LAPACKE_slartgp_work( float f, float g, float* cs, float* sn, + float* r ); +lapack_int LAPACKE_dlartgp_work( double f, double g, double* cs, double* sn, + double* r ); + +lapack_int LAPACKE_slartgs_work( float x, float y, float sigma, float* cs, + float* sn ); +lapack_int LAPACKE_dlartgs_work( double x, double y, double sigma, double* cs, + double* sn ); + +float LAPACKE_slapy2_work( float x, float y ); +double LAPACKE_dlapy2_work( double x, double y ); + +float LAPACKE_slapy3_work( float x, float y, float z ); +double LAPACKE_dlapy3_work( double x, double y, double z ); + +float LAPACKE_slamch_work( char cmach ); +double LAPACKE_dlamch_work( char cmach ); + +float LAPACKE_slange_work( int matrix_layout, char norm, lapack_int m, + lapack_int n, const float* a, lapack_int lda, + float* work ); +double LAPACKE_dlange_work( int matrix_layout, char norm, lapack_int m, + lapack_int n, const double* a, lapack_int lda, + double* work ); +float LAPACKE_clange_work( int matrix_layout, char norm, lapack_int m, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, float* work ); +double LAPACKE_zlange_work( int matrix_layout, char norm, lapack_int m, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, double* work ); + +float LAPACKE_clanhe_work( int matrix_layout, char norm, char uplo, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, float* work ); +double LAPACKE_zlanhe_work( int matrix_layout, char norm, char uplo, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, double* work ); + +float LAPACKE_slansy_work( int matrix_layout, char norm, char uplo, + lapack_int n, const float* a, lapack_int lda, + float* work ); +double LAPACKE_dlansy_work( int matrix_layout, char norm, char uplo, + lapack_int n, const double* a, lapack_int lda, + double* work ); +float LAPACKE_clansy_work( int matrix_layout, char norm, char uplo, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, float* work ); +double LAPACKE_zlansy_work( int matrix_layout, char norm, char uplo, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, double* work ); + +float LAPACKE_slantr_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int m, lapack_int n, const float* a, + lapack_int lda, float* work ); +double LAPACKE_dlantr_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int m, lapack_int n, + const double* a, lapack_int lda, double* work ); +float LAPACKE_clantr_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* work ); +double LAPACKE_zlantr_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* work ); + +lapack_int LAPACKE_slarfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, const float* v, + lapack_int ldv, const float* t, lapack_int ldt, + float* c, lapack_int ldc, float* work, + lapack_int ldwork ); +lapack_int LAPACKE_dlarfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, const double* v, + lapack_int ldv, const double* t, lapack_int ldt, + double* c, lapack_int ldc, double* work, + lapack_int ldwork ); +lapack_int LAPACKE_clarfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int ldwork ); +lapack_int LAPACKE_zlarfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, + lapack_int ldwork ); + +lapack_int LAPACKE_slarfg_work( lapack_int n, float* alpha, float* x, + lapack_int incx, float* tau ); +lapack_int LAPACKE_dlarfg_work( lapack_int n, double* alpha, double* x, + lapack_int incx, double* tau ); +lapack_int LAPACKE_clarfg_work( lapack_int n, lapack_complex_float* alpha, + lapack_complex_float* x, lapack_int incx, + lapack_complex_float* tau ); +lapack_int LAPACKE_zlarfg_work( lapack_int n, lapack_complex_double* alpha, + lapack_complex_double* x, lapack_int incx, + lapack_complex_double* tau ); + +lapack_int LAPACKE_slarft_work( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, const float* v, + lapack_int ldv, const float* tau, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dlarft_work( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, const double* v, + lapack_int ldv, const double* tau, double* t, + lapack_int ldt ); +lapack_int LAPACKE_clarft_work( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* tau, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zlarft_work( int matrix_layout, char direct, char storev, + lapack_int n, lapack_int k, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* tau, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_slarfx_work( int matrix_layout, char side, lapack_int m, + lapack_int n, const float* v, float tau, + float* c, lapack_int ldc, float* work ); +lapack_int LAPACKE_dlarfx_work( int matrix_layout, char side, lapack_int m, + lapack_int n, const double* v, double tau, + double* c, lapack_int ldc, double* work ); +lapack_int LAPACKE_clarfx_work( int matrix_layout, char side, lapack_int m, + lapack_int n, const lapack_complex_float* v, + lapack_complex_float tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work ); +lapack_int LAPACKE_zlarfx_work( int matrix_layout, char side, lapack_int m, + lapack_int n, const lapack_complex_double* v, + lapack_complex_double tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work ); + +lapack_int LAPACKE_slarnv_work( lapack_int idist, lapack_int* iseed, + lapack_int n, float* x ); +lapack_int LAPACKE_dlarnv_work( lapack_int idist, lapack_int* iseed, + lapack_int n, double* x ); +lapack_int LAPACKE_clarnv_work( lapack_int idist, lapack_int* iseed, + lapack_int n, lapack_complex_float* x ); +lapack_int LAPACKE_zlarnv_work( lapack_int idist, lapack_int* iseed, + lapack_int n, lapack_complex_double* x ); + + +lapack_int LAPACKE_slascl_work( int matrix_layout, char type, lapack_int kl, + lapack_int ku, float cfrom, float cto, + lapack_int m, lapack_int n, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlascl_work( int matrix_layout, char type, lapack_int kl, + lapack_int ku, double cfrom, double cto, + lapack_int m, lapack_int n, double* a, + lapack_int lda ); +lapack_int LAPACKE_clascl_work( int matrix_layout, char type, lapack_int kl, + lapack_int ku, float cfrom, float cto, + lapack_int m, lapack_int n, lapack_complex_float* a, + lapack_int lda ); +lapack_int LAPACKE_zlascl_work( int matrix_layout, char type, lapack_int kl, + lapack_int ku, double cfrom, double cto, + lapack_int m, lapack_int n, lapack_complex_double* a, + lapack_int lda ); + +lapack_int LAPACKE_slaset_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, float alpha, float beta, float* a, + lapack_int lda ); +lapack_int LAPACKE_dlaset_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, double alpha, double beta, + double* a, lapack_int lda ); +lapack_int LAPACKE_claset_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, lapack_complex_float alpha, + lapack_complex_float beta, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zlaset_work( int matrix_layout, char uplo, lapack_int m, + lapack_int n, lapack_complex_double alpha, + lapack_complex_double beta, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_slasrt_work( char id, lapack_int n, float* d ); +lapack_int LAPACKE_dlasrt_work( char id, lapack_int n, double* d ); + +lapack_int LAPACKE_slaswp_work( int matrix_layout, lapack_int n, float* a, + lapack_int lda, lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); +lapack_int LAPACKE_dlaswp_work( int matrix_layout, lapack_int n, double* a, + lapack_int lda, lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); +lapack_int LAPACKE_claswp_work( int matrix_layout, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); +lapack_int LAPACKE_zlaswp_work( int matrix_layout, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int k1, lapack_int k2, + const lapack_int* ipiv, lapack_int incx ); + +lapack_int LAPACKE_slatms_work( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, + float* d, lapack_int mode, float cond, + float dmax, lapack_int kl, lapack_int ku, + char pack, float* a, lapack_int lda, + float* work ); +lapack_int LAPACKE_dlatms_work( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, + double* d, lapack_int mode, double cond, + double dmax, lapack_int kl, lapack_int ku, + char pack, double* a, lapack_int lda, + double* work ); +lapack_int LAPACKE_clatms_work( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, + float* d, lapack_int mode, float cond, + float dmax, lapack_int kl, lapack_int ku, + char pack, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* work ); +lapack_int LAPACKE_zlatms_work( int matrix_layout, lapack_int m, lapack_int n, + char dist, lapack_int* iseed, char sym, + double* d, lapack_int mode, double cond, + double dmax, lapack_int kl, lapack_int ku, + char pack, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* work ); + +lapack_int LAPACKE_slauum_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda ); +lapack_int LAPACKE_dlauum_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda ); +lapack_int LAPACKE_clauum_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zlauum_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_sopgtr_work( int matrix_layout, char uplo, lapack_int n, + const float* ap, const float* tau, float* q, + lapack_int ldq, float* work ); +lapack_int LAPACKE_dopgtr_work( int matrix_layout, char uplo, lapack_int n, + const double* ap, const double* tau, double* q, + lapack_int ldq, double* work ); + +lapack_int LAPACKE_sopmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const float* ap, const float* tau, float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_dopmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const double* ap, const double* tau, double* c, + lapack_int ldc, double* work ); + +lapack_int LAPACKE_sorgbr_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, float* a, + lapack_int lda, const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorgbr_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, double* a, + lapack_int lda, const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorghr_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, float* a, lapack_int lda, + const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorghr_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, double* a, lapack_int lda, + const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorglq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorglq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorgql_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorgql_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorgqr_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorgqr_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorgrq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, float* a, lapack_int lda, + const float* tau, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dorgrq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, double* a, lapack_int lda, + const double* tau, double* work, + lapack_int lwork ); + +lapack_int LAPACKE_sorgtr_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, const float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dorgtr_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, const double* tau, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side, + char trans, lapack_int m, lapack_int n, + lapack_int k, const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side, + char trans, lapack_int m, lapack_int n, + lapack_int k, const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormhr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormhr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormlq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormlq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormql_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormql_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormqr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormqr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormrq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormrq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormrz_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormrz_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_sormtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const float* a, lapack_int lda, + const float* tau, float* c, lapack_int ldc, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dormtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const double* a, lapack_int lda, + const double* tau, double* c, lapack_int ldc, + double* work, lapack_int lwork ); + +lapack_int LAPACKE_spbcon_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const float* ab, lapack_int ldab, + float anorm, float* rcond, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dpbcon_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const double* ab, + lapack_int ldab, double anorm, double* rcond, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cpbcon_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_float* ab, + lapack_int ldab, float anorm, float* rcond, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zpbcon_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_double* ab, + lapack_int ldab, double anorm, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_spbequ_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const float* ab, lapack_int ldab, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_dpbequ_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const double* ab, + lapack_int ldab, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cpbequ_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_float* ab, + lapack_int ldab, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_zpbequ_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, const lapack_complex_double* ab, + lapack_int ldab, double* s, double* scond, + double* amax ); + +lapack_int LAPACKE_spbrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const float* ab, + lapack_int ldab, const float* afb, + lapack_int ldafb, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dpbrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const double* ab, lapack_int ldab, + const double* afb, lapack_int ldafb, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cpbrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + const lapack_complex_float* afb, + lapack_int ldafb, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zpbrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, + const lapack_complex_double* afb, + lapack_int ldafb, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_spbstf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, float* bb, lapack_int ldbb ); +lapack_int LAPACKE_dpbstf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, double* bb, lapack_int ldbb ); +lapack_int LAPACKE_cpbstf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, lapack_complex_float* bb, + lapack_int ldbb ); +lapack_int LAPACKE_zpbstf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kb, lapack_complex_double* bb, + lapack_int ldbb ); + +lapack_int LAPACKE_spbsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, float* ab, + lapack_int ldab, float* b, lapack_int ldb ); +lapack_int LAPACKE_dpbsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, double* ab, + lapack_int ldab, double* b, lapack_int ldb ); +lapack_int LAPACKE_cpbsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpbsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spbsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int kd, lapack_int nrhs, + float* ab, lapack_int ldab, float* afb, + lapack_int ldafb, char* equed, float* s, + float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dpbsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int kd, lapack_int nrhs, + double* ab, lapack_int ldab, double* afb, + lapack_int ldafb, char* equed, double* s, + double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, double* work, lapack_int* iwork ); +lapack_int LAPACKE_cpbsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int kd, lapack_int nrhs, + lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* afb, lapack_int ldafb, + char* equed, float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zpbsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int kd, lapack_int nrhs, + lapack_complex_double* ab, lapack_int ldab, + lapack_complex_double* afb, lapack_int ldafb, + char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_spbtrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, float* ab, lapack_int ldab ); +lapack_int LAPACKE_dpbtrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, double* ab, lapack_int ldab ); +lapack_int LAPACKE_cpbtrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_complex_float* ab, + lapack_int ldab ); +lapack_int LAPACKE_zpbtrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_complex_double* ab, + lapack_int ldab ); + +lapack_int LAPACKE_spbtrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, const float* ab, + lapack_int ldab, float* b, lapack_int ldb ); +lapack_int LAPACKE_dpbtrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const double* ab, lapack_int ldab, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cpbtrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_float* ab, lapack_int ldab, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpbtrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_spftrf_work( int matrix_layout, char transr, char uplo, + lapack_int n, float* a ); +lapack_int LAPACKE_dpftrf_work( int matrix_layout, char transr, char uplo, + lapack_int n, double* a ); +lapack_int LAPACKE_cpftrf_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_float* a ); +lapack_int LAPACKE_zpftrf_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_double* a ); + +lapack_int LAPACKE_spftri_work( int matrix_layout, char transr, char uplo, + lapack_int n, float* a ); +lapack_int LAPACKE_dpftri_work( int matrix_layout, char transr, char uplo, + lapack_int n, double* a ); +lapack_int LAPACKE_cpftri_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_float* a ); +lapack_int LAPACKE_zpftri_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_complex_double* a ); + +lapack_int LAPACKE_spftrs_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, const float* a, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dpftrs_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, const double* a, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cpftrs_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpftrs_work( int matrix_layout, char transr, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spocon_work( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float anorm, + float* rcond, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dpocon_work( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double anorm, + double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cpocon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float anorm, float* rcond, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zpocon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double anorm, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_spoequ_work( int matrix_layout, lapack_int n, const float* a, + lapack_int lda, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dpoequ_work( int matrix_layout, lapack_int n, const double* a, + lapack_int lda, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cpoequ_work( int matrix_layout, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zpoequ_work( int matrix_layout, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_spoequb_work( int matrix_layout, lapack_int n, const float* a, + lapack_int lda, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dpoequb_work( int matrix_layout, lapack_int n, + const double* a, lapack_int lda, double* s, + double* scond, double* amax ); +lapack_int LAPACKE_cpoequb_work( int matrix_layout, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax ); +lapack_int LAPACKE_zpoequb_work( int matrix_layout, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax ); + +lapack_int LAPACKE_sporfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dporfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cporfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zporfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sporfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, + lapack_int ldaf, const float* s, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dporfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const double* s, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cporfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, + lapack_int ldaf, const float* s, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zporfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, + lapack_int ldaf, const double* s, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); +lapack_int LAPACKE_dsposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + double* b, lapack_int ldb, double* x, + lapack_int ldx, double* work, float* swork, + lapack_int* iter ); +lapack_int LAPACKE_zcposv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, lapack_complex_double* work, + lapack_complex_float* swork, double* rwork, + lapack_int* iter ); + +lapack_int LAPACKE_sposvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + char* equed, float* s, float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dposvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + char* equed, double* s, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cposvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + char* equed, float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zposvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sposvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + char* equed, float* s, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dposvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + char* equed, double* s, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cposvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + char* equed, float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zposvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_spotrf2_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda ); +lapack_int LAPACKE_dpotrf2_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda ); +lapack_int LAPACKE_cpotrf2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotrf2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotrf_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda ); +lapack_int LAPACKE_dpotrf_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda ); +lapack_int LAPACKE_cpotrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotri_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda ); +lapack_int LAPACKE_dpotri_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda ); +lapack_int LAPACKE_cpotri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zpotri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_spotrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dpotrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, double* b, lapack_int ldb ); +lapack_int LAPACKE_cpotrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zpotrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sppcon_work( int matrix_layout, char uplo, lapack_int n, + const float* ap, float anorm, float* rcond, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dppcon_work( int matrix_layout, char uplo, lapack_int n, + const double* ap, double anorm, double* rcond, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cppcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, float anorm, + float* rcond, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zppcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, double anorm, + double* rcond, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_sppequ_work( int matrix_layout, char uplo, lapack_int n, + const float* ap, float* s, float* scond, + float* amax ); +lapack_int LAPACKE_dppequ_work( int matrix_layout, char uplo, lapack_int n, + const double* ap, double* s, double* scond, + double* amax ); +lapack_int LAPACKE_cppequ_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, float* s, + float* scond, float* amax ); +lapack_int LAPACKE_zppequ_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, double* s, + double* scond, double* amax ); + +lapack_int LAPACKE_spprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, + const float* afp, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dpprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, + const double* afp, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cpprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zpprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sppsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* ap, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dppsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* ap, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cppsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zppsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sppsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* ap, + float* afp, char* equed, float* s, float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dppsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* ap, + double* afp, char* equed, double* s, double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cppsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* ap, + lapack_complex_float* afp, char* equed, + float* s, lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zppsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* ap, + lapack_complex_double* afp, char* equed, + double* s, lapack_complex_double* b, + lapack_int ldb, lapack_complex_double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_spptrf_work( int matrix_layout, char uplo, lapack_int n, + float* ap ); +lapack_int LAPACKE_dpptrf_work( int matrix_layout, char uplo, lapack_int n, + double* ap ); +lapack_int LAPACKE_cpptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap ); +lapack_int LAPACKE_zpptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap ); + +lapack_int LAPACKE_spptri_work( int matrix_layout, char uplo, lapack_int n, + float* ap ); +lapack_int LAPACKE_dpptri_work( int matrix_layout, char uplo, lapack_int n, + double* ap ); +lapack_int LAPACKE_cpptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap ); +lapack_int LAPACKE_zpptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap ); + +lapack_int LAPACKE_spptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dpptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cpptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_spstrf_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, lapack_int* piv, + lapack_int* rank, float tol, float* work ); +lapack_int LAPACKE_dpstrf_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, lapack_int* piv, + lapack_int* rank, double tol, double* work ); +lapack_int LAPACKE_cpstrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* piv, lapack_int* rank, float tol, + float* work ); +lapack_int LAPACKE_zpstrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* piv, lapack_int* rank, double tol, + double* work ); + +lapack_int LAPACKE_sptcon_work( lapack_int n, const float* d, const float* e, + float anorm, float* rcond, float* work ); +lapack_int LAPACKE_dptcon_work( lapack_int n, const double* d, const double* e, + double anorm, double* rcond, double* work ); +lapack_int LAPACKE_cptcon_work( lapack_int n, const float* d, + const lapack_complex_float* e, float anorm, + float* rcond, float* work ); +lapack_int LAPACKE_zptcon_work( lapack_int n, const double* d, + const lapack_complex_double* e, double anorm, + double* rcond, double* work ); + +lapack_int LAPACKE_spteqr_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, float* z, lapack_int ldz, + float* work ); +lapack_int LAPACKE_dpteqr_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz, + double* work ); +lapack_int LAPACKE_cpteqr_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, lapack_complex_float* z, + lapack_int ldz, float* work ); +lapack_int LAPACKE_zpteqr_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz, double* work ); + +lapack_int LAPACKE_sptrfs_work( int matrix_layout, lapack_int n, lapack_int nrhs, + const float* d, const float* e, const float* df, + const float* ef, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* ferr, + float* berr, float* work ); +lapack_int LAPACKE_dptrfs_work( int matrix_layout, lapack_int n, lapack_int nrhs, + const double* d, const double* e, + const double* df, const double* ef, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr, + double* work ); +lapack_int LAPACKE_cptrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, const float* df, + const lapack_complex_float* ef, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zptrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, + const double* df, + const lapack_complex_double* ef, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sptsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + float* d, float* e, float* b, lapack_int ldb ); +lapack_int LAPACKE_dptsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + double* d, double* e, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cptsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + float* d, lapack_complex_float* e, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zptsv_work( int matrix_layout, lapack_int n, lapack_int nrhs, + double* d, lapack_complex_double* e, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sptsvx_work( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const float* d, const float* e, + float* df, float* ef, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work ); +lapack_int LAPACKE_dptsvx_work( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const double* d, + const double* e, double* df, double* ef, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* ferr, + double* berr, double* work ); +lapack_int LAPACKE_cptsvx_work( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, float* df, + lapack_complex_float* ef, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zptsvx_work( int matrix_layout, char fact, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, double* df, + lapack_complex_double* ef, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_spttrf_work( lapack_int n, float* d, float* e ); +lapack_int LAPACKE_dpttrf_work( lapack_int n, double* d, double* e ); +lapack_int LAPACKE_cpttrf_work( lapack_int n, float* d, + lapack_complex_float* e ); +lapack_int LAPACKE_zpttrf_work( lapack_int n, double* d, + lapack_complex_double* e ); + +lapack_int LAPACKE_spttrs_work( int matrix_layout, lapack_int n, lapack_int nrhs, + const float* d, const float* e, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dpttrs_work( int matrix_layout, lapack_int n, lapack_int nrhs, + const double* d, const double* e, double* b, + lapack_int ldb ); +lapack_int LAPACKE_cpttrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* d, + const lapack_complex_float* e, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zpttrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* d, + const lapack_complex_double* e, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssbev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, float* ab, + lapack_int ldab, float* w, float* z, + lapack_int ldz, float* work ); +lapack_int LAPACKE_dsbev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, double* ab, + lapack_int ldab, double* w, double* z, + lapack_int ldz, double* work ); + +lapack_int LAPACKE_ssbevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, float* ab, + lapack_int ldab, float* w, float* z, + lapack_int ldz, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dsbevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int kd, double* ab, + lapack_int ldab, double* w, double* z, + lapack_int ldz, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_ssbevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int kd, + float* ab, lapack_int ldab, float* q, + lapack_int ldq, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, + lapack_int ldz, float* work, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_dsbevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int kd, + double* ab, lapack_int ldab, double* q, + lapack_int ldq, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, double* z, + lapack_int ldz, double* work, lapack_int* iwork, + lapack_int* ifail ); + +lapack_int LAPACKE_ssbgst_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + float* ab, lapack_int ldab, const float* bb, + lapack_int ldbb, float* x, lapack_int ldx, + float* work ); +lapack_int LAPACKE_dsbgst_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + double* ab, lapack_int ldab, const double* bb, + lapack_int ldbb, double* x, lapack_int ldx, + double* work ); + +lapack_int LAPACKE_ssbgv_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + float* ab, lapack_int ldab, float* bb, + lapack_int ldbb, float* w, float* z, + lapack_int ldz, float* work ); +lapack_int LAPACKE_dsbgv_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + double* ab, lapack_int ldab, double* bb, + lapack_int ldbb, double* w, double* z, + lapack_int ldz, double* work ); + +lapack_int LAPACKE_ssbgvd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + float* ab, lapack_int ldab, float* bb, + lapack_int ldbb, float* w, float* z, + lapack_int ldz, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dsbgvd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, lapack_int ka, lapack_int kb, + double* ab, lapack_int ldab, double* bb, + lapack_int ldbb, double* w, double* z, + lapack_int ldz, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_ssbgvx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int ka, + lapack_int kb, float* ab, lapack_int ldab, + float* bb, lapack_int ldbb, float* q, + lapack_int ldq, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, + lapack_int ldz, float* work, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_dsbgvx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, lapack_int ka, + lapack_int kb, double* ab, lapack_int ldab, + double* bb, lapack_int ldbb, double* q, + lapack_int ldq, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, double* z, + lapack_int ldz, double* work, lapack_int* iwork, + lapack_int* ifail ); + +lapack_int LAPACKE_ssbtrd_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int kd, float* ab, + lapack_int ldab, float* d, float* e, float* q, + lapack_int ldq, float* work ); +lapack_int LAPACKE_dsbtrd_work( int matrix_layout, char vect, char uplo, + lapack_int n, lapack_int kd, double* ab, + lapack_int ldab, double* d, double* e, + double* q, lapack_int ldq, double* work ); + +lapack_int LAPACKE_ssfrk_work( int matrix_layout, char transr, char uplo, + char trans, lapack_int n, lapack_int k, + float alpha, const float* a, lapack_int lda, + float beta, float* c ); +lapack_int LAPACKE_dsfrk_work( int matrix_layout, char transr, char uplo, + char trans, lapack_int n, lapack_int k, + double alpha, const double* a, lapack_int lda, + double beta, double* c ); + +lapack_int LAPACKE_sspcon_work( int matrix_layout, char uplo, lapack_int n, + const float* ap, const lapack_int* ipiv, + float anorm, float* rcond, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dspcon_work( int matrix_layout, char uplo, lapack_int n, + const double* ap, const lapack_int* ipiv, + double anorm, double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_cspcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work ); +lapack_int LAPACKE_zspcon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_int* ipiv, double anorm, + double* rcond, lapack_complex_double* work ); + +lapack_int LAPACKE_sspev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, float* ap, float* w, float* z, + lapack_int ldz, float* work ); +lapack_int LAPACKE_dspev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, double* ap, double* w, double* z, + lapack_int ldz, double* work ); + +lapack_int LAPACKE_sspevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, float* ap, float* w, float* z, + lapack_int ldz, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dspevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, double* ap, double* w, double* z, + lapack_int ldz, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_sspevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, float* ap, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, float* z, + lapack_int ldz, float* work, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_dspevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, double* ap, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + double* z, lapack_int ldz, double* work, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_sspgst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, float* ap, const float* bp ); +lapack_int LAPACKE_dspgst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, double* ap, const double* bp ); + +lapack_int LAPACKE_sspgv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* ap, float* bp, + float* w, float* z, lapack_int ldz, + float* work ); +lapack_int LAPACKE_dspgv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* ap, double* bp, + double* w, double* z, lapack_int ldz, + double* work ); + +lapack_int LAPACKE_sspgvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* ap, float* bp, + float* w, float* z, lapack_int ldz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_dspgvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* ap, double* bp, + double* w, double* z, lapack_int ldz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_sspgvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, float* ap, + float* bp, float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, float* z, lapack_int ldz, float* work, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_dspgvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, double* ap, + double* bp, double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, double* z, lapack_int ldz, + double* work, lapack_int* iwork, + lapack_int* ifail ); + +lapack_int LAPACKE_ssprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, + const float* afp, const lapack_int* ipiv, + const float* b, lapack_int ldb, float* x, + lapack_int ldx, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dsprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, + const double* afp, const lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_csprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zsprfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_sspsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* ap, lapack_int* ipiv, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dspsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* ap, lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_cspsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* ap, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zspsv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* ap, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_sspsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, const float* ap, + float* afp, lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dspsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, const double* ap, + double* afp, lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_cspsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + lapack_complex_float* afp, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zspsvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + lapack_complex_double* afp, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_ssptrd_work( int matrix_layout, char uplo, lapack_int n, + float* ap, float* d, float* e, float* tau ); +lapack_int LAPACKE_dsptrd_work( int matrix_layout, char uplo, lapack_int n, + double* ap, double* d, double* e, double* tau ); + +lapack_int LAPACKE_ssptrf_work( int matrix_layout, char uplo, lapack_int n, + float* ap, lapack_int* ipiv ); +lapack_int LAPACKE_dsptrf_work( int matrix_layout, char uplo, lapack_int n, + double* ap, lapack_int* ipiv ); +lapack_int LAPACKE_csptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, lapack_int* ipiv ); +lapack_int LAPACKE_zsptrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, lapack_int* ipiv ); + +lapack_int LAPACKE_ssptri_work( int matrix_layout, char uplo, lapack_int n, + float* ap, const lapack_int* ipiv, + float* work ); +lapack_int LAPACKE_dsptri_work( int matrix_layout, char uplo, lapack_int n, + double* ap, const lapack_int* ipiv, + double* work ); +lapack_int LAPACKE_csptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* ap, + const lapack_int* ipiv, + lapack_complex_float* work ); +lapack_int LAPACKE_zsptri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* ap, + const lapack_int* ipiv, + lapack_complex_double* work ); + +lapack_int LAPACKE_ssptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* ap, + const lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dsptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* ap, + const lapack_int* ipiv, double* b, + lapack_int ldb ); +lapack_int LAPACKE_csptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_zsptrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sstebz_work( char range, char order, lapack_int n, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, const float* d, const float* e, + lapack_int* m, lapack_int* nsplit, float* w, + lapack_int* iblock, lapack_int* isplit, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dstebz_work( char range, char order, lapack_int n, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, const double* d, const double* e, + lapack_int* m, lapack_int* nsplit, double* w, + lapack_int* iblock, lapack_int* isplit, + double* work, lapack_int* iwork ); + +lapack_int LAPACKE_sstedc_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, float* z, lapack_int ldz, + float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dstedc_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_cstedc_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, lapack_complex_float* z, + lapack_int ldz, lapack_complex_float* work, + lapack_int lwork, float* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zstedc_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz, lapack_complex_double* work, + lapack_int lwork, double* rwork, + lapack_int lrwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_sstegr_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, float* z, + lapack_int ldz, lapack_int* isuppz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_dstegr_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + double* z, lapack_int ldz, lapack_int* isuppz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_cstegr_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_int* isuppz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zstegr_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int* isuppz, double* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_sstein_work( int matrix_layout, lapack_int n, const float* d, + const float* e, lapack_int m, const float* w, + const lapack_int* iblock, + const lapack_int* isplit, float* z, + lapack_int ldz, float* work, lapack_int* iwork, + lapack_int* ifailv ); +lapack_int LAPACKE_dstein_work( int matrix_layout, lapack_int n, const double* d, + const double* e, lapack_int m, const double* w, + const lapack_int* iblock, + const lapack_int* isplit, double* z, + lapack_int ldz, double* work, lapack_int* iwork, + lapack_int* ifailv ); +lapack_int LAPACKE_cstein_work( int matrix_layout, lapack_int n, const float* d, + const float* e, lapack_int m, const float* w, + const lapack_int* iblock, + const lapack_int* isplit, + lapack_complex_float* z, lapack_int ldz, + float* work, lapack_int* iwork, + lapack_int* ifailv ); +lapack_int LAPACKE_zstein_work( int matrix_layout, lapack_int n, const double* d, + const double* e, lapack_int m, const double* w, + const lapack_int* iblock, + const lapack_int* isplit, + lapack_complex_double* z, lapack_int ldz, + double* work, lapack_int* iwork, + lapack_int* ifailv ); + +lapack_int LAPACKE_sstemr_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + lapack_int* m, float* w, float* z, + lapack_int ldz, lapack_int nzc, + lapack_int* isuppz, lapack_logical* tryrac, + float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dstemr_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int nzc, + lapack_int* isuppz, lapack_logical* tryrac, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_cstemr_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + lapack_int* m, float* w, + lapack_complex_float* z, lapack_int ldz, + lapack_int nzc, lapack_int* isuppz, + lapack_logical* tryrac, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_zstemr_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + lapack_int* m, double* w, + lapack_complex_double* z, lapack_int ldz, + lapack_int nzc, lapack_int* isuppz, + lapack_logical* tryrac, double* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_ssteqr_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, float* z, lapack_int ldz, + float* work ); +lapack_int LAPACKE_dsteqr_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz, + double* work ); +lapack_int LAPACKE_csteqr_work( int matrix_layout, char compz, lapack_int n, + float* d, float* e, lapack_complex_float* z, + lapack_int ldz, float* work ); +lapack_int LAPACKE_zsteqr_work( int matrix_layout, char compz, lapack_int n, + double* d, double* e, lapack_complex_double* z, + lapack_int ldz, double* work ); + +lapack_int LAPACKE_ssterf_work( lapack_int n, float* d, float* e ); +lapack_int LAPACKE_dsterf_work( lapack_int n, double* d, double* e ); + +lapack_int LAPACKE_sstev_work( int matrix_layout, char jobz, lapack_int n, + float* d, float* e, float* z, lapack_int ldz, + float* work ); +lapack_int LAPACKE_dstev_work( int matrix_layout, char jobz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz, + double* work ); + +lapack_int LAPACKE_sstevd_work( int matrix_layout, char jobz, lapack_int n, + float* d, float* e, float* z, lapack_int ldz, + float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dstevd_work( int matrix_layout, char jobz, lapack_int n, + double* d, double* e, double* z, lapack_int ldz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_sstevr_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, float* z, + lapack_int ldz, lapack_int* isuppz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_dstevr_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + double* z, lapack_int ldz, lapack_int* isuppz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_sstevx_work( int matrix_layout, char jobz, char range, + lapack_int n, float* d, float* e, float vl, + float vu, lapack_int il, lapack_int iu, + float abstol, lapack_int* m, float* w, float* z, + lapack_int ldz, float* work, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_dstevx_work( int matrix_layout, char jobz, char range, + lapack_int n, double* d, double* e, double vl, + double vu, lapack_int il, lapack_int iu, + double abstol, lapack_int* m, double* w, + double* z, lapack_int ldz, double* work, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_ssycon_work( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, + float* rcond, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dsycon_work( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_csycon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, float anorm, + float* rcond, lapack_complex_float* work ); +lapack_int LAPACKE_zsycon_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, double anorm, + double* rcond, lapack_complex_double* work ); + +lapack_int LAPACKE_ssyequb_work( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float* s, + float* scond, float* amax, float* work ); +lapack_int LAPACKE_dsyequb_work( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double* s, + double* scond, double* amax, double* work ); +lapack_int LAPACKE_csyequb_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* s, float* scond, float* amax, + lapack_complex_float* work ); +lapack_int LAPACKE_zsyequb_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* s, double* scond, double* amax, + lapack_complex_double* work ); + +lapack_int LAPACKE_ssyev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, float* a, lapack_int lda, float* w, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dsyev_work( int matrix_layout, char jobz, char uplo, + lapack_int n, double* a, lapack_int lda, + double* w, double* work, lapack_int lwork ); + +lapack_int LAPACKE_ssyevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, float* a, lapack_int lda, + float* w, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dsyevd_work( int matrix_layout, char jobz, char uplo, + lapack_int n, double* a, lapack_int lda, + double* w, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_ssyevr_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, float* a, + lapack_int lda, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, + lapack_int ldz, lapack_int* isuppz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_dsyevr_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, double* a, + lapack_int lda, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, double* z, + lapack_int ldz, lapack_int* isuppz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_ssyevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, float* a, + lapack_int lda, float vl, float vu, + lapack_int il, lapack_int iu, float abstol, + lapack_int* m, float* w, float* z, + lapack_int ldz, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int* ifail ); +lapack_int LAPACKE_dsyevx_work( int matrix_layout, char jobz, char range, + char uplo, lapack_int n, double* a, + lapack_int lda, double vl, double vu, + lapack_int il, lapack_int iu, double abstol, + lapack_int* m, double* w, double* z, + lapack_int ldz, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_ssygst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, float* a, lapack_int lda, + const float* b, lapack_int ldb ); +lapack_int LAPACKE_dsygst_work( int matrix_layout, lapack_int itype, char uplo, + lapack_int n, double* a, lapack_int lda, + const double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssygv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* w, float* work, lapack_int lwork ); +lapack_int LAPACKE_dsygv_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* w, double* work, lapack_int lwork ); + +lapack_int LAPACKE_ssygvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* w, float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dsygvd_work( int matrix_layout, lapack_int itype, char jobz, + char uplo, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* w, double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); + +lapack_int LAPACKE_ssygvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float vl, float vu, lapack_int il, + lapack_int iu, float abstol, lapack_int* m, + float* w, float* z, lapack_int ldz, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int* ifail ); +lapack_int LAPACKE_dsygvx_work( int matrix_layout, lapack_int itype, char jobz, + char range, char uplo, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double vl, double vu, lapack_int il, + lapack_int iu, double abstol, lapack_int* m, + double* w, double* z, lapack_int ldz, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int* ifail ); + +lapack_int LAPACKE_ssyrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const float* af, lapack_int ldaf, + const lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dsyrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* b, lapack_int ldb, double* x, + lapack_int ldx, double* ferr, double* berr, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_csyrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_zsyrfs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_ssyrfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, const float* af, + lapack_int ldaf, const lapack_int* ipiv, + const float* s, const float* b, lapack_int ldb, + float* x, lapack_int ldx, float* rcond, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dsyrfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, const double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* s, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_csyrfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* af, + lapack_int ldaf, const lapack_int* ipiv, + const float* s, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zsyrfsx_work( int matrix_layout, char uplo, char equed, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* af, + lapack_int ldaf, const lapack_int* ipiv, + const double* s, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_ssysv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + lapack_int* ipiv, float* b, lapack_int ldb, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dsysv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + lapack_int* ipiv, double* b, lapack_int ldb, + double* work, lapack_int lwork ); +lapack_int LAPACKE_csysv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zsysv_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_ssysvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, const float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, const float* b, + lapack_int ldb, float* x, lapack_int ldx, + float* rcond, float* ferr, float* berr, + float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dsysvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, const double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, const double* b, + lapack_int ldb, double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_csysvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int ldb, lapack_complex_float* x, + lapack_int ldx, float* rcond, float* ferr, + float* berr, lapack_complex_float* work, + lapack_int lwork, float* rwork ); +lapack_int LAPACKE_zsysvx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, lapack_int lwork, + double* rwork ); + +lapack_int LAPACKE_ssysvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, float* a, + lapack_int lda, float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, + float* b, lapack_int ldb, float* x, + lapack_int ldx, float* rcond, float* rpvgrw, + float* berr, lapack_int n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int nparams, float* params, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dsysvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, double* a, + lapack_int lda, double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, + double* b, lapack_int ldb, double* x, + lapack_int ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int nparams, double* params, + double* work, lapack_int* iwork ); +lapack_int LAPACKE_csysvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* x, lapack_int ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int nparams, + float* params, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_zsysvxx_work( int matrix_layout, char fact, char uplo, + lapack_int n, lapack_int nrhs, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* af, lapack_int ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* x, lapack_int ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int nparams, + double* params, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_ssytrd_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, float* d, float* e, + float* tau, float* work, lapack_int lwork ); +lapack_int LAPACKE_dsytrd_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, double* d, double* e, + double* tau, double* work, lapack_int lwork ); + +lapack_int LAPACKE_ssytrf_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dsytrf_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv, + double* work, lapack_int lwork ); +lapack_int LAPACKE_csytrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* work, + lapack_int lwork ); +lapack_int LAPACKE_zsytrf_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_ssytri_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, + const lapack_int* ipiv, float* work ); +lapack_int LAPACKE_dsytri_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, + const lapack_int* ipiv, double* work ); +lapack_int LAPACKE_csytri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work ); +lapack_int LAPACKE_zsytri_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work ); + +lapack_int LAPACKE_ssytrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dsytrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_csytrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsytrs_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stbcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, lapack_int kd, + const float* ab, lapack_int ldab, float* rcond, + float* work, lapack_int* iwork ); +lapack_int LAPACKE_dtbcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, lapack_int kd, + const double* ab, lapack_int ldab, + double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_ctbcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, lapack_int kd, + const lapack_complex_float* ab, lapack_int ldab, + float* rcond, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_ztbcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, lapack_int kd, + const lapack_complex_double* ab, + lapack_int ldab, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_stbrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const float* ab, + lapack_int ldab, const float* b, lapack_int ldb, + const float* x, lapack_int ldx, float* ferr, + float* berr, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dtbrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const double* ab, + lapack_int ldab, const double* b, + lapack_int ldb, const double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_ctbrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const lapack_complex_float* ab, + lapack_int ldab, const lapack_complex_float* b, + lapack_int ldb, const lapack_complex_float* x, + lapack_int ldx, float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztbrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, const lapack_complex_double* b, + lapack_int ldb, const lapack_complex_double* x, + lapack_int ldx, double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_stbtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const float* ab, + lapack_int ldab, float* b, lapack_int ldb ); +lapack_int LAPACKE_dtbtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const double* ab, + lapack_int ldab, double* b, lapack_int ldb ); +lapack_int LAPACKE_ctbtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, const lapack_complex_float* ab, + lapack_int ldab, lapack_complex_float* b, + lapack_int ldb ); +lapack_int LAPACKE_ztbtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int kd, + lapack_int nrhs, + const lapack_complex_double* ab, + lapack_int ldab, lapack_complex_double* b, + lapack_int ldb ); + +lapack_int LAPACKE_stfsm_work( int matrix_layout, char transr, char side, + char uplo, char trans, char diag, lapack_int m, + lapack_int n, float alpha, const float* a, + float* b, lapack_int ldb ); +lapack_int LAPACKE_dtfsm_work( int matrix_layout, char transr, char side, + char uplo, char trans, char diag, lapack_int m, + lapack_int n, double alpha, const double* a, + double* b, lapack_int ldb ); +lapack_int LAPACKE_ctfsm_work( int matrix_layout, char transr, char side, + char uplo, char trans, char diag, lapack_int m, + lapack_int n, lapack_complex_float alpha, + const lapack_complex_float* a, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztfsm_work( int matrix_layout, char transr, char side, + char uplo, char trans, char diag, lapack_int m, + lapack_int n, lapack_complex_double alpha, + const lapack_complex_double* a, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stftri_work( int matrix_layout, char transr, char uplo, + char diag, lapack_int n, float* a ); +lapack_int LAPACKE_dtftri_work( int matrix_layout, char transr, char uplo, + char diag, lapack_int n, double* a ); +lapack_int LAPACKE_ctftri_work( int matrix_layout, char transr, char uplo, + char diag, lapack_int n, + lapack_complex_float* a ); +lapack_int LAPACKE_ztftri_work( int matrix_layout, char transr, char uplo, + char diag, lapack_int n, + lapack_complex_double* a ); + +lapack_int LAPACKE_stfttp_work( int matrix_layout, char transr, char uplo, + lapack_int n, const float* arf, float* ap ); +lapack_int LAPACKE_dtfttp_work( int matrix_layout, char transr, char uplo, + lapack_int n, const double* arf, double* ap ); +lapack_int LAPACKE_ctfttp_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* arf, + lapack_complex_float* ap ); +lapack_int LAPACKE_ztfttp_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* arf, + lapack_complex_double* ap ); + +lapack_int LAPACKE_stfttr_work( int matrix_layout, char transr, char uplo, + lapack_int n, const float* arf, float* a, + lapack_int lda ); +lapack_int LAPACKE_dtfttr_work( int matrix_layout, char transr, char uplo, + lapack_int n, const double* arf, double* a, + lapack_int lda ); +lapack_int LAPACKE_ctfttr_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* arf, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_ztfttr_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* arf, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_stgevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const float* s, lapack_int lds, const float* p, + lapack_int ldp, float* vl, lapack_int ldvl, + float* vr, lapack_int ldvr, lapack_int mm, + lapack_int* m, float* work ); +lapack_int LAPACKE_dtgevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const double* s, lapack_int lds, + const double* p, lapack_int ldp, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, double* work ); +lapack_int LAPACKE_ctgevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* s, lapack_int lds, + const lapack_complex_float* p, lapack_int ldp, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztgevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* s, lapack_int lds, + const lapack_complex_double* p, lapack_int ldp, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_stgexc_work( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* q, lapack_int ldq, float* z, + lapack_int ldz, lapack_int* ifst, + lapack_int* ilst, float* work, + lapack_int lwork ); +lapack_int LAPACKE_dtgexc_work( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* q, lapack_int ldq, double* z, + lapack_int ldz, lapack_int* ifst, + lapack_int* ilst, double* work, + lapack_int lwork ); +lapack_int LAPACKE_ctgexc_work( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz, + lapack_int ifst, lapack_int ilst ); +lapack_int LAPACKE_ztgexc_work( int matrix_layout, lapack_logical wantq, + lapack_logical wantz, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_int ifst, lapack_int ilst ); + +lapack_int LAPACKE_stgsen_work( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + float* a, lapack_int lda, float* b, + lapack_int ldb, float* alphar, float* alphai, + float* beta, float* q, lapack_int ldq, float* z, + lapack_int ldz, lapack_int* m, float* pl, + float* pr, float* dif, float* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); +lapack_int LAPACKE_dtgsen_work( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + double* a, lapack_int lda, double* b, + lapack_int ldb, double* alphar, double* alphai, + double* beta, double* q, lapack_int ldq, + double* z, lapack_int ldz, lapack_int* m, + double* pl, double* pr, double* dif, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_ctgsen_work( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* alpha, + lapack_complex_float* beta, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* z, lapack_int ldz, + lapack_int* m, float* pl, float* pr, float* dif, + lapack_complex_float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_ztgsen_work( int matrix_layout, lapack_int ijob, + lapack_logical wantq, lapack_logical wantz, + const lapack_logical* select, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* alpha, + lapack_complex_double* beta, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* z, lapack_int ldz, + lapack_int* m, double* pl, double* pr, + double* dif, lapack_complex_double* work, + lapack_int lwork, lapack_int* iwork, + lapack_int liwork ); + +lapack_int LAPACKE_stgsja_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_int k, lapack_int l, + float* a, lapack_int lda, float* b, + lapack_int ldb, float tola, float tolb, + float* alpha, float* beta, float* u, + lapack_int ldu, float* v, lapack_int ldv, + float* q, lapack_int ldq, float* work, + lapack_int* ncycle ); +lapack_int LAPACKE_dtgsja_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_int k, lapack_int l, + double* a, lapack_int lda, double* b, + lapack_int ldb, double tola, double tolb, + double* alpha, double* beta, double* u, + lapack_int ldu, double* v, lapack_int ldv, + double* q, lapack_int ldq, double* work, + lapack_int* ncycle ); +lapack_int LAPACKE_ctgsja_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_int k, lapack_int l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + float tola, float tolb, float* alpha, + float* beta, lapack_complex_float* u, + lapack_int ldu, lapack_complex_float* v, + lapack_int ldv, lapack_complex_float* q, + lapack_int ldq, lapack_complex_float* work, + lapack_int* ncycle ); +lapack_int LAPACKE_ztgsja_work( int matrix_layout, char jobu, char jobv, + char jobq, lapack_int m, lapack_int p, + lapack_int n, lapack_int k, lapack_int l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + double tola, double tolb, double* alpha, + double* beta, lapack_complex_double* u, + lapack_int ldu, lapack_complex_double* v, + lapack_int ldv, lapack_complex_double* q, + lapack_int ldq, lapack_complex_double* work, + lapack_int* ncycle ); + +lapack_int LAPACKE_stgsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const float* a, lapack_int lda, const float* b, + lapack_int ldb, const float* vl, + lapack_int ldvl, const float* vr, + lapack_int ldvr, float* s, float* dif, + lapack_int mm, lapack_int* m, float* work, + lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_dtgsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const double* a, lapack_int lda, + const double* b, lapack_int ldb, + const double* vl, lapack_int ldvl, + const double* vr, lapack_int ldvr, double* s, + double* dif, lapack_int mm, lapack_int* m, + double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_ctgsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* vl, lapack_int ldvl, + const lapack_complex_float* vr, lapack_int ldvr, + float* s, float* dif, lapack_int mm, + lapack_int* m, lapack_complex_float* work, + lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_ztgsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* vl, + lapack_int ldvl, + const lapack_complex_double* vr, + lapack_int ldvr, double* s, double* dif, + lapack_int mm, lapack_int* m, + lapack_complex_double* work, lapack_int lwork, + lapack_int* iwork ); + +lapack_int LAPACKE_stgsyl_work( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, const float* a, + lapack_int lda, const float* b, lapack_int ldb, + float* c, lapack_int ldc, const float* d, + lapack_int ldd, const float* e, lapack_int lde, + float* f, lapack_int ldf, float* scale, + float* dif, float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dtgsyl_work( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, const double* a, + lapack_int lda, const double* b, lapack_int ldb, + double* c, lapack_int ldc, const double* d, + lapack_int ldd, const double* e, lapack_int lde, + double* f, lapack_int ldf, double* scale, + double* dif, double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_ctgsyl_work( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* c, lapack_int ldc, + const lapack_complex_float* d, lapack_int ldd, + const lapack_complex_float* e, lapack_int lde, + lapack_complex_float* f, lapack_int ldf, + float* scale, float* dif, + lapack_complex_float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_ztgsyl_work( int matrix_layout, char trans, lapack_int ijob, + lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* c, lapack_int ldc, + const lapack_complex_double* d, lapack_int ldd, + const lapack_complex_double* e, lapack_int lde, + lapack_complex_double* f, lapack_int ldf, + double* scale, double* dif, + lapack_complex_double* work, lapack_int lwork, + lapack_int* iwork ); + +lapack_int LAPACKE_stpcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, const float* ap, + float* rcond, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dtpcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, const double* ap, + double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_ctpcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, + const lapack_complex_float* ap, float* rcond, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztpcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, + const lapack_complex_double* ap, double* rcond, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_stprfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const float* ap, const float* b, lapack_int ldb, + const float* x, lapack_int ldx, float* ferr, + float* berr, float* work, lapack_int* iwork ); +lapack_int LAPACKE_dtprfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const double* ap, const double* b, + lapack_int ldb, const double* x, lapack_int ldx, + double* ferr, double* berr, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_ctprfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztprfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_stptri_work( int matrix_layout, char uplo, char diag, + lapack_int n, float* ap ); +lapack_int LAPACKE_dtptri_work( int matrix_layout, char uplo, char diag, + lapack_int n, double* ap ); +lapack_int LAPACKE_ctptri_work( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_complex_float* ap ); +lapack_int LAPACKE_ztptri_work( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_complex_double* ap ); + +lapack_int LAPACKE_stptrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const float* ap, float* b, lapack_int ldb ); +lapack_int LAPACKE_dtptrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const double* ap, double* b, lapack_int ldb ); +lapack_int LAPACKE_ctptrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_float* ap, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztptrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_double* ap, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stpttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const float* ap, float* arf ); +lapack_int LAPACKE_dtpttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const double* ap, double* arf ); +lapack_int LAPACKE_ctpttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* ap, + lapack_complex_float* arf ); +lapack_int LAPACKE_ztpttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* ap, + lapack_complex_double* arf ); + +lapack_int LAPACKE_stpttr_work( int matrix_layout, char uplo, lapack_int n, + const float* ap, float* a, lapack_int lda ); +lapack_int LAPACKE_dtpttr_work( int matrix_layout, char uplo, lapack_int n, + const double* ap, double* a, lapack_int lda ); +lapack_int LAPACKE_ctpttr_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_ztpttr_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_strcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, const float* a, + lapack_int lda, float* rcond, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dtrcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, const double* a, + lapack_int lda, double* rcond, double* work, + lapack_int* iwork ); +lapack_int LAPACKE_ctrcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + float* rcond, lapack_complex_float* work, + float* rwork ); +lapack_int LAPACKE_ztrcon_work( int matrix_layout, char norm, char uplo, + char diag, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + double* rcond, lapack_complex_double* work, + double* rwork ); + +lapack_int LAPACKE_strevc_work( int matrix_layout, char side, char howmny, + lapack_logical* select, lapack_int n, + const float* t, lapack_int ldt, float* vl, + lapack_int ldvl, float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, float* work ); +lapack_int LAPACKE_dtrevc_work( int matrix_layout, char side, char howmny, + lapack_logical* select, lapack_int n, + const double* t, lapack_int ldt, double* vl, + lapack_int ldvl, double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, double* work ); +lapack_int LAPACKE_ctrevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* vl, lapack_int ldvl, + lapack_complex_float* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztrevc_work( int matrix_layout, char side, char howmny, + const lapack_logical* select, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* vl, lapack_int ldvl, + lapack_complex_double* vr, lapack_int ldvr, + lapack_int mm, lapack_int* m, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_strexc_work( int matrix_layout, char compq, lapack_int n, + float* t, lapack_int ldt, float* q, + lapack_int ldq, lapack_int* ifst, + lapack_int* ilst, float* work ); +lapack_int LAPACKE_dtrexc_work( int matrix_layout, char compq, lapack_int n, + double* t, lapack_int ldt, double* q, + lapack_int ldq, lapack_int* ifst, + lapack_int* ilst, double* work ); +lapack_int LAPACKE_ctrexc_work( int matrix_layout, char compq, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* q, lapack_int ldq, + lapack_int ifst, lapack_int ilst ); +lapack_int LAPACKE_ztrexc_work( int matrix_layout, char compq, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* q, lapack_int ldq, + lapack_int ifst, lapack_int ilst ); + +lapack_int LAPACKE_strrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const float* a, lapack_int lda, const float* b, + lapack_int ldb, const float* x, lapack_int ldx, + float* ferr, float* berr, float* work, + lapack_int* iwork ); +lapack_int LAPACKE_dtrrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const double* a, lapack_int lda, + const double* b, lapack_int ldb, + const double* x, lapack_int ldx, double* ferr, + double* berr, double* work, lapack_int* iwork ); +lapack_int LAPACKE_ctrrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + const lapack_complex_float* x, lapack_int ldx, + float* ferr, float* berr, + lapack_complex_float* work, float* rwork ); +lapack_int LAPACKE_ztrrfs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + const lapack_complex_double* x, lapack_int ldx, + double* ferr, double* berr, + lapack_complex_double* work, double* rwork ); + +lapack_int LAPACKE_strsen_work( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + float* t, lapack_int ldt, float* q, + lapack_int ldq, float* wr, float* wi, + lapack_int* m, float* s, float* sep, + float* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_dtrsen_work( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + double* t, lapack_int ldt, double* q, + lapack_int ldq, double* wr, double* wi, + lapack_int* m, double* s, double* sep, + double* work, lapack_int lwork, + lapack_int* iwork, lapack_int liwork ); +lapack_int LAPACKE_ctrsen_work( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* w, lapack_int* m, + float* s, float* sep, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_ztrsen_work( int matrix_layout, char job, char compq, + const lapack_logical* select, lapack_int n, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* w, lapack_int* m, + double* s, double* sep, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_strsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const float* t, lapack_int ldt, const float* vl, + lapack_int ldvl, const float* vr, + lapack_int ldvr, float* s, float* sep, + lapack_int mm, lapack_int* m, float* work, + lapack_int ldwork, lapack_int* iwork ); +lapack_int LAPACKE_dtrsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const double* t, lapack_int ldt, + const double* vl, lapack_int ldvl, + const double* vr, lapack_int ldvr, double* s, + double* sep, lapack_int mm, lapack_int* m, + double* work, lapack_int ldwork, + lapack_int* iwork ); +lapack_int LAPACKE_ctrsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_float* t, lapack_int ldt, + const lapack_complex_float* vl, lapack_int ldvl, + const lapack_complex_float* vr, lapack_int ldvr, + float* s, float* sep, lapack_int mm, + lapack_int* m, lapack_complex_float* work, + lapack_int ldwork, float* rwork ); +lapack_int LAPACKE_ztrsna_work( int matrix_layout, char job, char howmny, + const lapack_logical* select, lapack_int n, + const lapack_complex_double* t, lapack_int ldt, + const lapack_complex_double* vl, + lapack_int ldvl, + const lapack_complex_double* vr, + lapack_int ldvr, double* s, double* sep, + lapack_int mm, lapack_int* m, + lapack_complex_double* work, lapack_int ldwork, + double* rwork ); + +lapack_int LAPACKE_strsyl_work( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const float* a, lapack_int lda, const float* b, + lapack_int ldb, float* c, lapack_int ldc, + float* scale ); +lapack_int LAPACKE_dtrsyl_work( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const double* a, lapack_int lda, + const double* b, lapack_int ldb, double* c, + lapack_int ldc, double* scale ); +lapack_int LAPACKE_ctrsyl_work( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* c, lapack_int ldc, + float* scale ); +lapack_int LAPACKE_ztrsyl_work( int matrix_layout, char trana, char tranb, + lapack_int isgn, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* c, lapack_int ldc, + double* scale ); + +lapack_int LAPACKE_strtri_work( int matrix_layout, char uplo, char diag, + lapack_int n, float* a, lapack_int lda ); +lapack_int LAPACKE_dtrtri_work( int matrix_layout, char uplo, char diag, + lapack_int n, double* a, lapack_int lda ); +lapack_int LAPACKE_ctrtri_work( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_complex_float* a, + lapack_int lda ); +lapack_int LAPACKE_ztrtri_work( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_complex_double* a, + lapack_int lda ); + +lapack_int LAPACKE_strtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const float* a, lapack_int lda, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dtrtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const double* a, lapack_int lda, double* b, + lapack_int ldb ); +lapack_int LAPACKE_ctrtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztrtrs_work( int matrix_layout, char uplo, char trans, + char diag, lapack_int n, lapack_int nrhs, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_strttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const float* a, lapack_int lda, + float* arf ); +lapack_int LAPACKE_dtrttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const double* a, lapack_int lda, + double* arf ); +lapack_int LAPACKE_ctrttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float* a, + lapack_int lda, lapack_complex_float* arf ); +lapack_int LAPACKE_ztrttf_work( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double* a, + lapack_int lda, lapack_complex_double* arf ); + +lapack_int LAPACKE_strttp_work( int matrix_layout, char uplo, lapack_int n, + const float* a, lapack_int lda, float* ap ); +lapack_int LAPACKE_dtrttp_work( int matrix_layout, char uplo, lapack_int n, + const double* a, lapack_int lda, double* ap ); +lapack_int LAPACKE_ctrttp_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + lapack_complex_float* ap ); +lapack_int LAPACKE_ztrttp_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + lapack_complex_double* ap ); + +lapack_int LAPACKE_stzrzf_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* tau, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dtzrzf_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* tau, + double* work, lapack_int lwork ); +lapack_int LAPACKE_ctzrzf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_ztzrzf_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cungbr_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, + lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zungbr_work( int matrix_layout, char vect, lapack_int m, + lapack_int n, lapack_int k, + lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunghr_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunghr_work( int matrix_layout, lapack_int n, lapack_int ilo, + lapack_int ihi, lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunglq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunglq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cungql_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zungql_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cungqr_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zungqr_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cungrq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zungrq_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int k, lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cungtr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zungtr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmbr_work( int matrix_layout, char vect, char side, + char trans, lapack_int m, lapack_int n, + lapack_int k, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmbr_work( int matrix_layout, char vect, char side, + char trans, lapack_int m, lapack_int n, + lapack_int k, const lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmhr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmhr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int ilo, + lapack_int ihi, const lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmlq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmlq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmql_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmql_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmqr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmqr_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmrq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmrq_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmrz_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const lapack_complex_float* a, + lapack_int lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmrz_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, const lapack_complex_double* a, + lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cunmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const lapack_complex_float* a, lapack_int lda, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_zunmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const lapack_complex_double* a, lapack_int lda, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work, lapack_int lwork ); + +lapack_int LAPACKE_cupgtr_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float* ap, + const lapack_complex_float* tau, + lapack_complex_float* q, lapack_int ldq, + lapack_complex_float* work ); +lapack_int LAPACKE_zupgtr_work( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double* ap, + const lapack_complex_double* tau, + lapack_complex_double* q, lapack_int ldq, + lapack_complex_double* work ); + +lapack_int LAPACKE_cupmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const lapack_complex_float* ap, + const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int ldc, + lapack_complex_float* work ); +lapack_int LAPACKE_zupmtr_work( int matrix_layout, char side, char uplo, + char trans, lapack_int m, lapack_int n, + const lapack_complex_double* ap, + const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int ldc, + lapack_complex_double* work ); + +lapack_int LAPACKE_claghe( int matrix_layout, lapack_int n, lapack_int k, + const float* d, lapack_complex_float* a, + lapack_int lda, lapack_int* iseed ); +lapack_int LAPACKE_zlaghe( int matrix_layout, lapack_int n, lapack_int k, + const double* d, lapack_complex_double* a, + lapack_int lda, lapack_int* iseed ); + +lapack_int LAPACKE_slagsy( int matrix_layout, lapack_int n, lapack_int k, + const float* d, float* a, lapack_int lda, + lapack_int* iseed ); +lapack_int LAPACKE_dlagsy( int matrix_layout, lapack_int n, lapack_int k, + const double* d, double* a, lapack_int lda, + lapack_int* iseed ); +lapack_int LAPACKE_clagsy( int matrix_layout, lapack_int n, lapack_int k, + const float* d, lapack_complex_float* a, + lapack_int lda, lapack_int* iseed ); +lapack_int LAPACKE_zlagsy( int matrix_layout, lapack_int n, lapack_int k, + const double* d, lapack_complex_double* a, + lapack_int lda, lapack_int* iseed ); + +lapack_int LAPACKE_slapmr( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, float* x, lapack_int ldx, + lapack_int* k ); +lapack_int LAPACKE_dlapmr( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, double* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_clapmr( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, lapack_complex_float* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_zlapmr( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, lapack_complex_double* x, + lapack_int ldx, lapack_int* k ); + +lapack_int LAPACKE_slapmt( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, float* x, lapack_int ldx, + lapack_int* k ); +lapack_int LAPACKE_dlapmt( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, double* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_clapmt( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, lapack_complex_float* x, + lapack_int ldx, lapack_int* k ); +lapack_int LAPACKE_zlapmt( int matrix_layout, lapack_logical forwrd, + lapack_int m, lapack_int n, lapack_complex_double* x, + lapack_int ldx, lapack_int* k ); + +float LAPACKE_slapy2( float x, float y ); +double LAPACKE_dlapy2( double x, double y ); + +float LAPACKE_slapy3( float x, float y, float z ); +double LAPACKE_dlapy3( double x, double y, double z ); + +lapack_int LAPACKE_slartgp( float f, float g, float* cs, float* sn, float* r ); +lapack_int LAPACKE_dlartgp( double f, double g, double* cs, double* sn, + double* r ); + +lapack_int LAPACKE_slartgs( float x, float y, float sigma, float* cs, + float* sn ); +lapack_int LAPACKE_dlartgs( double x, double y, double sigma, double* cs, + double* sn ); + + +//LAPACK 3.3.0 +lapack_int LAPACKE_cbbcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, lapack_int m, + lapack_int p, lapack_int q, float* theta, float* phi, + lapack_complex_float* u1, lapack_int ldu1, + lapack_complex_float* u2, lapack_int ldu2, + lapack_complex_float* v1t, lapack_int ldv1t, + lapack_complex_float* v2t, lapack_int ldv2t, + float* b11d, float* b11e, float* b12d, float* b12e, + float* b21d, float* b21e, float* b22d, float* b22e ); +lapack_int LAPACKE_cbbcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + lapack_int m, lapack_int p, lapack_int q, + float* theta, float* phi, + lapack_complex_float* u1, lapack_int ldu1, + lapack_complex_float* u2, lapack_int ldu2, + lapack_complex_float* v1t, lapack_int ldv1t, + lapack_complex_float* v2t, lapack_int ldv2t, + float* b11d, float* b11e, float* b12d, + float* b12e, float* b21d, float* b21e, + float* b22d, float* b22e, float* rwork, + lapack_int lrwork ); +lapack_int LAPACKE_cheswapr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_cheswapr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_chetri2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_chetri2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_chetri2x( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, lapack_int nb ); +lapack_int LAPACKE_chetri2x_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int nb ); +lapack_int LAPACKE_chetrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_chetrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work ); +lapack_int LAPACKE_csyconv( int matrix_layout, char uplo, char way, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, lapack_complex_float* work ); +lapack_int LAPACKE_csyconv_work( int matrix_layout, char uplo, char way, + lapack_int n, lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* work ); +lapack_int LAPACKE_csyswapr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_csyswapr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_csytri2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_csytri2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_csytri2x( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, lapack_int nb ); +lapack_int LAPACKE_csytri2x_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int nb ); +lapack_int LAPACKE_csytrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_csytrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work ); +lapack_int LAPACKE_cunbdb( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_float* x11, lapack_int ldx11, + lapack_complex_float* x12, lapack_int ldx12, + lapack_complex_float* x21, lapack_int ldx21, + lapack_complex_float* x22, lapack_int ldx22, + float* theta, float* phi, + lapack_complex_float* taup1, + lapack_complex_float* taup2, + lapack_complex_float* tauq1, + lapack_complex_float* tauq2 ); +lapack_int LAPACKE_cunbdb_work( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_float* x11, lapack_int ldx11, + lapack_complex_float* x12, lapack_int ldx12, + lapack_complex_float* x21, lapack_int ldx21, + lapack_complex_float* x22, lapack_int ldx22, + float* theta, float* phi, + lapack_complex_float* taup1, + lapack_complex_float* taup2, + lapack_complex_float* tauq1, + lapack_complex_float* tauq2, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_cuncsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_float* x11, lapack_int ldx11, + lapack_complex_float* x12, lapack_int ldx12, + lapack_complex_float* x21, lapack_int ldx21, + lapack_complex_float* x22, lapack_int ldx22, + float* theta, lapack_complex_float* u1, + lapack_int ldu1, lapack_complex_float* u2, + lapack_int ldu2, lapack_complex_float* v1t, + lapack_int ldv1t, lapack_complex_float* v2t, + lapack_int ldv2t ); +lapack_int LAPACKE_cuncsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + char signs, lapack_int m, lapack_int p, + lapack_int q, lapack_complex_float* x11, + lapack_int ldx11, lapack_complex_float* x12, + lapack_int ldx12, lapack_complex_float* x21, + lapack_int ldx21, lapack_complex_float* x22, + lapack_int ldx22, float* theta, + lapack_complex_float* u1, lapack_int ldu1, + lapack_complex_float* u2, lapack_int ldu2, + lapack_complex_float* v1t, lapack_int ldv1t, + lapack_complex_float* v2t, lapack_int ldv2t, + lapack_complex_float* work, lapack_int lwork, + float* rwork, lapack_int lrwork, + lapack_int* iwork ); +lapack_int LAPACKE_cuncsd2by1( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + lapack_complex_float* x11, lapack_int ldx11, + lapack_complex_float* x21, lapack_int ldx21, + lapack_complex_float* theta, lapack_complex_float* u1, + lapack_int ldu1, lapack_complex_float* u2, + lapack_int ldu2, lapack_complex_float* v1t, lapack_int ldv1t ); +lapack_int LAPACKE_cuncsd2by1_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, + lapack_int q, lapack_complex_float* x11, lapack_int ldx11, + lapack_complex_float* x21, lapack_int ldx21, + lapack_complex_float* theta, lapack_complex_float* u1, + lapack_int ldu1, lapack_complex_float* u2, + lapack_int ldu2, lapack_complex_float* v1t, + lapack_int ldv1t, lapack_complex_float* work, + lapack_int lwork, float* rwork, lapack_int lrwork, + lapack_int* iwork ); +lapack_int LAPACKE_dbbcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, lapack_int m, + lapack_int p, lapack_int q, double* theta, + double* phi, double* u1, lapack_int ldu1, double* u2, + lapack_int ldu2, double* v1t, lapack_int ldv1t, + double* v2t, lapack_int ldv2t, double* b11d, + double* b11e, double* b12d, double* b12e, + double* b21d, double* b21e, double* b22d, + double* b22e ); +lapack_int LAPACKE_dbbcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + lapack_int m, lapack_int p, lapack_int q, + double* theta, double* phi, double* u1, + lapack_int ldu1, double* u2, lapack_int ldu2, + double* v1t, lapack_int ldv1t, double* v2t, + lapack_int ldv2t, double* b11d, double* b11e, + double* b12d, double* b12e, double* b21d, + double* b21e, double* b22d, double* b22e, + double* work, lapack_int lwork ); +lapack_int LAPACKE_dorbdb( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + double* x11, lapack_int ldx11, double* x12, + lapack_int ldx12, double* x21, lapack_int ldx21, + double* x22, lapack_int ldx22, double* theta, + double* phi, double* taup1, double* taup2, + double* tauq1, double* tauq2 ); +lapack_int LAPACKE_dorbdb_work( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + double* x11, lapack_int ldx11, double* x12, + lapack_int ldx12, double* x21, lapack_int ldx21, + double* x22, lapack_int ldx22, double* theta, + double* phi, double* taup1, double* taup2, + double* tauq1, double* tauq2, double* work, + lapack_int lwork ); +lapack_int LAPACKE_dorcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + double* x11, lapack_int ldx11, double* x12, + lapack_int ldx12, double* x21, lapack_int ldx21, + double* x22, lapack_int ldx22, double* theta, + double* u1, lapack_int ldu1, double* u2, + lapack_int ldu2, double* v1t, lapack_int ldv1t, + double* v2t, lapack_int ldv2t ); +lapack_int LAPACKE_dorcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + char signs, lapack_int m, lapack_int p, + lapack_int q, double* x11, lapack_int ldx11, + double* x12, lapack_int ldx12, double* x21, + lapack_int ldx21, double* x22, lapack_int ldx22, + double* theta, double* u1, lapack_int ldu1, + double* u2, lapack_int ldu2, double* v1t, + lapack_int ldv1t, double* v2t, lapack_int ldv2t, + double* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_dorcsd2by1( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + double* x11, lapack_int ldx11, double* x21, lapack_int ldx21, + double* theta, double* u1, lapack_int ldu1, double* u2, + lapack_int ldu2, double* v1t, lapack_int ldv1t); +lapack_int LAPACKE_dorcsd2by1_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + double* x11, lapack_int ldx11, double* x21, lapack_int ldx21, + double* theta, double* u1, lapack_int ldu1, double* u2, + lapack_int ldu2, double* v1t, lapack_int ldv1t, + double* work, lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_dsyconv( int matrix_layout, char uplo, char way, lapack_int n, + double* a, lapack_int lda, const lapack_int* ipiv, double* work); +lapack_int LAPACKE_dsyconv_work( int matrix_layout, char uplo, char way, + lapack_int n, double* a, lapack_int lda, + const lapack_int* ipiv, double* work ); +lapack_int LAPACKE_dsyswapr( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int i1, lapack_int i2 ); +lapack_int LAPACKE_dsyswapr_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int i1, lapack_int i2 ); +lapack_int LAPACKE_dsytri2( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_dsytri2_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int lwork ); +lapack_int LAPACKE_dsytri2x( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, const lapack_int* ipiv, + lapack_int nb ); +lapack_int LAPACKE_dsytri2x_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, + const lapack_int* ipiv, double* work, + lapack_int nb ); +lapack_int LAPACKE_dsytrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_dsytrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const lapack_int* ipiv, + double* b, lapack_int ldb, double* work ); +lapack_int LAPACKE_sbbcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, lapack_int m, + lapack_int p, lapack_int q, float* theta, float* phi, + float* u1, lapack_int ldu1, float* u2, + lapack_int ldu2, float* v1t, lapack_int ldv1t, + float* v2t, lapack_int ldv2t, float* b11d, + float* b11e, float* b12d, float* b12e, float* b21d, + float* b21e, float* b22d, float* b22e ); +lapack_int LAPACKE_sbbcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + lapack_int m, lapack_int p, lapack_int q, + float* theta, float* phi, float* u1, + lapack_int ldu1, float* u2, lapack_int ldu2, + float* v1t, lapack_int ldv1t, float* v2t, + lapack_int ldv2t, float* b11d, float* b11e, + float* b12d, float* b12e, float* b21d, + float* b21e, float* b22d, float* b22e, + float* work, lapack_int lwork ); +lapack_int LAPACKE_sorbdb( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, float* x11, + lapack_int ldx11, float* x12, lapack_int ldx12, + float* x21, lapack_int ldx21, float* x22, + lapack_int ldx22, float* theta, float* phi, + float* taup1, float* taup2, float* tauq1, + float* tauq2 ); +lapack_int LAPACKE_sorbdb_work( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + float* x11, lapack_int ldx11, float* x12, + lapack_int ldx12, float* x21, lapack_int ldx21, + float* x22, lapack_int ldx22, float* theta, + float* phi, float* taup1, float* taup2, + float* tauq1, float* tauq2, float* work, + lapack_int lwork ); +lapack_int LAPACKE_sorcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, float* x11, + lapack_int ldx11, float* x12, lapack_int ldx12, + float* x21, lapack_int ldx21, float* x22, + lapack_int ldx22, float* theta, float* u1, + lapack_int ldu1, float* u2, lapack_int ldu2, + float* v1t, lapack_int ldv1t, float* v2t, + lapack_int ldv2t ); +lapack_int LAPACKE_sorcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + char signs, lapack_int m, lapack_int p, + lapack_int q, float* x11, lapack_int ldx11, + float* x12, lapack_int ldx12, float* x21, + lapack_int ldx21, float* x22, lapack_int ldx22, + float* theta, float* u1, lapack_int ldu1, + float* u2, lapack_int ldu2, float* v1t, + lapack_int ldv1t, float* v2t, lapack_int ldv2t, + float* work, lapack_int lwork, + lapack_int* iwork ); +lapack_int LAPACKE_sorcsd2by1( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + float* x11, lapack_int ldx11, float* x21, lapack_int ldx21, + float* theta, float* u1, lapack_int ldu1, float* u2, + lapack_int ldu2, float* v1t, lapack_int ldv1t); +lapack_int LAPACKE_sorcsd2by1_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + float* x11, lapack_int ldx11, float* x21, lapack_int ldx21, + float* theta, float* u1, lapack_int ldu1, float* u2, + lapack_int ldu2, float* v1t, lapack_int ldv1t, + float* work, lapack_int lwork, lapack_int* iwork ); +lapack_int LAPACKE_ssyconv( int matrix_layout, char uplo, char way, lapack_int n, + float* a, lapack_int lda, const lapack_int* ipiv, float* work ); +lapack_int LAPACKE_ssyconv_work( int matrix_layout, char uplo, char way, + lapack_int n, float* a, lapack_int lda, + const lapack_int* ipiv, float* work ); +lapack_int LAPACKE_ssyswapr( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int i1, lapack_int i2 ); +lapack_int LAPACKE_ssyswapr_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int i1, lapack_int i2 ); +lapack_int LAPACKE_ssytri2( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, const lapack_int* ipiv ); +lapack_int LAPACKE_ssytri2_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int lwork ); +lapack_int LAPACKE_ssytri2x( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, const lapack_int* ipiv, + lapack_int nb ); +lapack_int LAPACKE_ssytri2x_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, + const lapack_int* ipiv, float* work, + lapack_int nb ); +lapack_int LAPACKE_ssytrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_ssytrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, + lapack_int lda, const lapack_int* ipiv, + float* b, lapack_int ldb, float* work ); +lapack_int LAPACKE_zbbcsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, lapack_int m, + lapack_int p, lapack_int q, double* theta, + double* phi, lapack_complex_double* u1, + lapack_int ldu1, lapack_complex_double* u2, + lapack_int ldu2, lapack_complex_double* v1t, + lapack_int ldv1t, lapack_complex_double* v2t, + lapack_int ldv2t, double* b11d, double* b11e, + double* b12d, double* b12e, double* b21d, + double* b21e, double* b22d, double* b22e ); +lapack_int LAPACKE_zbbcsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + lapack_int m, lapack_int p, lapack_int q, + double* theta, double* phi, + lapack_complex_double* u1, lapack_int ldu1, + lapack_complex_double* u2, lapack_int ldu2, + lapack_complex_double* v1t, lapack_int ldv1t, + lapack_complex_double* v2t, lapack_int ldv2t, + double* b11d, double* b11e, double* b12d, + double* b12e, double* b21d, double* b21e, + double* b22d, double* b22e, double* rwork, + lapack_int lrwork ); +lapack_int LAPACKE_zheswapr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_zheswapr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_zhetri2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_zhetri2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int lwork ); +lapack_int LAPACKE_zhetri2x( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, lapack_int nb ); +lapack_int LAPACKE_zhetri2x_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int nb ); +lapack_int LAPACKE_zhetrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); +lapack_int LAPACKE_zhetrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work ); +lapack_int LAPACKE_zsyconv( int matrix_layout, char uplo, char way, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, lapack_complex_double* work ); +lapack_int LAPACKE_zsyconv_work( int matrix_layout, char uplo, char way, + lapack_int n, lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* work ); +lapack_int LAPACKE_zsyswapr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_zsyswapr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int i1, + lapack_int i2 ); +lapack_int LAPACKE_zsytri2( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv ); +lapack_int LAPACKE_zsytri2_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int lwork ); +lapack_int LAPACKE_zsytri2x( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, lapack_int nb ); +lapack_int LAPACKE_zsytri2x_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int nb ); +lapack_int LAPACKE_zsytrs2( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); +lapack_int LAPACKE_zsytrs2_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work ); +lapack_int LAPACKE_zunbdb( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_double* x11, lapack_int ldx11, + lapack_complex_double* x12, lapack_int ldx12, + lapack_complex_double* x21, lapack_int ldx21, + lapack_complex_double* x22, lapack_int ldx22, + double* theta, double* phi, + lapack_complex_double* taup1, + lapack_complex_double* taup2, + lapack_complex_double* tauq1, + lapack_complex_double* tauq2 ); +lapack_int LAPACKE_zunbdb_work( int matrix_layout, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_double* x11, lapack_int ldx11, + lapack_complex_double* x12, lapack_int ldx12, + lapack_complex_double* x21, lapack_int ldx21, + lapack_complex_double* x22, lapack_int ldx22, + double* theta, double* phi, + lapack_complex_double* taup1, + lapack_complex_double* taup2, + lapack_complex_double* tauq1, + lapack_complex_double* tauq2, + lapack_complex_double* work, lapack_int lwork ); +lapack_int LAPACKE_zuncsd( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, char signs, + lapack_int m, lapack_int p, lapack_int q, + lapack_complex_double* x11, lapack_int ldx11, + lapack_complex_double* x12, lapack_int ldx12, + lapack_complex_double* x21, lapack_int ldx21, + lapack_complex_double* x22, lapack_int ldx22, + double* theta, lapack_complex_double* u1, + lapack_int ldu1, lapack_complex_double* u2, + lapack_int ldu2, lapack_complex_double* v1t, + lapack_int ldv1t, lapack_complex_double* v2t, + lapack_int ldv2t ); +lapack_int LAPACKE_zuncsd_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, char jobv2t, char trans, + char signs, lapack_int m, lapack_int p, + lapack_int q, lapack_complex_double* x11, + lapack_int ldx11, lapack_complex_double* x12, + lapack_int ldx12, lapack_complex_double* x21, + lapack_int ldx21, lapack_complex_double* x22, + lapack_int ldx22, double* theta, + lapack_complex_double* u1, lapack_int ldu1, + lapack_complex_double* u2, lapack_int ldu2, + lapack_complex_double* v1t, lapack_int ldv1t, + lapack_complex_double* v2t, lapack_int ldv2t, + lapack_complex_double* work, lapack_int lwork, + double* rwork, lapack_int lrwork, + lapack_int* iwork ); +lapack_int LAPACKE_zuncsd2by1( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, lapack_int q, + lapack_complex_double* x11, lapack_int ldx11, + lapack_complex_double* x21, lapack_int ldx21, + lapack_complex_double* theta, lapack_complex_double* u1, + lapack_int ldu1, lapack_complex_double* u2, + lapack_int ldu2, lapack_complex_double* v1t, lapack_int ldv1t ); +lapack_int LAPACKE_zuncsd2by1_work( int matrix_layout, char jobu1, char jobu2, + char jobv1t, lapack_int m, lapack_int p, + lapack_int q, lapack_complex_double* x11, lapack_int ldx11, + lapack_complex_double* x21, lapack_int ldx21, + lapack_complex_double* theta, lapack_complex_double* u1, + lapack_int ldu1, lapack_complex_double* u2, + lapack_int ldu2, lapack_complex_double* v1t, + lapack_int ldv1t, lapack_complex_double* work, + lapack_int lwork, double* rwork, lapack_int lrwork, + lapack_int* iwork ); + +//LAPACK 3.4.0 +lapack_int LAPACKE_sgemqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const float* v, lapack_int ldv, + const float* t, lapack_int ldt, float* c, + lapack_int ldc ); +lapack_int LAPACKE_dgemqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const double* v, lapack_int ldv, + const double* t, lapack_int ldt, double* c, + lapack_int ldc ); +lapack_int LAPACKE_cgemqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const lapack_complex_float* v, + lapack_int ldv, const lapack_complex_float* t, + lapack_int ldt, lapack_complex_float* c, + lapack_int ldc ); +lapack_int LAPACKE_zgemqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const lapack_complex_double* v, + lapack_int ldv, const lapack_complex_double* t, + lapack_int ldt, lapack_complex_double* c, + lapack_int ldc ); + +lapack_int LAPACKE_sgeqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, float* a, lapack_int lda, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dgeqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, double* a, lapack_int lda, double* t, + lapack_int ldt ); +lapack_int LAPACKE_cgeqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* t, + lapack_int ldt ); +lapack_int LAPACKE_zgeqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* t, + lapack_int ldt ); + +lapack_int LAPACKE_sgeqrt2( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dgeqrt2( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* t, + lapack_int ldt ); +lapack_int LAPACKE_cgeqrt2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zgeqrt2( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_sgeqrt3( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dgeqrt3( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* t, + lapack_int ldt ); +lapack_int LAPACKE_cgeqrt3( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zgeqrt3( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, const float* v, + lapack_int ldv, const float* t, lapack_int ldt, + float* a, lapack_int lda, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, const double* v, + lapack_int ldv, const double* t, lapack_int ldt, + double* a, lapack_int lda, double* b, + lapack_int ldb ); +lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_stpqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, float* a, + lapack_int lda, float* b, lapack_int ldb, float* t, + lapack_int ldt ); + +lapack_int LAPACKE_dtpqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, double* a, + lapack_int lda, double* b, lapack_int ldb, double* t, + lapack_int ldt ); +lapack_int LAPACKE_ctpqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_ztpqrt( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_stpqrt2( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + float* a, lapack_int lda, + float* b, lapack_int ldb, + float* t, lapack_int ldt ); +lapack_int LAPACKE_dtpqrt2( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + double* a, lapack_int lda, + double* b, lapack_int ldb, + double* t, lapack_int ldt ); +lapack_int LAPACKE_ctpqrt2( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_ztpqrt2( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_stprfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, lapack_int l, const float* v, + lapack_int ldv, const float* t, lapack_int ldt, + float* a, lapack_int lda, float* b, lapack_int ldb ); +lapack_int LAPACKE_dtprfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, lapack_int l, const double* v, + lapack_int ldv, const double* t, lapack_int ldt, + double* a, lapack_int lda, double* b, lapack_int ldb ); +lapack_int LAPACKE_ctprfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, lapack_int l, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_ztprfb( int matrix_layout, char side, char trans, char direct, + char storev, lapack_int m, lapack_int n, + lapack_int k, lapack_int l, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_sgemqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const float* v, lapack_int ldv, + const float* t, lapack_int ldt, float* c, + lapack_int ldc, float* work ); +lapack_int LAPACKE_dgemqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const double* v, lapack_int ldv, + const double* t, lapack_int ldt, double* c, + lapack_int ldc, double* work ); +lapack_int LAPACKE_cgemqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const lapack_complex_float* v, + lapack_int ldv, const lapack_complex_float* t, + lapack_int ldt, lapack_complex_float* c, + lapack_int ldc, lapack_complex_float* work ); +lapack_int LAPACKE_zgemqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int nb, const lapack_complex_double* v, + lapack_int ldv, const lapack_complex_double* t, + lapack_int ldt, lapack_complex_double* c, + lapack_int ldc, lapack_complex_double* work ); + +lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, float* a, lapack_int lda, + float* t, lapack_int ldt, float* work ); +lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, double* a, lapack_int lda, + double* t, lapack_int ldt, double* work ); +lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, lapack_complex_float* a, + lapack_int lda, lapack_complex_float* t, + lapack_int ldt, lapack_complex_float* work ); +lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int nb, lapack_complex_double* a, + lapack_int lda, lapack_complex_double* t, + lapack_int ldt, lapack_complex_double* work ); + +lapack_int LAPACKE_sgeqrt2_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dgeqrt2_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* t, + lapack_int ldt ); +lapack_int LAPACKE_cgeqrt2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zgeqrt2_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_sgeqrt3_work( int matrix_layout, lapack_int m, lapack_int n, + float* a, lapack_int lda, float* t, + lapack_int ldt ); +lapack_int LAPACKE_dgeqrt3_work( int matrix_layout, lapack_int m, lapack_int n, + double* a, lapack_int lda, double* t, + lapack_int ldt ); +lapack_int LAPACKE_cgeqrt3_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_zgeqrt3_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, const float* v, + lapack_int ldv, const float* t, lapack_int ldt, + float* a, lapack_int lda, float* b, + lapack_int ldb, float* work ); +lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, const double* v, + lapack_int ldv, const double* t, + lapack_int ldt, double* a, lapack_int lda, + double* b, lapack_int ldb, double* work ); +lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work ); +lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, + lapack_int m, lapack_int n, lapack_int k, + lapack_int l, lapack_int nb, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work ); + +lapack_int LAPACKE_stpqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, float* a, + lapack_int lda, float* b, lapack_int ldb, + float* t, lapack_int ldt, float* work ); +lapack_int LAPACKE_dtpqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, double* a, + lapack_int lda, double* b, lapack_int ldb, + double* t, lapack_int ldt, double* work ); +lapack_int LAPACKE_ctpqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* work ); +lapack_int LAPACKE_ztpqrt_work( int matrix_layout, lapack_int m, lapack_int n, + lapack_int l, lapack_int nb, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* work ); + +lapack_int LAPACKE_stpqrt2_work( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + float* a, lapack_int lda, + float* b, lapack_int ldb, + float* t, lapack_int ldt ); +lapack_int LAPACKE_dtpqrt2_work( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + double* a, lapack_int lda, + double* b, lapack_int ldb, + double* t, lapack_int ldt ); +lapack_int LAPACKE_ctpqrt2_work( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* t, lapack_int ldt ); +lapack_int LAPACKE_ztpqrt2_work( int matrix_layout, + lapack_int m, lapack_int n, lapack_int l, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* t, lapack_int ldt ); + +lapack_int LAPACKE_stprfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, lapack_int l, + const float* v, lapack_int ldv, const float* t, + lapack_int ldt, float* a, lapack_int lda, + float* b, lapack_int ldb, const float* work, + lapack_int ldwork ); +lapack_int LAPACKE_dtprfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, lapack_int l, + const double* v, lapack_int ldv, + const double* t, lapack_int ldt, double* a, + lapack_int lda, double* b, lapack_int ldb, + const double* work, lapack_int ldwork ); +lapack_int LAPACKE_ctprfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, lapack_int l, + const lapack_complex_float* v, lapack_int ldv, + const lapack_complex_float* t, lapack_int ldt, + lapack_complex_float* a, lapack_int lda, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work, lapack_int ldwork ); +lapack_int LAPACKE_ztprfb_work( int matrix_layout, char side, char trans, + char direct, char storev, lapack_int m, + lapack_int n, lapack_int k, lapack_int l, + const lapack_complex_double* v, lapack_int ldv, + const lapack_complex_double* t, lapack_int ldt, + lapack_complex_double* a, lapack_int lda, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work, lapack_int ldwork ); +//LAPACK 3.X.X +lapack_int LAPACKE_ssysv_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dsysv_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_csysv_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsysv_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_ssytrf_rook( int matrix_layout, char uplo, lapack_int n, float* a, + lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_dsytrf_rook( int matrix_layout, char uplo, lapack_int n, double* a, + lapack_int lda, lapack_int* ipiv ); +lapack_int LAPACKE_csytrf_rook( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zsytrf_rook( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_ssytrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, lapack_int ldb ); +lapack_int LAPACKE_dsytrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, lapack_int lda, + const lapack_int* ipiv, double* b, lapack_int ldb ); +lapack_int LAPACKE_csytrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsytrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chetrf_rook( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv ); +lapack_int LAPACKE_zhetrf_rook( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv ); + +lapack_int LAPACKE_chetrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zhetrs_rook( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_csyr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float alpha, + const lapack_complex_float* x, lapack_int incx, + lapack_complex_float* a, lapack_int lda ); +lapack_int LAPACKE_zsyr( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double alpha, + const lapack_complex_double* x, lapack_int incx, + lapack_complex_double* a, lapack_int lda ); + +lapack_int LAPACKE_ssysv_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, float* a, lapack_int lda, + lapack_int* ipiv, float* b, lapack_int ldb, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dsysv_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, double* a, lapack_int lda, + lapack_int* ipiv, double* b, lapack_int ldb, + double* work, lapack_int lwork ); +lapack_int LAPACKE_csysv_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_float* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb, + lapack_complex_float* work, + lapack_int lwork ); +lapack_int LAPACKE_zsysv_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, lapack_complex_double* a, + lapack_int lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb, + lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_ssytrf_rook_work( int matrix_layout, char uplo, lapack_int n, + float* a, lapack_int lda, lapack_int* ipiv, + float* work, lapack_int lwork ); +lapack_int LAPACKE_dsytrf_rook_work( int matrix_layout, char uplo, lapack_int n, + double* a, lapack_int lda, lapack_int* ipiv, + double* work, lapack_int lwork ); +lapack_int LAPACKE_csytrf_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* work, + lapack_int lwork ); +lapack_int LAPACKE_zsytrf_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_ssytrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const float* a, lapack_int lda, + const lapack_int* ipiv, float* b, + lapack_int ldb ); +lapack_int LAPACKE_dsytrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const double* a, + lapack_int lda, const lapack_int* ipiv, + double* b, lapack_int ldb ); +lapack_int LAPACKE_csytrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zsytrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + +lapack_int LAPACKE_chetrf_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_float* work, + lapack_int lwork ); +lapack_int LAPACKE_zhetrf_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double* a, lapack_int lda, + lapack_int* ipiv, lapack_complex_double* work, + lapack_int lwork ); + +lapack_int LAPACKE_chetrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_float* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int ldb ); +lapack_int LAPACKE_zhetrs_rook_work( int matrix_layout, char uplo, lapack_int n, + lapack_int nrhs, const lapack_complex_double* a, + lapack_int lda, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int ldb ); + + +lapack_int LAPACKE_csyr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_float alpha, + const lapack_complex_float* x, + lapack_int incx, lapack_complex_float* a, + lapack_int lda ); +lapack_int LAPACKE_zsyr_work( int matrix_layout, char uplo, lapack_int n, + lapack_complex_double alpha, + const lapack_complex_double* x, + lapack_int incx, lapack_complex_double* a, + lapack_int lda ); +void LAPACKE_ilaver( const lapack_int* vers_major, + const lapack_int* vers_minor, + const lapack_int* vers_patch ); + + +#define LAPACK_sgetrf LAPACK_GLOBAL(sgetrf,SGETRF) +#define LAPACK_dgetrf LAPACK_GLOBAL(dgetrf,DGETRF) +#define LAPACK_cgetrf LAPACK_GLOBAL(cgetrf,CGETRF) +#define LAPACK_zgetrf LAPACK_GLOBAL(zgetrf,ZGETRF) +#define LAPACK_sgetrf2 LAPACK_GLOBAL(sgetrf2,SGETRF2) +#define LAPACK_dgetrf2 LAPACK_GLOBAL(dgetrf2,DGETRF2) +#define LAPACK_cgetrf2 LAPACK_GLOBAL(cgetrf2,CGETRF2) +#define LAPACK_zgetrf2 LAPACK_GLOBAL(zgetrf2,ZGETRF2) +#define LAPACK_sgbtrf LAPACK_GLOBAL(sgbtrf,SGBTRF) +#define LAPACK_dgbtrf LAPACK_GLOBAL(dgbtrf,DGBTRF) +#define LAPACK_cgbtrf LAPACK_GLOBAL(cgbtrf,CGBTRF) +#define LAPACK_zgbtrf LAPACK_GLOBAL(zgbtrf,ZGBTRF) +#define LAPACK_sgttrf LAPACK_GLOBAL(sgttrf,SGTTRF) +#define LAPACK_dgttrf LAPACK_GLOBAL(dgttrf,DGTTRF) +#define LAPACK_cgttrf LAPACK_GLOBAL(cgttrf,CGTTRF) +#define LAPACK_zgttrf LAPACK_GLOBAL(zgttrf,ZGTTRF) +#define LAPACK_spotrf LAPACK_GLOBAL(spotrf,SPOTRF) +#define LAPACK_dpotrf LAPACK_GLOBAL(dpotrf,DPOTRF) +#define LAPACK_cpotrf LAPACK_GLOBAL(cpotrf,CPOTRF) +#define LAPACK_zpotrf LAPACK_GLOBAL(zpotrf,ZPOTRF) +#define LAPACK_spotrf2 LAPACK_GLOBAL(spotrf2,SPOTRF2) +#define LAPACK_dpotrf2 LAPACK_GLOBAL(dpotrf2,DPOTRF2) +#define LAPACK_cpotrf2 LAPACK_GLOBAL(cpotrf2,CPOTRF2) +#define LAPACK_zpotrf2 LAPACK_GLOBAL(zpotrf2,ZPOTRF2) +#define LAPACK_dpstrf LAPACK_GLOBAL(dpstrf,DPSTRF) +#define LAPACK_spstrf LAPACK_GLOBAL(spstrf,SPSTRF) +#define LAPACK_zpstrf LAPACK_GLOBAL(zpstrf,ZPSTRF) +#define LAPACK_cpstrf LAPACK_GLOBAL(cpstrf,CPSTRF) +#define LAPACK_dpftrf LAPACK_GLOBAL(dpftrf,DPFTRF) +#define LAPACK_spftrf LAPACK_GLOBAL(spftrf,SPFTRF) +#define LAPACK_zpftrf LAPACK_GLOBAL(zpftrf,ZPFTRF) +#define LAPACK_cpftrf LAPACK_GLOBAL(cpftrf,CPFTRF) +#define LAPACK_spptrf LAPACK_GLOBAL(spptrf,SPPTRF) +#define LAPACK_dpptrf LAPACK_GLOBAL(dpptrf,DPPTRF) +#define LAPACK_cpptrf LAPACK_GLOBAL(cpptrf,CPPTRF) +#define LAPACK_zpptrf LAPACK_GLOBAL(zpptrf,ZPPTRF) +#define LAPACK_spbtrf LAPACK_GLOBAL(spbtrf,SPBTRF) +#define LAPACK_dpbtrf LAPACK_GLOBAL(dpbtrf,DPBTRF) +#define LAPACK_cpbtrf LAPACK_GLOBAL(cpbtrf,CPBTRF) +#define LAPACK_zpbtrf LAPACK_GLOBAL(zpbtrf,ZPBTRF) +#define LAPACK_spttrf LAPACK_GLOBAL(spttrf,SPTTRF) +#define LAPACK_dpttrf LAPACK_GLOBAL(dpttrf,DPTTRF) +#define LAPACK_cpttrf LAPACK_GLOBAL(cpttrf,CPTTRF) +#define LAPACK_zpttrf LAPACK_GLOBAL(zpttrf,ZPTTRF) +#define LAPACK_ssytrf LAPACK_GLOBAL(ssytrf,SSYTRF) +#define LAPACK_ssytrf_rook LAPACK_GLOBAL(ssytrf_rook,SSYTRF_ROOK) +#define LAPACK_dsytrf LAPACK_GLOBAL(dsytrf,DSYTRF) +#define LAPACK_dsytrf_rook LAPACK_GLOBAL(dsytrf_rook,DSYTRF_ROOK) +#define LAPACK_csytrf LAPACK_GLOBAL(csytrf,CSYTRF) +#define LAPACK_csytrf_rook LAPACK_GLOBAL(csytrf_rook,CSYTRF_ROOK) +#define LAPACK_zsytrf LAPACK_GLOBAL(zsytrf,ZSYTRF) +#define LAPACK_zsytrf_rook LAPACK_GLOBAL(zsytrf_rook,ZSYTRF_ROOK) +#define LAPACK_chetrf LAPACK_GLOBAL(chetrf,CHETRF) +#define LAPACK_chetrf_rook LAPACK_GLOBAL(chetrf_rook,CHETRF_ROOK) +#define LAPACK_zhetrf LAPACK_GLOBAL(zhetrf,ZHETRF) +#define LAPACK_zhetrf_rook LAPACK_GLOBAL(zhetrf_rook,ZHETRF_ROOK) +#define LAPACK_ssptrf LAPACK_GLOBAL(ssptrf,SSPTRF) +#define LAPACK_dsptrf LAPACK_GLOBAL(dsptrf,DSPTRF) +#define LAPACK_csptrf LAPACK_GLOBAL(csptrf,CSPTRF) +#define LAPACK_zsptrf LAPACK_GLOBAL(zsptrf,ZSPTRF) +#define LAPACK_chptrf LAPACK_GLOBAL(chptrf,CHPTRF) +#define LAPACK_zhptrf LAPACK_GLOBAL(zhptrf,ZHPTRF) +#define LAPACK_sgetrs LAPACK_GLOBAL(sgetrs,SGETRS) +#define LAPACK_dgetrs LAPACK_GLOBAL(dgetrs,DGETRS) +#define LAPACK_cgetrs LAPACK_GLOBAL(cgetrs,CGETRS) +#define LAPACK_zgetrs LAPACK_GLOBAL(zgetrs,ZGETRS) +#define LAPACK_sgbtrs LAPACK_GLOBAL(sgbtrs,SGBTRS) +#define LAPACK_dgbtrs LAPACK_GLOBAL(dgbtrs,DGBTRS) +#define LAPACK_cgbtrs LAPACK_GLOBAL(cgbtrs,CGBTRS) +#define LAPACK_zgbtrs LAPACK_GLOBAL(zgbtrs,ZGBTRS) +#define LAPACK_sgttrs LAPACK_GLOBAL(sgttrs,SGTTRS) +#define LAPACK_dgttrs LAPACK_GLOBAL(dgttrs,DGTTRS) +#define LAPACK_cgttrs LAPACK_GLOBAL(cgttrs,CGTTRS) +#define LAPACK_zgttrs LAPACK_GLOBAL(zgttrs,ZGTTRS) +#define LAPACK_spotrs LAPACK_GLOBAL(spotrs,SPOTRS) +#define LAPACK_dpotrs LAPACK_GLOBAL(dpotrs,DPOTRS) +#define LAPACK_cpotrs LAPACK_GLOBAL(cpotrs,CPOTRS) +#define LAPACK_zpotrs LAPACK_GLOBAL(zpotrs,ZPOTRS) +#define LAPACK_dpftrs LAPACK_GLOBAL(dpftrs,DPFTRS) +#define LAPACK_spftrs LAPACK_GLOBAL(spftrs,SPFTRS) +#define LAPACK_zpftrs LAPACK_GLOBAL(zpftrs,ZPFTRS) +#define LAPACK_cpftrs LAPACK_GLOBAL(cpftrs,CPFTRS) +#define LAPACK_spptrs LAPACK_GLOBAL(spptrs,SPPTRS) +#define LAPACK_dpptrs LAPACK_GLOBAL(dpptrs,DPPTRS) +#define LAPACK_cpptrs LAPACK_GLOBAL(cpptrs,CPPTRS) +#define LAPACK_zpptrs LAPACK_GLOBAL(zpptrs,ZPPTRS) +#define LAPACK_spbtrs LAPACK_GLOBAL(spbtrs,SPBTRS) +#define LAPACK_dpbtrs LAPACK_GLOBAL(dpbtrs,DPBTRS) +#define LAPACK_cpbtrs LAPACK_GLOBAL(cpbtrs,CPBTRS) +#define LAPACK_zpbtrs LAPACK_GLOBAL(zpbtrs,ZPBTRS) +#define LAPACK_spttrs LAPACK_GLOBAL(spttrs,SPTTRS) +#define LAPACK_dpttrs LAPACK_GLOBAL(dpttrs,DPTTRS) +#define LAPACK_cpttrs LAPACK_GLOBAL(cpttrs,CPTTRS) +#define LAPACK_zpttrs LAPACK_GLOBAL(zpttrs,ZPTTRS) +#define LAPACK_ssytrs LAPACK_GLOBAL(ssytrs,SSYTRS) +#define LAPACK_ssytrs_rook LAPACK_GLOBAL(ssytrs_rook,SSYTRS_ROOK) +#define LAPACK_dsytrs LAPACK_GLOBAL(dsytrs,DSYTRS) +#define LAPACK_dsytrs_rook LAPACK_GLOBAL(dsytrs_rook,DSYTRS_ROOK) +#define LAPACK_csytrs LAPACK_GLOBAL(csytrs,CSYTRS) +#define LAPACK_csytrs_rook LAPACK_GLOBAL(csytrs_rook,CSYTRS_ROOK) +#define LAPACK_zsytrs LAPACK_GLOBAL(zsytrs,ZSYTRS) +#define LAPACK_zsytrs_rook LAPACK_GLOBAL(zsytrs_rook,ZSYTRS_ROOK) +#define LAPACK_chetrs LAPACK_GLOBAL(chetrs,CHETRS) +#define LAPACK_chetrs_rook LAPACK_GLOBAL(chetrs_rook,CHETRS_ROOK) +#define LAPACK_zhetrs LAPACK_GLOBAL(zhetrs,ZHETRS) +#define LAPACK_zhetrs_rook LAPACK_GLOBAL(zhetrs_rook,ZHETRS_ROOK) +#define LAPACK_ssptrs LAPACK_GLOBAL(ssptrs,SSPTRS) +#define LAPACK_dsptrs LAPACK_GLOBAL(dsptrs,DSPTRS) +#define LAPACK_csptrs LAPACK_GLOBAL(csptrs,CSPTRS) +#define LAPACK_zsptrs LAPACK_GLOBAL(zsptrs,ZSPTRS) +#define LAPACK_chptrs LAPACK_GLOBAL(chptrs,CHPTRS) +#define LAPACK_zhptrs LAPACK_GLOBAL(zhptrs,ZHPTRS) +#define LAPACK_strtrs LAPACK_GLOBAL(strtrs,STRTRS) +#define LAPACK_dtrtrs LAPACK_GLOBAL(dtrtrs,DTRTRS) +#define LAPACK_ctrtrs LAPACK_GLOBAL(ctrtrs,CTRTRS) +#define LAPACK_ztrtrs LAPACK_GLOBAL(ztrtrs,ZTRTRS) +#define LAPACK_stptrs LAPACK_GLOBAL(stptrs,STPTRS) +#define LAPACK_dtptrs LAPACK_GLOBAL(dtptrs,DTPTRS) +#define LAPACK_ctptrs LAPACK_GLOBAL(ctptrs,CTPTRS) +#define LAPACK_ztptrs LAPACK_GLOBAL(ztptrs,ZTPTRS) +#define LAPACK_stbtrs LAPACK_GLOBAL(stbtrs,STBTRS) +#define LAPACK_dtbtrs LAPACK_GLOBAL(dtbtrs,DTBTRS) +#define LAPACK_ctbtrs LAPACK_GLOBAL(ctbtrs,CTBTRS) +#define LAPACK_ztbtrs LAPACK_GLOBAL(ztbtrs,ZTBTRS) +#define LAPACK_sgecon LAPACK_GLOBAL(sgecon,SGECON) +#define LAPACK_dgecon LAPACK_GLOBAL(dgecon,DGECON) +#define LAPACK_cgecon LAPACK_GLOBAL(cgecon,CGECON) +#define LAPACK_zgecon LAPACK_GLOBAL(zgecon,ZGECON) +#define LAPACK_sgbcon LAPACK_GLOBAL(sgbcon,SGBCON) +#define LAPACK_dgbcon LAPACK_GLOBAL(dgbcon,DGBCON) +#define LAPACK_cgbcon LAPACK_GLOBAL(cgbcon,CGBCON) +#define LAPACK_zgbcon LAPACK_GLOBAL(zgbcon,ZGBCON) +#define LAPACK_sgtcon LAPACK_GLOBAL(sgtcon,SGTCON) +#define LAPACK_dgtcon LAPACK_GLOBAL(dgtcon,DGTCON) +#define LAPACK_cgtcon LAPACK_GLOBAL(cgtcon,CGTCON) +#define LAPACK_zgtcon LAPACK_GLOBAL(zgtcon,ZGTCON) +#define LAPACK_spocon LAPACK_GLOBAL(spocon,SPOCON) +#define LAPACK_dpocon LAPACK_GLOBAL(dpocon,DPOCON) +#define LAPACK_cpocon LAPACK_GLOBAL(cpocon,CPOCON) +#define LAPACK_zpocon LAPACK_GLOBAL(zpocon,ZPOCON) +#define LAPACK_sppcon LAPACK_GLOBAL(sppcon,SPPCON) +#define LAPACK_dppcon LAPACK_GLOBAL(dppcon,DPPCON) +#define LAPACK_cppcon LAPACK_GLOBAL(cppcon,CPPCON) +#define LAPACK_zppcon LAPACK_GLOBAL(zppcon,ZPPCON) +#define LAPACK_spbcon LAPACK_GLOBAL(spbcon,SPBCON) +#define LAPACK_dpbcon LAPACK_GLOBAL(dpbcon,DPBCON) +#define LAPACK_cpbcon LAPACK_GLOBAL(cpbcon,CPBCON) +#define LAPACK_zpbcon LAPACK_GLOBAL(zpbcon,ZPBCON) +#define LAPACK_sptcon LAPACK_GLOBAL(sptcon,SPTCON) +#define LAPACK_dptcon LAPACK_GLOBAL(dptcon,DPTCON) +#define LAPACK_cptcon LAPACK_GLOBAL(cptcon,CPTCON) +#define LAPACK_zptcon LAPACK_GLOBAL(zptcon,ZPTCON) +#define LAPACK_ssycon LAPACK_GLOBAL(ssycon,SSYCON) +#define LAPACK_dsycon LAPACK_GLOBAL(dsycon,DSYCON) +#define LAPACK_csycon LAPACK_GLOBAL(csycon,CSYCON) +#define LAPACK_zsycon LAPACK_GLOBAL(zsycon,ZSYCON) +#define LAPACK_checon LAPACK_GLOBAL(checon,CHECON) +#define LAPACK_zhecon LAPACK_GLOBAL(zhecon,ZHECON) +#define LAPACK_sspcon LAPACK_GLOBAL(sspcon,SSPCON) +#define LAPACK_dspcon LAPACK_GLOBAL(dspcon,DSPCON) +#define LAPACK_cspcon LAPACK_GLOBAL(cspcon,CSPCON) +#define LAPACK_zspcon LAPACK_GLOBAL(zspcon,ZSPCON) +#define LAPACK_chpcon LAPACK_GLOBAL(chpcon,CHPCON) +#define LAPACK_zhpcon LAPACK_GLOBAL(zhpcon,ZHPCON) +#define LAPACK_strcon LAPACK_GLOBAL(strcon,STRCON) +#define LAPACK_dtrcon LAPACK_GLOBAL(dtrcon,DTRCON) +#define LAPACK_ctrcon LAPACK_GLOBAL(ctrcon,CTRCON) +#define LAPACK_ztrcon LAPACK_GLOBAL(ztrcon,ZTRCON) +#define LAPACK_stpcon LAPACK_GLOBAL(stpcon,STPCON) +#define LAPACK_dtpcon LAPACK_GLOBAL(dtpcon,DTPCON) +#define LAPACK_ctpcon LAPACK_GLOBAL(ctpcon,CTPCON) +#define LAPACK_ztpcon LAPACK_GLOBAL(ztpcon,ZTPCON) +#define LAPACK_stbcon LAPACK_GLOBAL(stbcon,STBCON) +#define LAPACK_dtbcon LAPACK_GLOBAL(dtbcon,DTBCON) +#define LAPACK_ctbcon LAPACK_GLOBAL(ctbcon,CTBCON) +#define LAPACK_ztbcon LAPACK_GLOBAL(ztbcon,ZTBCON) +#define LAPACK_sgerfs LAPACK_GLOBAL(sgerfs,SGERFS) +#define LAPACK_dgerfs LAPACK_GLOBAL(dgerfs,DGERFS) +#define LAPACK_cgerfs LAPACK_GLOBAL(cgerfs,CGERFS) +#define LAPACK_zgerfs LAPACK_GLOBAL(zgerfs,ZGERFS) +#define LAPACK_dgerfsx LAPACK_GLOBAL(dgerfsx,DGERFSX) +#define LAPACK_sgerfsx LAPACK_GLOBAL(sgerfsx,SGERFSX) +#define LAPACK_zgerfsx LAPACK_GLOBAL(zgerfsx,ZGERFSX) +#define LAPACK_cgerfsx LAPACK_GLOBAL(cgerfsx,CGERFSX) +#define LAPACK_sgbrfs LAPACK_GLOBAL(sgbrfs,SGBRFS) +#define LAPACK_dgbrfs LAPACK_GLOBAL(dgbrfs,DGBRFS) +#define LAPACK_cgbrfs LAPACK_GLOBAL(cgbrfs,CGBRFS) +#define LAPACK_zgbrfs LAPACK_GLOBAL(zgbrfs,ZGBRFS) +#define LAPACK_dgbrfsx LAPACK_GLOBAL(dgbrfsx,DGBRFSX) +#define LAPACK_sgbrfsx LAPACK_GLOBAL(sgbrfsx,SGBRFSX) +#define LAPACK_zgbrfsx LAPACK_GLOBAL(zgbrfsx,ZGBRFSX) +#define LAPACK_cgbrfsx LAPACK_GLOBAL(cgbrfsx,CGBRFSX) +#define LAPACK_sgtrfs LAPACK_GLOBAL(sgtrfs,SGTRFS) +#define LAPACK_dgtrfs LAPACK_GLOBAL(dgtrfs,DGTRFS) +#define LAPACK_cgtrfs LAPACK_GLOBAL(cgtrfs,CGTRFS) +#define LAPACK_zgtrfs LAPACK_GLOBAL(zgtrfs,ZGTRFS) +#define LAPACK_sporfs LAPACK_GLOBAL(sporfs,SPORFS) +#define LAPACK_dporfs LAPACK_GLOBAL(dporfs,DPORFS) +#define LAPACK_cporfs LAPACK_GLOBAL(cporfs,CPORFS) +#define LAPACK_zporfs LAPACK_GLOBAL(zporfs,ZPORFS) +#define LAPACK_dporfsx LAPACK_GLOBAL(dporfsx,DPORFSX) +#define LAPACK_sporfsx LAPACK_GLOBAL(sporfsx,SPORFSX) +#define LAPACK_zporfsx LAPACK_GLOBAL(zporfsx,ZPORFSX) +#define LAPACK_cporfsx LAPACK_GLOBAL(cporfsx,CPORFSX) +#define LAPACK_spprfs LAPACK_GLOBAL(spprfs,SPPRFS) +#define LAPACK_dpprfs LAPACK_GLOBAL(dpprfs,DPPRFS) +#define LAPACK_cpprfs LAPACK_GLOBAL(cpprfs,CPPRFS) +#define LAPACK_zpprfs LAPACK_GLOBAL(zpprfs,ZPPRFS) +#define LAPACK_spbrfs LAPACK_GLOBAL(spbrfs,SPBRFS) +#define LAPACK_dpbrfs LAPACK_GLOBAL(dpbrfs,DPBRFS) +#define LAPACK_cpbrfs LAPACK_GLOBAL(cpbrfs,CPBRFS) +#define LAPACK_zpbrfs LAPACK_GLOBAL(zpbrfs,ZPBRFS) +#define LAPACK_sptrfs LAPACK_GLOBAL(sptrfs,SPTRFS) +#define LAPACK_dptrfs LAPACK_GLOBAL(dptrfs,DPTRFS) +#define LAPACK_cptrfs LAPACK_GLOBAL(cptrfs,CPTRFS) +#define LAPACK_zptrfs LAPACK_GLOBAL(zptrfs,ZPTRFS) +#define LAPACK_ssyrfs LAPACK_GLOBAL(ssyrfs,SSYRFS) +#define LAPACK_dsyrfs LAPACK_GLOBAL(dsyrfs,DSYRFS) +#define LAPACK_csyrfs LAPACK_GLOBAL(csyrfs,CSYRFS) +#define LAPACK_zsyrfs LAPACK_GLOBAL(zsyrfs,ZSYRFS) +#define LAPACK_dsyrfsx LAPACK_GLOBAL(dsyrfsx,DSYRFSX) +#define LAPACK_ssyrfsx LAPACK_GLOBAL(ssyrfsx,SSYRFSX) +#define LAPACK_zsyrfsx LAPACK_GLOBAL(zsyrfsx,ZSYRFSX) +#define LAPACK_csyrfsx LAPACK_GLOBAL(csyrfsx,CSYRFSX) +#define LAPACK_cherfs LAPACK_GLOBAL(cherfs,CHERFS) +#define LAPACK_zherfs LAPACK_GLOBAL(zherfs,ZHERFS) +#define LAPACK_zherfsx LAPACK_GLOBAL(zherfsx,ZHERFSX) +#define LAPACK_cherfsx LAPACK_GLOBAL(cherfsx,CHERFSX) +#define LAPACK_ssprfs LAPACK_GLOBAL(ssprfs,SSPRFS) +#define LAPACK_dsprfs LAPACK_GLOBAL(dsprfs,DSPRFS) +#define LAPACK_csprfs LAPACK_GLOBAL(csprfs,CSPRFS) +#define LAPACK_zsprfs LAPACK_GLOBAL(zsprfs,ZSPRFS) +#define LAPACK_chprfs LAPACK_GLOBAL(chprfs,CHPRFS) +#define LAPACK_zhprfs LAPACK_GLOBAL(zhprfs,ZHPRFS) +#define LAPACK_strrfs LAPACK_GLOBAL(strrfs,STRRFS) +#define LAPACK_dtrrfs LAPACK_GLOBAL(dtrrfs,DTRRFS) +#define LAPACK_ctrrfs LAPACK_GLOBAL(ctrrfs,CTRRFS) +#define LAPACK_ztrrfs LAPACK_GLOBAL(ztrrfs,ZTRRFS) +#define LAPACK_stprfs LAPACK_GLOBAL(stprfs,STPRFS) +#define LAPACK_dtprfs LAPACK_GLOBAL(dtprfs,DTPRFS) +#define LAPACK_ctprfs LAPACK_GLOBAL(ctprfs,CTPRFS) +#define LAPACK_ztprfs LAPACK_GLOBAL(ztprfs,ZTPRFS) +#define LAPACK_stbrfs LAPACK_GLOBAL(stbrfs,STBRFS) +#define LAPACK_dtbrfs LAPACK_GLOBAL(dtbrfs,DTBRFS) +#define LAPACK_ctbrfs LAPACK_GLOBAL(ctbrfs,CTBRFS) +#define LAPACK_ztbrfs LAPACK_GLOBAL(ztbrfs,ZTBRFS) +#define LAPACK_sgetri LAPACK_GLOBAL(sgetri,SGETRI) +#define LAPACK_dgetri LAPACK_GLOBAL(dgetri,DGETRI) +#define LAPACK_cgetri LAPACK_GLOBAL(cgetri,CGETRI) +#define LAPACK_zgetri LAPACK_GLOBAL(zgetri,ZGETRI) +#define LAPACK_spotri LAPACK_GLOBAL(spotri,SPOTRI) +#define LAPACK_dpotri LAPACK_GLOBAL(dpotri,DPOTRI) +#define LAPACK_cpotri LAPACK_GLOBAL(cpotri,CPOTRI) +#define LAPACK_zpotri LAPACK_GLOBAL(zpotri,ZPOTRI) +#define LAPACK_dpftri LAPACK_GLOBAL(dpftri,DPFTRI) +#define LAPACK_spftri LAPACK_GLOBAL(spftri,SPFTRI) +#define LAPACK_zpftri LAPACK_GLOBAL(zpftri,ZPFTRI) +#define LAPACK_cpftri LAPACK_GLOBAL(cpftri,CPFTRI) +#define LAPACK_spptri LAPACK_GLOBAL(spptri,SPPTRI) +#define LAPACK_dpptri LAPACK_GLOBAL(dpptri,DPPTRI) +#define LAPACK_cpptri LAPACK_GLOBAL(cpptri,CPPTRI) +#define LAPACK_zpptri LAPACK_GLOBAL(zpptri,ZPPTRI) +#define LAPACK_ssytri LAPACK_GLOBAL(ssytri,SSYTRI) +#define LAPACK_dsytri LAPACK_GLOBAL(dsytri,DSYTRI) +#define LAPACK_csytri LAPACK_GLOBAL(csytri,CSYTRI) +#define LAPACK_zsytri LAPACK_GLOBAL(zsytri,ZSYTRI) +#define LAPACK_chetri LAPACK_GLOBAL(chetri,CHETRI) +#define LAPACK_zhetri LAPACK_GLOBAL(zhetri,ZHETRI) +#define LAPACK_ssptri LAPACK_GLOBAL(ssptri,SSPTRI) +#define LAPACK_dsptri LAPACK_GLOBAL(dsptri,DSPTRI) +#define LAPACK_csptri LAPACK_GLOBAL(csptri,CSPTRI) +#define LAPACK_zsptri LAPACK_GLOBAL(zsptri,ZSPTRI) +#define LAPACK_chptri LAPACK_GLOBAL(chptri,CHPTRI) +#define LAPACK_zhptri LAPACK_GLOBAL(zhptri,ZHPTRI) +#define LAPACK_strtri LAPACK_GLOBAL(strtri,STRTRI) +#define LAPACK_dtrtri LAPACK_GLOBAL(dtrtri,DTRTRI) +#define LAPACK_ctrtri LAPACK_GLOBAL(ctrtri,CTRTRI) +#define LAPACK_ztrtri LAPACK_GLOBAL(ztrtri,ZTRTRI) +#define LAPACK_dtftri LAPACK_GLOBAL(dtftri,DTFTRI) +#define LAPACK_stftri LAPACK_GLOBAL(stftri,STFTRI) +#define LAPACK_ztftri LAPACK_GLOBAL(ztftri,ZTFTRI) +#define LAPACK_ctftri LAPACK_GLOBAL(ctftri,CTFTRI) +#define LAPACK_stptri LAPACK_GLOBAL(stptri,STPTRI) +#define LAPACK_dtptri LAPACK_GLOBAL(dtptri,DTPTRI) +#define LAPACK_ctptri LAPACK_GLOBAL(ctptri,CTPTRI) +#define LAPACK_ztptri LAPACK_GLOBAL(ztptri,ZTPTRI) +#define LAPACK_sgeequ LAPACK_GLOBAL(sgeequ,SGEEQU) +#define LAPACK_dgeequ LAPACK_GLOBAL(dgeequ,DGEEQU) +#define LAPACK_cgeequ LAPACK_GLOBAL(cgeequ,CGEEQU) +#define LAPACK_zgeequ LAPACK_GLOBAL(zgeequ,ZGEEQU) +#define LAPACK_dgeequb LAPACK_GLOBAL(dgeequb,DGEEQUB) +#define LAPACK_sgeequb LAPACK_GLOBAL(sgeequb,SGEEQUB) +#define LAPACK_zgeequb LAPACK_GLOBAL(zgeequb,ZGEEQUB) +#define LAPACK_cgeequb LAPACK_GLOBAL(cgeequb,CGEEQUB) +#define LAPACK_sgbequ LAPACK_GLOBAL(sgbequ,SGBEQU) +#define LAPACK_dgbequ LAPACK_GLOBAL(dgbequ,DGBEQU) +#define LAPACK_cgbequ LAPACK_GLOBAL(cgbequ,CGBEQU) +#define LAPACK_zgbequ LAPACK_GLOBAL(zgbequ,ZGBEQU) +#define LAPACK_dgbequb LAPACK_GLOBAL(dgbequb,DGBEQUB) +#define LAPACK_sgbequb LAPACK_GLOBAL(sgbequb,SGBEQUB) +#define LAPACK_zgbequb LAPACK_GLOBAL(zgbequb,ZGBEQUB) +#define LAPACK_cgbequb LAPACK_GLOBAL(cgbequb,CGBEQUB) +#define LAPACK_spoequ LAPACK_GLOBAL(spoequ,SPOEQU) +#define LAPACK_dpoequ LAPACK_GLOBAL(dpoequ,DPOEQU) +#define LAPACK_cpoequ LAPACK_GLOBAL(cpoequ,CPOEQU) +#define LAPACK_zpoequ LAPACK_GLOBAL(zpoequ,ZPOEQU) +#define LAPACK_dpoequb LAPACK_GLOBAL(dpoequb,DPOEQUB) +#define LAPACK_spoequb LAPACK_GLOBAL(spoequb,SPOEQUB) +#define LAPACK_zpoequb LAPACK_GLOBAL(zpoequb,ZPOEQUB) +#define LAPACK_cpoequb LAPACK_GLOBAL(cpoequb,CPOEQUB) +#define LAPACK_sppequ LAPACK_GLOBAL(sppequ,SPPEQU) +#define LAPACK_dppequ LAPACK_GLOBAL(dppequ,DPPEQU) +#define LAPACK_cppequ LAPACK_GLOBAL(cppequ,CPPEQU) +#define LAPACK_zppequ LAPACK_GLOBAL(zppequ,ZPPEQU) +#define LAPACK_spbequ LAPACK_GLOBAL(spbequ,SPBEQU) +#define LAPACK_dpbequ LAPACK_GLOBAL(dpbequ,DPBEQU) +#define LAPACK_cpbequ LAPACK_GLOBAL(cpbequ,CPBEQU) +#define LAPACK_zpbequ LAPACK_GLOBAL(zpbequ,ZPBEQU) +#define LAPACK_dsyequb LAPACK_GLOBAL(dsyequb,DSYEQUB) +#define LAPACK_ssyequb LAPACK_GLOBAL(ssyequb,SSYEQUB) +#define LAPACK_zsyequb LAPACK_GLOBAL(zsyequb,ZSYEQUB) +#define LAPACK_csyequb LAPACK_GLOBAL(csyequb,CSYEQUB) +#define LAPACK_zheequb LAPACK_GLOBAL(zheequb,ZHEEQUB) +#define LAPACK_cheequb LAPACK_GLOBAL(cheequb,CHEEQUB) +#define LAPACK_sgesv LAPACK_GLOBAL(sgesv,SGESV) +#define LAPACK_dgesv LAPACK_GLOBAL(dgesv,DGESV) +#define LAPACK_cgesv LAPACK_GLOBAL(cgesv,CGESV) +#define LAPACK_zgesv LAPACK_GLOBAL(zgesv,ZGESV) +#define LAPACK_dsgesv LAPACK_GLOBAL(dsgesv,DSGESV) +#define LAPACK_zcgesv LAPACK_GLOBAL(zcgesv,ZCGESV) +#define LAPACK_sgesvx LAPACK_GLOBAL(sgesvx,SGESVX) +#define LAPACK_dgesvx LAPACK_GLOBAL(dgesvx,DGESVX) +#define LAPACK_cgesvx LAPACK_GLOBAL(cgesvx,CGESVX) +#define LAPACK_zgesvx LAPACK_GLOBAL(zgesvx,ZGESVX) +#define LAPACK_dgesvxx LAPACK_GLOBAL(dgesvxx,DGESVXX) +#define LAPACK_sgesvxx LAPACK_GLOBAL(sgesvxx,SGESVXX) +#define LAPACK_zgesvxx LAPACK_GLOBAL(zgesvxx,ZGESVXX) +#define LAPACK_cgesvxx LAPACK_GLOBAL(cgesvxx,CGESVXX) +#define LAPACK_sgbsv LAPACK_GLOBAL(sgbsv,SGBSV) +#define LAPACK_dgbsv LAPACK_GLOBAL(dgbsv,DGBSV) +#define LAPACK_cgbsv LAPACK_GLOBAL(cgbsv,CGBSV) +#define LAPACK_zgbsv LAPACK_GLOBAL(zgbsv,ZGBSV) +#define LAPACK_sgbsvx LAPACK_GLOBAL(sgbsvx,SGBSVX) +#define LAPACK_dgbsvx LAPACK_GLOBAL(dgbsvx,DGBSVX) +#define LAPACK_cgbsvx LAPACK_GLOBAL(cgbsvx,CGBSVX) +#define LAPACK_zgbsvx LAPACK_GLOBAL(zgbsvx,ZGBSVX) +#define LAPACK_dgbsvxx LAPACK_GLOBAL(dgbsvxx,DGBSVXX) +#define LAPACK_sgbsvxx LAPACK_GLOBAL(sgbsvxx,SGBSVXX) +#define LAPACK_zgbsvxx LAPACK_GLOBAL(zgbsvxx,ZGBSVXX) +#define LAPACK_cgbsvxx LAPACK_GLOBAL(cgbsvxx,CGBSVXX) +#define LAPACK_sgtsv LAPACK_GLOBAL(sgtsv,SGTSV) +#define LAPACK_dgtsv LAPACK_GLOBAL(dgtsv,DGTSV) +#define LAPACK_cgtsv LAPACK_GLOBAL(cgtsv,CGTSV) +#define LAPACK_zgtsv LAPACK_GLOBAL(zgtsv,ZGTSV) +#define LAPACK_sgtsvx LAPACK_GLOBAL(sgtsvx,SGTSVX) +#define LAPACK_dgtsvx LAPACK_GLOBAL(dgtsvx,DGTSVX) +#define LAPACK_cgtsvx LAPACK_GLOBAL(cgtsvx,CGTSVX) +#define LAPACK_zgtsvx LAPACK_GLOBAL(zgtsvx,ZGTSVX) +#define LAPACK_sposv LAPACK_GLOBAL(sposv,SPOSV) +#define LAPACK_dposv LAPACK_GLOBAL(dposv,DPOSV) +#define LAPACK_cposv LAPACK_GLOBAL(cposv,CPOSV) +#define LAPACK_zposv LAPACK_GLOBAL(zposv,ZPOSV) +#define LAPACK_dsposv LAPACK_GLOBAL(dsposv,DSPOSV) +#define LAPACK_zcposv LAPACK_GLOBAL(zcposv,ZCPOSV) +#define LAPACK_sposvx LAPACK_GLOBAL(sposvx,SPOSVX) +#define LAPACK_dposvx LAPACK_GLOBAL(dposvx,DPOSVX) +#define LAPACK_cposvx LAPACK_GLOBAL(cposvx,CPOSVX) +#define LAPACK_zposvx LAPACK_GLOBAL(zposvx,ZPOSVX) +#define LAPACK_dposvxx LAPACK_GLOBAL(dposvxx,DPOSVXX) +#define LAPACK_sposvxx LAPACK_GLOBAL(sposvxx,SPOSVXX) +#define LAPACK_zposvxx LAPACK_GLOBAL(zposvxx,ZPOSVXX) +#define LAPACK_cposvxx LAPACK_GLOBAL(cposvxx,CPOSVXX) +#define LAPACK_sppsv LAPACK_GLOBAL(sppsv,SPPSV) +#define LAPACK_dppsv LAPACK_GLOBAL(dppsv,DPPSV) +#define LAPACK_cppsv LAPACK_GLOBAL(cppsv,CPPSV) +#define LAPACK_zppsv LAPACK_GLOBAL(zppsv,ZPPSV) +#define LAPACK_sppsvx LAPACK_GLOBAL(sppsvx,SPPSVX) +#define LAPACK_dppsvx LAPACK_GLOBAL(dppsvx,DPPSVX) +#define LAPACK_cppsvx LAPACK_GLOBAL(cppsvx,CPPSVX) +#define LAPACK_zppsvx LAPACK_GLOBAL(zppsvx,ZPPSVX) +#define LAPACK_spbsv LAPACK_GLOBAL(spbsv,SPBSV) +#define LAPACK_dpbsv LAPACK_GLOBAL(dpbsv,DPBSV) +#define LAPACK_cpbsv LAPACK_GLOBAL(cpbsv,CPBSV) +#define LAPACK_zpbsv LAPACK_GLOBAL(zpbsv,ZPBSV) +#define LAPACK_spbsvx LAPACK_GLOBAL(spbsvx,SPBSVX) +#define LAPACK_dpbsvx LAPACK_GLOBAL(dpbsvx,DPBSVX) +#define LAPACK_cpbsvx LAPACK_GLOBAL(cpbsvx,CPBSVX) +#define LAPACK_zpbsvx LAPACK_GLOBAL(zpbsvx,ZPBSVX) +#define LAPACK_sptsv LAPACK_GLOBAL(sptsv,SPTSV) +#define LAPACK_dptsv LAPACK_GLOBAL(dptsv,DPTSV) +#define LAPACK_cptsv LAPACK_GLOBAL(cptsv,CPTSV) +#define LAPACK_zptsv LAPACK_GLOBAL(zptsv,ZPTSV) +#define LAPACK_sptsvx LAPACK_GLOBAL(sptsvx,SPTSVX) +#define LAPACK_dptsvx LAPACK_GLOBAL(dptsvx,DPTSVX) +#define LAPACK_cptsvx LAPACK_GLOBAL(cptsvx,CPTSVX) +#define LAPACK_zptsvx LAPACK_GLOBAL(zptsvx,ZPTSVX) +#define LAPACK_ssysv LAPACK_GLOBAL(ssysv,SSYSV) +#define LAPACK_dsysv LAPACK_GLOBAL(dsysv,DSYSV) +#define LAPACK_csysv LAPACK_GLOBAL(csysv,CSYSV) +#define LAPACK_zsysv LAPACK_GLOBAL(zsysv,ZSYSV) +#define LAPACK_ssysvx LAPACK_GLOBAL(ssysvx,SSYSVX) +#define LAPACK_dsysvx LAPACK_GLOBAL(dsysvx,DSYSVX) +#define LAPACK_csysvx LAPACK_GLOBAL(csysvx,CSYSVX) +#define LAPACK_zsysvx LAPACK_GLOBAL(zsysvx,ZSYSVX) +#define LAPACK_dsysvxx LAPACK_GLOBAL(dsysvxx,DSYSVXX) +#define LAPACK_ssysvxx LAPACK_GLOBAL(ssysvxx,SSYSVXX) +#define LAPACK_zsysvxx LAPACK_GLOBAL(zsysvxx,ZSYSVXX) +#define LAPACK_csysvxx LAPACK_GLOBAL(csysvxx,CSYSVXX) +#define LAPACK_chesv LAPACK_GLOBAL(chesv,CHESV) +#define LAPACK_zhesv LAPACK_GLOBAL(zhesv,ZHESV) +#define LAPACK_chesvx LAPACK_GLOBAL(chesvx,CHESVX) +#define LAPACK_zhesvx LAPACK_GLOBAL(zhesvx,ZHESVX) +#define LAPACK_zhesvxx LAPACK_GLOBAL(zhesvxx,ZHESVXX) +#define LAPACK_chesvxx LAPACK_GLOBAL(chesvxx,CHESVXX) +#define LAPACK_sspsv LAPACK_GLOBAL(sspsv,SSPSV) +#define LAPACK_dspsv LAPACK_GLOBAL(dspsv,DSPSV) +#define LAPACK_cspsv LAPACK_GLOBAL(cspsv,CSPSV) +#define LAPACK_zspsv LAPACK_GLOBAL(zspsv,ZSPSV) +#define LAPACK_sspsvx LAPACK_GLOBAL(sspsvx,SSPSVX) +#define LAPACK_dspsvx LAPACK_GLOBAL(dspsvx,DSPSVX) +#define LAPACK_cspsvx LAPACK_GLOBAL(cspsvx,CSPSVX) +#define LAPACK_zspsvx LAPACK_GLOBAL(zspsvx,ZSPSVX) +#define LAPACK_chpsv LAPACK_GLOBAL(chpsv,CHPSV) +#define LAPACK_zhpsv LAPACK_GLOBAL(zhpsv,ZHPSV) +#define LAPACK_chpsvx LAPACK_GLOBAL(chpsvx,CHPSVX) +#define LAPACK_zhpsvx LAPACK_GLOBAL(zhpsvx,ZHPSVX) +#define LAPACK_sgeqrf LAPACK_GLOBAL(sgeqrf,SGEQRF) +#define LAPACK_dgeqrf LAPACK_GLOBAL(dgeqrf,DGEQRF) +#define LAPACK_cgeqrf LAPACK_GLOBAL(cgeqrf,CGEQRF) +#define LAPACK_zgeqrf LAPACK_GLOBAL(zgeqrf,ZGEQRF) +#define LAPACK_sgeqpf LAPACK_GLOBAL(sgeqpf,SGEQPF) +#define LAPACK_dgeqpf LAPACK_GLOBAL(dgeqpf,DGEQPF) +#define LAPACK_cgeqpf LAPACK_GLOBAL(cgeqpf,CGEQPF) +#define LAPACK_zgeqpf LAPACK_GLOBAL(zgeqpf,ZGEQPF) +#define LAPACK_sgeqp3 LAPACK_GLOBAL(sgeqp3,SGEQP3) +#define LAPACK_dgeqp3 LAPACK_GLOBAL(dgeqp3,DGEQP3) +#define LAPACK_cgeqp3 LAPACK_GLOBAL(cgeqp3,CGEQP3) +#define LAPACK_zgeqp3 LAPACK_GLOBAL(zgeqp3,ZGEQP3) +#define LAPACK_sorgqr LAPACK_GLOBAL(sorgqr,SORGQR) +#define LAPACK_dorgqr LAPACK_GLOBAL(dorgqr,DORGQR) +#define LAPACK_sormqr LAPACK_GLOBAL(sormqr,SORMQR) +#define LAPACK_dormqr LAPACK_GLOBAL(dormqr,DORMQR) +#define LAPACK_cungqr LAPACK_GLOBAL(cungqr,CUNGQR) +#define LAPACK_zungqr LAPACK_GLOBAL(zungqr,ZUNGQR) +#define LAPACK_cunmqr LAPACK_GLOBAL(cunmqr,CUNMQR) +#define LAPACK_zunmqr LAPACK_GLOBAL(zunmqr,ZUNMQR) +#define LAPACK_sgelqf LAPACK_GLOBAL(sgelqf,SGELQF) +#define LAPACK_dgelqf LAPACK_GLOBAL(dgelqf,DGELQF) +#define LAPACK_cgelqf LAPACK_GLOBAL(cgelqf,CGELQF) +#define LAPACK_zgelqf LAPACK_GLOBAL(zgelqf,ZGELQF) +#define LAPACK_sorglq LAPACK_GLOBAL(sorglq,SORGLQ) +#define LAPACK_dorglq LAPACK_GLOBAL(dorglq,DORGLQ) +#define LAPACK_sormlq LAPACK_GLOBAL(sormlq,SORMLQ) +#define LAPACK_dormlq LAPACK_GLOBAL(dormlq,DORMLQ) +#define LAPACK_cunglq LAPACK_GLOBAL(cunglq,CUNGLQ) +#define LAPACK_zunglq LAPACK_GLOBAL(zunglq,ZUNGLQ) +#define LAPACK_cunmlq LAPACK_GLOBAL(cunmlq,CUNMLQ) +#define LAPACK_zunmlq LAPACK_GLOBAL(zunmlq,ZUNMLQ) +#define LAPACK_sgeqlf LAPACK_GLOBAL(sgeqlf,SGEQLF) +#define LAPACK_dgeqlf LAPACK_GLOBAL(dgeqlf,DGEQLF) +#define LAPACK_cgeqlf LAPACK_GLOBAL(cgeqlf,CGEQLF) +#define LAPACK_zgeqlf LAPACK_GLOBAL(zgeqlf,ZGEQLF) +#define LAPACK_sorgql LAPACK_GLOBAL(sorgql,SORGQL) +#define LAPACK_dorgql LAPACK_GLOBAL(dorgql,DORGQL) +#define LAPACK_cungql LAPACK_GLOBAL(cungql,CUNGQL) +#define LAPACK_zungql LAPACK_GLOBAL(zungql,ZUNGQL) +#define LAPACK_sormql LAPACK_GLOBAL(sormql,SORMQL) +#define LAPACK_dormql LAPACK_GLOBAL(dormql,DORMQL) +#define LAPACK_cunmql LAPACK_GLOBAL(cunmql,CUNMQL) +#define LAPACK_zunmql LAPACK_GLOBAL(zunmql,ZUNMQL) +#define LAPACK_sgerqf LAPACK_GLOBAL(sgerqf,SGERQF) +#define LAPACK_dgerqf LAPACK_GLOBAL(dgerqf,DGERQF) +#define LAPACK_cgerqf LAPACK_GLOBAL(cgerqf,CGERQF) +#define LAPACK_zgerqf LAPACK_GLOBAL(zgerqf,ZGERQF) +#define LAPACK_sorgrq LAPACK_GLOBAL(sorgrq,SORGRQ) +#define LAPACK_dorgrq LAPACK_GLOBAL(dorgrq,DORGRQ) +#define LAPACK_cungrq LAPACK_GLOBAL(cungrq,CUNGRQ) +#define LAPACK_zungrq LAPACK_GLOBAL(zungrq,ZUNGRQ) +#define LAPACK_sormrq LAPACK_GLOBAL(sormrq,SORMRQ) +#define LAPACK_dormrq LAPACK_GLOBAL(dormrq,DORMRQ) +#define LAPACK_cunmrq LAPACK_GLOBAL(cunmrq,CUNMRQ) +#define LAPACK_zunmrq LAPACK_GLOBAL(zunmrq,ZUNMRQ) +#define LAPACK_stzrzf LAPACK_GLOBAL(stzrzf,STZRZF) +#define LAPACK_dtzrzf LAPACK_GLOBAL(dtzrzf,DTZRZF) +#define LAPACK_ctzrzf LAPACK_GLOBAL(ctzrzf,CTZRZF) +#define LAPACK_ztzrzf LAPACK_GLOBAL(ztzrzf,ZTZRZF) +#define LAPACK_sormrz LAPACK_GLOBAL(sormrz,SORMRZ) +#define LAPACK_dormrz LAPACK_GLOBAL(dormrz,DORMRZ) +#define LAPACK_cunmrz LAPACK_GLOBAL(cunmrz,CUNMRZ) +#define LAPACK_zunmrz LAPACK_GLOBAL(zunmrz,ZUNMRZ) +#define LAPACK_sggqrf LAPACK_GLOBAL(sggqrf,SGGQRF) +#define LAPACK_dggqrf LAPACK_GLOBAL(dggqrf,DGGQRF) +#define LAPACK_cggqrf LAPACK_GLOBAL(cggqrf,CGGQRF) +#define LAPACK_zggqrf LAPACK_GLOBAL(zggqrf,ZGGQRF) +#define LAPACK_sggrqf LAPACK_GLOBAL(sggrqf,SGGRQF) +#define LAPACK_dggrqf LAPACK_GLOBAL(dggrqf,DGGRQF) +#define LAPACK_cggrqf LAPACK_GLOBAL(cggrqf,CGGRQF) +#define LAPACK_zggrqf LAPACK_GLOBAL(zggrqf,ZGGRQF) +#define LAPACK_sgebrd LAPACK_GLOBAL(sgebrd,SGEBRD) +#define LAPACK_dgebrd LAPACK_GLOBAL(dgebrd,DGEBRD) +#define LAPACK_cgebrd LAPACK_GLOBAL(cgebrd,CGEBRD) +#define LAPACK_zgebrd LAPACK_GLOBAL(zgebrd,ZGEBRD) +#define LAPACK_sgbbrd LAPACK_GLOBAL(sgbbrd,SGBBRD) +#define LAPACK_dgbbrd LAPACK_GLOBAL(dgbbrd,DGBBRD) +#define LAPACK_cgbbrd LAPACK_GLOBAL(cgbbrd,CGBBRD) +#define LAPACK_zgbbrd LAPACK_GLOBAL(zgbbrd,ZGBBRD) +#define LAPACK_sorgbr LAPACK_GLOBAL(sorgbr,SORGBR) +#define LAPACK_dorgbr LAPACK_GLOBAL(dorgbr,DORGBR) +#define LAPACK_sormbr LAPACK_GLOBAL(sormbr,SORMBR) +#define LAPACK_dormbr LAPACK_GLOBAL(dormbr,DORMBR) +#define LAPACK_cungbr LAPACK_GLOBAL(cungbr,CUNGBR) +#define LAPACK_zungbr LAPACK_GLOBAL(zungbr,ZUNGBR) +#define LAPACK_cunmbr LAPACK_GLOBAL(cunmbr,CUNMBR) +#define LAPACK_zunmbr LAPACK_GLOBAL(zunmbr,ZUNMBR) +#define LAPACK_sbdsqr LAPACK_GLOBAL(sbdsqr,SBDSQR) +#define LAPACK_dbdsqr LAPACK_GLOBAL(dbdsqr,DBDSQR) +#define LAPACK_cbdsqr LAPACK_GLOBAL(cbdsqr,CBDSQR) +#define LAPACK_zbdsqr LAPACK_GLOBAL(zbdsqr,ZBDSQR) +#define LAPACK_sbdsdc LAPACK_GLOBAL(sbdsdc,SBDSDC) +#define LAPACK_dbdsdc LAPACK_GLOBAL(dbdsdc,DBDSDC) +#define LAPACK_sbdsvdx LAPACK_GLOBAL(sbdsvdx,SBDSVDX) +#define LAPACK_dbdsvdx LAPACK_GLOBAL(dbdsvdx,DBDSVDX) +#define LAPACK_ssytrd LAPACK_GLOBAL(ssytrd,SSYTRD) +#define LAPACK_dsytrd LAPACK_GLOBAL(dsytrd,DSYTRD) +#define LAPACK_sorgtr LAPACK_GLOBAL(sorgtr,SORGTR) +#define LAPACK_dorgtr LAPACK_GLOBAL(dorgtr,DORGTR) +#define LAPACK_sormtr LAPACK_GLOBAL(sormtr,SORMTR) +#define LAPACK_dormtr LAPACK_GLOBAL(dormtr,DORMTR) +#define LAPACK_chetrd LAPACK_GLOBAL(chetrd,CHETRD) +#define LAPACK_zhetrd LAPACK_GLOBAL(zhetrd,ZHETRD) +#define LAPACK_cungtr LAPACK_GLOBAL(cungtr,CUNGTR) +#define LAPACK_zungtr LAPACK_GLOBAL(zungtr,ZUNGTR) +#define LAPACK_cunmtr LAPACK_GLOBAL(cunmtr,CUNMTR) +#define LAPACK_zunmtr LAPACK_GLOBAL(zunmtr,ZUNMTR) +#define LAPACK_ssptrd LAPACK_GLOBAL(ssptrd,SSPTRD) +#define LAPACK_dsptrd LAPACK_GLOBAL(dsptrd,DSPTRD) +#define LAPACK_sopgtr LAPACK_GLOBAL(sopgtr,SOPGTR) +#define LAPACK_dopgtr LAPACK_GLOBAL(dopgtr,DOPGTR) +#define LAPACK_sopmtr LAPACK_GLOBAL(sopmtr,SOPMTR) +#define LAPACK_dopmtr LAPACK_GLOBAL(dopmtr,DOPMTR) +#define LAPACK_chptrd LAPACK_GLOBAL(chptrd,CHPTRD) +#define LAPACK_zhptrd LAPACK_GLOBAL(zhptrd,ZHPTRD) +#define LAPACK_cupgtr LAPACK_GLOBAL(cupgtr,CUPGTR) +#define LAPACK_zupgtr LAPACK_GLOBAL(zupgtr,ZUPGTR) +#define LAPACK_cupmtr LAPACK_GLOBAL(cupmtr,CUPMTR) +#define LAPACK_zupmtr LAPACK_GLOBAL(zupmtr,ZUPMTR) +#define LAPACK_ssbtrd LAPACK_GLOBAL(ssbtrd,SSBTRD) +#define LAPACK_dsbtrd LAPACK_GLOBAL(dsbtrd,DSBTRD) +#define LAPACK_chbtrd LAPACK_GLOBAL(chbtrd,CHBTRD) +#define LAPACK_zhbtrd LAPACK_GLOBAL(zhbtrd,ZHBTRD) +#define LAPACK_ssterf LAPACK_GLOBAL(ssterf,SSTERF) +#define LAPACK_dsterf LAPACK_GLOBAL(dsterf,DSTERF) +#define LAPACK_ssteqr LAPACK_GLOBAL(ssteqr,SSTEQR) +#define LAPACK_dsteqr LAPACK_GLOBAL(dsteqr,DSTEQR) +#define LAPACK_csteqr LAPACK_GLOBAL(csteqr,CSTEQR) +#define LAPACK_zsteqr LAPACK_GLOBAL(zsteqr,ZSTEQR) +#define LAPACK_sstemr LAPACK_GLOBAL(sstemr,SSTEMR) +#define LAPACK_dstemr LAPACK_GLOBAL(dstemr,DSTEMR) +#define LAPACK_cstemr LAPACK_GLOBAL(cstemr,CSTEMR) +#define LAPACK_zstemr LAPACK_GLOBAL(zstemr,ZSTEMR) +#define LAPACK_sstedc LAPACK_GLOBAL(sstedc,SSTEDC) +#define LAPACK_dstedc LAPACK_GLOBAL(dstedc,DSTEDC) +#define LAPACK_cstedc LAPACK_GLOBAL(cstedc,CSTEDC) +#define LAPACK_zstedc LAPACK_GLOBAL(zstedc,ZSTEDC) +#define LAPACK_sstegr LAPACK_GLOBAL(sstegr,SSTEGR) +#define LAPACK_dstegr LAPACK_GLOBAL(dstegr,DSTEGR) +#define LAPACK_cstegr LAPACK_GLOBAL(cstegr,CSTEGR) +#define LAPACK_zstegr LAPACK_GLOBAL(zstegr,ZSTEGR) +#define LAPACK_spteqr LAPACK_GLOBAL(spteqr,SPTEQR) +#define LAPACK_dpteqr LAPACK_GLOBAL(dpteqr,DPTEQR) +#define LAPACK_cpteqr LAPACK_GLOBAL(cpteqr,CPTEQR) +#define LAPACK_zpteqr LAPACK_GLOBAL(zpteqr,ZPTEQR) +#define LAPACK_sstebz LAPACK_GLOBAL(sstebz,SSTEBZ) +#define LAPACK_dstebz LAPACK_GLOBAL(dstebz,DSTEBZ) +#define LAPACK_sstein LAPACK_GLOBAL(sstein,SSTEIN) +#define LAPACK_dstein LAPACK_GLOBAL(dstein,DSTEIN) +#define LAPACK_cstein LAPACK_GLOBAL(cstein,CSTEIN) +#define LAPACK_zstein LAPACK_GLOBAL(zstein,ZSTEIN) +#define LAPACK_sdisna LAPACK_GLOBAL(sdisna,SDISNA) +#define LAPACK_ddisna LAPACK_GLOBAL(ddisna,DDISNA) +#define LAPACK_ssygst LAPACK_GLOBAL(ssygst,SSYGST) +#define LAPACK_dsygst LAPACK_GLOBAL(dsygst,DSYGST) +#define LAPACK_chegst LAPACK_GLOBAL(chegst,CHEGST) +#define LAPACK_zhegst LAPACK_GLOBAL(zhegst,ZHEGST) +#define LAPACK_sspgst LAPACK_GLOBAL(sspgst,SSPGST) +#define LAPACK_dspgst LAPACK_GLOBAL(dspgst,DSPGST) +#define LAPACK_chpgst LAPACK_GLOBAL(chpgst,CHPGST) +#define LAPACK_zhpgst LAPACK_GLOBAL(zhpgst,ZHPGST) +#define LAPACK_ssbgst LAPACK_GLOBAL(ssbgst,SSBGST) +#define LAPACK_dsbgst LAPACK_GLOBAL(dsbgst,DSBGST) +#define LAPACK_chbgst LAPACK_GLOBAL(chbgst,CHBGST) +#define LAPACK_zhbgst LAPACK_GLOBAL(zhbgst,ZHBGST) +#define LAPACK_spbstf LAPACK_GLOBAL(spbstf,SPBSTF) +#define LAPACK_dpbstf LAPACK_GLOBAL(dpbstf,DPBSTF) +#define LAPACK_cpbstf LAPACK_GLOBAL(cpbstf,CPBSTF) +#define LAPACK_zpbstf LAPACK_GLOBAL(zpbstf,ZPBSTF) +#define LAPACK_sgehrd LAPACK_GLOBAL(sgehrd,SGEHRD) +#define LAPACK_dgehrd LAPACK_GLOBAL(dgehrd,DGEHRD) +#define LAPACK_cgehrd LAPACK_GLOBAL(cgehrd,CGEHRD) +#define LAPACK_zgehrd LAPACK_GLOBAL(zgehrd,ZGEHRD) +#define LAPACK_sorghr LAPACK_GLOBAL(sorghr,SORGHR) +#define LAPACK_dorghr LAPACK_GLOBAL(dorghr,DORGHR) +#define LAPACK_sormhr LAPACK_GLOBAL(sormhr,SORMHR) +#define LAPACK_dormhr LAPACK_GLOBAL(dormhr,DORMHR) +#define LAPACK_cunghr LAPACK_GLOBAL(cunghr,CUNGHR) +#define LAPACK_zunghr LAPACK_GLOBAL(zunghr,ZUNGHR) +#define LAPACK_cunmhr LAPACK_GLOBAL(cunmhr,CUNMHR) +#define LAPACK_zunmhr LAPACK_GLOBAL(zunmhr,ZUNMHR) +#define LAPACK_sgebal LAPACK_GLOBAL(sgebal,SGEBAL) +#define LAPACK_dgebal LAPACK_GLOBAL(dgebal,DGEBAL) +#define LAPACK_cgebal LAPACK_GLOBAL(cgebal,CGEBAL) +#define LAPACK_zgebal LAPACK_GLOBAL(zgebal,ZGEBAL) +#define LAPACK_sgebak LAPACK_GLOBAL(sgebak,SGEBAK) +#define LAPACK_dgebak LAPACK_GLOBAL(dgebak,DGEBAK) +#define LAPACK_cgebak LAPACK_GLOBAL(cgebak,CGEBAK) +#define LAPACK_zgebak LAPACK_GLOBAL(zgebak,ZGEBAK) +#define LAPACK_shseqr LAPACK_GLOBAL(shseqr,SHSEQR) +#define LAPACK_dhseqr LAPACK_GLOBAL(dhseqr,DHSEQR) +#define LAPACK_chseqr LAPACK_GLOBAL(chseqr,CHSEQR) +#define LAPACK_zhseqr LAPACK_GLOBAL(zhseqr,ZHSEQR) +#define LAPACK_shsein LAPACK_GLOBAL(shsein,SHSEIN) +#define LAPACK_dhsein LAPACK_GLOBAL(dhsein,DHSEIN) +#define LAPACK_chsein LAPACK_GLOBAL(chsein,CHSEIN) +#define LAPACK_zhsein LAPACK_GLOBAL(zhsein,ZHSEIN) +#define LAPACK_strevc LAPACK_GLOBAL(strevc,STREVC) +#define LAPACK_dtrevc LAPACK_GLOBAL(dtrevc,DTREVC) +#define LAPACK_ctrevc LAPACK_GLOBAL(ctrevc,CTREVC) +#define LAPACK_ztrevc LAPACK_GLOBAL(ztrevc,ZTREVC) +#define LAPACK_strsna LAPACK_GLOBAL(strsna,STRSNA) +#define LAPACK_dtrsna LAPACK_GLOBAL(dtrsna,DTRSNA) +#define LAPACK_ctrsna LAPACK_GLOBAL(ctrsna,CTRSNA) +#define LAPACK_ztrsna LAPACK_GLOBAL(ztrsna,ZTRSNA) +#define LAPACK_strexc LAPACK_GLOBAL(strexc,STREXC) +#define LAPACK_dtrexc LAPACK_GLOBAL(dtrexc,DTREXC) +#define LAPACK_ctrexc LAPACK_GLOBAL(ctrexc,CTREXC) +#define LAPACK_ztrexc LAPACK_GLOBAL(ztrexc,ZTREXC) +#define LAPACK_strsen LAPACK_GLOBAL(strsen,STRSEN) +#define LAPACK_dtrsen LAPACK_GLOBAL(dtrsen,DTRSEN) +#define LAPACK_ctrsen LAPACK_GLOBAL(ctrsen,CTRSEN) +#define LAPACK_ztrsen LAPACK_GLOBAL(ztrsen,ZTRSEN) +#define LAPACK_strsyl LAPACK_GLOBAL(strsyl,STRSYL) +#define LAPACK_dtrsyl LAPACK_GLOBAL(dtrsyl,DTRSYL) +#define LAPACK_ctrsyl LAPACK_GLOBAL(ctrsyl,CTRSYL) +#define LAPACK_ztrsyl LAPACK_GLOBAL(ztrsyl,ZTRSYL) +#define LAPACK_sgghrd LAPACK_GLOBAL(sgghrd,SGGHRD) +#define LAPACK_dgghrd LAPACK_GLOBAL(dgghrd,DGGHRD) +#define LAPACK_cgghrd LAPACK_GLOBAL(cgghrd,CGGHRD) +#define LAPACK_zgghrd LAPACK_GLOBAL(zgghrd,ZGGHRD) +#define LAPACK_sgghd3 LAPACK_GLOBAL(sgghd3,SGGHD3) +#define LAPACK_dgghd3 LAPACK_GLOBAL(dgghd3,DGGHD3) +#define LAPACK_cgghd3 LAPACK_GLOBAL(cgghd3,CGGHD3) +#define LAPACK_zgghd3 LAPACK_GLOBAL(zgghd3,ZGGHD3) +#define LAPACK_sggbal LAPACK_GLOBAL(sggbal,SGGBAL) +#define LAPACK_dggbal LAPACK_GLOBAL(dggbal,DGGBAL) +#define LAPACK_cggbal LAPACK_GLOBAL(cggbal,CGGBAL) +#define LAPACK_zggbal LAPACK_GLOBAL(zggbal,ZGGBAL) +#define LAPACK_sggbak LAPACK_GLOBAL(sggbak,SGGBAK) +#define LAPACK_dggbak LAPACK_GLOBAL(dggbak,DGGBAK) +#define LAPACK_cggbak LAPACK_GLOBAL(cggbak,CGGBAK) +#define LAPACK_zggbak LAPACK_GLOBAL(zggbak,ZGGBAK) +#define LAPACK_shgeqz LAPACK_GLOBAL(shgeqz,SHGEQZ) +#define LAPACK_dhgeqz LAPACK_GLOBAL(dhgeqz,DHGEQZ) +#define LAPACK_chgeqz LAPACK_GLOBAL(chgeqz,CHGEQZ) +#define LAPACK_zhgeqz LAPACK_GLOBAL(zhgeqz,ZHGEQZ) +#define LAPACK_stgevc LAPACK_GLOBAL(stgevc,STGEVC) +#define LAPACK_dtgevc LAPACK_GLOBAL(dtgevc,DTGEVC) +#define LAPACK_ctgevc LAPACK_GLOBAL(ctgevc,CTGEVC) +#define LAPACK_ztgevc LAPACK_GLOBAL(ztgevc,ZTGEVC) +#define LAPACK_stgexc LAPACK_GLOBAL(stgexc,STGEXC) +#define LAPACK_dtgexc LAPACK_GLOBAL(dtgexc,DTGEXC) +#define LAPACK_ctgexc LAPACK_GLOBAL(ctgexc,CTGEXC) +#define LAPACK_ztgexc LAPACK_GLOBAL(ztgexc,ZTGEXC) +#define LAPACK_stgsen LAPACK_GLOBAL(stgsen,STGSEN) +#define LAPACK_dtgsen LAPACK_GLOBAL(dtgsen,DTGSEN) +#define LAPACK_ctgsen LAPACK_GLOBAL(ctgsen,CTGSEN) +#define LAPACK_ztgsen LAPACK_GLOBAL(ztgsen,ZTGSEN) +#define LAPACK_stgsyl LAPACK_GLOBAL(stgsyl,STGSYL) +#define LAPACK_dtgsyl LAPACK_GLOBAL(dtgsyl,DTGSYL) +#define LAPACK_ctgsyl LAPACK_GLOBAL(ctgsyl,CTGSYL) +#define LAPACK_ztgsyl LAPACK_GLOBAL(ztgsyl,ZTGSYL) +#define LAPACK_stgsna LAPACK_GLOBAL(stgsna,STGSNA) +#define LAPACK_dtgsna LAPACK_GLOBAL(dtgsna,DTGSNA) +#define LAPACK_ctgsna LAPACK_GLOBAL(ctgsna,CTGSNA) +#define LAPACK_ztgsna LAPACK_GLOBAL(ztgsna,ZTGSNA) +#define LAPACK_sggsvp LAPACK_GLOBAL(sggsvp,SGGSVP) +#define LAPACK_dggsvp LAPACK_GLOBAL(dggsvp,DGGSVP) +#define LAPACK_cggsvp LAPACK_GLOBAL(cggsvp,CGGSVP) +#define LAPACK_zggsvp LAPACK_GLOBAL(zggsvp,ZGGSVP) +#define LAPACK_sggsvp3 LAPACK_GLOBAL(sggsvp3,SGGSVP3) +#define LAPACK_dggsvp3 LAPACK_GLOBAL(dggsvp3,DGGSVP3) +#define LAPACK_cggsvp3 LAPACK_GLOBAL(cggsvp3,CGGSVP3) +#define LAPACK_zggsvp3 LAPACK_GLOBAL(zggsvp3,ZGGSVP3) +#define LAPACK_stgsja LAPACK_GLOBAL(stgsja,STGSJA) +#define LAPACK_dtgsja LAPACK_GLOBAL(dtgsja,DTGSJA) +#define LAPACK_ctgsja LAPACK_GLOBAL(ctgsja,CTGSJA) +#define LAPACK_ztgsja LAPACK_GLOBAL(ztgsja,ZTGSJA) +#define LAPACK_sgels LAPACK_GLOBAL(sgels,SGELS) +#define LAPACK_dgels LAPACK_GLOBAL(dgels,DGELS) +#define LAPACK_cgels LAPACK_GLOBAL(cgels,CGELS) +#define LAPACK_zgels LAPACK_GLOBAL(zgels,ZGELS) +#define LAPACK_sgelsy LAPACK_GLOBAL(sgelsy,SGELSY) +#define LAPACK_dgelsy LAPACK_GLOBAL(dgelsy,DGELSY) +#define LAPACK_cgelsy LAPACK_GLOBAL(cgelsy,CGELSY) +#define LAPACK_zgelsy LAPACK_GLOBAL(zgelsy,ZGELSY) +#define LAPACK_sgelss LAPACK_GLOBAL(sgelss,SGELSS) +#define LAPACK_dgelss LAPACK_GLOBAL(dgelss,DGELSS) +#define LAPACK_cgelss LAPACK_GLOBAL(cgelss,CGELSS) +#define LAPACK_zgelss LAPACK_GLOBAL(zgelss,ZGELSS) +#define LAPACK_sgelsd LAPACK_GLOBAL(sgelsd,SGELSD) +#define LAPACK_dgelsd LAPACK_GLOBAL(dgelsd,DGELSD) +#define LAPACK_cgelsd LAPACK_GLOBAL(cgelsd,CGELSD) +#define LAPACK_zgelsd LAPACK_GLOBAL(zgelsd,ZGELSD) +#define LAPACK_sgglse LAPACK_GLOBAL(sgglse,SGGLSE) +#define LAPACK_dgglse LAPACK_GLOBAL(dgglse,DGGLSE) +#define LAPACK_cgglse LAPACK_GLOBAL(cgglse,CGGLSE) +#define LAPACK_zgglse LAPACK_GLOBAL(zgglse,ZGGLSE) +#define LAPACK_sggglm LAPACK_GLOBAL(sggglm,SGGGLM) +#define LAPACK_dggglm LAPACK_GLOBAL(dggglm,DGGGLM) +#define LAPACK_cggglm LAPACK_GLOBAL(cggglm,CGGGLM) +#define LAPACK_zggglm LAPACK_GLOBAL(zggglm,ZGGGLM) +#define LAPACK_ssyev LAPACK_GLOBAL(ssyev,SSYEV) +#define LAPACK_dsyev LAPACK_GLOBAL(dsyev,DSYEV) +#define LAPACK_cheev LAPACK_GLOBAL(cheev,CHEEV) +#define LAPACK_zheev LAPACK_GLOBAL(zheev,ZHEEV) +#define LAPACK_ssyevd LAPACK_GLOBAL(ssyevd,SSYEVD) +#define LAPACK_dsyevd LAPACK_GLOBAL(dsyevd,DSYEVD) +#define LAPACK_cheevd LAPACK_GLOBAL(cheevd,CHEEVD) +#define LAPACK_zheevd LAPACK_GLOBAL(zheevd,ZHEEVD) +#define LAPACK_ssyevx LAPACK_GLOBAL(ssyevx,SSYEVX) +#define LAPACK_dsyevx LAPACK_GLOBAL(dsyevx,DSYEVX) +#define LAPACK_cheevx LAPACK_GLOBAL(cheevx,CHEEVX) +#define LAPACK_zheevx LAPACK_GLOBAL(zheevx,ZHEEVX) +#define LAPACK_ssyevr LAPACK_GLOBAL(ssyevr,SSYEVR) +#define LAPACK_dsyevr LAPACK_GLOBAL(dsyevr,DSYEVR) +#define LAPACK_cheevr LAPACK_GLOBAL(cheevr,CHEEVR) +#define LAPACK_zheevr LAPACK_GLOBAL(zheevr,ZHEEVR) +#define LAPACK_sspev LAPACK_GLOBAL(sspev,SSPEV) +#define LAPACK_dspev LAPACK_GLOBAL(dspev,DSPEV) +#define LAPACK_chpev LAPACK_GLOBAL(chpev,CHPEV) +#define LAPACK_zhpev LAPACK_GLOBAL(zhpev,ZHPEV) +#define LAPACK_sspevd LAPACK_GLOBAL(sspevd,SSPEVD) +#define LAPACK_dspevd LAPACK_GLOBAL(dspevd,DSPEVD) +#define LAPACK_chpevd LAPACK_GLOBAL(chpevd,CHPEVD) +#define LAPACK_zhpevd LAPACK_GLOBAL(zhpevd,ZHPEVD) +#define LAPACK_sspevx LAPACK_GLOBAL(sspevx,SSPEVX) +#define LAPACK_dspevx LAPACK_GLOBAL(dspevx,DSPEVX) +#define LAPACK_chpevx LAPACK_GLOBAL(chpevx,CHPEVX) +#define LAPACK_zhpevx LAPACK_GLOBAL(zhpevx,ZHPEVX) +#define LAPACK_ssbev LAPACK_GLOBAL(ssbev,SSBEV) +#define LAPACK_dsbev LAPACK_GLOBAL(dsbev,DSBEV) +#define LAPACK_chbev LAPACK_GLOBAL(chbev,CHBEV) +#define LAPACK_zhbev LAPACK_GLOBAL(zhbev,ZHBEV) +#define LAPACK_ssbevd LAPACK_GLOBAL(ssbevd,SSBEVD) +#define LAPACK_dsbevd LAPACK_GLOBAL(dsbevd,DSBEVD) +#define LAPACK_chbevd LAPACK_GLOBAL(chbevd,CHBEVD) +#define LAPACK_zhbevd LAPACK_GLOBAL(zhbevd,ZHBEVD) +#define LAPACK_ssbevx LAPACK_GLOBAL(ssbevx,SSBEVX) +#define LAPACK_dsbevx LAPACK_GLOBAL(dsbevx,DSBEVX) +#define LAPACK_chbevx LAPACK_GLOBAL(chbevx,CHBEVX) +#define LAPACK_zhbevx LAPACK_GLOBAL(zhbevx,ZHBEVX) +#define LAPACK_sstev LAPACK_GLOBAL(sstev,SSTEV) +#define LAPACK_dstev LAPACK_GLOBAL(dstev,DSTEV) +#define LAPACK_sstevd LAPACK_GLOBAL(sstevd,SSTEVD) +#define LAPACK_dstevd LAPACK_GLOBAL(dstevd,DSTEVD) +#define LAPACK_sstevx LAPACK_GLOBAL(sstevx,SSTEVX) +#define LAPACK_dstevx LAPACK_GLOBAL(dstevx,DSTEVX) +#define LAPACK_sstevr LAPACK_GLOBAL(sstevr,SSTEVR) +#define LAPACK_dstevr LAPACK_GLOBAL(dstevr,DSTEVR) +#define LAPACK_sgees LAPACK_GLOBAL(sgees,SGEES) +#define LAPACK_dgees LAPACK_GLOBAL(dgees,DGEES) +#define LAPACK_cgees LAPACK_GLOBAL(cgees,CGEES) +#define LAPACK_zgees LAPACK_GLOBAL(zgees,ZGEES) +#define LAPACK_sgeesx LAPACK_GLOBAL(sgeesx,SGEESX) +#define LAPACK_dgeesx LAPACK_GLOBAL(dgeesx,DGEESX) +#define LAPACK_cgeesx LAPACK_GLOBAL(cgeesx,CGEESX) +#define LAPACK_zgeesx LAPACK_GLOBAL(zgeesx,ZGEESX) +#define LAPACK_sgeev LAPACK_GLOBAL(sgeev,SGEEV) +#define LAPACK_dgeev LAPACK_GLOBAL(dgeev,DGEEV) +#define LAPACK_cgeev LAPACK_GLOBAL(cgeev,CGEEV) +#define LAPACK_zgeev LAPACK_GLOBAL(zgeev,ZGEEV) +#define LAPACK_sgeevx LAPACK_GLOBAL(sgeevx,SGEEVX) +#define LAPACK_dgeevx LAPACK_GLOBAL(dgeevx,DGEEVX) +#define LAPACK_cgeevx LAPACK_GLOBAL(cgeevx,CGEEVX) +#define LAPACK_zgeevx LAPACK_GLOBAL(zgeevx,ZGEEVX) +#define LAPACK_sgesvd LAPACK_GLOBAL(sgesvd,SGESVD) +#define LAPACK_dgesvd LAPACK_GLOBAL(dgesvd,DGESVD) +#define LAPACK_cgesvd LAPACK_GLOBAL(cgesvd,CGESVD) +#define LAPACK_zgesvd LAPACK_GLOBAL(zgesvd,ZGESVD) +#define LAPACK_sgesvdx LAPACK_GLOBAL(sgesvdx,SGESVDX) +#define LAPACK_dgesvdx LAPACK_GLOBAL(dgesvdx,DGESVDX) +#define LAPACK_cgesvdx LAPACK_GLOBAL(cgesvdx,CGESVDX) +#define LAPACK_zgesvdx LAPACK_GLOBAL(zgesvdx,ZGESVDX) +#define LAPACK_sgesdd LAPACK_GLOBAL(sgesdd,SGESDD) +#define LAPACK_dgesdd LAPACK_GLOBAL(dgesdd,DGESDD) +#define LAPACK_cgesdd LAPACK_GLOBAL(cgesdd,CGESDD) +#define LAPACK_zgesdd LAPACK_GLOBAL(zgesdd,ZGESDD) +#define LAPACK_sgejsv LAPACK_GLOBAL(sgejsv,SGEJSV) +#define LAPACK_dgejsv LAPACK_GLOBAL(dgejsv,DGEJSV) +#define LAPACK_cgejsv LAPACK_GLOBAL(cgejsv,CGEJSV) +#define LAPACK_zgejsv LAPACK_GLOBAL(zgejsv,ZGEJSV) +#define LAPACK_sgesvj LAPACK_GLOBAL(sgesvj,SGESVJ) +#define LAPACK_dgesvj LAPACK_GLOBAL(dgesvj,DGESVJ) +#define LAPACK_cgesvj LAPACK_GLOBAL(cgesvj,CGESVJ) +#define LAPACK_zgesvj LAPACK_GLOBAL(zgesvj,ZGESVJ) +#define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD) +#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD) +#define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD) +#define LAPACK_zggsvd LAPACK_GLOBAL(zggsvd,ZGGSVD) +#define LAPACK_ssygv LAPACK_GLOBAL(ssygv,SSYGV) +#define LAPACK_dsygv LAPACK_GLOBAL(dsygv,DSYGV) +#define LAPACK_chegv LAPACK_GLOBAL(chegv,CHEGV) +#define LAPACK_zhegv LAPACK_GLOBAL(zhegv,ZHEGV) +#define LAPACK_ssygvd LAPACK_GLOBAL(ssygvd,SSYGVD) +#define LAPACK_dsygvd LAPACK_GLOBAL(dsygvd,DSYGVD) +#define LAPACK_chegvd LAPACK_GLOBAL(chegvd,CHEGVD) +#define LAPACK_zhegvd LAPACK_GLOBAL(zhegvd,ZHEGVD) +#define LAPACK_ssygvx LAPACK_GLOBAL(ssygvx,SSYGVX) +#define LAPACK_dsygvx LAPACK_GLOBAL(dsygvx,DSYGVX) +#define LAPACK_chegvx LAPACK_GLOBAL(chegvx,CHEGVX) +#define LAPACK_zhegvx LAPACK_GLOBAL(zhegvx,ZHEGVX) +#define LAPACK_sspgv LAPACK_GLOBAL(sspgv,SSPGV) +#define LAPACK_dspgv LAPACK_GLOBAL(dspgv,DSPGV) +#define LAPACK_chpgv LAPACK_GLOBAL(chpgv,CHPGV) +#define LAPACK_zhpgv LAPACK_GLOBAL(zhpgv,ZHPGV) +#define LAPACK_sspgvd LAPACK_GLOBAL(sspgvd,SSPGVD) +#define LAPACK_dspgvd LAPACK_GLOBAL(dspgvd,DSPGVD) +#define LAPACK_chpgvd LAPACK_GLOBAL(chpgvd,CHPGVD) +#define LAPACK_zhpgvd LAPACK_GLOBAL(zhpgvd,ZHPGVD) +#define LAPACK_sspgvx LAPACK_GLOBAL(sspgvx,SSPGVX) +#define LAPACK_dspgvx LAPACK_GLOBAL(dspgvx,DSPGVX) +#define LAPACK_chpgvx LAPACK_GLOBAL(chpgvx,CHPGVX) +#define LAPACK_zhpgvx LAPACK_GLOBAL(zhpgvx,ZHPGVX) +#define LAPACK_ssbgv LAPACK_GLOBAL(ssbgv,SSBGV) +#define LAPACK_dsbgv LAPACK_GLOBAL(dsbgv,DSBGV) +#define LAPACK_chbgv LAPACK_GLOBAL(chbgv,CHBGV) +#define LAPACK_zhbgv LAPACK_GLOBAL(zhbgv,ZHBGV) +#define LAPACK_ssbgvd LAPACK_GLOBAL(ssbgvd,SSBGVD) +#define LAPACK_dsbgvd LAPACK_GLOBAL(dsbgvd,DSBGVD) +#define LAPACK_chbgvd LAPACK_GLOBAL(chbgvd,CHBGVD) +#define LAPACK_zhbgvd LAPACK_GLOBAL(zhbgvd,ZHBGVD) +#define LAPACK_ssbgvx LAPACK_GLOBAL(ssbgvx,SSBGVX) +#define LAPACK_dsbgvx LAPACK_GLOBAL(dsbgvx,DSBGVX) +#define LAPACK_chbgvx LAPACK_GLOBAL(chbgvx,CHBGVX) +#define LAPACK_zhbgvx LAPACK_GLOBAL(zhbgvx,ZHBGVX) +#define LAPACK_sgges LAPACK_GLOBAL(sgges,SGGES) +#define LAPACK_dgges LAPACK_GLOBAL(dgges,DGGES) +#define LAPACK_cgges LAPACK_GLOBAL(cgges,CGGES) +#define LAPACK_zgges LAPACK_GLOBAL(zgges,ZGGES) +#define LAPACK_sgges3 LAPACK_GLOBAL(sgges3,SGGES3) +#define LAPACK_dgges3 LAPACK_GLOBAL(dgges3,DGGES3) +#define LAPACK_cgges3 LAPACK_GLOBAL(cgges3,CGGES3) +#define LAPACK_zgges3 LAPACK_GLOBAL(zgges3,ZGGES3) +#define LAPACK_sggesx LAPACK_GLOBAL(sggesx,SGGESX) +#define LAPACK_dggesx LAPACK_GLOBAL(dggesx,DGGESX) +#define LAPACK_cggesx LAPACK_GLOBAL(cggesx,CGGESX) +#define LAPACK_zggesx LAPACK_GLOBAL(zggesx,ZGGESX) +#define LAPACK_sggev LAPACK_GLOBAL(sggev,SGGEV) +#define LAPACK_dggev LAPACK_GLOBAL(dggev,DGGEV) +#define LAPACK_cggev LAPACK_GLOBAL(cggev,CGGEV) +#define LAPACK_zggev LAPACK_GLOBAL(zggev,ZGGEV) +#define LAPACK_sggev3 LAPACK_GLOBAL(sggev3,SGGEV3) +#define LAPACK_dggev3 LAPACK_GLOBAL(dggev3,DGGEV3) +#define LAPACK_cggev3 LAPACK_GLOBAL(cggev3,CGGEV3) +#define LAPACK_zggev3 LAPACK_GLOBAL(zggev3,ZGGEV3) +#define LAPACK_sggevx LAPACK_GLOBAL(sggevx,SGGEVX) +#define LAPACK_dggevx LAPACK_GLOBAL(dggevx,DGGEVX) +#define LAPACK_cggevx LAPACK_GLOBAL(cggevx,CGGEVX) +#define LAPACK_zggevx LAPACK_GLOBAL(zggevx,ZGGEVX) +#define LAPACK_dsfrk LAPACK_GLOBAL(dsfrk,DSFRK) +#define LAPACK_ssfrk LAPACK_GLOBAL(ssfrk,SSFRK) +#define LAPACK_zhfrk LAPACK_GLOBAL(zhfrk,ZHFRK) +#define LAPACK_chfrk LAPACK_GLOBAL(chfrk,CHFRK) +#define LAPACK_dtfsm LAPACK_GLOBAL(dtfsm,DTFSM) +#define LAPACK_stfsm LAPACK_GLOBAL(stfsm,STFSM) +#define LAPACK_ztfsm LAPACK_GLOBAL(ztfsm,ZTFSM) +#define LAPACK_ctfsm LAPACK_GLOBAL(ctfsm,CTFSM) +#define LAPACK_dtfttp LAPACK_GLOBAL(dtfttp,DTFTTP) +#define LAPACK_stfttp LAPACK_GLOBAL(stfttp,STFTTP) +#define LAPACK_ztfttp LAPACK_GLOBAL(ztfttp,ZTFTTP) +#define LAPACK_ctfttp LAPACK_GLOBAL(ctfttp,CTFTTP) +#define LAPACK_dtfttr LAPACK_GLOBAL(dtfttr,DTFTTR) +#define LAPACK_stfttr LAPACK_GLOBAL(stfttr,STFTTR) +#define LAPACK_ztfttr LAPACK_GLOBAL(ztfttr,ZTFTTR) +#define LAPACK_ctfttr LAPACK_GLOBAL(ctfttr,CTFTTR) +#define LAPACK_dtpttf LAPACK_GLOBAL(dtpttf,DTPTTF) +#define LAPACK_stpttf LAPACK_GLOBAL(stpttf,STPTTF) +#define LAPACK_ztpttf LAPACK_GLOBAL(ztpttf,ZTPTTF) +#define LAPACK_ctpttf LAPACK_GLOBAL(ctpttf,CTPTTF) +#define LAPACK_dtpttr LAPACK_GLOBAL(dtpttr,DTPTTR) +#define LAPACK_stpttr LAPACK_GLOBAL(stpttr,STPTTR) +#define LAPACK_ztpttr LAPACK_GLOBAL(ztpttr,ZTPTTR) +#define LAPACK_ctpttr LAPACK_GLOBAL(ctpttr,CTPTTR) +#define LAPACK_dtrttf LAPACK_GLOBAL(dtrttf,DTRTTF) +#define LAPACK_strttf LAPACK_GLOBAL(strttf,STRTTF) +#define LAPACK_ztrttf LAPACK_GLOBAL(ztrttf,ZTRTTF) +#define LAPACK_ctrttf LAPACK_GLOBAL(ctrttf,CTRTTF) +#define LAPACK_dtrttp LAPACK_GLOBAL(dtrttp,DTRTTP) +#define LAPACK_strttp LAPACK_GLOBAL(strttp,STRTTP) +#define LAPACK_ztrttp LAPACK_GLOBAL(ztrttp,ZTRTTP) +#define LAPACK_ctrttp LAPACK_GLOBAL(ctrttp,CTRTTP) +#define LAPACK_sgeqrfp LAPACK_GLOBAL(sgeqrfp,SGEQRFP) +#define LAPACK_dgeqrfp LAPACK_GLOBAL(dgeqrfp,DGEQRFP) +#define LAPACK_cgeqrfp LAPACK_GLOBAL(cgeqrfp,CGEQRFP) +#define LAPACK_zgeqrfp LAPACK_GLOBAL(zgeqrfp,ZGEQRFP) +#define LAPACK_clacgv LAPACK_GLOBAL(clacgv,CLACGV) +#define LAPACK_zlacgv LAPACK_GLOBAL(zlacgv,ZLACGV) +#define LAPACK_slarnv LAPACK_GLOBAL(slarnv,SLARNV) +#define LAPACK_dlarnv LAPACK_GLOBAL(dlarnv,DLARNV) +#define LAPACK_clarnv LAPACK_GLOBAL(clarnv,CLARNV) +#define LAPACK_zlarnv LAPACK_GLOBAL(zlarnv,ZLARNV) +#define LAPACK_sgeqr2 LAPACK_GLOBAL(sgeqr2,SGEQR2) +#define LAPACK_dgeqr2 LAPACK_GLOBAL(dgeqr2,DGEQR2) +#define LAPACK_cgeqr2 LAPACK_GLOBAL(cgeqr2,CGEQR2) +#define LAPACK_zgeqr2 LAPACK_GLOBAL(zgeqr2,ZGEQR2) +#define LAPACK_slacn2 LAPACK_GLOBAL(slacn2,SLACN2) +#define LAPACK_dlacn2 LAPACK_GLOBAL(dlacn2,DLACN2) +#define LAPACK_clacn2 LAPACK_GLOBAL(clacn2,CLACN2) +#define LAPACK_zlacn2 LAPACK_GLOBAL(zlacn2,ZLACN2) +#define LAPACK_slacpy LAPACK_GLOBAL(slacpy,SLACPY) +#define LAPACK_dlacpy LAPACK_GLOBAL(dlacpy,DLACPY) +#define LAPACK_clacpy LAPACK_GLOBAL(clacpy,CLACPY) +#define LAPACK_zlacpy LAPACK_GLOBAL(zlacpy,ZLACPY) +#define LAPACK_clacp2 LAPACK_GLOBAL(clacp2,CLACP2) +#define LAPACK_zlacp2 LAPACK_GLOBAL(zlacp2,ZLACP2) +#define LAPACK_sgetf2 LAPACK_GLOBAL(sgetf2,SGETF2) +#define LAPACK_dgetf2 LAPACK_GLOBAL(dgetf2,DGETF2) +#define LAPACK_cgetf2 LAPACK_GLOBAL(cgetf2,CGETF2) +#define LAPACK_zgetf2 LAPACK_GLOBAL(zgetf2,ZGETF2) +#define LAPACK_slaswp LAPACK_GLOBAL(slaswp,SLASWP) +#define LAPACK_dlaswp LAPACK_GLOBAL(dlaswp,DLASWP) +#define LAPACK_claswp LAPACK_GLOBAL(claswp,CLASWP) +#define LAPACK_zlaswp LAPACK_GLOBAL(zlaswp,ZLASWP) +#define LAPACK_slange LAPACK_GLOBAL(slange,SLANGE) +#define LAPACK_dlange LAPACK_GLOBAL(dlange,DLANGE) +#define LAPACK_clange LAPACK_GLOBAL(clange,CLANGE) +#define LAPACK_zlange LAPACK_GLOBAL(zlange,ZLANGE) +#define LAPACK_clanhe LAPACK_GLOBAL(clanhe,CLANHE) +#define LAPACK_zlanhe LAPACK_GLOBAL(zlanhe,ZLANHE) +#define LAPACK_slansy LAPACK_GLOBAL(slansy,SLANSY) +#define LAPACK_dlansy LAPACK_GLOBAL(dlansy,DLANSY) +#define LAPACK_clansy LAPACK_GLOBAL(clansy,CLANSY) +#define LAPACK_zlansy LAPACK_GLOBAL(zlansy,ZLANSY) +#define LAPACK_slantr LAPACK_GLOBAL(slantr,SLANTR) +#define LAPACK_dlantr LAPACK_GLOBAL(dlantr,DLANTR) +#define LAPACK_clantr LAPACK_GLOBAL(clantr,CLANTR) +#define LAPACK_zlantr LAPACK_GLOBAL(zlantr,ZLANTR) +#define LAPACK_slamch LAPACK_GLOBAL(slamch,SLAMCH) +#define LAPACK_dlamch LAPACK_GLOBAL(dlamch,DLAMCH) +#define LAPACK_sgelq2 LAPACK_GLOBAL(sgelq2,SGELQ2) +#define LAPACK_dgelq2 LAPACK_GLOBAL(dgelq2,DGELQ2) +#define LAPACK_cgelq2 LAPACK_GLOBAL(cgelq2,CGELQ2) +#define LAPACK_zgelq2 LAPACK_GLOBAL(zgelq2,ZGELQ2) +#define LAPACK_slarfb LAPACK_GLOBAL(slarfb,SLARFB) +#define LAPACK_dlarfb LAPACK_GLOBAL(dlarfb,DLARFB) +#define LAPACK_clarfb LAPACK_GLOBAL(clarfb,CLARFB) +#define LAPACK_zlarfb LAPACK_GLOBAL(zlarfb,ZLARFB) +#define LAPACK_slarfg LAPACK_GLOBAL(slarfg,SLARFG) +#define LAPACK_dlarfg LAPACK_GLOBAL(dlarfg,DLARFG) +#define LAPACK_clarfg LAPACK_GLOBAL(clarfg,CLARFG) +#define LAPACK_zlarfg LAPACK_GLOBAL(zlarfg,ZLARFG) +#define LAPACK_slarft LAPACK_GLOBAL(slarft,SLARFT) +#define LAPACK_dlarft LAPACK_GLOBAL(dlarft,DLARFT) +#define LAPACK_clarft LAPACK_GLOBAL(clarft,CLARFT) +#define LAPACK_zlarft LAPACK_GLOBAL(zlarft,ZLARFT) +#define LAPACK_slarfx LAPACK_GLOBAL(slarfx,SLARFX) +#define LAPACK_dlarfx LAPACK_GLOBAL(dlarfx,DLARFX) +#define LAPACK_clarfx LAPACK_GLOBAL(clarfx,CLARFX) +#define LAPACK_zlarfx LAPACK_GLOBAL(zlarfx,ZLARFX) +#define LAPACK_slatms LAPACK_GLOBAL(slatms,SLATMS) +#define LAPACK_dlatms LAPACK_GLOBAL(dlatms,DLATMS) +#define LAPACK_clatms LAPACK_GLOBAL(clatms,CLATMS) +#define LAPACK_zlatms LAPACK_GLOBAL(zlatms,ZLATMS) +#define LAPACK_slag2d LAPACK_GLOBAL(slag2d,SLAG2D) +#define LAPACK_dlag2s LAPACK_GLOBAL(dlag2s,DLAG2S) +#define LAPACK_clag2z LAPACK_GLOBAL(clag2z,CLAG2Z) +#define LAPACK_zlag2c LAPACK_GLOBAL(zlag2c,ZLAG2C) +#define LAPACK_slauum LAPACK_GLOBAL(slauum,SLAUUM) +#define LAPACK_dlauum LAPACK_GLOBAL(dlauum,DLAUUM) +#define LAPACK_clauum LAPACK_GLOBAL(clauum,CLAUUM) +#define LAPACK_zlauum LAPACK_GLOBAL(zlauum,ZLAUUM) +#define LAPACK_slagge LAPACK_GLOBAL(slagge,SLAGGE) +#define LAPACK_dlagge LAPACK_GLOBAL(dlagge,DLAGGE) +#define LAPACK_clagge LAPACK_GLOBAL(clagge,CLAGGE) +#define LAPACK_zlagge LAPACK_GLOBAL(zlagge,ZLAGGE) +#define LAPACK_slascl LAPACK_GLOBAL(slascl,SLASCL) +#define LAPACK_dlascl LAPACK_GLOBAL(dlascl,DLASCL) +#define LAPACK_clascl LAPACK_GLOBAL(clascl,CLASCL) +#define LAPACK_zlascl LAPACK_GLOBAL(zlascl,ZLASCL) +#define LAPACK_slaset LAPACK_GLOBAL(slaset,SLASET) +#define LAPACK_dlaset LAPACK_GLOBAL(dlaset,DLASET) +#define LAPACK_claset LAPACK_GLOBAL(claset,CLASET) +#define LAPACK_zlaset LAPACK_GLOBAL(zlaset,ZLASET) +#define LAPACK_slasrt LAPACK_GLOBAL(slasrt,SLASRT) +#define LAPACK_dlasrt LAPACK_GLOBAL(dlasrt,DLASRT) +#define LAPACK_slagsy LAPACK_GLOBAL(slagsy,SLAGSY) +#define LAPACK_dlagsy LAPACK_GLOBAL(dlagsy,DLAGSY) +#define LAPACK_clagsy LAPACK_GLOBAL(clagsy,CLAGSY) +#define LAPACK_zlagsy LAPACK_GLOBAL(zlagsy,ZLAGSY) +#define LAPACK_claghe LAPACK_GLOBAL(claghe,CLAGHE) +#define LAPACK_zlaghe LAPACK_GLOBAL(zlaghe,ZLAGHE) +#define LAPACK_slapmr LAPACK_GLOBAL(slapmr,SLAPMR) +#define LAPACK_dlapmr LAPACK_GLOBAL(dlapmr,DLAPMR) +#define LAPACK_clapmr LAPACK_GLOBAL(clapmr,CLAPMR) +#define LAPACK_zlapmr LAPACK_GLOBAL(zlapmr,ZLAPMR) +#define LAPACK_slapmt LAPACK_GLOBAL(slapmt,SLAPMT) +#define LAPACK_dlapmt LAPACK_GLOBAL(dlapmt,DLAPMT) +#define LAPACK_clapmt LAPACK_GLOBAL(clapmt,CLAPMT) +#define LAPACK_zlapmt LAPACK_GLOBAL(zlapmt,ZLAPMT) +#define LAPACK_slapy2 LAPACK_GLOBAL(slapy2,SLAPY2) +#define LAPACK_dlapy2 LAPACK_GLOBAL(dlapy2,DLAPY2) +#define LAPACK_slapy3 LAPACK_GLOBAL(slapy3,SLAPY3) +#define LAPACK_dlapy3 LAPACK_GLOBAL(dlapy3,DLAPY3) +#define LAPACK_slartgp LAPACK_GLOBAL(slartgp,SLARTGP) +#define LAPACK_dlartgp LAPACK_GLOBAL(dlartgp,DLARTGP) +#define LAPACK_slartgs LAPACK_GLOBAL(slartgs,SLARTGS) +#define LAPACK_dlartgs LAPACK_GLOBAL(dlartgs,DLARTGS) +// LAPACK 3.3.0 +#define LAPACK_cbbcsd LAPACK_GLOBAL(cbbcsd,CBBCSD) +#define LAPACK_cheswapr LAPACK_GLOBAL(cheswapr,CHESWAPR) +#define LAPACK_chetri2 LAPACK_GLOBAL(chetri2,CHETRI2) +#define LAPACK_chetri2x LAPACK_GLOBAL(chetri2x,CHETRI2X) +#define LAPACK_chetrs2 LAPACK_GLOBAL(chetrs2,CHETRS2) +#define LAPACK_csyconv LAPACK_GLOBAL(csyconv,CSYCONV) +#define LAPACK_csyswapr LAPACK_GLOBAL(csyswapr,CSYSWAPR) +#define LAPACK_csytri2 LAPACK_GLOBAL(csytri2,CSYTRI2) +#define LAPACK_csytri2x LAPACK_GLOBAL(csytri2x,CSYTRI2X) +#define LAPACK_csytrs2 LAPACK_GLOBAL(csytrs2,CSYTRS2) +#define LAPACK_cunbdb LAPACK_GLOBAL(cunbdb,CUNBDB) +#define LAPACK_cuncsd LAPACK_GLOBAL(cuncsd,CUNCSD) +#define LAPACK_cuncsd2by1 LAPACK_GLOBAL(cuncsd2by1,CUNCSD2BY1) +#define LAPACK_dbbcsd LAPACK_GLOBAL(dbbcsd,DBBCSD) +#define LAPACK_dorbdb LAPACK_GLOBAL(dorbdb,DORBDB) +#define LAPACK_dorcsd LAPACK_GLOBAL(dorcsd,DORCSD) +#define LAPACK_dorcsd2by1 LAPACK_GLOBAL(dorcsd2by1,DORCSD2BY1) +#define LAPACK_dsyconv LAPACK_GLOBAL(dsyconv,DSYCONV) +#define LAPACK_dsyswapr LAPACK_GLOBAL(dsyswapr,DSYSWAPR) +#define LAPACK_dsytri2 LAPACK_GLOBAL(dsytri2,DSYTRI2) +#define LAPACK_dsytri2x LAPACK_GLOBAL(dsytri2x,DSYTRI2X) +#define LAPACK_dsytrs2 LAPACK_GLOBAL(dsytrs2,DSYTRS2) +#define LAPACK_sbbcsd LAPACK_GLOBAL(sbbcsd,SBBCSD) +#define LAPACK_sorbdb LAPACK_GLOBAL(sorbdb,SORBDB) +#define LAPACK_sorcsd LAPACK_GLOBAL(sorcsd,SORCSD) +#define LAPACK_sorcsd2by1 LAPACK_GLOBAL(sorcsd2by1,SORCSD2BY1) +#define LAPACK_ssyconv LAPACK_GLOBAL(ssyconv,SSYCONV) +#define LAPACK_ssyswapr LAPACK_GLOBAL(ssyswapr,SSYSWAPR) +#define LAPACK_ssytri2 LAPACK_GLOBAL(ssytri2,SSYTRI2) +#define LAPACK_ssytri2x LAPACK_GLOBAL(ssytri2x,SSYTRI2X) +#define LAPACK_ssytrs2 LAPACK_GLOBAL(ssytrs2,SSYTRS2) +#define LAPACK_zbbcsd LAPACK_GLOBAL(zbbcsd,ZBBCSD) +#define LAPACK_zheswapr LAPACK_GLOBAL(zheswapr,ZHESWAPR) +#define LAPACK_zhetri2 LAPACK_GLOBAL(zhetri2,ZHETRI2) +#define LAPACK_zhetri2x LAPACK_GLOBAL(zhetri2x,ZHETRI2X) +#define LAPACK_zhetrs2 LAPACK_GLOBAL(zhetrs2,ZHETRS2) +#define LAPACK_zsyconv LAPACK_GLOBAL(zsyconv,ZSYCONV) +#define LAPACK_zsyswapr LAPACK_GLOBAL(zsyswapr,ZSYSWAPR) +#define LAPACK_zsytri2 LAPACK_GLOBAL(zsytri2,ZSYTRI2) +#define LAPACK_zsytri2x LAPACK_GLOBAL(zsytri2x,ZSYTRI2X) +#define LAPACK_zsytrs2 LAPACK_GLOBAL(zsytrs2,ZSYTRS2) +#define LAPACK_zunbdb LAPACK_GLOBAL(zunbdb,ZUNBDB) +#define LAPACK_zuncsd LAPACK_GLOBAL(zuncsd,ZUNCSD) +#define LAPACK_zuncsd2by1 LAPACK_GLOBAL(zuncsd2by1,ZUNCSD2BY1) +// LAPACK 3.4.0 +#define LAPACK_sgemqrt LAPACK_GLOBAL(sgemqrt,SGEMQRT) +#define LAPACK_dgemqrt LAPACK_GLOBAL(dgemqrt,DGEMQRT) +#define LAPACK_cgemqrt LAPACK_GLOBAL(cgemqrt,CGEMQRT) +#define LAPACK_zgemqrt LAPACK_GLOBAL(zgemqrt,ZGEMQRT) +#define LAPACK_sgeqrt LAPACK_GLOBAL(sgeqrt,SGEQRT) +#define LAPACK_dgeqrt LAPACK_GLOBAL(dgeqrt,DGEQRT) +#define LAPACK_cgeqrt LAPACK_GLOBAL(cgeqrt,CGEQRT) +#define LAPACK_zgeqrt LAPACK_GLOBAL(zgeqrt,ZGEQRT) +#define LAPACK_sgeqrt2 LAPACK_GLOBAL(sgeqrt2,SGEQRT2) +#define LAPACK_dgeqrt2 LAPACK_GLOBAL(dgeqrt2,DGEQRT2) +#define LAPACK_cgeqrt2 LAPACK_GLOBAL(cgeqrt2,CGEQRT2) +#define LAPACK_zgeqrt2 LAPACK_GLOBAL(zgeqrt2,ZGEQRT2) +#define LAPACK_sgeqrt3 LAPACK_GLOBAL(sgeqrt3,SGEQRT3) +#define LAPACK_dgeqrt3 LAPACK_GLOBAL(dgeqrt3,DGEQRT3) +#define LAPACK_cgeqrt3 LAPACK_GLOBAL(cgeqrt3,CGEQRT3) +#define LAPACK_zgeqrt3 LAPACK_GLOBAL(zgeqrt3,ZGEQRT3) +#define LAPACK_stpmqrt LAPACK_GLOBAL(stpmqrt,STPMQRT) +#define LAPACK_dtpmqrt LAPACK_GLOBAL(dtpmqrt,DTPMQRT) +#define LAPACK_ctpmqrt LAPACK_GLOBAL(ctpmqrt,CTPMQRT) +#define LAPACK_ztpmqrt LAPACK_GLOBAL(ztpmqrt,ZTPMQRT) +#define LAPACK_stpqrt LAPACK_GLOBAL(stpqrt,STPQRT) +#define LAPACK_dtpqrt LAPACK_GLOBAL(dtpqrt,DTPQRT) +#define LAPACK_ctpqrt LAPACK_GLOBAL(ctpqrt,CTPQRT) +#define LAPACK_ztpqrt LAPACK_GLOBAL(ztpqrt,ZTPQRT) +#define LAPACK_stpqrt2 LAPACK_GLOBAL(stpqrt2,STPQRT2) +#define LAPACK_dtpqrt2 LAPACK_GLOBAL(dtpqrt2,DTPQRT2) +#define LAPACK_ctpqrt2 LAPACK_GLOBAL(ctpqrt2,CTPQRT2) +#define LAPACK_ztpqrt2 LAPACK_GLOBAL(ztpqrt2,ZTPQRT2) +#define LAPACK_stprfb LAPACK_GLOBAL(stprfb,STPRFB) +#define LAPACK_dtprfb LAPACK_GLOBAL(dtprfb,DTPRFB) +#define LAPACK_ctprfb LAPACK_GLOBAL(ctprfb,CTPRFB) +#define LAPACK_ztprfb LAPACK_GLOBAL(ztprfb,ZTPRFB) +// LAPACK 3.5.0 +#define LAPACK_ssysv_rook LAPACK_GLOBAL(ssysv_rook,SSYSV_ROOK) +#define LAPACK_dsysv_rook LAPACK_GLOBAL(dsysv_rook,DSYSV_ROOK) +#define LAPACK_csysv_rook LAPACK_GLOBAL(csysv_rook,CSYSV_ROOK) +#define LAPACK_zsysv_rook LAPACK_GLOBAL(zsysv_rook,ZSYSV_ROOK) +#define LAPACK_csyr LAPACK_GLOBAL(csyr,CSYR) +#define LAPACK_zsyr LAPACK_GLOBAL(zsyr,ZSYR) +#define LAPACK_ilaver LAPACK_GLOBAL(ilaver,ILAVER) +// LAPACK 3.6.0 +#define LAPACK_sggsvd3 LAPACK_GLOBAL(sggsvd3,SGGSVD3) +#define LAPACK_dggsvd3 LAPACK_GLOBAL(dggsvd3,DGGSVD3) +#define LAPACK_cggsvd3 LAPACK_GLOBAL(cggsvd3,CGGSVD3) +#define LAPACK_zggsvd3 LAPACK_GLOBAL(zggsvd3,ZGGSVD3) + + + +void LAPACK_sgetrf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_dgetrf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_cgetrf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_zgetrf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_sgetrf2( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_dgetrf2( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_cgetrf2( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_zgetrf2( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_sgbtrf( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, float* ab, lapack_int* ldab, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_dgbtrf( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, double* ab, lapack_int* ldab, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_cgbtrf( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_complex_float* ab, lapack_int* ldab, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_zgbtrf( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_complex_double* ab, lapack_int* ldab, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_sgttrf( lapack_int* n, float* dl, float* d, float* du, float* du2, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_dgttrf( lapack_int* n, double* dl, double* d, double* du, + double* du2, lapack_int* ipiv, lapack_int *info ); +void LAPACK_cgttrf( lapack_int* n, lapack_complex_float* dl, + lapack_complex_float* d, lapack_complex_float* du, + lapack_complex_float* du2, lapack_int* ipiv, + lapack_int *info ); +void LAPACK_zgttrf( lapack_int* n, lapack_complex_double* dl, + lapack_complex_double* d, lapack_complex_double* du, + lapack_complex_double* du2, lapack_int* ipiv, + lapack_int *info ); +void LAPACK_spotrf2( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dpotrf2( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_cpotrf2( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_zpotrf2( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_spotrf( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dpotrf( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_cpotrf( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_zpotrf( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_dpstrf( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int* piv, lapack_int* rank, double* tol, + double* work, lapack_int *info ); +void LAPACK_spstrf( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int* piv, lapack_int* rank, float* tol, float* work, + lapack_int *info ); +void LAPACK_zpstrf( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* piv, lapack_int* rank, + double* tol, double* work, lapack_int *info ); +void LAPACK_cpstrf( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* piv, lapack_int* rank, + float* tol, float* work, lapack_int *info ); +void LAPACK_dpftrf( char* transr, char* uplo, lapack_int* n, double* a, + lapack_int *info ); +void LAPACK_spftrf( char* transr, char* uplo, lapack_int* n, float* a, + lapack_int *info ); +void LAPACK_zpftrf( char* transr, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int *info ); +void LAPACK_cpftrf( char* transr, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int *info ); +void LAPACK_spptrf( char* uplo, lapack_int* n, float* ap, lapack_int *info ); +void LAPACK_dpptrf( char* uplo, lapack_int* n, double* ap, lapack_int *info ); +void LAPACK_cpptrf( char* uplo, lapack_int* n, lapack_complex_float* ap, + lapack_int *info ); +void LAPACK_zpptrf( char* uplo, lapack_int* n, lapack_complex_double* ap, + lapack_int *info ); +void LAPACK_spbtrf( char* uplo, lapack_int* n, lapack_int* kd, float* ab, + lapack_int* ldab, lapack_int *info ); +void LAPACK_dpbtrf( char* uplo, lapack_int* n, lapack_int* kd, double* ab, + lapack_int* ldab, lapack_int *info ); +void LAPACK_cpbtrf( char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_float* ab, lapack_int* ldab, + lapack_int *info ); +void LAPACK_zpbtrf( char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_double* ab, lapack_int* ldab, + lapack_int *info ); +void LAPACK_spttrf( lapack_int* n, float* d, float* e, lapack_int *info ); +void LAPACK_dpttrf( lapack_int* n, double* d, double* e, lapack_int *info ); +void LAPACK_cpttrf( lapack_int* n, float* d, lapack_complex_float* e, + lapack_int *info ); +void LAPACK_zpttrf( lapack_int* n, double* d, lapack_complex_double* e, + lapack_int *info ); +void LAPACK_ssytrf( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ipiv, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dsytrf( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ipiv, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_csytrf( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zsytrf( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_chetrf( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zhetrf( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ssptrf( char* uplo, lapack_int* n, float* ap, lapack_int* ipiv, + lapack_int *info ); +void LAPACK_dsptrf( char* uplo, lapack_int* n, double* ap, lapack_int* ipiv, + lapack_int *info ); +void LAPACK_csptrf( char* uplo, lapack_int* n, lapack_complex_float* ap, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_zsptrf( char* uplo, lapack_int* n, lapack_complex_double* ap, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_chptrf( char* uplo, lapack_int* n, lapack_complex_float* ap, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_zhptrf( char* uplo, lapack_int* n, lapack_complex_double* ap, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_sgetrs( char* trans, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, const lapack_int* ipiv, + float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_dgetrs( char* trans, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const lapack_int* ipiv, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_cgetrs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zgetrs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_sgbtrs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const float* ab, lapack_int* ldab, + const lapack_int* ipiv, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dgbtrs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const double* ab, lapack_int* ldab, + const lapack_int* ipiv, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cgbtrs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const lapack_complex_float* ab, + lapack_int* ldab, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zgbtrs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const lapack_complex_double* ab, + lapack_int* ldab, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_sgttrs( char* trans, lapack_int* n, lapack_int* nrhs, + const float* dl, const float* d, const float* du, + const float* du2, const lapack_int* ipiv, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dgttrs( char* trans, lapack_int* n, lapack_int* nrhs, + const double* dl, const double* d, const double* du, + const double* du2, const lapack_int* ipiv, double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_cgttrs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zgttrs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_spotrs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* a, + lapack_int* lda, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dpotrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_cpotrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zpotrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dpftrs( char* transr, char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_spftrs( char* transr, char* uplo, lapack_int* n, lapack_int* nrhs, + const float* a, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zpftrs( char* transr, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_cpftrs( char* transr, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_spptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const float* ap, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dpptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* ap, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cpptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zpptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_spbtrs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const float* ab, lapack_int* ldab, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dpbtrs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const double* ab, lapack_int* ldab, double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_cpbtrs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zpbtrs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_spttrs( lapack_int* n, lapack_int* nrhs, const float* d, + const float* e, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dpttrs( lapack_int* n, lapack_int* nrhs, const double* d, + const double* e, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cpttrs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* d, + const lapack_complex_float* e, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zpttrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* d, const lapack_complex_double* e, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_ssytrs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* a, + lapack_int* lda, const lapack_int* ipiv, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dsytrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const lapack_int* ipiv, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_csytrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zsytrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_chetrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zhetrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_ssptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const float* ap, const lapack_int* ipiv, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dsptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* ap, const lapack_int* ipiv, double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_csptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zsptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_chptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zhptrs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_strtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const float* a, lapack_int* lda, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dtrtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const double* a, lapack_int* lda, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_ctrtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_ztrtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_stptrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const float* ap, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dtptrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const double* ap, double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_ctptrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* ap, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_ztptrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_double* ap, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_stbtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, const float* ab, + lapack_int* ldab, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dtbtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, const double* ab, + lapack_int* ldab, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_ctbtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, + const lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_ztbtrs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, + const lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_sgecon( char* norm, lapack_int* n, const float* a, lapack_int* lda, + float* anorm, float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgecon( char* norm, lapack_int* n, const double* a, lapack_int* lda, + double* anorm, double* rcond, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgecon( char* norm, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* anorm, float* rcond, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zgecon( char* norm, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* anorm, double* rcond, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sgbcon( char* norm, lapack_int* n, lapack_int* kl, lapack_int* ku, + const float* ab, lapack_int* ldab, const lapack_int* ipiv, + float* anorm, float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgbcon( char* norm, lapack_int* n, lapack_int* kl, lapack_int* ku, + const double* ab, lapack_int* ldab, const lapack_int* ipiv, + double* anorm, double* rcond, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgbcon( char* norm, lapack_int* n, lapack_int* kl, lapack_int* ku, + const lapack_complex_float* ab, lapack_int* ldab, + const lapack_int* ipiv, float* anorm, float* rcond, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zgbcon( char* norm, lapack_int* n, lapack_int* kl, lapack_int* ku, + const lapack_complex_double* ab, lapack_int* ldab, + const lapack_int* ipiv, double* anorm, double* rcond, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sgtcon( char* norm, lapack_int* n, const float* dl, const float* d, + const float* du, const float* du2, const lapack_int* ipiv, + float* anorm, float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgtcon( char* norm, lapack_int* n, const double* dl, + const double* d, const double* du, const double* du2, + const lapack_int* ipiv, double* anorm, double* rcond, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cgtcon( char* norm, lapack_int* n, const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* du2, const lapack_int* ipiv, + float* anorm, float* rcond, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zgtcon( char* norm, lapack_int* n, const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* du2, const lapack_int* ipiv, + double* anorm, double* rcond, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_spocon( char* uplo, lapack_int* n, const float* a, lapack_int* lda, + float* anorm, float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dpocon( char* uplo, lapack_int* n, const double* a, lapack_int* lda, + double* anorm, double* rcond, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cpocon( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* anorm, float* rcond, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zpocon( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* anorm, double* rcond, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sppcon( char* uplo, lapack_int* n, const float* ap, float* anorm, + float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dppcon( char* uplo, lapack_int* n, const double* ap, double* anorm, + double* rcond, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cppcon( char* uplo, lapack_int* n, const lapack_complex_float* ap, + float* anorm, float* rcond, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zppcon( char* uplo, lapack_int* n, const lapack_complex_double* ap, + double* anorm, double* rcond, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_spbcon( char* uplo, lapack_int* n, lapack_int* kd, const float* ab, + lapack_int* ldab, float* anorm, float* rcond, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dpbcon( char* uplo, lapack_int* n, lapack_int* kd, const double* ab, + lapack_int* ldab, double* anorm, double* rcond, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cpbcon( char* uplo, lapack_int* n, lapack_int* kd, + const lapack_complex_float* ab, lapack_int* ldab, + float* anorm, float* rcond, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zpbcon( char* uplo, lapack_int* n, lapack_int* kd, + const lapack_complex_double* ab, lapack_int* ldab, + double* anorm, double* rcond, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_sptcon( lapack_int* n, const float* d, const float* e, float* anorm, + float* rcond, float* work, lapack_int *info ); +void LAPACK_dptcon( lapack_int* n, const double* d, const double* e, + double* anorm, double* rcond, double* work, + lapack_int *info ); +void LAPACK_cptcon( lapack_int* n, const float* d, + const lapack_complex_float* e, float* anorm, float* rcond, + float* work, lapack_int *info ); +void LAPACK_zptcon( lapack_int* n, const double* d, + const lapack_complex_double* e, double* anorm, + double* rcond, double* work, lapack_int *info ); +void LAPACK_ssycon( char* uplo, lapack_int* n, const float* a, lapack_int* lda, + const lapack_int* ipiv, float* anorm, float* rcond, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dsycon( char* uplo, lapack_int* n, const double* a, lapack_int* lda, + const lapack_int* ipiv, double* anorm, double* rcond, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_csycon( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, float* anorm, + float* rcond, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zsycon( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, const lapack_int* ipiv, double* anorm, + double* rcond, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_checon( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, float* anorm, + float* rcond, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zhecon( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, const lapack_int* ipiv, double* anorm, + double* rcond, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_sspcon( char* uplo, lapack_int* n, const float* ap, + const lapack_int* ipiv, float* anorm, float* rcond, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dspcon( char* uplo, lapack_int* n, const double* ap, + const lapack_int* ipiv, double* anorm, double* rcond, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cspcon( char* uplo, lapack_int* n, const lapack_complex_float* ap, + const lapack_int* ipiv, float* anorm, float* rcond, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zspcon( char* uplo, lapack_int* n, const lapack_complex_double* ap, + const lapack_int* ipiv, double* anorm, double* rcond, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_chpcon( char* uplo, lapack_int* n, const lapack_complex_float* ap, + const lapack_int* ipiv, float* anorm, float* rcond, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zhpcon( char* uplo, lapack_int* n, const lapack_complex_double* ap, + const lapack_int* ipiv, double* anorm, double* rcond, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_strcon( char* norm, char* uplo, char* diag, lapack_int* n, + const float* a, lapack_int* lda, float* rcond, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dtrcon( char* norm, char* uplo, char* diag, lapack_int* n, + const double* a, lapack_int* lda, double* rcond, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_ctrcon( char* norm, char* uplo, char* diag, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, + float* rcond, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztrcon( char* norm, char* uplo, char* diag, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, + double* rcond, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_stpcon( char* norm, char* uplo, char* diag, lapack_int* n, + const float* ap, float* rcond, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dtpcon( char* norm, char* uplo, char* diag, lapack_int* n, + const double* ap, double* rcond, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ctpcon( char* norm, char* uplo, char* diag, lapack_int* n, + const lapack_complex_float* ap, float* rcond, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztpcon( char* norm, char* uplo, char* diag, lapack_int* n, + const lapack_complex_double* ap, double* rcond, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_stbcon( char* norm, char* uplo, char* diag, lapack_int* n, + lapack_int* kd, const float* ab, lapack_int* ldab, + float* rcond, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dtbcon( char* norm, char* uplo, char* diag, lapack_int* n, + lapack_int* kd, const double* ab, lapack_int* ldab, + double* rcond, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_ctbcon( char* norm, char* uplo, char* diag, lapack_int* n, + lapack_int* kd, const lapack_complex_float* ab, + lapack_int* ldab, float* rcond, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_ztbcon( char* norm, char* uplo, char* diag, lapack_int* n, + lapack_int* kd, const lapack_complex_double* ab, + lapack_int* ldab, double* rcond, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sgerfs( char* trans, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, const float* af, + lapack_int* ldaf, const lapack_int* ipiv, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* ferr, + float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgerfs( char* trans, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const lapack_int* ipiv, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cgerfs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zgerfs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_dgerfsx( char* trans, char* equed, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const lapack_int* ipiv, const double* r, + const double* c, const double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* rcond, double* berr, + lapack_int* n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int* nparams, double* params, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_sgerfsx( char* trans, char* equed, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, const float* af, + lapack_int* ldaf, const lapack_int* ipiv, const float* r, + const float* c, const float* b, lapack_int* ldb, float* x, + lapack_int* ldx, float* rcond, float* berr, + lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_zgerfsx( char* trans, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const double* r, const double* c, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cgerfsx( char* trans, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const float* r, const float* c, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* berr, lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sgbrfs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const float* ab, lapack_int* ldab, + const float* afb, lapack_int* ldafb, const lapack_int* ipiv, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgbrfs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const double* ab, lapack_int* ldab, + const double* afb, lapack_int* ldafb, + const lapack_int* ipiv, const double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* ferr, double* berr, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cgbrfs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const lapack_complex_float* ab, + lapack_int* ldab, const lapack_complex_float* afb, + lapack_int* ldafb, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zgbrfs( char* trans, lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, const lapack_complex_double* ab, + lapack_int* ldab, const lapack_complex_double* afb, + lapack_int* ldafb, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_dgbrfsx( char* trans, char* equed, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, const double* ab, + lapack_int* ldab, const double* afb, lapack_int* ldafb, + const lapack_int* ipiv, const double* r, const double* c, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* rcond, double* berr, + lapack_int* n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int* nparams, double* params, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_sgbrfsx( char* trans, char* equed, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, const float* ab, + lapack_int* ldab, const float* afb, lapack_int* ldafb, + const lapack_int* ipiv, const float* r, const float* c, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* rcond, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zgbrfsx( char* trans, char* equed, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, + const lapack_complex_double* ab, lapack_int* ldab, + const lapack_complex_double* afb, lapack_int* ldafb, + const lapack_int* ipiv, const double* r, const double* c, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cgbrfsx( char* trans, char* equed, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, + const lapack_complex_float* ab, lapack_int* ldab, + const lapack_complex_float* afb, lapack_int* ldafb, + const lapack_int* ipiv, const float* r, const float* c, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* berr, lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sgtrfs( char* trans, lapack_int* n, lapack_int* nrhs, + const float* dl, const float* d, const float* du, + const float* dlf, const float* df, const float* duf, + const float* du2, const lapack_int* ipiv, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* ferr, + float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgtrfs( char* trans, lapack_int* n, lapack_int* nrhs, + const double* dl, const double* d, const double* du, + const double* dlf, const double* df, const double* duf, + const double* du2, const lapack_int* ipiv, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cgtrfs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, + const lapack_complex_float* dlf, + const lapack_complex_float* df, + const lapack_complex_float* duf, + const lapack_complex_float* du2, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zgtrfs( char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, + const lapack_complex_double* dlf, + const lapack_complex_double* df, + const lapack_complex_double* duf, + const lapack_complex_double* du2, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sporfs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* a, + lapack_int* lda, const float* af, lapack_int* ldaf, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dporfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* ferr, double* berr, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cporfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zporfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_dporfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const double* s, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* rcond, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_sporfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, const float* af, + lapack_int* ldaf, const float* s, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* berr, lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_zporfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const double* s, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cporfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const float* s, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_spprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const float* ap, const float* afp, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* ferr, + float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dpprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* ap, const double* afp, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cpprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, + const lapack_complex_float* afp, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zpprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_spbrfs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const float* ab, lapack_int* ldab, const float* afb, + lapack_int* ldafb, const float* b, lapack_int* ldb, + float* x, lapack_int* ldx, float* ferr, float* berr, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dpbrfs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const double* ab, lapack_int* ldab, const double* afb, + lapack_int* ldafb, const double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* ferr, double* berr, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cpbrfs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const lapack_complex_float* ab, lapack_int* ldab, + const lapack_complex_float* afb, lapack_int* ldafb, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zpbrfs( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + const lapack_complex_double* ab, lapack_int* ldab, + const lapack_complex_double* afb, lapack_int* ldafb, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sptrfs( lapack_int* n, lapack_int* nrhs, const float* d, + const float* e, const float* df, const float* ef, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* ferr, float* berr, float* work, lapack_int *info ); +void LAPACK_dptrfs( lapack_int* n, lapack_int* nrhs, const double* d, + const double* e, const double* df, const double* ef, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* ferr, double* berr, double* work, + lapack_int *info ); +void LAPACK_cptrfs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* d, + const lapack_complex_float* e, const float* df, + const lapack_complex_float* ef, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zptrfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* d, const lapack_complex_double* e, + const double* df, const lapack_complex_double* ef, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_ssyrfs( char* uplo, lapack_int* n, lapack_int* nrhs, const float* a, + lapack_int* lda, const float* af, lapack_int* ldaf, + const lapack_int* ipiv, const float* b, lapack_int* ldb, + float* x, lapack_int* ldx, float* ferr, float* berr, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dsyrfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const lapack_int* ipiv, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_csyrfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zsyrfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_dsyrfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const double* af, + lapack_int* ldaf, const lapack_int* ipiv, const double* s, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* rcond, double* berr, + lapack_int* n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int* nparams, double* params, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_ssyrfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, const float* af, + lapack_int* ldaf, const lapack_int* ipiv, const float* s, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* rcond, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zsyrfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const double* s, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_csyrfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const float* s, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* berr, lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_cherfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zherfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_zherfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* af, lapack_int* ldaf, + const lapack_int* ipiv, const double* s, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cherfsx( char* uplo, char* equed, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* af, lapack_int* ldaf, + const lapack_int* ipiv, const float* s, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* berr, lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ssprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const float* ap, const float* afp, const lapack_int* ipiv, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dsprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* ap, const double* afp, const lapack_int* ipiv, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* ferr, double* berr, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_csprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, + const lapack_complex_float* afp, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zsprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_chprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, + const lapack_complex_float* afp, const lapack_int* ipiv, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zhprfs( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, + const lapack_complex_double* afp, const lapack_int* ipiv, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* ferr, + double* berr, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_strrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const float* a, lapack_int* lda, + const float* b, lapack_int* ldb, const float* x, + lapack_int* ldx, float* ferr, float* berr, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dtrrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const double* a, lapack_int* lda, + const double* b, lapack_int* ldb, const double* x, + lapack_int* ldx, double* ferr, double* berr, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ctrrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* b, + lapack_int* ldb, const lapack_complex_float* x, + lapack_int* ldx, float* ferr, float* berr, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztrrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* b, + lapack_int* ldb, const lapack_complex_double* x, + lapack_int* ldx, double* ferr, double* berr, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_stprfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const float* ap, const float* b, + lapack_int* ldb, const float* x, lapack_int* ldx, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dtprfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const double* ap, const double* b, + lapack_int* ldb, const double* x, lapack_int* ldx, + double* ferr, double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_ctprfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* ap, + const lapack_complex_float* b, lapack_int* ldb, + const lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztprfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* nrhs, const lapack_complex_double* ap, + const lapack_complex_double* b, lapack_int* ldb, + const lapack_complex_double* x, lapack_int* ldx, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_stbrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, const float* ab, + lapack_int* ldab, const float* b, lapack_int* ldb, + const float* x, lapack_int* ldx, float* ferr, float* berr, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dtbrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, const double* ab, + lapack_int* ldab, const double* b, lapack_int* ldb, + const double* x, lapack_int* ldx, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_ctbrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, + const lapack_complex_float* ab, lapack_int* ldab, + const lapack_complex_float* b, lapack_int* ldb, + const lapack_complex_float* x, lapack_int* ldx, float* ferr, + float* berr, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztbrfs( char* uplo, char* trans, char* diag, lapack_int* n, + lapack_int* kd, lapack_int* nrhs, + const lapack_complex_double* ab, lapack_int* ldab, + const lapack_complex_double* b, lapack_int* ldb, + const lapack_complex_double* x, lapack_int* ldx, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_sgetri( lapack_int* n, float* a, lapack_int* lda, + const lapack_int* ipiv, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgetri( lapack_int* n, double* a, lapack_int* lda, + const lapack_int* ipiv, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgetri( lapack_int* n, lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zgetri( lapack_int* n, lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_spotri( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dpotri( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_cpotri( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_zpotri( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_dpftri( char* transr, char* uplo, lapack_int* n, double* a, + lapack_int *info ); +void LAPACK_spftri( char* transr, char* uplo, lapack_int* n, float* a, + lapack_int *info ); +void LAPACK_zpftri( char* transr, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int *info ); +void LAPACK_cpftri( char* transr, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int *info ); +void LAPACK_spptri( char* uplo, lapack_int* n, float* ap, lapack_int *info ); +void LAPACK_dpptri( char* uplo, lapack_int* n, double* ap, lapack_int *info ); +void LAPACK_cpptri( char* uplo, lapack_int* n, lapack_complex_float* ap, + lapack_int *info ); +void LAPACK_zpptri( char* uplo, lapack_int* n, lapack_complex_double* ap, + lapack_int *info ); +void LAPACK_ssytri( char* uplo, lapack_int* n, float* a, lapack_int* lda, + const lapack_int* ipiv, float* work, lapack_int *info ); +void LAPACK_dsytri( char* uplo, lapack_int* n, double* a, lapack_int* lda, + const lapack_int* ipiv, double* work, lapack_int *info ); +void LAPACK_csytri( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zsytri( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_chetri( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zhetri( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_ssptri( char* uplo, lapack_int* n, float* ap, + const lapack_int* ipiv, float* work, lapack_int *info ); +void LAPACK_dsptri( char* uplo, lapack_int* n, double* ap, + const lapack_int* ipiv, double* work, lapack_int *info ); +void LAPACK_csptri( char* uplo, lapack_int* n, lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zsptri( char* uplo, lapack_int* n, lapack_complex_double* ap, + const lapack_int* ipiv, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_chptri( char* uplo, lapack_int* n, lapack_complex_float* ap, + const lapack_int* ipiv, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zhptri( char* uplo, lapack_int* n, lapack_complex_double* ap, + const lapack_int* ipiv, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_strtri( char* uplo, char* diag, lapack_int* n, float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_dtrtri( char* uplo, char* diag, lapack_int* n, double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_ctrtri( char* uplo, char* diag, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_ztrtri( char* uplo, char* diag, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dtftri( char* transr, char* uplo, char* diag, lapack_int* n, + double* a, lapack_int *info ); +void LAPACK_stftri( char* transr, char* uplo, char* diag, lapack_int* n, + float* a, lapack_int *info ); +void LAPACK_ztftri( char* transr, char* uplo, char* diag, lapack_int* n, + lapack_complex_double* a, lapack_int *info ); +void LAPACK_ctftri( char* transr, char* uplo, char* diag, lapack_int* n, + lapack_complex_float* a, lapack_int *info ); +void LAPACK_stptri( char* uplo, char* diag, lapack_int* n, float* ap, + lapack_int *info ); +void LAPACK_dtptri( char* uplo, char* diag, lapack_int* n, double* ap, + lapack_int *info ); +void LAPACK_ctptri( char* uplo, char* diag, lapack_int* n, + lapack_complex_float* ap, lapack_int *info ); +void LAPACK_ztptri( char* uplo, char* diag, lapack_int* n, + lapack_complex_double* ap, lapack_int *info ); +void LAPACK_sgeequ( lapack_int* m, lapack_int* n, const float* a, + lapack_int* lda, float* r, float* c, float* rowcnd, + float* colcnd, float* amax, lapack_int *info ); +void LAPACK_dgeequ( lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, double* r, double* c, double* rowcnd, + double* colcnd, double* amax, lapack_int *info ); +void LAPACK_cgeequ( lapack_int* m, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* r, float* c, float* rowcnd, + float* colcnd, float* amax, lapack_int *info ); +void LAPACK_zgeequ( lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, double* r, + double* c, double* rowcnd, double* colcnd, double* amax, + lapack_int *info ); +void LAPACK_dgeequb( lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, double* r, double* c, double* rowcnd, + double* colcnd, double* amax, lapack_int *info ); +void LAPACK_sgeequb( lapack_int* m, lapack_int* n, const float* a, + lapack_int* lda, float* r, float* c, float* rowcnd, + float* colcnd, float* amax, lapack_int *info ); +void LAPACK_zgeequb( lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, double* r, + double* c, double* rowcnd, double* colcnd, double* amax, + lapack_int *info ); +void LAPACK_cgeequb( lapack_int* m, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, float* r, + float* c, float* rowcnd, float* colcnd, float* amax, + lapack_int *info ); +void LAPACK_sgbequ( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const float* ab, lapack_int* ldab, float* r, + float* c, float* rowcnd, float* colcnd, float* amax, + lapack_int *info ); +void LAPACK_dgbequ( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const double* ab, lapack_int* ldab, + double* r, double* c, double* rowcnd, double* colcnd, + double* amax, lapack_int *info ); +void LAPACK_cgbequ( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const lapack_complex_float* ab, + lapack_int* ldab, float* r, float* c, float* rowcnd, + float* colcnd, float* amax, lapack_int *info ); +void LAPACK_zgbequ( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const lapack_complex_double* ab, + lapack_int* ldab, double* r, double* c, double* rowcnd, + double* colcnd, double* amax, lapack_int *info ); +void LAPACK_dgbequb( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const double* ab, lapack_int* ldab, + double* r, double* c, double* rowcnd, double* colcnd, + double* amax, lapack_int *info ); +void LAPACK_sgbequb( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const float* ab, lapack_int* ldab, + float* r, float* c, float* rowcnd, float* colcnd, + float* amax, lapack_int *info ); +void LAPACK_zgbequb( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const lapack_complex_double* ab, + lapack_int* ldab, double* r, double* c, double* rowcnd, + double* colcnd, double* amax, lapack_int *info ); +void LAPACK_cgbequb( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const lapack_complex_float* ab, + lapack_int* ldab, float* r, float* c, float* rowcnd, + float* colcnd, float* amax, lapack_int *info ); +void LAPACK_spoequ( lapack_int* n, const float* a, lapack_int* lda, float* s, + float* scond, float* amax, lapack_int *info ); +void LAPACK_dpoequ( lapack_int* n, const double* a, lapack_int* lda, double* s, + double* scond, double* amax, lapack_int *info ); +void LAPACK_cpoequ( lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* s, float* scond, float* amax, + lapack_int *info ); +void LAPACK_zpoequ( lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* s, double* scond, double* amax, + lapack_int *info ); +void LAPACK_dpoequb( lapack_int* n, const double* a, lapack_int* lda, double* s, + double* scond, double* amax, lapack_int *info ); +void LAPACK_spoequb( lapack_int* n, const float* a, lapack_int* lda, float* s, + float* scond, float* amax, lapack_int *info ); +void LAPACK_zpoequb( lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* s, double* scond, double* amax, + lapack_int *info ); +void LAPACK_cpoequb( lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* s, float* scond, float* amax, + lapack_int *info ); +void LAPACK_sppequ( char* uplo, lapack_int* n, const float* ap, float* s, + float* scond, float* amax, lapack_int *info ); +void LAPACK_dppequ( char* uplo, lapack_int* n, const double* ap, double* s, + double* scond, double* amax, lapack_int *info ); +void LAPACK_cppequ( char* uplo, lapack_int* n, const lapack_complex_float* ap, + float* s, float* scond, float* amax, lapack_int *info ); +void LAPACK_zppequ( char* uplo, lapack_int* n, const lapack_complex_double* ap, + double* s, double* scond, double* amax, lapack_int *info ); +void LAPACK_spbequ( char* uplo, lapack_int* n, lapack_int* kd, const float* ab, + lapack_int* ldab, float* s, float* scond, float* amax, + lapack_int *info ); +void LAPACK_dpbequ( char* uplo, lapack_int* n, lapack_int* kd, const double* ab, + lapack_int* ldab, double* s, double* scond, double* amax, + lapack_int *info ); +void LAPACK_cpbequ( char* uplo, lapack_int* n, lapack_int* kd, + const lapack_complex_float* ab, lapack_int* ldab, float* s, + float* scond, float* amax, lapack_int *info ); +void LAPACK_zpbequ( char* uplo, lapack_int* n, lapack_int* kd, + const lapack_complex_double* ab, lapack_int* ldab, + double* s, double* scond, double* amax, lapack_int *info ); +void LAPACK_dsyequb( char* uplo, lapack_int* n, const double* a, + lapack_int* lda, double* s, double* scond, double* amax, + double* work, lapack_int *info ); +void LAPACK_ssyequb( char* uplo, lapack_int* n, const float* a, lapack_int* lda, + float* s, float* scond, float* amax, float* work, + lapack_int *info ); +void LAPACK_zsyequb( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* s, double* scond, double* amax, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_csyequb( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* s, float* scond, float* amax, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zheequb( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, double* s, double* scond, double* amax, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_cheequb( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, float* s, float* scond, float* amax, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_sgesv( lapack_int* n, lapack_int* nrhs, float* a, lapack_int* lda, + lapack_int* ipiv, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dgesv( lapack_int* n, lapack_int* nrhs, double* a, lapack_int* lda, + lapack_int* ipiv, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cgesv( lapack_int* n, lapack_int* nrhs, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zgesv( lapack_int* n, lapack_int* nrhs, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dsgesv( lapack_int* n, lapack_int* nrhs, double* a, lapack_int* lda, + lapack_int* ipiv, double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* work, float* swork, + lapack_int* iter, lapack_int *info ); +void LAPACK_zcgesv( lapack_int* n, lapack_int* nrhs, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + lapack_complex_double* work, lapack_complex_float* swork, + double* rwork, lapack_int* iter, lapack_int *info ); +void LAPACK_sgesvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgesvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int* ldb, double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgesvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zgesvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_dgesvxx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int* ldb, double* x, lapack_int* ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int* n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int* nparams, double* params, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_sgesvxx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_zgesvxx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cgesvxx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* r, float* c, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sgbsv( lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, float* ab, lapack_int* ldab, + lapack_int* ipiv, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dgbsv( lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, double* ab, lapack_int* ldab, + lapack_int* ipiv, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cgbsv( lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, lapack_complex_float* ab, lapack_int* ldab, + lapack_int* ipiv, lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zgbsv( lapack_int* n, lapack_int* kl, lapack_int* ku, + lapack_int* nrhs, lapack_complex_double* ab, + lapack_int* ldab, lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_sgbsvx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, float* ab, + lapack_int* ldab, float* afb, lapack_int* ldafb, + lapack_int* ipiv, char* equed, float* r, float* c, float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgbsvx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, double* ab, + lapack_int* ldab, double* afb, lapack_int* ldafb, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int* ldb, double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgbsvx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, lapack_complex_float* ab, + lapack_int* ldab, lapack_complex_float* afb, + lapack_int* ldafb, lapack_int* ipiv, char* equed, float* r, + float* c, lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zgbsvx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, lapack_complex_double* ab, + lapack_int* ldab, lapack_complex_double* afb, + lapack_int* ldafb, lapack_int* ipiv, char* equed, double* r, + double* c, lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_dgbsvxx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, double* ab, + lapack_int* ldab, double* afb, lapack_int* ldafb, + lapack_int* ipiv, char* equed, double* r, double* c, + double* b, lapack_int* ldb, double* x, lapack_int* ldx, + double* rcond, double* rpvgrw, double* berr, + lapack_int* n_err_bnds, double* err_bnds_norm, + double* err_bnds_comp, lapack_int* nparams, double* params, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_sgbsvxx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, float* ab, + lapack_int* ldab, float* afb, lapack_int* ldafb, + lapack_int* ipiv, char* equed, float* r, float* c, + float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* rcond, float* rpvgrw, float* berr, + lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_zgbsvxx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, + lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* afb, lapack_int* ldafb, + lapack_int* ipiv, char* equed, double* r, double* c, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cgbsvxx( char* fact, char* trans, lapack_int* n, lapack_int* kl, + lapack_int* ku, lapack_int* nrhs, lapack_complex_float* ab, + lapack_int* ldab, lapack_complex_float* afb, + lapack_int* ldafb, lapack_int* ipiv, char* equed, float* r, + float* c, lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sgtsv( lapack_int* n, lapack_int* nrhs, float* dl, float* d, + float* du, float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_dgtsv( lapack_int* n, lapack_int* nrhs, double* dl, double* d, + double* du, double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_cgtsv( lapack_int* n, lapack_int* nrhs, lapack_complex_float* dl, + lapack_complex_float* d, lapack_complex_float* du, + lapack_complex_float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_zgtsv( lapack_int* n, lapack_int* nrhs, lapack_complex_double* dl, + lapack_complex_double* d, lapack_complex_double* du, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_sgtsvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + const float* dl, const float* d, const float* du, + float* dlf, float* df, float* duf, float* du2, + lapack_int* ipiv, const float* b, lapack_int* ldb, float* x, + lapack_int* ldx, float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dgtsvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + const double* dl, const double* d, const double* du, + double* dlf, double* df, double* duf, double* du2, + lapack_int* ipiv, const double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* rcond, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cgtsvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* dl, + const lapack_complex_float* d, + const lapack_complex_float* du, lapack_complex_float* dlf, + lapack_complex_float* df, lapack_complex_float* duf, + lapack_complex_float* du2, lapack_int* ipiv, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zgtsvx( char* fact, char* trans, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* dl, + const lapack_complex_double* d, + const lapack_complex_double* du, lapack_complex_double* dlf, + lapack_complex_double* df, lapack_complex_double* duf, + lapack_complex_double* du2, lapack_int* ipiv, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_sposv( char* uplo, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dposv( char* uplo, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cposv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_zposv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dsposv( char* uplo, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* work, float* swork, + lapack_int* iter, lapack_int *info ); +void LAPACK_zcposv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, + lapack_complex_double* work, lapack_complex_float* swork, + double* rwork, lapack_int* iter, lapack_int *info ); +void LAPACK_sposvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* af, lapack_int* ldaf, + char* equed, float* s, float* b, lapack_int* ldb, float* x, + lapack_int* ldx, float* rcond, float* ferr, float* berr, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dposvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* af, lapack_int* ldaf, + char* equed, double* s, double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* rcond, double* ferr, + double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cposvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, char* equed, + float* s, lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zposvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, char* equed, + double* s, lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_dposvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* af, lapack_int* ldaf, + char* equed, double* s, double* b, lapack_int* ldb, + double* x, lapack_int* ldx, double* rcond, double* rpvgrw, + double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_sposvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* af, lapack_int* ldaf, + char* equed, float* s, float* b, lapack_int* ldb, float* x, + lapack_int* ldx, float* rcond, float* rpvgrw, float* berr, + lapack_int* n_err_bnds, float* err_bnds_norm, + float* err_bnds_comp, lapack_int* nparams, float* params, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_zposvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, char* equed, + double* s, lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_cposvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, char* equed, + float* s, lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sppsv( char* uplo, lapack_int* n, lapack_int* nrhs, float* ap, + float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_dppsv( char* uplo, lapack_int* n, lapack_int* nrhs, double* ap, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_cppsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* ap, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zppsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* ap, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_sppsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + float* ap, float* afp, char* equed, float* s, float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dppsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + double* ap, double* afp, char* equed, double* s, double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cppsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* ap, lapack_complex_float* afp, + char* equed, float* s, lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zppsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* ap, lapack_complex_double* afp, + char* equed, double* s, lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_spbsv( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + float* ab, lapack_int* ldab, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dpbsv( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + double* ab, lapack_int* ldab, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cpbsv( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_zpbsv( char* uplo, lapack_int* n, lapack_int* kd, lapack_int* nrhs, + lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_spbsvx( char* fact, char* uplo, lapack_int* n, lapack_int* kd, + lapack_int* nrhs, float* ab, lapack_int* ldab, float* afb, + lapack_int* ldafb, char* equed, float* s, float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dpbsvx( char* fact, char* uplo, lapack_int* n, lapack_int* kd, + lapack_int* nrhs, double* ab, lapack_int* ldab, double* afb, + lapack_int* ldafb, char* equed, double* s, double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cpbsvx( char* fact, char* uplo, lapack_int* n, lapack_int* kd, + lapack_int* nrhs, lapack_complex_float* ab, + lapack_int* ldab, lapack_complex_float* afb, + lapack_int* ldafb, char* equed, float* s, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zpbsvx( char* fact, char* uplo, lapack_int* n, lapack_int* kd, + lapack_int* nrhs, lapack_complex_double* ab, + lapack_int* ldab, lapack_complex_double* afb, + lapack_int* ldafb, char* equed, double* s, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_sptsv( lapack_int* n, lapack_int* nrhs, float* d, float* e, + float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_dptsv( lapack_int* n, lapack_int* nrhs, double* d, double* e, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_cptsv( lapack_int* n, lapack_int* nrhs, float* d, + lapack_complex_float* e, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zptsv( lapack_int* n, lapack_int* nrhs, double* d, + lapack_complex_double* e, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_sptsvx( char* fact, lapack_int* n, lapack_int* nrhs, const float* d, + const float* e, float* df, float* ef, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int *info ); +void LAPACK_dptsvx( char* fact, lapack_int* n, lapack_int* nrhs, + const double* d, const double* e, double* df, double* ef, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* rcond, double* ferr, double* berr, + double* work, lapack_int *info ); +void LAPACK_cptsvx( char* fact, lapack_int* n, lapack_int* nrhs, const float* d, + const lapack_complex_float* e, float* df, + lapack_complex_float* ef, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zptsvx( char* fact, lapack_int* n, lapack_int* nrhs, + const double* d, const lapack_complex_double* e, double* df, + lapack_complex_double* ef, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_ssysv( char* uplo, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, lapack_int* ipiv, float* b, lapack_int* ldb, + float* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_dsysv( char* uplo, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, lapack_int* ipiv, double* b, + lapack_int* ldb, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_csysv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zsysv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ssysvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const float* a, lapack_int* lda, float* af, + lapack_int* ldaf, lapack_int* ipiv, const float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* ferr, float* berr, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dsysvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, double* af, + lapack_int* ldaf, lapack_int* ipiv, const double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* rcond, + double* ferr, double* berr, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_csysvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zsysvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_dsysvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* s, double* b, + lapack_int* ldb, double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ssysvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* s, float* b, + lapack_int* ldb, float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zsysvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_csysvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_chesv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zhesv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_chesvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zhesvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_zhesvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, double* s, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* x, lapack_int* ldx, double* rcond, + double* rpvgrw, double* berr, lapack_int* n_err_bnds, + double* err_bnds_norm, double* err_bnds_comp, + lapack_int* nparams, double* params, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_chesvxx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* af, lapack_int* ldaf, + lapack_int* ipiv, char* equed, float* s, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* x, lapack_int* ldx, float* rcond, + float* rpvgrw, float* berr, lapack_int* n_err_bnds, + float* err_bnds_norm, float* err_bnds_comp, + lapack_int* nparams, float* params, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_sspsv( char* uplo, lapack_int* n, lapack_int* nrhs, float* ap, + lapack_int* ipiv, float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dspsv( char* uplo, lapack_int* n, lapack_int* nrhs, double* ap, + lapack_int* ipiv, double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_cspsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* ap, lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_zspsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* ap, lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_sspsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const float* ap, float* afp, lapack_int* ipiv, + const float* b, lapack_int* ldb, float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, float* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dspsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const double* ap, double* afp, lapack_int* ipiv, + const double* b, lapack_int* ldb, double* x, + lapack_int* ldx, double* rcond, double* ferr, double* berr, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cspsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, lapack_complex_float* afp, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zspsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, lapack_complex_double* afp, + lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_chpsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* ap, lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_zhpsv( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* ap, lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_chpsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* ap, lapack_complex_float* afp, + lapack_int* ipiv, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* x, lapack_int* ldx, + float* rcond, float* ferr, float* berr, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zhpsvx( char* fact, char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* ap, lapack_complex_double* afp, + lapack_int* ipiv, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* x, lapack_int* ldx, + double* rcond, double* ferr, double* berr, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sgeqrf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgeqrf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgeqrf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgeqrf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgeqpf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + lapack_int* jpvt, float* tau, float* work, + lapack_int *info ); +void LAPACK_dgeqpf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + lapack_int* jpvt, double* tau, double* work, + lapack_int *info ); +void LAPACK_cgeqpf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* jpvt, + lapack_complex_float* tau, lapack_complex_float* work, + float* rwork, lapack_int *info ); +void LAPACK_zgeqpf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* jpvt, + lapack_complex_double* tau, lapack_complex_double* work, + double* rwork, lapack_int *info ); +void LAPACK_sgeqp3( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + lapack_int* jpvt, float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dgeqp3( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + lapack_int* jpvt, double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgeqp3( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* jpvt, + lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int *info ); +void LAPACK_zgeqp3( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* jpvt, + lapack_complex_double* tau, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int *info ); +void LAPACK_sorgqr( lapack_int* m, lapack_int* n, lapack_int* k, float* a, + lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorgqr( lapack_int* m, lapack_int* n, lapack_int* k, double* a, + lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sormqr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const float* a, lapack_int* lda, + const float* tau, float* c, lapack_int* ldc, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dormqr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const double* a, lapack_int* lda, + const double* tau, double* c, lapack_int* ldc, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cungqr( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zungqr( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmqr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmqr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgelqf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgelqf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgelqf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgelqf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sorglq( lapack_int* m, lapack_int* n, lapack_int* k, float* a, + lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorglq( lapack_int* m, lapack_int* n, lapack_int* k, double* a, + lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sormlq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const float* a, lapack_int* lda, + const float* tau, float* c, lapack_int* ldc, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dormlq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const double* a, lapack_int* lda, + const double* tau, double* c, lapack_int* ldc, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cunglq( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zunglq( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmlq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmlq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgeqlf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgeqlf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgeqlf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgeqlf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sorgql( lapack_int* m, lapack_int* n, lapack_int* k, float* a, + lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorgql( lapack_int* m, lapack_int* n, lapack_int* k, double* a, + lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cungql( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zungql( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sormql( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const float* a, lapack_int* lda, + const float* tau, float* c, lapack_int* ldc, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dormql( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const double* a, lapack_int* lda, + const double* tau, double* c, lapack_int* ldc, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cunmql( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmql( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgerqf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgerqf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgerqf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgerqf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sorgrq( lapack_int* m, lapack_int* n, lapack_int* k, float* a, + lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorgrq( lapack_int* m, lapack_int* n, lapack_int* k, double* a, + lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cungrq( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zungrq( lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sormrq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const float* a, lapack_int* lda, + const float* tau, float* c, lapack_int* ldc, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dormrq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const double* a, lapack_int* lda, + const double* tau, double* c, lapack_int* ldc, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cunmrq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmrq( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_stzrzf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dtzrzf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ctzrzf( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ztzrzf( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sormrz( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, const float* a, + lapack_int* lda, const float* tau, float* c, + lapack_int* ldc, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dormrz( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, const double* a, + lapack_int* lda, const double* tau, double* c, + lapack_int* ldc, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmrz( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmrz( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, lapack_complex_double* c, + lapack_int* ldc, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sggqrf( lapack_int* n, lapack_int* m, lapack_int* p, float* a, + lapack_int* lda, float* taua, float* b, lapack_int* ldb, + float* taub, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dggqrf( lapack_int* n, lapack_int* m, lapack_int* p, double* a, + lapack_int* lda, double* taua, double* b, lapack_int* ldb, + double* taub, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cggqrf( lapack_int* n, lapack_int* m, lapack_int* p, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* taua, lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* taub, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zggqrf( lapack_int* n, lapack_int* m, lapack_int* p, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* taua, lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* taub, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sggrqf( lapack_int* m, lapack_int* p, lapack_int* n, float* a, + lapack_int* lda, float* taua, float* b, lapack_int* ldb, + float* taub, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dggrqf( lapack_int* m, lapack_int* p, lapack_int* n, double* a, + lapack_int* lda, double* taua, double* b, lapack_int* ldb, + double* taub, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cggrqf( lapack_int* m, lapack_int* p, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* taua, lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* taub, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zggrqf( lapack_int* m, lapack_int* p, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* taua, lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* taub, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgebrd( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* d, float* e, float* tauq, float* taup, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dgebrd( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* d, double* e, double* tauq, double* taup, + double* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_cgebrd( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, float* d, float* e, + lapack_complex_float* tauq, lapack_complex_float* taup, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgebrd( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, double* d, double* e, + lapack_complex_double* tauq, lapack_complex_double* taup, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgbbrd( char* vect, lapack_int* m, lapack_int* n, lapack_int* ncc, + lapack_int* kl, lapack_int* ku, float* ab, lapack_int* ldab, + float* d, float* e, float* q, lapack_int* ldq, float* pt, + lapack_int* ldpt, float* c, lapack_int* ldc, float* work, + lapack_int *info ); +void LAPACK_dgbbrd( char* vect, lapack_int* m, lapack_int* n, lapack_int* ncc, + lapack_int* kl, lapack_int* ku, double* ab, + lapack_int* ldab, double* d, double* e, double* q, + lapack_int* ldq, double* pt, lapack_int* ldpt, double* c, + lapack_int* ldc, double* work, lapack_int *info ); +void LAPACK_cgbbrd( char* vect, lapack_int* m, lapack_int* n, lapack_int* ncc, + lapack_int* kl, lapack_int* ku, lapack_complex_float* ab, + lapack_int* ldab, float* d, float* e, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* pt, lapack_int* ldpt, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zgbbrd( char* vect, lapack_int* m, lapack_int* n, lapack_int* ncc, + lapack_int* kl, lapack_int* ku, lapack_complex_double* ab, + lapack_int* ldab, double* d, double* e, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* pt, lapack_int* ldpt, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sorgbr( char* vect, lapack_int* m, lapack_int* n, lapack_int* k, + float* a, lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorgbr( char* vect, lapack_int* m, lapack_int* n, lapack_int* k, + double* a, lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sormbr( char* vect, char* side, char* trans, lapack_int* m, + lapack_int* n, lapack_int* k, const float* a, + lapack_int* lda, const float* tau, float* c, + lapack_int* ldc, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dormbr( char* vect, char* side, char* trans, lapack_int* m, + lapack_int* n, lapack_int* k, const double* a, + lapack_int* lda, const double* tau, double* c, + lapack_int* ldc, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cungbr( char* vect, lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zungbr( char* vect, lapack_int* m, lapack_int* n, lapack_int* k, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmbr( char* vect, char* side, char* trans, lapack_int* m, + lapack_int* n, lapack_int* k, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmbr( char* vect, char* side, char* trans, lapack_int* m, + lapack_int* n, lapack_int* k, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, lapack_complex_double* c, + lapack_int* ldc, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sbdsqr( char* uplo, lapack_int* n, lapack_int* ncvt, + lapack_int* nru, lapack_int* ncc, float* d, float* e, + float* vt, lapack_int* ldvt, float* u, lapack_int* ldu, + float* c, lapack_int* ldc, float* work, lapack_int *info ); +void LAPACK_dbdsqr( char* uplo, lapack_int* n, lapack_int* ncvt, + lapack_int* nru, lapack_int* ncc, double* d, double* e, + double* vt, lapack_int* ldvt, double* u, lapack_int* ldu, + double* c, lapack_int* ldc, double* work, + lapack_int *info ); +void LAPACK_cbdsqr( char* uplo, lapack_int* n, lapack_int* ncvt, + lapack_int* nru, lapack_int* ncc, float* d, float* e, + lapack_complex_float* vt, lapack_int* ldvt, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* c, lapack_int* ldc, float* work, + lapack_int *info ); +void LAPACK_zbdsqr( char* uplo, lapack_int* n, lapack_int* ncvt, + lapack_int* nru, lapack_int* ncc, double* d, double* e, + lapack_complex_double* vt, lapack_int* ldvt, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* c, lapack_int* ldc, double* work, + lapack_int *info ); +void LAPACK_sbdsdc( char* uplo, char* compq, lapack_int* n, float* d, float* e, + float* u, lapack_int* ldu, float* vt, lapack_int* ldvt, + float* q, lapack_int* iq, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dbdsdc( char* uplo, char* compq, lapack_int* n, double* d, + double* e, double* u, lapack_int* ldu, double* vt, + lapack_int* ldvt, double* q, lapack_int* iq, double* work, + lapack_int* iwork, lapack_int *info ); +void LAPACK_sbdsvdx( char* uplo, char* jobz, char* range, + lapack_int* n, float* d, float* e, + lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, + float* s, float* z, lapack_int* ldz, + float* work, lapack_int *iwork, lapack_int *info ); +void LAPACK_dbdsvdx( char* uplo, char* jobz, char* range, + lapack_int* n, double* d, double* e, + lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, + double* s, double* z, lapack_int* ldz, + double* work, lapack_int *iwork, lapack_int *info ); +void LAPACK_ssytrd( char* uplo, lapack_int* n, float* a, lapack_int* lda, + float* d, float* e, float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dsytrd( char* uplo, lapack_int* n, double* a, lapack_int* lda, + double* d, double* e, double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sorgtr( char* uplo, lapack_int* n, float* a, lapack_int* lda, + const float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dorgtr( char* uplo, lapack_int* n, double* a, lapack_int* lda, + const double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sormtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const float* a, lapack_int* lda, + const float* tau, float* c, lapack_int* ldc, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dormtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const double* a, lapack_int* lda, + const double* tau, double* c, lapack_int* ldc, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_chetrd( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, float* d, float* e, + lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zhetrd( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, double* d, double* e, + lapack_complex_double* tau, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cungtr( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zungtr( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zunmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ssptrd( char* uplo, lapack_int* n, float* ap, float* d, float* e, + float* tau, lapack_int *info ); +void LAPACK_dsptrd( char* uplo, lapack_int* n, double* ap, double* d, double* e, + double* tau, lapack_int *info ); +void LAPACK_sopgtr( char* uplo, lapack_int* n, const float* ap, + const float* tau, float* q, lapack_int* ldq, float* work, + lapack_int *info ); +void LAPACK_dopgtr( char* uplo, lapack_int* n, const double* ap, + const double* tau, double* q, lapack_int* ldq, double* work, + lapack_int *info ); +void LAPACK_sopmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const float* ap, const float* tau, float* c, + lapack_int* ldc, float* work, lapack_int *info ); +void LAPACK_dopmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const double* ap, const double* tau, + double* c, lapack_int* ldc, double* work, + lapack_int *info ); +void LAPACK_chptrd( char* uplo, lapack_int* n, lapack_complex_float* ap, + float* d, float* e, lapack_complex_float* tau, + lapack_int *info ); +void LAPACK_zhptrd( char* uplo, lapack_int* n, lapack_complex_double* ap, + double* d, double* e, lapack_complex_double* tau, + lapack_int *info ); +void LAPACK_cupgtr( char* uplo, lapack_int* n, const lapack_complex_float* ap, + const lapack_complex_float* tau, lapack_complex_float* q, + lapack_int* ldq, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zupgtr( char* uplo, lapack_int* n, const lapack_complex_double* ap, + const lapack_complex_double* tau, lapack_complex_double* q, + lapack_int* ldq, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_cupmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const lapack_complex_float* ap, + const lapack_complex_float* tau, lapack_complex_float* c, + lapack_int* ldc, lapack_complex_float* work, + lapack_int *info ); +void LAPACK_zupmtr( char* side, char* uplo, char* trans, lapack_int* m, + lapack_int* n, const lapack_complex_double* ap, + const lapack_complex_double* tau, lapack_complex_double* c, + lapack_int* ldc, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_ssbtrd( char* vect, char* uplo, lapack_int* n, lapack_int* kd, + float* ab, lapack_int* ldab, float* d, float* e, float* q, + lapack_int* ldq, float* work, lapack_int *info ); +void LAPACK_dsbtrd( char* vect, char* uplo, lapack_int* n, lapack_int* kd, + double* ab, lapack_int* ldab, double* d, double* e, + double* q, lapack_int* ldq, double* work, + lapack_int *info ); +void LAPACK_chbtrd( char* vect, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_float* ab, lapack_int* ldab, float* d, + float* e, lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zhbtrd( char* vect, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_double* ab, lapack_int* ldab, double* d, + double* e, lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_ssterf( lapack_int* n, float* d, float* e, lapack_int *info ); +void LAPACK_dsterf( lapack_int* n, double* d, double* e, lapack_int *info ); +void LAPACK_ssteqr( char* compz, lapack_int* n, float* d, float* e, float* z, + lapack_int* ldz, float* work, lapack_int *info ); +void LAPACK_dsteqr( char* compz, lapack_int* n, double* d, double* e, double* z, + lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_csteqr( char* compz, lapack_int* n, float* d, float* e, + lapack_complex_float* z, lapack_int* ldz, float* work, + lapack_int *info ); +void LAPACK_zsteqr( char* compz, lapack_int* n, double* d, double* e, + lapack_complex_double* z, lapack_int* ldz, double* work, + lapack_int *info ); +void LAPACK_sstemr( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + lapack_int* m, float* w, float* z, lapack_int* ldz, + lapack_int* nzc, lapack_int* isuppz, lapack_logical* tryrac, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_dstemr( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, lapack_int* m, double* w, double* z, + lapack_int* ldz, lapack_int* nzc, lapack_int* isuppz, + lapack_logical* tryrac, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_cstemr( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_int* nzc, lapack_int* isuppz, + lapack_logical* tryrac, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_zstemr( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int* ldz, lapack_int* nzc, + lapack_int* isuppz, lapack_logical* tryrac, double* work, + lapack_int* lwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_sstedc( char* compz, lapack_int* n, float* d, float* e, float* z, + lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dstedc( char* compz, lapack_int* n, double* d, double* e, double* z, + lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_cstedc( char* compz, lapack_int* n, float* d, float* e, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zstedc( char* compz, lapack_int* n, double* d, double* e, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_sstegr( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, float* z, + lapack_int* ldz, lapack_int* isuppz, float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_dstegr( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, lapack_int* isuppz, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_cstegr( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_int* isuppz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_zstegr( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_int* isuppz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_spteqr( char* compz, lapack_int* n, float* d, float* e, float* z, + lapack_int* ldz, float* work, lapack_int *info ); +void LAPACK_dpteqr( char* compz, lapack_int* n, double* d, double* e, double* z, + lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_cpteqr( char* compz, lapack_int* n, float* d, float* e, + lapack_complex_float* z, lapack_int* ldz, float* work, + lapack_int *info ); +void LAPACK_zpteqr( char* compz, lapack_int* n, double* d, double* e, + lapack_complex_double* z, lapack_int* ldz, double* work, + lapack_int *info ); +void LAPACK_sstebz( char* range, char* order, lapack_int* n, float* vl, + float* vu, lapack_int* il, lapack_int* iu, float* abstol, + const float* d, const float* e, lapack_int* m, + lapack_int* nsplit, float* w, lapack_int* iblock, + lapack_int* isplit, float* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dstebz( char* range, char* order, lapack_int* n, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + const double* d, const double* e, lapack_int* m, + lapack_int* nsplit, double* w, lapack_int* iblock, + lapack_int* isplit, double* work, lapack_int* iwork, + lapack_int *info ); +void LAPACK_sstein( lapack_int* n, const float* d, const float* e, + lapack_int* m, const float* w, const lapack_int* iblock, + const lapack_int* isplit, float* z, lapack_int* ldz, + float* work, lapack_int* iwork, lapack_int* ifailv, + lapack_int *info ); +void LAPACK_dstein( lapack_int* n, const double* d, const double* e, + lapack_int* m, const double* w, const lapack_int* iblock, + const lapack_int* isplit, double* z, lapack_int* ldz, + double* work, lapack_int* iwork, lapack_int* ifailv, + lapack_int *info ); +void LAPACK_cstein( lapack_int* n, const float* d, const float* e, + lapack_int* m, const float* w, const lapack_int* iblock, + const lapack_int* isplit, lapack_complex_float* z, + lapack_int* ldz, float* work, lapack_int* iwork, + lapack_int* ifailv, lapack_int *info ); +void LAPACK_zstein( lapack_int* n, const double* d, const double* e, + lapack_int* m, const double* w, const lapack_int* iblock, + const lapack_int* isplit, lapack_complex_double* z, + lapack_int* ldz, double* work, lapack_int* iwork, + lapack_int* ifailv, lapack_int *info ); +void LAPACK_sdisna( char* job, lapack_int* m, lapack_int* n, const float* d, + float* sep, lapack_int *info ); +void LAPACK_ddisna( char* job, lapack_int* m, lapack_int* n, const double* d, + double* sep, lapack_int *info ); +void LAPACK_ssygst( lapack_int* itype, char* uplo, lapack_int* n, float* a, + lapack_int* lda, const float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_dsygst( lapack_int* itype, char* uplo, lapack_int* n, double* a, + lapack_int* lda, const double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_chegst( lapack_int* itype, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_zhegst( lapack_int* itype, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* b, lapack_int* ldb, + lapack_int *info ); +void LAPACK_sspgst( lapack_int* itype, char* uplo, lapack_int* n, float* ap, + const float* bp, lapack_int *info ); +void LAPACK_dspgst( lapack_int* itype, char* uplo, lapack_int* n, double* ap, + const double* bp, lapack_int *info ); +void LAPACK_chpgst( lapack_int* itype, char* uplo, lapack_int* n, + lapack_complex_float* ap, const lapack_complex_float* bp, + lapack_int *info ); +void LAPACK_zhpgst( lapack_int* itype, char* uplo, lapack_int* n, + lapack_complex_double* ap, const lapack_complex_double* bp, + lapack_int *info ); +void LAPACK_ssbgst( char* vect, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, float* ab, lapack_int* ldab, + const float* bb, lapack_int* ldbb, float* x, + lapack_int* ldx, float* work, lapack_int *info ); +void LAPACK_dsbgst( char* vect, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, double* ab, lapack_int* ldab, + const double* bb, lapack_int* ldbb, double* x, + lapack_int* ldx, double* work, lapack_int *info ); +void LAPACK_chbgst( char* vect, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_float* ab, lapack_int* ldab, + const lapack_complex_float* bb, lapack_int* ldbb, + lapack_complex_float* x, lapack_int* ldx, + lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zhbgst( char* vect, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_double* ab, lapack_int* ldab, + const lapack_complex_double* bb, lapack_int* ldbb, + lapack_complex_double* x, lapack_int* ldx, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_spbstf( char* uplo, lapack_int* n, lapack_int* kb, float* bb, + lapack_int* ldbb, lapack_int *info ); +void LAPACK_dpbstf( char* uplo, lapack_int* n, lapack_int* kb, double* bb, + lapack_int* ldbb, lapack_int *info ); +void LAPACK_cpbstf( char* uplo, lapack_int* n, lapack_int* kb, + lapack_complex_float* bb, lapack_int* ldbb, + lapack_int *info ); +void LAPACK_zpbstf( char* uplo, lapack_int* n, lapack_int* kb, + lapack_complex_double* bb, lapack_int* ldbb, + lapack_int *info ); +void LAPACK_sgehrd( lapack_int* n, lapack_int* ilo, lapack_int* ihi, float* a, + lapack_int* lda, float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgehrd( lapack_int* n, lapack_int* ilo, lapack_int* ihi, double* a, + lapack_int* lda, double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgehrd( lapack_int* n, lapack_int* ilo, lapack_int* ihi, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zgehrd( lapack_int* n, lapack_int* ilo, lapack_int* ihi, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* tau, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sorghr( lapack_int* n, lapack_int* ilo, lapack_int* ihi, float* a, + lapack_int* lda, const float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dorghr( lapack_int* n, lapack_int* ilo, lapack_int* ihi, double* a, + lapack_int* lda, const double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sormhr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, const float* a, + lapack_int* lda, const float* tau, float* c, + lapack_int* ldc, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dormhr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, const double* a, + lapack_int* lda, const double* tau, double* c, + lapack_int* ldc, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunghr( lapack_int* n, lapack_int* ilo, lapack_int* ihi, + lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zunghr( lapack_int* n, lapack_int* ilo, lapack_int* ihi, + lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cunmhr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* tau, lapack_complex_float* c, + lapack_int* ldc, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zunmhr( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* tau, lapack_complex_double* c, + lapack_int* ldc, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sgebal( char* job, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ilo, lapack_int* ihi, float* scale, + lapack_int *info ); +void LAPACK_dgebal( char* job, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ilo, lapack_int* ihi, double* scale, + lapack_int *info ); +void LAPACK_cgebal( char* job, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ilo, lapack_int* ihi, + float* scale, lapack_int *info ); +void LAPACK_zgebal( char* job, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ilo, lapack_int* ihi, + double* scale, lapack_int *info ); +void LAPACK_sgebak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const float* scale, lapack_int* m, + float* v, lapack_int* ldv, lapack_int *info ); +void LAPACK_dgebak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const double* scale, lapack_int* m, + double* v, lapack_int* ldv, lapack_int *info ); +void LAPACK_cgebak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const float* scale, lapack_int* m, + lapack_complex_float* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_zgebak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const double* scale, lapack_int* m, + lapack_complex_double* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_shseqr( char* job, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, float* h, lapack_int* ldh, float* wr, + float* wi, float* z, lapack_int* ldz, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dhseqr( char* job, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, double* h, lapack_int* ldh, double* wr, + double* wi, double* z, lapack_int* ldz, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_chseqr( char* job, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, lapack_complex_float* h, lapack_int* ldh, + lapack_complex_float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zhseqr( char* job, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, lapack_complex_double* h, lapack_int* ldh, + lapack_complex_double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_shsein( char* job, char* eigsrc, char* initv, + lapack_logical* select, lapack_int* n, const float* h, + lapack_int* ldh, float* wr, const float* wi, float* vl, + lapack_int* ldvl, float* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, float* work, + lapack_int* ifaill, lapack_int* ifailr, lapack_int *info ); +void LAPACK_dhsein( char* job, char* eigsrc, char* initv, + lapack_logical* select, lapack_int* n, const double* h, + lapack_int* ldh, double* wr, const double* wi, double* vl, + lapack_int* ldvl, double* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, double* work, + lapack_int* ifaill, lapack_int* ifailr, lapack_int *info ); +void LAPACK_chsein( char* job, char* eigsrc, char* initv, + const lapack_logical* select, lapack_int* n, + const lapack_complex_float* h, lapack_int* ldh, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int* ldvl, lapack_complex_float* vr, + lapack_int* ldvr, lapack_int* mm, lapack_int* m, + lapack_complex_float* work, float* rwork, + lapack_int* ifaill, lapack_int* ifailr, lapack_int *info ); +void LAPACK_zhsein( char* job, char* eigsrc, char* initv, + const lapack_logical* select, lapack_int* n, + const lapack_complex_double* h, lapack_int* ldh, + lapack_complex_double* w, lapack_complex_double* vl, + lapack_int* ldvl, lapack_complex_double* vr, + lapack_int* ldvr, lapack_int* mm, lapack_int* m, + lapack_complex_double* work, double* rwork, + lapack_int* ifaill, lapack_int* ifailr, lapack_int *info ); +void LAPACK_strevc( char* side, char* howmny, lapack_logical* select, + lapack_int* n, const float* t, lapack_int* ldt, float* vl, + lapack_int* ldvl, float* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, float* work, + lapack_int *info ); +void LAPACK_dtrevc( char* side, char* howmny, lapack_logical* select, + lapack_int* n, const double* t, lapack_int* ldt, double* vl, + lapack_int* ldvl, double* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, double* work, + lapack_int *info ); +void LAPACK_ctrevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* vl, lapack_int* ldvl, + lapack_complex_float* vr, lapack_int* ldvr, lapack_int* mm, + lapack_int* m, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztrevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* vl, lapack_int* ldvl, + lapack_complex_double* vr, lapack_int* ldvr, lapack_int* mm, + lapack_int* m, lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_strsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const float* t, lapack_int* ldt, + const float* vl, lapack_int* ldvl, const float* vr, + lapack_int* ldvr, float* s, float* sep, lapack_int* mm, + lapack_int* m, float* work, lapack_int* ldwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dtrsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const double* t, lapack_int* ldt, + const double* vl, lapack_int* ldvl, const double* vr, + lapack_int* ldvr, double* s, double* sep, lapack_int* mm, + lapack_int* m, double* work, lapack_int* ldwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ctrsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_float* t, + lapack_int* ldt, const lapack_complex_float* vl, + lapack_int* ldvl, const lapack_complex_float* vr, + lapack_int* ldvr, float* s, float* sep, lapack_int* mm, + lapack_int* m, lapack_complex_float* work, + lapack_int* ldwork, float* rwork, lapack_int *info ); +void LAPACK_ztrsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_double* t, + lapack_int* ldt, const lapack_complex_double* vl, + lapack_int* ldvl, const lapack_complex_double* vr, + lapack_int* ldvr, double* s, double* sep, lapack_int* mm, + lapack_int* m, lapack_complex_double* work, + lapack_int* ldwork, double* rwork, lapack_int *info ); +void LAPACK_strexc( char* compq, lapack_int* n, float* t, lapack_int* ldt, + float* q, lapack_int* ldq, lapack_int* ifst, + lapack_int* ilst, float* work, lapack_int *info ); +void LAPACK_dtrexc( char* compq, lapack_int* n, double* t, lapack_int* ldt, + double* q, lapack_int* ldq, lapack_int* ifst, + lapack_int* ilst, double* work, lapack_int *info ); +void LAPACK_ctrexc( char* compq, lapack_int* n, lapack_complex_float* t, + lapack_int* ldt, lapack_complex_float* q, lapack_int* ldq, + lapack_int* ifst, lapack_int* ilst, lapack_int *info ); +void LAPACK_ztrexc( char* compq, lapack_int* n, lapack_complex_double* t, + lapack_int* ldt, lapack_complex_double* q, lapack_int* ldq, + lapack_int* ifst, lapack_int* ilst, lapack_int *info ); +void LAPACK_strsen( char* job, char* compq, const lapack_logical* select, + lapack_int* n, float* t, lapack_int* ldt, float* q, + lapack_int* ldq, float* wr, float* wi, lapack_int* m, + float* s, float* sep, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dtrsen( char* job, char* compq, const lapack_logical* select, + lapack_int* n, double* t, lapack_int* ldt, double* q, + lapack_int* ldq, double* wr, double* wi, lapack_int* m, + double* s, double* sep, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_ctrsen( char* job, char* compq, const lapack_logical* select, + lapack_int* n, lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* w, lapack_int* m, float* s, + float* sep, lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ztrsen( char* job, char* compq, const lapack_logical* select, + lapack_int* n, lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* w, lapack_int* m, double* s, + double* sep, lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_strsyl( char* trana, char* tranb, lapack_int* isgn, lapack_int* m, + lapack_int* n, const float* a, lapack_int* lda, + const float* b, lapack_int* ldb, float* c, lapack_int* ldc, + float* scale, lapack_int *info ); +void LAPACK_dtrsyl( char* trana, char* tranb, lapack_int* isgn, lapack_int* m, + lapack_int* n, const double* a, lapack_int* lda, + const double* b, lapack_int* ldb, double* c, + lapack_int* ldc, double* scale, lapack_int *info ); +void LAPACK_ctrsyl( char* trana, char* tranb, lapack_int* isgn, lapack_int* m, + lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* c, lapack_int* ldc, + float* scale, lapack_int *info ); +void LAPACK_ztrsyl( char* trana, char* tranb, lapack_int* isgn, lapack_int* m, + lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* c, lapack_int* ldc, + double* scale, lapack_int *info ); +void LAPACK_sgghrd( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* q, lapack_int* ldq, float* z, + lapack_int* ldz, lapack_int *info ); +void LAPACK_dgghrd( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* q, lapack_int* ldq, double* z, + lapack_int* ldz, lapack_int *info ); +void LAPACK_cgghrd( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* z, lapack_int* ldz, + lapack_int *info ); +void LAPACK_zgghrd( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* z, lapack_int* ldz, + lapack_int *info ); +void LAPACK_sgghd3( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* q, lapack_int* ldq, float* z, + lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgghd3( char* compq, char* compz, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* q, lapack_int* ldq, double* z, + lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgghd3( char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgghd3( char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sggbal( char* job, lapack_int* n, float* a, lapack_int* lda, + float* b, lapack_int* ldb, lapack_int* ilo, lapack_int* ihi, + float* lscale, float* rscale, float* work, + lapack_int *info ); +void LAPACK_dggbal( char* job, lapack_int* n, double* a, lapack_int* lda, + double* b, lapack_int* ldb, lapack_int* ilo, + lapack_int* ihi, double* lscale, double* rscale, + double* work, lapack_int *info ); +void LAPACK_cggbal( char* job, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* b, lapack_int* ldb, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale, float* work, lapack_int *info ); +void LAPACK_zggbal( char* job, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* b, lapack_int* ldb, + lapack_int* ilo, lapack_int* ihi, double* lscale, + double* rscale, double* work, lapack_int *info ); +void LAPACK_sggbak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const float* lscale, const float* rscale, + lapack_int* m, float* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_dggbak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const double* lscale, const double* rscale, + lapack_int* m, double* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_cggbak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const float* lscale, const float* rscale, + lapack_int* m, lapack_complex_float* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_zggbak( char* job, char* side, lapack_int* n, lapack_int* ilo, + lapack_int* ihi, const double* lscale, const double* rscale, + lapack_int* m, lapack_complex_double* v, lapack_int* ldv, + lapack_int *info ); +void LAPACK_shgeqz( char* job, char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, float* h, lapack_int* ldh, + float* t, lapack_int* ldt, float* alphar, float* alphai, + float* beta, float* q, lapack_int* ldq, float* z, + lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dhgeqz( char* job, char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, double* h, + lapack_int* ldh, double* t, lapack_int* ldt, double* alphar, + double* alphai, double* beta, double* q, lapack_int* ldq, + double* z, lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_chgeqz( char* job, char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, lapack_complex_float* h, + lapack_int* ldh, lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zhgeqz( char* job, char* compq, char* compz, lapack_int* n, + lapack_int* ilo, lapack_int* ihi, lapack_complex_double* h, + lapack_int* ldh, lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_stgevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, const float* s, lapack_int* lds, + const float* p, lapack_int* ldp, float* vl, + lapack_int* ldvl, float* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, float* work, + lapack_int *info ); +void LAPACK_dtgevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, const double* s, lapack_int* lds, + const double* p, lapack_int* ldp, double* vl, + lapack_int* ldvl, double* vr, lapack_int* ldvr, + lapack_int* mm, lapack_int* m, double* work, + lapack_int *info ); +void LAPACK_ctgevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_float* s, + lapack_int* lds, const lapack_complex_float* p, + lapack_int* ldp, lapack_complex_float* vl, lapack_int* ldvl, + lapack_complex_float* vr, lapack_int* ldvr, lapack_int* mm, + lapack_int* m, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_ztgevc( char* side, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_double* s, + lapack_int* lds, const lapack_complex_double* p, + lapack_int* ldp, lapack_complex_double* vl, + lapack_int* ldvl, lapack_complex_double* vr, + lapack_int* ldvr, lapack_int* mm, lapack_int* m, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_stgexc( lapack_logical* wantq, lapack_logical* wantz, lapack_int* n, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* q, lapack_int* ldq, float* z, lapack_int* ldz, + lapack_int* ifst, lapack_int* ilst, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dtgexc( lapack_logical* wantq, lapack_logical* wantz, lapack_int* n, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* q, lapack_int* ldq, double* z, lapack_int* ldz, + lapack_int* ifst, lapack_int* ilst, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_ctgexc( lapack_logical* wantq, lapack_logical* wantz, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* z, lapack_int* ldz, lapack_int* ifst, + lapack_int* ilst, lapack_int *info ); +void LAPACK_ztgexc( lapack_logical* wantq, lapack_logical* wantz, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* z, lapack_int* ldz, lapack_int* ifst, + lapack_int* ilst, lapack_int *info ); +void LAPACK_stgsen( lapack_int* ijob, lapack_logical* wantq, + lapack_logical* wantz, const lapack_logical* select, + lapack_int* n, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* alphar, float* alphai, float* beta, + float* q, lapack_int* ldq, float* z, lapack_int* ldz, + lapack_int* m, float* pl, float* pr, float* dif, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_dtgsen( lapack_int* ijob, lapack_logical* wantq, + lapack_logical* wantz, const lapack_logical* select, + lapack_int* n, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* alphar, double* alphai, + double* beta, double* q, lapack_int* ldq, double* z, + lapack_int* ldz, lapack_int* m, double* pl, double* pr, + double* dif, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_ctgsen( lapack_int* ijob, lapack_logical* wantq, + lapack_logical* wantz, const lapack_logical* select, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* z, lapack_int* ldz, lapack_int* m, + float* pl, float* pr, float* dif, + lapack_complex_float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_ztgsen( lapack_int* ijob, lapack_logical* wantq, + lapack_logical* wantz, const lapack_logical* select, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* z, lapack_int* ldz, lapack_int* m, + double* pl, double* pr, double* dif, + lapack_complex_double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_stgsyl( char* trans, lapack_int* ijob, lapack_int* m, lapack_int* n, + const float* a, lapack_int* lda, const float* b, + lapack_int* ldb, float* c, lapack_int* ldc, const float* d, + lapack_int* ldd, const float* e, lapack_int* lde, float* f, + lapack_int* ldf, float* scale, float* dif, float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_dtgsyl( char* trans, lapack_int* ijob, lapack_int* m, lapack_int* n, + const double* a, lapack_int* lda, const double* b, + lapack_int* ldb, double* c, lapack_int* ldc, + const double* d, lapack_int* ldd, const double* e, + lapack_int* lde, double* f, lapack_int* ldf, double* scale, + double* dif, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ctgsyl( char* trans, lapack_int* ijob, lapack_int* m, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, + const lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* c, lapack_int* ldc, + const lapack_complex_float* d, lapack_int* ldd, + const lapack_complex_float* e, lapack_int* lde, + lapack_complex_float* f, lapack_int* ldf, float* scale, + float* dif, lapack_complex_float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_ztgsyl( char* trans, lapack_int* ijob, lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, + const lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* c, lapack_int* ldc, + const lapack_complex_double* d, lapack_int* ldd, + const lapack_complex_double* e, lapack_int* lde, + lapack_complex_double* f, lapack_int* ldf, double* scale, + double* dif, lapack_complex_double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_stgsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const float* a, lapack_int* lda, + const float* b, lapack_int* ldb, const float* vl, + lapack_int* ldvl, const float* vr, lapack_int* ldvr, + float* s, float* dif, lapack_int* mm, lapack_int* m, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dtgsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const double* a, lapack_int* lda, + const double* b, lapack_int* ldb, const double* vl, + lapack_int* ldvl, const double* vr, lapack_int* ldvr, + double* s, double* dif, lapack_int* mm, lapack_int* m, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_ctgsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, const lapack_complex_float* b, + lapack_int* ldb, const lapack_complex_float* vl, + lapack_int* ldvl, const lapack_complex_float* vr, + lapack_int* ldvr, float* s, float* dif, lapack_int* mm, + lapack_int* m, lapack_complex_float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_ztgsna( char* job, char* howmny, const lapack_logical* select, + lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, const lapack_complex_double* b, + lapack_int* ldb, const lapack_complex_double* vl, + lapack_int* ldvl, const lapack_complex_double* vr, + lapack_int* ldvr, double* s, double* dif, lapack_int* mm, + lapack_int* m, lapack_complex_double* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_sggsvp( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, float* a, lapack_int* lda, + float* b, lapack_int* ldb, float* tola, float* tolb, + lapack_int* k, lapack_int* l, float* u, lapack_int* ldu, + float* v, lapack_int* ldv, float* q, lapack_int* ldq, + lapack_int* iwork, float* tau, float* work, + lapack_int *info ); +void LAPACK_dggsvp( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, double* a, lapack_int* lda, + double* b, lapack_int* ldb, double* tola, double* tolb, + lapack_int* k, lapack_int* l, double* u, lapack_int* ldu, + double* v, lapack_int* ldv, double* q, lapack_int* ldq, + lapack_int* iwork, double* tau, double* work, + lapack_int *info ); +void LAPACK_cggsvp( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* b, lapack_int* ldb, + float* tola, float* tolb, lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* q, lapack_int* ldq, lapack_int* iwork, + float* rwork, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zggsvp( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* b, lapack_int* ldb, + double* tola, double* tolb, lapack_int* k, lapack_int* l, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* q, lapack_int* ldq, + lapack_int* iwork, double* rwork, + lapack_complex_double* tau, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_sggsvp3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, float* a, lapack_int* lda, + float* b, lapack_int* ldb, float* tola, float* tolb, + lapack_int* k, lapack_int* l, float* u, lapack_int* ldu, + float* v, lapack_int* ldv, float* q, lapack_int* ldq, + lapack_int* iwork, float* tau, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dggsvp3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, double* a, lapack_int* lda, + double* b, lapack_int* ldb, double* tola, double* tolb, + lapack_int* k, lapack_int* l, double* u, lapack_int* ldu, + double* v, lapack_int* ldv, double* q, lapack_int* ldq, + lapack_int* iwork, double* tau, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cggsvp3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* b, lapack_int* ldb, + float* tola, float* tolb, lapack_int* k, lapack_int* l, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* q, lapack_int* ldq, lapack_int* iwork, + float* rwork, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zggsvp3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* b, lapack_int* ldb, + double* tola, double* tolb, lapack_int* k, lapack_int* l, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* q, lapack_int* ldq, + lapack_int* iwork, double* rwork, + lapack_complex_double* tau, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_stgsja( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_int* k, lapack_int* l, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* tola, float* tolb, float* alpha, float* beta, + float* u, lapack_int* ldu, float* v, lapack_int* ldv, + float* q, lapack_int* ldq, float* work, lapack_int* ncycle, + lapack_int *info ); +void LAPACK_dtgsja( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_int* k, lapack_int* l, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* tola, double* tolb, double* alpha, double* beta, + double* u, lapack_int* ldu, double* v, lapack_int* ldv, + double* q, lapack_int* ldq, double* work, + lapack_int* ncycle, lapack_int *info ); +void LAPACK_ctgsja( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* tola, + float* tolb, float* alpha, float* beta, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* work, lapack_int* ncycle, + lapack_int *info ); +void LAPACK_ztgsja( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* p, lapack_int* n, lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* tola, + double* tolb, double* alpha, double* beta, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* work, lapack_int* ncycle, + lapack_int *info ); +void LAPACK_sgels( char* trans, lapack_int* m, lapack_int* n, lapack_int* nrhs, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_dgels( char* trans, lapack_int* m, lapack_int* n, lapack_int* nrhs, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_cgels( char* trans, lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgels( char* trans, lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_sgelsy( lapack_int* m, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, float* b, lapack_int* ldb, + lapack_int* jpvt, float* rcond, lapack_int* rank, + float* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_dgelsy( lapack_int* m, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, double* b, lapack_int* ldb, + lapack_int* jpvt, double* rcond, lapack_int* rank, + double* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_cgelsy( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, lapack_int* jpvt, + float* rcond, lapack_int* rank, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int *info ); +void LAPACK_zgelsy( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, lapack_int* jpvt, + double* rcond, lapack_int* rank, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_sgelss( lapack_int* m, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* s, + float* rcond, lapack_int* rank, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dgelss( lapack_int* m, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* s, + double* rcond, lapack_int* rank, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgelss( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* s, + float* rcond, lapack_int* rank, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int *info ); +void LAPACK_zgelss( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* s, + double* rcond, lapack_int* rank, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_sgelsd( lapack_int* m, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* s, + float* rcond, lapack_int* rank, float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_dgelsd( lapack_int* m, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* s, + double* rcond, lapack_int* rank, double* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_cgelsd( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* s, + float* rcond, lapack_int* rank, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_zgelsd( lapack_int* m, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* s, + double* rcond, lapack_int* rank, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_sgglse( lapack_int* m, lapack_int* n, lapack_int* p, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* c, + float* d, float* x, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgglse( lapack_int* m, lapack_int* n, lapack_int* p, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* c, + double* d, double* x, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgglse( lapack_int* m, lapack_int* n, lapack_int* p, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* c, lapack_complex_float* d, + lapack_complex_float* x, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zgglse( lapack_int* m, lapack_int* n, lapack_int* p, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* c, lapack_complex_double* d, + lapack_complex_double* x, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sggglm( lapack_int* n, lapack_int* m, lapack_int* p, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* d, + float* x, float* y, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dggglm( lapack_int* n, lapack_int* m, lapack_int* p, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* d, + double* x, double* y, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cggglm( lapack_int* n, lapack_int* m, lapack_int* p, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* d, lapack_complex_float* x, + lapack_complex_float* y, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zggglm( lapack_int* n, lapack_int* m, lapack_int* p, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* d, lapack_complex_double* x, + lapack_complex_double* y, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_ssyev( char* jobz, char* uplo, lapack_int* n, float* a, + lapack_int* lda, float* w, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dsyev( char* jobz, char* uplo, lapack_int* n, double* a, + lapack_int* lda, double* w, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cheev( char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* w, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zheev( char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* w, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_ssyevd( char* jobz, char* uplo, lapack_int* n, float* a, + lapack_int* lda, float* w, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dsyevd( char* jobz, char* uplo, lapack_int* n, double* a, + lapack_int* lda, double* w, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_cheevd( char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* w, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zheevd( char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* w, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_ssyevx( char* jobz, char* range, char* uplo, lapack_int* n, + float* a, lapack_int* lda, float* vl, float* vu, + lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, float* z, lapack_int* ldz, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_dsyevx( char* jobz, char* range, char* uplo, lapack_int* n, + double* a, lapack_int* lda, double* vl, double* vu, + lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, double* z, lapack_int* ldz, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_cheevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* vl, + float* vu, lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_zheevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_ssyevr( char* jobz, char* range, char* uplo, lapack_int* n, + float* a, lapack_int* lda, float* vl, float* vu, + lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, float* z, lapack_int* ldz, + lapack_int* isuppz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dsyevr( char* jobz, char* range, char* uplo, lapack_int* n, + double* a, lapack_int* lda, double* vl, double* vu, + lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, double* z, lapack_int* ldz, + lapack_int* isuppz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_cheevr( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* vl, + float* vu, lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_int* isuppz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zheevr( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_int* isuppz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_sspev( char* jobz, char* uplo, lapack_int* n, float* ap, float* w, + float* z, lapack_int* ldz, float* work, lapack_int *info ); +void LAPACK_dspev( char* jobz, char* uplo, lapack_int* n, double* ap, double* w, + double* z, lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_chpev( char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* ap, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, float* rwork, + lapack_int *info ); +void LAPACK_zhpev( char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* ap, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sspevd( char* jobz, char* uplo, lapack_int* n, float* ap, float* w, + float* z, lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dspevd( char* jobz, char* uplo, lapack_int* n, double* ap, + double* w, double* z, lapack_int* ldz, double* work, + lapack_int* lwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_chpevd( char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* ap, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int* lrwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_zhpevd( char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* ap, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_sspevx( char* jobz, char* range, char* uplo, lapack_int* n, + float* ap, float* vl, float* vu, lapack_int* il, + lapack_int* iu, float* abstol, lapack_int* m, float* w, + float* z, lapack_int* ldz, float* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_dspevx( char* jobz, char* range, char* uplo, lapack_int* n, + double* ap, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, double* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_chpevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_float* ap, float* vl, float* vu, + lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_zhpevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_complex_double* ap, double* vl, double* vu, + lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_ssbev( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + float* ab, lapack_int* ldab, float* w, float* z, + lapack_int* ldz, float* work, lapack_int *info ); +void LAPACK_dsbev( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + double* ab, lapack_int* ldab, double* w, double* z, + lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_chbev( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_float* ab, lapack_int* ldab, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, float* rwork, lapack_int *info ); +void LAPACK_zhbev( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_double* ab, lapack_int* ldab, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_ssbevd( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + float* ab, lapack_int* ldab, float* w, float* z, + lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dsbevd( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + double* ab, lapack_int* ldab, double* w, double* z, + lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_chbevd( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_float* ab, lapack_int* ldab, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zhbevd( char* jobz, char* uplo, lapack_int* n, lapack_int* kd, + lapack_complex_double* ab, lapack_int* ldab, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_ssbevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* kd, float* ab, lapack_int* ldab, float* q, + lapack_int* ldq, float* vl, float* vu, lapack_int* il, + lapack_int* iu, float* abstol, lapack_int* m, float* w, + float* z, lapack_int* ldz, float* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_dsbevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* kd, double* ab, lapack_int* ldab, double* q, + lapack_int* ldq, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, double* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_chbevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* kd, lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* q, lapack_int* ldq, float* vl, + float* vu, lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_zhbevx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* kd, lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* q, lapack_int* ldq, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_sstev( char* jobz, lapack_int* n, float* d, float* e, float* z, + lapack_int* ldz, float* work, lapack_int *info ); +void LAPACK_dstev( char* jobz, lapack_int* n, double* d, double* e, double* z, + lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_sstevd( char* jobz, lapack_int* n, float* d, float* e, float* z, + lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_dstevd( char* jobz, lapack_int* n, double* d, double* e, double* z, + lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_sstevx( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, float* z, + lapack_int* ldz, float* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_dstevx( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, double* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_sstevr( char* jobz, char* range, lapack_int* n, float* d, float* e, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, float* z, + lapack_int* ldz, lapack_int* isuppz, float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_dstevr( char* jobz, char* range, lapack_int* n, double* d, + double* e, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, lapack_int* isuppz, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_sgees( char* jobvs, char* sort, LAPACK_S_SELECT2 select, + lapack_int* n, float* a, lapack_int* lda, lapack_int* sdim, + float* wr, float* wi, float* vs, lapack_int* ldvs, + float* work, lapack_int* lwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_dgees( char* jobvs, char* sort, LAPACK_D_SELECT2 select, + lapack_int* n, double* a, lapack_int* lda, lapack_int* sdim, + double* wr, double* wi, double* vs, lapack_int* ldvs, + double* work, lapack_int* lwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_cgees( char* jobvs, char* sort, LAPACK_C_SELECT1 select, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_int* sdim, lapack_complex_float* w, + lapack_complex_float* vs, lapack_int* ldvs, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_zgees( char* jobvs, char* sort, LAPACK_Z_SELECT1 select, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_int* sdim, lapack_complex_double* w, + lapack_complex_double* vs, lapack_int* ldvs, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_logical* bwork, lapack_int *info ); +void LAPACK_sgeesx( char* jobvs, char* sort, LAPACK_S_SELECT2 select, + char* sense, lapack_int* n, float* a, lapack_int* lda, + lapack_int* sdim, float* wr, float* wi, float* vs, + lapack_int* ldvs, float* rconde, float* rcondv, float* work, + lapack_int* lwork, lapack_int* iwork, lapack_int* liwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_dgeesx( char* jobvs, char* sort, LAPACK_D_SELECT2 select, + char* sense, lapack_int* n, double* a, lapack_int* lda, + lapack_int* sdim, double* wr, double* wi, double* vs, + lapack_int* ldvs, double* rconde, double* rcondv, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_cgeesx( char* jobvs, char* sort, LAPACK_C_SELECT1 select, + char* sense, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* sdim, lapack_complex_float* w, + lapack_complex_float* vs, lapack_int* ldvs, float* rconde, + float* rcondv, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_zgeesx( char* jobvs, char* sort, LAPACK_Z_SELECT1 select, + char* sense, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* sdim, lapack_complex_double* w, + lapack_complex_double* vs, lapack_int* ldvs, double* rconde, + double* rcondv, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_sgeev( char* jobvl, char* jobvr, lapack_int* n, float* a, + lapack_int* lda, float* wr, float* wi, float* vl, + lapack_int* ldvl, float* vr, lapack_int* ldvr, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dgeev( char* jobvl, char* jobvr, lapack_int* n, double* a, + lapack_int* lda, double* wr, double* wi, double* vl, + lapack_int* ldvl, double* vr, lapack_int* ldvr, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgeev( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int* ldvl, lapack_complex_float* vr, lapack_int* ldvr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zgeev( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* w, lapack_complex_double* vl, + lapack_int* ldvl, lapack_complex_double* vr, + lapack_int* ldvr, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int *info ); +void LAPACK_sgeevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, float* a, lapack_int* lda, float* wr, + float* wi, float* vl, lapack_int* ldvl, float* vr, + lapack_int* ldvr, lapack_int* ilo, lapack_int* ihi, + float* scale, float* abnrm, float* rconde, float* rcondv, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dgeevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, double* a, lapack_int* lda, double* wr, + double* wi, double* vl, lapack_int* ldvl, double* vr, + lapack_int* ldvr, lapack_int* ilo, lapack_int* ihi, + double* scale, double* abnrm, double* rconde, + double* rcondv, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgeevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* w, lapack_complex_float* vl, + lapack_int* ldvl, lapack_complex_float* vr, + lapack_int* ldvr, lapack_int* ilo, lapack_int* ihi, + float* scale, float* abnrm, float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zgeevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* w, lapack_complex_double* vl, + lapack_int* ldvl, lapack_complex_double* vr, + lapack_int* ldvr, lapack_int* ilo, lapack_int* ihi, + double* scale, double* abnrm, double* rconde, + double* rcondv, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int *info ); +void LAPACK_sgesvd( char* jobu, char* jobvt, lapack_int* m, lapack_int* n, + float* a, lapack_int* lda, float* s, float* u, + lapack_int* ldu, float* vt, lapack_int* ldvt, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_dgesvd( char* jobu, char* jobvt, lapack_int* m, lapack_int* n, + double* a, lapack_int* lda, double* s, double* u, + lapack_int* ldu, double* vt, lapack_int* ldvt, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgesvd( char* jobu, char* jobvt, lapack_int* m, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* s, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* vt, lapack_int* ldvt, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zgesvd( char* jobu, char* jobvt, lapack_int* m, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* s, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* vt, lapack_int* ldvt, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_sgesvdx( char* jobu, char* jobvt, char* range, lapack_int* m, lapack_int* n, + float* a, lapack_int* lda, lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, float* s, float* u, + lapack_int* ldu, float* vt, lapack_int* ldvt, float* work, + lapack_int* lwork, lapack_int *iwork, lapack_int *info ); +void LAPACK_dgesvdx( char* jobu, char* jobvt, char* range, lapack_int* m, lapack_int* n, + double* a, lapack_int* lda, lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, double* s, double* u, + lapack_int* ldu, double* vt, lapack_int* ldvt, double* work, + lapack_int* lwork, lapack_int *iwork, lapack_int *info ); +void LAPACK_cgesvdx( char* jobu, char* jobvt, char* range, lapack_int* m, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, float* s, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* vt, lapack_int* ldvt, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *iwork, lapack_int *info ); +void LAPACK_zgesvdx( char* jobu, char* jobvt, char* range, lapack_int* m, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, lapack_int* vl, lapack_int* vu, + lapack_int* il, lapack_int* iu, lapack_int* ns, double* s, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* vt, lapack_int* ldvt, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *iwork, lapack_int *info ); +void LAPACK_sgesdd( char* jobz, lapack_int* m, lapack_int* n, float* a, + lapack_int* lda, float* s, float* u, lapack_int* ldu, + float* vt, lapack_int* ldvt, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dgesdd( char* jobz, lapack_int* m, lapack_int* n, double* a, + lapack_int* lda, double* s, double* u, lapack_int* ldu, + double* vt, lapack_int* ldvt, double* work, + lapack_int* lwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_cgesdd( char* jobz, lapack_int* m, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, float* s, + lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* vt, lapack_int* ldvt, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zgesdd( char* jobz, lapack_int* m, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, double* s, + lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* vt, lapack_int* ldvt, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_dgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt, + char* jobp, lapack_int* m, lapack_int* n, double* a, + lapack_int* lda, double* sva, double* u, lapack_int* ldu, + double* v, lapack_int* ldv, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_sgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt, + char* jobp, lapack_int* m, lapack_int* n, float* a, + lapack_int* lda, float* sva, float* u, lapack_int* ldu, + float* v, lapack_int* ldv, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_cgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt, + char* jobp, lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, float* sva, lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, lapack_complex_float* cwork, + lapack_int* lwork, float* work, lapack_int* lrwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt, + char* jobp, lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, double* sva, lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, lapack_complex_double* cwork, + lapack_int* lwork, double* work, lapack_int* lrwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_dgesvj( char* joba, char* jobu, char* jobv, lapack_int* m, + lapack_int* n, double* a, lapack_int* lda, double* sva, + lapack_int* mv, double* v, lapack_int* ldv, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_sgesvj( char* joba, char* jobu, char* jobv, lapack_int* m, + lapack_int* n, float* a, lapack_int* lda, float* sva, + lapack_int* mv, float* v, lapack_int* ldv, float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cgesvj( char* joba, char* jobu, char* jobv, lapack_int* m, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, float* sva, + lapack_int* mv, lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* cwork, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int *info ); +void LAPACK_zgesvj( char* joba, char* jobu, char* jobv, lapack_int* m, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, double* sva, + lapack_int* mv, lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* cwork, lapack_int* lwork, double* rwork, + lapack_int* lrwork, lapack_int *info ); +void LAPACK_sggsvd( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* alpha, float* beta, float* u, lapack_int* ldu, + float* v, lapack_int* ldv, float* q, lapack_int* ldq, + float* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_dggsvd( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* alpha, double* beta, double* u, lapack_int* ldu, + double* v, lapack_int* ldv, double* q, lapack_int* ldq, + double* work, lapack_int* iwork, lapack_int *info ); +void LAPACK_cggsvd( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* alpha, + float* beta, lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* work, float* rwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_zggsvd( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* alpha, + double* beta, lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_sggsvd3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* alpha, float* beta, float* u, lapack_int* ldu, + float* v, lapack_int* ldv, float* q, lapack_int* ldq, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_dggsvd3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* alpha, double* beta, double* u, lapack_int* ldu, + double* v, lapack_int* ldv, double* q, lapack_int* ldq, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int *info ); +void LAPACK_cggsvd3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* alpha, + float* beta, lapack_complex_float* u, lapack_int* ldu, + lapack_complex_float* v, lapack_int* ldv, + lapack_complex_float* q, lapack_int* ldq, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* iwork, lapack_int *info ); +void LAPACK_zggsvd3( char* jobu, char* jobv, char* jobq, lapack_int* m, + lapack_int* n, lapack_int* p, lapack_int* k, lapack_int* l, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* alpha, + double* beta, lapack_complex_double* u, lapack_int* ldu, + lapack_complex_double* v, lapack_int* ldv, + lapack_complex_double* q, lapack_int* ldq, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* iwork, lapack_int *info ); +void LAPACK_ssygv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* w, float* work, lapack_int* lwork, lapack_int *info ); +void LAPACK_dsygv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* w, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_chegv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* w, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zhegv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* w, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_ssygvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* w, float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_dsygvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* w, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_chegvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* w, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zhegvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* w, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_ssygvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* vl, float* vu, lapack_int* il, + lapack_int* iu, float* abstol, lapack_int* m, float* w, + float* z, lapack_int* ldz, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_dsygvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_chegvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, float* vl, + float* vu, lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_zhegvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_sspgv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + float* ap, float* bp, float* w, float* z, lapack_int* ldz, + float* work, lapack_int *info ); +void LAPACK_dspgv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + double* ap, double* bp, double* w, double* z, + lapack_int* ldz, double* work, lapack_int *info ); +void LAPACK_chpgv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* ap, lapack_complex_float* bp, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, float* rwork, lapack_int *info ); +void LAPACK_zhpgv( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* ap, lapack_complex_double* bp, + double* w, lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_sspgvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + float* ap, float* bp, float* w, float* z, lapack_int* ldz, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_dspgvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + double* ap, double* bp, double* w, double* z, + lapack_int* ldz, double* work, lapack_int* lwork, + lapack_int* iwork, lapack_int* liwork, lapack_int *info ); +void LAPACK_chpgvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_float* ap, lapack_complex_float* bp, + float* w, lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zhpgvd( lapack_int* itype, char* jobz, char* uplo, lapack_int* n, + lapack_complex_double* ap, lapack_complex_double* bp, + double* w, lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_sspgvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, float* ap, float* bp, float* vl, float* vu, + lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, float* z, lapack_int* ldz, + float* work, lapack_int* iwork, lapack_int* ifail, + lapack_int *info ); +void LAPACK_dspgvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, double* ap, double* bp, double* vl, + double* vu, lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, double* z, lapack_int* ldz, + double* work, lapack_int* iwork, lapack_int* ifail, + lapack_int *info ); +void LAPACK_chpgvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, lapack_complex_float* ap, + lapack_complex_float* bp, float* vl, float* vu, + lapack_int* il, lapack_int* iu, float* abstol, + lapack_int* m, float* w, lapack_complex_float* z, + lapack_int* ldz, lapack_complex_float* work, float* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_zhpgvx( lapack_int* itype, char* jobz, char* range, char* uplo, + lapack_int* n, lapack_complex_double* ap, + lapack_complex_double* bp, double* vl, double* vu, + lapack_int* il, lapack_int* iu, double* abstol, + lapack_int* m, double* w, lapack_complex_double* z, + lapack_int* ldz, lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_ssbgv( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, float* ab, lapack_int* ldab, float* bb, + lapack_int* ldbb, float* w, float* z, lapack_int* ldz, + float* work, lapack_int *info ); +void LAPACK_dsbgv( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, double* ab, lapack_int* ldab, double* bb, + lapack_int* ldbb, double* w, double* z, lapack_int* ldz, + double* work, lapack_int *info ); +void LAPACK_chbgv( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* bb, lapack_int* ldbb, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, float* rwork, lapack_int *info ); +void LAPACK_zhbgv( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* bb, lapack_int* ldbb, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, double* rwork, + lapack_int *info ); +void LAPACK_ssbgvd( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, float* ab, lapack_int* ldab, float* bb, + lapack_int* ldbb, float* w, float* z, lapack_int* ldz, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_dsbgvd( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, double* ab, lapack_int* ldab, double* bb, + lapack_int* ldbb, double* w, double* z, lapack_int* ldz, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_chbgvd( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_float* ab, lapack_int* ldab, + lapack_complex_float* bb, lapack_int* ldbb, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* lrwork, lapack_int* iwork, lapack_int* liwork, + lapack_int *info ); +void LAPACK_zhbgvd( char* jobz, char* uplo, lapack_int* n, lapack_int* ka, + lapack_int* kb, lapack_complex_double* ab, lapack_int* ldab, + lapack_complex_double* bb, lapack_int* ldbb, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, lapack_int* iwork, + lapack_int* liwork, lapack_int *info ); +void LAPACK_ssbgvx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* ka, lapack_int* kb, float* ab, lapack_int* ldab, + float* bb, lapack_int* ldbb, float* q, lapack_int* ldq, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, float* z, + lapack_int* ldz, float* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_dsbgvx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* ka, lapack_int* kb, double* ab, + lapack_int* ldab, double* bb, lapack_int* ldbb, double* q, + lapack_int* ldq, double* vl, double* vu, lapack_int* il, + lapack_int* iu, double* abstol, lapack_int* m, double* w, + double* z, lapack_int* ldz, double* work, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_chbgvx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* ka, lapack_int* kb, lapack_complex_float* ab, + lapack_int* ldab, lapack_complex_float* bb, + lapack_int* ldbb, lapack_complex_float* q, lapack_int* ldq, + float* vl, float* vu, lapack_int* il, lapack_int* iu, + float* abstol, lapack_int* m, float* w, + lapack_complex_float* z, lapack_int* ldz, + lapack_complex_float* work, float* rwork, lapack_int* iwork, + lapack_int* ifail, lapack_int *info ); +void LAPACK_zhbgvx( char* jobz, char* range, char* uplo, lapack_int* n, + lapack_int* ka, lapack_int* kb, lapack_complex_double* ab, + lapack_int* ldab, lapack_complex_double* bb, + lapack_int* ldbb, lapack_complex_double* q, lapack_int* ldq, + double* vl, double* vu, lapack_int* il, lapack_int* iu, + double* abstol, lapack_int* m, double* w, + lapack_complex_double* z, lapack_int* ldz, + lapack_complex_double* work, double* rwork, + lapack_int* iwork, lapack_int* ifail, lapack_int *info ); +void LAPACK_sgges( char* jobvsl, char* jobvsr, char* sort, + LAPACK_S_SELECT3 selctg, lapack_int* n, float* a, + lapack_int* lda, float* b, lapack_int* ldb, lapack_int* sdim, + float* alphar, float* alphai, float* beta, float* vsl, + lapack_int* ldvsl, float* vsr, lapack_int* ldvsr, + float* work, lapack_int* lwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_dgges( char* jobvsl, char* jobvsr, char* sort, + LAPACK_D_SELECT3 selctg, lapack_int* n, double* a, + lapack_int* lda, double* b, lapack_int* ldb, + lapack_int* sdim, double* alphar, double* alphai, + double* beta, double* vsl, lapack_int* ldvsl, double* vsr, + lapack_int* ldvsr, double* work, lapack_int* lwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_cgges( char* jobvsl, char* jobvsr, char* sort, + LAPACK_C_SELECT2 selctg, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, lapack_int* sdim, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int* ldvsl, + lapack_complex_float* vsr, lapack_int* ldvsr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_zgges( char* jobvsl, char* jobvsr, char* sort, + LAPACK_Z_SELECT2 selctg, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, lapack_int* sdim, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int* ldvsl, + lapack_complex_double* vsr, lapack_int* ldvsr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_logical* bwork, lapack_int *info ); +void LAPACK_sgges3( char* jobvsl, char* jobvsr, char* sort, + LAPACK_S_SELECT3 selctg, lapack_int* n, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + lapack_int* sdim, float* alphar, float* alphai, + float* beta, float* vsl, lapack_int* ldvsl, + float* vsr, lapack_int* ldvsr, + float* work, lapack_int* lwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_dgges3( char* jobvsl, char* jobvsr, char* sort, + LAPACK_D_SELECT3 selctg, lapack_int* n, double* a, + lapack_int* lda, double* b, lapack_int* ldb, + lapack_int* sdim, double* alphar, double* alphai, + double* beta, double* vsl, lapack_int* ldvsl, double* vsr, + lapack_int* ldvsr, double* work, lapack_int* lwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_cgges3( char* jobvsl, char* jobvsr, char* sort, + LAPACK_C_SELECT2 selctg, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_int* sdim, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int* ldvsl, + lapack_complex_float* vsr, lapack_int* ldvsr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_zgges3( char* jobvsl, char* jobvsr, char* sort, + LAPACK_Z_SELECT2 selctg, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, lapack_int* sdim, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int* ldvsl, + lapack_complex_double* vsr, lapack_int* ldvsr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_logical* bwork, lapack_int *info ); +void LAPACK_sggesx( char* jobvsl, char* jobvsr, char* sort, + LAPACK_S_SELECT3 selctg, char* sense, lapack_int* n, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + lapack_int* sdim, float* alphar, float* alphai, float* beta, + float* vsl, lapack_int* ldvsl, float* vsr, + lapack_int* ldvsr, float* rconde, float* rcondv, + float* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_dggesx( char* jobvsl, char* jobvsr, char* sort, + LAPACK_D_SELECT3 selctg, char* sense, lapack_int* n, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + lapack_int* sdim, double* alphar, double* alphai, + double* beta, double* vsl, lapack_int* ldvsl, double* vsr, + lapack_int* ldvsr, double* rconde, double* rcondv, + double* work, lapack_int* lwork, lapack_int* iwork, + lapack_int* liwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_cggesx( char* jobvsl, char* jobvsr, char* sort, + LAPACK_C_SELECT2 selctg, char* sense, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, lapack_int* sdim, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vsl, lapack_int* ldvsl, + lapack_complex_float* vsr, lapack_int* ldvsr, float* rconde, + float* rcondv, lapack_complex_float* work, + lapack_int* lwork, float* rwork, lapack_int* iwork, + lapack_int* liwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_zggesx( char* jobvsl, char* jobvsr, char* sort, + LAPACK_Z_SELECT2 selctg, char* sense, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, lapack_int* sdim, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vsl, lapack_int* ldvsl, + lapack_complex_double* vsr, lapack_int* ldvsr, + double* rconde, double* rcondv, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int* iwork, + lapack_int* liwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_sggev( char* jobvl, char* jobvr, lapack_int* n, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* alphar, + float* alphai, float* beta, float* vl, lapack_int* ldvl, + float* vr, lapack_int* ldvr, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dggev( char* jobvl, char* jobvr, lapack_int* n, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* alphar, + double* alphai, double* beta, double* vl, lapack_int* ldvl, + double* vr, lapack_int* ldvr, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cggev( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int* ldvl, + lapack_complex_float* vr, lapack_int* ldvr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zggev( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int* ldvl, + lapack_complex_double* vr, lapack_int* ldvr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_sggev3( char* jobvl, char* jobvr, lapack_int* n, float* a, + lapack_int* lda, float* b, lapack_int* ldb, float* alphar, + float* alphai, float* beta, float* vl, lapack_int* ldvl, + float* vr, lapack_int* ldvr, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dggev3( char* jobvl, char* jobvr, lapack_int* n, double* a, + lapack_int* lda, double* b, lapack_int* ldb, double* alphar, + double* alphai, double* beta, double* vl, lapack_int* ldvl, + double* vr, lapack_int* ldvr, double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_cggev3( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int* ldvl, + lapack_complex_float* vr, lapack_int* ldvr, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int *info ); +void LAPACK_zggev3( char* jobvl, char* jobvr, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int* ldvl, + lapack_complex_double* vr, lapack_int* ldvr, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int *info ); +void LAPACK_sggevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* alphar, float* alphai, float* beta, + float* vl, lapack_int* ldvl, float* vr, lapack_int* ldvr, + lapack_int* ilo, lapack_int* ihi, float* lscale, + float* rscale, float* abnrm, float* bbnrm, float* rconde, + float* rcondv, float* work, lapack_int* lwork, + lapack_int* iwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_dggevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* alphar, double* alphai, + double* beta, double* vl, lapack_int* ldvl, double* vr, + lapack_int* ldvr, lapack_int* ilo, lapack_int* ihi, + double* lscale, double* rscale, double* abnrm, + double* bbnrm, double* rconde, double* rcondv, double* work, + lapack_int* lwork, lapack_int* iwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_cggevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* vl, lapack_int* ldvl, + lapack_complex_float* vr, lapack_int* ldvr, lapack_int* ilo, + lapack_int* ihi, float* lscale, float* rscale, float* abnrm, + float* bbnrm, float* rconde, float* rcondv, + lapack_complex_float* work, lapack_int* lwork, float* rwork, + lapack_int* iwork, lapack_logical* bwork, + lapack_int *info ); +void LAPACK_zggevx( char* balanc, char* jobvl, char* jobvr, char* sense, + lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* vl, lapack_int* ldvl, + lapack_complex_double* vr, lapack_int* ldvr, + lapack_int* ilo, lapack_int* ihi, double* lscale, + double* rscale, double* abnrm, double* bbnrm, + double* rconde, double* rcondv, lapack_complex_double* work, + lapack_int* lwork, double* rwork, lapack_int* iwork, + lapack_logical* bwork, lapack_int *info ); +void LAPACK_dsfrk( char* transr, char* uplo, char* trans, lapack_int* n, + lapack_int* k, double* alpha, const double* a, + lapack_int* lda, double* beta, double* c ); +void LAPACK_ssfrk( char* transr, char* uplo, char* trans, lapack_int* n, + lapack_int* k, float* alpha, const float* a, lapack_int* lda, + float* beta, float* c ); +void LAPACK_zhfrk( char* transr, char* uplo, char* trans, lapack_int* n, + lapack_int* k, double* alpha, const lapack_complex_double* a, + lapack_int* lda, double* beta, lapack_complex_double* c ); +void LAPACK_chfrk( char* transr, char* uplo, char* trans, lapack_int* n, + lapack_int* k, float* alpha, const lapack_complex_float* a, + lapack_int* lda, float* beta, lapack_complex_float* c ); +void LAPACK_dtfsm( char* transr, char* side, char* uplo, char* trans, + char* diag, lapack_int* m, lapack_int* n, double* alpha, + const double* a, double* b, lapack_int* ldb ); +void LAPACK_stfsm( char* transr, char* side, char* uplo, char* trans, + char* diag, lapack_int* m, lapack_int* n, float* alpha, + const float* a, float* b, lapack_int* ldb ); +void LAPACK_ztfsm( char* transr, char* side, char* uplo, char* trans, + char* diag, lapack_int* m, lapack_int* n, + lapack_complex_double* alpha, const lapack_complex_double* a, + lapack_complex_double* b, lapack_int* ldb ); +void LAPACK_ctfsm( char* transr, char* side, char* uplo, char* trans, + char* diag, lapack_int* m, lapack_int* n, + lapack_complex_float* alpha, const lapack_complex_float* a, + lapack_complex_float* b, lapack_int* ldb ); +void LAPACK_dtfttp( char* transr, char* uplo, lapack_int* n, const double* arf, + double* ap, lapack_int *info ); +void LAPACK_stfttp( char* transr, char* uplo, lapack_int* n, const float* arf, + float* ap, lapack_int *info ); +void LAPACK_ztfttp( char* transr, char* uplo, lapack_int* n, + const lapack_complex_double* arf, lapack_complex_double* ap, + lapack_int *info ); +void LAPACK_ctfttp( char* transr, char* uplo, lapack_int* n, + const lapack_complex_float* arf, lapack_complex_float* ap, + lapack_int *info ); +void LAPACK_dtfttr( char* transr, char* uplo, lapack_int* n, const double* arf, + double* a, lapack_int* lda, lapack_int *info ); +void LAPACK_stfttr( char* transr, char* uplo, lapack_int* n, const float* arf, + float* a, lapack_int* lda, lapack_int *info ); +void LAPACK_ztfttr( char* transr, char* uplo, lapack_int* n, + const lapack_complex_double* arf, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_ctfttr( char* transr, char* uplo, lapack_int* n, + const lapack_complex_float* arf, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_dtpttf( char* transr, char* uplo, lapack_int* n, const double* ap, + double* arf, lapack_int *info ); +void LAPACK_stpttf( char* transr, char* uplo, lapack_int* n, const float* ap, + float* arf, lapack_int *info ); +void LAPACK_ztpttf( char* transr, char* uplo, lapack_int* n, + const lapack_complex_double* ap, lapack_complex_double* arf, + lapack_int *info ); +void LAPACK_ctpttf( char* transr, char* uplo, lapack_int* n, + const lapack_complex_float* ap, lapack_complex_float* arf, + lapack_int *info ); +void LAPACK_dtpttr( char* uplo, lapack_int* n, const double* ap, double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_stpttr( char* uplo, lapack_int* n, const float* ap, float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_ztpttr( char* uplo, lapack_int* n, const lapack_complex_double* ap, + lapack_complex_double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_ctpttr( char* uplo, lapack_int* n, const lapack_complex_float* ap, + lapack_complex_float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dtrttf( char* transr, char* uplo, lapack_int* n, const double* a, + lapack_int* lda, double* arf, lapack_int *info ); +void LAPACK_strttf( char* transr, char* uplo, lapack_int* n, const float* a, + lapack_int* lda, float* arf, lapack_int *info ); +void LAPACK_ztrttf( char* transr, char* uplo, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* arf, lapack_int *info ); +void LAPACK_ctrttf( char* transr, char* uplo, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* arf, lapack_int *info ); +void LAPACK_dtrttp( char* uplo, lapack_int* n, const double* a, lapack_int* lda, + double* ap, lapack_int *info ); +void LAPACK_strttp( char* uplo, lapack_int* n, const float* a, lapack_int* lda, + float* ap, lapack_int *info ); +void LAPACK_ztrttp( char* uplo, lapack_int* n, const lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* ap, + lapack_int *info ); +void LAPACK_ctrttp( char* uplo, lapack_int* n, const lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* ap, + lapack_int *info ); +void LAPACK_sgeqrfp( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dgeqrfp( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_cgeqrfp( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zgeqrfp( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_clacgv( lapack_int* n, lapack_complex_float* x, lapack_int* incx ); +void LAPACK_zlacgv( lapack_int* n, lapack_complex_double* x, lapack_int* incx ); +void LAPACK_slarnv( lapack_int* idist, lapack_int* iseed, lapack_int* n, + float* x ); +void LAPACK_dlarnv( lapack_int* idist, lapack_int* iseed, lapack_int* n, + double* x ); +void LAPACK_clarnv( lapack_int* idist, lapack_int* iseed, lapack_int* n, + lapack_complex_float* x ); +void LAPACK_zlarnv( lapack_int* idist, lapack_int* iseed, lapack_int* n, + lapack_complex_double* x ); +void LAPACK_sgeqr2( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int *info ); +void LAPACK_dgeqr2( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int *info ); +void LAPACK_cgeqr2( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zgeqr2( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_slacn2( lapack_int* n, float* v, float* x, lapack_int* isgn, + float* est, lapack_int* kase, lapack_int* isave ); +void LAPACK_dlacn2( lapack_int* n, double* v, double* x, lapack_int* isgn, + double* est, lapack_int* kase, lapack_int* isave ); +void LAPACK_clacn2( lapack_int* n, lapack_complex_float* v, + lapack_complex_float* x, float* est, + lapack_int* kase, lapack_int* isave ); +void LAPACK_zlacn2( lapack_int* n, lapack_complex_double* v, + lapack_complex_double* x, double* est, + lapack_int* kase, lapack_int* isave ); +void LAPACK_slacpy( char* uplo, lapack_int* m, lapack_int* n, const float* a, + lapack_int* lda, float* b, lapack_int* ldb ); +void LAPACK_dlacpy( char* uplo, lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, double* b, lapack_int* ldb ); +void LAPACK_clacpy( char* uplo, lapack_int* m, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb ); +void LAPACK_zlacpy( char* uplo, lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb ); + +void LAPACK_clacp2( char* uplo, lapack_int* m, lapack_int* n, const float* a, + lapack_int* lda, lapack_complex_float* b, lapack_int* ldb ); +void LAPACK_zlacp2( char* uplo, lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, lapack_complex_double* b, + lapack_int* ldb ); + +void LAPACK_sgetf2( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_dgetf2( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ipiv, lapack_int *info ); +void LAPACK_cgetf2( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_zgetf2( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, lapack_int *info ); +void LAPACK_slaswp( lapack_int* n, float* a, lapack_int* lda, lapack_int* k1, + lapack_int* k2, const lapack_int* ipiv, lapack_int* incx ); +void LAPACK_dlaswp( lapack_int* n, double* a, lapack_int* lda, lapack_int* k1, + lapack_int* k2, const lapack_int* ipiv, lapack_int* incx ); +void LAPACK_claswp( lapack_int* n, lapack_complex_float* a, lapack_int* lda, + lapack_int* k1, lapack_int* k2, const lapack_int* ipiv, + lapack_int* incx ); +void LAPACK_zlaswp( lapack_int* n, lapack_complex_double* a, lapack_int* lda, + lapack_int* k1, lapack_int* k2, const lapack_int* ipiv, + lapack_int* incx ); +float LAPACK_slange( char* norm, lapack_int* m, lapack_int* n, const float* a, + lapack_int* lda, float* work ); +double LAPACK_dlange( char* norm, lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, double* work ); +float LAPACK_clange( char* norm, lapack_int* m, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, float* work ); +double LAPACK_zlange( char* norm, lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, double* work ); +float LAPACK_clanhe( char* norm, char* uplo, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, float* work ); +double LAPACK_zlanhe( char* norm, char* uplo, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, double* work ); +float LAPACK_slansy( char* norm, char* uplo, lapack_int* n, const float* a, + lapack_int* lda, float* work ); +double LAPACK_dlansy( char* norm, char* uplo, lapack_int* n, const double* a, + lapack_int* lda, double* work ); +float LAPACK_clansy( char* norm, char* uplo, lapack_int* n, + const lapack_complex_float* a, lapack_int* lda, float* work ); +double LAPACK_zlansy( char* norm, char* uplo, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, double* work ); +float LAPACK_slantr( char* norm, char* uplo, char* diag, lapack_int* m, + lapack_int* n, const float* a, lapack_int* lda, float* work ); +double LAPACK_dlantr( char* norm, char* uplo, char* diag, lapack_int* m, + lapack_int* n, const double* a, lapack_int* lda, double* work ); +float LAPACK_clantr( char* norm, char* uplo, char* diag, lapack_int* m, + lapack_int* n, const lapack_complex_float* a, lapack_int* lda, + float* work ); +double LAPACK_zlantr( char* norm, char* uplo, char* diag, lapack_int* m, + lapack_int* n, const lapack_complex_double* a, lapack_int* lda, + double* work ); +float LAPACK_slamch( char* cmach ); +double LAPACK_dlamch( char* cmach ); +void LAPACK_sgelq2( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* tau, float* work, lapack_int *info ); +void LAPACK_dgelq2( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* tau, double* work, lapack_int *info ); +void LAPACK_cgelq2( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* tau, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zgelq2( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* tau, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_slarfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, const float* v, + lapack_int* ldv, const float* t, lapack_int* ldt, float* c, + lapack_int* ldc, float* work, lapack_int* ldwork ); +void LAPACK_dlarfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, + const double* v, lapack_int* ldv, const double* t, + lapack_int* ldt, double* c, lapack_int* ldc, double* work, + lapack_int* ldwork ); +void LAPACK_clarfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, + const lapack_complex_float* v, lapack_int* ldv, + const lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int* ldwork ); +void LAPACK_zlarfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, + const lapack_complex_double* v, lapack_int* ldv, + const lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int* ldwork ); +void LAPACK_slarfg( lapack_int* n, float* alpha, float* x, lapack_int* incx, + float* tau ); +void LAPACK_dlarfg( lapack_int* n, double* alpha, double* x, lapack_int* incx, + double* tau ); +void LAPACK_clarfg( lapack_int* n, lapack_complex_float* alpha, + lapack_complex_float* x, lapack_int* incx, + lapack_complex_float* tau ); +void LAPACK_zlarfg( lapack_int* n, lapack_complex_double* alpha, + lapack_complex_double* x, lapack_int* incx, + lapack_complex_double* tau ); +void LAPACK_slarft( char* direct, char* storev, lapack_int* n, lapack_int* k, + const float* v, lapack_int* ldv, const float* tau, float* t, + lapack_int* ldt ); +void LAPACK_dlarft( char* direct, char* storev, lapack_int* n, lapack_int* k, + const double* v, lapack_int* ldv, const double* tau, + double* t, lapack_int* ldt ); +void LAPACK_clarft( char* direct, char* storev, lapack_int* n, lapack_int* k, + const lapack_complex_float* v, lapack_int* ldv, + const lapack_complex_float* tau, lapack_complex_float* t, + lapack_int* ldt ); +void LAPACK_zlarft( char* direct, char* storev, lapack_int* n, lapack_int* k, + const lapack_complex_double* v, lapack_int* ldv, + const lapack_complex_double* tau, lapack_complex_double* t, + lapack_int* ldt ); +void LAPACK_slarfx( char* side, lapack_int* m, lapack_int* n, const float* v, + float* tau, float* c, lapack_int* ldc, float* work ); +void LAPACK_dlarfx( char* side, lapack_int* m, lapack_int* n, const double* v, + double* tau, double* c, lapack_int* ldc, double* work ); +void LAPACK_clarfx( char* side, lapack_int* m, lapack_int* n, + const lapack_complex_float* v, lapack_complex_float* tau, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work ); +void LAPACK_zlarfx( char* side, lapack_int* m, lapack_int* n, + const lapack_complex_double* v, lapack_complex_double* tau, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work ); +void LAPACK_slatms( lapack_int* m, lapack_int* n, char* dist, lapack_int* iseed, + char* sym, float* d, lapack_int* mode, float* cond, + float* dmax, lapack_int* kl, lapack_int* ku, char* pack, + float* a, lapack_int* lda, float* work, lapack_int *info ); +void LAPACK_dlatms( lapack_int* m, lapack_int* n, char* dist, lapack_int* iseed, + char* sym, double* d, lapack_int* mode, double* cond, + double* dmax, lapack_int* kl, lapack_int* ku, char* pack, + double* a, lapack_int* lda, double* work, + lapack_int *info ); +void LAPACK_clatms( lapack_int* m, lapack_int* n, char* dist, lapack_int* iseed, + char* sym, float* d, lapack_int* mode, float* cond, + float* dmax, lapack_int* kl, lapack_int* ku, char* pack, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zlatms( lapack_int* m, lapack_int* n, char* dist, lapack_int* iseed, + char* sym, double* d, lapack_int* mode, double* cond, + double* dmax, lapack_int* kl, lapack_int* ku, char* pack, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_slag2d( lapack_int* m, lapack_int* n, const float* sa, + lapack_int* ldsa, double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dlag2s( lapack_int* m, lapack_int* n, const double* a, + lapack_int* lda, float* sa, lapack_int* ldsa, + lapack_int *info ); +void LAPACK_clag2z( lapack_int* m, lapack_int* n, + const lapack_complex_float* sa, lapack_int* ldsa, + lapack_complex_double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_zlag2c( lapack_int* m, lapack_int* n, + const lapack_complex_double* a, lapack_int* lda, + lapack_complex_float* sa, lapack_int* ldsa, + lapack_int *info ); +void LAPACK_slauum( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_dlauum( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int *info ); +void LAPACK_clauum( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_zlauum( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_slagge( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const float* d, float* a, lapack_int* lda, + lapack_int* iseed, float* work, lapack_int *info ); +void LAPACK_dlagge( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const double* d, double* a, lapack_int* lda, + lapack_int* iseed, double* work, lapack_int *info ); +void LAPACK_clagge( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const float* d, lapack_complex_float* a, + lapack_int* lda, lapack_int* iseed, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zlagge( lapack_int* m, lapack_int* n, lapack_int* kl, + lapack_int* ku, const double* d, lapack_complex_double* a, + lapack_int* lda, lapack_int* iseed, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_slascl( char* type, lapack_int* kl, lapack_int* ku, float* cfrom, + float* cto, lapack_int* m, lapack_int* n, float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_dlascl( char* type, lapack_int* kl, lapack_int* ku, double* cfrom, + double* cto, lapack_int* m, lapack_int* n, double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_clascl( char* type, lapack_int* kl, lapack_int* ku, float* cfrom, + float* cto, lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_zlascl( char* type, lapack_int* kl, lapack_int* ku, double* cfrom, + double* cto, lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int *info ); +void LAPACK_slaset( char* uplo, lapack_int* m, lapack_int* n, float* alpha, + float* beta, float* a, lapack_int* lda ); +void LAPACK_dlaset( char* uplo, lapack_int* m, lapack_int* n, double* alpha, + double* beta, double* a, lapack_int* lda ); +void LAPACK_claset( char* uplo, lapack_int* m, lapack_int* n, + lapack_complex_float* alpha, lapack_complex_float* beta, + lapack_complex_float* a, lapack_int* lda ); +void LAPACK_zlaset( char* uplo, lapack_int* m, lapack_int* n, + lapack_complex_double* alpha, lapack_complex_double* beta, + lapack_complex_double* a, lapack_int* lda ); +void LAPACK_slasrt( char* id, lapack_int* n, float* d, lapack_int *info ); +void LAPACK_dlasrt( char* id, lapack_int* n, double* d, lapack_int *info ); +void LAPACK_claghe( lapack_int* n, lapack_int* k, const float* d, + lapack_complex_float* a, lapack_int* lda, lapack_int* iseed, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zlaghe( lapack_int* n, lapack_int* k, const double* d, + lapack_complex_double* a, lapack_int* lda, + lapack_int* iseed, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_slagsy( lapack_int* n, lapack_int* k, const float* d, float* a, + lapack_int* lda, lapack_int* iseed, float* work, + lapack_int *info ); +void LAPACK_dlagsy( lapack_int* n, lapack_int* k, const double* d, double* a, + lapack_int* lda, lapack_int* iseed, double* work, + lapack_int *info ); +void LAPACK_clagsy( lapack_int* n, lapack_int* k, const float* d, + lapack_complex_float* a, lapack_int* lda, lapack_int* iseed, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zlagsy( lapack_int* n, lapack_int* k, const double* d, + lapack_complex_double* a, lapack_int* lda, + lapack_int* iseed, lapack_complex_double* work, + lapack_int *info ); +void LAPACK_slapmr( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + float* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_dlapmr( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + double* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_clapmr( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + lapack_complex_float* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_zlapmr( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + lapack_complex_double* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_slapmt( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + float* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_dlapmt( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + double* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_clapmt( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + lapack_complex_float* x, lapack_int* ldx, lapack_int* k ); +void LAPACK_zlapmt( lapack_logical* forwrd, lapack_int* m, lapack_int* n, + lapack_complex_double* x, lapack_int* ldx, lapack_int* k ); +float LAPACK_slapy2( float* x, float* y ); +double LAPACK_dlapy2( double* x, double* y ); +float LAPACK_slapy3( float* x, float* y, float* z ); +double LAPACK_dlapy3( double* x, double* y, double* z ); +void LAPACK_slartgp( float* f, float* g, float* cs, float* sn, float* r ); +void LAPACK_dlartgp( double* f, double* g, double* cs, double* sn, double* r ); +void LAPACK_slartgs( float* x, float* y, float* sigma, float* cs, float* sn ); +void LAPACK_dlartgs( double* x, double* y, double* sigma, double* cs, + double* sn ); +// LAPACK 3.3.0 +void LAPACK_cbbcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + lapack_int* m, lapack_int* p, lapack_int* q, + float* theta, float* phi, + lapack_complex_float* u1, lapack_int* ldu1, + lapack_complex_float* u2, lapack_int* ldu2, + lapack_complex_float* v1t, lapack_int* ldv1t, + lapack_complex_float* v2t, lapack_int* ldv2t, + float* b11d, float* b11e, float* b12d, + float* b12e, float* b21d, float* b21e, + float* b22d, float* b22e, float* rwork, + lapack_int* lrwork , lapack_int *info ); +void LAPACK_cheswapr( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* i1, + lapack_int* i2 ); +void LAPACK_chetri2( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_chetri2x( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int* nb , lapack_int *info ); +void LAPACK_chetrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work , lapack_int *info ); +void LAPACK_csyconv( char* uplo, char* way, + lapack_int* n, lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_float* work , lapack_int *info ); +void LAPACK_csyswapr( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* i1, + lapack_int* i2 ); +void LAPACK_csytri2( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_csytri2x( char* uplo, lapack_int* n, + lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int* nb , lapack_int *info ); +void LAPACK_csytrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, const lapack_complex_float* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work , lapack_int *info ); +void LAPACK_cunbdb( char* trans, char* signs, + lapack_int* m, lapack_int* p, lapack_int* q, + lapack_complex_float* x11, lapack_int* ldx11, + lapack_complex_float* x12, lapack_int* ldx12, + lapack_complex_float* x21, lapack_int* ldx21, + lapack_complex_float* x22, lapack_int* ldx22, + float* theta, float* phi, + lapack_complex_float* taup1, + lapack_complex_float* taup2, + lapack_complex_float* tauq1, + lapack_complex_float* tauq2, + lapack_complex_float* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_cuncsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + char* signs, lapack_int* m, lapack_int* p, + lapack_int* q, lapack_complex_float* x11, + lapack_int* ldx11, lapack_complex_float* x12, + lapack_int* ldx12, lapack_complex_float* x21, + lapack_int* ldx21, lapack_complex_float* x22, + lapack_int* ldx22, float* theta, + lapack_complex_float* u1, lapack_int* ldu1, + lapack_complex_float* u2, lapack_int* ldu2, + lapack_complex_float* v1t, lapack_int* ldv1t, + lapack_complex_float* v2t, lapack_int* ldv2t, + lapack_complex_float* work, lapack_int* lwork, + float* rwork, lapack_int* lrwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_cuncsd2by1( char* jobu1, char* jobu2, + char* jobv1t, lapack_int* m, lapack_int* p, + lapack_int* q, lapack_complex_float* x11, + lapack_int* ldx11, lapack_complex_float* x21, + lapack_int* ldx21, lapack_complex_float* theta, + lapack_complex_float* u1, lapack_int* ldu1, + lapack_complex_float* u2, lapack_int* ldu2, + lapack_complex_float* v1t, lapack_int* ldv1t, + lapack_complex_float* work, lapack_int* lwork, + float* rwork, lapack_int* lrwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_dbbcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + lapack_int* m, lapack_int* p, lapack_int* q, + double* theta, double* phi, double* u1, + lapack_int* ldu1, double* u2, lapack_int* ldu2, + double* v1t, lapack_int* ldv1t, double* v2t, + lapack_int* ldv2t, double* b11d, double* b11e, + double* b12d, double* b12e, double* b21d, + double* b21e, double* b22d, double* b22e, + double* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_dorbdb( char* trans, char* signs, + lapack_int* m, lapack_int* p, lapack_int* q, + double* x11, lapack_int* ldx11, double* x12, + lapack_int* ldx12, double* x21, lapack_int* ldx21, + double* x22, lapack_int* ldx22, double* theta, + double* phi, double* taup1, double* taup2, + double* tauq1, double* tauq2, double* work, + lapack_int* lwork , lapack_int *info ); +void LAPACK_dorcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + char* signs, lapack_int* m, lapack_int* p, + lapack_int* q, double* x11, lapack_int* ldx11, + double* x12, lapack_int* ldx12, double* x21, + lapack_int* ldx21, double* x22, lapack_int* ldx22, + double* theta, double* u1, lapack_int* ldu1, + double* u2, lapack_int* ldu2, double* v1t, + lapack_int* ldv1t, double* v2t, lapack_int* ldv2t, + double* work, lapack_int* lwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_dorcsd2by1( char* jobu1, char* jobu2, + char* jobv1t, lapack_int* m, lapack_int* p, + lapack_int* q, double* x11, lapack_int* ldx11, + double* x21, lapack_int* ldx21, + double* theta, double* u1, lapack_int* ldu1, + double* u2, lapack_int* ldu2, double* v1t, + lapack_int* ldv1t, double* work, lapack_int* lwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_dsyconv( char* uplo, char* way, + lapack_int* n, double* a, lapack_int* lda, + const lapack_int* ipiv, double* work , lapack_int *info ); +void LAPACK_dsyswapr( char* uplo, lapack_int* n, + double* a, lapack_int* i1, lapack_int* i2 ); +void LAPACK_dsytri2( char* uplo, lapack_int* n, + double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_dsytri2x( char* uplo, lapack_int* n, + double* a, lapack_int* lda, + const lapack_int* ipiv, double* work, + lapack_int* nb , lapack_int *info ); +void LAPACK_dsytrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, const double* a, + lapack_int* lda, const lapack_int* ipiv, + double* b, lapack_int* ldb, double* work , lapack_int *info ); +void LAPACK_sbbcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + lapack_int* m, lapack_int* p, lapack_int* q, + float* theta, float* phi, float* u1, + lapack_int* ldu1, float* u2, lapack_int* ldu2, + float* v1t, lapack_int* ldv1t, float* v2t, + lapack_int* ldv2t, float* b11d, float* b11e, + float* b12d, float* b12e, float* b21d, + float* b21e, float* b22d, float* b22e, + float* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_sorbdb( char* trans, char* signs, + lapack_int* m, lapack_int* p, lapack_int* q, + float* x11, lapack_int* ldx11, float* x12, + lapack_int* ldx12, float* x21, lapack_int* ldx21, + float* x22, lapack_int* ldx22, float* theta, + float* phi, float* taup1, float* taup2, + float* tauq1, float* tauq2, float* work, + lapack_int* lwork , lapack_int *info ); +void LAPACK_sorcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + char* signs, lapack_int* m, lapack_int* p, + lapack_int* q, float* x11, lapack_int* ldx11, + float* x12, lapack_int* ldx12, float* x21, + lapack_int* ldx21, float* x22, lapack_int* ldx22, + float* theta, float* u1, lapack_int* ldu1, + float* u2, lapack_int* ldu2, float* v1t, + lapack_int* ldv1t, float* v2t, lapack_int* ldv2t, + float* work, lapack_int* lwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_sorcsd2by1( char* jobu1, char* jobu2, + char* jobv1t, lapack_int* m, lapack_int* p, + lapack_int* q, float* x11, lapack_int* ldx11, + float* x21, lapack_int* ldx21, + float* theta, float* u1, lapack_int* ldu1, + float* u2, lapack_int* ldu2, float* v1t, + lapack_int* ldv1t, float* work, lapack_int* lwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_ssyconv( char* uplo, char* way, + lapack_int* n, float* a, lapack_int* lda, + const lapack_int* ipiv, float* work , lapack_int *info ); +void LAPACK_ssyswapr( char* uplo, lapack_int* n, + float* a, lapack_int* i1, lapack_int* i2 ); +void LAPACK_ssytri2( char* uplo, lapack_int* n, + float* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_ssytri2x( char* uplo, lapack_int* n, + float* a, lapack_int* lda, + const lapack_int* ipiv, float* work, + lapack_int* nb , lapack_int *info ); +void LAPACK_ssytrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, const float* a, + lapack_int* lda, const lapack_int* ipiv, + float* b, lapack_int* ldb, float* work , lapack_int *info ); +void LAPACK_zbbcsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + lapack_int* m, lapack_int* p, lapack_int* q, + double* theta, double* phi, + lapack_complex_double* u1, lapack_int* ldu1, + lapack_complex_double* u2, lapack_int* ldu2, + lapack_complex_double* v1t, lapack_int* ldv1t, + lapack_complex_double* v2t, lapack_int* ldv2t, + double* b11d, double* b11e, double* b12d, + double* b12e, double* b21d, double* b21e, + double* b22d, double* b22e, double* rwork, + lapack_int* lrwork , lapack_int *info ); +void LAPACK_zheswapr( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* i1, + lapack_int* i2 ); +void LAPACK_zhetri2( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_zhetri2x( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int* nb , lapack_int *info ); +void LAPACK_zhetrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work , lapack_int *info ); +void LAPACK_zsyconv( char* uplo, char* way, + lapack_int* n, lapack_complex_double* a, + lapack_int* lda, const lapack_int* ipiv, + lapack_complex_double* work , lapack_int *info ); +void LAPACK_zsyswapr( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* i1, + lapack_int* i2 ); +void LAPACK_zsytri2( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_zsytri2x( char* uplo, lapack_int* n, + lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* work, lapack_int* nb , lapack_int *info ); +void LAPACK_zsytrs2( char* uplo, lapack_int* n, + lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work , lapack_int *info ); +void LAPACK_zunbdb( char* trans, char* signs, + lapack_int* m, lapack_int* p, lapack_int* q, + lapack_complex_double* x11, lapack_int* ldx11, + lapack_complex_double* x12, lapack_int* ldx12, + lapack_complex_double* x21, lapack_int* ldx21, + lapack_complex_double* x22, lapack_int* ldx22, + double* theta, double* phi, + lapack_complex_double* taup1, + lapack_complex_double* taup2, + lapack_complex_double* tauq1, + lapack_complex_double* tauq2, + lapack_complex_double* work, lapack_int* lwork , lapack_int *info ); +void LAPACK_zuncsd( char* jobu1, char* jobu2, + char* jobv1t, char* jobv2t, char* trans, + char* signs, lapack_int* m, lapack_int* p, + lapack_int* q, lapack_complex_double* x11, + lapack_int* ldx11, lapack_complex_double* x12, + lapack_int* ldx12, lapack_complex_double* x21, + lapack_int* ldx21, lapack_complex_double* x22, + lapack_int* ldx22, double* theta, + lapack_complex_double* u1, lapack_int* ldu1, + lapack_complex_double* u2, lapack_int* ldu2, + lapack_complex_double* v1t, lapack_int* ldv1t, + lapack_complex_double* v2t, lapack_int* ldv2t, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, + lapack_int* iwork , lapack_int *info ); +void LAPACK_zuncsd2by1( char* jobu1, char* jobu2, + char* jobv1t, lapack_int* m, lapack_int* p, + lapack_int* q, lapack_complex_double* x11, + lapack_int* ldx11, lapack_complex_double* x21, + lapack_int* ldx21, lapack_complex_double* theta, + lapack_complex_double* u1, lapack_int* ldu1, + lapack_complex_double* u2, lapack_int* ldu2, + lapack_complex_double* v1t, lapack_int* ldv1t, + lapack_complex_double* work, lapack_int* lwork, + double* rwork, lapack_int* lrwork, + lapack_int* iwork , lapack_int *info ); +// LAPACK 3.4.0 +void LAPACK_sgemqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* nb, const float* v, + lapack_int* ldv, const float* t, lapack_int* ldt, float* c, + lapack_int* ldc, float* work, lapack_int *info ); +void LAPACK_dgemqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* nb, const double* v, + lapack_int* ldv, const double* t, lapack_int* ldt, + double* c, lapack_int* ldc, double* work, + lapack_int *info ); +void LAPACK_cgemqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* nb, + const lapack_complex_float* v, lapack_int* ldv, + const lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* c, lapack_int* ldc, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zgemqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* nb, + const lapack_complex_double* v, lapack_int* ldv, + const lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* c, lapack_int* ldc, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_sgeqrt( lapack_int* m, lapack_int* n, lapack_int* nb, float* a, + lapack_int* lda, float* t, lapack_int* ldt, float* work, + lapack_int *info ); +void LAPACK_dgeqrt( lapack_int* m, lapack_int* n, lapack_int* nb, double* a, + lapack_int* lda, double* t, lapack_int* ldt, double* work, + lapack_int *info ); +void LAPACK_cgeqrt( lapack_int* m, lapack_int* n, lapack_int* nb, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_zgeqrt( lapack_int* m, lapack_int* n, lapack_int* nb, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_sgeqrt2( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* t, lapack_int* ldt, lapack_int *info ); +void LAPACK_dgeqrt2( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* t, lapack_int* ldt, lapack_int *info ); +void LAPACK_cgeqrt2( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_zgeqrt2( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_sgeqrt3( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, + float* t, lapack_int* ldt, lapack_int *info ); +void LAPACK_dgeqrt3( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, + double* t, lapack_int* ldt, lapack_int *info ); +void LAPACK_cgeqrt3( lapack_int* m, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_complex_float* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_zgeqrt3( lapack_int* m, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_complex_double* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_stpmqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, lapack_int* nb, + const float* v, lapack_int* ldv, const float* t, + lapack_int* ldt, float* a, lapack_int* lda, float* b, + lapack_int* ldb, float* work, lapack_int *info ); +void LAPACK_dtpmqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, lapack_int* nb, + const double* v, lapack_int* ldv, const double* t, + lapack_int* ldt, double* a, lapack_int* lda, double* b, + lapack_int* ldb, double* work, lapack_int *info ); +void LAPACK_ctpmqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, lapack_int* nb, + const lapack_complex_float* v, lapack_int* ldv, + const lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_ztpmqrt( char* side, char* trans, lapack_int* m, lapack_int* n, + lapack_int* k, lapack_int* l, lapack_int* nb, + const lapack_complex_double* v, lapack_int* ldv, + const lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_stpqrt( lapack_int* m, lapack_int* n, lapack_int* l, lapack_int* nb, + float* a, lapack_int* lda, float* b, lapack_int* ldb, + float* t, lapack_int* ldt, float* work, lapack_int *info ); +void LAPACK_dtpqrt( lapack_int* m, lapack_int* n, lapack_int* l, lapack_int* nb, + double* a, lapack_int* lda, double* b, lapack_int* ldb, + double* t, lapack_int* ldt, double* work, + lapack_int *info ); +void LAPACK_ctpqrt( lapack_int* m, lapack_int* n, lapack_int* l, lapack_int* nb, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* work, lapack_int *info ); +void LAPACK_ztpqrt( lapack_int* m, lapack_int* n, lapack_int* l, lapack_int* nb, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* work, lapack_int *info ); +void LAPACK_stpqrt2( lapack_int* m, lapack_int* n, lapack_int* l, + float* a, lapack_int* lda, + float* b, lapack_int* ldb, + float* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_dtpqrt2( lapack_int* m, lapack_int* n, lapack_int* l, + double* a, lapack_int* lda, + double* b, lapack_int* ldb, + double* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_ctpqrt2( lapack_int* m, lapack_int* n, lapack_int* l, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_ztpqrt2( lapack_int* m, lapack_int* n, lapack_int* l, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* t, lapack_int* ldt, + lapack_int *info ); +void LAPACK_stprfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, lapack_int* l, + const float* v, lapack_int* ldv, const float* t, + lapack_int* ldt, float* a, lapack_int* lda, float* b, + lapack_int* ldb, const float* work, + lapack_int* ldwork ); +void LAPACK_dtprfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, lapack_int* l, + const double* v, lapack_int* ldv, const double* t, + lapack_int* ldt, double* a, lapack_int* lda, double* b, + lapack_int* ldb, const double* work, + lapack_int* ldwork ); +void LAPACK_ctprfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, lapack_int* l, + const lapack_complex_float* v, lapack_int* ldv, + const lapack_complex_float* t, lapack_int* ldt, + lapack_complex_float* a, lapack_int* lda, + lapack_complex_float* b, lapack_int* ldb, + lapack_complex_float* work, lapack_int* ldwork ); +void LAPACK_ztprfb( char* side, char* trans, char* direct, char* storev, + lapack_int* m, lapack_int* n, lapack_int* k, lapack_int* l, + const lapack_complex_double* v, lapack_int* ldv, + const lapack_complex_double* t, lapack_int* ldt, + lapack_complex_double* a, lapack_int* lda, + lapack_complex_double* b, lapack_int* ldb, + lapack_complex_double* work, lapack_int* ldwork ); +// LAPACK 3.5.0 +void LAPACK_ssysv_rook( char* uplo, lapack_int* n, lapack_int* nrhs, float* a, + lapack_int* lda, lapack_int* ipiv, float* b, + lapack_int* ldb, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ssytrf_rook( char* uplo, lapack_int* n, float* a, lapack_int* lda, + lapack_int* ipiv, float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dsysv_rook( char* uplo, lapack_int* n, lapack_int* nrhs, double* a, + lapack_int* lda, lapack_int* ipiv, double* b, + lapack_int* ldb, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_dsytrf_rook( char* uplo, lapack_int* n, double* a, lapack_int* lda, + lapack_int* ipiv, double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_csysv_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_float* a, lapack_int* lda, + lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_complex_float* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_csytrf_rook( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zsysv_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + lapack_complex_double* a, lapack_int* lda, + lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_complex_double* work, + lapack_int* lwork, lapack_int *info ); +void LAPACK_zsytrf_rook( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_ssytrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, const float* a, + lapack_int* lda, const lapack_int* ipiv, float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_dsytrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + const double* a, lapack_int* lda, const lapack_int* ipiv, + double* b, lapack_int* ldb, lapack_int *info ); +void LAPACK_csytrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zsytrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_chetrf_rook( char* uplo, lapack_int* n, lapack_complex_float* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_float* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_zhetrf_rook( char* uplo, lapack_int* n, lapack_complex_double* a, + lapack_int* lda, lapack_int* ipiv, + lapack_complex_double* work, lapack_int* lwork, + lapack_int *info ); +void LAPACK_chetrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_float* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_float* b, + lapack_int* ldb, lapack_int *info ); +void LAPACK_zhetrs_rook( char* uplo, lapack_int* n, lapack_int* nrhs, + const lapack_complex_double* a, lapack_int* lda, + const lapack_int* ipiv, lapack_complex_double* b, + lapack_int* ldb, lapack_int *info ); + +void LAPACK_csyr( char* uplo, lapack_int* n, lapack_complex_float* alpha, + const lapack_complex_float* x, lapack_int* incx, + lapack_complex_float* a, lapack_int* lda ); +void LAPACK_zsyr( char* uplo, lapack_int* n, lapack_complex_double* alpha, + const lapack_complex_double* x, lapack_int* incx, + lapack_complex_double* a, lapack_int* lda ); +void LAPACK_ilaver( const lapack_int* vers_major, const lapack_int* vers_minor, + const lapack_int* vers_patch ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _LAPACKE_H_ */ diff --git a/lapack/cgo/lapacke/lapacke_config.h b/lapack/cgo/lapacke/lapacke_config.h new file mode 100644 index 00000000..1e2509bf --- /dev/null +++ b/lapack/cgo/lapacke/lapacke_config.h @@ -0,0 +1,119 @@ +/***************************************************************************** + Copyright (c) 2010, Intel Corp. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************** +* Contents: Native C interface to LAPACK +* Author: Intel Corporation +* Generated May, 2011 +*****************************************************************************/ + +#ifndef _LAPACKE_CONFIG_H_ +#define _LAPACKE_CONFIG_H_ + +#ifdef __cplusplus +#if defined(LAPACK_COMPLEX_CPP) +#include +#endif +extern "C" { +#endif /* __cplusplus */ + +#include + +#ifndef lapack_int +#if defined(LAPACK_ILP64) +#define lapack_int long +#else +#define lapack_int int +#endif +#endif + +#ifndef lapack_logical +#define lapack_logical lapack_int +#endif + +#ifndef LAPACK_COMPLEX_CUSTOM + +#if defined(LAPACK_COMPLEX_STRUCTURE) + +typedef struct { float real, imag; } _lapack_complex_float; +typedef struct { double real, imag; } _lapack_complex_double; +#define lapack_complex_float _lapack_complex_float +#define lapack_complex_double _lapack_complex_double +#define lapack_complex_float_real(z) ((z).real) +#define lapack_complex_float_imag(z) ((z).imag) +#define lapack_complex_double_real(z) ((z).real) +#define lapack_complex_double_imag(z) ((z).imag) + +#elif defined(LAPACK_COMPLEX_C99) + +#include +#define lapack_complex_float float _Complex +#define lapack_complex_double double _Complex +#define lapack_complex_float_real(z) (creal(z)) +#define lapack_complex_float_imag(z) (cimag(z)) +#define lapack_complex_double_real(z) (creal(z)) +#define lapack_complex_double_imag(z) (cimag(z)) + +#elif defined(LAPACK_COMPLEX_CPP) + +#define lapack_complex_float std::complex +#define lapack_complex_double std::complex +#define lapack_complex_float_real(z) ((z).real()) +#define lapack_complex_float_imag(z) ((z).imag()) +#define lapack_complex_double_real(z) ((z).real()) +#define lapack_complex_double_imag(z) ((z).imag()) + +#else + +#include +#define lapack_complex_float float _Complex +#define lapack_complex_double double _Complex +#define lapack_complex_float_real(z) (creal(z)) +#define lapack_complex_float_imag(z) (cimag(z)) +#define lapack_complex_double_real(z) (creal(z)) +#define lapack_complex_double_imag(z) (cimag(z)) + +#endif + +lapack_complex_float lapack_make_complex_float( float re, float im ); +lapack_complex_double lapack_make_complex_double( double re, double im ); + +#endif + +#ifndef LAPACK_malloc +#define LAPACK_malloc( size ) malloc( size ) +#endif + +#ifndef LAPACK_free +#define LAPACK_free( p ) free( p ) +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _LAPACKE_CONFIG_H_ */ diff --git a/lapack/cgo/lapacke/lapacke_mangling.h b/lapack/cgo/lapacke/lapacke_mangling.h new file mode 100644 index 00000000..6211fd14 --- /dev/null +++ b/lapack/cgo/lapacke/lapacke_mangling.h @@ -0,0 +1,17 @@ +#ifndef LAPACK_HEADER_INCLUDED +#define LAPACK_HEADER_INCLUDED + +#ifndef LAPACK_GLOBAL +#if defined(LAPACK_GLOBAL_PATTERN_LC) || defined(ADD_) +#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_ +#elif defined(LAPACK_GLOBAL_PATTERN_UC) || defined(UPPER) +#define LAPACK_GLOBAL(lcname,UCNAME) UCNAME +#elif defined(LAPACK_GLOBAL_PATTERN_MC) || defined(NOCHANGE) +#define LAPACK_GLOBAL(lcname,UCNAME) lcname +#else +#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_ +#endif +#endif + +#endif + diff --git a/lapack/cgo/lapacke/lapacke_utils.h b/lapack/cgo/lapacke/lapacke_utils.h new file mode 100644 index 00000000..a9236d23 --- /dev/null +++ b/lapack/cgo/lapacke/lapacke_utils.h @@ -0,0 +1,579 @@ +/***************************************************************************** + Copyright (c) 2014, Intel Corp. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************** +* Contents: Native C interface to LAPACK utility functions +* Author: Intel Corporation +* Created in January, 2010 +*****************************************************************************/ + +#ifndef _LAPACKE_UTILS_H_ +#define _LAPACKE_UTILS_H_ + +#include "lapacke.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef ABS +#define ABS(x) (((x) < 0) ? -(x) : (x)) +#endif +#ifndef MAX +#define MAX(x,y) (((x) > (y)) ? (x) : (y)) +#endif +#ifndef MIN +#define MIN(x,y) (((x) < (y)) ? (x) : (y)) +#endif +#ifndef MAX3 +#define MAX3(x,y,z) (((x) > MAX(y,z)) ? (x) : MAX(y,z)) +#endif +#ifndef MIN3 +#define MIN3(x,y,z) (((x) < MIN(y,z)) ? (x) : MIN(y,z)) +#endif + +#define IS_S_NONZERO(x) ( (x) < 0 || (x) > 0 ) +#define IS_D_NONZERO(x) ( (x) < 0 || (x) > 0 ) +#define IS_C_NONZERO(x) ( IS_S_NONZERO(*((float*)&x)) || \ + IS_S_NONZERO(*(((float*)&x)+1)) ) +#define IS_Z_NONZERO(x) ( IS_D_NONZERO(*((double*)&x)) || \ + IS_D_NONZERO(*(((double*)&x)+1)) ) + +/* Error handler */ +void LAPACKE_xerbla( const char *name, lapack_int info ); + +/* Compare two chars (case-insensitive) */ +lapack_logical LAPACKE_lsame( char ca, char cb ); + +/* Functions to convert column-major to row-major 2d arrays and vice versa. */ +void LAPACKE_cgb_trans( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_cge_trans( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* in, lapack_int ldin, + lapack_complex_float* out, lapack_int ldout ); +void LAPACKE_cgg_trans( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_float* in, lapack_int ldin, + lapack_complex_float* out, lapack_int ldout ); +void LAPACKE_chb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_che_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_chp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_chs_trans( int matrix_layout, lapack_int n, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_cpb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_cpf_trans( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_cpo_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_cpp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_csp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_csy_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_ctb_trans( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); +void LAPACKE_ctf_trans( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_ctp_trans( int matrix_layout, char uplo, char diag, + lapack_int n, const lapack_complex_float *in, + lapack_complex_float *out ); +void LAPACKE_ctr_trans( int matrix_layout, char uplo, char diag, lapack_int n, + const lapack_complex_float *in, lapack_int ldin, + lapack_complex_float *out, lapack_int ldout ); + +void LAPACKE_dgb_trans( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dge_trans( int matrix_layout, lapack_int m, lapack_int n, + const double* in, lapack_int ldin, + double* out, lapack_int ldout ); +void LAPACKE_dgg_trans( int matrix_layout, lapack_int m, lapack_int n, + const double* in, lapack_int ldin, + double* out, lapack_int ldout ); +void LAPACKE_dhs_trans( int matrix_layout, lapack_int n, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dpb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dpf_trans( int matrix_layout, char transr, char uplo, + lapack_int n, const double *in, + double *out ); +void LAPACKE_dpo_trans( int matrix_layout, char uplo, lapack_int n, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dpp_trans( int matrix_layout, char uplo, lapack_int n, + const double *in, + double *out ); +void LAPACKE_dsb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dsp_trans( int matrix_layout, char uplo, lapack_int n, + const double *in, + double *out ); +void LAPACKE_dsy_trans( int matrix_layout, char uplo, lapack_int n, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dtb_trans( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); +void LAPACKE_dtf_trans( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, const double *in, + double *out ); +void LAPACKE_dtp_trans( int matrix_layout, char uplo, char diag, + lapack_int n, const double *in, + double *out ); +void LAPACKE_dtr_trans( int matrix_layout, char uplo, char diag, lapack_int n, + const double *in, lapack_int ldin, + double *out, lapack_int ldout ); + +void LAPACKE_sgb_trans( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_sge_trans( int matrix_layout, lapack_int m, lapack_int n, + const float* in, lapack_int ldin, + float* out, lapack_int ldout ); +void LAPACKE_sgg_trans( int matrix_layout, lapack_int m, lapack_int n, + const float* in, lapack_int ldin, + float* out, lapack_int ldout ); +void LAPACKE_shs_trans( int matrix_layout, lapack_int n, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_spb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_spf_trans( int matrix_layout, char transr, char uplo, + lapack_int n, const float *in, + float *out ); +void LAPACKE_spo_trans( int matrix_layout, char uplo, lapack_int n, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_spp_trans( int matrix_layout, char uplo, lapack_int n, + const float *in, + float *out ); +void LAPACKE_ssb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_ssp_trans( int matrix_layout, char uplo, lapack_int n, + const float *in, + float *out ); +void LAPACKE_ssy_trans( int matrix_layout, char uplo, lapack_int n, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_stb_trans( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); +void LAPACKE_stf_trans( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, const float *in, + float *out ); +void LAPACKE_stp_trans( int matrix_layout, char uplo, char diag, + lapack_int n, const float *in, + float *out ); +void LAPACKE_str_trans( int matrix_layout, char uplo, char diag, lapack_int n, + const float *in, lapack_int ldin, + float *out, lapack_int ldout ); + +void LAPACKE_zgb_trans( int matrix_layout, lapack_int m, lapack_int n, + lapack_int kl, lapack_int ku, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zge_trans( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* in, lapack_int ldin, + lapack_complex_double* out, lapack_int ldout ); +void LAPACKE_zgg_trans( int matrix_layout, lapack_int m, lapack_int n, + const lapack_complex_double* in, lapack_int ldin, + lapack_complex_double* out, lapack_int ldout ); +void LAPACKE_zhb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zhe_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zhp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_zhs_trans( int matrix_layout, lapack_int n, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zpb_trans( int matrix_layout, char uplo, lapack_int n, + lapack_int kd, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zpf_trans( int matrix_layout, char transr, char uplo, + lapack_int n, const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_zpo_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_zpp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_zsp_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_zsy_trans( int matrix_layout, char uplo, lapack_int n, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_ztb_trans( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); +void LAPACKE_ztf_trans( int matrix_layout, char transr, char uplo, char diag, + lapack_int n, const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_ztp_trans( int matrix_layout, char uplo, char diag, + lapack_int n, const lapack_complex_double *in, + lapack_complex_double *out ); +void LAPACKE_ztr_trans( int matrix_layout, char uplo, char diag, lapack_int n, + const lapack_complex_double *in, lapack_int ldin, + lapack_complex_double *out, lapack_int ldout ); + +/* NaN checkers */ +#define LAPACK_SISNAN( x ) ( x != x ) +#define LAPACK_DISNAN( x ) ( x != x ) +#define LAPACK_CISNAN( x ) ( LAPACK_SISNAN(*((float*) &x)) || \ + LAPACK_SISNAN(*(((float*) &x)+1)) ) +#define LAPACK_ZISNAN( x ) ( LAPACK_DISNAN(*((double*)&x)) || \ + LAPACK_DISNAN(*(((double*)&x)+1)) ) + +/* NaN checkers for vectors */ +lapack_logical LAPACKE_c_nancheck( lapack_int n, + const lapack_complex_float *x, + lapack_int incx ); +lapack_logical LAPACKE_d_nancheck( lapack_int n, + const double *x, + lapack_int incx ); +lapack_logical LAPACKE_s_nancheck( lapack_int n, + const float *x, + lapack_int incx ); +lapack_logical LAPACKE_z_nancheck( lapack_int n, + const lapack_complex_double *x, + lapack_int incx ); +/* NaN checkers for matrices */ +lapack_logical LAPACKE_cgb_nancheck( int matrix_layout, lapack_int m, + lapack_int n, lapack_int kl, + lapack_int ku, + const lapack_complex_float *ab, + lapack_int ldab ); +lapack_logical LAPACKE_cge_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_cgg_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_cgt_nancheck( lapack_int n, + const lapack_complex_float *dl, + const lapack_complex_float *d, + const lapack_complex_float *du ); +lapack_logical LAPACKE_chb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const lapack_complex_float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_che_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_chp_nancheck( lapack_int n, + const lapack_complex_float *ap ); +lapack_logical LAPACKE_chs_nancheck( int matrix_layout, lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_cpb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const lapack_complex_float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_cpf_nancheck( lapack_int n, + const lapack_complex_float *a ); +lapack_logical LAPACKE_cpo_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_cpp_nancheck( lapack_int n, + const lapack_complex_float *ap ); +lapack_logical LAPACKE_cpt_nancheck( lapack_int n, + const float *d, + const lapack_complex_float *e ); +lapack_logical LAPACKE_csp_nancheck( lapack_int n, + const lapack_complex_float *ap ); +lapack_logical LAPACKE_cst_nancheck( lapack_int n, + const lapack_complex_float *d, + const lapack_complex_float *e ); +lapack_logical LAPACKE_csy_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); +lapack_logical LAPACKE_ctb_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_ctf_nancheck( int matrix_layout, char transr, + char uplo, char diag, + lapack_int n, + const lapack_complex_float *a ); +lapack_logical LAPACKE_ctp_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const lapack_complex_float *ap ); +lapack_logical LAPACKE_ctr_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const lapack_complex_float *a, + lapack_int lda ); + +lapack_logical LAPACKE_dgb_nancheck( int matrix_layout, lapack_int m, + lapack_int n, lapack_int kl, + lapack_int ku, + const double *ab, + lapack_int ldab ); +lapack_logical LAPACKE_dge_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const double *a, + lapack_int lda ); +lapack_logical LAPACKE_dgg_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const double *a, + lapack_int lda ); +lapack_logical LAPACKE_dgt_nancheck( lapack_int n, + const double *dl, + const double *d, + const double *du ); +lapack_logical LAPACKE_dhs_nancheck( int matrix_layout, lapack_int n, + const double *a, + lapack_int lda ); +lapack_logical LAPACKE_dpb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_dpf_nancheck( lapack_int n, + const double *a ); +lapack_logical LAPACKE_dpo_nancheck( int matrix_layout, char uplo, + lapack_int n, + const double *a, + lapack_int lda ); +lapack_logical LAPACKE_dpp_nancheck( lapack_int n, + const double *ap ); +lapack_logical LAPACKE_dpt_nancheck( lapack_int n, + const double *d, + const double *e ); +lapack_logical LAPACKE_dsb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_dsp_nancheck( lapack_int n, + const double *ap ); +lapack_logical LAPACKE_dst_nancheck( lapack_int n, + const double *d, + const double *e ); +lapack_logical LAPACKE_dsy_nancheck( int matrix_layout, char uplo, + lapack_int n, + const double *a, + lapack_int lda ); +lapack_logical LAPACKE_dtb_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_dtf_nancheck( int matrix_layout, char transr, + char uplo, char diag, + lapack_int n, + const double *a ); +lapack_logical LAPACKE_dtp_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const double *ap ); +lapack_logical LAPACKE_dtr_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const double *a, + lapack_int lda ); + +lapack_logical LAPACKE_sgb_nancheck( int matrix_layout, lapack_int m, + lapack_int n, lapack_int kl, + lapack_int ku, + const float *ab, + lapack_int ldab ); +lapack_logical LAPACKE_sge_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const float *a, + lapack_int lda ); +lapack_logical LAPACKE_sgg_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const float *a, + lapack_int lda ); +lapack_logical LAPACKE_sgt_nancheck( lapack_int n, + const float *dl, + const float *d, + const float *du ); +lapack_logical LAPACKE_shs_nancheck( int matrix_layout, lapack_int n, + const float *a, + lapack_int lda ); +lapack_logical LAPACKE_spb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_spf_nancheck( lapack_int n, + const float *a ); +lapack_logical LAPACKE_spo_nancheck( int matrix_layout, char uplo, + lapack_int n, + const float *a, + lapack_int lda ); +lapack_logical LAPACKE_spp_nancheck( lapack_int n, + const float *ap ); +lapack_logical LAPACKE_spt_nancheck( lapack_int n, + const float *d, + const float *e ); +lapack_logical LAPACKE_ssb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_ssp_nancheck( lapack_int n, + const float *ap ); +lapack_logical LAPACKE_sst_nancheck( lapack_int n, + const float *d, + const float *e ); +lapack_logical LAPACKE_ssy_nancheck( int matrix_layout, char uplo, + lapack_int n, + const float *a, + lapack_int lda ); +lapack_logical LAPACKE_stb_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const float* ab, + lapack_int ldab ); +lapack_logical LAPACKE_stf_nancheck( int matrix_layout, char transr, + char uplo, char diag, + lapack_int n, + const float *a ); +lapack_logical LAPACKE_stp_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const float *ap ); +lapack_logical LAPACKE_str_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const float *a, + lapack_int lda ); + +lapack_logical LAPACKE_zgb_nancheck( int matrix_layout, lapack_int m, + lapack_int n, lapack_int kl, + lapack_int ku, + const lapack_complex_double *ab, + lapack_int ldab ); +lapack_logical LAPACKE_zge_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_zgg_nancheck( int matrix_layout, lapack_int m, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_zgt_nancheck( lapack_int n, + const lapack_complex_double *dl, + const lapack_complex_double *d, + const lapack_complex_double *du ); +lapack_logical LAPACKE_zhb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const lapack_complex_double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_zhe_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_zhp_nancheck( lapack_int n, + const lapack_complex_double *ap ); +lapack_logical LAPACKE_zhs_nancheck( int matrix_layout, lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_zpb_nancheck( int matrix_layout, char uplo, + lapack_int n, lapack_int kd, + const lapack_complex_double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_zpf_nancheck( lapack_int n, + const lapack_complex_double *a ); +lapack_logical LAPACKE_zpo_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_zpp_nancheck( lapack_int n, + const lapack_complex_double *ap ); +lapack_logical LAPACKE_zpt_nancheck( lapack_int n, + const double *d, + const lapack_complex_double *e ); +lapack_logical LAPACKE_zsp_nancheck( lapack_int n, + const lapack_complex_double *ap ); +lapack_logical LAPACKE_zst_nancheck( lapack_int n, + const lapack_complex_double *d, + const lapack_complex_double *e ); +lapack_logical LAPACKE_zsy_nancheck( int matrix_layout, char uplo, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); +lapack_logical LAPACKE_ztb_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, lapack_int kd, + const lapack_complex_double* ab, + lapack_int ldab ); +lapack_logical LAPACKE_ztf_nancheck( int matrix_layout, char transr, + char uplo, char diag, + lapack_int n, + const lapack_complex_double *a ); +lapack_logical LAPACKE_ztp_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const lapack_complex_double *ap ); +lapack_logical LAPACKE_ztr_nancheck( int matrix_layout, char uplo, char diag, + lapack_int n, + const lapack_complex_double *a, + lapack_int lda ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _LAPACKE_UTILS_H_ */ diff --git a/lapack/internal/testdata/dlahr2test/main.go b/lapack/internal/testdata/dlahr2test/main.go new file mode 100644 index 00000000..2b146f83 --- /dev/null +++ b/lapack/internal/testdata/dlahr2test/main.go @@ -0,0 +1,101 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// dlahr2test generates test data for Dlahr2. Test cases are stored in +// gzip-compressed JSON file testlapack/testdata/dlahr2data.json.gz which is +// read during testing by testlapack/dlahr2.go. +// +// This program uses cgo to call Fortran version of DLAHR2. Therefore, matrices +// passed to the Fortran routine are in column-major format but are written into +// the output file in row-major format. +package main + +import ( + "compress/gzip" + "encoding/json" + "log" + "math/rand" + "os" + "path/filepath" + + "github.com/gonum/lapack/internal/testdata/netlib" +) + +type Dlahr2Test struct { + N, K, NB int + A []float64 + + AWant []float64 + TWant []float64 + YWant []float64 + TauWant []float64 +} + +func main() { + file, err := os.Create(filepath.FromSlash("../../../testlapack/testdata/dlahr2data.json.gz")) + if err != nil { + log.Fatal(err) + } + defer file.Close() + w := gzip.NewWriter(file) + + rnd := rand.New(rand.NewSource(1)) + + var tests []Dlahr2Test + for _, n := range []int{4, 5, 6, 7, 11} { + for k := 0; k <= n/2; k++ { + for nb := 1; nb <= k; nb++ { + ain := genrand(n, n-k+1, rnd) + a := make([]float64, len(ain)) + copy(a, ain) + + t := genrand(nb, nb, rnd) + y := genrand(n, nb, rnd) + tau := genrand(nb, 1, rnd) + + netlib.Dlahr2(n, k, nb, a, n, tau, t, nb, y, n) + + tests = append(tests, Dlahr2Test{ + N: n, + K: k, + NB: nb, + A: rowMajor(n, n-k+1, ain), + AWant: rowMajor(n, n-k+1, a), + TWant: rowMajor(nb, nb, t), + YWant: rowMajor(n, nb, y), + TauWant: tau, + }) + } + } + } + json.NewEncoder(w).Encode(tests) + + err = w.Close() + if err != nil { + log.Fatal(err) + } +} + +// genrand returns a general r×c matrix with random entries. +func genrand(r, c int, rnd *rand.Rand) []float64 { + m := make([]float64, r*c) + for i := range m { + m[i] = rnd.NormFloat64() + } + return m +} + +// rowMajor returns the given r×c column-major matrix a in row-major format. +func rowMajor(r, c int, a []float64) []float64 { + if len(a) != r*c { + panic("testdata: slice length mismatch") + } + m := make([]float64, len(a)) + for i := 0; i < r; i++ { + for j := 0; j < c; j++ { + m[i*c+j] = a[i+j*r] + } + } + return m +} diff --git a/lapack/internal/testdata/dlaqr5test/main.go b/lapack/internal/testdata/dlaqr5test/main.go new file mode 100644 index 00000000..1ef02faf --- /dev/null +++ b/lapack/internal/testdata/dlaqr5test/main.go @@ -0,0 +1,185 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This program generates test data for Dlaqr5. Test cases are stored in +// gzip-compressed JSON file testlapack/testdata/dlaqr5data.json.gz which is +// read during testing by testlapack/dlaqr5.go. +// +// This program uses cgo to call Fortran version of DLAQR5. Therefore, matrices +// passed to the Fortran routine are in column-major format but are written into +// the output file in row-major format. +package main + +import ( + "compress/gzip" + "encoding/json" + "log" + "math/rand" + "os" + "path/filepath" + + "github.com/gonum/lapack/internal/testdata/netlib" +) + +type Dlaqr5Test struct { + WantT bool + N int + NShifts int + KTop, KBot int + ShiftR, ShiftI []float64 + H []float64 + + HWant []float64 + ZWant []float64 +} + +func main() { + file, err := os.Create(filepath.FromSlash("../../../testlapack/testdata/dlaqr5data.json.gz")) + if err != nil { + log.Fatal(err) + } + defer file.Close() + w := gzip.NewWriter(file) + + rnd := rand.New(rand.NewSource(1)) + + var tests []Dlaqr5Test + for _, wantt := range []bool{true, false} { + for _, n := range []int{2, 3, 4, 5, 6, 7, 11} { + for k := 0; k <= min(5, n); k++ { + npairs := k + if npairs == 0 { + npairs = 2 * n + } + for ktop := 0; ktop < n-1; ktop++ { + for kbot := ktop + 1; kbot < n; kbot++ { + sr, si := shiftpairs(npairs, rnd) + nshfts := len(sr) + + v := genrand(nshfts/2, 3, rnd) + u := genrand(3*nshfts-3, 3*nshfts-3, rnd) + wh := genrand(3*nshfts-3, n, rnd) + nh := n + wv := genrand(n, 3*nshfts-3, rnd) + nv := n + + h := hessrand(n, rnd) + if ktop > 0 { + h[ktop+(ktop-1)*n] = 0 + } + if kbot < n-1 { + h[kbot+1+kbot*n] = 0 + } + hin := make([]float64, len(h)) + copy(hin, h) + z := eye(n) + + netlib.Dlaqr5(wantt, true, 2, + n, ktop+1, kbot+1, + nshfts, sr, si, + h, n, + 1, n, z, n, + v, 3, + u, 3*nshfts-3, + nh, wh, nh, + nv, wv, 3*nshfts-3) + + tests = append(tests, Dlaqr5Test{ + WantT: wantt, + N: n, + NShifts: nshfts, + KTop: ktop, + KBot: kbot, + ShiftR: sr, + ShiftI: si, + H: rowMajor(n, n, hin), + HWant: rowMajor(n, n, h), + ZWant: rowMajor(n, n, z), + }) + } + } + } + } + } + json.NewEncoder(w).Encode(tests) + + err = w.Close() + if err != nil { + log.Fatal(err) + } +} + +// genrand returns a general r×c matrix with random entries. +func genrand(r, c int, rnd *rand.Rand) []float64 { + m := make([]float64, r*c) + for i := range m { + m[i] = rnd.NormFloat64() + } + return m +} + +// eye returns an identity matrix of order n. +func eye(n int) []float64 { + m := make([]float64, n*n) + for i := 0; i < n*n; i += n + 1 { + m[i] = 1 + } + return m +} + +// hessrand returns a Hessenberg matrix of order n with random non-zero entries +// in column-major format. +func hessrand(n int, rnd *rand.Rand) []float64 { + h := make([]float64, n*n) + for j := 0; j < n; j++ { + for i := 0; i <= min(j+1, n-1); i++ { + h[i+j*n] = rnd.NormFloat64() + } + } + return h +} + +// shiftpairs generates k real and complex conjugate shift pairs. That is, the +// length of sr and si is 2*k. +func shiftpairs(k int, rnd *rand.Rand) (sr, si []float64) { + sr = make([]float64, 2*k) + si = make([]float64, 2*k) + for i := 0; i < len(sr); { + if rnd.Float64() < 0.5 || i == len(sr)-1 { + sr[i] = rnd.NormFloat64() + i++ + continue + } + // Generate a complex conjugate pair. + r := rnd.NormFloat64() + c := rnd.NormFloat64() + sr[i] = r + si[i] = c + sr[i+1] = r + si[i+1] = -c + i += 2 + } + return sr, si +} + +// rowMajor returns the given r×c column-major matrix a in row-major format. +func rowMajor(r, c int, a []float64) []float64 { + if len(a) != r*c { + panic("testdata: slice length mismatch") + } + m := make([]float64, len(a)) + for i := 0; i < r; i++ { + for j := 0; j < c; j++ { + m[i*c+j] = a[i+j*r] + } + } + return m +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/lapack/internal/testdata/dlasqtest/Makefile b/lapack/internal/testdata/dlasqtest/Makefile new file mode 100644 index 00000000..f9f94446 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/Makefile @@ -0,0 +1,27 @@ +FC = gfortran +FFLAGS = -O2 + +targets = testdlasq1 testdlasq2 testdlasq3 testdlasq4 +objects = dlamch.o lsame.o xerbla.o ieeeck.o iparmq.o ilaenv.o dlasrt.o \ + dlaisnan.o disnan.o dlasq6.o dlasq5.o dlasq4.o dlasq3.o dlasq2.o + +default : $(targets) +.PHONY : default + +testdlasq1 : testdlasq1.o $(objects) dcopy.o dlas2.o dlascl.o dlasq1.o + +testdlasq2 : testdlasq2.o $(objects) + +testdlasq3 : testdlasq3.o $(objects) + +testdlasq4 : testdlasq4.o $(objects) + +% : %.o + $(FC) $(FFLAGS) $^ -o $@ + +%.o : %.f90 + $(FC) $(FFLAGS) -c -o $@ $< + +clean : + rm -f *.o $(targets) *.txt +.PHONY : clean \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/Readme.md b/lapack/internal/testdata/dlasqtest/Readme.md new file mode 100644 index 00000000..65c47448 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/Readme.md @@ -0,0 +1,23 @@ +This set of codes generates tests for the dlasq* routines. + +The high level routines are testdlasq*.f90. The testdlasq*.f90 routines are intended in combination with the routines in gonum/lapack/testlapack. +During execution, these high-level routines record the inputs and outputs +to the executed subroutines. For example, testdlasq3, when executed, +generates files gen4tests.txt and gen5tests.txt that record the inputs +and outputs to the evaluation of dlasq4 and dlasq5 respectively. The output +format in gen*tests.txt is the struct literal that matches the respective test +in gonum/lapack/testlapack/dlasq*.go. Thus, these generated tests can be copied +into the testing routine to test the native implementation. + +The testing routines in testlapack have code for generating inputs for these +fortran routines. Typically, one would isolate the particular failing test, +and modify the testlapack routine to print it to the terminal, for example +in testlapack/dlasq3.go one might add + + printDlasq3FortranInput(test) + os.Exit(1) + +This prints variable initialization for dlasq3 routine to the terminal, which +can be copied and pasted into testdlasq3.f90. Please note that this process +is not completely automated. Some of the other initialization may need to +change, particularly the size allocation of the data array(s). \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/dcopy.f b/lapack/internal/testdata/dlasqtest/dcopy.f new file mode 100644 index 00000000..d9d5ac7a --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dcopy.f @@ -0,0 +1,115 @@ +*> \brief \b DCOPY +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* +* .. Scalar Arguments .. +* INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION DX(*),DY(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DCOPY copies a vector, x, to a vector, y. +*> uses unrolled loops for increments equal to one. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> jack dongarra, linpack, 3/11/78. +*> modified 12/3/93, array(1) declarations changed to array(*) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,7) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DX(I) + END DO + IF (N.LT.7) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,7 + DY(I) = DX(I) + DY(I+1) = DX(I+1) + DY(I+2) = DX(I+2) + DY(I+3) = DX(I+3) + DY(I+4) = DX(I+4) + DY(I+5) = DX(I+5) + DY(I+6) = DX(I+6) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/lapack/internal/testdata/dlasqtest/disnan.f b/lapack/internal/testdata/dlasqtest/disnan.f new file mode 100644 index 00000000..355b8279 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/disnan.f @@ -0,0 +1,80 @@ +*> \brief \b DISNAN tests input for NaN. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DISNAN( DIN ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DISNAN returns .TRUE. if its argument is NaN, and .FALSE. +*> otherwise. To be replaced by the Fortran 2003 intrinsic in the +*> future. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN +*> \verbatim +*> DIN is DOUBLE PRECISION +*> Input to test for NaN. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DISNAN( DIN ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL DLAISNAN + EXTERNAL DLAISNAN +* .. +* .. Executable Statements .. + DISNAN = DLAISNAN(DIN,DIN) + RETURN + END diff --git a/lapack/internal/testdata/dlasqtest/dlaisnan.f b/lapack/internal/testdata/dlasqtest/dlaisnan.f new file mode 100644 index 00000000..58595c5c --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlaisnan.f @@ -0,0 +1,91 @@ +*> \brief \b DLAISNAN tests input for NaN by comparing two arguments for inequality. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN1, DIN2 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is not for general use. It exists solely to avoid +*> over-optimization in DISNAN. +*> +*> DLAISNAN checks for NaNs by comparing its two arguments for +*> inequality. NaN is the only floating-point value where NaN != NaN +*> returns .TRUE. To check for NaNs, pass the same variable as both +*> arguments. +*> +*> A compiler must assume that the two arguments are +*> not the same variable, and the test will not be optimized away. +*> Interprocedural or whole-program optimization may delete this +*> test. The ISNAN functions will be replaced by the correct +*> Fortran 03 intrinsic once the intrinsic is widely available. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN1 +*> \verbatim +*> DIN1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] DIN2 +*> \verbatim +*> DIN2 is DOUBLE PRECISION +*> Two numbers to compare for inequality. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN1, DIN2 +* .. +* +* ===================================================================== +* +* .. Executable Statements .. + DLAISNAN = (DIN1.NE.DIN2) + RETURN + END diff --git a/lapack/internal/testdata/dlasqtest/dlamch.f b/lapack/internal/testdata/dlasqtest/dlamch.f new file mode 100644 index 00000000..25c2c8e6 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlamch.f @@ -0,0 +1,193 @@ +*> \brief \b DLAMCH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAMCH determines double precision machine parameters. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CMACH +*> \verbatim +*> Specifies the value to be returned by DLAMCH: +*> = 'E' or 'e', DLAMCH := eps +*> = 'S' or 's , DLAMCH := sfmin +*> = 'B' or 'b', DLAMCH := base +*> = 'P' or 'p', DLAMCH := eps*base +*> = 'N' or 'n', DLAMCH := t +*> = 'R' or 'r', DLAMCH := rnd +*> = 'M' or 'm', DLAMCH := emin +*> = 'U' or 'u', DLAMCH := rmin +*> = 'L' or 'l', DLAMCH := emax +*> = 'O' or 'o', DLAMCH := rmax +*> where +*> eps = relative machine precision +*> sfmin = safe minimum, such that 1/sfmin does not overflow +*> base = base of the machine +*> prec = eps*base +*> t = number of (base) digits in the mantissa +*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +*> emin = minimum exponent before (gradual) underflow +*> rmin = underflow threshold - base**(emin-1) +*> emax = largest exponent before overflow +*> rmax = overflow threshold - (base**emax)*(1-eps) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, + $ MINEXPONENT, RADIX, TINY +* .. +* .. Executable Statements .. +* +* +* Assume rounding, not chopping. Always. +* + RND = ONE +* + IF( ONE.EQ.RND ) THEN + EPS = EPSILON(ZERO) * 0.5 + ELSE + EPS = EPSILON(ZERO) + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + SFMIN = TINY(ZERO) + SMALL = ONE / HUGE(ZERO) + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = EPS * RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = DIGITS(ZERO) + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = MINEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = tiny(zero) + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = MAXEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = HUGE(ZERO) + ELSE + RMACH = ZERO + END IF +* + DLAMCH = RMACH + RETURN +* +* End of DLAMCH +* + END +************************************************************************ +*> \brief \b DLAMC3 +*> \details +*> \b Purpose: +*> \verbatim +*> DLAMC3 is intended to force A and B to be stored prior to doing +*> the addition of A and B , for use in situations where optimizers +*> might hold one of these in a register. +*> \endverbatim +*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. +*> \date November 2011 +*> \ingroup auxOTHERauxiliary +*> +*> \param[in] A +*> \verbatim +*> A is a DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is a DOUBLE PRECISION +*> The values A and B. +*> \endverbatim +*> + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ diff --git a/lapack/internal/testdata/dlasqtest/dlas2.f b/lapack/internal/testdata/dlasqtest/dlas2.f new file mode 100644 index 00000000..81077f94 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlas2.f @@ -0,0 +1,183 @@ +*> \brief \b DLAS2 computes singular values of a 2-by-2 triangular matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAS2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION F, G, H, SSMAX, SSMIN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAS2 computes the singular values of the 2-by-2 matrix +*> [ F G ] +*> [ 0 H ]. +*> On return, SSMIN is the smaller singular value and SSMAX is the +*> larger singular value. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] F +*> \verbatim +*> F is DOUBLE PRECISION +*> The (1,1) element of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[in] G +*> \verbatim +*> G is DOUBLE PRECISION +*> The (1,2) element of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[in] H +*> \verbatim +*> H is DOUBLE PRECISION +*> The (2,2) element of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[out] SSMIN +*> \verbatim +*> SSMIN is DOUBLE PRECISION +*> The smaller singular value. +*> \endverbatim +*> +*> \param[out] SSMAX +*> \verbatim +*> SSMAX is DOUBLE PRECISION +*> The larger singular value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Barring over/underflow, all output quantities are correct to within +*> a few units in the last place (ulps), even in the absence of a guard +*> digit in addition/subtraction. +*> +*> In IEEE arithmetic, the code works correctly if one matrix element is +*> infinite. +*> +*> Overflow will not occur unless the largest singular value itself +*> overflows, or is within a few ulps of overflow. (On machines with +*> partial overflow, like the Cray, overflow may occur if the largest +*> singular value is within a factor of 2 of overflow.) +*> +*> Underflow is harmless if underflow is gradual. Otherwise, results +*> may correspond to a matrix modified by perturbations of size near +*> the underflow threshold. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION F, G, H, SSMAX, SSMIN +* .. +* +* ==================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AS, AT, AU, C, FA, FHMN, FHMX, GA, HA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + FA = ABS( F ) + GA = ABS( G ) + HA = ABS( H ) + FHMN = MIN( FA, HA ) + FHMX = MAX( FA, HA ) + IF( FHMN.EQ.ZERO ) THEN + SSMIN = ZERO + IF( FHMX.EQ.ZERO ) THEN + SSMAX = GA + ELSE + SSMAX = MAX( FHMX, GA )*SQRT( ONE+ + $ ( MIN( FHMX, GA ) / MAX( FHMX, GA ) )**2 ) + END IF + ELSE + IF( GA.LT.FHMX ) THEN + AS = ONE + FHMN / FHMX + AT = ( FHMX-FHMN ) / FHMX + AU = ( GA / FHMX )**2 + C = TWO / ( SQRT( AS*AS+AU )+SQRT( AT*AT+AU ) ) + SSMIN = FHMN*C + SSMAX = FHMX / C + ELSE + AU = FHMX / GA + IF( AU.EQ.ZERO ) THEN +* +* Avoid possible harmful underflow if exponent range +* asymmetric (true SSMIN may not underflow even if +* AU underflows) +* + SSMIN = ( FHMN*FHMX ) / GA + SSMAX = GA + ELSE + AS = ONE + FHMN / FHMX + AT = ( FHMX-FHMN ) / FHMX + C = ONE / ( SQRT( ONE+( AS*AU )**2 )+ + $ SQRT( ONE+( AT*AU )**2 ) ) + SSMIN = ( FHMN*C )*AU + SSMIN = SSMIN + SSMIN + SSMAX = GA / ( C+C ) + END IF + END IF + END IF + RETURN +* +* End of DLAS2 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlascl.f b/lapack/internal/testdata/dlasqtest/dlascl.f new file mode 100644 index 00000000..9b9b33c0 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlascl.f @@ -0,0 +1,364 @@ +*> \brief \b DLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASCL + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER TYPE +* INTEGER INFO, KL, KU, LDA, M, N +* DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASCL multiplies the M by N real matrix A by the real scalar +*> CTO/CFROM. This is done without over/underflow as long as the final +*> result CTO*A(I,J)/CFROM does not over/underflow. TYPE specifies that +*> A may be full, upper triangular, lower triangular, upper Hessenberg, +*> or banded. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] TYPE +*> \verbatim +*> TYPE is CHARACTER*1 +*> TYPE indices the storage type of the input matrix. +*> = 'G': A is a full matrix. +*> = 'L': A is a lower triangular matrix. +*> = 'U': A is an upper triangular matrix. +*> = 'H': A is an upper Hessenberg matrix. +*> = 'B': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the lower +*> half stored. +*> = 'Q': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the upper +*> half stored. +*> = 'Z': A is a band matrix with lower bandwidth KL and upper +*> bandwidth KU. See DGBTRF for storage details. +*> \endverbatim +*> +*> \param[in] KL +*> \verbatim +*> KL is INTEGER +*> The lower bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] KU +*> \verbatim +*> KU is INTEGER +*> The upper bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] CFROM +*> \verbatim +*> CFROM is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] CTO +*> \verbatim +*> CTO is DOUBLE PRECISION +*> +*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed +*> without over/underflow if the final result CTO*A(I,J)/CFROM +*> can be represented without over/underflow. CFROM must be +*> nonzero. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The matrix to be multiplied by CTO/CFROM. See TYPE for the +*> storage type. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> 0 - successful exit +*> <0 - if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER TYPE + INTEGER INFO, KL, KU, LDA, M, N + DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL DONE + INTEGER I, ITYPE, J, K1, K2, K3, K4 + DOUBLE PRECISION BIGNUM, CFROM1, CFROMC, CTO1, CTOC, MUL, SMLNUM +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + DOUBLE PRECISION DLAMCH + EXTERNAL LSAME, DLAMCH, DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 +* + IF( LSAME( TYPE, 'G' ) ) THEN + ITYPE = 0 + ELSE IF( LSAME( TYPE, 'L' ) ) THEN + ITYPE = 1 + ELSE IF( LSAME( TYPE, 'U' ) ) THEN + ITYPE = 2 + ELSE IF( LSAME( TYPE, 'H' ) ) THEN + ITYPE = 3 + ELSE IF( LSAME( TYPE, 'B' ) ) THEN + ITYPE = 4 + ELSE IF( LSAME( TYPE, 'Q' ) ) THEN + ITYPE = 5 + ELSE IF( LSAME( TYPE, 'Z' ) ) THEN + ITYPE = 6 + ELSE + ITYPE = -1 + END IF +* + IF( ITYPE.EQ.-1 ) THEN + INFO = -1 + ELSE IF( CFROM.EQ.ZERO .OR. DISNAN(CFROM) ) THEN + INFO = -4 + ELSE IF( DISNAN(CTO) ) THEN + INFO = -5 + ELSE IF( M.LT.0 ) THEN + INFO = -6 + ELSE IF( N.LT.0 .OR. ( ITYPE.EQ.4 .AND. N.NE.M ) .OR. + $ ( ITYPE.EQ.5 .AND. N.NE.M ) ) THEN + INFO = -7 + ELSE IF( ITYPE.LE.3 .AND. LDA.LT.MAX( 1, M ) ) THEN + INFO = -9 + ELSE IF( ITYPE.GE.4 ) THEN + IF( KL.LT.0 .OR. KL.GT.MAX( M-1, 0 ) ) THEN + INFO = -2 + ELSE IF( KU.LT.0 .OR. KU.GT.MAX( N-1, 0 ) .OR. + $ ( ( ITYPE.EQ.4 .OR. ITYPE.EQ.5 ) .AND. KL.NE.KU ) ) + $ THEN + INFO = -3 + ELSE IF( ( ITYPE.EQ.4 .AND. LDA.LT.KL+1 ) .OR. + $ ( ITYPE.EQ.5 .AND. LDA.LT.KU+1 ) .OR. + $ ( ITYPE.EQ.6 .AND. LDA.LT.2*KL+KU+1 ) ) THEN + INFO = -9 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASCL', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 .OR. M.EQ.0 ) + $ RETURN +* +* Get machine parameters +* + SMLNUM = DLAMCH( 'S' ) + BIGNUM = ONE / SMLNUM +* + CFROMC = CFROM + CTOC = CTO +* + 10 CONTINUE + CFROM1 = CFROMC*SMLNUM + IF( CFROM1.EQ.CFROMC ) THEN +! CFROMC is an inf. Multiply by a correctly signed zero for +! finite CTOC, or a NaN if CTOC is infinite. + MUL = CTOC / CFROMC + DONE = .TRUE. + CTO1 = CTOC + ELSE + CTO1 = CTOC / BIGNUM + IF( CTO1.EQ.CTOC ) THEN +! CTOC is either 0 or an inf. In both cases, CTOC itself +! serves as the correct multiplication factor. + MUL = CTOC + DONE = .TRUE. + CFROMC = ONE + ELSE IF( ABS( CFROM1 ).GT.ABS( CTOC ) .AND. CTOC.NE.ZERO ) THEN + MUL = SMLNUM + DONE = .FALSE. + CFROMC = CFROM1 + ELSE IF( ABS( CTO1 ).GT.ABS( CFROMC ) ) THEN + MUL = BIGNUM + DONE = .FALSE. + CTOC = CTO1 + ELSE + MUL = CTOC / CFROMC + DONE = .TRUE. + END IF + END IF +* + IF( ITYPE.EQ.0 ) THEN +* +* Full matrix +* + DO 30 J = 1, N + DO 20 I = 1, M + A( I, J ) = A( I, J )*MUL + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( ITYPE.EQ.1 ) THEN +* +* Lower triangular matrix +* + DO 50 J = 1, N + DO 40 I = J, M + A( I, J ) = A( I, J )*MUL + 40 CONTINUE + 50 CONTINUE +* + ELSE IF( ITYPE.EQ.2 ) THEN +* +* Upper triangular matrix +* + DO 70 J = 1, N + DO 60 I = 1, MIN( J, M ) + A( I, J ) = A( I, J )*MUL + 60 CONTINUE + 70 CONTINUE +* + ELSE IF( ITYPE.EQ.3 ) THEN +* +* Upper Hessenberg matrix +* + DO 90 J = 1, N + DO 80 I = 1, MIN( J+1, M ) + A( I, J ) = A( I, J )*MUL + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( ITYPE.EQ.4 ) THEN +* +* Lower half of a symmetric band matrix +* + K3 = KL + 1 + K4 = N + 1 + DO 110 J = 1, N + DO 100 I = 1, MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 100 CONTINUE + 110 CONTINUE +* + ELSE IF( ITYPE.EQ.5 ) THEN +* +* Upper half of a symmetric band matrix +* + K1 = KU + 2 + K3 = KU + 1 + DO 130 J = 1, N + DO 120 I = MAX( K1-J, 1 ), K3 + A( I, J ) = A( I, J )*MUL + 120 CONTINUE + 130 CONTINUE +* + ELSE IF( ITYPE.EQ.6 ) THEN +* +* Band matrix +* + K1 = KL + KU + 2 + K2 = KL + 1 + K3 = 2*KL + KU + 1 + K4 = KL + KU + 1 + M + DO 150 J = 1, N + DO 140 I = MAX( K1-J, K2 ), MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 140 CONTINUE + 150 CONTINUE +* + END IF +* + IF( .NOT.DONE ) + $ GO TO 10 +* + RETURN +* +* End of DLASCL +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq1.f b/lapack/internal/testdata/dlasqtest/dlasq1.f new file mode 100644 index 00000000..f0847781 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq1.f @@ -0,0 +1,226 @@ +*> \brief \b DLASQ1 computes the singular values of a real square bidiagonal matrix. Used by sbdsqr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ1 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ1( N, D, E, WORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION D( * ), E( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ1 computes the singular values of a real N-by-N bidiagonal +*> matrix with diagonal D and off-diagonal E. The singular values +*> are computed to high relative accuracy, in the absence of +*> denormalization, underflow and overflow. The algorithm was first +*> presented in +*> +*> "Accurate singular values and differential qd algorithms" by K. V. +*> Fernando and B. N. Parlett, Numer. Math., Vol-67, No. 2, pp. 191-230, +*> 1994, +*> +*> and the present implementation is described in "An implementation of +*> the dqds Algorithm (Positive Case)", LAPACK Working Note. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of rows and columns in the matrix. N >= 0. +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> On entry, D contains the diagonal elements of the +*> bidiagonal matrix whose SVD is desired. On normal exit, +*> D contains the singular values in decreasing order. +*> \endverbatim +*> +*> \param[in,out] E +*> \verbatim +*> E is DOUBLE PRECISION array, dimension (N) +*> On entry, elements E(1:N-1) contain the off-diagonal elements +*> of the bidiagonal matrix whose SVD is desired. +*> On exit, E is overwritten. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (4*N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> > 0: the algorithm failed +*> = 1, a split was marked by a positive value in E +*> = 2, current block of Z not diagonalized after 100*N +*> iterations (in inner while loop) On exit D and E +*> represent a matrix with the same singular values +*> which the calling subroutine could use to finish the +*> computation, or even feed back into DLASQ1 +*> = 3, termination criterion of outer while loop not met +*> (program created more than N unreduced blocks) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASQ1( N, D, E, WORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. +* .. Local Scalars .. + INTEGER I, IINFO + DOUBLE PRECISION EPS, SCALE, SAFMIN, SIGMN, SIGMX +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DLAS2, DLASCL, DLASQ2, DLASRT, XERBLA +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. +* .. Executable Statements .. +* + INFO = 0 + IF( N.LT.0 ) THEN + INFO = -2 + CALL XERBLA( 'DLASQ1', -INFO ) + RETURN + ELSE IF( N.EQ.0 ) THEN + RETURN + ELSE IF( N.EQ.1 ) THEN + D( 1 ) = ABS( D( 1 ) ) + RETURN + ELSE IF( N.EQ.2 ) THEN + CALL DLAS2( D( 1 ), E( 1 ), D( 2 ), SIGMN, SIGMX ) + D( 1 ) = SIGMX + D( 2 ) = SIGMN + RETURN + END IF +* +* Estimate the largest singular value. +* + SIGMX = ZERO + DO 10 I = 1, N - 1 + D( I ) = ABS( D( I ) ) + SIGMX = MAX( SIGMX, ABS( E( I ) ) ) + 10 CONTINUE + D( N ) = ABS( D( N ) ) +* +* Early return if SIGMX is zero (matrix is already diagonal). +* + IF( SIGMX.EQ.ZERO ) THEN + CALL DLASRT( 'D', N, D, IINFO ) + RETURN + END IF +* + DO 20 I = 1, N + SIGMX = MAX( SIGMX, D( I ) ) + 20 CONTINUE +* +* Copy D and E into WORK (in the Z format) and scale (squaring the +* input data makes scaling by a power of the radix pointless). +* + EPS = DLAMCH( 'Precision' ) + SAFMIN = DLAMCH( 'Safe minimum' ) + SCALE = SQRT( EPS / SAFMIN ) + + CALL DCOPY( N, D, 1, WORK( 1 ), 2 ) + CALL DCOPY( N-1, E, 1, WORK( 2 ), 2 ) + CALL DLASCL( 'G', 0, 0, SIGMX, SCALE, 2*N-1, 1, WORK, 2*N-1, + $ IINFO ) +* +* Compute the q's and e's. +* + DO 30 I = 1, 2*N - 1 + WORK( I ) = WORK( I )**2 + 30 CONTINUE + WORK( 2*N ) = ZERO +* + + CALL DLASQ2( N, WORK, INFO ) +* + IF( INFO.EQ.0 ) THEN + DO 40 I = 1, N + D( I ) = SQRT( WORK( I ) ) + 40 CONTINUE + CALL DLASCL( 'G', 0, 0, SCALE, SIGMX, N, 1, D, N, IINFO ) + ELSE IF( INFO.EQ.2 ) THEN +* +* Maximum number of iterations exceeded. Move data from WORK +* into D and E so the calling subroutine can try to finish +* + DO I = 1, N + D( I ) = SQRT( WORK( 2*I-1 ) ) + E( I ) = SQRT( WORK( 2*I ) ) + END DO + CALL DLASCL( 'G', 0, 0, SCALE, SIGMX, N, 1, D, N, IINFO ) + CALL DLASCL( 'G', 0, 0, SCALE, SIGMX, N, 1, E, N, IINFO ) + END IF +* + RETURN +* +* End of DLASQ1 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq2.f b/lapack/internal/testdata/dlasqtest/dlasq2.f new file mode 100644 index 00000000..602dffc9 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq2.f @@ -0,0 +1,652 @@ +*> \brief \b DLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd Array Z to high relative accuracy. Used by sbdsqr and sstegr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ2( N, Z, INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Z( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ2 computes all the eigenvalues of the symmetric positive +*> definite tridiagonal matrix associated with the qd array Z to high +*> relative accuracy are computed to high relative accuracy, in the +*> absence of denormalization, underflow and overflow. +*> +*> To see the relation of Z to the tridiagonal matrix, let L be a +*> unit lower bidiagonal matrix with subdiagonals Z(2,4,6,,..) and +*> let U be an upper bidiagonal matrix with 1's above and diagonal +*> Z(1,3,5,,..). The tridiagonal is L*U or, if you prefer, the +*> symmetric tridiagonal to which it is similar. +*> +*> Note : DLASQ2 defines a logical variable, IEEE, which is true +*> on machines which follow ieee-754 floating-point standard in their +*> handling of infinities and NaNs, and false otherwise. This variable +*> is passed to DLASQ3. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of rows and columns in the matrix. N >= 0. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension ( 4*N ) +*> On entry Z holds the qd array. On exit, entries 1 to N hold +*> the eigenvalues in decreasing order, Z( 2*N+1 ) holds the +*> trace, and Z( 2*N+2 ) holds the sum of the eigenvalues. If +*> N > 2, then Z( 2*N+3 ) holds the iteration count, Z( 2*N+4 ) +*> holds NDIVS/NIN^2, and Z( 2*N+5 ) holds the percentage of +*> shifts that failed. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if the i-th argument is a scalar and had an illegal +*> value, then INFO = -i, if the i-th argument is an +*> array and the j-entry had an illegal value, then +*> INFO = -(i*100+j) +*> > 0: the algorithm failed +*> = 1, a split was marked by a positive value in E +*> = 2, current block of Z not diagonalized after 100*N +*> iterations (in inner while loop). On exit Z holds +*> a qd array with the same eigenvalues as the given Z. +*> = 3, termination criterion of outer while loop not met +*> (program created more than N unreduced blocks) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Local Variables: I0:N0 defines a current unreduced segment of Z. +*> The shifts are accumulated in SIGMA. Iteration count is in ITER. +*> Ping-pong is controlled by PP (alternates between 0 and 1). +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLASQ2( N, Z, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION Z( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION CBIAS + PARAMETER ( CBIAS = 1.50D0 ) + DOUBLE PRECISION ZERO, HALF, ONE, TWO, FOUR, HUNDRD + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0, + $ TWO = 2.0D0, FOUR = 4.0D0, HUNDRD = 100.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL IEEE + INTEGER I0, I1, I4, IINFO, IPN4, ITER, IWHILA, IWHILB, + $ K, KMIN, N0, N1, NBIG, NDIV, NFAIL, PP, SPLT, + $ TTYPE + DOUBLE PRECISION D, DEE, DEEMIN, DESIG, DMIN, DMIN1, DMIN2, DN, + $ DN1, DN2, E, EMAX, EMIN, EPS, G, OLDEMN, QMAX, + $ QMIN, S, SAFMIN, SIGMA, T, TAU, TEMP, TOL, + $ TOL2, TRACE, ZMAX, TEMPE, TEMPQ +* .. +* .. External Subroutines .. + EXTERNAL DLASQ3, DLASRT, XERBLA +* .. +* .. External Functions .. + INTEGER ILAENV + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH, ILAENV +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* +* Test the input arguments. +* (in case DLASQ2 is not called by DLASQ1) +* + INFO = 0 + EPS = DLAMCH( 'Precision' ) + SAFMIN = DLAMCH( 'Safe minimum' ) + TOL = EPS*HUNDRD + TOL2 = TOL**2 +* + IF( N.LT.0 ) THEN + INFO = -1 + CALL XERBLA( 'DLASQ2', 1 ) + RETURN + ELSE IF( N.EQ.0 ) THEN + RETURN + ELSE IF( N.EQ.1 ) THEN +* +* 1-by-1 case. +* + IF( Z( 1 ).LT.ZERO ) THEN + INFO = -201 + CALL XERBLA( 'DLASQ2', 2 ) + END IF + RETURN + ELSE IF( N.EQ.2 ) THEN +* +* 2-by-2 case. +* + IF( Z( 2 ).LT.ZERO .OR. Z( 3 ).LT.ZERO ) THEN + INFO = -2 + CALL XERBLA( 'DLASQ2', 2 ) + RETURN + ELSE IF( Z( 3 ).GT.Z( 1 ) ) THEN + D = Z( 3 ) + Z( 3 ) = Z( 1 ) + Z( 1 ) = D + END IF + Z( 5 ) = Z( 1 ) + Z( 2 ) + Z( 3 ) + IF( Z( 2 ).GT.Z( 3 )*TOL2 ) THEN + T = HALF*( ( Z( 1 )-Z( 3 ) )+Z( 2 ) ) + S = Z( 3 )*( Z( 2 ) / T ) + IF( S.LE.T ) THEN + S = Z( 3 )*( Z( 2 ) / ( T*( ONE+SQRT( ONE+S / T ) ) ) ) + ELSE + S = Z( 3 )*( Z( 2 ) / ( T+SQRT( T )*SQRT( T+S ) ) ) + END IF + T = Z( 1 ) + ( S+Z( 2 ) ) + Z( 3 ) = Z( 3 )*( Z( 1 ) / T ) + Z( 1 ) = T + END IF + Z( 2 ) = Z( 3 ) + Z( 6 ) = Z( 2 ) + Z( 1 ) + RETURN + END IF +* +* Check for negative data and compute sums of q's and e's. +* + Z( 2*N ) = ZERO + EMIN = Z( 2 ) + QMAX = ZERO + ZMAX = ZERO + D = ZERO + E = ZERO +* + DO 10 K = 1, 2*( N-1 ), 2 + IF( Z( K ).LT.ZERO ) THEN + INFO = -( 200+K ) + CALL XERBLA( 'DLASQ2', 2 ) + RETURN + ELSE IF( Z( K+1 ).LT.ZERO ) THEN + INFO = -( 200+K+1 ) + CALL XERBLA( 'DLASQ2', 2 ) + RETURN + END IF + D = D + Z( K ) + E = E + Z( K+1 ) + QMAX = MAX( QMAX, Z( K ) ) + EMIN = MIN( EMIN, Z( K+1 ) ) + ZMAX = MAX( QMAX, ZMAX, Z( K+1 ) ) + 10 CONTINUE + IF( Z( 2*N-1 ).LT.ZERO ) THEN + INFO = -( 200+2*N-1 ) + CALL XERBLA( 'DLASQ2', 2 ) + RETURN + END IF + D = D + Z( 2*N-1 ) + QMAX = MAX( QMAX, Z( 2*N-1 ) ) + ZMAX = MAX( QMAX, ZMAX ) +* +* Check for diagonality. +* + IF( E.EQ.ZERO ) THEN + DO 20 K = 2, N + Z( K ) = Z( 2*K-1 ) + 20 CONTINUE + CALL DLASRT( 'D', N, Z, IINFO ) + Z( 2*N-1 ) = D + RETURN + END IF +* + TRACE = D + E +* +* Check for zero data. +* + IF( TRACE.EQ.ZERO ) THEN + Z( 2*N-1 ) = ZERO + RETURN + END IF +* +* Check whether the machine is IEEE conformable. +* + IEEE = ILAENV( 10, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1 .AND. + $ ILAENV( 11, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1 +* +* Rearrange data for locality: Z=(q1,qq1,e1,ee1,q2,qq2,e2,ee2,...). +* + DO 30 K = 2*N, 2, -2 + Z( 2*K ) = ZERO + Z( 2*K-1 ) = Z( K ) + Z( 2*K-2 ) = ZERO + Z( 2*K-3 ) = Z( K-1 ) + 30 CONTINUE +* + I0 = 1 + N0 = N +* +* Reverse the qd-array, if warranted. +* + IF( CBIAS*Z( 4*I0-3 ).LT.Z( 4*N0-3 ) ) THEN + IPN4 = 4*( I0+N0 ) + DO 40 I4 = 4*I0, 2*( I0+N0-1 ), 4 + + TEMP = Z( I4-3 ) + Z( I4-3 ) = Z( IPN4-I4-3 ) + Z( IPN4-I4-3 ) = TEMP + TEMP = Z( I4-1 ) + Z( I4-1 ) = Z( IPN4-I4-5 ) + Z( IPN4-I4-5 ) = TEMP + 40 CONTINUE + END IF +* +* Initial split checking via dqd and Li's test. +* + PP = 0 +* + DO 80 K = 1, 2 +* + D = Z( 4*N0+PP-3 ) + DO 50 I4 = 4*( N0-1 ) + PP, 4*I0 + PP, -4 + IF( Z( I4-1 ).LE.TOL2*D ) THEN + Z( I4-1 ) = -ZERO + D = Z( I4-3 ) + ELSE + D = Z( I4-3 )*( D / ( D+Z( I4-1 ) ) ) + END IF + 50 CONTINUE +* +* dqd maps Z to ZZ plus Li's test. +* + EMIN = Z( 4*I0+PP+1 ) + D = Z( 4*I0+PP-3 ) + DO 60 I4 = 4*I0 + PP, 4*( N0-1 ) + PP, 4 + Z( I4-2*PP-2 ) = D + Z( I4-1 ) + IF( Z( I4-1 ).LE.TOL2*D ) THEN + Z( I4-1 ) = -ZERO + Z( I4-2*PP-2 ) = D + Z( I4-2*PP ) = ZERO + D = Z( I4+1 ) + ELSE IF( SAFMIN*Z( I4+1 ).LT.Z( I4-2*PP-2 ) .AND. + $ SAFMIN*Z( I4-2*PP-2 ).LT.Z( I4+1 ) ) THEN + TEMP = Z( I4+1 ) / Z( I4-2*PP-2 ) + Z( I4-2*PP ) = Z( I4-1 )*TEMP + D = D*TEMP + ELSE + Z( I4-2*PP ) = Z( I4+1 )*( Z( I4-1 ) / Z( I4-2*PP-2 ) ) + D = Z( I4+1 )*( D / Z( I4-2*PP-2 ) ) + END IF + EMIN = MIN( EMIN, Z( I4-2*PP ) ) + 60 CONTINUE + Z( 4*N0-PP-2 ) = D +* +* Now find qmax. +* + QMAX = Z( 4*I0-PP-2 ) + DO 70 I4 = 4*I0 - PP + 2, 4*N0 - PP - 2, 4 + QMAX = MAX( QMAX, Z( I4 ) ) + 70 CONTINUE +* +* Prepare for the next iteration on K. +* + PP = 1 - PP + 80 CONTINUE + +* +* Initialise variables to pass to DLASQ3. +* + TTYPE = 0 + DMIN1 = ZERO + DMIN2 = ZERO + DN = ZERO + DN1 = ZERO + DN2 = ZERO + G = ZERO + TAU = ZERO +* + ITER = 2 + NFAIL = 0 + NDIV = 2*( N0-I0 ) +* + DO 160 IWHILA = 1, N + 1 + + IF( N0.LT.1 ) THEN + GO TO 170 + END IF +* +* While array unfinished do +* +* E(N0) holds the value of SIGMA when submatrix in I0:N0 +* splits from the rest of the array, but is negated. +* + DESIG = ZERO + IF( N0.EQ.N ) THEN + SIGMA = ZERO + ELSE + SIGMA = -Z( 4*N0-1 ) + END IF + IF( SIGMA.LT.ZERO ) THEN + INFO = 1 + RETURN + END IF +* +* Find last unreduced submatrix's top index I0, find QMAX and +* EMIN. Find Gershgorin-type bound if Q's much greater than E's. +* + EMAX = ZERO + IF( N0.GT.I0 ) THEN + EMIN = ABS( Z( 4*N0-5 ) ) + ELSE + EMIN = ZERO + END IF + QMIN = Z( 4*N0-3 ) + QMAX = QMIN + DO 90 I4 = 4*N0, 8, -4 + IF( Z( I4-5 ).LE.ZERO ) + $ GO TO 100 + IF( QMIN.GE.FOUR*EMAX ) THEN + QMIN = MIN( QMIN, Z( I4-3 ) ) + EMAX = MAX( EMAX, Z( I4-5 ) ) + END IF + QMAX = MAX( QMAX, Z( I4-7 )+Z( I4-5 ) ) + EMIN = MIN( EMIN, Z( I4-5 ) ) + 90 CONTINUE + I4 = 4 +* + 100 CONTINUE + I0 = I4 / 4 + + PP = 0 +* + IF( N0-I0.GT.1 ) THEN + DEE = Z( 4*I0-3 ) + DEEMIN = DEE + KMIN = I0 + DO 110 I4 = 4*I0+1, 4*N0-3, 4 + DEE = Z( I4 )*( DEE /( DEE+Z( I4-2 ) ) ) + IF( DEE.LE.DEEMIN ) THEN + DEEMIN = DEE + KMIN = ( I4+3 )/4 + END IF + 110 CONTINUE + IF( (KMIN-I0)*2.LT.N0-KMIN .AND. + $ DEEMIN.LE.HALF*Z(4*N0-3) ) THEN + IPN4 = 4*( I0+N0 ) + PP = 2 + DO 120 I4 = 4*I0, 2*( I0+N0-1 ), 4 + TEMP = Z( I4-3 ) + Z( I4-3 ) = Z( IPN4-I4-3 ) + Z( IPN4-I4-3 ) = TEMP + TEMP = Z( I4-2 ) + Z( I4-2 ) = Z( IPN4-I4-2 ) + Z( IPN4-I4-2 ) = TEMP + TEMP = Z( I4-1 ) + Z( I4-1 ) = Z( IPN4-I4-5 ) + Z( IPN4-I4-5 ) = TEMP + TEMP = Z( I4 ) + Z( I4 ) = Z( IPN4-I4-4 ) + Z( IPN4-I4-4 ) = TEMP + 120 CONTINUE + END IF + END IF +* +* Put -(initial shift) into DMIN. +* + DMIN = -MAX( ZERO, QMIN-TWO*SQRT( QMIN )*SQRT( EMAX ) ) +* +* Now I0:N0 is unreduced. +* PP = 0 for ping, PP = 1 for pong. +* PP = 2 indicates that flipping was applied to the Z array and +* and that the tests for deflation upon entry in DLASQ3 +* should not be performed. +* + NBIG = 100*( N0-I0+1 ) + DO 140 IWHILB = 1, NBIG + + IF( I0.GT.N0 ) + $ GO TO 150 +* + + ! Print out test cases + + write(3,*) "{" + write(3,*) "i0: ", I0, "," + write(3,*) "n0: ", N0, "," + write(3,'(9999(g0))',advance="no") "z: []float64{" + do i = 1, 4*n + write (3,'(99999(e24.16,a))',advance="no") z(i), "," + end do + write (3,*) "}," + write (3,*) "pp: ", PP, "," + write (3,*) "dmin: ", DMIN, "," + write (3,*) "desig:", DESIG, "," + write (3,*) "qmax: ", QMAX, "," + write (3,*) "ttype:", TTYPE, "," + write (3,*) "dmin1:", DMIN1, "," + write (3,*) "dmin2:", DMIN2, "," + write (3,*) "dn: ", DN, "," + write (3,*) "dn1: ", DN1, "," + write (3,*) "dn2: ", DN2, "," + write (3,*) "g: ", G, "," + write (3,*) "tau: ", TAU, "," + write (3,*) "nFail:", NFAIL, "," + write (3,*) "iter: ", ITER, "," + write (3,*) "sigma:", SIGMA, "," + write (3,*) "nDiv: ", NDIV, "," + +* While submatrix unfinished take a good dqds step. +* + + + CALL DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, + $ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, + $ DN2, G, TAU ) + + + ! Write the outputs + write(3,'(9999(g0))',advance="no") "zOut: []float64{" + do i = 1, 4*n + write (3,'(99999(e24.16,a))',advance="no") z(i), "," + end do + write (3,*) "}," + write (3,*) "i0Out:",I0, "," + write (3,*) "n0Out:", N0, "," + write (3,*) "ppOut:", PP, "," + write (3,*) "dminOut:", DMIN, "," + write (3,*) "desigOut:", DESIG, "," + write (3,*) "sigmaOut:", SIGMA, "," + write (3,*) "qmaxOut:", QMAX, "," + write (3,*) "nFailOut:", NFAIL, "," + write (3,*) "iterOut:", ITER, "," + write (3,*) "nDivOut:", NDIV, "," + write (3,*) "ttypeOut:", TTYPE, "," + write (3,*) "dmin1Out:", DMIN1, "," + write (3,*) "dmin2Out:", DMIN2, "," + write (3,*) "dnOut:", DN, "," + write (3,*) "dn1Out:", DN1, "," + write (3,*) "dn2Out:", DN2, "," + write (3,*) "gOut:", G, "," + write (3,*) "tauOut:", TAU, "," + + write (3,*) "}," + + + PP = 1 - PP +* +* When EMIN is very small check for splits. +* + IF( PP.EQ.0 .AND. N0-I0.GE.3 ) THEN + IF( Z( 4*N0 ).LE.TOL2*QMAX .OR. + $ Z( 4*N0-1 ).LE.TOL2*SIGMA ) THEN + SPLT = I0 - 1 + QMAX = Z( 4*I0-3 ) + EMIN = Z( 4*I0-1 ) + OLDEMN = Z( 4*I0 ) + DO 130 I4 = 4*I0, 4*( N0-3 ), 4 + IF( Z( I4 ).LE.TOL2*Z( I4-3 ) .OR. + $ Z( I4-1 ).LE.TOL2*SIGMA ) THEN + Z( I4-1 ) = -SIGMA + SPLT = I4 / 4 + QMAX = ZERO + EMIN = Z( I4+3 ) + OLDEMN = Z( I4+4 ) + ELSE + QMAX = MAX( QMAX, Z( I4+1 ) ) + EMIN = MIN( EMIN, Z( I4-1 ) ) + OLDEMN = MIN( OLDEMN, Z( I4 ) ) + END IF + 130 CONTINUE + Z( 4*N0-1 ) = EMIN + Z( 4*N0 ) = OLDEMN + I0 = SPLT + 1 + END IF + END IF +* + 140 CONTINUE +* + INFO = 2 +* +* Maximum number of iterations exceeded, restore the shift +* SIGMA and place the new d's and e's in a qd array. +* This might need to be done for several blocks +* + I1 = I0 + N1 = N0 + 145 CONTINUE + + TEMPQ = Z( 4*I0-3 ) + Z( 4*I0-3 ) = Z( 4*I0-3 ) + SIGMA + DO K = I0+1, N0 + TEMPE = Z( 4*K-5 ) + Z( 4*K-5 ) = Z( 4*K-5 ) * (TEMPQ / Z( 4*K-7 )) + TEMPQ = Z( 4*K-3 ) + Z( 4*K-3 ) = Z( 4*K-3 ) + SIGMA + TEMPE - Z( 4*K-5 ) + END DO +* +* Prepare to do this on the previous block if there is one +* + IF( I1.GT.1 ) THEN + N1 = I1-1 + DO WHILE( ( I1.GE.2 ) .AND. ( Z(4*I1-5).GE.ZERO ) ) + I1 = I1 - 1 + END DO + SIGMA = -Z(4*N1-1) + GO TO 145 + END IF + + DO K = 1, N + Z( 2*K-1 ) = Z( 4*K-3 ) +* +* Only the block 1..N0 is unfinished. The rest of the e's +* must be essentially zero, although sometimes other data +* has been stored in them. +* + IF( K.LT.N0 ) THEN + Z( 2*K ) = Z( 4*K-1 ) + ELSE + Z( 2*K ) = 0 + END IF + END DO + RETURN +* +* end IWHILB +* + 150 CONTINUE +* + 160 CONTINUE +* + INFO = 3 + RETURN +* +* end IWHILA +* + 170 CONTINUE +* + +* Move q's to the front. +* + DO 180 K = 2, N + Z( K ) = Z( 4*K-3 ) + 180 CONTINUE +* +* Sort and compute sum of eigenvalues. +* + CALL DLASRT( 'D', N, Z, IINFO ) +* + + E = ZERO + DO 190 K = N, 1, -1 + E = E + Z( K ) + 190 CONTINUE +* +* Store trace, sum(eigenvalues) and information on performance. +* + + Z( 2*N+1 ) = TRACE + Z( 2*N+2 ) = E + Z( 2*N+3 ) = DBLE( ITER ) + Z( 2*N+4 ) = DBLE( NDIV ) / DBLE( N**2 ) + Z( 2*N+5 ) = HUNDRD*NFAIL / DBLE( ITER ) + + RETURN +* +* End of DLASQ2 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq3.f b/lapack/internal/testdata/dlasqtest/dlasq3.f new file mode 100644 index 00000000..1c4e8ecf --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq3.f @@ -0,0 +1,498 @@ +*> \brief \b DLASQ3 checks for deflation, computes a shift and calls dqds. Used by sbdsqr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ3 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, +* ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, +* DN2, G, TAU ) +* +* .. Scalar Arguments .. +* LOGICAL IEEE +* INTEGER I0, ITER, N0, NDIV, NFAIL, PP +* DOUBLE PRECISION DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, +* $ QMAX, SIGMA, TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Z( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ3 checks for deflation, computes a shift (TAU) and calls dqds. +*> In case of failure it changes shifts, and tries again until output +*> is positive. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] I0 +*> \verbatim +*> I0 is INTEGER +*> First index. +*> \endverbatim +*> +*> \param[in,out] N0 +*> \verbatim +*> N0 is INTEGER +*> Last index. +*> \endverbatim +*> +*> \param[in] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension ( 4*N ) +*> Z holds the qd array. +*> \endverbatim +*> +*> \param[in,out] PP +*> \verbatim +*> PP is INTEGER +*> PP=0 for ping, PP=1 for pong. +*> PP=2 indicates that flipping was applied to the Z array +*> and that the initial tests for deflation should not be +*> performed. +*> \endverbatim +*> +*> \param[out] DMIN +*> \verbatim +*> DMIN is DOUBLE PRECISION +*> Minimum value of d. +*> \endverbatim +*> +*> \param[out] SIGMA +*> \verbatim +*> SIGMA is DOUBLE PRECISION +*> Sum of shifts used in current segment. +*> \endverbatim +*> +*> \param[in,out] DESIG +*> \verbatim +*> DESIG is DOUBLE PRECISION +*> Lower order part of SIGMA +*> \endverbatim +*> +*> \param[in] QMAX +*> \verbatim +*> QMAX is DOUBLE PRECISION +*> Maximum value of q. +*> \endverbatim +*> +*> \param[out] NFAIL +*> \verbatim +*> NFAIL is INTEGER +*> Number of times shift was too big. +*> \endverbatim +*> +*> \param[out] ITER +*> \verbatim +*> ITER is INTEGER +*> Number of iterations. +*> \endverbatim +*> +*> \param[out] NDIV +*> \verbatim +*> NDIV is INTEGER +*> Number of divisions. +*> \endverbatim +*> +*> \param[in] IEEE +*> \verbatim +*> IEEE is LOGICAL +*> Flag for IEEE or non IEEE arithmetic (passed to DLASQ5). +*> \endverbatim +*> +*> \param[in,out] TTYPE +*> \verbatim +*> TTYPE is INTEGER +*> Shift type. +*> \endverbatim +*> +*> \param[in,out] DMIN1 +*> \verbatim +*> DMIN1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DMIN2 +*> \verbatim +*> DMIN2 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DN +*> \verbatim +*> DN is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DN1 +*> \verbatim +*> DN1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DN2 +*> \verbatim +*> DN2 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] G +*> \verbatim +*> G is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> +*> These are passed as arguments in order to save their values +*> between calls to DLASQ3. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, + $ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, + $ DN2, G, TAU ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + LOGICAL IEEE + INTEGER I0, ITER, N0, NDIV, NFAIL, PP + DOUBLE PRECISION DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, + $ QMAX, SIGMA, TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION Z( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION CBIAS + PARAMETER ( CBIAS = 1.50D0 ) + DOUBLE PRECISION ZERO, QURTR, HALF, ONE, TWO, HUNDRD + PARAMETER ( ZERO = 0.0D0, QURTR = 0.250D0, HALF = 0.5D0, + $ ONE = 1.0D0, TWO = 2.0D0, HUNDRD = 100.0D0 ) +* .. +* .. Local Scalars .. + INTEGER IPN4, J4, N0IN, NN, TTYPE + DOUBLE PRECISION EPS, S, T, TEMP, TOL, TOL2 +* .. +* .. External Subroutines .. + EXTERNAL DLASQ4, DLASQ5, DLASQ6 +* .. +* .. External Function .. + DOUBLE PRECISION DLAMCH + LOGICAL DISNAN + EXTERNAL DISNAN, DLAMCH +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + + N0IN = N0 + EPS = DLAMCH( 'Precision' ) + TOL = EPS*HUNDRD + TOL2 = TOL**2 +* +* Check for deflation. +* + 10 CONTINUE +* + IF( N0.LT.I0 ) + $ RETURN + IF( N0.EQ.I0 ) + $ GO TO 20 + NN = 4*N0 + PP + IF( N0.EQ.( I0+1 ) ) + $ GO TO 40 +* +* Check whether E(N0-1) is negligible, 1 eigenvalue. +* + IF( Z( NN-5 ).GT.TOL2*( SIGMA+Z( NN-3 ) ) .AND. + $ Z( NN-2*PP-4 ).GT.TOL2*Z( NN-7 ) ) + $ GO TO 30 +* + 20 CONTINUE +* + Z( 4*N0-3 ) = Z( 4*N0+PP-3 ) + SIGMA + N0 = N0 - 1 + GO TO 10 +* +* Check whether E(N0-2) is negligible, 2 eigenvalues. +* + 30 CONTINUE +* + IF( Z( NN-9 ).GT.TOL2*SIGMA .AND. + $ Z( NN-2*PP-8 ).GT.TOL2*Z( NN-11 ) ) + $ GO TO 50 +* + 40 CONTINUE +* + IF( Z( NN-3 ).GT.Z( NN-7 ) ) THEN + S = Z( NN-3 ) + Z( NN-3 ) = Z( NN-7 ) + Z( NN-7 ) = S + END IF + T = HALF*( ( Z( NN-7 )-Z( NN-3 ) )+Z( NN-5 ) ) + IF( Z( NN-5 ).GT.Z( NN-3 )*TOL2.AND.T.NE.ZERO ) THEN + S = Z( NN-3 )*( Z( NN-5 ) / T ) + IF( S.LE.T ) THEN + S = Z( NN-3 )*( Z( NN-5 ) / + $ ( T*( ONE+SQRT( ONE+S / T ) ) ) ) + ELSE + S = Z( NN-3 )*( Z( NN-5 ) / ( T+SQRT( T )*SQRT( T+S ) ) ) + END IF + T = Z( NN-7 ) + ( S+Z( NN-5 ) ) + Z( NN-3 ) = Z( NN-3 )*( Z( NN-7 ) / T ) + Z( NN-7 ) = T + END IF + Z( 4*N0-7 ) = Z( NN-7 ) + SIGMA + Z( 4*N0-3 ) = Z( NN-3 ) + SIGMA + N0 = N0 - 2 + GO TO 10 +* + 50 CONTINUE + IF( PP.EQ.2 ) + $ PP = 0 +* +* Reverse the qd-array, if warranted. +* + + IF( DMIN.LE.ZERO .OR. N0.LT.N0IN ) THEN + IF( CBIAS*Z( 4*I0+PP-3 ).LT.Z( 4*N0+PP-3 ) ) THEN + IPN4 = 4*( I0+N0 ) + DO 60 J4 = 4*I0, 2*( I0+N0-1 ), 4 + TEMP = Z( J4-3 ) + Z( J4-3 ) = Z( IPN4-J4-3 ) + Z( IPN4-J4-3 ) = TEMP + TEMP = Z( J4-2 ) + Z( J4-2 ) = Z( IPN4-J4-2 ) + Z( IPN4-J4-2 ) = TEMP + TEMP = Z( J4-1 ) + Z( J4-1 ) = Z( IPN4-J4-5 ) + Z( IPN4-J4-5 ) = TEMP + TEMP = Z( J4 ) + Z( J4 ) = Z( IPN4-J4-4 ) + Z( IPN4-J4-4 ) = TEMP + 60 CONTINUE + IF( N0-I0.LE.4 ) THEN + Z( 4*N0+PP-1 ) = Z( 4*I0+PP-1 ) + Z( 4*N0-PP ) = Z( 4*I0-PP ) + END IF + DMIN2 = MIN( DMIN2, Z( 4*N0+PP-1 ) ) + Z( 4*N0+PP-1 ) = MIN( Z( 4*N0+PP-1 ), Z( 4*I0+PP-1 ), + $ Z( 4*I0+PP+3 ) ) + Z( 4*N0-PP ) = MIN( Z( 4*N0-PP ), Z( 4*I0-PP ), + $ Z( 4*I0-PP+4 ) ) + QMAX = MAX( QMAX, Z( 4*I0+PP-3 ), Z( 4*I0+PP+1 ) ) + DMIN = -ZERO + END IF + END IF +* +* Choose a shift. +* + ! Print out DLASQ4 test cases + write(4,*) "{" + write(4,'(9999(g0))',advance="no") "z: []float64{" + do i = 1, NN + write (4,'(99999(e24.16,a))',advance="no") z(i), "," + end do + write (4,*) "}," + write (4,*) "i0: ", I0, "," + write (4,*) "n0: ", N0, "," + write (4,*) "pp: ", PP, "," + write (4,*) "n0in: ", N0IN, "," + write (4,*) "dmin: ", DMIN, "," + write (4,*) "dmin1:", DMIN1, "," + write (4,*) "dmin2:", DMIN2, "," + write (4,*) "dn: ", DN, "," + write (4,*) "dn1: ", DN1, "," + write (4,*) "dn2: ", DN2, "," + write (4,*) "tau: ", TAU, "," + write (4,*) "ttype: ", TTYPE, "," + write (4,*) "g: ", G, "," + CALL DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN, DN1, + $ DN2, TAU, TTYPE, G ) + + write(4,'(9999(g0))',advance="no") "zOut: []float64{" + do i = 1, NN + write (4,'(99999(e24.16,a))',advance="no") z(i), "," + end do + write (4,*) "}," + write (4,*) "tauOut: ", TAU, "," + write (4,*) "ttypeOut: ", TTYPE, "," + write (4,*) "gOut: ", G, "," + write (4,*) "}," + +* +* Call dqds until DMIN > 0. +* + 70 CONTINUE +* + + write(5,*) "{" + write(5,'(9999(g0))',advance="no") "z: []float64{" + do i = 1, NN + write (5,'(99999(e24.16,a))',advance="no") z(i), "," + end do + write (5,*) "}," + write (5,*) "i0: ", I0, "," + write (5,*) "n0: ", N0, "," + write (5,*) "pp: ", PP, "," + write (5,*) "tau: ", TAU, "," + write (5,*) "sigma: ", SIGMA, "," + write (5,*) "dmin: ", DMIN, "," + write (5,*) "dmin1:", DMIN1, "," + write (5,*) "dmin2:", DMIN2, "," + write (5,*) "dn: ", DN, "," + write (5,*) "dnm1: ", DN1, "," + write (5,*) "dnm2: ", DN2, "," + + + CALL DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN, + $ DN1, DN2, IEEE, EPS ) + + + + write (5,*) "i0Out: ", I0, "," + write (5,*) "n0Out: ", N0, "," + write (5,*) "ppOut: ", PP, "," + write (5,*) "tauOut: ", TAU, "," + write (5,*) "sigmaOut: ", SIGMA, "," + write (5,*) "dminOut: ", DMIN, "," + write (5,*) "dmin1Out:", DMIN1, "," + write (5,*) "dmin2Out:", DMIN2, "," + write (5,*) "dnOut: ", DN, "," + write (5,*) "dnm1Out: ", DN1, "," + write (5,*) "dnm2Out: ", DN2, "," + write (5,*) "}," + +* + NDIV = NDIV + ( N0-I0+2 ) + + ITER = ITER + 1 +* +* Check status. +* + + IF( DMIN.GE.ZERO .AND. DMIN1.GE.ZERO ) THEN +* +* Success. +* + GO TO 90 +* + ELSE IF( DMIN.LT.ZERO .AND. DMIN1.GT.ZERO .AND. + $ Z( 4*( N0-1 )-PP ).LT.TOL*( SIGMA+DN1 ) .AND. + $ ABS( DN ).LT.TOL*SIGMA ) THEN + +* +* Convergence hidden by negative DN. +* + Z( 4*( N0-1 )-PP+2 ) = ZERO + DMIN = ZERO + GO TO 90 + ELSE IF( DMIN.LT.ZERO ) THEN + +* +* TAU too big. Select new TAU and try again. +* + NFAIL = NFAIL + 1 + IF( TTYPE.LT.-22 ) THEN +* +* Failed twice. Play it safe. +* + TAU = ZERO + ELSE IF( DMIN1.GT.ZERO ) THEN +* +* Late failure. Gives excellent shift. +* + TAU = ( TAU+DMIN )*( ONE-TWO*EPS ) + TTYPE = TTYPE - 11 + ELSE +* +* Early failure. Divide by 4. +* + TAU = QURTR*TAU + TTYPE = TTYPE - 12 + END IF + GO TO 70 + ELSE IF( DISNAN( DMIN ) ) THEN +* +* NaN. +* + IF( TAU.EQ.ZERO ) THEN + GO TO 80 + ELSE + TAU = ZERO + GO TO 70 + END IF + ELSE +* +* Possible underflow. Play it safe. +* + GO TO 80 + END IF +* +* Risk of underflow. +* + 80 CONTINUE + + CALL DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, DN1, DN2 ) + + + NDIV = NDIV + ( N0-I0+2 ) + ITER = ITER + 1 + TAU = ZERO +* + 90 CONTINUE + + IF( TAU.LT.SIGMA ) THEN + DESIG = DESIG + TAU + T = SIGMA + DESIG + DESIG = DESIG - ( T-SIGMA ) + ELSE + T = SIGMA + TAU + DESIG = SIGMA - ( T-TAU ) + DESIG + END IF + SIGMA = T +* + RETURN +* +* End of DLASQ3 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq4.f b/lapack/internal/testdata/dlasqtest/dlasq4.f new file mode 100644 index 00000000..f60f775b --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq4.f @@ -0,0 +1,427 @@ +*> \brief \b DLASQ4 computes an approximation to the smallest eigenvalue using values of d from the previous transform. Used by sbdsqr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ4 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN, +* DN1, DN2, TAU, TTYPE, G ) +* +* .. Scalar Arguments .. +* INTEGER I0, N0, N0IN, PP, TTYPE +* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Z( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ4 computes an approximation TAU to the smallest eigenvalue +*> using values of d from the previous transform. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] I0 +*> \verbatim +*> I0 is INTEGER +*> First index. +*> \endverbatim +*> +*> \param[in] N0 +*> \verbatim +*> N0 is INTEGER +*> Last index. +*> \endverbatim +*> +*> \param[in] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension ( 4*N ) +*> Z holds the qd array. +*> \endverbatim +*> +*> \param[in] PP +*> \verbatim +*> PP is INTEGER +*> PP=0 for ping, PP=1 for pong. +*> \endverbatim +*> +*> \param[in] N0IN +*> \verbatim +*> N0IN is INTEGER +*> The value of N0 at start of EIGTEST. +*> \endverbatim +*> +*> \param[in] DMIN +*> \verbatim +*> DMIN is DOUBLE PRECISION +*> Minimum value of d. +*> \endverbatim +*> +*> \param[in] DMIN1 +*> \verbatim +*> DMIN1 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ). +*> \endverbatim +*> +*> \param[in] DMIN2 +*> \verbatim +*> DMIN2 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ) and D( N0-1 ). +*> \endverbatim +*> +*> \param[in] DN +*> \verbatim +*> DN is DOUBLE PRECISION +*> d(N) +*> \endverbatim +*> +*> \param[in] DN1 +*> \verbatim +*> DN1 is DOUBLE PRECISION +*> d(N-1) +*> \endverbatim +*> +*> \param[in] DN2 +*> \verbatim +*> DN2 is DOUBLE PRECISION +*> d(N-2) +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> This is the shift. +*> \endverbatim +*> +*> \param[out] TTYPE +*> \verbatim +*> TTYPE is INTEGER +*> Shift type. +*> \endverbatim +*> +*> \param[in,out] G +*> \verbatim +*> G is REAL +*> G is passed as an argument in order to save its value between +*> calls to DLASQ4. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> CNST1 = 9/16 +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN, + $ DN1, DN2, TAU, TTYPE, G ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER I0, N0, N0IN, PP, TTYPE + DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION Z( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION CNST1, CNST2, CNST3 + PARAMETER ( CNST1 = 0.5630D0, CNST2 = 1.010D0, + $ CNST3 = 1.050D0 ) + DOUBLE PRECISION QURTR, THIRD, HALF, ZERO, ONE, TWO, HUNDRD + PARAMETER ( QURTR = 0.250D0, THIRD = 0.3330D0, + $ HALF = 0.50D0, ZERO = 0.0D0, ONE = 1.0D0, + $ TWO = 2.0D0, HUNDRD = 100.0D0 ) +* .. +* .. Local Scalars .. + INTEGER I4, NN, NP + DOUBLE PRECISION A2, B1, B2, GAM, GAP1, GAP2, S +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* +* A negative DMIN forces the shift to take that absolute value +* TTYPE records the type of shift. +* + + IF( DMIN.LE.ZERO ) THEN + TAU = -DMIN + TTYPE = -1 + RETURN + END IF +* + NN = 4*N0 + PP + IF( N0IN.EQ.N0 ) THEN +* +* No eigenvalues deflated. +* + IF( DMIN.EQ.DN .OR. DMIN.EQ.DN1 ) THEN +* + B1 = SQRT( Z( NN-3 ) )*SQRT( Z( NN-5 ) ) + B2 = SQRT( Z( NN-7 ) )*SQRT( Z( NN-9 ) ) + A2 = Z( NN-7 ) + Z( NN-5 ) +* +* Cases 2 and 3. +* + IF( DMIN.EQ.DN .AND. DMIN1.EQ.DN1 ) THEN + + GAP2 = DMIN2 - A2 - DMIN2*QURTR + IF( GAP2.GT.ZERO .AND. GAP2.GT.B2 ) THEN + GAP1 = A2 - DN - ( B2 / GAP2 )*B2 + ELSE + GAP1 = A2 - DN - ( B1+B2 ) + END IF + IF( GAP1.GT.ZERO .AND. GAP1.GT.B1 ) THEN + S = MAX( DN-( B1 / GAP1 )*B1, HALF*DMIN ) + TTYPE = -2 + ELSE + S = ZERO + IF( DN.GT.B1 ) + $ S = DN - B1 + IF( A2.GT.( B1+B2 ) ) + $ S = MIN( S, A2-( B1+B2 ) ) + S = MAX( S, THIRD*DMIN ) + TTYPE = -3 + END IF + ELSE +* +* Case 4. +* + TTYPE = -4 + S = QURTR*DMIN + IF( DMIN.EQ.DN ) THEN + GAM = DN + A2 = ZERO + IF( Z( NN-5 ) .GT. Z( NN-7 ) ) + $ RETURN + B2 = Z( NN-5 ) / Z( NN-7 ) + NP = NN - 9 + ELSE + NP = NN - 2*PP + B2 = Z( NP-2 ) + GAM = DN1 + IF( Z( NP-4 ) .GT. Z( NP-2 ) ) + $ RETURN + A2 = Z( NP-4 ) / Z( NP-2 ) + IF( Z( NN-9 ) .GT. Z( NN-11 ) ) + $ RETURN + B2 = Z( NN-9 ) / Z( NN-11 ) + NP = NN - 13 + END IF +* +* Approximate contribution to norm squared from I < NN-1. +* + A2 = A2 + B2 + DO 10 I4 = NP, 4*I0 - 1 + PP, -4 + IF( B2.EQ.ZERO ) + $ GO TO 20 + B1 = B2 + IF( Z( I4 ) .GT. Z( I4-2 ) ) + $ RETURN + B2 = B2*( Z( I4 ) / Z( I4-2 ) ) + A2 = A2 + B2 + IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 ) + $ GO TO 20 + 10 CONTINUE + 20 CONTINUE + A2 = CNST3*A2 +* +* Rayleigh quotient residual bound. +* + IF( A2.LT.CNST1 ) + $ S = GAM*( ONE-SQRT( A2 ) ) / ( ONE+A2 ) + END IF + ELSE IF( DMIN.EQ.DN2 ) THEN +* +* Case 5. +* + TTYPE = -5 + S = QURTR*DMIN +* +* Compute contribution to norm squared from I > NN-2. +* + NP = NN - 2*PP + B1 = Z( NP-2 ) + B2 = Z( NP-6 ) + GAM = DN2 + IF( Z( NP-8 ).GT.B2 .OR. Z( NP-4 ).GT.B1 ) + $ RETURN + A2 = ( Z( NP-8 ) / B2 )*( ONE+Z( NP-4 ) / B1 ) +* +* Approximate contribution to norm squared from I < NN-2. +* + IF( N0-I0.GT.2 ) THEN + B2 = Z( NN-13 ) / Z( NN-15 ) + A2 = A2 + B2 + DO 30 I4 = NN - 17, 4*I0 - 1 + PP, -4 + IF( B2.EQ.ZERO ) + $ GO TO 40 + B1 = B2 + IF( Z( I4 ) .GT. Z( I4-2 ) ) + $ RETURN + B2 = B2*( Z( I4 ) / Z( I4-2 ) ) + A2 = A2 + B2 + IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 ) + $ GO TO 40 + 30 CONTINUE + 40 CONTINUE + A2 = CNST3*A2 + END IF +* + IF( A2.LT.CNST1 ) + $ S = GAM*( ONE-SQRT( A2 ) ) / ( ONE+A2 ) + ELSE +* +* Case 6, no information to guide us. +* + IF( TTYPE.EQ.-6 ) THEN + G = G + THIRD*( ONE-G ) + ELSE IF( TTYPE.EQ.-18 ) THEN + G = QURTR*THIRD + ELSE + G = QURTR + END IF + S = G*DMIN + TTYPE = -6 + END IF +* + ELSE IF( N0IN.EQ.( N0+1 ) ) THEN +* +* One eigenvalue just deflated. Use DMIN1, DN1 for DMIN and DN. +* + IF( DMIN1.EQ.DN1 .AND. DMIN2.EQ.DN2 ) THEN +* +* Cases 7 and 8. +* + TTYPE = -7 + S = THIRD*DMIN1 + IF( Z( NN-5 ).GT.Z( NN-7 ) ) + $ RETURN + B1 = Z( NN-5 ) / Z( NN-7 ) + B2 = B1 + IF( B2.EQ.ZERO ) + $ GO TO 60 + DO 50 I4 = 4*N0 - 9 + PP, 4*I0 - 1 + PP, -4 + A2 = B1 + IF( Z( I4 ).GT.Z( I4-2 ) ) + $ RETURN + B1 = B1*( Z( I4 ) / Z( I4-2 ) ) + B2 = B2 + B1 + IF( HUNDRD*MAX( B1, A2 ).LT.B2 ) + $ GO TO 60 + 50 CONTINUE + 60 CONTINUE + B2 = SQRT( CNST3*B2 ) + A2 = DMIN1 / ( ONE+B2**2 ) + GAP2 = HALF*DMIN2 - A2 + IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN + S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) ) + ELSE + S = MAX( S, A2*( ONE-CNST2*B2 ) ) + TTYPE = -8 + END IF + ELSE +* +* Case 9. +* + S = QURTR*DMIN1 + IF( DMIN1.EQ.DN1 ) + $ S = HALF*DMIN1 + TTYPE = -9 + END IF +* + ELSE IF( N0IN.EQ.( N0+2 ) ) THEN +* +* Two eigenvalues deflated. Use DMIN2, DN2 for DMIN and DN. +* +* Cases 10 and 11. +* + IF( DMIN2.EQ.DN2 .AND. TWO*Z( NN-5 ).LT.Z( NN-7 ) ) THEN + TTYPE = -10 + S = THIRD*DMIN2 + IF( Z( NN-5 ).GT.Z( NN-7 ) ) + $ RETURN + B1 = Z( NN-5 ) / Z( NN-7 ) + B2 = B1 + IF( B2.EQ.ZERO ) + $ GO TO 80 + DO 70 I4 = 4*N0 - 9 + PP, 4*I0 - 1 + PP, -4 + IF( Z( I4 ).GT.Z( I4-2 ) ) + $ RETURN + B1 = B1*( Z( I4 ) / Z( I4-2 ) ) + B2 = B2 + B1 + IF( HUNDRD*B1.LT.B2 ) + $ GO TO 80 + 70 CONTINUE + 80 CONTINUE + B2 = SQRT( CNST3*B2 ) + A2 = DMIN2 / ( ONE+B2**2 ) + GAP2 = Z( NN-7 ) + Z( NN-9 ) - + $ SQRT( Z( NN-11 ) )*SQRT( Z( NN-9 ) ) - A2 + IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN + S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) ) + ELSE + S = MAX( S, A2*( ONE-CNST2*B2 ) ) + END IF + ELSE + S = QURTR*DMIN2 + TTYPE = -11 + END IF + ELSE IF( N0IN.GT.( N0+2 ) ) THEN +* +* Case 12, more than two eigenvalues deflated. No information. +* + S = ZERO + TTYPE = -12 + END IF +* + TAU = S + RETURN +* +* End of DLASQ4 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq5.f b/lapack/internal/testdata/dlasqtest/dlasq5.f new file mode 100644 index 00000000..19470447 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq5.f @@ -0,0 +1,413 @@ +*> \brief \b DLASQ5 computes one dqds transform in ping-pong form. Used by sbdsqr and sstegr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ5 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN, +* DNM1, DNM2, IEEE, EPS ) +* +* .. Scalar Arguments .. +* LOGICAL IEEE +* INTEGER I0, N0, PP +* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2, TAU, SIGMA, EPS +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Z( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ5 computes one dqds transform in ping-pong form, one +*> version for IEEE machines another for non IEEE machines. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] I0 +*> \verbatim +*> I0 is INTEGER +*> First index. +*> \endverbatim +*> +*> \param[in] N0 +*> \verbatim +*> N0 is INTEGER +*> Last index. +*> \endverbatim +*> +*> \param[in] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension ( 4*N ) +*> Z holds the qd array. EMIN is stored in Z(4*N0) to avoid +*> an extra argument. +*> \endverbatim +*> +*> \param[in] PP +*> \verbatim +*> PP is INTEGER +*> PP=0 for ping, PP=1 for pong. +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> This is the shift. +*> \endverbatim +*> +*> \param[in] SIGMA +*> \verbatim +*> SIGMA is DOUBLE PRECISION +*> This is the accumulated shift up to this step. +*> \endverbatim +*> +*> \param[out] DMIN +*> \verbatim +*> DMIN is DOUBLE PRECISION +*> Minimum value of d. +*> \endverbatim +*> +*> \param[out] DMIN1 +*> \verbatim +*> DMIN1 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ). +*> \endverbatim +*> +*> \param[out] DMIN2 +*> \verbatim +*> DMIN2 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ) and D( N0-1 ). +*> \endverbatim +*> +*> \param[out] DN +*> \verbatim +*> DN is DOUBLE PRECISION +*> d(N0), the last value of d. +*> \endverbatim +*> +*> \param[out] DNM1 +*> \verbatim +*> DNM1 is DOUBLE PRECISION +*> d(N0-1). +*> \endverbatim +*> +*> \param[out] DNM2 +*> \verbatim +*> DNM2 is DOUBLE PRECISION +*> d(N0-2). +*> \endverbatim +*> +*> \param[in] IEEE +*> \verbatim +*> IEEE is LOGICAL +*> Flag for IEEE or non IEEE arithmetic. +*> \endverbatim +* +*> \param[in] EPS +*> \verbatim +*> EPS is DOUBLE PRECISION +*> This is the value of epsilon used. +*> \endverbatim +*> +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, + $ DN, DNM1, DNM2, IEEE, EPS ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + LOGICAL IEEE + INTEGER I0, N0, PP + DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2, TAU, + $ SIGMA, EPS +* .. +* .. Array Arguments .. + DOUBLE PRECISION Z( * ) +* .. +* +* ===================================================================== +* +* .. Parameter .. + DOUBLE PRECISION ZERO, HALF + PARAMETER ( ZERO = 0.0D0, HALF = 0.5 ) +* .. +* .. Local Scalars .. + INTEGER J4, J4P2 + DOUBLE PRECISION D, EMIN, TEMP, DTHRESH +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + + IF( ( N0-I0-1 ).LE.0 ) + $ RETURN +* + DTHRESH = EPS*(SIGMA+TAU) + IF( TAU.LT.DTHRESH*HALF ) TAU = ZERO + IF( TAU.NE.ZERO ) THEN + J4 = 4*I0 + PP - 3 + EMIN = Z( J4+4 ) + D = Z( J4 ) - TAU + DMIN = D + DMIN1 = -Z( J4 ) +* + IF( IEEE ) THEN +* +* Code for IEEE arithmetic. +* + IF( PP.EQ.0 ) THEN + DO 10 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-2 ) = D + Z( J4-1 ) + TEMP = Z( J4+1 ) / Z( J4-2 ) + D = D*TEMP - TAU + DMIN = MIN( DMIN, D ) + Z( J4 ) = Z( J4-1 )*TEMP + EMIN = MIN( Z( J4 ), EMIN ) + 10 CONTINUE + ELSE + DO 20 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-3 ) = D + Z( J4 ) + TEMP = Z( J4+2 ) / Z( J4-3 ) + D = D*TEMP - TAU + DMIN = MIN( DMIN, D ) + Z( J4-1 ) = Z( J4 )*TEMP + EMIN = MIN( Z( J4-1 ), EMIN ) + 20 CONTINUE + END IF + +* +* Unroll last two steps. +* + DNM2 = D + DMIN2 = DMIN + J4 = 4*( N0-2 ) - PP + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM2 + Z( J4P2 ) + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU + DMIN = MIN( DMIN, DNM1 ) +* + DMIN1 = DMIN + J4 = J4 + 4 + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM1 + Z( J4P2 ) + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU + DMIN = MIN( DMIN, DN ) +* + ELSE +* +* Code for non IEEE arithmetic. +* + IF( PP.EQ.0 ) THEN + DO 30 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-2 ) = D + Z( J4-1 ) + IF( D.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) ) + D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU + END IF + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4 ) ) + 30 CONTINUE + ELSE + DO 40 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-3 ) = D + Z( J4 ) + IF( D.LT.ZERO ) THEN + RETURN + ELSE + Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) ) + D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU + END IF + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4-1 ) ) + 40 CONTINUE + END IF +* +* Unroll last two steps. +* + DNM2 = D + DMIN2 = DMIN + J4 = 4*( N0-2 ) - PP + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM2 + Z( J4P2 ) + IF( DNM2.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU + END IF + DMIN = MIN( DMIN, DNM1 ) +* + DMIN1 = DMIN + J4 = J4 + 4 + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM1 + Z( J4P2 ) + IF( DNM1.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU + END IF + DMIN = MIN( DMIN, DN ) +* + END IF + ELSE +* This is the version that sets d's to zero if they are small enough + J4 = 4*I0 + PP - 3 + EMIN = Z( J4+4 ) + D = Z( J4 ) - TAU + DMIN = D + DMIN1 = -Z( J4 ) + IF( IEEE ) THEN +* +* Code for IEEE arithmetic. +* + + IF( PP.EQ.0 ) THEN + DO 50 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-2 ) = D + Z( J4-1 ) + TEMP = Z( J4+1 ) / Z( J4-2 ) + D = D*TEMP - TAU + IF( D.LT.DTHRESH ) D = ZERO + DMIN = MIN( DMIN, D ) + Z( J4 ) = Z( J4-1 )*TEMP + EMIN = MIN( Z( J4 ), EMIN ) + 50 CONTINUE + ELSE + DO 60 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-3 ) = D + Z( J4 ) + TEMP = Z( J4+2 ) / Z( J4-3 ) + D = D*TEMP - TAU + IF( D.LT.DTHRESH ) D = ZERO + DMIN = MIN( DMIN, D ) + Z( J4-1 ) = Z( J4 )*TEMP + EMIN = MIN( Z( J4-1 ), EMIN ) + 60 CONTINUE + END IF +* +* Unroll last two steps. +* + DNM2 = D + DMIN2 = DMIN + J4 = 4*( N0-2 ) - PP + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM2 + Z( J4P2 ) + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU + DMIN = MIN( DMIN, DNM1 ) +* + DMIN1 = DMIN + J4 = J4 + 4 + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM1 + Z( J4P2 ) + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU + DMIN = MIN( DMIN, DN ) +* + ELSE +* +* Code for non IEEE arithmetic. +* + IF( PP.EQ.0 ) THEN + DO 70 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-2 ) = D + Z( J4-1 ) + IF( D.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) ) + D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU + END IF + IF( D.LT.DTHRESH) D = ZERO + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4 ) ) + 70 CONTINUE + ELSE + DO 80 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-3 ) = D + Z( J4 ) + IF( D.LT.ZERO ) THEN + RETURN + ELSE + Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) ) + D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU + END IF + IF( D.LT.DTHRESH) D = ZERO + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4-1 ) ) + 80 CONTINUE + END IF +* +* Unroll last two steps. +* + DNM2 = D + DMIN2 = DMIN + J4 = 4*( N0-2 ) - PP + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM2 + Z( J4P2 ) + IF( DNM2.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU + END IF + DMIN = MIN( DMIN, DNM1 ) +* + DMIN1 = DMIN + J4 = J4 + 4 + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM1 + Z( J4P2 ) + IF( DNM1.LT.ZERO ) THEN + RETURN + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU + END IF + DMIN = MIN( DMIN, DN ) +* + END IF + END IF +* + Z( J4+2 ) = DN + Z( 4*N0-PP ) = EMIN + RETURN +* +* End of DLASQ5 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasq6.f b/lapack/internal/testdata/dlasqtest/dlasq6.f new file mode 100644 index 00000000..bcd61f35 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasq6.f @@ -0,0 +1,258 @@ +*> \brief \b DLASQ6 computes one dqd transform in ping-pong form. Used by sbdsqr and sstegr. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASQ6 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, +* DNM1, DNM2 ) +* +* .. Scalar Arguments .. +* INTEGER I0, N0, PP +* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2 +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Z( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASQ6 computes one dqd (shift equal to zero) transform in +*> ping-pong form, with protection against underflow and overflow. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] I0 +*> \verbatim +*> I0 is INTEGER +*> First index. +*> \endverbatim +*> +*> \param[in] N0 +*> \verbatim +*> N0 is INTEGER +*> Last index. +*> \endverbatim +*> +*> \param[in] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension ( 4*N ) +*> Z holds the qd array. EMIN is stored in Z(4*N0) to avoid +*> an extra argument. +*> \endverbatim +*> +*> \param[in] PP +*> \verbatim +*> PP is INTEGER +*> PP=0 for ping, PP=1 for pong. +*> \endverbatim +*> +*> \param[out] DMIN +*> \verbatim +*> DMIN is DOUBLE PRECISION +*> Minimum value of d. +*> \endverbatim +*> +*> \param[out] DMIN1 +*> \verbatim +*> DMIN1 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ). +*> \endverbatim +*> +*> \param[out] DMIN2 +*> \verbatim +*> DMIN2 is DOUBLE PRECISION +*> Minimum value of d, excluding D( N0 ) and D( N0-1 ). +*> \endverbatim +*> +*> \param[out] DN +*> \verbatim +*> DN is DOUBLE PRECISION +*> d(N0), the last value of d. +*> \endverbatim +*> +*> \param[out] DNM1 +*> \verbatim +*> DNM1 is DOUBLE PRECISION +*> d(N0-1). +*> \endverbatim +*> +*> \param[out] DNM2 +*> \verbatim +*> DNM2 is DOUBLE PRECISION +*> d(N0-2). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, + $ DNM1, DNM2 ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER I0, N0, PP + DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2 +* .. +* .. Array Arguments .. + DOUBLE PRECISION Z( * ) +* .. +* +* ===================================================================== +* +* .. Parameter .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. +* .. Local Scalars .. + INTEGER J4, J4P2 + DOUBLE PRECISION D, EMIN, SAFMIN, TEMP +* .. +* .. External Function .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( ( N0-I0-1 ).LE.0 ) + $ RETURN +* + + print *, "In dlasq6" + STOP + + SAFMIN = DLAMCH( 'Safe minimum' ) + J4 = 4*I0 + PP - 3 + EMIN = Z( J4+4 ) + D = Z( J4 ) + DMIN = D +* + IF( PP.EQ.0 ) THEN + DO 10 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-2 ) = D + Z( J4-1 ) + IF( Z( J4-2 ).EQ.ZERO ) THEN + Z( J4 ) = ZERO + D = Z( J4+1 ) + DMIN = D + EMIN = ZERO + ELSE IF( SAFMIN*Z( J4+1 ).LT.Z( J4-2 ) .AND. + $ SAFMIN*Z( J4-2 ).LT.Z( J4+1 ) ) THEN + TEMP = Z( J4+1 ) / Z( J4-2 ) + Z( J4 ) = Z( J4-1 )*TEMP + D = D*TEMP + ELSE + Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) ) + D = Z( J4+1 )*( D / Z( J4-2 ) ) + END IF + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4 ) ) + 10 CONTINUE + ELSE + DO 20 J4 = 4*I0, 4*( N0-3 ), 4 + Z( J4-3 ) = D + Z( J4 ) + IF( Z( J4-3 ).EQ.ZERO ) THEN + Z( J4-1 ) = ZERO + D = Z( J4+2 ) + DMIN = D + EMIN = ZERO + ELSE IF( SAFMIN*Z( J4+2 ).LT.Z( J4-3 ) .AND. + $ SAFMIN*Z( J4-3 ).LT.Z( J4+2 ) ) THEN + TEMP = Z( J4+2 ) / Z( J4-3 ) + Z( J4-1 ) = Z( J4 )*TEMP + D = D*TEMP + ELSE + Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) ) + D = Z( J4+2 )*( D / Z( J4-3 ) ) + END IF + DMIN = MIN( DMIN, D ) + EMIN = MIN( EMIN, Z( J4-1 ) ) + 20 CONTINUE + END IF +* +* Unroll last two steps. +* + DNM2 = D + DMIN2 = DMIN + J4 = 4*( N0-2 ) - PP + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM2 + Z( J4P2 ) + IF( Z( J4-2 ).EQ.ZERO ) THEN + Z( J4 ) = ZERO + DNM1 = Z( J4P2+2 ) + DMIN = DNM1 + EMIN = ZERO + ELSE IF( SAFMIN*Z( J4P2+2 ).LT.Z( J4-2 ) .AND. + $ SAFMIN*Z( J4-2 ).LT.Z( J4P2+2 ) ) THEN + TEMP = Z( J4P2+2 ) / Z( J4-2 ) + Z( J4 ) = Z( J4P2 )*TEMP + DNM1 = DNM2*TEMP + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) + END IF + DMIN = MIN( DMIN, DNM1 ) +* + DMIN1 = DMIN + J4 = J4 + 4 + J4P2 = J4 + 2*PP - 1 + Z( J4-2 ) = DNM1 + Z( J4P2 ) + IF( Z( J4-2 ).EQ.ZERO ) THEN + Z( J4 ) = ZERO + DN = Z( J4P2+2 ) + DMIN = DN + EMIN = ZERO + ELSE IF( SAFMIN*Z( J4P2+2 ).LT.Z( J4-2 ) .AND. + $ SAFMIN*Z( J4-2 ).LT.Z( J4P2+2 ) ) THEN + TEMP = Z( J4P2+2 ) / Z( J4-2 ) + Z( J4 ) = Z( J4P2 )*TEMP + DN = DNM1*TEMP + ELSE + Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) ) + DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) + END IF + DMIN = MIN( DMIN, DN ) +* + Z( J4+2 ) = DN + Z( 4*N0-PP ) = EMIN + RETURN +* +* End of DLASQ6 +* + END diff --git a/lapack/internal/testdata/dlasqtest/dlasrt.f b/lapack/internal/testdata/dlasqtest/dlasrt.f new file mode 100644 index 00000000..f5d0e6cd --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/dlasrt.f @@ -0,0 +1,303 @@ +*> \brief \b DLASRT sorts numbers in increasing or decreasing order. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASRT + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASRT( ID, N, D, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER ID +* INTEGER INFO, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION D( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> Sort the numbers in D in increasing order (if ID = 'I') or +*> in decreasing order (if ID = 'D' ). +*> +*> Use Quick Sort, reverting to Insertion sort on arrays of +*> size <= 20. Dimension of STACK limits N to about 2**32. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ID +*> \verbatim +*> ID is CHARACTER*1 +*> = 'I': sort D in increasing order; +*> = 'D': sort D in decreasing order. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The length of the array D. +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> On entry, the array to be sorted. +*> On exit, D has been sorted into increasing order +*> (D(1) <= ... <= D(N) ) or into decreasing order +*> (D(1) >= ... >= D(N) ), depending on ID. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASRT( ID, N, D, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER ID + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + INTEGER SELECT + PARAMETER ( SELECT = 20 ) +* .. +* .. Local Scalars .. + INTEGER DIR, ENDD, I, J, START, STKPNT + DOUBLE PRECISION D1, D2, D3, DMNMX, TMP +* .. +* .. Local Arrays .. + INTEGER STACK( 2, 32 ) +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input paramters. +* + INFO = 0 + DIR = -1 + IF( LSAME( ID, 'D' ) ) THEN + DIR = 0 + ELSE IF( LSAME( ID, 'I' ) ) THEN + DIR = 1 + END IF + IF( DIR.EQ.-1 ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASRT', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* + STKPNT = 1 + STACK( 1, 1 ) = 1 + STACK( 2, 1 ) = N + 10 CONTINUE + START = STACK( 1, STKPNT ) + ENDD = STACK( 2, STKPNT ) + STKPNT = STKPNT - 1 + IF( ENDD-START.LE.SELECT .AND. ENDD-START.GT.0 ) THEN +* +* Do Insertion sort on D( START:ENDD ) +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + DO 30 I = START + 1, ENDD + DO 20 J = I, START + 1, -1 + IF( D( J ).GT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 30 + END IF + 20 CONTINUE + 30 CONTINUE +* + ELSE +* +* Sort into increasing order +* + DO 50 I = START + 1, ENDD + DO 40 J = I, START + 1, -1 + IF( D( J ).LT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 50 + END IF + 40 CONTINUE + 50 CONTINUE +* + END IF +* + ELSE IF( ENDD-START.GT.SELECT ) THEN +* +* Partition D( START:ENDD ) and stack parts, largest one first +* +* Choose partition entry as median of 3 +* + D1 = D( START ) + D2 = D( ENDD ) + I = ( START+ENDD ) / 2 + D3 = D( I ) + IF( D1.LT.D2 ) THEN + IF( D3.LT.D1 ) THEN + DMNMX = D1 + ELSE IF( D3.LT.D2 ) THEN + DMNMX = D3 + ELSE + DMNMX = D2 + END IF + ELSE + IF( D3.LT.D2 ) THEN + DMNMX = D2 + ELSE IF( D3.LT.D1 ) THEN + DMNMX = D3 + ELSE + DMNMX = D1 + END IF + END IF +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + I = START - 1 + J = ENDD + 1 + 60 CONTINUE + 70 CONTINUE + J = J - 1 + IF( D( J ).LT.DMNMX ) + $ GO TO 70 + 80 CONTINUE + I = I + 1 + IF( D( I ).GT.DMNMX ) + $ GO TO 80 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 60 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + ELSE +* +* Sort into increasing order +* + I = START - 1 + J = ENDD + 1 + 90 CONTINUE + 100 CONTINUE + J = J - 1 + IF( D( J ).GT.DMNMX ) + $ GO TO 100 + 110 CONTINUE + I = I + 1 + IF( D( I ).LT.DMNMX ) + $ GO TO 110 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 90 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + END IF + END IF + IF( STKPNT.GT.0 ) + $ GO TO 10 + RETURN +* +* End of DLASRT +* + END diff --git a/lapack/internal/testdata/dlasqtest/ieeeck.f b/lapack/internal/testdata/dlasqtest/ieeeck.f new file mode 100644 index 00000000..132e4367 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/ieeeck.f @@ -0,0 +1,203 @@ +*> \brief \b IEEECK +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IEEECK + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* .. Scalar Arguments .. +* INTEGER ISPEC +* REAL ONE, ZERO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> IEEECK is called from the ILAENV to verify that Infinity and +*> possibly NaN arithmetic is safe (i.e. will not trap). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies whether to test just for inifinity arithmetic +*> or whether to test for infinity and NaN arithmetic. +*> = 0: Verify infinity arithmetic only. +*> = 1: Verify infinity and NaN arithmetic. +*> \endverbatim +*> +*> \param[in] ZERO +*> \verbatim +*> ZERO is REAL +*> Must contain the value 0.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> \endverbatim +*> +*> \param[in] ONE +*> \verbatim +*> ONE is REAL +*> Must contain the value 1.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> +*> RETURN VALUE: INTEGER +*> = 0: Arithmetic failed to produce the correct answers +*> = 1: Arithmetic produced the correct answers +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER ISPEC + REAL ONE, ZERO +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF, + $ NEGZRO, NEWZRO, POSINF +* .. +* .. Executable Statements .. + IEEECK = 1 +* + POSINF = ONE / ZERO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = -ONE / ZERO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGZRO = ONE / ( NEGINF+ONE ) + IF( NEGZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = ONE / NEGZRO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEWZRO = NEGZRO + ZERO + IF( NEWZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = ONE / NEWZRO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = NEGINF*POSINF + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = POSINF*POSINF + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* +* +* +* +* Return if we were only asked to check infinity arithmetic +* + IF( ISPEC.EQ.0 ) + $ RETURN +* + NAN1 = POSINF + NEGINF +* + NAN2 = POSINF / NEGINF +* + NAN3 = POSINF / POSINF +* + NAN4 = POSINF*ZERO +* + NAN5 = NEGINF*NEGZRO +* + NAN6 = NAN5*ZERO +* + IF( NAN1.EQ.NAN1 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN2.EQ.NAN2 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN3.EQ.NAN3 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN4.EQ.NAN4 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN5.EQ.NAN5 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN6.EQ.NAN6 ) THEN + IEEECK = 0 + RETURN + END IF +* + RETURN + END diff --git a/lapack/internal/testdata/dlasqtest/ilaenv.f b/lapack/internal/testdata/dlasqtest/ilaenv.f new file mode 100644 index 00000000..867464de --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/ilaenv.f @@ -0,0 +1,624 @@ +*> \brief \b ILAENV +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILAENV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* .. Scalar Arguments .. +* CHARACTER*( * ) NAME, OPTS +* INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILAENV is called from the LAPACK routines to choose problem-dependent +*> parameters for the local environment. See ISPEC for a description of +*> the parameters. +*> +*> ILAENV returns an INTEGER +*> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC +*> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. +*> +*> This version provides a set of parameters which should give good, +*> but not optimal, performance on many of the currently available +*> computers. Users are encouraged to modify this subroutine to set +*> the tuning parameters for their particular machine using the option +*> and problem size information in the arguments. +*> +*> This routine will not function correctly if it is converted to all +*> lower case. Converting it to all upper case is allowed. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies the parameter to be returned as the value of +*> ILAENV. +*> = 1: the optimal blocksize; if this value is 1, an unblocked +*> algorithm will give the best performance. +*> = 2: the minimum block size for which the block routine +*> should be used; if the usable block size is less than +*> this value, an unblocked routine should be used. +*> = 3: the crossover point (in a block routine, for N less +*> than this value, an unblocked routine should be used) +*> = 4: the number of shifts, used in the nonsymmetric +*> eigenvalue routines (DEPRECATED) +*> = 5: the minimum column dimension for blocking to be used; +*> rectangular blocks must have dimension at least k by m, +*> where k is given by ILAENV(2,...) and m by ILAENV(5,...) +*> = 6: the crossover point for the SVD (when reducing an m by n +*> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds +*> this value, a QR factorization is used first to reduce +*> the matrix to a triangular form.) +*> = 7: the number of processors +*> = 8: the crossover point for the multishift QR method +*> for nonsymmetric eigenvalue problems (DEPRECATED) +*> = 9: maximum size of the subproblems at the bottom of the +*> computation tree in the divide-and-conquer algorithm +*> (used by xGELSD and xGESDD) +*> =10: ieee NaN arithmetic can be trusted not to trap +*> =11: infinity arithmetic can be trusted not to trap +*> 12 <= ISPEC <= 16: +*> xHSEQR or one of its subroutines, +*> see IPARMQ for detailed explanation +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is CHARACTER*(*) +*> The name of the calling subroutine, in either upper case or +*> lower case. +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is CHARACTER*(*) +*> The character options to the subroutine NAME, concatenated +*> into a single character string. For example, UPLO = 'U', +*> TRANS = 'T', and DIAG = 'N' for a triangular routine would +*> be specified as OPTS = 'UTN'. +*> \endverbatim +*> +*> \param[in] N1 +*> \verbatim +*> N1 is INTEGER +*> \endverbatim +*> +*> \param[in] N2 +*> \verbatim +*> N2 is INTEGER +*> \endverbatim +*> +*> \param[in] N3 +*> \verbatim +*> N3 is INTEGER +*> \endverbatim +*> +*> \param[in] N4 +*> \verbatim +*> N4 is INTEGER +*> Problem dimensions for the subroutine NAME; these may not all +*> be required. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The following conventions have been used when calling ILAENV from the +*> LAPACK routines: +*> 1) OPTS is a concatenation of all of the character options to +*> subroutine NAME, in the same order that they appear in the +*> argument list for NAME, even if they are not used in determining +*> the value of the parameter specified by ISPEC. +*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order +*> that they appear in the argument list for NAME. N1 is used +*> first, N2 second, and so on, and unused problem dimensions are +*> passed a value of -1. +*> 3) The parameter value returned by ILAENV is checked for validity in +*> the calling subroutine. For example, ILAENV is used to retrieve +*> the optimal blocksize for STRTRI as follows: +*> +*> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) +*> IF( NB.LE.1 ) NB = MAX( 1, N ) +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*( * ) NAME, OPTS + INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, IC, IZ, NB, NBMIN, NX + LOGICAL CNAME, SNAME + CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC CHAR, ICHAR, INT, MIN, REAL +* .. +* .. External Functions .. + INTEGER IEEECK, IPARMQ + EXTERNAL IEEECK, IPARMQ +* .. +* .. Executable Statements .. +* + GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, + $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC +* +* Invalid value for ISPEC +* + ILAENV = -1 + RETURN +* + 10 CONTINUE +* +* Convert NAME to upper case if the first character is lower case. +* + ILAENV = 1 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 20 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 20 CONTINUE + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO 30 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + 30 CONTINUE + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 40 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 40 CONTINUE + END IF + END IF +* + C1 = SUBNAM( 1: 1 ) + SNAME = C1.EQ.'S' .OR. C1.EQ.'D' + CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' + IF( .NOT.( CNAME .OR. SNAME ) ) + $ RETURN + C2 = SUBNAM( 2: 3 ) + C3 = SUBNAM( 4: 6 ) + C4 = C3( 2: 3 ) +* + GO TO ( 50, 60, 70 )ISPEC +* + 50 CONTINUE +* +* ISPEC = 1: block size +* +* In these examples, separate code is provided for setting NB for +* real and complex. We assume that NB will take the same value in +* single or double precision. +* + NB = 1 +* + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. + $ C3.EQ.'QLF' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'PO' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRF' ) THEN + NB = 64 + ELSE IF( C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( C2.EQ.'GB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'PB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'TR' ) THEN + IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'LA' ) THEN + IF( C3.EQ.'UUM' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN + IF( C3.EQ.'EBZ' ) THEN + NB = 1 + END IF + END IF + ILAENV = NB + RETURN +* + 60 CONTINUE +* +* ISPEC = 2: minimum block size +* + NBMIN = 2 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NBMIN = 8 + ELSE + NBMIN = 8 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + END IF + ILAENV = NBMIN + RETURN +* + 70 CONTINUE +* +* ISPEC = 3: crossover point +* + NX = 0 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + END IF + ILAENV = NX + RETURN +* + 80 CONTINUE +* +* ISPEC = 4: number of shifts (used by xHSEQR) +* + ILAENV = 6 + RETURN +* + 90 CONTINUE +* +* ISPEC = 5: minimum column dimension (not used) +* + ILAENV = 2 + RETURN +* + 100 CONTINUE +* +* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) +* + ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) + RETURN +* + 110 CONTINUE +* +* ISPEC = 7: number of processors (not used) +* + ILAENV = 1 + RETURN +* + 120 CONTINUE +* +* ISPEC = 8: crossover point for multishift (used by xHSEQR) +* + ILAENV = 50 + RETURN +* + 130 CONTINUE +* +* ISPEC = 9: maximum size of the subproblems at the bottom of the +* computation tree in the divide-and-conquer algorithm +* (used by xGELSD and xGESDD) +* + ILAENV = 25 + RETURN +* + 140 CONTINUE +* +* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 1, 0.0, 1.0 ) + END IF + RETURN +* + 150 CONTINUE +* +* ISPEC = 11: infinity arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 0, 0.0, 1.0 ) + END IF + RETURN +* + 160 CONTINUE +* +* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. +* + ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) + RETURN +* +* End of ILAENV +* + END diff --git a/lapack/internal/testdata/dlasqtest/iparmq.f b/lapack/internal/testdata/dlasqtest/iparmq.f new file mode 100644 index 00000000..bd5bd7a0 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/iparmq.f @@ -0,0 +1,322 @@ +*> \brief \b IPARMQ +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IPARMQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, ISPEC, LWORK, N +* CHARACTER NAME*( * ), OPTS*( * ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This program sets problem and machine dependent parameters +*> useful for xHSEQR and its subroutines. It is called whenever +*> ILAENV is called with 12 <= ISPEC <= 16 +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is integer scalar +*> ISPEC specifies which tunable parameter IPARMQ should +*> return. +*> +*> ISPEC=12: (INMIN) Matrices of order nmin or less +*> are sent directly to xLAHQR, the implicit +*> double shift QR algorithm. NMIN must be +*> at least 11. +*> +*> ISPEC=13: (INWIN) Size of the deflation window. +*> This is best set greater than or equal to +*> the number of simultaneous shifts NS. +*> Larger matrices benefit from larger deflation +*> windows. +*> +*> ISPEC=14: (INIBL) Determines when to stop nibbling and +*> invest in an (expensive) multi-shift QR sweep. +*> If the aggressive early deflation subroutine +*> finds LD converged eigenvalues from an order +*> NW deflation window and LD.GT.(NW*NIBBLE)/100, +*> then the next QR sweep is skipped and early +*> deflation is applied immediately to the +*> remaining active diagonal block. Setting +*> IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a +*> multi-shift QR sweep whenever early deflation +*> finds a converged eigenvalue. Setting +*> IPARMQ(ISPEC=14) greater than or equal to 100 +*> prevents TTQRE from skipping a multi-shift +*> QR sweep. +*> +*> ISPEC=15: (NSHFTS) The number of simultaneous shifts in +*> a multi-shift QR iteration. +*> +*> ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the +*> following meanings. +*> 0: During the multi-shift QR sweep, +*> xLAQR5 does not accumulate reflections and +*> does not use matrix-matrix multiply to +*> update the far-from-diagonal matrix +*> entries. +*> 1: During the multi-shift QR sweep, +*> xLAQR5 and/or xLAQRaccumulates reflections and uses +*> matrix-matrix multiply to update the +*> far-from-diagonal matrix entries. +*> 2: During the multi-shift QR sweep. +*> xLAQR5 accumulates reflections and takes +*> advantage of 2-by-2 block structure during +*> matrix-matrix multiplies. +*> (If xTRMM is slower than xGEMM, then +*> IPARMQ(ISPEC=16)=1 may be more efficient than +*> IPARMQ(ISPEC=16)=2 despite the greater level of +*> arithmetic work implied by the latter choice.) +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is character string +*> Name of the calling subroutine +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is character string +*> This is a concatenation of the string arguments to +*> TTQRE. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is integer scalar +*> N is the order of the Hessenberg matrix H. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper triangular +*> in rows and columns 1:ILO-1 and IHI+1:N. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is integer scalar +*> The amount of workspace available. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Little is known about how best to choose these parameters. +*> It is possible to use different values of the parameters +*> for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR. +*> +*> It is probably best to choose different parameters for +*> different matrices and different parameters at different +*> times during the iteration, but this has not been +*> implemented --- yet. +*> +*> +*> The best choices of most of the parameters depend +*> in an ill-understood way on the relative execution +*> rate of xLAQR3 and xLAQR5 and on the nature of each +*> particular eigenvalue problem. Experiment may be the +*> only practical way to determine which choices are most +*> effective. +*> +*> Following is a list of default values supplied by IPARMQ. +*> These defaults may be adjusted in order to attain better +*> performance in any particular computational environment. +*> +*> IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point. +*> Default: 75. (Must be at least 11.) +*> +*> IPARMQ(ISPEC=13) Recommended deflation window size. +*> This depends on ILO, IHI and NS, the +*> number of simultaneous shifts returned +*> by IPARMQ(ISPEC=15). The default for +*> (IHI-ILO+1).LE.500 is NS. The default +*> for (IHI-ILO+1).GT.500 is 3*NS/2. +*> +*> IPARMQ(ISPEC=14) Nibble crossover point. Default: 14. +*> +*> IPARMQ(ISPEC=15) Number of simultaneous shifts, NS. +*> a multi-shift QR iteration. +*> +*> If IHI-ILO+1 is ... +*> +*> greater than ...but less ... the +*> or equal to ... than default is +*> +*> 0 30 NS = 2+ +*> 30 60 NS = 4+ +*> 60 150 NS = 10 +*> 150 590 NS = ** +*> 590 3000 NS = 64 +*> 3000 6000 NS = 128 +*> 6000 infinity NS = 256 +*> +*> (+) By default matrices of this order are +*> passed to the implicit double shift routine +*> xLAHQR. See IPARMQ(ISPEC=12) above. These +*> values of NS are used only in case of a rare +*> xLAHQR failure. +*> +*> (**) The asterisks (**) indicate an ad-hoc +*> function increasing from 10 to 64. +*> +*> IPARMQ(ISPEC=16) Select structured matrix multiply. +*> (See ISPEC=16 above for details.) +*> Default: 3. +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, ISPEC, LWORK, N + CHARACTER NAME*( * ), OPTS*( * ) +* +* ================================================================ +* .. Parameters .. + INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22 + PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14, + $ ISHFTS = 15, IACC22 = 16 ) + INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP + PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14, + $ NIBBLE = 14, KNWSWP = 500 ) + REAL TWO + PARAMETER ( TWO = 2.0 ) +* .. +* .. Local Scalars .. + INTEGER NH, NS +* .. +* .. Intrinsic Functions .. + INTRINSIC LOG, MAX, MOD, NINT, REAL +* .. +* .. Executable Statements .. + IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR. + $ ( ISPEC.EQ.IACC22 ) ) THEN +* +* ==== Set the number simultaneous shifts ==== +* + NH = IHI - ILO + 1 + NS = 2 + IF( NH.GE.30 ) + $ NS = 4 + IF( NH.GE.60 ) + $ NS = 10 + IF( NH.GE.150 ) + $ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) ) + IF( NH.GE.590 ) + $ NS = 64 + IF( NH.GE.3000 ) + $ NS = 128 + IF( NH.GE.6000 ) + $ NS = 256 + NS = MAX( 2, NS-MOD( NS, 2 ) ) + END IF +* + IF( ISPEC.EQ.INMIN ) THEN +* +* +* ===== Matrices of order smaller than NMIN get sent +* . to xLAHQR, the classic double shift algorithm. +* . This must be at least 11. ==== +* + IPARMQ = NMIN +* + ELSE IF( ISPEC.EQ.INIBL ) THEN +* +* ==== INIBL: skip a multi-shift qr iteration and +* . whenever aggressive early deflation finds +* . at least (NIBBLE*(window size)/100) deflations. ==== +* + IPARMQ = NIBBLE +* + ELSE IF( ISPEC.EQ.ISHFTS ) THEN +* +* ==== NSHFTS: The number of simultaneous shifts ===== +* + IPARMQ = NS +* + ELSE IF( ISPEC.EQ.INWIN ) THEN +* +* ==== NW: deflation window size. ==== +* + IF( NH.LE.KNWSWP ) THEN + IPARMQ = NS + ELSE + IPARMQ = 3*NS / 2 + END IF +* + ELSE IF( ISPEC.EQ.IACC22 ) THEN +* +* ==== IACC22: Whether to accumulate reflections +* . before updating the far-from-diagonal elements +* . and whether to use 2-by-2 block structure while +* . doing it. A small amount of work could be saved +* . by making this choice dependent also upon the +* . NH=IHI-ILO+1. +* + IPARMQ = 0 + IF( NS.GE.KACMIN ) + $ IPARMQ = 1 + IF( NS.GE.K22MIN ) + $ IPARMQ = 2 +* + ELSE +* ===== invalid value of ispec ===== + IPARMQ = -1 +* + END IF +* +* ==== End of IPARMQ ==== +* + END diff --git a/lapack/internal/testdata/dlasqtest/lsame.f b/lapack/internal/testdata/dlasqtest/lsame.f new file mode 100644 index 00000000..315304c3 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/lsame.f @@ -0,0 +1,125 @@ +*> \brief \b LSAME +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* LOGICAL FUNCTION LSAME( CA, CB ) +* +* .. Scalar Arguments .. +* CHARACTER CA, CB +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> LSAME returns .TRUE. if CA is the same letter as CB regardless of +*> case. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CA +*> \verbatim +*> \endverbatim +*> +*> \param[in] CB +*> \verbatim +*> CA and CB specify the single characters to be compared. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END diff --git a/lapack/internal/testdata/dlasqtest/testdlasq1.f90 b/lapack/internal/testdata/dlasqtest/testdlasq1.f90 new file mode 100644 index 00000000..5ee8878d --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/testdlasq1.f90 @@ -0,0 +1,626 @@ +program randomsys1 +implicit none +integer, parameter :: nmax=1000 +real(kind=8), dimension(nmax) :: b, x +real(kind=8), dimension(nmax,nmax) :: a +real(kind=8) :: err +integer :: i, info, lda, ldb, nrhs, n,iter +integer, dimension(nmax) :: ipiv + +real(kind=8), dimension(100) :: d +real(kind=8), dimension(99) :: e +real(kind=8), dimension(400) :: work + +d(1:100) = (/1.8334043365537367D+00, & +1.4451749896846686D+00, & +1.0018566447551758D-01, & +-7.2143260438744417D-01, & +-3.7864653015502087D-01, & +-9.0270111568850808D-01, & +1.2204305489831029D+00, & +-9.7628177811136485D-01, & +8.4199233511256721D-01, & +-2.7938817329922050D-01, & +3.6157779599908046D-01, & +-1.8563411313998144D+00, & +-5.7930081140992240D-01, & +7.4080550463379169D-01, & +1.7021409147402005D+00, & +-5.7992035328196923D-01, & +4.0877426434579855D-01, & +-7.1297236049446144D-01, & +-1.2214095798914903D+00, & +2.9037983248746674D-01, & +7.4685018821608473D-01, & +3.0213735481316539D-01, & +-1.5207207136907624D-01, & +-2.1332671668411556D+00, & +6.8744661834930676D-01, & +-2.0946670404018297D-01, & +-1.5221059713957628D+00, & +1.1117190383859539D+00, & +-6.1175948159744020D-01, & +-4.4149212620857964D-01, & +-5.5702632609947533D-01, & +1.4071858950692646D+00, & +-3.2329881667362437D-01, & +-3.1958092104323499D-01, & +9.0934520529412111D-01, & +9.7881421364746712D-01, & +-5.1202970940327841D-01, & +1.5040024724520102D+00, & +-7.1993831181468571D-01, & +-7.1819661000094503D-01, & +-1.3481185445933910D+00, & +-1.4984426192966893D+00, & +1.1356626654278745D+00, & +1.6427417967661164D+00, & +-1.4184643787388000D+00, & +2.9811560271518989D-01, & +7.8630022575860559D-01, & +-1.8262830018047089D+00, & +6.3058255632564841D-01, & +-2.0692752940382309D-02, & +-7.2726648905906033D-01, & +-1.0461446937034022D+00, & +1.2530345094987356D+00, & +-2.3583665341168443D+00, & +1.9177654334479410D-01, & +-1.3563410975095058D+00, & +-1.0669710425337906D+00, & +1.4840245472507219D+00, & +-6.9185935518981789D-01, & +1.6813910559942205D-01, & +-7.1255209442204559D-01, & +-1.0112797453604008D+00, & +2.8591746998403011D-01, & +-1.9403039239509563D+00, & +-8.1434141084858885D-02, & +1.3873918713367210D+00, & +-8.8212258376548647D-01, & +-1.2253510598547583D+00, & +-3.8677386127356073D-01, & +-1.0262656526479850D+00, & +2.9468734022014376D-01, & +2.3442965677966704D-01, & +1.2219251054024911D+00, & +2.6066505150099868D+00, & +-7.8543147636303856D-01, & +-9.8126277325503253D-01, & +1.1722358680271947D+00, & +-8.1477749181289072D-01, & +1.3437777060446568D-01, & +3.4626341297821356D-01, & +-4.5672026157532375D-01, & +3.0496975959999184D-01, & +3.4636683737604146D-01, & +1.5114807806635011D-01, & +-1.1376177393945328D+00, & +9.3419670621891793D-01, & +7.9186416310239138D-01, & +6.7230421440462595D-01, & +-2.3236847424852280D-01, & +-1.0927137499922757D+00, & +9.8562766620822340D-01, & +-1.1382935431007701D-01, & +-9.2072237463768225D-01, & +6.1142850054965170D-01, & +8.2752057022739134D-03, & +6.7197122515126417D-01, & +-1.1007816668204429D+00, & +-1.2196829073430047D+00, & +-6.1428585523321222D-01, & +6.4599803465517280D-01/) +e(1:99) = (/-9.6393084631802151D-01, & +2.5532567563781607D+00, & +8.2492664240014357D-01, & +8.2628261757058474D-01, & +7.3021658879350859D-01, & +3.4014431785419519D-02, & +3.2121571974900542D-01, & +2.5987166374572213D-02, & +-3.1150206355945814D-01, & +1.3429094629249927D+00, & +8.6246434952180806D-01, & +-8.3756967113851388D-01, & +9.5277237959592009D-01, & +1.1717152179539618D+00, & +2.5980977671460709D-01, & +-6.4468162556415265D-01, & +-1.3751364204170078D+00, & +2.9677172586579936D-01, & +-3.7071376979215720D-01, & +8.2912690407496381D-01, & +-8.6820437618589197D-01, & +5.2500961173269689D-01, & +1.0657701704030644D+00, & +-4.6621502244820201D-03, & +-1.9013997092621748D-01, & +1.5098985741543924D-01, & +1.0102557493909003D+00, & +8.8830298507891103D-01, & +2.0464938169302065D+00, & +4.7910192662606277D-01, & +1.4155288808120892D+00, & +-5.8169388172737679D-01, & +-9.8007278321065916D-01, & +2.4369633027015425D-01, & +1.6173163491335715D-01, & +6.6887624704464499D-01, & +-1.6500999383869115D+00, & +1.4380895281962367D+00, & +4.7508565250807777D-01, & +-3.1332991280327299D-01, & +3.1402552392574451D-01, & +5.6246373170551534D-01, & +2.5944662334710866D-01, & +4.8101648688789655D-01, & +1.7823376751423265D+00, & +3.0160656491545923D-01, & +-8.8915960863742050D-01, & +-4.4783548340444157D-01, & +8.9985836172311440D-01, & +-1.5626460660617920D+00, & +8.9972644535054036D-01, & +2.4456452268563592D-01, & +-3.1377944726557985D+00, & +1.6874136691232020D+00, & +2.4791290942030142D-01, & +1.7055713617986679D+00, & +1.7027580566127303D+00, & +-5.2969836953828042D-01, & +-8.6858804294195124D-01, & +7.6588136514601834D-01, & +8.6161822555855139D-01, & +6.5387844189250555D-01, & +7.0164941351276944D-01, & +4.1171318512873312D-01, & +7.6075070364872455D-01, & +8.5708035578209718D-02, & +-4.3558500874018535D-01, & +-6.2302104134015979D-01, & +8.4912051051824700D-01, & +-1.7120108380813925D-01, & +-9.7880552224113848D-01, & +1.1904436348486702D+00, & +7.0273864977367972D-01, & +-1.0213785672492079D+00, & +4.8392839864322634D-02, & +1.2611184618297511D-01, & +5.3330169134056482D-01, & +1.8070298106837654D+00, & +-2.8022831541922144D-01, & +8.0235047640662738D-01, & +-1.2615220404695868D+00, & +1.1878769364434660D+00, & +-2.1059219864297674D-01, & +3.2897539618854971D-01, & +-5.8928028913554642D-01, & +1.9164347352074701D-02, & +2.8035162764822374D-01, & +-9.6622429734784299D-02, & +3.4216241143907045D-01, & +-2.2358052317750254D+00, & +6.6284070879481805D-01, & +7.4316074303777269D-01, & +1.0280848437626724D+00, & +-2.0939898252763922D-01, & +-1.0268515265064981D+00, & +-1.2648527910628871D-01, & +4.8663846308033204D-01, & +1.2270171407392749D+00, & +-1.6189022502021406D+00/) +work(1:400) = (/6.0466028797961957D-01, & +9.4050908804501243D-01, & +6.6456005321849043D-01, & +4.3771418718698019D-01, & +4.2463749707126569D-01, & +6.8682307286710942D-01, & +6.5637019217476222D-02, & +1.5651925473279124D-01, & +9.6969518914484562D-02, & +3.0091186058528707D-01, & +5.1521262850206540D-01, & +8.1363996099009683D-01, & +2.1426387258237492D-01, & +3.8065718929968601D-01, & +3.1805817433032985D-01, & +4.6888984490242319D-01, & +2.8303415118044517D-01, & +2.9310185733681576D-01, & +6.7908467592021626D-01, & +2.1855305259276428D-01, & +2.0318687664732285D-01, & +3.6087141685690599D-01, & +5.7067327607102258D-01, & +8.6249143744788637D-01, & +2.9311424455385804D-01, & +2.9708256355629153D-01, & +7.5257303555161192D-01, & +2.0658266191369859D-01, & +8.6533501300156102D-01, & +6.9671916574663473D-01, & +5.2382030605000085D-01, & +2.8303083325889995D-02, & +1.5832827774512764D-01, & +6.0725343954551536D-01, & +9.7524161886057836D-01, & +7.9453623373871976D-02, & +5.9480859768306260D-01, & +5.9120651313875290D-02, & +6.9202458735311201D-01, & +3.0152268100655999D-01, & +1.7326623818270528D-01, & +5.4109985500873525D-01, & +5.4415557300088502D-01, & +2.7850762181610883D-01, & +4.2315220157182809D-01, & +5.3058571535070520D-01, & +2.5354050051506050D-01, & +2.8208099496492467D-01, & +7.8860491501934493D-01, & +3.6180548048031691D-01, & +8.8054312274161706D-01, & +2.9711226063977081D-01, & +8.9436172933045366D-01, & +9.7454618399116566D-02, & +9.7691686858626237D-01, & +7.4290998949843021D-02, & +2.2228941700678773D-01, & +6.8107831239257088D-01, & +2.4151508854715265D-01, & +3.1152244431052484D-01, & +9.3284642851843402D-01, & +7.4184895999182299D-01, & +8.0105504265266125D-01, & +7.3023147729480831D-01, & +1.8292491645390843D-01, & +4.2835708180680782D-01, & +8.9699195756187267D-01, & +6.8265348801324377D-01, & +9.7892935557668759D-01, & +9.2221225892172687D-01, & +9.0837275353887081D-02, & +4.9314199770488037D-01, & +9.2698680357441421D-01, & +9.5494544041678175D-01, & +3.4795396362822290D-01, & +6.9083883150567893D-01, & +7.1090719529999513D-01, & +5.6377959581526438D-01, & +6.4948946059294044D-01, & +5.5176504901277490D-01, & +7.5582350749159777D-01, & +4.0380328579570035D-01, & +1.3065111702897217D-01, & +9.8596472934024670D-01, & +8.9634174539621614D-01, & +3.2208397052088172D-01, & +7.2114776519267410D-01, & +6.4453978250932942D-01, & +8.5520507541911234D-02, & +6.6957529769977453D-01, & +6.2272831736370449D-01, & +3.6969284363982191D-01, & +2.3682254680548520D-01, & +5.3528189063440612D-01, & +1.8724610140105305D-01, & +2.3884070280531861D-01, & +6.2809817121836331D-01, & +1.2675292937260130D-01, & +2.8133029380535923D-01, & +4.1032284435628247D-01, & +4.3491247389145765D-01, & +6.2509502830053043D-01, & +5.5014692050772329D-01, & +6.2360882645293014D-01, & +7.2918072673429812D-01, & +8.3053391899480622D-01, & +5.1381551612136129D-04, & +7.3606860149543141D-01, & +3.9998376285699544D-01, & +4.9786811334270198D-01, & +6.0397810228292748D-01, & +4.0961827788499267D-01, & +2.9671281274886468D-02, & +1.9038945142366389D-03, & +2.8430411748625642D-03, & +9.1582131461295702D-01, & +5.8983418500491935D-01, & +5.5939244907101404D-01, & +8.1540517093336062D-01, & +8.7801175865240000D-01, & +4.5844247857565062D-01, & +6.0016559532333080D-01, & +2.6265150609689439D-02, & +8.4583278724804167D-01, & +2.4969320116349378D-01, & +6.4178429079958299D-01, & +2.4746660783662855D-01, & +1.7365584472313275D-01, & +5.9262375321244554D-01, & +8.1439455096702107D-01, & +6.9383813651720949D-01, & +3.0322547833006870D-02, & +5.3921010589094598D-01, & +9.7567481498731645D-01, & +7.5076305647959851D-01, & +2.9400631279501488D-01, & +7.5316127773675856D-01, & +1.5096404497960700D-01, & +3.5576726540923664D-01, & +8.3193085296981628D-01, & +2.3183004193767690D-01, & +6.2783460500002275D-01, & +4.9839430127597562D-01, & +8.9836089260366833D-02, & +2.5193959794895041D-02, & +3.9221618315402479D-01, & +5.8938308640079917D-01, & +9.2961163544903025D-01, & +5.7208680144308399D-01, & +5.8857634514348212D-01, & +4.1176268834501623D-01, & +5.5258038981424384D-01, & +4.9160739613162047D-01, & +9.5795391353751358D-01, & +7.9720854091080284D-01, & +1.0738111282075208D-01, & +7.8303497339600214D-01, & +3.9325099922888668D-01, & +1.3041384617379179D-01, & +1.9003276633920804D-01, & +7.3982578101583363D-01, & +6.5404140923127974D-01, & +9.8383788985732593D-02, & +5.2038028571222783D-01, & +9.9729663719935122D-02, & +1.5184340208190175D-01, & +7.6190262303755044D-02, & +3.1520808532012451D-01, & +1.5965092146489504D-01, & +1.3780406161952607D-01, & +3.2261068286779754D-01, & +5.3907451703947940D-01, & +5.7085162734549566D-01, & +5.1278175811108151D-01, & +6.8417513009745512D-01, & +6.5304020513536076D-01, & +5.2449975954986505D-01, & +6.5427013442414605D-01, & +7.1636837490167116D-01, & +6.3664421403817983D-01, & +1.2825909106361078D-02, & +3.0682195787138565D-02, & +9.8030874806304999D-02, & +3.6911170916434483D-01, & +8.2645412563474197D-01, & +3.4768170859156955D-01, & +3.4431501772636058D-01, & +2.5299982364784412D-01, & +2.1647114665497036D-01, & +5.5500213563479417D-01, & +4.0207084527183062D-01, & +5.0649706367641834D-01, & +1.6867966833433606D-01, & +3.3136826030698385D-01, & +8.2792809615055885D-01, & +7.0028787314581509D-01, & +5.7926259664335768D-02, & +9.9915949022033324D-01, & +4.1154036322047599D-01, & +1.1167463676480495D-01, & +7.8075408455849260D-01, & +9.2117624440742188D-02, & +5.3494624494407637D-02, & +7.1469581589162956D-01, & +2.5076227542918023D-01, & +8.4863292090315690D-01, & +9.7388187407067284D-01, & +2.1256094905031958D-01, & +2.1533783325605065D-02, & +9.4519476038882588D-01, & +9.2970155499924934D-02, & +6.4583337452397671D-01, & +3.1188554282705405D-01, & +4.4846436394045647D-01, & +4.8723924858036949D-01, & +8.2479676511350006D-02, & +6.7182910623463954D-01, & +4.0018828942364343D-01, & +9.0027514726431157D-01, & +9.4988320610125321D-01, & +3.1933126760711733D-01, & +4.9938549375241320D-01, & +4.0043231714181288D-01, & +1.9808670325451940D-02, & +6.4503886601944815D-01, & +4.2868843006993296D-01, & +3.3959675138730994D-01, & +8.8744750085050050D-01, & +2.3632747430436052D-01, & +7.6500821493327975D-01, & +3.5754647436084384D-02, & +7.2757725604152290D-01, & +6.2583662695812525D-01, & +5.1308750608785669D-01, & +7.2448356792351315D-02, & +7.2422905845916841D-01, & +8.7984484630570914D-01, & +9.7776347735771851D-01, & +8.4750026226468134D-01, & +8.3219793814993315D-01, & +2.4784452318699535D-01, & +9.1339906293647088D-01, & +7.5037210134653420D-02, & +8.3510380115435290D-01, & +6.2933169164530067D-01, & +7.5174057889673473D-01, & +6.3200343378879975D-01, & +9.6934213238731665D-02, & +1.4827369494876504D-02, & +5.8383474186253115D-01, & +6.8756195202154743D-02, & +9.9827381100849455D-01, & +6.4918841659842363D-01, & +9.8546557863324791D-01, & +8.3480576021921249D-01, & +3.3205608571906026D-01, & +6.6139318058334262D-01, & +9.5602062659660969D-01, & +3.1051027622482125D-01, & +1.8439069400202679D-01, & +9.6709434137177297D-01, & +8.3324181552815457D-01, & +3.0954845052732810D-01, & +8.0587176753764456D-01, & +4.1732584219038238D-01, & +7.1853044935277477D-01, & +4.0673677545039083D-01, & +8.9580326774414576D-01, & +9.5817636260259365D-01, & +1.8713221139656417D-02, & +7.9167230908208319D-01, & +4.2355315388584103D-01, & +1.5181277223073395D-02, & +4.3269824007906393D-01, & +9.0477623706573340D-01, & +8.5570441457488644D-01, & +4.2921642176334200D-02, & +6.5903053300775438D-01, & +3.4785904313005395D-01, & +5.0348679004869112D-01, & +8.3994742117055976D-01, & +2.3109568410543832D-02, & +1.2436351859954159D-01, & +2.6117561918821841D-01, & +8.3494750649349414D-01, & +3.1480479595597533D-01, & +7.6812064740880894D-03, & +8.9975012571752733D-01, & +3.7026753645051064D-01, & +1.0019940926941497D-01, & +6.4320402657020315D-01, & +7.6988908998308336D-01, & +7.9112533566198451D-01, & +2.6238190747072776D-01, & +3.4686388037925503D-01, & +2.1465371537694145D-01, & +8.2209289717657175D-01, & +3.5113429966521320D-01, & +5.9919425250588099D-01, & +5.7835125693111211D-01, & +4.1358098797631293D-01, & +1.1985050890286310D-01, & +9.1161370679159903D-01, & +5.3785580105748208D-02, & +2.2891758676059876D-01, & +3.2417396306138829D-01, & +3.5076512764716117D-01, & +3.4928874777426255D-01, & +3.0380212985436572D-01, & +9.6874615996581170D-01, & +6.7152655046083776D-01, & +2.0794312837315651D-01, & +9.6313940120247044D-01, & +3.0220237504213365D-01, & +8.0794108095480799D-01, & +1.3408416275024179D-01, & +9.4776028919455635D-01, & +6.4086482116825383D-01, & +9.5325875425035178D-01, & +8.0987422593395209D-01, & +1.8159084675756379D-01, & +9.4275737153737327D-01, & +8.3124103554376771D-01, & +4.9468043578205978D-01, & +8.5531034647693982D-01, & +7.1074391181909824D-01, & +2.7349475629159786D-01, & +4.0763287189198161D-01, & +9.0976128251911847D-01, & +9.4439713870030451D-01, & +4.9863245185560190D-01, & +2.8863831012730923D-01, & +9.7589525649963815D-01, & +4.5258447627808124D-01, & +4.4990698677957075D-02, & +3.1536198151820755D-01, & +9.5190614812037189D-01, & +7.5156308247423609D-01, & +5.3579099898961424D-01, & +6.6971458883510748D-01, & +8.6517499748328641D-01, & +4.5888445390388938D-01, & +5.7855090249582031D-01, & +4.8152982184966137D-01, & +5.5061576198318274D-01, & +9.5062324380815433D-01, & +5.0986542047295536D-01, & +7.4251472966182985D-01, & +4.9079401441435533D-01, & +6.6151414870689360D-02, & +2.6249066264989940D-01, & +9.2546794407799982D-01, & +3.7148665165822231D-01, & +4.0941940003107308D-01, & +4.1575196973399631D-01, & +9.7261599736539445D-02, & +9.0162762447969347D-01, & +4.4446597981328932D-03, & +2.7392454335102678D-01, & +1.0930666111680035D-01, & +8.5544841289295426D-01, & +2.5705535663902546D-01, & +9.8913209203202213D-01, & +9.2641142236812712D-01, & +1.7094603208839290D-01, & +3.0388712489325242D-01, & +5.3345144978115477D-01, & +1.7648961347647024D-01, & +8.1359077477652830D-01, & +7.0513712380125892D-01, & +2.5720755742139950D-01, & +2.5036892046498466D-01, & +3.3509436689927874D-01, & +7.5124063162526056D-01, & +4.8797826077860845D-03, & +8.4099320643626019D-01, & +2.2957358869665739D-01, & +1.3285547727582237D-02, & +9.4993740716879371D-01, & +8.9937146465701423D-01, & +9.6262420114388625D-01, & +4.3000361954927006D-02, & +7.1266261216467264D-01, & +5.1094098258212241D-02, & +4.0753210485857738D-01, & +4.7569737399615403D-01, & +3.4746838606940983D-01, & +4.0719938711096422D-02, & +5.9756620514440806D-01, & +2.6012467360309705D-01, & +8.3285585557738717D-01, & +9.6049750529821787D-01, & +9.3670756890653750D-01, & +2.2932023844733959D-01, & +7.2031310018914962D-01, & +7.5648232426876405D-01, & +4.5015392507594826D-01, & +3.3897738839543617D-01, & +4.7249205225111501D-01, & +9.8599436000817042D-01/) +n = 100 +info = 0 + +open(unit = 4, STATUS='REPLACE', file = "gen4tests.txt") +open(unit = 3, STATUS='REPLACE', file = "gen3tests.txt") +open(unit = 5, STATUS='REPLACE', file = "gen5tests.txt") + +call dlasq1(n, d, e, work, info) + +close(5) +close(3) +close(4) + +end \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/testdlasq2.f90 b/lapack/internal/testdata/dlasqtest/testdlasq2.f90 new file mode 100644 index 00000000..c908f7d6 --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/testdlasq2.f90 @@ -0,0 +1,171 @@ +! $CLASSHG/codes/lapack/random/randomsys1.f90 + +program randomsys1 +implicit none +integer, parameter :: nmax=1000 +real(kind=8), dimension(nmax) :: b, x +real(kind=8), dimension(nmax,nmax) :: a +real(kind=8) :: err +integer :: i, info, lda, ldb, nrhs, n,iter +integer, dimension(nmax) :: ipiv + +real(kind=8), dimension(84) :: z + +z(1:84) = (/2.3962280929192509D-01, & +6.4346010490580374D-01, & +5.4886677265274941D-01, & +1.8435046456575191D-01, & +4.2690013698472401D-01, & +6.2760930131666248D-01, & +8.7243363936287288D-02, & +5.3710399529030350D-01, & +8.4474604576675638D-01, & +4.0947669295022632D-01, & +2.0315141244999760D-01, & +8.2714283129979482D-01, & +9.6582843029739029D-01, & +3.7773539690481128D-01, & +6.4713340225873406D-01, & +6.7774351756798612D-01, & +4.4568905572928591D-01, & +1.7208265726837521D-01, & +3.5202074329011412D-01, & +3.2913965083413110D-01, & +7.4682622623737438D-01, & +2.7151044969605542D-01, & +5.6129178633962351D-01, & +1.3244294692867761D-01, & +7.9837660640147112D-01, & +2.0595995860196409D-01, & +2.6555102564257749D-02, & +1.9623902644848701D-01, & +7.8452468963715605D-03, & +8.2177375597112101D-01, & +9.4444982187044924D-01, & +4.6799576958310329D-01, & +1.1359180530395520D-01, & +1.6049482525711320D-01, & +8.4523811016138373D-01, & +8.5370708147160490D-01, & +3.0139325968162661D-01, & +2.5117154067021252D-01, & +2.0086476380364379D-01, & +2.6078975734443288D-01, & +2.5710509100784901D-01, & +6.2861740244633146D-01, & +4.7397018497236110D-01, & +8.6989475348440182D-01, & +6.4860795895959611D-01, & +8.8943219043019872D-01, & +7.9524758401855578D-01, & +8.8016617212154102D-01, & +2.1472721943810300D-01, & +9.5183566464760194D-01, & +7.1911522894148772D-01, & +1.1065249711733080D-01, & +9.5745872307341484D-01, & +6.4694742306793951D-01, & +5.8182607574435841D-01, & +1.2922028370755401D-02, & +2.7617229134380777D-01, & +8.0045359255855852D-01, & +3.2789738555900377D-01, & +5.7940374386642890D-01, & +2.3961554431041750D-02, & +6.6990484757537938D-01, & +1.8144929371280860D-01, & +2.8661849362222419D-01, & +6.5845572125062690D-01, & +5.8896512277754309D-01, & +6.3697665190607378D-02, & +1.3281935295985961D-01, & +7.4166314172628711D-01, & +5.0033182787066932D-01, & +3.1440772963953763D-02, & +9.9073931564031925D-01, & +3.4236965949145941D-03, & +6.9929220728508257D-01, & +7.5905196170645428D-01, & +2.5421825141163590D-01, & +3.3146571845550887D-01, & +5.7286596840196446D-01, & +9.9158547964144228D-01, & +4.8967497301052382D-01, & +5.6113697207961410D-01, & +6.0641422150435165D-01, & +8.5675901647669139D-02, & +2.5817319326781851D-01/) +n = 21 +info = 0 + +open(unit = 2,STATUS='REPLACE', file = "gen2tests.txt") +open(unit = 4, STATUS='REPLACE', file = "gen4tests.txt") +open(unit = 3,STATUS='REPLACE', file = "gen3tests.txt") +open(unit = 5,STATUS='REPLACE', file = "gen5tests.txt") + +write(2,*) "{" +write(2,'(9999(g0))',advance="no") "z: []float64{" +do i = 1, 4*n +write (2,'(99999(e24.16,a))',advance="no") z(i), "," +end do +write (2,*) "}," +write(2,*) "n: " ,n,"," + + +call dlasq2(n, z, info) + +write(2,'(9999(g0))', advance="no") "zOut: []float64{" +do i = 1, 4*n +write (2,'(99999(e24.16,a))', advance="no") z(i), "," +end do +write (2,*) "}," +write(2,*) "info:", info, "," +write(2,*) "}," + +print *, "Done fixed dlasq2" + +close(5) +close(3) +close(4) +close(2) + +! For random tests +n = 21 + +open(unit = 2, STATUS='REPLACE', file = "gen2tests.txt") +open(unit = 4, STATUS='REPLACE', file = "gen4tests.txt") +open(unit = 3, STATUS='REPLACE', file = "gen3tests.txt") +open(unit = 5, STATUS='REPLACE', file = "gen5tests.txt") + +do iter = 1, 2 + +call random_number(z(1:4*n)) + +write(2,*) "{" +write(2,'(9999(g0))', advance="no") "z: []float64{" +do i = 1, 4*n +write (2,'(99999(e24.16,a))', advance="no") z(i), "," +end do +write (2,*) "}," +write(2,*) "n: " ,n,"," + +call dlasq2(n, z, info) + +write(2,'(9999(g0))', advance="no") "zOut: []float64{" +do i = 1, 4*n + write (2,'(99999(e24.16,a))', advance="no") z(i), "," +end do +write (2,*) "}," +write(2,*) "info:", info, "," +write(2,*) "}," + +print *, "Done with dlasq2" + +end do + +close(5) +close(3) +close(4) +close(2) + +end program randomsys1 \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/testdlasq3.f90 b/lapack/internal/testdata/dlasqtest/testdlasq3.f90 new file mode 100644 index 00000000..8cc5cf0f --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/testdlasq3.f90 @@ -0,0 +1,132 @@ +program testdlasq3 +implicit none + +! Dlasq3 tests +integer :: i0, n0, pp,ttype, nFail,iter,nDiv,n +real(kind=8), dimension(84) :: z +real(kind=8) :: dmin,desig,qmax,dmin1,dmin2,dn,dn1,dn2,g,tau,sigma +logical :: ieee + +n = 84 + +ieee = .True. + +z(1:84) = (/1.9143652461808209D+00, & +1.5643842977038900D+00, & +2.4933891621438989D-01, & +3.4998094847693051D-01, & +1.3159965131315450D+00, & +1.3638621124906269D+00, & +9.8984666119707590D-02, & +2.0147331685530781D-01, & +6.0239739795872871D-01, & +6.4655447927417942D-01, & +2.2100334106387809D-03, & +5.4827584804256833D-02, & +9.8618572336789667D-02, & +2.4281908107454921D-02, & +4.7563214844548191D-01, & +7.6546697639973529D-02, & +2.5887481436771148D-01, & +6.1277840695087704D-01, & +1.0786113766900041D-01, & +1.2172855586231640D-01, & +6.4428964922552456D-01, & +2.2938358048981550D-01, & +6.2032304866397048D-01, & +5.2276720640470942D-01, & +3.6956606786075852D-01, & +7.6452331847458654D-01, & +5.3788380542522651D-01, & +2.2536579805014259D-01, & +3.5625331812646233D-01, & +8.8204867223354833D-01, & +2.2221324964361449D-02, & +1.2088451318140349D-02, & +1.2750943030216850D+00, & +6.5487468521633574D-01, & +1.6473243548212180D-01, & +6.4244094276971109D-01, & +1.0075305765438660D+00, & +3.2695517365467008D-01, & +3.4538816017831181D-01, & +8.4530783837131718D-01, & +2.6793917191534039D-01, & +4.1167148387782809D-01, & +7.3286777366837230D-01, & +2.0165584821582411D-01, & +8.3608281383074101D-01, & +9.7375794521953263D-01, & +4.8136607095928219D-01, & +5.9519264227958080D-01, & +6.4953705136764595D-01, & +6.7618762481481709D-01, & +2.3254758802226480D-01, & +4.5471549751211121D-01, & +1.9936248028938069D-01, & +3.3218193673422552D-01, & +3.7823189169112570D-01, & +9.9728131577419957D-02, & +9.8304494035037460D-01, & +7.5610809968448423D-01, & +4.4297338640403672D-01, & +6.0516873235701607D-01, & +1.1732795506024030D+00, & +7.1957244803166864D-01, & +5.0355240691445868D-01, & +8.9668048897477137D-01, & +3.0589803950585209D-01, & +6.5888323539286620D-01, & +3.0146344334154529D-01, & +1.5056721102744461D-01, & +1.2894222375675779D+00, & +6.1246453109936005D-01, & +7.5833643057994404D-01, & +9.7842114980976291D-01, & +4.9778147794615712D-01, & +9.9938135774918690D-01, & +2.8414688478625982D-01, & +2.5673655077691432D-01, & +9.2575397942057647D-01, & +5.5092683856146663D-01, & +5.2313556054509897D-05, & +6.5897402564536967D-01, & +2.1178692213810329D-05, & +7.3492248268320243D-05, & +0.0000000000000000D+00, & +0.0000000000000000D+00/) +i0 = 1 +n0 = 21 +pp = 0 +dmin = -0.0000000000000000D+00 +sigma = 0.0000000000000000D+00 +desig = 0.0000000000000000D+00 +qmax = 2.1637041623952107D+00 +nFail = 0 +iter = 2 +nDiv = 40 +ttype = 0 +dmin1 = 0.0000000000000000D+00 +dmin2 = 0.0000000000000000D+00 +dn = 0.0000000000000000D+00 +dn1 = 0.0000000000000000D+00 +dn2 = 0.0000000000000000D+00 +g = 0.0000000000000000D+00 +tau = 0.0000000000000000D+00 + +print *, "Starting Dlasq3" +open(unit = 4, file = "gen4tests.txt") +open(unit = 5, file = "gen5tests.txt") +call Dlasq3(i0, n0, z, pp, dmin, sigma, desig, qmax, nFail, iter, nDiv, ieee, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau) +close(4) +close(5) + +print *, "Done calling dlasq3" +print *, Z(1:n) + +print *, I0, N0, PP +print *, DMIN, DESIG, SIGMA, QMAX +print *, NFAIL, ITER, NDIV, TTYPE +print *, DMIN1, DMIN2, DN, DN1, DN2, G, TAU + +end \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/testdlasq4.f90 b/lapack/internal/testdata/dlasqtest/testdlasq4.f90 new file mode 100644 index 00000000..3c84983a --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/testdlasq4.f90 @@ -0,0 +1,435 @@ +program testdlasq4 +implicit none + +! Dlasq4 tests +integer :: i0, n0, pp, ttype, iter, nDiv, n, n0in +real(kind=8), dimension(401) :: z +real(kind=8) :: dmin, desig, qmax, dmin1, dmin2, dn, dn1, dn2, g, tau, sigma +logical :: ieee + +z(1:401) = (/2.9266499599402414D+02, & +2.9276699640004830D+02, & +2.9210200041216615D+02, & +2.9171973344922628D+02, & +2.9254120660184350D+02, & +2.9246923723528141D+02, & +2.8739845025761718D+02, & +2.8713781898215319D+02, & +2.9216230331620721D+02, & +2.9216609319427272D+02, & +2.9037912623973870D+02, & +2.9019341222762625D+02, & +2.9184732870824223D+02, & +2.9211597271231784D+02, & +2.9133173969911888D+02, & +2.9116703928303986D+02, & +2.9158395177813247D+02, & +2.9142053084921997D+02, & +2.8936184155474774D+02, & +2.9014388604362898D+02, & +2.9216722380092682D+02, & +2.9216917065163557D+02, & +2.9033857172870131D+02, & +2.9017428768626024D+02, & +2.9187084534700494D+02, & +2.9185392666684271D+02, & +2.8851014988393416D+02, & +2.8849290783118727D+02, & +2.9182506564169046D+02, & +2.9184679532940385D+02, & +2.9022222656964715D+02, & +2.9051820223150668D+02, & +2.9219746119018231D+02, & +2.9219997046052623D+02, & +2.9076912988009974D+02, & +2.9110108536012547D+02, & +2.9226281758828725D+02, & +2.9246883105892533D+02, & +2.9221612201279271D+02, & +2.9059157967819368D+02, & +2.9112833071623868D+02, & +2.9210680427275844D+02, & +2.9199887004058536D+02, & +2.9151030826460186D+02, & +2.9154564759046622D+02, & +2.9212462005167004D+02, & +2.9212108612522559D+02, & +2.9225720737270348D+02, & +2.9226471402909704D+02, & +2.9186949422820902D+02, & +2.9179442772569342D+02, & +2.9025839700680774D+02, & +2.9028281327393216D+02, & +2.9168280284451140D+02, & +2.9168036127921908D+02, & +2.9115346030764749D+02, & +2.9115401102000044D+02, & +2.9212282665919003D+02, & +2.9212277159409672D+02, & +2.9212554020600300D+02, & +2.9212559651286460D+02, & +2.9050907549403615D+02, & +2.9050344542208029D+02, & +2.9211004769628386D+02, & +2.9211127836880860D+02, & +2.9159257985266015D+02, & +2.9158027318883302D+02, & +2.9042716308833894D+02, & +2.9043622253245718D+02, & +2.9134221002346220D+02, & +2.9134130414047053D+02, & +2.9193179671375327D+02, & +2.9193426987096007D+02, & +2.9145366956406895D+02, & +2.9145119646828226D+02, & +2.9144876630819033D+02, & +2.9145122608379586D+02, & +2.9058395601500280D+02, & +2.9055935887314877D+02, & +2.9123982459393329D+02, & +2.9125037059550806D+02, & +2.9111624624209884D+02, & +2.9110570030194424D+02, & +2.9250004994137356D+02, & +2.9254994096967755D+02, & +2.9166071282413282D+02, & +2.9116180260251298D+02, & +2.8862845048087325D+02, & +2.8925662460652461D+02, & +2.9012609983518610D+02, & +2.9010672249354360D+02, & +2.9142999275190090D+02, & +2.9150806548221971D+02, & +2.9078477842534176D+02, & +2.8840517363552317D+02, & +2.8946267131307206D+02, & +2.9189614533792309D+02, & +2.9232617409967031D+02, & +2.9223702224333306D+02, & +2.9149978725880743D+02, & +2.9168777367421643D+02, & +2.9213296087125275D+02, & +2.9211416223585388D+02, & +2.9151431726536367D+02, & +2.9159900781717892D+02, & +2.9215362494632291D+02, & +2.9214515589728342D+02, & +2.9229900293632022D+02, & +2.9231644811476662D+02, & +2.9119079594655176D+02, & +2.9016344223508082D+02, & +2.9040052826233938D+02, & +2.9146756071890462D+02, & +2.9216592215429023D+02, & +2.9212317137116514D+02, & +2.9220217331561315D+02, & +2.9227234439098311D+02, & +2.9210931773273273D+02, & +2.9139146663504778D+02, & +2.9047426145779627D+02, & +2.9113243832972501D+02, & +2.9163901100086372D+02, & +2.9155399887833846D+02, & +2.9145039523229758D+02, & +2.9151950918932886D+02, & +2.9116352441156198D+02, & +2.9094410515950784D+02, & +2.9056083843332891D+02, & +2.9097140423254604D+02, & +2.9185385310744653D+02, & +2.9181279658894493D+02, & +2.9031697123096876D+02, & +2.9033298229128292D+02, & +2.9212507489852788D+02, & +2.9212491479406674D+02, & +2.9123248207180859D+02, & +2.9123278004625678D+02, & +2.9210890357464513D+02, & +2.9210887378334229D+02, & +2.9240010366769212D+02, & +2.9240021314868147D+02, & +2.9212046105624000D+02, & +2.9212035158139264D+02, & +2.9215242607939217D+02, & +2.9215256473001551D+02, & +2.9086373488934720D+02, & +2.9084987044121846D+02, & +2.9162085042968522D+02, & +2.9163097873649599D+02, & +2.9113228736441005D+02, & +2.9112215911901944D+02, & +2.9210393504686402D+02, & +2.9211255232953414D+02, & +2.9191445519642213D+02, & +2.9182828243114074D+02, & +2.9127013482394887D+02, & +2.9129823908392501D+02, & +2.9220880435635905D+02, & +2.9220599393650343D+02, & +2.9144676491963560D+02, & +2.9145286023012017D+02, & +2.9148058174349006D+02, & +2.9147448649442555D+02, & +2.9186619188590822D+02, & +2.9187731897876392D+02, & +2.9151148084374620D+02, & +2.9150035381231066D+02, & +2.9224292392669071D+02, & +2.9224832614828313D+02, & +2.9140236136264468D+02, & +2.9134833920814032D+02, & +2.9241531971951883D+02, & +2.9247972954055604D+02, & +2.9164613863843044D+02, & +2.8920404894780614D+02, & +2.8913485112658549D+02, & +2.9142701775363003D+02, & +2.9213449277295280D+02, & +2.9191925854858397D+02, & +2.9217029610406047D+02, & +2.9224915292105180D+02, & +2.9220325626287905D+02, & +2.9212439945202976D+02, & +2.9057154227612733D+02, & +2.9093384291672965D+02, & +2.9183595231931184D+02, & +2.9179972231667176D+02, & +2.9133916987034183D+02, & +2.9135453536038978D+02, & +2.9047085843212886D+02, & +2.9031720414585078D+02, & +2.9113106705127024D+02, & +2.9119455617800747D+02, & +2.9230127009862616D+02, & +2.9229492119209442D+02, & +2.9098170102485551D+02, & +2.9110028345622749D+02, & +2.9215236246918653D+02, & +2.9215215113995436D+02, & +2.9124650182241129D+02, & +2.9124684419934567D+02, & +2.9216244260160767D+02, & +2.9216240837005626D+02, & +2.9314769094184447D+02, & +2.9314772207133655D+02, & +2.9212215646682506D+02, & +2.9212184517804621D+02, & +2.9224739389310008D+02, & +2.9224802593241526D+02, & +2.8978611958992855D+02, & +2.8915408641678846D+02, & +2.9118533307571403D+02, & +2.9194553410039072D+02, & +2.9244688594134544D+02, & +2.9237086584501975D+02, & +2.9189894464487475D+02, & +2.9210832103555418D+02, & +2.9227685116407457D+02, & +2.9225842459914986D+02, & +2.9224821267514392D+02, & +2.9226591109467802D+02, & +2.9158625025645608D+02, & +2.9140926612253548D+02, & +2.9125298964526195D+02, & +2.9136239316241648D+02, & +2.9182040805585694D+02, & +2.9171100460012258D+02, & +2.9126693393315793D+02, & +2.9130800749967943D+02, & +2.9084722625682167D+02, & +2.9043649120580767D+02, & +2.9153791610078673D+02, & +2.9210440912405335D+02, & +2.9188686486416555D+02, & +2.9138068978583891D+02, & +2.9158124399039616D+02, & +2.9213540811751852D+02, & +2.9211624446790427D+02, & +2.9138960755567365D+02, & +2.9060415959100914D+02, & +2.9118025885063923D+02, & +2.9132902926505932D+02, & +2.9120918643494110D+02, & +2.9222955158764825D+02, & +2.9236106160611405D+02, & +2.9219941546106151D+02, & +2.9167905448737707D+02, & +2.8956733560159137D+02, & +2.9016660738228080D+02, & +2.9069372888915495D+02, & +2.9058385568123452D+02, & +2.9219861470697771D+02, & +2.9223599112669444D+02, & +2.9150234673408067D+02, & +2.9112858259833354D+02, & +2.9011809831967531D+02, & +2.9046138673473865D+02, & +2.9176526297220903D+02, & +2.9173093419212285D+02, & +2.9150067445343569D+02, & +2.9152418894132262D+02, & +2.9197021328944544D+02, & +2.9194669886297868D+02, & +2.9168012546172463D+02, & +2.9169701864791432D+02, & +2.9061916960844030D+02, & +2.9045023836074438D+02, & +2.9212529304266053D+02, & +2.9217230349727680D+02, & +2.9156357220873417D+02, & +2.9093467723991887D+02, & +2.9015918793416472D+02, & +2.9095983823965622D+02, & +2.9124303667219704D+02, & +2.9116297170306802D+02, & +2.9162557939634507D+02, & +2.9193291492830070D+02, & +2.9138731414547760D+02, & +2.9079978674942083D+02, & +2.9159254111122891D+02, & +2.9228695093326087D+02, & +2.9225423965335352D+02, & +2.9126542837357596D+02, & +2.9173807466948557D+02, & +2.9270696227984581D+02, & +2.9274075480094893D+02, & +2.9210759999419366D+02, & +2.9091701924155882D+02, & +2.9163130710260498D+02, & +2.9157158980248664D+02, & +2.9031984685457667D+02, & +2.8939239820067894D+02, & +2.9070124438246870D+02, & +2.9196350995833507D+02, & +2.9189730956351508D+02, & +2.9047434516138509D+02, & +2.9050934070611282D+02, & +2.9179387236503283D+02, & +2.9179037287198020D+02, & +2.9197909575321057D+02, & +2.9198343084479546D+02, & +2.9146450345905629D+02, & +2.9146016842889151D+02, & +2.9233889755268928D+02, & +2.9234209014701219D+02, & +2.9032302536354865D+02, & +2.8837665454569191D+02, & +2.8923259893670223D+02, & +2.9119948081590582D+02, & +2.9158422265927129D+02, & +2.9138706789415261D+02, & +2.9131767302238063D+02, & +2.9147948119882238D+02, & +2.9186937598758146D+02, & +2.9170756787255982D+02, & +2.9181460198203825D+02, & +2.9210008868832023D+02, & +2.9132088639794199D+02, & +2.9113460155819826D+02, & +2.9159448593680958D+02, & +2.9214172380575934D+02, & +2.9182660907964311D+02, & +2.8938570202792107D+02, & +2.8829979954353007D+02, & +2.9064250900128923D+02, & +2.9110347860364448D+02, & +2.9039527564479215D+02, & +2.9152783923893156D+02, & +2.9213818222324863D+02, & +2.9211881276563861D+02, & +2.9133414472425187D+02, & +2.9125375097531855D+02, & +2.9190226937530139D+02, & +2.9164903795105636D+02, & +2.8851961249369930D+02, & +2.8835729910731652D+02, & +2.9144629542849515D+02, & +2.9171485796658368D+02, & +2.9126891989861593D+02, & +2.9051052150188838D+02, & +2.9113570969073521D+02, & +2.9141652614094619D+02, & +2.9133186866181995D+02, & +2.8912484642922516D+02, & +2.8915669391948876D+02, & +2.9117142770169869D+02, & +2.9117110928821620D+02, & +2.9183490795481288D+02, & +2.9183646161652371D+02, & +2.9254379194824975D+02, & +2.9254363658822064D+02, & +2.9192127768678108D+02, & +2.9192154096878102D+02, & +2.9151073810022524D+02, & +2.9151047487964541D+02, & +2.9013993357169915D+02, & +2.9014000572685774D+02, & +2.9145714571416084D+02, & +2.9145713856006512D+02, & +2.9196091751473017D+02, & +2.9196093255283131D+02, & +2.9195731369267685D+02, & +2.9195729871599588D+02, & +2.9149460806187619D+02, & +2.9149461579988633D+02, & +2.9034687539457741D+02, & +2.9034679862867739D+02, & +2.9010765498373922D+02, & +2.9010767881379803D+02, & +2.8967492890608241D+02, & +2.8967469674750663D+02, & +2.9215189060671338D+02, & +2.9215194287124120D+02, & +2.8956132995364590D+02, & +2.8950907156783751D+02, & +2.9210783379750950D+02, & +2.9211890340058585D+02, & +2.9139896954309916D+02, & +2.9128827357375536D+02, & +2.9190012628763964D+02, & +2.9212457714005234D+02, & +2.9221336158434212D+02, & +2.9217879707919576D+02, & +2.9127472708852724D+02, & +2.9132783649002283D+02, & +2.9227509889951233D+02, & +2.9226978796550475D+02, & +2.9142078378447616D+02, & +2.9142906715955786D+02, & +2.9017517054475991D+02, & +2.8992337408144391D+02, & +2.8477362931531121D+02, & +2.8514676291150971D+02, & +2.8393423954726200D+02, & +2.8313625395453965D+02, & +2.8449999402409759D+02, & +2.8534282615303522D+02, & +2.8523140662657408D+02, & +2.8739845025761718D+02, & +2.8713781898215319D+02, & +0.0000000000000000D+00/) +i0 = 1 +n0 = 100 +pp = 1 +n0in = 100 +dmin = 7.9798559272231942D+282 +dmin1 = 7.9798559272231942D+282 +dmin2 = 2.3215857579138407D+285 +dn = 2.3140662657409930D+284 +dn1 = 7.9798559272231942D+282 +dn2 = 8.2833136615500372D+288 +g = 2.5000000000000000D-01 +tau = 6.1420124051338430D+283 +ttype = -4 + +ieee = .True. + +print *, "Starting Dlasq4" + +call Dlasq4(i0, n0, z, pp, n0in, dmin, dmin1, dmin2, dn, dn1, dn2, tau, ttype, g) + +print *, "Done calling dlasq4" +print *, "tau = ", tau +print *, tau, ttype, g + +end \ No newline at end of file diff --git a/lapack/internal/testdata/dlasqtest/xerbla.f b/lapack/internal/testdata/dlasqtest/xerbla.f new file mode 100644 index 00000000..3e93bc4e --- /dev/null +++ b/lapack/internal/testdata/dlasqtest/xerbla.f @@ -0,0 +1,99 @@ +*> \brief \b XERBLA +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download XERBLA + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE XERBLA( SRNAME, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER*(*) SRNAME +* INTEGER INFO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> XERBLA is an error handler for the LAPACK routines. +*> It is called by an LAPACK routine if an input parameter has an +*> invalid value. A message is printed and execution stops. +*> +*> Installers may consider modifying the STOP statement in order to +*> call system-specific exception-handling facilities. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SRNAME +*> \verbatim +*> SRNAME is CHARACTER*(*) +*> The name of the routine which called XERBLA. +*> \endverbatim +*> +*> \param[in] INFO +*> \verbatim +*> INFO is INTEGER +*> The position of the invalid parameter in the parameter list +*> of the calling routine. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE XERBLA( SRNAME, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*(*) SRNAME + INTEGER INFO +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LEN_TRIM +* .. +* .. Executable Statements .. +* + WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO +* + STOP +* + 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', + $ 'an illegal value' ) +* +* End of XERBLA +* + END diff --git a/lapack/internal/testdata/dsterftest/Makefile b/lapack/internal/testdata/dsterftest/Makefile new file mode 100644 index 00000000..7d22727a --- /dev/null +++ b/lapack/internal/testdata/dsterftest/Makefile @@ -0,0 +1,20 @@ +FC = gfortran +FFLAGS = -O2 + +targets = testdsterf +objects = disnan.o dlamch.o dlanst.o dlaisnan.o dlassq.o dlapy2.o lsame.o dlae2.o dlascl.o dlasrt.o dsterf.o xerbla.o + +default : $(targets) +.PHONY : default + +testdsterf : testdsterf.o $(objects) + +% : %.o + $(FC) $(FFLAGS) $^ -o $@ + +%.o : %.f90 + $(FC) $(FFLAGS) -c -o $@ $< + +clean : + rm -f *.o $(targets) *.txt +.PHONY : clean \ No newline at end of file diff --git a/lapack/internal/testdata/dsterftest/disnan.f b/lapack/internal/testdata/dsterftest/disnan.f new file mode 100644 index 00000000..355b8279 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/disnan.f @@ -0,0 +1,80 @@ +*> \brief \b DISNAN tests input for NaN. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DISNAN( DIN ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DISNAN returns .TRUE. if its argument is NaN, and .FALSE. +*> otherwise. To be replaced by the Fortran 2003 intrinsic in the +*> future. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN +*> \verbatim +*> DIN is DOUBLE PRECISION +*> Input to test for NaN. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DISNAN( DIN ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL DLAISNAN + EXTERNAL DLAISNAN +* .. +* .. Executable Statements .. + DISNAN = DLAISNAN(DIN,DIN) + RETURN + END diff --git a/lapack/internal/testdata/dsterftest/dlae2.f b/lapack/internal/testdata/dsterftest/dlae2.f new file mode 100644 index 00000000..302eeaa1 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlae2.f @@ -0,0 +1,185 @@ +*> \brief \b DLAE2 computes the eigenvalues of a 2-by-2 symmetric matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAE2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAE2( A, B, C, RT1, RT2 ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION A, B, C, RT1, RT2 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAE2 computes the eigenvalues of a 2-by-2 symmetric matrix +*> [ A B ] +*> [ B C ]. +*> On return, RT1 is the eigenvalue of larger absolute value, and RT2 +*> is the eigenvalue of smaller absolute value. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION +*> The (1,1) element of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is DOUBLE PRECISION +*> The (1,2) and (2,1) elements of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[in] C +*> \verbatim +*> C is DOUBLE PRECISION +*> The (2,2) element of the 2-by-2 matrix. +*> \endverbatim +*> +*> \param[out] RT1 +*> \verbatim +*> RT1 is DOUBLE PRECISION +*> The eigenvalue of larger absolute value. +*> \endverbatim +*> +*> \param[out] RT2 +*> \verbatim +*> RT2 is DOUBLE PRECISION +*> The eigenvalue of smaller absolute value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> RT1 is accurate to a few ulps barring over/underflow. +*> +*> RT2 may be inaccurate if there is massive cancellation in the +*> determinant A*C-B*B; higher precision or correctly rounded or +*> correctly truncated arithmetic would be needed to compute RT2 +*> accurately in all cases. +*> +*> Overflow is possible only if RT1 is within a factor of 5 of overflow. +*> Underflow is harmless if the input data is 0 or exceeds +*> underflow_threshold / macheps. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLAE2( A, B, C, RT1, RT2 ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, RT1, RT2 +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION HALF + PARAMETER ( HALF = 0.5D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AB, ACMN, ACMX, ADF, DF, RT, SM, TB +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SQRT +* .. +* .. Executable Statements .. +* +* Compute the eigenvalues +* + SM = A + C + DF = A - C + ADF = ABS( DF ) + TB = B + B + AB = ABS( TB ) + IF( ABS( A ).GT.ABS( C ) ) THEN + ACMX = A + ACMN = C + ELSE + ACMX = C + ACMN = A + END IF + IF( ADF.GT.AB ) THEN + RT = ADF*SQRT( ONE+( AB / ADF )**2 ) + ELSE IF( ADF.LT.AB ) THEN + RT = AB*SQRT( ONE+( ADF / AB )**2 ) + ELSE +* +* Includes case AB=ADF=0 +* + RT = AB*SQRT( TWO ) + END IF + IF( SM.LT.ZERO ) THEN + RT1 = HALF*( SM-RT ) +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE IF( SM.GT.ZERO ) THEN + RT1 = HALF*( SM+RT ) +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE +* +* Includes case RT1 = RT2 = 0 +* + RT1 = HALF*RT + RT2 = -HALF*RT + END IF + RETURN +* +* End of DLAE2 +* + END diff --git a/lapack/internal/testdata/dsterftest/dlaisnan.f b/lapack/internal/testdata/dsterftest/dlaisnan.f new file mode 100644 index 00000000..58595c5c --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlaisnan.f @@ -0,0 +1,91 @@ +*> \brief \b DLAISNAN tests input for NaN by comparing two arguments for inequality. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN1, DIN2 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is not for general use. It exists solely to avoid +*> over-optimization in DISNAN. +*> +*> DLAISNAN checks for NaNs by comparing its two arguments for +*> inequality. NaN is the only floating-point value where NaN != NaN +*> returns .TRUE. To check for NaNs, pass the same variable as both +*> arguments. +*> +*> A compiler must assume that the two arguments are +*> not the same variable, and the test will not be optimized away. +*> Interprocedural or whole-program optimization may delete this +*> test. The ISNAN functions will be replaced by the correct +*> Fortran 03 intrinsic once the intrinsic is widely available. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN1 +*> \verbatim +*> DIN1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] DIN2 +*> \verbatim +*> DIN2 is DOUBLE PRECISION +*> Two numbers to compare for inequality. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN1, DIN2 +* .. +* +* ===================================================================== +* +* .. Executable Statements .. + DLAISNAN = (DIN1.NE.DIN2) + RETURN + END diff --git a/lapack/internal/testdata/dsterftest/dlamch.f b/lapack/internal/testdata/dsterftest/dlamch.f new file mode 100644 index 00000000..25c2c8e6 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlamch.f @@ -0,0 +1,193 @@ +*> \brief \b DLAMCH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAMCH determines double precision machine parameters. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CMACH +*> \verbatim +*> Specifies the value to be returned by DLAMCH: +*> = 'E' or 'e', DLAMCH := eps +*> = 'S' or 's , DLAMCH := sfmin +*> = 'B' or 'b', DLAMCH := base +*> = 'P' or 'p', DLAMCH := eps*base +*> = 'N' or 'n', DLAMCH := t +*> = 'R' or 'r', DLAMCH := rnd +*> = 'M' or 'm', DLAMCH := emin +*> = 'U' or 'u', DLAMCH := rmin +*> = 'L' or 'l', DLAMCH := emax +*> = 'O' or 'o', DLAMCH := rmax +*> where +*> eps = relative machine precision +*> sfmin = safe minimum, such that 1/sfmin does not overflow +*> base = base of the machine +*> prec = eps*base +*> t = number of (base) digits in the mantissa +*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +*> emin = minimum exponent before (gradual) underflow +*> rmin = underflow threshold - base**(emin-1) +*> emax = largest exponent before overflow +*> rmax = overflow threshold - (base**emax)*(1-eps) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, + $ MINEXPONENT, RADIX, TINY +* .. +* .. Executable Statements .. +* +* +* Assume rounding, not chopping. Always. +* + RND = ONE +* + IF( ONE.EQ.RND ) THEN + EPS = EPSILON(ZERO) * 0.5 + ELSE + EPS = EPSILON(ZERO) + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + SFMIN = TINY(ZERO) + SMALL = ONE / HUGE(ZERO) + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = EPS * RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = DIGITS(ZERO) + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = MINEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = tiny(zero) + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = MAXEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = HUGE(ZERO) + ELSE + RMACH = ZERO + END IF +* + DLAMCH = RMACH + RETURN +* +* End of DLAMCH +* + END +************************************************************************ +*> \brief \b DLAMC3 +*> \details +*> \b Purpose: +*> \verbatim +*> DLAMC3 is intended to force A and B to be stored prior to doing +*> the addition of A and B , for use in situations where optimizers +*> might hold one of these in a register. +*> \endverbatim +*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. +*> \date November 2011 +*> \ingroup auxOTHERauxiliary +*> +*> \param[in] A +*> \verbatim +*> A is a DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is a DOUBLE PRECISION +*> The values A and B. +*> \endverbatim +*> + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ diff --git a/lapack/internal/testdata/dsterftest/dlanst.f b/lapack/internal/testdata/dsterftest/dlanst.f new file mode 100644 index 00000000..213b06ad --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlanst.f @@ -0,0 +1,186 @@ +*> \brief \b DLANST returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric tridiagonal matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLANST + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E ) +* +* .. Scalar Arguments .. +* CHARACTER NORM +* INTEGER N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION D( * ), E( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLANST returns the value of the one norm, or the Frobenius norm, or +*> the infinity norm, or the element of largest absolute value of a +*> real symmetric tridiagonal matrix A. +*> \endverbatim +*> +*> \return DLANST +*> \verbatim +*> +*> DLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm' +*> ( +*> ( norm1(A), NORM = '1', 'O' or 'o' +*> ( +*> ( normI(A), NORM = 'I' or 'i' +*> ( +*> ( normF(A), NORM = 'F', 'f', 'E' or 'e' +*> +*> where norm1 denotes the one norm of a matrix (maximum column sum), +*> normI denotes the infinity norm of a matrix (maximum row sum) and +*> normF denotes the Frobenius norm of a matrix (square root of sum of +*> squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] NORM +*> \verbatim +*> NORM is CHARACTER*1 +*> Specifies the value to be returned in DLANST as described +*> above. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. When N = 0, DLANST is +*> set to zero. +*> \endverbatim +*> +*> \param[in] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> The diagonal elements of A. +*> \endverbatim +*> +*> \param[in] E +*> \verbatim +*> E is DOUBLE PRECISION array, dimension (N-1) +*> The (n-1) sub-diagonal or super-diagonal elements of A. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER NORM + INTEGER N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION ANORM, SCALE, SUM +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + EXTERNAL LSAME, DISNAN +* .. +* .. External Subroutines .. + EXTERNAL DLASSQ +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SQRT +* .. +* .. Executable Statements .. +* + IF( N.LE.0 ) THEN + ANORM = ZERO + ELSE IF( LSAME( NORM, 'M' ) ) THEN +* +* Find max(abs(A(i,j))). +* + ANORM = ABS( D( N ) ) + DO 10 I = 1, N - 1 + SUM = ABS( D( I ) ) + IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM + SUM = ABS( E( I ) ) + IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM + 10 CONTINUE + ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR. + $ LSAME( NORM, 'I' ) ) THEN +* +* Find norm1(A). +* + IF( N.EQ.1 ) THEN + ANORM = ABS( D( 1 ) ) + ELSE + ANORM = ABS( D( 1 ) )+ABS( E( 1 ) ) + SUM = ABS( E( N-1 ) )+ABS( D( N ) ) + IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM + DO 20 I = 2, N - 1 + SUM = ABS( D( I ) )+ABS( E( I ) )+ABS( E( I-1 ) ) + IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM + 20 CONTINUE + END IF + ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN +* +* Find normF(A). +* + SCALE = ZERO + SUM = ONE + IF( N.GT.1 ) THEN + CALL DLASSQ( N-1, E, 1, SCALE, SUM ) + SUM = 2*SUM + END IF + CALL DLASSQ( N, D, 1, SCALE, SUM ) + ANORM = SCALE*SQRT( SUM ) + END IF +* + DLANST = ANORM + RETURN +* +* End of DLANST +* + END diff --git a/lapack/internal/testdata/dsterftest/dlapy2.f b/lapack/internal/testdata/dsterftest/dlapy2.f new file mode 100644 index 00000000..d43b0d5d --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlapy2.f @@ -0,0 +1,104 @@ +*> \brief \b DLAPY2 returns sqrt(x2+y2). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAPY2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION X, Y +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary +*> overflow. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] Y +*> \verbatim +*> Y is DOUBLE PRECISION +*> X and Y specify the values x and y. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION W, XABS, YABS, Z +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + XABS = ABS( X ) + YABS = ABS( Y ) + W = MAX( XABS, YABS ) + Z = MIN( XABS, YABS ) + IF( Z.EQ.ZERO ) THEN + DLAPY2 = W + ELSE + DLAPY2 = W*SQRT( ONE+( Z / W )**2 ) + END IF + RETURN +* +* End of DLAPY2 +* + END diff --git a/lapack/internal/testdata/dsterftest/dlascl.f b/lapack/internal/testdata/dsterftest/dlascl.f new file mode 100644 index 00000000..9b9b33c0 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlascl.f @@ -0,0 +1,364 @@ +*> \brief \b DLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASCL + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER TYPE +* INTEGER INFO, KL, KU, LDA, M, N +* DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASCL multiplies the M by N real matrix A by the real scalar +*> CTO/CFROM. This is done without over/underflow as long as the final +*> result CTO*A(I,J)/CFROM does not over/underflow. TYPE specifies that +*> A may be full, upper triangular, lower triangular, upper Hessenberg, +*> or banded. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] TYPE +*> \verbatim +*> TYPE is CHARACTER*1 +*> TYPE indices the storage type of the input matrix. +*> = 'G': A is a full matrix. +*> = 'L': A is a lower triangular matrix. +*> = 'U': A is an upper triangular matrix. +*> = 'H': A is an upper Hessenberg matrix. +*> = 'B': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the lower +*> half stored. +*> = 'Q': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the upper +*> half stored. +*> = 'Z': A is a band matrix with lower bandwidth KL and upper +*> bandwidth KU. See DGBTRF for storage details. +*> \endverbatim +*> +*> \param[in] KL +*> \verbatim +*> KL is INTEGER +*> The lower bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] KU +*> \verbatim +*> KU is INTEGER +*> The upper bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] CFROM +*> \verbatim +*> CFROM is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] CTO +*> \verbatim +*> CTO is DOUBLE PRECISION +*> +*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed +*> without over/underflow if the final result CTO*A(I,J)/CFROM +*> can be represented without over/underflow. CFROM must be +*> nonzero. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The matrix to be multiplied by CTO/CFROM. See TYPE for the +*> storage type. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> 0 - successful exit +*> <0 - if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER TYPE + INTEGER INFO, KL, KU, LDA, M, N + DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL DONE + INTEGER I, ITYPE, J, K1, K2, K3, K4 + DOUBLE PRECISION BIGNUM, CFROM1, CFROMC, CTO1, CTOC, MUL, SMLNUM +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + DOUBLE PRECISION DLAMCH + EXTERNAL LSAME, DLAMCH, DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 +* + IF( LSAME( TYPE, 'G' ) ) THEN + ITYPE = 0 + ELSE IF( LSAME( TYPE, 'L' ) ) THEN + ITYPE = 1 + ELSE IF( LSAME( TYPE, 'U' ) ) THEN + ITYPE = 2 + ELSE IF( LSAME( TYPE, 'H' ) ) THEN + ITYPE = 3 + ELSE IF( LSAME( TYPE, 'B' ) ) THEN + ITYPE = 4 + ELSE IF( LSAME( TYPE, 'Q' ) ) THEN + ITYPE = 5 + ELSE IF( LSAME( TYPE, 'Z' ) ) THEN + ITYPE = 6 + ELSE + ITYPE = -1 + END IF +* + IF( ITYPE.EQ.-1 ) THEN + INFO = -1 + ELSE IF( CFROM.EQ.ZERO .OR. DISNAN(CFROM) ) THEN + INFO = -4 + ELSE IF( DISNAN(CTO) ) THEN + INFO = -5 + ELSE IF( M.LT.0 ) THEN + INFO = -6 + ELSE IF( N.LT.0 .OR. ( ITYPE.EQ.4 .AND. N.NE.M ) .OR. + $ ( ITYPE.EQ.5 .AND. N.NE.M ) ) THEN + INFO = -7 + ELSE IF( ITYPE.LE.3 .AND. LDA.LT.MAX( 1, M ) ) THEN + INFO = -9 + ELSE IF( ITYPE.GE.4 ) THEN + IF( KL.LT.0 .OR. KL.GT.MAX( M-1, 0 ) ) THEN + INFO = -2 + ELSE IF( KU.LT.0 .OR. KU.GT.MAX( N-1, 0 ) .OR. + $ ( ( ITYPE.EQ.4 .OR. ITYPE.EQ.5 ) .AND. KL.NE.KU ) ) + $ THEN + INFO = -3 + ELSE IF( ( ITYPE.EQ.4 .AND. LDA.LT.KL+1 ) .OR. + $ ( ITYPE.EQ.5 .AND. LDA.LT.KU+1 ) .OR. + $ ( ITYPE.EQ.6 .AND. LDA.LT.2*KL+KU+1 ) ) THEN + INFO = -9 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASCL', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 .OR. M.EQ.0 ) + $ RETURN +* +* Get machine parameters +* + SMLNUM = DLAMCH( 'S' ) + BIGNUM = ONE / SMLNUM +* + CFROMC = CFROM + CTOC = CTO +* + 10 CONTINUE + CFROM1 = CFROMC*SMLNUM + IF( CFROM1.EQ.CFROMC ) THEN +! CFROMC is an inf. Multiply by a correctly signed zero for +! finite CTOC, or a NaN if CTOC is infinite. + MUL = CTOC / CFROMC + DONE = .TRUE. + CTO1 = CTOC + ELSE + CTO1 = CTOC / BIGNUM + IF( CTO1.EQ.CTOC ) THEN +! CTOC is either 0 or an inf. In both cases, CTOC itself +! serves as the correct multiplication factor. + MUL = CTOC + DONE = .TRUE. + CFROMC = ONE + ELSE IF( ABS( CFROM1 ).GT.ABS( CTOC ) .AND. CTOC.NE.ZERO ) THEN + MUL = SMLNUM + DONE = .FALSE. + CFROMC = CFROM1 + ELSE IF( ABS( CTO1 ).GT.ABS( CFROMC ) ) THEN + MUL = BIGNUM + DONE = .FALSE. + CTOC = CTO1 + ELSE + MUL = CTOC / CFROMC + DONE = .TRUE. + END IF + END IF +* + IF( ITYPE.EQ.0 ) THEN +* +* Full matrix +* + DO 30 J = 1, N + DO 20 I = 1, M + A( I, J ) = A( I, J )*MUL + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( ITYPE.EQ.1 ) THEN +* +* Lower triangular matrix +* + DO 50 J = 1, N + DO 40 I = J, M + A( I, J ) = A( I, J )*MUL + 40 CONTINUE + 50 CONTINUE +* + ELSE IF( ITYPE.EQ.2 ) THEN +* +* Upper triangular matrix +* + DO 70 J = 1, N + DO 60 I = 1, MIN( J, M ) + A( I, J ) = A( I, J )*MUL + 60 CONTINUE + 70 CONTINUE +* + ELSE IF( ITYPE.EQ.3 ) THEN +* +* Upper Hessenberg matrix +* + DO 90 J = 1, N + DO 80 I = 1, MIN( J+1, M ) + A( I, J ) = A( I, J )*MUL + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( ITYPE.EQ.4 ) THEN +* +* Lower half of a symmetric band matrix +* + K3 = KL + 1 + K4 = N + 1 + DO 110 J = 1, N + DO 100 I = 1, MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 100 CONTINUE + 110 CONTINUE +* + ELSE IF( ITYPE.EQ.5 ) THEN +* +* Upper half of a symmetric band matrix +* + K1 = KU + 2 + K3 = KU + 1 + DO 130 J = 1, N + DO 120 I = MAX( K1-J, 1 ), K3 + A( I, J ) = A( I, J )*MUL + 120 CONTINUE + 130 CONTINUE +* + ELSE IF( ITYPE.EQ.6 ) THEN +* +* Band matrix +* + K1 = KL + KU + 2 + K2 = KL + 1 + K3 = 2*KL + KU + 1 + K4 = KL + KU + 1 + M + DO 150 J = 1, N + DO 140 I = MAX( K1-J, K2 ), MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 140 CONTINUE + 150 CONTINUE +* + END IF +* + IF( .NOT.DONE ) + $ GO TO 10 +* + RETURN +* +* End of DLASCL +* + END diff --git a/lapack/internal/testdata/dsterftest/dlasrt.f b/lapack/internal/testdata/dsterftest/dlasrt.f new file mode 100644 index 00000000..f5d0e6cd --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlasrt.f @@ -0,0 +1,303 @@ +*> \brief \b DLASRT sorts numbers in increasing or decreasing order. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASRT + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASRT( ID, N, D, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER ID +* INTEGER INFO, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION D( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> Sort the numbers in D in increasing order (if ID = 'I') or +*> in decreasing order (if ID = 'D' ). +*> +*> Use Quick Sort, reverting to Insertion sort on arrays of +*> size <= 20. Dimension of STACK limits N to about 2**32. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ID +*> \verbatim +*> ID is CHARACTER*1 +*> = 'I': sort D in increasing order; +*> = 'D': sort D in decreasing order. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The length of the array D. +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> On entry, the array to be sorted. +*> On exit, D has been sorted into increasing order +*> (D(1) <= ... <= D(N) ) or into decreasing order +*> (D(1) >= ... >= D(N) ), depending on ID. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DLASRT( ID, N, D, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER ID + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + INTEGER SELECT + PARAMETER ( SELECT = 20 ) +* .. +* .. Local Scalars .. + INTEGER DIR, ENDD, I, J, START, STKPNT + DOUBLE PRECISION D1, D2, D3, DMNMX, TMP +* .. +* .. Local Arrays .. + INTEGER STACK( 2, 32 ) +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input paramters. +* + INFO = 0 + DIR = -1 + IF( LSAME( ID, 'D' ) ) THEN + DIR = 0 + ELSE IF( LSAME( ID, 'I' ) ) THEN + DIR = 1 + END IF + IF( DIR.EQ.-1 ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASRT', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* + STKPNT = 1 + STACK( 1, 1 ) = 1 + STACK( 2, 1 ) = N + 10 CONTINUE + START = STACK( 1, STKPNT ) + ENDD = STACK( 2, STKPNT ) + STKPNT = STKPNT - 1 + IF( ENDD-START.LE.SELECT .AND. ENDD-START.GT.0 ) THEN +* +* Do Insertion sort on D( START:ENDD ) +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + DO 30 I = START + 1, ENDD + DO 20 J = I, START + 1, -1 + IF( D( J ).GT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 30 + END IF + 20 CONTINUE + 30 CONTINUE +* + ELSE +* +* Sort into increasing order +* + DO 50 I = START + 1, ENDD + DO 40 J = I, START + 1, -1 + IF( D( J ).LT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 50 + END IF + 40 CONTINUE + 50 CONTINUE +* + END IF +* + ELSE IF( ENDD-START.GT.SELECT ) THEN +* +* Partition D( START:ENDD ) and stack parts, largest one first +* +* Choose partition entry as median of 3 +* + D1 = D( START ) + D2 = D( ENDD ) + I = ( START+ENDD ) / 2 + D3 = D( I ) + IF( D1.LT.D2 ) THEN + IF( D3.LT.D1 ) THEN + DMNMX = D1 + ELSE IF( D3.LT.D2 ) THEN + DMNMX = D3 + ELSE + DMNMX = D2 + END IF + ELSE + IF( D3.LT.D2 ) THEN + DMNMX = D2 + ELSE IF( D3.LT.D1 ) THEN + DMNMX = D3 + ELSE + DMNMX = D1 + END IF + END IF +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + I = START - 1 + J = ENDD + 1 + 60 CONTINUE + 70 CONTINUE + J = J - 1 + IF( D( J ).LT.DMNMX ) + $ GO TO 70 + 80 CONTINUE + I = I + 1 + IF( D( I ).GT.DMNMX ) + $ GO TO 80 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 60 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + ELSE +* +* Sort into increasing order +* + I = START - 1 + J = ENDD + 1 + 90 CONTINUE + 100 CONTINUE + J = J - 1 + IF( D( J ).GT.DMNMX ) + $ GO TO 100 + 110 CONTINUE + I = I + 1 + IF( D( I ).LT.DMNMX ) + $ GO TO 110 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 90 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + END IF + END IF + IF( STKPNT.GT.0 ) + $ GO TO 10 + RETURN +* +* End of DLASRT +* + END diff --git a/lapack/internal/testdata/dsterftest/dlassq.f b/lapack/internal/testdata/dsterftest/dlassq.f new file mode 100644 index 00000000..c7c4087e --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dlassq.f @@ -0,0 +1,155 @@ +*> \brief \b DLASSQ updates a sum of squares represented in scaled form. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASSQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) +* +* .. Scalar Arguments .. +* INTEGER INCX, N +* DOUBLE PRECISION SCALE, SUMSQ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION X( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASSQ returns the values scl and smsq such that +*> +*> ( scl**2 )*smsq = x( 1 )**2 +...+ x( n )**2 + ( scale**2 )*sumsq, +*> +*> where x( i ) = X( 1 + ( i - 1 )*INCX ). The value of sumsq is +*> assumed to be non-negative and scl returns the value +*> +*> scl = max( scale, abs( x( i ) ) ). +*> +*> scale and sumsq must be supplied in SCALE and SUMSQ and +*> scl and smsq are overwritten on SCALE and SUMSQ respectively. +*> +*> The routine makes only one pass through the vector x. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of elements to be used from the vector X. +*> \endverbatim +*> +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension (N) +*> The vector for which a scaled sum of squares is computed. +*> x( i ) = X( 1 + ( i - 1 )*INCX ), 1 <= i <= n. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> The increment between successive values of the vector X. +*> INCX > 0. +*> \endverbatim +*> +*> \param[in,out] SCALE +*> \verbatim +*> SCALE is DOUBLE PRECISION +*> On entry, the value scale in the equation above. +*> On exit, SCALE is overwritten with scl , the scaling factor +*> for the sum of squares. +*> \endverbatim +*> +*> \param[in,out] SUMSQ +*> \verbatim +*> SUMSQ is DOUBLE PRECISION +*> On entry, the value sumsq in the equation above. +*> On exit, SUMSQ is overwritten with smsq , the basic sum of +*> squares from which scl has been factored out. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION SCALE, SUMSQ +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER IX + DOUBLE PRECISION ABSXI +* .. +* .. External Functions .. + LOGICAL DISNAN + EXTERNAL DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. +* .. Executable Statements .. +* + IF( N.GT.0 ) THEN + DO 10 IX = 1, 1 + ( N-1 )*INCX, INCX + ABSXI = ABS( X( IX ) ) + IF( ABSXI.GT.ZERO.OR.DISNAN( ABSXI ) ) THEN + IF( SCALE.LT.ABSXI ) THEN + SUMSQ = 1 + SUMSQ*( SCALE / ABSXI )**2 + SCALE = ABSXI + ELSE + SUMSQ = SUMSQ + ( ABSXI / SCALE )**2 + END IF + END IF + 10 CONTINUE + END IF + RETURN +* +* End of DLASSQ +* + END diff --git a/lapack/internal/testdata/dsterftest/dsterf.f b/lapack/internal/testdata/dsterftest/dsterf.f new file mode 100644 index 00000000..43395cc7 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/dsterf.f @@ -0,0 +1,448 @@ +*> \brief \b DSTERF +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DSTERF + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DSTERF( N, D, E, INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION D( * ), E( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DSTERF computes all eigenvalues of a symmetric tridiagonal matrix +*> using the Pal-Walker-Kahan variant of the QL or QR algorithm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix. N >= 0. +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> On entry, the n diagonal elements of the tridiagonal matrix. +*> On exit, if INFO = 0, the eigenvalues in ascending order. +*> \endverbatim +*> +*> \param[in,out] E +*> \verbatim +*> E is DOUBLE PRECISION array, dimension (N-1) +*> On entry, the (n-1) subdiagonal elements of the tridiagonal +*> matrix. +*> On exit, E has been destroyed. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> > 0: the algorithm failed to find all of the eigenvalues in +*> a total of 30*N iterations; if INFO = i, then i +*> elements of E have not converged to zero. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERcomputational +* +* ===================================================================== + SUBROUTINE DSTERF( N, D, E, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE, TWO, THREE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0, + $ THREE = 3.0D0 ) + INTEGER MAXIT + PARAMETER ( MAXIT = 30 ) +* .. +* .. Local Scalars .. + INTEGER I, ISCALE, JTOT, L, L1, LEND, LENDSV, LSV, M, + $ NMAXIT + DOUBLE PRECISION ALPHA, ANORM, BB, C, EPS, EPS2, GAMMA, OLDC, + $ OLDGAM, P, R, RT1, RT2, RTE, S, SAFMAX, SAFMIN, + $ SIGMA, SSFMAX, SSFMIN, RMAX +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLANST, DLAPY2 + EXTERNAL DLAMCH, DLANST, DLAPY2 +* .. +* .. External Subroutines .. + EXTERNAL DLAE2, DLASCL, DLASRT, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SIGN, SQRT +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 +* +* Quick return if possible +* + IF( N.LT.0 ) THEN + INFO = -1 + CALL XERBLA( 'DSTERF', -INFO ) + RETURN + END IF + IF( N.LE.1 ) + $ RETURN +* +* Determine the unit roundoff for this environment. +* + EPS = DLAMCH( 'E' ) + EPS2 = EPS**2 + SAFMIN = DLAMCH( 'S' ) + SAFMAX = ONE / SAFMIN + SSFMAX = SQRT( SAFMAX ) / THREE + SSFMIN = SQRT( SAFMIN ) / EPS2 + RMAX = DLAMCH( 'O' ) +* +* Compute the eigenvalues of the tridiagonal matrix. +* + NMAXIT = N*MAXIT + SIGMA = ZERO + JTOT = 0 +* +* Determine where the matrix splits and choose QL or QR iteration +* for each block, according to whether top or bottom diagonal +* element is smaller. +* + L1 = 1 +* + 10 CONTINUE + print *, "l1 = ", l1 + IF( L1.GT.N ) THEN + print *, "going to 170" + GO TO 170 + end if + IF( L1.GT.1 ) + $ E( L1-1 ) = ZERO + DO 20 M = L1, N - 1 + IF( ABS( E( M ) ).LE.( SQRT( ABS( D( M ) ) )*SQRT( ABS( D( M+ + $ 1 ) ) ) )*EPS ) THEN + E( M ) = ZERO + GO TO 30 + END IF + 20 CONTINUE + M = N +* + 30 CONTINUE + print *, "30, d" + print *, d(1:n) + L = L1 + LSV = L + LEND = M + LENDSV = LEND + L1 = M + 1 + IF( LEND.EQ.L ) + $ GO TO 10 +* +* Scale submatrix in rows and columns L to LEND +* + ANORM = DLANST( 'M', LEND-L+1, D( L ), E( L ) ) + ISCALE = 0 + IF( ANORM.EQ.ZERO ) + $ GO TO 10 + IF( (ANORM.GT.SSFMAX) ) THEN + ISCALE = 1 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L, 1, E( L ), N, + $ INFO ) + ELSE IF( ANORM.LT.SSFMIN ) THEN + ISCALE = 2 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L, 1, E( L ), N, + $ INFO ) + END IF +* + DO 40 I = L, LEND - 1 + E( I ) = E( I )**2 + 40 CONTINUE +* +* Choose between QL and QR iteration +* + IF( ABS( D( LEND ) ).LT.ABS( D( L ) ) ) THEN + LEND = LSV + L = LENDSV + END IF +* + IF( LEND.GE.L ) THEN + print *, "ql, d" + print *, d(1:n) +* +* QL Iteration +* +* Look for small subdiagonal element. +* + 50 CONTINUE + IF( L.NE.LEND ) THEN + DO 60 M = L, LEND - 1 + IF( ABS( E( M ) ).LE.EPS2*ABS( D( M )*D( M+1 ) ) ) + $ GO TO 70 + 60 CONTINUE + END IF + M = LEND +* + 70 CONTINUE + IF( M.LT.LEND ) + $ E( M ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 90 +* +* If remaining matrix is 2 by 2, use DLAE2 to compute its +* eigenvalues. +* + IF( M.EQ.L+1 ) THEN + RTE = SQRT( E( L ) ) + CALL DLAE2( D( L ), RTE, D( L+1 ), RT1, RT2 ) + D( L ) = RT1 + D( L+1 ) = RT2 + E( L ) = ZERO + L = L + 2 + IF( L.LE.LEND ) + $ GO TO 50 + GO TO 150 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 150 + JTOT = JTOT + 1 +* +* Form shift. +* + RTE = SQRT( E( L ) ) + SIGMA = ( D( L+1 )-P ) / ( TWO*RTE ) + R = DLAPY2( SIGMA, ONE ) + SIGMA = P - ( RTE / ( SIGMA+SIGN( R, SIGMA ) ) ) +* + C = ONE + S = ZERO + GAMMA = D( M ) - SIGMA + P = GAMMA*GAMMA +* +* Inner loop +* + print *, "inner loop d before" + print *, d(1:n) + + DO 80 I = M - 1, L, -1 + print *, "inner loop" + print *, "ei", e(i) + BB = E( I ) + R = P + BB + print *, "bb,p,r" + print *, bb,p,r + IF( I.NE.M-1 ) THEN + print *, s,r + E( I+1 ) = S*R + end if + OLDC = C + C = P / R + S = BB / R + OLDGAM = GAMMA + print *, "di", d(i) + ALPHA = D( I ) + GAMMA = C*( ALPHA-SIGMA ) - S*OLDGAM + print *,"og, a, ga", OLDGAM, ALPHA, GAMMA + D( I+1 ) = OLDGAM + ( ALPHA-GAMMA ) + IF( C.NE.ZERO ) THEN + P = ( GAMMA*GAMMA ) / C + ELSE + P = OLDC*BB + END IF + print *, "p, gamma = ", p,GAMMA + 80 CONTINUE +* + E( L ) = S*P + D( L ) = SIGMA + GAMMA + + print *, "inner loop d after" + print *, d(1:n) + GO TO 50 +* +* Eigenvalue found. +* + 90 CONTINUE + D( L ) = P +* + L = L + 1 + IF( L.LE.LEND ) + $ GO TO 50 + GO TO 150 +* + ELSE +* +* QR Iteration +* +* Look for small superdiagonal element. +* + 100 CONTINUE + DO 110 M = L, LEND + 1, -1 + IF( ABS( E( M-1 ) ).LE.EPS2*ABS( D( M )*D( M-1 ) ) ) + $ GO TO 120 + 110 CONTINUE + M = LEND +* + 120 CONTINUE + IF( M.GT.LEND ) + $ E( M-1 ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 140 +* +* If remaining matrix is 2 by 2, use DLAE2 to compute its +* eigenvalues. +* + IF( M.EQ.L-1 ) THEN + RTE = SQRT( E( L-1 ) ) + CALL DLAE2( D( L ), RTE, D( L-1 ), RT1, RT2 ) + D( L ) = RT1 + D( L-1 ) = RT2 + E( L-1 ) = ZERO + L = L - 2 + IF( L.GE.LEND ) + $ GO TO 100 + GO TO 150 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 150 + JTOT = JTOT + 1 +* +* Form shift. +* + RTE = SQRT( E( L-1 ) ) + SIGMA = ( D( L-1 )-P ) / ( TWO*RTE ) + R = DLAPY2( SIGMA, ONE ) + SIGMA = P - ( RTE / ( SIGMA+SIGN( R, SIGMA ) ) ) +* + C = ONE + S = ZERO + GAMMA = D( M ) - SIGMA + P = GAMMA*GAMMA +* +* Inner loop +* + DO 130 I = M, L - 1 + BB = E( I ) + R = P + BB + IF( I.NE.M ) + $ E( I-1 ) = S*R + OLDC = C + C = P / R + S = BB / R + OLDGAM = GAMMA + ALPHA = D( I+1 ) + GAMMA = C*( ALPHA-SIGMA ) - S*OLDGAM + D( I ) = OLDGAM + ( ALPHA-GAMMA ) + IF( C.NE.ZERO ) THEN + P = ( GAMMA*GAMMA ) / C + ELSE + P = OLDC*BB + END IF + 130 CONTINUE +* + E( L-1 ) = S*P + D( L ) = SIGMA + GAMMA + GO TO 100 +* +* Eigenvalue found. +* + 140 CONTINUE + D( L ) = P +* + L = L - 1 + IF( L.GE.LEND ) + $ GO TO 100 + GO TO 150 +* + END IF +* +* Undo scaling if necessary +* + 150 CONTINUE + IF( ISCALE.EQ.1 ) + $ CALL DLASCL( 'G', 0, 0, SSFMAX, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) + IF( ISCALE.EQ.2 ) + $ CALL DLASCL( 'G', 0, 0, SSFMIN, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) +* +* Check for no convergence to an eigenvalue after a total +* of N*MAXIT iterations. +* + IF( JTOT.LT.NMAXIT ) + $ GO TO 10 + DO 160 I = 1, N - 1 + IF( E( I ).NE.ZERO ) + $ INFO = INFO + 1 + 160 CONTINUE + GO TO 180 +* +* Sort eigenvalues in increasing order. +* + 170 CONTINUE + CALL DLASRT( 'I', N, D, INFO ) +* + 180 CONTINUE + RETURN +* +* End of DSTERF +* + END diff --git a/lapack/internal/testdata/dsterftest/lsame.f b/lapack/internal/testdata/dsterftest/lsame.f new file mode 100644 index 00000000..315304c3 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/lsame.f @@ -0,0 +1,125 @@ +*> \brief \b LSAME +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* LOGICAL FUNCTION LSAME( CA, CB ) +* +* .. Scalar Arguments .. +* CHARACTER CA, CB +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> LSAME returns .TRUE. if CA is the same letter as CB regardless of +*> case. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CA +*> \verbatim +*> \endverbatim +*> +*> \param[in] CB +*> \verbatim +*> CA and CB specify the single characters to be compared. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END diff --git a/lapack/internal/testdata/dsterftest/testdsterf.f90 b/lapack/internal/testdata/dsterftest/testdsterf.f90 new file mode 100644 index 00000000..8373f512 --- /dev/null +++ b/lapack/internal/testdata/dsterftest/testdsterf.f90 @@ -0,0 +1,15 @@ +program testdsterf +implicit none +integer, parameter :: n = 4 +real(kind=8), dimension(n) :: d +real(kind=8), dimension(n-1) :: e +integer :: info,i + +d(1:4) = (/1D+00, 3D+00, 4D+00, 6D+00/) +e(1:3) = (/2D+00, 4D+00, 5D+00/) + +call dsterf(n,d,e,info) +DO i = 1, n + print *, d(i) +end do +end \ No newline at end of file diff --git a/lapack/internal/testdata/dsterftest/xerbla.f b/lapack/internal/testdata/dsterftest/xerbla.f new file mode 100644 index 00000000..3e93bc4e --- /dev/null +++ b/lapack/internal/testdata/dsterftest/xerbla.f @@ -0,0 +1,99 @@ +*> \brief \b XERBLA +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download XERBLA + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE XERBLA( SRNAME, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER*(*) SRNAME +* INTEGER INFO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> XERBLA is an error handler for the LAPACK routines. +*> It is called by an LAPACK routine if an input parameter has an +*> invalid value. A message is printed and execution stops. +*> +*> Installers may consider modifying the STOP statement in order to +*> call system-specific exception-handling facilities. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SRNAME +*> \verbatim +*> SRNAME is CHARACTER*(*) +*> The name of the routine which called XERBLA. +*> \endverbatim +*> +*> \param[in] INFO +*> \verbatim +*> INFO is INTEGER +*> The position of the invalid parameter in the parameter list +*> of the calling routine. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE XERBLA( SRNAME, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*(*) SRNAME + INTEGER INFO +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LEN_TRIM +* .. +* .. Executable Statements .. +* + WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO +* + STOP +* + 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', + $ 'an illegal value' ) +* +* End of XERBLA +* + END diff --git a/lapack/internal/testdata/netlib/daxpy.f b/lapack/internal/testdata/netlib/daxpy.f new file mode 100644 index 00000000..64a02d68 --- /dev/null +++ b/lapack/internal/testdata/netlib/daxpy.f @@ -0,0 +1,115 @@ +*> \brief \b DAXPY +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DA +* INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION DX(*),DY(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DAXPY constant times a vector plus a vector. +*> uses unrolled loops for increments equal to one. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> jack dongarra, linpack, 3/11/78. +*> modified 12/3/93, array(1) declarations changed to array(*) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (DA.EQ.0.0d0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,4) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DY(I) + DA*DX(I) + END DO + END IF + IF (N.LT.4) RETURN + MP1 = M + 1 + DO I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I+1) = DY(I+1) + DA*DX(I+1) + DY(I+2) = DY(I+2) + DA*DX(I+2) + DY(I+3) = DY(I+3) + DA*DX(I+3) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/lapack/internal/testdata/netlib/dcopy.f b/lapack/internal/testdata/netlib/dcopy.f new file mode 100644 index 00000000..d9d5ac7a --- /dev/null +++ b/lapack/internal/testdata/netlib/dcopy.f @@ -0,0 +1,115 @@ +*> \brief \b DCOPY +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* +* .. Scalar Arguments .. +* INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION DX(*),DY(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DCOPY copies a vector, x, to a vector, y. +*> uses unrolled loops for increments equal to one. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> jack dongarra, linpack, 3/11/78. +*> modified 12/3/93, array(1) declarations changed to array(*) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,7) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DX(I) + END DO + IF (N.LT.7) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,7 + DY(I) = DX(I) + DY(I+1) = DX(I+1) + DY(I+2) = DX(I+2) + DY(I+3) = DX(I+3) + DY(I+4) = DX(I+4) + DY(I+5) = DX(I+5) + DY(I+6) = DX(I+6) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/lapack/internal/testdata/netlib/dgemm.f b/lapack/internal/testdata/netlib/dgemm.f new file mode 100644 index 00000000..4bae243a --- /dev/null +++ b/lapack/internal/testdata/netlib/dgemm.f @@ -0,0 +1,384 @@ +*> \brief \b DGEMM +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION ALPHA,BETA +* INTEGER K,LDA,LDB,LDC,M,N +* CHARACTER TRANSA,TRANSB +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEMM performs one of the matrix-matrix operations +*> +*> C := alpha*op( A )*op( B ) + beta*C, +*> +*> where op( X ) is one of +*> +*> op( X ) = X or op( X ) = X**T, +*> +*> alpha and beta are scalars, and A, B and C are matrices, with op( A ) +*> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] TRANSA +*> \verbatim +*> TRANSA is CHARACTER*1 +*> On entry, TRANSA specifies the form of op( A ) to be used in +*> the matrix multiplication as follows: +*> +*> TRANSA = 'N' or 'n', op( A ) = A. +*> +*> TRANSA = 'T' or 't', op( A ) = A**T. +*> +*> TRANSA = 'C' or 'c', op( A ) = A**T. +*> \endverbatim +*> +*> \param[in] TRANSB +*> \verbatim +*> TRANSB is CHARACTER*1 +*> On entry, TRANSB specifies the form of op( B ) to be used in +*> the matrix multiplication as follows: +*> +*> TRANSB = 'N' or 'n', op( B ) = B. +*> +*> TRANSB = 'T' or 't', op( B ) = B**T. +*> +*> TRANSB = 'C' or 'c', op( B ) = B**T. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> On entry, M specifies the number of rows of the matrix +*> op( A ) and of the matrix C. M must be at least zero. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> On entry, N specifies the number of columns of the matrix +*> op( B ) and the number of columns of the matrix C. N must be +*> at least zero. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> On entry, K specifies the number of columns of the matrix +*> op( A ) and the number of rows of the matrix op( B ). K must +*> be at least zero. +*> \endverbatim +*> +*> \param[in] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION. +*> On entry, ALPHA specifies the scalar alpha. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is +*> k when TRANSA = 'N' or 'n', and is m otherwise. +*> Before entry with TRANSA = 'N' or 'n', the leading m by k +*> part of the array A must contain the matrix A, otherwise +*> the leading k by m part of the array A must contain the +*> matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> On entry, LDA specifies the first dimension of A as declared +*> in the calling (sub) program. When TRANSA = 'N' or 'n' then +*> LDA must be at least max( 1, m ), otherwise LDA must be at +*> least max( 1, k ). +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is +*> n when TRANSB = 'N' or 'n', and is k otherwise. +*> Before entry with TRANSB = 'N' or 'n', the leading k by n +*> part of the array B must contain the matrix B, otherwise +*> the leading n by k part of the array B must contain the +*> matrix B. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> On entry, LDB specifies the first dimension of B as declared +*> in the calling (sub) program. When TRANSB = 'N' or 'n' then +*> LDB must be at least max( 1, k ), otherwise LDB must be at +*> least max( 1, n ). +*> \endverbatim +*> +*> \param[in] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION. +*> On entry, BETA specifies the scalar beta. When BETA is +*> supplied as zero then C need not be set on input. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array of DIMENSION ( LDC, n ). +*> Before entry, the leading m by n part of the array C must +*> contain the matrix C, except when beta is zero, in which +*> case C need not be set on entry. +*> On exit, the array C is overwritten by the m by n matrix +*> ( alpha*op( A )*op( B ) + beta*C ). +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> On entry, LDC specifies the first dimension of C as declared +*> in the calling (sub) program. LDC must be at least +*> max( 1, m ). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup double_blas_level3 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Level 3 Blas routine. +*> +*> -- Written on 8-February-1989. +*> Jack Dongarra, Argonne National Laboratory. +*> Iain Duff, AERE Harwell. +*> Jeremy Du Croz, Numerical Algorithms Group Ltd. +*> Sven Hammarling, Numerical Algorithms Group Ltd. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* +* -- Reference BLAS level3 routine (version 3.6.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER K,LDA,LDB,LDC,M,N + CHARACTER TRANSA,TRANSB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,L,NCOLA,NROWA,NROWB + LOGICAL NOTA,NOTB +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Set NOTA and NOTB as true if A and B respectively are not +* transposed and set NROWA, NCOLA and NROWB as the number of rows +* and columns of A and the number of rows of B respectively. +* + NOTA = LSAME(TRANSA,'N') + NOTB = LSAME(TRANSB,'N') + IF (NOTA) THEN + NROWA = M + NCOLA = K + ELSE + NROWA = K + NCOLA = M + END IF + IF (NOTB) THEN + NROWB = K + ELSE + NROWB = N + END IF +* +* Test the input parameters. +* + INFO = 0 + IF ((.NOT.NOTA) .AND. (.NOT.LSAME(TRANSA,'C')) .AND. + + (.NOT.LSAME(TRANSA,'T'))) THEN + INFO = 1 + ELSE IF ((.NOT.NOTB) .AND. (.NOT.LSAME(TRANSB,'C')) .AND. + + (.NOT.LSAME(TRANSB,'T'))) THEN + INFO = 2 + ELSE IF (M.LT.0) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (K.LT.0) THEN + INFO = 5 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 8 + ELSE IF (LDB.LT.MAX(1,NROWB)) THEN + INFO = 10 + ELSE IF (LDC.LT.MAX(1,M)) THEN + INFO = 13 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + (((ALPHA.EQ.ZERO).OR. (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN +* +* And if alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + IF (BETA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + C(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1,N + DO 30 I = 1,M + C(I,J) = BETA*C(I,J) + 30 CONTINUE + 40 CONTINUE + END IF + RETURN + END IF +* +* Start the operations. +* + IF (NOTB) THEN + IF (NOTA) THEN +* +* Form C := alpha*A*B + beta*C. +* + DO 90 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 50 I = 1,M + C(I,J) = ZERO + 50 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 60 I = 1,M + C(I,J) = BETA*C(I,J) + 60 CONTINUE + END IF + DO 80 L = 1,K + TEMP = ALPHA*B(L,J) + DO 70 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 70 CONTINUE + 80 CONTINUE + 90 CONTINUE + ELSE +* +* Form C := alpha*A**T*B + beta*C +* + DO 120 J = 1,N + DO 110 I = 1,M + TEMP = ZERO + DO 100 L = 1,K + TEMP = TEMP + A(L,I)*B(L,J) + 100 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 110 CONTINUE + 120 CONTINUE + END IF + ELSE + IF (NOTA) THEN +* +* Form C := alpha*A*B**T + beta*C +* + DO 170 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 130 I = 1,M + C(I,J) = ZERO + 130 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 140 I = 1,M + C(I,J) = BETA*C(I,J) + 140 CONTINUE + END IF + DO 160 L = 1,K + TEMP = ALPHA*B(J,L) + DO 150 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 150 CONTINUE + 160 CONTINUE + 170 CONTINUE + ELSE +* +* Form C := alpha*A**T*B**T + beta*C +* + DO 200 J = 1,N + DO 190 I = 1,M + TEMP = ZERO + DO 180 L = 1,K + TEMP = TEMP + A(L,I)*B(J,L) + 180 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 190 CONTINUE + 200 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMM . +* + END diff --git a/lapack/internal/testdata/netlib/dgemv.f b/lapack/internal/testdata/netlib/dgemv.f new file mode 100644 index 00000000..e04cc07c --- /dev/null +++ b/lapack/internal/testdata/netlib/dgemv.f @@ -0,0 +1,330 @@ +*> \brief \b DGEMV +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION ALPHA,BETA +* INTEGER INCX,INCY,LDA,M,N +* CHARACTER TRANS +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEMV performs one of the matrix-vector operations +*> +*> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, +*> +*> where alpha and beta are scalars, x and y are vectors and A is an +*> m by n matrix. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> On entry, TRANS specifies the operation to be performed as +*> follows: +*> +*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. +*> +*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. +*> +*> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> On entry, M specifies the number of rows of the matrix A. +*> M must be at least zero. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> On entry, N specifies the number of columns of the matrix A. +*> N must be at least zero. +*> \endverbatim +*> +*> \param[in] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION. +*> On entry, ALPHA specifies the scalar alpha. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array of DIMENSION ( LDA, n ). +*> Before entry, the leading m by n part of the array A must +*> contain the matrix of coefficients. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> On entry, LDA specifies the first dimension of A as declared +*> in the calling (sub) program. LDA must be at least +*> max( 1, m ). +*> \endverbatim +*> +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION array of DIMENSION at least +*> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' +*> and at least +*> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. +*> Before entry, the incremented array X must contain the +*> vector x. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> On entry, INCX specifies the increment for the elements of +*> X. INCX must not be zero. +*> \endverbatim +*> +*> \param[in] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION. +*> On entry, BETA specifies the scalar beta. When BETA is +*> supplied as zero then Y need not be set on input. +*> \endverbatim +*> +*> \param[in,out] Y +*> \verbatim +*> Y is DOUBLE PRECISION array of DIMENSION at least +*> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' +*> and at least +*> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. +*> Before entry with BETA non-zero, the incremented array Y +*> must contain the vector y. On exit, Y is overwritten by the +*> updated vector y. +*> \endverbatim +*> +*> \param[in] INCY +*> \verbatim +*> INCY is INTEGER +*> On entry, INCY specifies the increment for the elements of +*> Y. INCY must not be zero. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup double_blas_level2 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Level 2 Blas routine. +*> The vector and matrix arguments are not referenced when N = 0, or M = 0 +*> +*> -- Written on 22-October-1986. +*> Jack Dongarra, Argonne National Lab. +*> Jeremy Du Croz, Nag Central Office. +*> Sven Hammarling, Nag Central Office. +*> Richard Hanson, Sandia National Labs. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* +* -- Reference BLAS level2 routine (version 3.6.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER INCX,INCY,LDA,M,N + CHARACTER TRANS +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY,LENX,LENY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 1 + ELSE IF (M.LT.0) THEN + INFO = 2 + ELSE IF (N.LT.0) THEN + INFO = 3 + ELSE IF (LDA.LT.MAX(1,M)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + ELSE IF (INCY.EQ.0) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN +* +* Set LENX and LENY, the lengths of the vectors x and y, and set +* up the start points in X and Y. +* + IF (LSAME(TRANS,'N')) THEN + LENX = N + LENY = M + ELSE + LENX = M + LENY = N + END IF + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (LENX-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (LENY-1)*INCY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* +* First form y := beta*y. +* + IF (BETA.NE.ONE) THEN + IF (INCY.EQ.1) THEN + IF (BETA.EQ.ZERO) THEN + DO 10 I = 1,LENY + Y(I) = ZERO + 10 CONTINUE + ELSE + DO 20 I = 1,LENY + Y(I) = BETA*Y(I) + 20 CONTINUE + END IF + ELSE + IY = KY + IF (BETA.EQ.ZERO) THEN + DO 30 I = 1,LENY + Y(IY) = ZERO + IY = IY + INCY + 30 CONTINUE + ELSE + DO 40 I = 1,LENY + Y(IY) = BETA*Y(IY) + IY = IY + INCY + 40 CONTINUE + END IF + END IF + END IF + IF (ALPHA.EQ.ZERO) RETURN + IF (LSAME(TRANS,'N')) THEN +* +* Form y := alpha*A*x + y. +* + JX = KX + IF (INCY.EQ.1) THEN + DO 60 J = 1,N + TEMP = ALPHA*X(JX) + DO 50 I = 1,M + Y(I) = Y(I) + TEMP*A(I,J) + 50 CONTINUE + JX = JX + INCX + 60 CONTINUE + ELSE + DO 80 J = 1,N + TEMP = ALPHA*X(JX) + IY = KY + DO 70 I = 1,M + Y(IY) = Y(IY) + TEMP*A(I,J) + IY = IY + INCY + 70 CONTINUE + JX = JX + INCX + 80 CONTINUE + END IF + ELSE +* +* Form y := alpha*A**T*x + y. +* + JY = KY + IF (INCX.EQ.1) THEN + DO 100 J = 1,N + TEMP = ZERO + DO 90 I = 1,M + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 100 CONTINUE + ELSE + DO 120 J = 1,N + TEMP = ZERO + IX = KX + DO 110 I = 1,M + TEMP = TEMP + A(I,J)*X(IX) + IX = IX + INCX + 110 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 120 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMV . +* + END diff --git a/lapack/internal/testdata/netlib/dlabad.f b/lapack/internal/testdata/netlib/dlabad.f new file mode 100644 index 00000000..da412633 --- /dev/null +++ b/lapack/internal/testdata/netlib/dlabad.f @@ -0,0 +1,105 @@ +*> \brief \b DLABAD +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLABAD + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLABAD( SMALL, LARGE ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION LARGE, SMALL +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLABAD takes as input the values computed by DLAMCH for underflow and +*> overflow, and returns the square root of each of these values if the +*> log of LARGE is sufficiently large. This subroutine is intended to +*> identify machines with a large exponent range, such as the Crays, and +*> redefine the underflow and overflow limits to be the square roots of +*> the values computed by DLAMCH. This subroutine is needed because +*> DLAMCH does not compensate for poor arithmetic in the upper half of +*> the exponent range, as is found on a Cray. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in,out] SMALL +*> \verbatim +*> SMALL is DOUBLE PRECISION +*> On entry, the underflow threshold as computed by DLAMCH. +*> On exit, if LOG10(LARGE) is sufficiently large, the square +*> root of SMALL, otherwise unchanged. +*> \endverbatim +*> +*> \param[in,out] LARGE +*> \verbatim +*> LARGE is DOUBLE PRECISION +*> On entry, the overflow threshold as computed by DLAMCH. +*> On exit, if LOG10(LARGE) is sufficiently large, the square +*> root of LARGE, otherwise unchanged. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLABAD( SMALL, LARGE ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + DOUBLE PRECISION LARGE, SMALL +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LOG10, SQRT +* .. +* .. Executable Statements .. +* +* If it looks like we're on a Cray, take the square root of +* SMALL and LARGE to avoid overflow and underflow problems. +* +* IF( LOG10( LARGE ).GT.2000.D0 ) THEN +* SMALL = SQRT( SMALL ) +* LARGE = SQRT( LARGE ) +* END IF +* + RETURN +* +* End of DLABAD +* + END diff --git a/lapack/internal/testdata/netlib/dlacpy.f b/lapack/internal/testdata/netlib/dlacpy.f new file mode 100644 index 00000000..a9a23c94 --- /dev/null +++ b/lapack/internal/testdata/netlib/dlacpy.f @@ -0,0 +1,156 @@ +*> \brief \b DLACPY copies all or part of one two-dimensional array to another. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLACPY + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER LDA, LDB, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLACPY copies all or part of a two-dimensional matrix A to another +*> matrix B. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> Specifies the part of the matrix A to be copied to B. +*> = 'U': Upper triangular part +*> = 'L': Lower triangular part +*> Otherwise: All of the matrix A +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. If UPLO = 'U', only the upper triangle +*> or trapezoid is accessed; if UPLO = 'L', only the lower +*> triangle or trapezoid is accessed. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,N) +*> On exit, B = A in the locations specified by UPLO. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of the array B. LDB >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, LDB, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( LSAME( UPLO, 'U' ) ) THEN + DO 20 J = 1, N + DO 10 I = 1, MIN( J, M ) + B( I, J ) = A( I, J ) + 10 CONTINUE + 20 CONTINUE + ELSE IF( LSAME( UPLO, 'L' ) ) THEN + DO 40 J = 1, N + DO 30 I = J, M + B( I, J ) = A( I, J ) + 30 CONTINUE + 40 CONTINUE + ELSE + DO 60 J = 1, N + DO 50 I = 1, M + B( I, J ) = A( I, J ) + 50 CONTINUE + 60 CONTINUE + END IF + RETURN +* +* End of DLACPY +* + END diff --git a/lapack/internal/testdata/netlib/dlahr2.f b/lapack/internal/testdata/netlib/dlahr2.f new file mode 100644 index 00000000..9d15979c --- /dev/null +++ b/lapack/internal/testdata/netlib/dlahr2.f @@ -0,0 +1,326 @@ +*> \brief \b DLAHR2 reduces the specified number of first columns of a general rectangular matrix A so that elements below the specified subdiagonal are zero, and returns auxiliary matrices which are needed to apply the transformation to the unreduced part of A. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAHR2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) +* +* .. Scalar Arguments .. +* INTEGER K, LDA, LDT, LDY, N, NB +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), T( LDT, NB ), TAU( NB ), +* $ Y( LDY, NB ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAHR2 reduces the first NB columns of A real general n-BY-(n-k+1) +*> matrix A so that elements below the k-th subdiagonal are zero. The +*> reduction is performed by an orthogonal similarity transformation +*> Q**T * A * Q. The routine returns the matrices V and T which determine +*> Q as a block reflector I - V*T*V**T, and also the matrix Y = A * V * T. +*> +*> This is an auxiliary routine called by DGEHRD. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The offset for the reduction. Elements below the k-th +*> subdiagonal in the first NB columns are reduced to zero. +*> K < N. +*> \endverbatim +*> +*> \param[in] NB +*> \verbatim +*> NB is INTEGER +*> The number of columns to be reduced. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N-K+1) +*> On entry, the n-by-(n-k+1) general matrix A. +*> On exit, the elements on and above the k-th subdiagonal in +*> the first NB columns are overwritten with the corresponding +*> elements of the reduced matrix; the elements below the k-th +*> subdiagonal, with the array TAU, represent the matrix Q as a +*> product of elementary reflectors. The other columns of A are +*> unchanged. See Further Details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (NB) +*> The scalar factors of the elementary reflectors. See Further +*> Details. +*> \endverbatim +*> +*> \param[out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,NB) +*> The upper triangular matrix T. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= NB. +*> \endverbatim +*> +*> \param[out] Y +*> \verbatim +*> Y is DOUBLE PRECISION array, dimension (LDY,NB) +*> The n-by-nb matrix Y. +*> \endverbatim +*> +*> \param[in] LDY +*> \verbatim +*> LDY is INTEGER +*> The leading dimension of the array Y. LDY >= N. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The matrix Q is represented as a product of nb elementary reflectors +*> +*> Q = H(1) H(2) . . . H(nb). +*> +*> Each H(i) has the form +*> +*> H(i) = I - tau * v * v**T +*> +*> where tau is a real scalar, and v is a real vector with +*> v(1:i+k-1) = 0, v(i+k) = 1; v(i+k+1:n) is stored on exit in +*> A(i+k+1:n,i), and tau in TAU(i). +*> +*> The elements of the vectors v together form the (n-k+1)-by-nb matrix +*> V which is needed, with T and Y, to apply the transformation to the +*> unreduced part of the matrix, using an update of the form: +*> A := (I - V*T*V**T) * (A - Y*V**T). +*> +*> The contents of A on exit are illustrated by the following example +*> with n = 7, k = 3 and nb = 2: +*> +*> ( a a a a a ) +*> ( a a a a a ) +*> ( a a a a a ) +*> ( h h a a a ) +*> ( v1 h a a a ) +*> ( v1 v2 a a a ) +*> ( v1 v2 a a a ) +*> +*> where a denotes an element of the original matrix A, h denotes a +*> modified element of the upper Hessenberg matrix H, and vi denotes an +*> element of the vector defining H(i). +*> +*> This subroutine is a slight modification of LAPACK-3.0's DLAHRD +*> incorporating improvements proposed by Quintana-Orti and Van de +*> Gejin. Note that the entries of A(1:K,2:NB) differ from those +*> returned by the original LAPACK-3.0's DLAHRD routine. (This +*> subroutine is not backward compatible with LAPACK-3.0's DLAHRD.) +*> \endverbatim +* +*> \par References: +* ================ +*> +*> Gregorio Quintana-Orti and Robert van de Geijn, "Improving the +*> performance of reduction to Hessenberg form," ACM Transactions on +*> Mathematical Software, 32(2):180-194, June 2006. +*> +* ===================================================================== + SUBROUTINE DLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER K, LDA, LDT, LDY, N, NB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), T( LDT, NB ), TAU( NB ), + $ Y( LDY, NB ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, + $ ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION EI +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DCOPY, DGEMM, DGEMV, DLACPY, + $ DLARFG, DSCAL, DTRMM, DTRMV +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* + DO 10 I = 1, NB + IF( I.GT.1 ) THEN +* +* Update A(K+1:N,I) +* +* Update I-th column of A - Y * V**T +* + CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, Y(K+1,1), LDY, + $ A( K+I-1, 1 ), LDA, ONE, A( K+1, I ), 1 ) +* +* Apply I - V * T**T * V**T to this column (call it b) from the +* left, using the last column of T as workspace +* +* Let V = ( V1 ) and b = ( b1 ) (first I-1 rows) +* ( V2 ) ( b2 ) +* +* where V1 is unit lower triangular +* +* w := V1**T * b1 +* + CALL DCOPY( I-1, A( K+1, I ), 1, T( 1, NB ), 1 ) + CALL DTRMV( 'Lower', 'Transpose', 'UNIT', + $ I-1, A( K+1, 1 ), + $ LDA, T( 1, NB ), 1 ) +* +* w := w + V2**T * b2 +* + CALL DGEMV( 'Transpose', N-K-I+1, I-1, + $ ONE, A( K+I, 1 ), + $ LDA, A( K+I, I ), 1, ONE, T( 1, NB ), 1 ) +* +* w := T**T * w +* + CALL DTRMV( 'Upper', 'Transpose', 'NON-UNIT', + $ I-1, T, LDT, + $ T( 1, NB ), 1 ) +* +* b2 := b2 - V2*w +* + CALL DGEMV( 'NO TRANSPOSE', N-K-I+1, I-1, -ONE, + $ A( K+I, 1 ), + $ LDA, T( 1, NB ), 1, ONE, A( K+I, I ), 1 ) +* +* b1 := b1 - V1*w +* + CALL DTRMV( 'Lower', 'NO TRANSPOSE', + $ 'UNIT', I-1, + $ A( K+1, 1 ), LDA, T( 1, NB ), 1 ) + CALL DAXPY( I-1, -ONE, T( 1, NB ), 1, A( K+1, I ), 1 ) +* + A( K+I-1, I-1 ) = EI + END IF +* +* Generate the elementary reflector H(I) to annihilate +* A(K+I+1:N,I) +* + CALL DLARFG( N-K-I+1, A( K+I, I ), A( MIN( K+I+1, N ), I ), 1, + $ TAU( I ) ) + EI = A( K+I, I ) + A( K+I, I ) = ONE +* +* Compute Y(K+1:N,I) +* + CALL DGEMV( 'NO TRANSPOSE', N-K, N-K-I+1, + $ ONE, A( K+1, I+1 ), + $ LDA, A( K+I, I ), 1, ZERO, Y( K+1, I ), 1 ) + CALL DGEMV( 'Transpose', N-K-I+1, I-1, + $ ONE, A( K+I, 1 ), LDA, + $ A( K+I, I ), 1, ZERO, T( 1, I ), 1 ) + CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, + $ Y( K+1, 1 ), LDY, + $ T( 1, I ), 1, ONE, Y( K+1, I ), 1 ) + CALL DSCAL( N-K, TAU( I ), Y( K+1, I ), 1 ) +* +* Compute T(1:I,I) +* + CALL DSCAL( I-1, -TAU( I ), T( 1, I ), 1 ) + CALL DTRMV( 'Upper', 'No Transpose', 'NON-UNIT', + $ I-1, T, LDT, + $ T( 1, I ), 1 ) + T( I, I ) = TAU( I ) +* + 10 CONTINUE + A( K+NB, NB ) = EI +* +* Compute Y(1:K,1:NB) +* + CALL DLACPY( 'ALL', K, NB, A( 1, 2 ), LDA, Y, LDY ) + CALL DTRMM( 'RIGHT', 'Lower', 'NO TRANSPOSE', + $ 'UNIT', K, NB, + $ ONE, A( K+1, 1 ), LDA, Y, LDY ) + IF( N.GT.K+NB ) + $ CALL DGEMM( 'NO TRANSPOSE', 'NO TRANSPOSE', K, + $ NB, N-K-NB, ONE, + $ A( 1, 2+NB ), LDA, A( K+1+NB, 1 ), LDA, ONE, Y, + $ LDY ) + CALL DTRMM( 'RIGHT', 'Upper', 'NO TRANSPOSE', + $ 'NON-UNIT', K, NB, + $ ONE, T, LDT, Y, LDY ) +* + RETURN +* +* End of DLAHR2 +* + END diff --git a/lapack/internal/testdata/netlib/dlamch.f b/lapack/internal/testdata/netlib/dlamch.f new file mode 100644 index 00000000..22a16218 --- /dev/null +++ b/lapack/internal/testdata/netlib/dlamch.f @@ -0,0 +1,189 @@ +*> \brief \b DLAMCH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAMCH determines double precision machine parameters. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CMACH +*> \verbatim +*> Specifies the value to be returned by DLAMCH: +*> = 'E' or 'e', DLAMCH := eps +*> = 'S' or 's , DLAMCH := sfmin +*> = 'B' or 'b', DLAMCH := base +*> = 'P' or 'p', DLAMCH := eps*base +*> = 'N' or 'n', DLAMCH := t +*> = 'R' or 'r', DLAMCH := rnd +*> = 'M' or 'm', DLAMCH := emin +*> = 'U' or 'u', DLAMCH := rmin +*> = 'L' or 'l', DLAMCH := emax +*> = 'O' or 'o', DLAMCH := rmax +*> where +*> eps = relative machine precision +*> sfmin = safe minimum, such that 1/sfmin does not overflow +*> base = base of the machine +*> prec = eps*base +*> t = number of (base) digits in the mantissa +*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +*> emin = minimum exponent before (gradual) underflow +*> rmin = underflow threshold - base**(emin-1) +*> emax = largest exponent before overflow +*> rmax = overflow threshold - (base**emax)*(1-eps) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, + $ MINEXPONENT, RADIX, TINY +* .. +* .. Executable Statements .. +* +* +* Assume rounding, not chopping. Always. +* + RND = ONE +* + IF( ONE.EQ.RND ) THEN + EPS = EPSILON(ZERO) * 0.5 + ELSE + EPS = EPSILON(ZERO) + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + SFMIN = TINY(ZERO) + SMALL = ONE / HUGE(ZERO) + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = EPS * RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = DIGITS(ZERO) + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = MINEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = tiny(zero) + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = MAXEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = HUGE(ZERO) + ELSE + RMACH = ZERO + END IF +* + DLAMCH = RMACH + RETURN +* +* End of DLAMCH +* + END +************************************************************************ +*> \brief \b DLAMC3 +*> \details +*> \b Purpose: +*> \verbatim +*> DLAMC3 is intended to force A and B to be stored prior to doing +*> the addition of A and B , for use in situations where optimizers +*> might hold one of these in a register. +*> \endverbatim +*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. +*> \date November 2015 +*> \ingroup auxOTHERauxiliary +*> +*> \param[in] A +*> \verbatim +*> A is a DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is a DOUBLE PRECISION +*> The values A and B. +*> \endverbatim +*> + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ diff --git a/lapack/internal/testdata/netlib/dlapy2.f b/lapack/internal/testdata/netlib/dlapy2.f new file mode 100644 index 00000000..d43b0d5d --- /dev/null +++ b/lapack/internal/testdata/netlib/dlapy2.f @@ -0,0 +1,104 @@ +*> \brief \b DLAPY2 returns sqrt(x2+y2). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAPY2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION X, Y +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary +*> overflow. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] Y +*> \verbatim +*> Y is DOUBLE PRECISION +*> X and Y specify the values x and y. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION W, XABS, YABS, Z +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + XABS = ABS( X ) + YABS = ABS( Y ) + W = MAX( XABS, YABS ) + Z = MIN( XABS, YABS ) + IF( Z.EQ.ZERO ) THEN + DLAPY2 = W + ELSE + DLAPY2 = W*SQRT( ONE+( Z / W )**2 ) + END IF + RETURN +* +* End of DLAPY2 +* + END diff --git a/lapack/internal/testdata/netlib/dlaqr1.f b/lapack/internal/testdata/netlib/dlaqr1.f new file mode 100644 index 00000000..df4fb68b --- /dev/null +++ b/lapack/internal/testdata/netlib/dlaqr1.f @@ -0,0 +1,179 @@ +*> \brief \b DLAQR1 sets a scalar multiple of the first column of the product of 2-by-2 or 3-by-3 matrix H and specified shifts. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR1 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR1( N, H, LDH, SR1, SI1, SR2, SI2, V ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION SI1, SI2, SR1, SR2 +* INTEGER LDH, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), V( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> Given a 2-by-2 or 3-by-3 matrix H, DLAQR1 sets v to a +*> scalar multiple of the first column of the product +*> +*> (*) K = (H - (sr1 + i*si1)*I)*(H - (sr2 + i*si2)*I) +*> +*> scaling to avoid overflows and most underflows. It +*> is assumed that either +*> +*> 1) sr1 = sr2 and si1 = -si2 +*> or +*> 2) si1 = si2 = 0. +*> +*> This is useful for starting double implicit shift bulges +*> in the QR algorithm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is integer +*> Order of the matrix H. N must be either 2 or 3. +*> \endverbatim +*> +*> \param[in] H +*> \verbatim +*> H is DOUBLE PRECISION array of dimension (LDH,N) +*> The 2-by-2 or 3-by-3 matrix H in (*). +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer +*> The leading dimension of H as declared in +*> the calling procedure. LDH.GE.N +*> \endverbatim +*> +*> \param[in] SR1 +*> \verbatim +*> SR1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SI1 +*> \verbatim +*> SI1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SR2 +*> \verbatim +*> SR2 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SI2 +*> \verbatim +*> SI2 is DOUBLE PRECISION +*> The shifts in (*). +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array of dimension N +*> A scalar multiple of the first column of the +*> matrix K in (*). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +*> +* ===================================================================== + SUBROUTINE DLAQR1( N, H, LDH, SR1, SI1, SR2, SI2, V ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SI1, SI2, SR1, SR2 + INTEGER LDH, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), V( * ) +* .. +* +* ================================================================ +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION H21S, H31S, S +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. +* .. Executable Statements .. + IF( N.EQ.2 ) THEN + S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) + IF( S.EQ.ZERO ) THEN + V( 1 ) = ZERO + V( 2 ) = ZERO + ELSE + H21S = H( 2, 1 ) / S + V( 1 ) = H21S*H( 1, 2 ) + ( H( 1, 1 )-SR1 )* + $ ( ( H( 1, 1 )-SR2 ) / S ) - SI1*( SI2 / S ) + V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) + END IF + ELSE + S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) + + $ ABS( H( 3, 1 ) ) + IF( S.EQ.ZERO ) THEN + V( 1 ) = ZERO + V( 2 ) = ZERO + V( 3 ) = ZERO + ELSE + H21S = H( 2, 1 ) / S + H31S = H( 3, 1 ) / S + V( 1 ) = ( H( 1, 1 )-SR1 )*( ( H( 1, 1 )-SR2 ) / S ) - + $ SI1*( SI2 / S ) + H( 1, 2 )*H21S + H( 1, 3 )*H31S + V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) + + $ H( 2, 3 )*H31S + V( 3 ) = H31S*( H( 1, 1 )+H( 3, 3 )-SR1-SR2 ) + + $ H21S*H( 3, 2 ) + END IF + END IF + END diff --git a/lapack/internal/testdata/netlib/dlaqr5.f b/lapack/internal/testdata/netlib/dlaqr5.f new file mode 100644 index 00000000..37ce6f6b --- /dev/null +++ b/lapack/internal/testdata/netlib/dlaqr5.f @@ -0,0 +1,921 @@ +*> \brief \b DLAQR5 performs a single small-bulge multi-shift QR sweep. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR5 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, +* SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, +* LDU, NV, WV, LDWV, NH, WH, LDWH ) +* +* .. Scalar Arguments .. +* INTEGER IHIZ, ILOZ, KACC22, KBOT, KTOP, LDH, LDU, LDV, +* $ LDWH, LDWV, LDZ, N, NH, NSHFTS, NV +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), +* $ V( LDV, * ), WH( LDWH, * ), WV( LDWV, * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAQR5, called by DLAQR0, performs a +*> single small-bulge multi-shift QR sweep. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is logical scalar +*> WANTT = .true. if the quasi-triangular Schur factor +*> is being computed. WANTT is set to .false. otherwise. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is logical scalar +*> WANTZ = .true. if the orthogonal Schur factor is being +*> computed. WANTZ is set to .false. otherwise. +*> \endverbatim +*> +*> \param[in] KACC22 +*> \verbatim +*> KACC22 is integer with value 0, 1, or 2. +*> Specifies the computation mode of far-from-diagonal +*> orthogonal updates. +*> = 0: DLAQR5 does not accumulate reflections and does not +*> use matrix-matrix multiply to update far-from-diagonal +*> matrix entries. +*> = 1: DLAQR5 accumulates reflections and uses matrix-matrix +*> multiply to update the far-from-diagonal matrix entries. +*> = 2: DLAQR5 accumulates reflections, uses matrix-matrix +*> multiply to update the far-from-diagonal matrix entries, +*> and takes advantage of 2-by-2 block structure during +*> matrix multiplies. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is integer scalar +*> N is the order of the Hessenberg matrix H upon which this +*> subroutine operates. +*> \endverbatim +*> +*> \param[in] KTOP +*> \verbatim +*> KTOP is integer scalar +*> \endverbatim +*> +*> \param[in] KBOT +*> \verbatim +*> KBOT is integer scalar +*> These are the first and last rows and columns of an +*> isolated diagonal block upon which the QR sweep is to be +*> applied. It is assumed without a check that +*> either KTOP = 1 or H(KTOP,KTOP-1) = 0 +*> and +*> either KBOT = N or H(KBOT+1,KBOT) = 0. +*> \endverbatim +*> +*> \param[in] NSHFTS +*> \verbatim +*> NSHFTS is integer scalar +*> NSHFTS gives the number of simultaneous shifts. NSHFTS +*> must be positive and even. +*> \endverbatim +*> +*> \param[in,out] SR +*> \verbatim +*> SR is DOUBLE PRECISION array of size (NSHFTS) +*> \endverbatim +*> +*> \param[in,out] SI +*> \verbatim +*> SI is DOUBLE PRECISION array of size (NSHFTS) +*> SR contains the real parts and SI contains the imaginary +*> parts of the NSHFTS shifts of origin that define the +*> multi-shift QR sweep. On output SR and SI may be +*> reordered. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array of size (LDH,N) +*> On input H contains a Hessenberg matrix. On output a +*> multi-shift QR sweep with shifts SR(J)+i*SI(J) is applied +*> to the isolated diagonal block in rows and columns KTOP +*> through KBOT. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer scalar +*> LDH is the leading dimension of H just as declared in the +*> calling procedure. LDH.GE.MAX(1,N). +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array of size (LDZ,IHI) +*> If WANTZ = .TRUE., then the QR Sweep orthogonal +*> similarity transformation is accumulated into +*> Z(ILOZ:IHIZ,ILO:IHI) from the right. +*> If WANTZ = .FALSE., then Z is unreferenced. +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is integer scalar +*> LDA is the leading dimension of Z just as declared in +*> the calling procedure. LDZ.GE.N. +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array of size (LDV,NSHFTS/2) +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is integer scalar +*> LDV is the leading dimension of V as declared in the +*> calling procedure. LDV.GE.3. +*> \endverbatim +*> +*> \param[out] U +*> \verbatim +*> U is DOUBLE PRECISION array of size +*> (LDU,3*NSHFTS-3) +*> \endverbatim +*> +*> \param[in] LDU +*> \verbatim +*> LDU is integer scalar +*> LDU is the leading dimension of U just as declared in the +*> in the calling subroutine. LDU.GE.3*NSHFTS-3. +*> \endverbatim +*> +*> \param[in] NH +*> \verbatim +*> NH is integer scalar +*> NH is the number of columns in array WH available for +*> workspace. NH.GE.1. +*> \endverbatim +*> +*> \param[out] WH +*> \verbatim +*> WH is DOUBLE PRECISION array of size (LDWH,NH) +*> \endverbatim +*> +*> \param[in] LDWH +*> \verbatim +*> LDWH is integer scalar +*> Leading dimension of WH just as declared in the +*> calling procedure. LDWH.GE.3*NSHFTS-3. +*> \endverbatim +*> +*> \param[in] NV +*> \verbatim +*> NV is integer scalar +*> NV is the number of rows in WV agailable for workspace. +*> NV.GE.1. +*> \endverbatim +*> +*> \param[out] WV +*> \verbatim +*> WV is DOUBLE PRECISION array of size +*> (LDWV,3*NSHFTS-3) +*> \endverbatim +*> +*> \param[in] LDWV +*> \verbatim +*> LDWV is integer scalar +*> LDWV is the leading dimension of WV as declared in the +*> in the calling subroutine. LDWV.GE.NV. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +* +*> \par References: +* ================ +*> +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 +*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages +*> 929--947, 2002. +*> +* ===================================================================== + SUBROUTINE DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, + $ SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, + $ LDU, NV, WV, LDWV, NH, WH, LDWH ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER IHIZ, ILOZ, KACC22, KBOT, KTOP, LDH, LDU, LDV, + $ LDWH, LDWV, LDZ, N, NH, NSHFTS, NV + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), + $ V( LDV, * ), WH( LDWH, * ), WV( LDWV, * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, BETA, H11, H12, H21, H22, REFSUM, + $ SAFMAX, SAFMIN, SCL, SMLNUM, SWAP, TST1, TST2, + $ ULP + INTEGER I, I2, I4, INCOL, J, J2, J4, JBOT, JCOL, JLEN, + $ JROW, JTOP, K, K1, KDU, KMS, KNZ, KRCOL, KZS, + $ M, M22, MBOT, MEND, MSTART, MTOP, NBMPS, NDCOL, + $ NS, NU + LOGICAL ACCUM, BLK22, BMP22 +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. +* + INTRINSIC ABS, DBLE, MAX, MIN, MOD +* .. +* .. Local Arrays .. + DOUBLE PRECISION VT( 3 ) +* .. +* .. External Subroutines .. + EXTERNAL DGEMM, DLABAD, DLACPY, DLAQR1, DLARFG, DLASET, + $ DTRMM +* .. +* .. Executable Statements .. +* +* ==== If there are no shifts, then there is nothing to do. ==== +* + IF( NSHFTS.LT.2 ) + $ RETURN +* +* ==== If the active block is empty or 1-by-1, then there +* . is nothing to do. ==== +* + IF( KTOP.GE.KBOT ) + $ RETURN +* +* ==== Shuffle shifts into pairs of real shifts and pairs +* . of complex conjugate shifts assuming complex +* . conjugate shifts are already adjacent to one +* . another. ==== +* + DO 10 I = 1, NSHFTS - 2, 2 + IF( SI( I ).NE.-SI( I+1 ) ) THEN +* + SWAP = SR( I ) + SR( I ) = SR( I+1 ) + SR( I+1 ) = SR( I+2 ) + SR( I+2 ) = SWAP +* + SWAP = SI( I ) + SI( I ) = SI( I+1 ) + SI( I+1 ) = SI( I+2 ) + SI( I+2 ) = SWAP + END IF + 10 CONTINUE +* +* ==== NSHFTS is supposed to be even, but if it is odd, +* . then simply reduce it by one. The shuffle above +* . ensures that the dropped shift is real and that +* . the remaining shifts are paired. ==== +* + NS = NSHFTS - MOD( NSHFTS, 2 ) +* +* ==== Machine constants for deflation ==== +* + SAFMIN = DLAMCH( 'SAFE MINIMUM' ) + SAFMAX = ONE / SAFMIN + CALL DLABAD( SAFMIN, SAFMAX ) + ULP = DLAMCH( 'PRECISION' ) + SMLNUM = SAFMIN*( DBLE( N ) / ULP ) +* +* ==== Use accumulated reflections to update far-from-diagonal +* . entries ? ==== +* + ACCUM = ( KACC22.EQ.1 ) .OR. ( KACC22.EQ.2 ) +* +* ==== If so, exploit the 2-by-2 block structure? ==== +* + BLK22 = ( NS.GT.2 ) .AND. ( KACC22.EQ.2 ) +* +* ==== clear trash ==== +* + IF( KTOP+2.LE.KBOT ) + $ H( KTOP+2, KTOP ) = ZERO +* +* ==== NBMPS = number of 2-shift bulges in the chain ==== +* + NBMPS = NS / 2 +* +* ==== KDU = width of slab ==== +* + KDU = 6*NBMPS - 3 +* +* ==== Create and chase chains of NBMPS bulges ==== +* + DO 220 INCOL = 3*( 1-NBMPS ) + KTOP - 1, KBOT - 2, 3*NBMPS - 2 + NDCOL = INCOL + KDU + IF( ACCUM ) + $ CALL DLASET( 'ALL', KDU, KDU, ZERO, ONE, U, LDU ) +* +* ==== Near-the-diagonal bulge chase. The following loop +* . performs the near-the-diagonal part of a small bulge +* . multi-shift QR sweep. Each 6*NBMPS-2 column diagonal +* . chunk extends from column INCOL to column NDCOL +* . (including both column INCOL and column NDCOL). The +* . following loop chases a 3*NBMPS column long chain of +* . NBMPS bulges 3*NBMPS-2 columns to the right. (INCOL +* . may be less than KTOP and and NDCOL may be greater than +* . KBOT indicating phantom columns from which to chase +* . bulges before they are actually introduced or to which +* . to chase bulges beyond column KBOT.) ==== +* + DO 150 KRCOL = INCOL, MIN( INCOL+3*NBMPS-3, KBOT-2 ) +* +* ==== Bulges number MTOP to MBOT are active double implicit +* . shift bulges. There may or may not also be small +* . 2-by-2 bulge, if there is room. The inactive bulges +* . (if any) must wait until the active bulges have moved +* . down the diagonal to make room. The phantom matrix +* . paradigm described above helps keep track. ==== +* + MTOP = MAX( 1, ( ( KTOP-1 )-KRCOL+2 ) / 3+1 ) + MBOT = MIN( NBMPS, ( KBOT-KRCOL ) / 3 ) + M22 = MBOT + 1 + BMP22 = ( MBOT.LT.NBMPS ) .AND. ( KRCOL+3*( M22-1 ) ).EQ. + $ ( KBOT-2 ) +* +* ==== Generate reflections to chase the chain right +* . one column. (The minimum value of K is KTOP-1.) ==== +* + DO 20 M = MTOP, MBOT + K = KRCOL + 3*( M-1 ) + IF( K.EQ.KTOP-1 ) THEN + CALL DLAQR1( 3, H( KTOP, KTOP ), LDH, SR( 2*M-1 ), + $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), + $ V( 1, M ) ) + ALPHA = V( 1, M ) + CALL DLARFG( 3, ALPHA, V( 2, M ), 1, V( 1, M ) ) + ELSE + BETA = H( K+1, K ) + V( 2, M ) = H( K+2, K ) + V( 3, M ) = H( K+3, K ) + CALL DLARFG( 3, BETA, V( 2, M ), 1, V( 1, M ) ) +* +* ==== A Bulge may collapse because of vigilant +* . deflation or destructive underflow. In the +* . underflow case, try the two-small-subdiagonals +* . trick to try to reinflate the bulge. ==== +* + IF( H( K+3, K ).NE.ZERO .OR. H( K+3, K+1 ).NE. + $ ZERO .OR. H( K+3, K+2 ).EQ.ZERO ) THEN +* +* ==== Typical case: not collapsed (yet). ==== +* + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + ELSE +* +* ==== Atypical case: collapsed. Attempt to +* . reintroduce ignoring H(K+1,K) and H(K+2,K). +* . If the fill resulting from the new +* . reflector is too large, then abandon it. +* . Otherwise, use the new one. ==== +* + CALL DLAQR1( 3, H( K+1, K+1 ), LDH, SR( 2*M-1 ), + $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), + $ VT ) + ALPHA = VT( 1 ) + CALL DLARFG( 3, ALPHA, VT( 2 ), 1, VT( 1 ) ) + REFSUM = VT( 1 )*( H( K+1, K )+VT( 2 )* + $ H( K+2, K ) ) +* + IF( ABS( H( K+2, K )-REFSUM*VT( 2 ) )+ + $ ABS( REFSUM*VT( 3 ) ).GT.ULP* + $ ( ABS( H( K, K ) )+ABS( H( K+1, + $ K+1 ) )+ABS( H( K+2, K+2 ) ) ) ) THEN +* +* ==== Starting a new bulge here would +* . create non-negligible fill. Use +* . the old one with trepidation. ==== +* + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + ELSE +* +* ==== Stating a new bulge here would +* . create only negligible fill. +* . Replace the old reflector with +* . the new one. ==== +* + H( K+1, K ) = H( K+1, K ) - REFSUM + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + V( 1, M ) = VT( 1 ) + V( 2, M ) = VT( 2 ) + V( 3, M ) = VT( 3 ) + END IF + END IF + END IF + 20 CONTINUE +* +* ==== Generate a 2-by-2 reflection, if needed. ==== +* + K = KRCOL + 3*( M22-1 ) + IF( BMP22 ) THEN + IF( K.EQ.KTOP-1 ) THEN + CALL DLAQR1( 2, H( K+1, K+1 ), LDH, SR( 2*M22-1 ), + $ SI( 2*M22-1 ), SR( 2*M22 ), SI( 2*M22 ), + $ V( 1, M22 ) ) + BETA = V( 1, M22 ) + CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) + ELSE + BETA = H( K+1, K ) + V( 2, M22 ) = H( K+2, K ) + CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + END IF + END IF +* +* ==== Multiply H by reflections from the left ==== +* + IF( ACCUM ) THEN + JBOT = MIN( NDCOL, KBOT ) + ELSE IF( WANTT ) THEN + JBOT = N + ELSE + JBOT = KBOT + END IF + DO 40 J = MAX( KTOP, KRCOL ), JBOT + MEND = MIN( MBOT, ( J-KRCOL+2 ) / 3 ) + DO 30 M = MTOP, MEND + K = KRCOL + 3*( M-1 ) + REFSUM = V( 1, M )*( H( K+1, J )+V( 2, M )* + $ H( K+2, J )+V( 3, M )*H( K+3, J ) ) + H( K+1, J ) = H( K+1, J ) - REFSUM + H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M ) + H( K+3, J ) = H( K+3, J ) - REFSUM*V( 3, M ) + 30 CONTINUE + 40 CONTINUE + IF( BMP22 ) THEN + K = KRCOL + 3*( M22-1 ) + DO 50 J = MAX( K+1, KTOP ), JBOT + REFSUM = V( 1, M22 )*( H( K+1, J )+V( 2, M22 )* + $ H( K+2, J ) ) + H( K+1, J ) = H( K+1, J ) - REFSUM + H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M22 ) + 50 CONTINUE + END IF +* +* ==== Multiply H by reflections from the right. +* . Delay filling in the last row until the +* . vigilant deflation check is complete. ==== +* + IF( ACCUM ) THEN + JTOP = MAX( KTOP, INCOL ) + ELSE IF( WANTT ) THEN + JTOP = 1 + ELSE + JTOP = KTOP + END IF + DO 90 M = MTOP, MBOT + IF( V( 1, M ).NE.ZERO ) THEN + K = KRCOL + 3*( M-1 ) + DO 60 J = JTOP, MIN( KBOT, K+3 ) + REFSUM = V( 1, M )*( H( J, K+1 )+V( 2, M )* + $ H( J, K+2 )+V( 3, M )*H( J, K+3 ) ) + H( J, K+1 ) = H( J, K+1 ) - REFSUM + H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M ) + H( J, K+3 ) = H( J, K+3 ) - REFSUM*V( 3, M ) + 60 CONTINUE +* + IF( ACCUM ) THEN +* +* ==== Accumulate U. (If necessary, update Z later +* . with with an efficient matrix-matrix +* . multiply.) ==== +* + KMS = K - INCOL + DO 70 J = MAX( 1, KTOP-INCOL ), KDU + REFSUM = V( 1, M )*( U( J, KMS+1 )+V( 2, M )* + $ U( J, KMS+2 )+V( 3, M )*U( J, KMS+3 ) ) + U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM + U( J, KMS+2 ) = U( J, KMS+2 ) - REFSUM*V( 2, M ) + U( J, KMS+3 ) = U( J, KMS+3 ) - REFSUM*V( 3, M ) + 70 CONTINUE + ELSE IF( WANTZ ) THEN +* +* ==== U is not accumulated, so update Z +* . now by multiplying by reflections +* . from the right. ==== +* + DO 80 J = ILOZ, IHIZ + REFSUM = V( 1, M )*( Z( J, K+1 )+V( 2, M )* + $ Z( J, K+2 )+V( 3, M )*Z( J, K+3 ) ) + Z( J, K+1 ) = Z( J, K+1 ) - REFSUM + Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M ) + Z( J, K+3 ) = Z( J, K+3 ) - REFSUM*V( 3, M ) + 80 CONTINUE + END IF + END IF + 90 CONTINUE +* +* ==== Special case: 2-by-2 reflection (if needed) ==== +* + K = KRCOL + 3*( M22-1 ) + IF( BMP22 ) THEN + IF ( V( 1, M22 ).NE.ZERO ) THEN + DO 100 J = JTOP, MIN( KBOT, K+3 ) + REFSUM = V( 1, M22 )*( H( J, K+1 )+V( 2, M22 )* + $ H( J, K+2 ) ) + H( J, K+1 ) = H( J, K+1 ) - REFSUM + H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M22 ) + 100 CONTINUE +* + IF( ACCUM ) THEN + KMS = K - INCOL + DO 110 J = MAX( 1, KTOP-INCOL ), KDU + REFSUM = V( 1, M22 )*( U( J, KMS+1 )+ + $ V( 2, M22 )*U( J, KMS+2 ) ) + U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM + U( J, KMS+2 ) = U( J, KMS+2 ) - + $ REFSUM*V( 2, M22 ) + 110 CONTINUE + ELSE IF( WANTZ ) THEN + DO 120 J = ILOZ, IHIZ + REFSUM = V( 1, M22 )*( Z( J, K+1 )+V( 2, M22 )* + $ Z( J, K+2 ) ) + Z( J, K+1 ) = Z( J, K+1 ) - REFSUM + Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M22 ) + 120 CONTINUE + END IF + END IF + END IF +* +* ==== Vigilant deflation check ==== +* + MSTART = MTOP + IF( KRCOL+3*( MSTART-1 ).LT.KTOP ) + $ MSTART = MSTART + 1 + MEND = MBOT + IF( BMP22 ) + $ MEND = MEND + 1 + IF( KRCOL.EQ.KBOT-2 ) + $ MEND = MEND + 1 + DO 130 M = MSTART, MEND + K = MIN( KBOT-1, KRCOL+3*( M-1 ) ) +* +* ==== The following convergence test requires that +* . the tradition small-compared-to-nearby-diagonals +* . criterion and the Ahues & Tisseur (LAWN 122, 1997) +* . criteria both be satisfied. The latter improves +* . accuracy in some examples. Falling back on an +* . alternate convergence criterion when TST1 or TST2 +* . is zero (as done here) is traditional but probably +* . unnecessary. ==== +* + IF( H( K+1, K ).NE.ZERO ) THEN + TST1 = ABS( H( K, K ) ) + ABS( H( K+1, K+1 ) ) + IF( TST1.EQ.ZERO ) THEN + IF( K.GE.KTOP+1 ) + $ TST1 = TST1 + ABS( H( K, K-1 ) ) + IF( K.GE.KTOP+2 ) + $ TST1 = TST1 + ABS( H( K, K-2 ) ) + IF( K.GE.KTOP+3 ) + $ TST1 = TST1 + ABS( H( K, K-3 ) ) + IF( K.LE.KBOT-2 ) + $ TST1 = TST1 + ABS( H( K+2, K+1 ) ) + IF( K.LE.KBOT-3 ) + $ TST1 = TST1 + ABS( H( K+3, K+1 ) ) + IF( K.LE.KBOT-4 ) + $ TST1 = TST1 + ABS( H( K+4, K+1 ) ) + END IF + IF( ABS( H( K+1, K ) ).LE.MAX( SMLNUM, ULP*TST1 ) ) + $ THEN + H12 = MAX( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) + H21 = MIN( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) + H11 = MAX( ABS( H( K+1, K+1 ) ), + $ ABS( H( K, K )-H( K+1, K+1 ) ) ) + H22 = MIN( ABS( H( K+1, K+1 ) ), + $ ABS( H( K, K )-H( K+1, K+1 ) ) ) + SCL = H11 + H12 + TST2 = H22*( H11 / SCL ) +* + IF( TST2.EQ.ZERO .OR. H21*( H12 / SCL ).LE. + $ MAX( SMLNUM, ULP*TST2 ) )H( K+1, K ) = ZERO + END IF + END IF + 130 CONTINUE +* +* ==== Fill in the last row of each bulge. ==== +* + MEND = MIN( NBMPS, ( KBOT-KRCOL-1 ) / 3 ) + DO 140 M = MTOP, MEND + K = KRCOL + 3*( M-1 ) + REFSUM = V( 1, M )*V( 3, M )*H( K+4, K+3 ) + H( K+4, K+1 ) = -REFSUM + H( K+4, K+2 ) = -REFSUM*V( 2, M ) + H( K+4, K+3 ) = H( K+4, K+3 ) - REFSUM*V( 3, M ) + 140 CONTINUE +* +* ==== End of near-the-diagonal bulge chase. ==== +* + 150 CONTINUE +* +* ==== Use U (if accumulated) to update far-from-diagonal +* . entries in H. If required, use U to update Z as +* . well. ==== +* + IF( ACCUM ) THEN + IF( WANTT ) THEN + JTOP = 1 + JBOT = N + ELSE + JTOP = KTOP + JBOT = KBOT + END IF + IF( ( .NOT.BLK22 ) .OR. ( INCOL.LT.KTOP ) .OR. + $ ( NDCOL.GT.KBOT ) .OR. ( NS.LE.2 ) ) THEN +* +* ==== Updates not exploiting the 2-by-2 block +* . structure of U. K1 and NU keep track of +* . the location and size of U in the special +* . cases of introducing bulges and chasing +* . bulges off the bottom. In these special +* . cases and in case the number of shifts +* . is NS = 2, there is no 2-by-2 block +* . structure to exploit. ==== +* + K1 = MAX( 1, KTOP-INCOL ) + NU = ( KDU-MAX( 0, NDCOL-KBOT ) ) - K1 + 1 +* +* ==== Horizontal Multiply ==== +* + DO 160 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH + JLEN = MIN( NH, JBOT-JCOL+1 ) + CALL DGEMM( 'C', 'N', NU, JLEN, NU, ONE, U( K1, K1 ), + $ LDU, H( INCOL+K1, JCOL ), LDH, ZERO, WH, + $ LDWH ) + CALL DLACPY( 'ALL', NU, JLEN, WH, LDWH, + $ H( INCOL+K1, JCOL ), LDH ) + 160 CONTINUE +* +* ==== Vertical multiply ==== +* + DO 170 JROW = JTOP, MAX( KTOP, INCOL ) - 1, NV + JLEN = MIN( NV, MAX( KTOP, INCOL )-JROW ) + CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, + $ H( JROW, INCOL+K1 ), LDH, U( K1, K1 ), + $ LDU, ZERO, WV, LDWV ) + CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, + $ H( JROW, INCOL+K1 ), LDH ) + 170 CONTINUE +* +* ==== Z multiply (also vertical) ==== +* + IF( WANTZ ) THEN + DO 180 JROW = ILOZ, IHIZ, NV + JLEN = MIN( NV, IHIZ-JROW+1 ) + CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, + $ Z( JROW, INCOL+K1 ), LDZ, U( K1, K1 ), + $ LDU, ZERO, WV, LDWV ) + CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, + $ Z( JROW, INCOL+K1 ), LDZ ) + 180 CONTINUE + END IF + ELSE +* +* ==== Updates exploiting U's 2-by-2 block structure. +* . (I2, I4, J2, J4 are the last rows and columns +* . of the blocks.) ==== +* + I2 = ( KDU+1 ) / 2 + I4 = KDU + J2 = I4 - I2 + J4 = KDU +* +* ==== KZS and KNZ deal with the band of zeros +* . along the diagonal of one of the triangular +* . blocks. ==== +* + KZS = ( J4-J2 ) - ( NS+1 ) + KNZ = NS + 1 +* +* ==== Horizontal multiply ==== +* + DO 190 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH + JLEN = MIN( NH, JBOT-JCOL+1 ) +* +* ==== Copy bottom of H to top+KZS of scratch ==== +* (The first KZS rows get multiplied by zero.) ==== +* + CALL DLACPY( 'ALL', KNZ, JLEN, H( INCOL+1+J2, JCOL ), + $ LDH, WH( KZS+1, 1 ), LDWH ) +* +* ==== Multiply by U21**T ==== +* + CALL DLASET( 'ALL', KZS, JLEN, ZERO, ZERO, WH, LDWH ) + CALL DTRMM( 'L', 'U', 'C', 'N', KNZ, JLEN, ONE, + $ U( J2+1, 1+KZS ), LDU, WH( KZS+1, 1 ), + $ LDWH ) +* +* ==== Multiply top of H by U11**T ==== +* + CALL DGEMM( 'C', 'N', I2, JLEN, J2, ONE, U, LDU, + $ H( INCOL+1, JCOL ), LDH, ONE, WH, LDWH ) +* +* ==== Copy top of H to bottom of WH ==== +* + CALL DLACPY( 'ALL', J2, JLEN, H( INCOL+1, JCOL ), LDH, + $ WH( I2+1, 1 ), LDWH ) +* +* ==== Multiply by U21**T ==== +* + CALL DTRMM( 'L', 'L', 'C', 'N', J2, JLEN, ONE, + $ U( 1, I2+1 ), LDU, WH( I2+1, 1 ), LDWH ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'C', 'N', I4-I2, JLEN, J4-J2, ONE, + $ U( J2+1, I2+1 ), LDU, + $ H( INCOL+1+J2, JCOL ), LDH, ONE, + $ WH( I2+1, 1 ), LDWH ) +* +* ==== Copy it back ==== +* + CALL DLACPY( 'ALL', KDU, JLEN, WH, LDWH, + $ H( INCOL+1, JCOL ), LDH ) + 190 CONTINUE +* +* ==== Vertical multiply ==== +* + DO 200 JROW = JTOP, MAX( INCOL, KTOP ) - 1, NV + JLEN = MIN( NV, MAX( INCOL, KTOP )-JROW ) +* +* ==== Copy right of H to scratch (the first KZS +* . columns get multiplied by zero) ==== +* + CALL DLACPY( 'ALL', JLEN, KNZ, H( JROW, INCOL+1+J2 ), + $ LDH, WV( 1, 1+KZS ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, LDWV ) + CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, + $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), + $ LDWV ) +* +* ==== Multiply by U11 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, + $ H( JROW, INCOL+1 ), LDH, U, LDU, ONE, WV, + $ LDWV ) +* +* ==== Copy left of H to right of scratch ==== +* + CALL DLACPY( 'ALL', JLEN, J2, H( JROW, INCOL+1 ), LDH, + $ WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, + $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, + $ H( JROW, INCOL+1+J2 ), LDH, + $ U( J2+1, I2+1 ), LDU, ONE, WV( 1, 1+I2 ), + $ LDWV ) +* +* ==== Copy it back ==== +* + CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, + $ H( JROW, INCOL+1 ), LDH ) + 200 CONTINUE +* +* ==== Multiply Z (also vertical) ==== +* + IF( WANTZ ) THEN + DO 210 JROW = ILOZ, IHIZ, NV + JLEN = MIN( NV, IHIZ-JROW+1 ) +* +* ==== Copy right of Z to left of scratch (first +* . KZS columns get multiplied by zero) ==== +* + CALL DLACPY( 'ALL', JLEN, KNZ, + $ Z( JROW, INCOL+1+J2 ), LDZ, + $ WV( 1, 1+KZS ), LDWV ) +* +* ==== Multiply by U12 ==== +* + CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, + $ LDWV ) + CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, + $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), + $ LDWV ) +* +* ==== Multiply by U11 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, + $ Z( JROW, INCOL+1 ), LDZ, U, LDU, ONE, + $ WV, LDWV ) +* +* ==== Copy left of Z to right of scratch ==== +* + CALL DLACPY( 'ALL', JLEN, J2, Z( JROW, INCOL+1 ), + $ LDZ, WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, + $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), + $ LDWV ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, + $ Z( JROW, INCOL+1+J2 ), LDZ, + $ U( J2+1, I2+1 ), LDU, ONE, + $ WV( 1, 1+I2 ), LDWV ) +* +* ==== Copy the result back to Z ==== +* + CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, + $ Z( JROW, INCOL+1 ), LDZ ) + 210 CONTINUE + END IF + END IF + END IF + 220 CONTINUE +* +* ==== End of DLAQR5 ==== +* + END diff --git a/lapack/internal/testdata/netlib/dlarfg.f b/lapack/internal/testdata/netlib/dlarfg.f new file mode 100644 index 00000000..ce91d33c --- /dev/null +++ b/lapack/internal/testdata/netlib/dlarfg.f @@ -0,0 +1,196 @@ +*> \brief \b DLARFG generates an elementary reflector (Householder matrix). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARFG + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) +* +* .. Scalar Arguments .. +* INTEGER INCX, N +* DOUBLE PRECISION ALPHA, TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION X( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARFG generates a real elementary reflector H of order n, such +*> that +*> +*> H * ( alpha ) = ( beta ), H**T * H = I. +*> ( x ) ( 0 ) +*> +*> where alpha and beta are scalars, and x is an (n-1)-element real +*> vector. H is represented in the form +*> +*> H = I - tau * ( 1 ) * ( 1 v**T ) , +*> ( v ) +*> +*> where tau is a real scalar and v is a real (n-1)-element +*> vector. +*> +*> If the elements of x are all zero, then tau = 0 and H is taken to be +*> the unit matrix. +*> +*> Otherwise 1 <= tau <= 2. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the elementary reflector. +*> \endverbatim +*> +*> \param[in,out] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION +*> On entry, the value alpha. +*> On exit, it is overwritten with the value beta. +*> \endverbatim +*> +*> \param[in,out] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension +*> (1+(N-2)*abs(INCX)) +*> On entry, the vector x. +*> On exit, it is overwritten with the vector v. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> The increment between elements of X. INCX > 0. +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> The value tau. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION ALPHA, TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER J, KNT + DOUBLE PRECISION BETA, RSAFMN, SAFMIN, XNORM +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLAPY2, DNRM2 + EXTERNAL DLAMCH, DLAPY2, DNRM2 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SIGN +* .. +* .. External Subroutines .. + EXTERNAL DSCAL +* .. +* .. Executable Statements .. +* + IF( N.LE.1 ) THEN + TAU = ZERO + RETURN + END IF +* + XNORM = DNRM2( N-1, X, INCX ) +* + IF( XNORM.EQ.ZERO ) THEN +* +* H = I +* + TAU = ZERO + ELSE +* +* general case +* + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' ) + KNT = 0 + IF( ABS( BETA ).LT.SAFMIN ) THEN +* +* XNORM, BETA may be inaccurate; scale X and recompute them +* + RSAFMN = ONE / SAFMIN + 10 CONTINUE + KNT = KNT + 1 + CALL DSCAL( N-1, RSAFMN, X, INCX ) + BETA = BETA*RSAFMN + ALPHA = ALPHA*RSAFMN + IF( ABS( BETA ).LT.SAFMIN ) + $ GO TO 10 +* +* New BETA is at most 1, at least SAFMIN +* + XNORM = DNRM2( N-1, X, INCX ) + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + END IF + TAU = ( BETA-ALPHA ) / BETA + CALL DSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX ) +* +* If ALPHA is subnormal, it may lose relative accuracy +* + DO 20 J = 1, KNT + BETA = BETA*SAFMIN + 20 CONTINUE + ALPHA = BETA + END IF +* + RETURN +* +* End of DLARFG +* + END diff --git a/lapack/internal/testdata/netlib/dlaset.f b/lapack/internal/testdata/netlib/dlaset.f new file mode 100644 index 00000000..d3bb9456 --- /dev/null +++ b/lapack/internal/testdata/netlib/dlaset.f @@ -0,0 +1,184 @@ +*> \brief \b DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASET + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER LDA, M, N +* DOUBLE PRECISION ALPHA, BETA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASET initializes an m-by-n matrix A to BETA on the diagonal and +*> ALPHA on the offdiagonals. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> Specifies the part of the matrix A to be set. +*> = 'U': Upper triangular part is set; the strictly lower +*> triangular part of A is not changed. +*> = 'L': Lower triangular part is set; the strictly upper +*> triangular part of A is not changed. +*> Otherwise: All of the matrix A is set. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION +*> The constant to which the offdiagonal elements are to be set. +*> \endverbatim +*> +*> \param[in] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION +*> The constant to which the diagonal elements are to be set. +*> \endverbatim +*> +*> \param[out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On exit, the leading m-by-n submatrix of A is set as follows: +*> +*> if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n, +*> if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n, +*> otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j, +*> +*> and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n). +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, M, N + DOUBLE PRECISION ALPHA, BETA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( LSAME( UPLO, 'U' ) ) THEN +* +* Set the strictly upper triangular or trapezoidal part of the +* array to ALPHA. +* + DO 20 J = 2, N + DO 10 I = 1, MIN( J-1, M ) + A( I, J ) = ALPHA + 10 CONTINUE + 20 CONTINUE +* + ELSE IF( LSAME( UPLO, 'L' ) ) THEN +* +* Set the strictly lower triangular or trapezoidal part of the +* array to ALPHA. +* + DO 40 J = 1, MIN( M, N ) + DO 30 I = J + 1, M + A( I, J ) = ALPHA + 30 CONTINUE + 40 CONTINUE +* + ELSE +* +* Set the leading m-by-n submatrix to ALPHA. +* + DO 60 J = 1, N + DO 50 I = 1, M + A( I, J ) = ALPHA + 50 CONTINUE + 60 CONTINUE + END IF +* +* Set the first min(M,N) diagonal elements to BETA. +* + DO 70 I = 1, MIN( M, N ) + A( I, I ) = BETA + 70 CONTINUE +* + RETURN +* +* End of DLASET +* + END diff --git a/lapack/internal/testdata/netlib/dnrm2.f b/lapack/internal/testdata/netlib/dnrm2.f new file mode 100644 index 00000000..5ea257a2 --- /dev/null +++ b/lapack/internal/testdata/netlib/dnrm2.f @@ -0,0 +1,112 @@ +*> \brief \b DNRM2 +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) +* +* .. Scalar Arguments .. +* INTEGER INCX,N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION X(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DNRM2 returns the euclidean norm of a vector via the function +*> name, so that +*> +*> DNRM2 := sqrt( x'*x ) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> -- This version written on 25-October-1982. +*> Modified on 14-October-1993 to inline the call to DLASSQ. +*> Sven Hammarling, Nag Ltd. +*> \endverbatim +*> +* ===================================================================== + DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION X(*) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ + INTEGER IX +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS,SQRT +* .. + IF (N.LT.1 .OR. INCX.LT.1) THEN + NORM = ZERO + ELSE IF (N.EQ.1) THEN + NORM = ABS(X(1)) + ELSE + SCALE = ZERO + SSQ = ONE +* The following loop is equivalent to this call to the LAPACK +* auxiliary routine: +* CALL DLASSQ( N, X, INCX, SCALE, SSQ ) +* + DO 10 IX = 1,1 + (N-1)*INCX,INCX + IF (X(IX).NE.ZERO) THEN + ABSXI = ABS(X(IX)) + IF (SCALE.LT.ABSXI) THEN + SSQ = ONE + SSQ* (SCALE/ABSXI)**2 + SCALE = ABSXI + ELSE + SSQ = SSQ + (ABSXI/SCALE)**2 + END IF + END IF + 10 CONTINUE + NORM = SCALE*SQRT(SSQ) + END IF +* + DNRM2 = NORM + RETURN +* +* End of DNRM2. +* + END diff --git a/lapack/internal/testdata/netlib/dscal.f b/lapack/internal/testdata/netlib/dscal.f new file mode 100644 index 00000000..3337de8e --- /dev/null +++ b/lapack/internal/testdata/netlib/dscal.f @@ -0,0 +1,110 @@ +*> \brief \b DSCAL +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DSCAL(N,DA,DX,INCX) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DA +* INTEGER INCX,N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION DX(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DSCAL scales a vector by a constant. +*> uses unrolled loops for increment equal to one. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> jack dongarra, linpack, 3/11/78. +*> modified 3/93 to return if incx .le. 0. +*> modified 12/3/93, array(1) declarations changed to array(*) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DSCAL(N,DA,DX,INCX) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,M,MP1,NINCX +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0 .OR. INCX.LE.0) RETURN + IF (INCX.EQ.1) THEN +* +* code for increment equal to 1 +* +* +* clean-up loop +* + M = MOD(N,5) + IF (M.NE.0) THEN + DO I = 1,M + DX(I) = DA*DX(I) + END DO + IF (N.LT.5) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I+1) = DA*DX(I+1) + DX(I+2) = DA*DX(I+2) + DX(I+3) = DA*DX(I+3) + DX(I+4) = DA*DX(I+4) + END DO + ELSE +* +* code for increment not equal to 1 +* + NINCX = N*INCX + DO I = 1,NINCX,INCX + DX(I) = DA*DX(I) + END DO + END IF + RETURN + END diff --git a/lapack/internal/testdata/netlib/dtrmm.f b/lapack/internal/testdata/netlib/dtrmm.f new file mode 100644 index 00000000..cbd5ce70 --- /dev/null +++ b/lapack/internal/testdata/netlib/dtrmm.f @@ -0,0 +1,415 @@ +*> \brief \b DTRMM +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION ALPHA +* INTEGER LDA,LDB,M,N +* CHARACTER DIAG,SIDE,TRANSA,UPLO +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A(LDA,*),B(LDB,*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DTRMM performs one of the matrix-matrix operations +*> +*> B := alpha*op( A )*B, or B := alpha*B*op( A ), +*> +*> where alpha is a scalar, B is an m by n matrix, A is a unit, or +*> non-unit, upper or lower triangular matrix and op( A ) is one of +*> +*> op( A ) = A or op( A ) = A**T. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> On entry, SIDE specifies whether op( A ) multiplies B from +*> the left or right as follows: +*> +*> SIDE = 'L' or 'l' B := alpha*op( A )*B. +*> +*> SIDE = 'R' or 'r' B := alpha*B*op( A ). +*> \endverbatim +*> +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> On entry, UPLO specifies whether the matrix A is an upper or +*> lower triangular matrix as follows: +*> +*> UPLO = 'U' or 'u' A is an upper triangular matrix. +*> +*> UPLO = 'L' or 'l' A is a lower triangular matrix. +*> \endverbatim +*> +*> \param[in] TRANSA +*> \verbatim +*> TRANSA is CHARACTER*1 +*> On entry, TRANSA specifies the form of op( A ) to be used in +*> the matrix multiplication as follows: +*> +*> TRANSA = 'N' or 'n' op( A ) = A. +*> +*> TRANSA = 'T' or 't' op( A ) = A**T. +*> +*> TRANSA = 'C' or 'c' op( A ) = A**T. +*> \endverbatim +*> +*> \param[in] DIAG +*> \verbatim +*> DIAG is CHARACTER*1 +*> On entry, DIAG specifies whether or not A is unit triangular +*> as follows: +*> +*> DIAG = 'U' or 'u' A is assumed to be unit triangular. +*> +*> DIAG = 'N' or 'n' A is not assumed to be unit +*> triangular. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> On entry, M specifies the number of rows of B. M must be at +*> least zero. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> On entry, N specifies the number of columns of B. N must be +*> at least zero. +*> \endverbatim +*> +*> \param[in] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION. +*> On entry, ALPHA specifies the scalar alpha. When alpha is +*> zero then A is not referenced and B need not be set before +*> entry. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m +*> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. +*> Before entry with UPLO = 'U' or 'u', the leading k by k +*> upper triangular part of the array A must contain the upper +*> triangular matrix and the strictly lower triangular part of +*> A is not referenced. +*> Before entry with UPLO = 'L' or 'l', the leading k by k +*> lower triangular part of the array A must contain the lower +*> triangular matrix and the strictly upper triangular part of +*> A is not referenced. +*> Note that when DIAG = 'U' or 'u', the diagonal elements of +*> A are not referenced either, but are assumed to be unity. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> On entry, LDA specifies the first dimension of A as declared +*> in the calling (sub) program. When SIDE = 'L' or 'l' then +*> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' +*> then LDA must be at least max( 1, n ). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION array of DIMENSION ( LDB, n ). +*> Before entry, the leading m by n part of the array B must +*> contain the matrix B, and on exit is overwritten by the +*> transformed matrix. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> On entry, LDB specifies the first dimension of B as declared +*> in the calling (sub) program. LDB must be at least +*> max( 1, m ). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level3 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Level 3 Blas routine. +*> +*> -- Written on 8-February-1989. +*> Jack Dongarra, Argonne National Laboratory. +*> Iain Duff, AERE Harwell. +*> Jeremy Du Croz, Numerical Algorithms Group Ltd. +*> Sven Hammarling, Numerical Algorithms Group Ltd. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) +* +* -- Reference BLAS level3 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER LDA,LDB,M,N + CHARACTER DIAG,SIDE,TRANSA,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*) +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,K,NROWA + LOGICAL LSIDE,NOUNIT,UPPER +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Test the input parameters. +* + LSIDE = LSAME(SIDE,'L') + IF (LSIDE) THEN + NROWA = M + ELSE + NROWA = N + END IF + NOUNIT = LSAME(DIAG,'N') + UPPER = LSAME(UPLO,'U') +* + INFO = 0 + IF ((.NOT.LSIDE) .AND. (.NOT.LSAME(SIDE,'R'))) THEN + INFO = 1 + ELSE IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN + INFO = 2 + ELSE IF ((.NOT.LSAME(TRANSA,'N')) .AND. + + (.NOT.LSAME(TRANSA,'T')) .AND. + + (.NOT.LSAME(TRANSA,'C'))) THEN + INFO = 3 + ELSE IF ((.NOT.LSAME(DIAG,'U')) .AND. (.NOT.LSAME(DIAG,'N'))) THEN + INFO = 4 + ELSE IF (M.LT.0) THEN + INFO = 5 + ELSE IF (N.LT.0) THEN + INFO = 6 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 9 + ELSE IF (LDB.LT.MAX(1,M)) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (M.EQ.0 .OR. N.EQ.0) RETURN +* +* And when alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + B(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + RETURN + END IF +* +* Start the operations. +* + IF (LSIDE) THEN + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*A*B. +* + IF (UPPER) THEN + DO 50 J = 1,N + DO 40 K = 1,M + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + DO 30 I = 1,K - 1 + B(I,J) = B(I,J) + TEMP*A(I,K) + 30 CONTINUE + IF (NOUNIT) TEMP = TEMP*A(K,K) + B(K,J) = TEMP + END IF + 40 CONTINUE + 50 CONTINUE + ELSE + DO 80 J = 1,N + DO 70 K = M,1,-1 + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + B(K,J) = TEMP + IF (NOUNIT) B(K,J) = B(K,J)*A(K,K) + DO 60 I = K + 1,M + B(I,J) = B(I,J) + TEMP*A(I,K) + 60 CONTINUE + END IF + 70 CONTINUE + 80 CONTINUE + END IF + ELSE +* +* Form B := alpha*A**T*B. +* + IF (UPPER) THEN + DO 110 J = 1,N + DO 100 I = M,1,-1 + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 90 K = 1,I - 1 + TEMP = TEMP + A(K,I)*B(K,J) + 90 CONTINUE + B(I,J) = ALPHA*TEMP + 100 CONTINUE + 110 CONTINUE + ELSE + DO 140 J = 1,N + DO 130 I = 1,M + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 120 K = I + 1,M + TEMP = TEMP + A(K,I)*B(K,J) + 120 CONTINUE + B(I,J) = ALPHA*TEMP + 130 CONTINUE + 140 CONTINUE + END IF + END IF + ELSE + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*B*A. +* + IF (UPPER) THEN + DO 180 J = N,1,-1 + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = 1,M + B(I,J) = TEMP*B(I,J) + 150 CONTINUE + DO 170 K = 1,J - 1 + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 160 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 160 CONTINUE + END IF + 170 CONTINUE + 180 CONTINUE + ELSE + DO 220 J = 1,N + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 190 I = 1,M + B(I,J) = TEMP*B(I,J) + 190 CONTINUE + DO 210 K = J + 1,N + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 200 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 200 CONTINUE + END IF + 210 CONTINUE + 220 CONTINUE + END IF + ELSE +* +* Form B := alpha*B*A**T. +* + IF (UPPER) THEN + DO 260 K = 1,N + DO 240 J = 1,K - 1 + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 230 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 230 CONTINUE + END IF + 240 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 250 I = 1,M + B(I,K) = TEMP*B(I,K) + 250 CONTINUE + END IF + 260 CONTINUE + ELSE + DO 300 K = N,1,-1 + DO 280 J = K + 1,N + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 270 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 270 CONTINUE + END IF + 280 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 290 I = 1,M + B(I,K) = TEMP*B(I,K) + 290 CONTINUE + END IF + 300 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMM . +* + END diff --git a/lapack/internal/testdata/netlib/dtrmv.f b/lapack/internal/testdata/netlib/dtrmv.f new file mode 100644 index 00000000..71459fe7 --- /dev/null +++ b/lapack/internal/testdata/netlib/dtrmv.f @@ -0,0 +1,342 @@ +*> \brief \b DTRMV +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) +* +* .. Scalar Arguments .. +* INTEGER INCX,LDA,N +* CHARACTER DIAG,TRANS,UPLO +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A(LDA,*),X(*) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DTRMV performs one of the matrix-vector operations +*> +*> x := A*x, or x := A**T*x, +*> +*> where x is an n element vector and A is an n by n unit, or non-unit, +*> upper or lower triangular matrix. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> On entry, UPLO specifies whether the matrix is an upper or +*> lower triangular matrix as follows: +*> +*> UPLO = 'U' or 'u' A is an upper triangular matrix. +*> +*> UPLO = 'L' or 'l' A is a lower triangular matrix. +*> \endverbatim +*> +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> On entry, TRANS specifies the operation to be performed as +*> follows: +*> +*> TRANS = 'N' or 'n' x := A*x. +*> +*> TRANS = 'T' or 't' x := A**T*x. +*> +*> TRANS = 'C' or 'c' x := A**T*x. +*> \endverbatim +*> +*> \param[in] DIAG +*> \verbatim +*> DIAG is CHARACTER*1 +*> On entry, DIAG specifies whether or not A is unit +*> triangular as follows: +*> +*> DIAG = 'U' or 'u' A is assumed to be unit triangular. +*> +*> DIAG = 'N' or 'n' A is not assumed to be unit +*> triangular. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> On entry, N specifies the order of the matrix A. +*> N must be at least zero. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array of DIMENSION ( LDA, n ). +*> Before entry with UPLO = 'U' or 'u', the leading n by n +*> upper triangular part of the array A must contain the upper +*> triangular matrix and the strictly lower triangular part of +*> A is not referenced. +*> Before entry with UPLO = 'L' or 'l', the leading n by n +*> lower triangular part of the array A must contain the lower +*> triangular matrix and the strictly upper triangular part of +*> A is not referenced. +*> Note that when DIAG = 'U' or 'u', the diagonal elements of +*> A are not referenced either, but are assumed to be unity. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> On entry, LDA specifies the first dimension of A as declared +*> in the calling (sub) program. LDA must be at least +*> max( 1, n ). +*> \endverbatim +*> +*> \param[in,out] X +*> \verbatim +*> X is DOUBLE PRECISION array of dimension at least +*> ( 1 + ( n - 1 )*abs( INCX ) ). +*> Before entry, the incremented array X must contain the n +*> element vector x. On exit, X is overwritten with the +*> tranformed vector x. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> On entry, INCX specifies the increment for the elements of +*> X. INCX must not be zero. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level2 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Level 2 Blas routine. +*> The vector and matrix arguments are not referenced when N = 0, or M = 0 +*> +*> -- Written on 22-October-1986. +*> Jack Dongarra, Argonne National Lab. +*> Jeremy Du Croz, Nag Central Office. +*> Sven Hammarling, Nag Central Office. +*> Richard Hanson, Sandia National Labs. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) +* +* -- Reference BLAS level2 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INCX,LDA,N + CHARACTER DIAG,TRANS,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,J,JX,KX + LOGICAL NOUNIT +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 2 + ELSE IF (.NOT.LSAME(DIAG,'U') .AND. .NOT.LSAME(DIAG,'N')) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (N.EQ.0) RETURN +* + NOUNIT = LSAME(DIAG,'N') +* +* Set up the start point in X if the increment is not unity. This +* will be ( N - 1 )*INCX too small for descending loops. +* + IF (INCX.LE.0) THEN + KX = 1 - (N-1)*INCX + ELSE IF (INCX.NE.1) THEN + KX = 1 + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* + IF (LSAME(TRANS,'N')) THEN +* +* Form x := A*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 20 J = 1,N + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 10 I = 1,J - 1 + X(I) = X(I) + TEMP*A(I,J) + 10 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 20 CONTINUE + ELSE + JX = KX + DO 40 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 30 I = 1,J - 1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX + INCX + 30 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX + INCX + 40 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 60 J = N,1,-1 + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 50 I = N,J + 1,-1 + X(I) = X(I) + TEMP*A(I,J) + 50 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 60 CONTINUE + ELSE + KX = KX + (N-1)*INCX + JX = KX + DO 80 J = N,1,-1 + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 70 I = N,J + 1,-1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX - INCX + 70 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX - INCX + 80 CONTINUE + END IF + END IF + ELSE +* +* Form x := A**T*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 100 J = N,1,-1 + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 90 I = J - 1,1,-1 + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + X(J) = TEMP + 100 CONTINUE + ELSE + JX = KX + (N-1)*INCX + DO 120 J = N,1,-1 + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 110 I = J - 1,1,-1 + IX = IX - INCX + TEMP = TEMP + A(I,J)*X(IX) + 110 CONTINUE + X(JX) = TEMP + JX = JX - INCX + 120 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 140 J = 1,N + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 130 I = J + 1,N + TEMP = TEMP + A(I,J)*X(I) + 130 CONTINUE + X(J) = TEMP + 140 CONTINUE + ELSE + JX = KX + DO 160 J = 1,N + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = J + 1,N + IX = IX + INCX + TEMP = TEMP + A(I,J)*X(IX) + 150 CONTINUE + X(JX) = TEMP + JX = JX + INCX + 160 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMV . +* + END diff --git a/lapack/internal/testdata/netlib/lsame.f b/lapack/internal/testdata/netlib/lsame.f new file mode 100644 index 00000000..315304c3 --- /dev/null +++ b/lapack/internal/testdata/netlib/lsame.f @@ -0,0 +1,125 @@ +*> \brief \b LSAME +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* LOGICAL FUNCTION LSAME( CA, CB ) +* +* .. Scalar Arguments .. +* CHARACTER CA, CB +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> LSAME returns .TRUE. if CA is the same letter as CB regardless of +*> case. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CA +*> \verbatim +*> \endverbatim +*> +*> \param[in] CB +*> \verbatim +*> CA and CB specify the single characters to be compared. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END diff --git a/lapack/internal/testdata/netlib/netlib.go b/lapack/internal/testdata/netlib/netlib.go new file mode 100644 index 00000000..182e074a --- /dev/null +++ b/lapack/internal/testdata/netlib/netlib.go @@ -0,0 +1,68 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package netlib + +// void dlahr2_(int* n, int* k, int* nb, double* a, int* lda, double* tau, double* t, int* ldt, double* y, int* ldy); +// +// void dlaqr5_(int* wantt, int* wantz, int* kacc22, int* n, int* ktop, int* kbot, int* nshfts, +// double* sr, double* si, double* h, int* ldh, int* iloz, int* ihiz, +// double* z, int* ldz, double* v, int* ldv, double* u, int* ldu, +// int* nv, double* wv, int* ldwv, int* nh, double* wh, int* ldwh); +import "C" + +func Dlahr2(n, k, nb int, a []float64, lda int, tau, t []float64, ldt int, y []float64, ldy int) { + func() { + n := C.int(n) + k := C.int(k) + nb := C.int(nb) + lda := C.int(lda) + ldt := C.int(ldt) + ldy := C.int(ldy) + C.dlahr2_((*C.int)(&n), (*C.int)(&k), (*C.int)(&nb), + (*C.double)(&a[0]), (*C.int)(&lda), + (*C.double)(&tau[0]), + (*C.double)(&t[0]), (*C.int)(&ldt), + (*C.double)(&y[0]), (*C.int)(&ldy)) + }() +} + +func Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot int, nshfts int, sr, si []float64, h []float64, + ldh int, iloz, ihiz int, z []float64, ldz int, v []float64, ldv int, + u []float64, ldu int, nh int, wh []float64, ldwh int, nv int, wv []float64, ldwv int) { + func() { + wt := C.int(0) + if wantt { + wt = 1 + } + wz := C.int(0) + if wantz { + wz = 1 + } + kacc22 := C.int(kacc22) + n := C.int(n) + ktop := C.int(ktop) + kbot := C.int(kbot) + nshfts := C.int(nshfts) + ldh := C.int(ldh) + iloz := C.int(iloz) + ihiz := C.int(ihiz) + ldz := C.int(ldz) + ldv := C.int(ldv) + ldu := C.int(ldu) + nh := C.int(nh) + ldwh := C.int(ldwh) + nv := C.int(nv) + ldwv := C.int(ldwv) + C.dlaqr5_((*C.int)(&wt), (*C.int)(&wz), (*C.int)(&kacc22), + (*C.int)(&n), (*C.int)(&ktop), (*C.int)(&kbot), + (*C.int)(&nshfts), (*C.double)(&sr[0]), (*C.double)(&si[0]), + (*C.double)(&h[0]), (*C.int)(&ldh), + (*C.int)(&iloz), (*C.int)(&ihiz), (*C.double)(&z[0]), (*C.int)(&ldz), + (*C.double)(&v[0]), (*C.int)(&ldv), + (*C.double)(&u[0]), (*C.int)(&ldu), + (*C.int)(&nh), (*C.double)(&wh[0]), (*C.int)(&ldwh), + (*C.int)(&nv), (*C.double)(&wv[0]), (*C.int)(&ldwv)) + }() +} diff --git a/lapack/internal/testdata/netlib/xerbla.f b/lapack/internal/testdata/netlib/xerbla.f new file mode 100644 index 00000000..eb1c037d --- /dev/null +++ b/lapack/internal/testdata/netlib/xerbla.f @@ -0,0 +1,89 @@ +*> \brief \b XERBLA +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* SUBROUTINE XERBLA( SRNAME, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER*(*) SRNAME +* INTEGER INFO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> XERBLA is an error handler for the LAPACK routines. +*> It is called by an LAPACK routine if an input parameter has an +*> invalid value. A message is printed and execution stops. +*> +*> Installers may consider modifying the STOP statement in order to +*> call system-specific exception-handling facilities. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SRNAME +*> \verbatim +*> SRNAME is CHARACTER*(*) +*> The name of the routine which called XERBLA. +*> \endverbatim +*> +*> \param[in] INFO +*> \verbatim +*> INFO is INTEGER +*> The position of the invalid parameter in the parameter list +*> of the calling routine. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup aux_blas +* +* ===================================================================== + SUBROUTINE XERBLA( SRNAME, INFO ) +* +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*(*) SRNAME + INTEGER INFO +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LEN_TRIM +* .. +* .. Executable Statements .. +* + WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO +* + STOP +* + 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', + $ 'an illegal value' ) +* +* End of XERBLA +* + END diff --git a/lapack/lapack.go b/lapack/lapack.go new file mode 100644 index 00000000..46b493df --- /dev/null +++ b/lapack/lapack.go @@ -0,0 +1,188 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package lapack + +import "github.com/gonum/blas" + +const None = 'N' + +type Job byte + +type Comp byte + +// Complex128 defines the public complex128 LAPACK API supported by gonum/lapack. +type Complex128 interface{} + +// Float64 defines the public float64 LAPACK API supported by gonum/lapack. +type Float64 interface { + Dgecon(norm MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 + Dgeev(jobvl LeftEVJob, jobvr RightEVJob, n int, a []float64, lda int, wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) (first int) + Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool + Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) + Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) + Dgesvd(jobU, jobVT SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool) + Dgetrf(m, n int, a []float64, lda int, ipiv []int) (ok bool) + Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) (ok bool) + Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int) + Dggsvd3(jobU, jobV, jobQ GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool) + Dlantr(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64 + Dlange(norm MatrixNorm, m, n int, a []float64, lda int, work []float64) float64 + Dlansy(norm MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 + Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int) + Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) + Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) + Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 + Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) + Dsyev(jobz EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool) + Dtrcon(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64 + Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool) + Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool) +} + +// Direct specifies the direction of the multiplication for the Householder matrix. +type Direct byte + +const ( + Forward Direct = 'F' // Reflectors are right-multiplied, H_0 * H_1 * ... * H_{k-1}. + Backward Direct = 'B' // Reflectors are left-multiplied, H_{k-1} * ... * H_1 * H_0. +) + +// Sort is the sorting order. +type Sort byte + +const ( + SortIncreasing Sort = 'I' + SortDecreasing Sort = 'D' +) + +// StoreV indicates the storage direction of elementary reflectors. +type StoreV byte + +const ( + ColumnWise StoreV = 'C' // Reflector stored in a column of the matrix. + RowWise StoreV = 'R' // Reflector stored in a row of the matrix. +) + +// MatrixNorm represents the kind of matrix norm to compute. +type MatrixNorm byte + +const ( + MaxAbs MatrixNorm = 'M' // max(abs(A(i,j))) ('M') + MaxColumnSum MatrixNorm = 'O' // Maximum column sum (one norm) ('1', 'O') + MaxRowSum MatrixNorm = 'I' // Maximum row sum (infinity norm) ('I', 'i') + NormFrob MatrixNorm = 'F' // Frobenius norm (sqrt of sum of squares) ('F', 'f', E, 'e') +) + +// MatrixType represents the kind of matrix represented in the data. +type MatrixType byte + +const ( + General MatrixType = 'G' // A dense matrix (like blas64.General). + UpperTri MatrixType = 'U' // An upper triangular matrix. + LowerTri MatrixType = 'L' // A lower triangular matrix. +) + +// Pivot specifies the pivot type for plane rotations +type Pivot byte + +const ( + Variable Pivot = 'V' + Top Pivot = 'T' + Bottom Pivot = 'B' +) + +type DecompUpdate byte + +const ( + ApplyP DecompUpdate = 'P' + ApplyQ DecompUpdate = 'Q' +) + +// SVDJob specifies the singular vector computation type for SVD. +type SVDJob byte + +const ( + SVDAll SVDJob = 'A' // Compute all singular vectors + SVDInPlace SVDJob = 'S' // Compute the first singular vectors and store them in provided storage. + SVDOverwrite SVDJob = 'O' // Compute the singular vectors and store them in input matrix + SVDNone SVDJob = 'N' // Do not compute singular vectors +) + +// GSVDJob specifies the singular vector computation type for Generalized SVD. +type GSVDJob byte + +const ( + GSVDU GSVDJob = 'U' // Compute orthogonal matrix U + GSVDV GSVDJob = 'V' // Compute orthogonal matrix V + GSVDQ GSVDJob = 'Q' // Compute orthogonal matrix Q + GSVDUnit GSVDJob = 'I' // Use unit-initialized matrix + GSVDNone GSVDJob = 'N' // Do not compute orthogonal matrix +) + +// EVComp specifies how eigenvectors are computed. +type EVComp byte + +const ( + // OriginalEV specifies to compute the eigenvectors of the original + // matrix. + OriginalEV EVComp = 'V' + // TridiagEV specifies to compute both the eigenvectors of the input + // tridiagonal matrix. + TridiagEV EVComp = 'I' + // HessEV specifies to compute both the eigenvectors of the input upper + // Hessenberg matrix. + HessEV EVComp = 'I' + + // UpdateSchur specifies that the matrix of Schur vectors will be + // updated by Dtrexc. + UpdateSchur EVComp = 'V' +) + +// Job types for computation of eigenvectors. +type ( + EVJob byte + LeftEVJob byte + RightEVJob byte +) + +// Job constants for computation of eigenvectors. +const ( + ComputeEV EVJob = 'V' // Compute eigenvectors in Dsyev. + ComputeLeftEV LeftEVJob = 'V' // Compute left eigenvectors. + ComputeRightEV RightEVJob = 'V' // Compute right eigenvectors. +) + +// Jobs for Dgebal. +const ( + Permute Job = 'P' + Scale Job = 'S' + PermuteScale Job = 'B' +) + +// Job constants for Dhseqr. +const ( + EigenvaluesOnly EVJob = 'E' + EigenvaluesAndSchur EVJob = 'S' +) + +// EVSide specifies what eigenvectors will be computed. +type EVSide byte + +// EVSide constants for Dtrevc3. +const ( + RightEV EVSide = 'R' // Compute right eigenvectors only. + LeftEV EVSide = 'L' // Compute left eigenvectors only. + RightLeftEV EVSide = 'B' // Compute both right and left eigenvectors. +) + +// HowMany specifies which eigenvectors will be computed. +type HowMany byte + +// HowMany constants for Dhseqr. +const ( + AllEV HowMany = 'A' // Compute all right and/or left eigenvectors. + AllEVMulQ HowMany = 'B' // Compute all right and/or left eigenvectors multiplied by an input matrix. + SelectedEV HowMany = 'S' // Compute selected right and/or left eigenvectors. +) diff --git a/lapack/lapack64/lapack64.go b/lapack/lapack64/lapack64.go new file mode 100644 index 00000000..619734fb --- /dev/null +++ b/lapack/lapack64/lapack64.go @@ -0,0 +1,560 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lapack64 provides a set of convenient wrapper functions for LAPACK +// calls, as specified in the netlib standard (www.netlib.org). +// +// The native Go routines are used by default, and the Use function can be used +// to set an alternative implementation. +// +// If the type of matrix (General, Symmetric, etc.) is known and fixed, it is +// used in the wrapper signature. In many cases, however, the type of the matrix +// changes during the call to the routine, for example the matrix is symmetric on +// entry and is triangular on exit. In these cases the correct types should be checked +// in the documentation. +// +// The full set of Lapack functions is very large, and it is not clear that a +// full implementation is desirable, let alone feasible. Please open up an issue +// if there is a specific function you need and/or are willing to implement. +package lapack64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" + "github.com/gonum/lapack/native" +) + +var lapack64 lapack.Float64 = native.Implementation{} + +// Use sets the LAPACK float64 implementation to be used by subsequent BLAS calls. +// The default implementation is native.Implementation. +func Use(l lapack.Float64) { + lapack64 = l +} + +// Potrf computes the Cholesky factorization of a. +// The factorization has the form +// A = U^T * U if a.Uplo == blas.Upper, or +// A = L * L^T if a.Uplo == blas.Lower, +// where U is an upper triangular matrix and L is lower triangular. +// The triangular matrix is returned in t, and the underlying data between +// a and t is shared. The returned bool indicates whether a is positive +// definite and the factorization could be finished. +func Potrf(a blas64.Symmetric) (t blas64.Triangular, ok bool) { + ok = lapack64.Dpotrf(a.Uplo, a.N, a.Data, a.Stride) + t.Uplo = a.Uplo + t.N = a.N + t.Data = a.Data + t.Stride = a.Stride + t.Diag = blas.NonUnit + return +} + +// Gecon estimates the reciprocal of the condition number of the n×n matrix A +// given the LU decomposition of the matrix. The condition number computed may +// be based on the 1-norm or the ∞-norm. +// +// a contains the result of the LU decomposition of A as computed by Getrf. +// +// anorm is the corresponding 1-norm or ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 4*n and Gecon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Gecon will panic otherwise. +func Gecon(norm lapack.MatrixNorm, a blas64.General, anorm float64, work []float64, iwork []int) float64 { + return lapack64.Dgecon(norm, a.Cols, a.Data, a.Stride, anorm, work, iwork) +} + +// Gels finds a minimum-norm solution based on the matrices A and B using the +// QR or LQ factorization. Gels returns false if the matrix +// A is singular, and true if this solution was successfully found. +// +// The minimization problem solved depends on the input parameters. +// +// 1. If m >= n and trans == blas.NoTrans, Gels finds X such that || A*X - B||_2 +// is minimized. +// 2. If m < n and trans == blas.NoTrans, Gels finds the minimum norm solution of +// A * X = B. +// 3. If m >= n and trans == blas.Trans, Gels finds the minimum norm solution of +// A^T * X = B. +// 4. If m < n and trans == blas.Trans, Gels finds X such that || A*X - B||_2 +// is minimized. +// Note that the least-squares solutions (cases 1 and 3) perform the minimization +// per column of B. This is not the same as finding the minimum-norm matrix. +// +// The matrix A is a general matrix of size m×n and is modified during this call. +// The input matrix B is of size max(m,n)×nrhs, and serves two purposes. On entry, +// the elements of b specify the input matrix B. B has size m×nrhs if +// trans == blas.NoTrans, and n×nrhs if trans == blas.Trans. On exit, the +// leading submatrix of b contains the solution vectors X. If trans == blas.NoTrans, +// this submatrix is of size n×nrhs, and of size m×nrhs otherwise. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(m,n) + max(m,n,nrhs), and this function will panic +// otherwise. A longer work will enable blocked algorithms to be called. +// In the special case that lwork == -1, work[0] will be set to the optimal working +// length. +func Gels(trans blas.Transpose, a blas64.General, b blas64.General, work []float64, lwork int) bool { + return lapack64.Dgels(trans, a.Rows, a.Cols, b.Cols, a.Data, a.Stride, b.Data, b.Stride, work, lwork) +} + +// Geqrf computes the QR factorization of the m×n matrix A using a blocked +// algorithm. A is modified to contain the information to construct Q and R. +// The upper triangle of a contains the matrix R. The lower triangular elements +// (not including the diagonal) contain the elementary reflectors. tau is modified +// to contain the reflector scales. tau must have length at least min(m,n), and +// this function will panic otherwise. +// +// The ith elementary reflector can be explicitly constructed by first extracting +// the +// v[j] = 0 j < i +// v[j] = 1 j == i +// v[j] = a[j*lda+i] j > i +// and computing H_i = I - tau[i] * v * v^T. +// +// The orthonormal matrix Q can be constucted from a product of these elementary +// reflectors, Q = H_0 * H_1 * ... * H_{k-1}, where k = min(m,n). +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m and this function will panic otherwise. +// Geqrf is a blocked QR factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Geqrf, +// the optimal work length will be stored into work[0]. +func Geqrf(a blas64.General, tau, work []float64, lwork int) { + lapack64.Dgeqrf(a.Rows, a.Cols, a.Data, a.Stride, tau, work, lwork) +} + +// Gelqf computes the LQ factorization of the m×n matrix A using a blocked +// algorithm. A is modified to contain the information to construct L and Q. The +// lower triangle of a contains the matrix L. The elements above the diagonal +// and the slice tau represent the matrix Q. tau is modified to contain the +// reflector scales. tau must have length at least min(m,n), and this function +// will panic otherwise. +// +// See Geqrf for a description of the elementary reflectors and orthonormal +// matrix Q. Q is constructed as a product of these elementary reflectors, +// Q = H_{k-1} * ... * H_1 * H_0. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m and this function will panic otherwise. +// Gelqf is a blocked LQ factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Gelqf, +// the optimal work length will be stored into work[0]. +func Gelqf(a blas64.General, tau, work []float64, lwork int) { + lapack64.Dgelqf(a.Rows, a.Cols, a.Data, a.Stride, tau, work, lwork) +} + +// Gesvd computes the singular value decomposition of the input matrix A. +// +// The singular value decomposition is +// A = U * Sigma * V^T +// where Sigma is an m×n diagonal matrix containing the singular values of A, +// U is an m×m orthogonal matrix and V is an n×n orthogonal matrix. The first +// min(m,n) columns of U and V are the left and right singular vectors of A +// respectively. +// +// jobU and jobVT are options for computing the singular vectors. The behavior +// is as follows +// jobU == lapack.SVDAll All m columns of U are returned in u +// jobU == lapack.SVDInPlace The first min(m,n) columns are returned in u +// jobU == lapack.SVDOverwrite The first min(m,n) columns of U are written into a +// jobU == lapack.SVDNone The columns of U are not computed. +// The behavior is the same for jobVT and the rows of V^T. At most one of jobU +// and jobVT can equal lapack.SVDOverwrite, and Gesvd will panic otherwise. +// +// On entry, a contains the data for the m×n matrix A. During the call to Gesvd +// the data is overwritten. On exit, A contains the appropriate singular vectors +// if either job is lapack.SVDOverwrite. +// +// s is a slice of length at least min(m,n) and on exit contains the singular +// values in decreasing order. +// +// u contains the left singular vectors on exit, stored columnwise. If +// jobU == lapack.SVDAll, u is of size m×m. If jobU == lapack.SVDInPlace u is +// of size m×min(m,n). If jobU == lapack.SVDOverwrite or lapack.SVDNone, u is +// not used. +// +// vt contains the left singular vectors on exit, stored rowwise. If +// jobV == lapack.SVDAll, vt is of size n×m. If jobVT == lapack.SVDInPlace vt is +// of size min(m,n)×n. If jobVT == lapack.SVDOverwrite or lapack.SVDNone, vt is +// not used. +// +// work is a slice for storing temporary memory, and lwork is the usable size of +// the slice. lwork must be at least max(5*min(m,n), 3*min(m,n)+max(m,n)). +// If lwork == -1, instead of performing Gesvd, the optimal work length will be +// stored into work[0]. Gesvd will panic if the working memory has insufficient +// storage. +// +// Gesvd returns whether the decomposition successfully completed. +func Gesvd(jobU, jobVT lapack.SVDJob, a, u, vt blas64.General, s, work []float64, lwork int) (ok bool) { + return lapack64.Dgesvd(jobU, jobVT, a.Rows, a.Cols, a.Data, a.Stride, s, u.Data, u.Stride, vt.Data, vt.Stride, work, lwork) +} + +// Getrf computes the LU decomposition of the m×n matrix A. +// The LU decomposition is a factorization of A into +// A = P * L * U +// where P is a permutation matrix, L is a unit lower triangular matrix, and +// U is a (usually) non-unit upper triangular matrix. On exit, L and U are stored +// in place into a. +// +// ipiv is a permutation vector. It indicates that row i of the matrix was +// changed with ipiv[i]. ipiv must have length at least min(m,n), and will panic +// otherwise. ipiv is zero-indexed. +// +// Getrf is the blocked version of the algorithm. +// +// Getrf returns whether the matrix A is singular. The LU decomposition will +// be computed regardless of the singularity of A, but division by zero +// will occur if the false is returned and the result is used to solve a +// system of equations. +func Getrf(a blas64.General, ipiv []int) bool { + return lapack64.Dgetrf(a.Rows, a.Cols, a.Data, a.Stride, ipiv) +} + +// Getri computes the inverse of the matrix A using the LU factorization computed +// by Getrf. On entry, a contains the PLU decomposition of A as computed by +// Getrf and on exit contains the reciprocal of the original matrix. +// +// Getri will not perform the inversion if the matrix is singular, and returns +// a boolean indicating whether the inversion was successful. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= n and this function will panic otherwise. +// Getri is a blocked inversion, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Getri, +// the optimal work length will be stored into work[0]. +func Getri(a blas64.General, ipiv []int, work []float64, lwork int) (ok bool) { + return lapack64.Dgetri(a.Cols, a.Data, a.Stride, ipiv, work, lwork) +} + +// Getrs solves a system of equations using an LU factorization. +// The system of equations solved is +// A * X = B if trans == blas.Trans +// A^T * X = B if trans == blas.NoTrans +// A is a general n×n matrix with stride lda. B is a general matrix of size n×nrhs. +// +// On entry b contains the elements of the matrix B. On exit, b contains the +// elements of X, the solution to the system of equations. +// +// a and ipiv contain the LU factorization of A and the permutation indices as +// computed by Getrf. ipiv is zero-indexed. +func Getrs(trans blas.Transpose, a blas64.General, b blas64.General, ipiv []int) { + lapack64.Dgetrs(trans, a.Cols, b.Cols, a.Data, a.Stride, ipiv, b.Data, b.Stride) +} + +// Ggsvd3 computes the generalized singular value decomposition (GSVD) +// of an m×n matrix A and p×n matrix B: +// U^T*A*Q = D1*[ 0 R ] +// +// V^T*B*Q = D2*[ 0 R ] +// where U, V and Q are orthogonal matrices. +// +// Ggsvd3 returns k and l, the dimensions of the sub-blocks. k+l +// is the effective numerical rank of the (m+p)×n matrix [ A^T B^T ]^T. +// R is a (k+l)×(k+l) nonsingular upper triangular matrix, D1 and +// D2 are m×(k+l) and p×(k+l) diagonal matrices and of the following +// structures, respectively: +// +// If m-k-l >= 0, +// +// k l +// D1 = k [ I 0 ] +// l [ 0 C ] +// m-k-l [ 0 0 ] +// +// k l +// D2 = l [ 0 S ] +// p-l [ 0 0 ] +// +// n-k-l k l +// [ 0 R ] = k [ 0 R11 R12 ] k +// l [ 0 0 R22 ] l +// +// where +// +// C = diag( alpha_k, ... , alpha_{k+l} ), +// S = diag( beta_k, ... , beta_{k+l} ), +// C^2 + S^2 = I. +// +// R is stored in +// A[0:k+l, n-k-l:n] +// on exit. +// +// If m-k-l < 0, +// +// k m-k k+l-m +// D1 = k [ I 0 0 ] +// m-k [ 0 C 0 ] +// +// k m-k k+l-m +// D2 = m-k [ 0 S 0 ] +// k+l-m [ 0 0 I ] +// p-l [ 0 0 0 ] +// +// n-k-l k m-k k+l-m +// [ 0 R ] = k [ 0 R11 R12 R13 ] +// m-k [ 0 0 R22 R23 ] +// k+l-m [ 0 0 0 R33 ] +// +// where +// C = diag( alpha_k, ... , alpha_m ), +// S = diag( beta_k, ... , beta_m ), +// C^2 + S^2 = I. +// +// R = [ R11 R12 R13 ] is stored in A[1:m, n-k-l+1:n] +// [ 0 R22 R23 ] +// and R33 is stored in +// B[m-k:l, n+m-k-l:n] on exit. +// +// Ggsvd3 computes C, S, R, and optionally the orthogonal transformation +// matrices U, V and Q. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// alpha and beta must have length n or Ggsvd3 will panic. On exit, alpha and +// beta contain the generalized singular value pairs of A and B +// alpha[0:k] = 1, +// beta[0:k] = 0, +// if m-k-l >= 0, +// alpha[k:k+l] = diag(C), +// beta[k:k+l] = diag(S), +// if m-k-l < 0, +// alpha[k:m]= C, alpha[m:k+l]= 0 +// beta[k:m] = S, beta[m:k+l] = 1. +// if k+l < n, +// alpha[k+l:n] = 0 and +// beta[k+l:n] = 0. +// +// On exit, iwork contains the permutation required to sort alpha descending. +// +// iwork must have length n, work must have length at least max(1, lwork), and +// lwork must be -1 or greater than n, otherwise Ggsvd3 will panic. If +// lwork is -1, work[0] holds the optimal lwork on return, but Ggsvd3 does +// not perform the GSVD. +func Ggsvd3(jobU, jobV, jobQ lapack.GSVDJob, a, b blas64.General, alpha, beta []float64, u, v, q blas64.General, work []float64, lwork int, iwork []int) (k, l int, ok bool) { + return lapack64.Dggsvd3(jobU, jobV, jobQ, a.Rows, a.Cols, b.Rows, a.Data, a.Stride, b.Data, b.Stride, alpha, beta, u.Data, u.Stride, v.Data, v.Stride, q.Data, q.Stride, work, lwork, iwork) +} + +// Lange computes the matrix norm of the general m×n matrix A. The input norm +// specifies the norm computed. +// lapack.MaxAbs: the maximum absolute value of an element. +// lapack.MaxColumnSum: the maximum column sum of the absolute values of the entries. +// lapack.MaxRowSum: the maximum row sum of the absolute values of the entries. +// lapack.Frobenius: the square root of the sum of the squares of the entries. +// If norm == lapack.MaxColumnSum, work must be of length n, and this function will panic otherwise. +// There are no restrictions on work for the other matrix norms. +func Lange(norm lapack.MatrixNorm, a blas64.General, work []float64) float64 { + return lapack64.Dlange(norm, a.Rows, a.Cols, a.Data, a.Stride, work) +} + +// Lansy computes the specified norm of an n×n symmetric matrix. If +// norm == lapack.MaxColumnSum or norm == lapackMaxRowSum work must have length +// at least n and this function will panic otherwise. +// There are no restrictions on work for the other matrix norms. +func Lansy(norm lapack.MatrixNorm, a blas64.Symmetric, work []float64) float64 { + return lapack64.Dlansy(norm, a.Uplo, a.N, a.Data, a.Stride, work) +} + +// Lantr computes the specified norm of an m×n trapezoidal matrix A. If +// norm == lapack.MaxColumnSum work must have length at least n and this function +// will panic otherwise. There are no restrictions on work for the other matrix norms. +func Lantr(norm lapack.MatrixNorm, a blas64.Triangular, work []float64) float64 { + return lapack64.Dlantr(norm, a.Uplo, a.Diag, a.N, a.N, a.Data, a.Stride, work) +} + +// Lapmt rearranges the columns of the m×n matrix X as specified by the +// permutation k_0, k_1, ..., k_{n-1} of the integers 0, ..., n-1. +// +// If forward is true a forward permutation is performed: +// +// X[0:m, k[j]] is moved to X[0:m, j] for j = 0, 1, ..., n-1. +// +// otherwise a backward permutation is performed: +// +// X[0:m, j] is moved to X[0:m, k[j]] for j = 0, 1, ..., n-1. +// +// k must have length n, otherwise Lapmt will panic. k is zero-indexed. +func Lapmt(forward bool, x blas64.General, k []int) { + lapack64.Dlapmt(forward, x.Rows, x.Cols, x.Data, x.Stride, k) +} + +// Ormlq multiplies the matrix C by the othogonal matrix Q defined by +// A and tau. A and tau are as returned from Gelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, A is a matrix of side k×m, and if side == blas.Right +// A is of size k×n. This uses a blocked algorithm. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m if side == blas.Left and lwork >= n if side == blas.Right, +// and this function will panic otherwise. +// Ormlq uses a block algorithm, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Ormlq, +// the optimal work length will be stored into work[0]. +// +// Tau contains the Householder scales and must have length at least k, and +// this function will panic otherwise. +func Ormlq(side blas.Side, trans blas.Transpose, a blas64.General, tau []float64, c blas64.General, work []float64, lwork int) { + lapack64.Dormlq(side, trans, c.Rows, c.Cols, a.Rows, a.Data, a.Stride, tau, c.Data, c.Stride, work, lwork) +} + +// Ormqr multiplies an m×n matrix C by an orthogonal matrix Q as +// C = Q * C, if side == blas.Left and trans == blas.NoTrans, +// C = Q^T * C, if side == blas.Left and trans == blas.Trans, +// C = C * Q, if side == blas.Right and trans == blas.NoTrans, +// C = C * Q^T, if side == blas.Right and trans == blas.Trans, +// where Q is defined as the product of k elementary reflectors +// Q = H_0 * H_1 * ... * H_{k-1}. +// +// If side == blas.Left, A is an m×k matrix and 0 <= k <= m. +// If side == blas.Right, A is an n×k matrix and 0 <= k <= n. +// The ith column of A contains the vector which defines the elementary +// reflector H_i and tau[i] contains its scalar factor. tau must have length k +// and Ormqr will panic otherwise. Geqrf returns A and tau in the required +// form. +// +// work must have length at least max(1,lwork), and lwork must be at least n if +// side == blas.Left and at least m if side == blas.Right, otherwise Ormqr will +// panic. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= m if side == blas.Left and lwork >= n if side == +// blas.Right, and this function will panic otherwise. Larger values of lwork +// will generally give better performance. On return, work[0] will contain the +// optimal value of lwork. +// +// If lwork is -1, instead of performing Ormqr, the optimal workspace size will +// be stored into work[0]. +func Ormqr(side blas.Side, trans blas.Transpose, a blas64.General, tau []float64, c blas64.General, work []float64, lwork int) { + lapack64.Dormqr(side, trans, c.Rows, c.Cols, a.Cols, a.Data, a.Stride, tau, c.Data, c.Stride, work, lwork) +} + +// Pocon estimates the reciprocal of the condition number of a positive-definite +// matrix A given the Cholesky decmposition of A. The condition number computed +// is based on the 1-norm and the ∞-norm. +// +// anorm is the 1-norm and the ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 3*n and Pocon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Pocon will panic otherwise. +func Pocon(a blas64.Symmetric, anorm float64, work []float64, iwork []int) float64 { + return lapack64.Dpocon(a.Uplo, a.N, a.Data, a.Stride, anorm, work, iwork) +} + +// Syev computes all eigenvalues and, optionally, the eigenvectors of a real +// symmetric matrix A. +// +// w contains the eigenvalues in ascending order upon return. w must have length +// at least n, and Syev will panic otherwise. +// +// On entry, a contains the elements of the symmetric matrix A in the triangular +// portion specified by uplo. If jobz == lapack.ComputeEV a contains the +// orthonormal eigenvectors of A on exit, otherwise on exit the specified +// triangular region is overwritten. +// +// Work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= 3*n-1, and Syev will panic otherwise. The amount of blocking is +// limited by the usable length. If lwork == -1, instead of computing Syev the +// optimal work length is stored into work[0]. +func Syev(jobz lapack.EVJob, a blas64.Symmetric, w, work []float64, lwork int) (ok bool) { + return lapack64.Dsyev(jobz, a.Uplo, a.N, a.Data, a.Stride, w, work, lwork) +} + +// Trcon estimates the reciprocal of the condition number of a triangular matrix A. +// The condition number computed may be based on the 1-norm or the ∞-norm. +// +// work is a temporary data slice of length at least 3*n and Trcon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Trcon will panic otherwise. +func Trcon(norm lapack.MatrixNorm, a blas64.Triangular, work []float64, iwork []int) float64 { + return lapack64.Dtrcon(norm, a.Uplo, a.Diag, a.N, a.Data, a.Stride, work, iwork) +} + +// Trtri computes the inverse of a triangular matrix, storing the result in place +// into a. +// +// Trtri will not perform the inversion if the matrix is singular, and returns +// a boolean indicating whether the inversion was successful. +func Trtri(a blas64.Triangular) (ok bool) { + return lapack64.Dtrtri(a.Uplo, a.Diag, a.N, a.Data, a.Stride) +} + +// Trtrs solves a triangular system of the form A * X = B or A^T * X = B. Trtrs +// returns whether the solve completed successfully. If A is singular, no solve is performed. +func Trtrs(trans blas.Transpose, a blas64.Triangular, b blas64.General) (ok bool) { + return lapack64.Dtrtrs(a.Uplo, trans, a.Diag, a.N, b.Cols, a.Data, a.Stride, b.Data, b.Stride) +} + +// Geev computes the eigenvalues and, optionally, the left and/or right +// eigenvectors for an n×n real nonsymmetric matrix A. +// +// The right eigenvector v_j of A corresponding to an eigenvalue λ_j +// is defined by +// A v_j = λ_j v_j, +// and the left eigenvector u_j corresponding to an eigenvalue λ_j is defined by +// u_j^H A = λ_j u_j^H, +// where u_j^H is the conjugate transpose of u_j. +// +// On return, A will be overwritten and the left and right eigenvectors will be +// stored, respectively, in the columns of the n×n matrices VL and VR in the +// same order as their eigenvalues. If the j-th eigenvalue is real, then +// u_j = VL[:,j], +// v_j = VR[:,j], +// and if it is not real, then j and j+1 form a complex conjugate pair and the +// eigenvectors can be recovered as +// u_j = VL[:,j] + i*VL[:,j+1], +// u_{j+1} = VL[:,j] - i*VL[:,j+1], +// v_j = VR[:,j] + i*VR[:,j+1], +// v_{j+1} = VR[:,j] - i*VR[:,j+1], +// where i is the imaginary unit. The computed eigenvectors are normalized to +// have Euclidean norm equal to 1 and largest component real. +// +// Left eigenvectors will be computed only if jobvl == lapack.ComputeLeftEV, +// otherwise jobvl must be lapack.None. +// Right eigenvectors will be computed only if jobvr == lapack.ComputeRightEV, +// otherwise jobvr must be lapack.None. +// For other values of jobvl and jobvr Geev will panic. +// +// On return, wr and wi will contain the real and imaginary parts, respectively, +// of the computed eigenvalues. Complex conjugate pairs of eigenvalues appear +// consecutively with the eigenvalue having the positive imaginary part first. +// wr and wi must have length n, and Geev will panic otherwise. +// +// work must have length at least lwork and lwork must be at least max(1,4*n) if +// the left or right eigenvectors are computed, and at least max(1,3*n) if no +// eigenvectors are computed. For good performance, lwork must generally be +// larger. On return, optimal value of lwork will be stored in work[0]. +// +// If lwork == -1, instead of performing Geev, the function only calculates the +// optimal vaule of lwork and stores it into work[0]. +// +// On return, first will be the index of the first valid eigenvalue. +// If first == 0, all eigenvalues and eigenvectors have been computed. +// If first is positive, Geev failed to compute all the eigenvalues, no +// eigenvectors have been computed and wr[first:] and wi[first:] contain those +// eigenvalues which have converged. +func Geev(jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, a blas64.General, wr, wi []float64, vl, vr blas64.General, work []float64, lwork int) (first int) { + n := a.Rows + if a.Cols != n { + panic("lapack64: matrix not square") + } + if jobvl == lapack.ComputeLeftEV && (vl.Rows != n || vl.Cols != n) { + panic("lapack64: bad size of VL") + } + if jobvr == lapack.ComputeRightEV && (vr.Rows != n || vr.Cols != n) { + panic("lapack64: bad size of VR") + } + return lapack64.Dgeev(jobvl, jobvr, n, a.Data, a.Stride, wr, wi, vl.Data, vl.Stride, vr.Data, vr.Stride, work, lwork) +} diff --git a/lapack/native/bench_test.go b/lapack/native/bench_test.go new file mode 100644 index 00000000..b253cd6f --- /dev/null +++ b/lapack/native/bench_test.go @@ -0,0 +1,15 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package native + +import ( + "testing" + + "github.com/gonum/lapack/testlapack" +) + +func BenchmarkDgeev(b *testing.B) { testlapack.DgeevBenchmark(b, impl) } diff --git a/lapack/native/dbdsqr.go b/lapack/native/dbdsqr.go new file mode 100644 index 00000000..6a0b0eb8 --- /dev/null +++ b/lapack/native/dbdsqr.go @@ -0,0 +1,488 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dbdsqr performs a singular value decomposition of a real n×n bidiagonal matrix. +// +// The SVD of the bidiagonal matrix B is +// B = Q * S * P^T +// where S is a diagonal matrix of singular values, Q is an orthogonal matrix of +// left singular vectors, and P is an orthogonal matrix of right singular vectors. +// +// Q and P are only computed if requested. If left singular vectors are requested, +// this routine returns U * Q instead of Q, and if right singular vectors are +// requested P^T * VT is returned instead of P^T. +// +// Frequently Dbdsqr is used in conjunction with Dgebrd which reduces a general +// matrix A into bidiagonal form. In this case, the SVD of A is +// A = (U * Q) * S * (P^T * VT) +// +// This routine may also compute Q^T * C. +// +// d and e contain the elements of the bidiagonal matrix b. d must have length at +// least n, and e must have length at least n-1. Dbdsqr will panic if there is +// insufficient length. On exit, D contains the singular values of B in decreasing +// order. +// +// VT is a matrix of size n×ncvt whose elements are stored in vt. The elements +// of vt are modified to contain P^T * VT on exit. VT is not used if ncvt == 0. +// +// U is a matrix of size nru×n whose elements are stored in u. The elements +// of u are modified to contain U * Q on exit. U is not used if nru == 0. +// +// C is a matrix of size n×ncc whose elements are stored in c. The elements +// of c are modified to contain Q^T * C on exit. C is not used if ncc == 0. +// +// work contains temporary storage and must have length at least 4*n. Dbdsqr +// will panic if there is insufficient working memory. +// +// Dbdsqr returns whether the decomposition was successful. +// +// Dbdsqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dbdsqr(uplo blas.Uplo, n, ncvt, nru, ncc int, d, e, vt []float64, ldvt int, u []float64, ldu int, c []float64, ldc int, work []float64) (ok bool) { + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if ncvt != 0 { + checkMatrix(n, ncvt, vt, ldvt) + } + if nru != 0 { + checkMatrix(nru, n, u, ldu) + } + if ncc != 0 { + checkMatrix(n, ncc, c, ldc) + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if len(work) < 4*n { + panic(badWork) + } + var info int + bi := blas64.Implementation() + const ( + maxIter = 6 + ) + if n == 0 { + return true + } + if n != 1 { + // If the singular vectors do not need to be computed, use qd algorithm. + if !(ncvt > 0 || nru > 0 || ncc > 0) { + info = impl.Dlasq1(n, d, e, work) + // If info is 2 dqds didn't finish, and so try to. + if info != 2 { + return info == 0 + } + info = 0 + } + nm1 := n - 1 + nm12 := nm1 + nm1 + nm13 := nm12 + nm1 + idir := 0 + + eps := dlamchE + unfl := dlamchS + lower := uplo == blas.Lower + var cs, sn, r float64 + if lower { + for i := 0; i < n-1; i++ { + cs, sn, r = impl.Dlartg(d[i], e[i]) + d[i] = r + e[i] = sn * d[i+1] + d[i+1] *= cs + work[i] = cs + work[nm1+i] = sn + } + if nru > 0 { + impl.Dlasr(blas.Right, lapack.Variable, lapack.Forward, nru, n, work, work[n-1:], u, ldu) + } + if ncc > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Forward, n, ncc, work, work[n-1:], c, ldc) + } + } + // Compute singular values to a relative accuracy of tol. If tol is negative + // the values will be computed to an absolute accuracy of math.Abs(tol) * norm(b) + tolmul := math.Max(10, math.Min(100, math.Pow(eps, -1.0/8))) + tol := tolmul * eps + var smax float64 + for i := 0; i < n; i++ { + smax = math.Max(smax, math.Abs(d[i])) + } + for i := 0; i < n-1; i++ { + smax = math.Max(smax, math.Abs(e[i])) + } + + var sminl float64 + var thresh float64 + if tol >= 0 { + sminoa := math.Abs(d[0]) + if sminoa != 0 { + mu := sminoa + for i := 1; i < n; i++ { + mu = math.Abs(d[i]) * (mu / (mu + math.Abs(e[i-1]))) + sminoa = math.Min(sminoa, mu) + if sminoa == 0 { + break + } + } + } + sminoa = sminoa / math.Sqrt(float64(n)) + thresh = math.Max(tol*sminoa, float64(maxIter*n*n)*unfl) + } else { + thresh = math.Max(math.Abs(tol)*smax, float64(maxIter*n*n)*unfl) + } + // Prepare for the main iteration loop for the singular values. + maxIt := maxIter * n * n + iter := 0 + oldl2 := -1 + oldm := -1 + // m points to the last element of unconverged part of matrix. + m := n + + Outer: + for m > 1 { + if iter > maxIt { + info = 0 + for i := 0; i < n-1; i++ { + if e[i] != 0 { + info++ + } + } + return info == 0 + } + // Find diagonal block of matrix to work on. + if tol < 0 && math.Abs(d[m-1]) <= thresh { + d[m-1] = 0 + } + smax = math.Abs(d[m-1]) + smin := smax + var l2 int + var broke bool + for l3 := 0; l3 < m-1; l3++ { + l2 = m - l3 - 2 + abss := math.Abs(d[l2]) + abse := math.Abs(e[l2]) + if tol < 0 && abss <= thresh { + d[l2] = 0 + } + if abse <= thresh { + broke = true + break + } + smin = math.Min(smin, abss) + smax = math.Max(math.Max(smax, abss), abse) + } + if broke { + e[l2] = 0 + if l2 == m-2 { + // Convergence of bottom singular value, return to top. + m-- + continue + } + l2++ + } else { + l2 = 0 + } + // e[ll] through e[m-2] are nonzero, e[ll-1] is zero + if l2 == m-2 { + // Handle 2×2 block separately. + var sinr, cosr, sinl, cosl float64 + d[m-1], d[m-2], sinr, cosr, sinl, cosl = impl.Dlasv2(d[m-2], e[m-2], d[m-1]) + e[m-2] = 0 + if ncvt > 0 { + bi.Drot(ncvt, vt[(m-2)*ldvt:], 1, vt[(m-1)*ldvt:], 1, cosr, sinr) + } + if nru > 0 { + bi.Drot(nru, u[m-2:], ldu, u[m-1:], ldu, cosl, sinl) + } + if ncc > 0 { + bi.Drot(ncc, c[(m-2)*ldc:], 1, c[(m-1)*ldc:], 1, cosl, sinl) + } + m -= 2 + continue + } + // If working on a new submatrix, choose shift direction from larger end + // diagonal element toward smaller. + if l2 > oldm-1 || m-1 < oldl2 { + if math.Abs(d[l2]) >= math.Abs(d[m-1]) { + idir = 1 + } else { + idir = 2 + } + } + // Apply convergence tests. + // TODO(btracey): There is a lot of similar looking code here. See + // if there is a better way to de-duplicate. + if idir == 1 { + // Run convergence test in forward direction. + // First apply standard test to bottom of matrix. + if math.Abs(e[m-2]) <= math.Abs(tol)*math.Abs(d[m-1]) || (tol < 0 && math.Abs(e[m-2]) <= thresh) { + e[m-2] = 0 + continue + } + if tol >= 0 { + // If relative accuracy desired, apply convergence criterion forward. + mu := math.Abs(d[l2]) + sminl = mu + for l3 := l2; l3 < m-1; l3++ { + if math.Abs(e[l3]) <= tol*mu { + e[l3] = 0 + continue Outer + } + mu = math.Abs(d[l3+1]) * (mu / (mu + math.Abs(e[l3]))) + sminl = math.Min(sminl, mu) + } + } + } else { + // Run convergence test in backward direction. + // First apply standard test to top of matrix. + if math.Abs(e[l2]) <= math.Abs(tol)*math.Abs(d[l2]) || (tol < 0 && math.Abs(e[l2]) <= thresh) { + e[l2] = 0 + continue + } + if tol >= 0 { + // If relative accuracy desired, apply convergence criterion backward. + mu := math.Abs(d[m-1]) + sminl = mu + for l3 := m - 2; l3 >= l2; l3-- { + if math.Abs(e[l3]) <= tol*mu { + e[l3] = 0 + continue Outer + } + mu = math.Abs(d[l3]) * (mu / (mu + math.Abs(e[l3]))) + sminl = math.Min(sminl, mu) + } + } + } + oldl2 = l2 + oldm = m + // Compute shift. First, test if shifting would ruin relative accuracy, + // and if so set the shift to zero. + var shift float64 + if tol >= 0 && float64(n)*tol*(sminl/smax) <= math.Max(eps, (1.0/100)*tol) { + shift = 0 + } else { + var sl2 float64 + if idir == 1 { + sl2 = math.Abs(d[l2]) + shift, _ = impl.Dlas2(d[m-2], e[m-2], d[m-1]) + } else { + sl2 = math.Abs(d[m-1]) + shift, _ = impl.Dlas2(d[l2], e[l2], d[l2+1]) + } + // Test if shift is negligible + if sl2 > 0 { + if (shift/sl2)*(shift/sl2) < eps { + shift = 0 + } + } + } + iter += m - l2 + 1 + // If no shift, do simplified QR iteration. + if shift == 0 { + if idir == 1 { + cs := 1.0 + oldcs := 1.0 + var sn, r, oldsn float64 + for i := l2; i < m-1; i++ { + cs, sn, r = impl.Dlartg(d[i]*cs, e[i]) + if i > l2 { + e[i-1] = oldsn * r + } + oldcs, oldsn, d[i] = impl.Dlartg(oldcs*r, d[i+1]*sn) + work[i-l2] = cs + work[i-l2+nm1] = sn + work[i-l2+nm12] = oldcs + work[i-l2+nm13] = oldsn + } + h := d[m-1] * cs + d[m-1] = h * oldcs + e[m-2] = h * oldsn + if ncvt > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Forward, m-l2, ncvt, work, work[n-1:], vt[l2*ldvt:], ldvt) + } + if nru > 0 { + impl.Dlasr(blas.Right, lapack.Variable, lapack.Forward, nru, m-l2, work[nm12:], work[nm13:], u[l2:], ldu) + } + if ncc > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Forward, m-l2, ncc, work[nm12:], work[nm13:], c[l2*ldc:], ldc) + } + if math.Abs(e[m-2]) < thresh { + e[m-2] = 0 + } + } else { + cs := 1.0 + oldcs := 1.0 + var sn, r, oldsn float64 + for i := m - 1; i >= l2+1; i-- { + cs, sn, r = impl.Dlartg(d[i]*cs, e[i-1]) + if i < m-1 { + e[i] = oldsn * r + } + oldcs, oldsn, d[i] = impl.Dlartg(oldcs*r, d[i-1]*sn) + work[i-l2-1] = cs + work[i-l2+nm1-1] = -sn + work[i-l2+nm12-1] = oldcs + work[i-l2+nm13-1] = -oldsn + } + h := d[l2] * cs + d[l2] = h * oldcs + e[l2] = h * oldsn + if ncvt > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Backward, m-l2, ncvt, work[nm12:], work[nm13:], vt[l2*ldvt:], ldvt) + } + if nru > 0 { + impl.Dlasr(blas.Right, lapack.Variable, lapack.Backward, nru, m-l2, work, work[n-1:], u[l2:], ldu) + } + if ncc > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Backward, m-l2, ncc, work, work[n-1:], c[l2*ldc:], ldc) + } + if math.Abs(e[l2]) <= thresh { + e[l2] = 0 + } + } + } else { + // Use nonzero shift. + if idir == 1 { + // Chase bulge from top to bottom. Save cosines and sines for + // later singular vector updates. + f := (math.Abs(d[l2]) - shift) * (math.Copysign(1, d[l2]) + shift/d[l2]) + g := e[l2] + var cosl, sinl float64 + for i := l2; i < m-1; i++ { + cosr, sinr, r := impl.Dlartg(f, g) + if i > l2 { + e[i-1] = r + } + f = cosr*d[i] + sinr*e[i] + e[i] = cosr*e[i] - sinr*d[i] + g = sinr * d[i+1] + d[i+1] *= cosr + cosl, sinl, r = impl.Dlartg(f, g) + d[i] = r + f = cosl*e[i] + sinl*d[i+1] + d[i+1] = cosl*d[i+1] - sinl*e[i] + if i < m-2 { + g = sinl * e[i+1] + e[i+1] = cosl * e[i+1] + } + work[i-l2] = cosr + work[i-l2+nm1] = sinr + work[i-l2+nm12] = cosl + work[i-l2+nm13] = sinl + } + e[m-2] = f + if ncvt > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Forward, m-l2, ncvt, work, work[n-1:], vt[l2*ldvt:], ldvt) + } + if nru > 0 { + impl.Dlasr(blas.Right, lapack.Variable, lapack.Forward, nru, m-l2, work[nm12:], work[nm13:], u[l2:], ldu) + } + if ncc > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Forward, m-l2, ncc, work[nm12:], work[nm13:], c[l2*ldc:], ldc) + } + if math.Abs(e[m-2]) <= thresh { + e[m-2] = 0 + } + } else { + // Chase bulge from top to bottom. Save cosines and sines for + // later singular vector updates. + f := (math.Abs(d[m-1]) - shift) * (math.Copysign(1, d[m-1]) + shift/d[m-1]) + g := e[m-2] + for i := m - 1; i > l2; i-- { + cosr, sinr, r := impl.Dlartg(f, g) + if i < m-1 { + e[i] = r + } + f = cosr*d[i] + sinr*e[i-1] + e[i-1] = cosr*e[i-1] - sinr*d[i] + g = sinr * d[i-1] + d[i-1] *= cosr + cosl, sinl, r := impl.Dlartg(f, g) + d[i] = r + f = cosl*e[i-1] + sinl*d[i-1] + d[i-1] = cosl*d[i-1] - sinl*e[i-1] + if i > l2+1 { + g = sinl * e[i-2] + e[i-2] *= cosl + } + work[i-l2-1] = cosr + work[i-l2+nm1-1] = -sinr + work[i-l2+nm12-1] = cosl + work[i-l2+nm13-1] = -sinl + } + e[l2] = f + if math.Abs(e[l2]) <= thresh { + e[l2] = 0 + } + if ncvt > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Backward, m-l2, ncvt, work[nm12:], work[nm13:], vt[l2*ldvt:], ldvt) + } + if nru > 0 { + impl.Dlasr(blas.Right, lapack.Variable, lapack.Backward, nru, m-l2, work, work[n-1:], u[l2:], ldu) + } + if ncc > 0 { + impl.Dlasr(blas.Left, lapack.Variable, lapack.Backward, m-l2, ncc, work, work[n-1:], c[l2*ldc:], ldc) + } + } + } + } + } + + // All singular values converged, make them positive. + for i := 0; i < n; i++ { + if d[i] < 0 { + d[i] *= -1 + if ncvt > 0 { + bi.Dscal(ncvt, -1, vt[i*ldvt:], 1) + } + } + } + + // Sort the singular values in decreasing order. + for i := 0; i < n-1; i++ { + isub := 0 + smin := d[0] + for j := 1; j < n-i; j++ { + if d[j] <= smin { + isub = j + smin = d[j] + } + } + if isub != n-i { + // Swap singular values and vectors. + d[isub] = d[n-i-1] + d[n-i-1] = smin + if ncvt > 0 { + bi.Dswap(ncvt, vt[isub*ldvt:], 1, vt[(n-i-1)*ldvt:], 1) + } + if nru > 0 { + bi.Dswap(nru, u[isub:], ldu, u[n-i-1:], ldu) + } + if ncc > 0 { + bi.Dswap(ncc, c[isub*ldc:], 1, c[(n-i-1)*ldc:], 1) + } + } + } + info = 0 + for i := 0; i < n-1; i++ { + if e[i] != 0 { + info++ + } + } + return info == 0 +} diff --git a/lapack/native/dgebak.go b/lapack/native/dgebak.go new file mode 100644 index 00000000..e0edc571 --- /dev/null +++ b/lapack/native/dgebak.go @@ -0,0 +1,78 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dgebak updates an n×m matrix V as +// V = P D V, if side == lapack.RightEV, +// V = P D^{-1} V, if side == lapack.LeftEV, +// where P and D are n×n permutation and scaling matrices, respectively, +// implicitly represented by job, scale, ilo and ihi as returned by Dgebal. +// +// Typically, columns of the matrix V contain the right or left (determined by +// side) eigenvectors of the balanced matrix output by Dgebal, and Dgebak forms +// the eigenvectors of the original matrix. +// +// Dgebak is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebak(job lapack.Job, side lapack.EVSide, n, ilo, ihi int, scale []float64, m int, v []float64, ldv int) { + switch job { + default: + panic(badJob) + case lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale: + } + switch side { + default: + panic(badSide) + case lapack.LeftEV, lapack.RightEV: + } + checkMatrix(n, m, v, ldv) + switch { + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + } + + // Quick return if possible. + if n == 0 || m == 0 || job == lapack.None { + return + } + + bi := blas64.Implementation() + if ilo != ihi && job != lapack.Permute { + // Backward balance. + if side == lapack.RightEV { + for i := ilo; i <= ihi; i++ { + bi.Dscal(m, scale[i], v[i*ldv:], 1) + } + } else { + for i := ilo; i <= ihi; i++ { + bi.Dscal(m, 1/scale[i], v[i*ldv:], 1) + } + } + } + if job == lapack.Scale { + return + } + // Backward permutation. + for i := ilo - 1; i >= 0; i-- { + k := int(scale[i]) + if k == i { + continue + } + bi.Dswap(m, v[i*ldv:], 1, v[k*ldv:], 1) + } + for i := ihi + 1; i < n; i++ { + k := int(scale[i]) + if k == i { + continue + } + bi.Dswap(m, v[i*ldv:], 1, v[k*ldv:], 1) + } +} diff --git a/lapack/native/dgebal.go b/lapack/native/dgebal.go new file mode 100644 index 00000000..41ea70fb --- /dev/null +++ b/lapack/native/dgebal.go @@ -0,0 +1,228 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dgebal balances an n×n matrix A. Balancing consists of two stages, permuting +// and scaling. Both steps are optional and depend on the value of job. +// +// Permuting consists of applying a permutation matrix P such that the matrix +// that results from P^T*A*P takes the upper block triangular form +// [ T1 X Y ] +// P^T A P = [ 0 B Z ], +// [ 0 0 T2 ] +// where T1 and T2 are upper triangular matrices and B contains at least one +// nonzero off-diagonal element in each row and column. The indices ilo and ihi +// mark the starting and ending columns of the submatrix B. The eigenvalues of A +// isolated in the first 0 to ilo-1 and last ihi+1 to n-1 elements on the +// diagonal can be read off without any roundoff error. +// +// Scaling consists of applying a diagonal similarity transformation D such that +// D^{-1}*B*D has the 1-norm of each row and its corresponding column nearly +// equal. The output matrix is +// [ T1 X*D Y ] +// [ 0 inv(D)*B*D inv(D)*Z ]. +// [ 0 0 T2 ] +// Scaling may reduce the 1-norm of the matrix, and improve the accuracy of +// the computed eigenvalues and/or eigenvectors. +// +// job specifies the operations that will be performed on A. +// If job is lapack.None, Dgebal sets scale[i] = 1 for all i and returns ilo=0, ihi=n-1. +// If job is lapack.Permute, only permuting will be done. +// If job is lapack.Scale, only scaling will be done. +// If job is lapack.PermuteScale, both permuting and scaling will be done. +// +// On return, if job is lapack.Permute or lapack.PermuteScale, it will hold that +// A[i,j] == 0, for i > j and j ∈ {0, ..., ilo-1, ihi+1, ..., n-1}. +// If job is lapack.None or lapack.Scale, or if n == 0, it will hold that +// ilo == 0 and ihi == n-1. +// +// On return, scale will contain information about the permutations and scaling +// factors applied to A. If π(j) denotes the index of the column interchanged +// with column j, and D[j,j] denotes the scaling factor applied to column j, +// then +// scale[j] == π(j), for j ∈ {0, ..., ilo-1, ihi+1, ..., n-1}, +// == D[j,j], for j ∈ {ilo, ..., ihi}. +// scale must have length equal to n, otherwise Dgebal will panic. +// +// Dgebal is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebal(job lapack.Job, n int, a []float64, lda int, scale []float64) (ilo, ihi int) { + switch job { + default: + panic(badJob) + case lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale: + } + checkMatrix(n, n, a, lda) + if len(scale) != n { + panic("lapack: bad length of scale") + } + + ilo = 0 + ihi = n - 1 + + if n == 0 || job == lapack.None { + for i := range scale { + scale[i] = 1 + } + return ilo, ihi + } + + bi := blas64.Implementation() + swapped := true + + if job == lapack.Scale { + goto scaling + } + + // Permutation to isolate eigenvalues if possible. + // + // Search for rows isolating an eigenvalue and push them down. + for swapped { + swapped = false + rows: + for i := ihi; i >= 0; i-- { + for j := 0; j <= ihi; j++ { + if i == j { + continue + } + if a[i*lda+j] != 0 { + continue rows + } + } + // Row i has only zero off-diagonal elements in the + // block A[ilo:ihi+1,ilo:ihi+1]. + scale[ihi] = float64(i) + if i != ihi { + bi.Dswap(ihi+1, a[i:], lda, a[ihi:], lda) + bi.Dswap(n, a[i*lda:], 1, a[ihi*lda:], 1) + } + if ihi == 0 { + scale[0] = 1 + return ilo, ihi + } + ihi-- + swapped = true + break + } + } + // Search for columns isolating an eigenvalue and push them left. + swapped = true + for swapped { + swapped = false + columns: + for j := ilo; j <= ihi; j++ { + for i := ilo; i <= ihi; i++ { + if i == j { + continue + } + if a[i*lda+j] != 0 { + continue columns + } + } + // Column j has only zero off-diagonal elements in the + // block A[ilo:ihi+1,ilo:ihi+1]. + scale[ilo] = float64(j) + if j != ilo { + bi.Dswap(ihi+1, a[j:], lda, a[ilo:], lda) + bi.Dswap(n-ilo, a[j*lda+ilo:], 1, a[ilo*lda+ilo:], 1) + } + swapped = true + ilo++ + break + } + } + +scaling: + for i := ilo; i <= ihi; i++ { + scale[i] = 1 + } + + if job == lapack.Permute { + return ilo, ihi + } + + // Balance the submatrix in rows ilo to ihi. + + const ( + // sclfac should be a power of 2 to avoid roundoff errors. + // Elements of scale are restricted to powers of sclfac, + // therefore the matrix will be only nearly balanced. + sclfac = 2 + // factor determines the minimum reduction of the row and column + // norms that is considered non-negligible. It must be less than 1. + factor = 0.95 + ) + sfmin1 := dlamchS / dlamchP + sfmax1 := 1 / sfmin1 + sfmin2 := sfmin1 * sclfac + sfmax2 := 1 / sfmin2 + + // Iterative loop for norm reduction. + var conv bool + for !conv { + conv = true + for i := ilo; i <= ihi; i++ { + c := bi.Dnrm2(ihi-ilo+1, a[ilo*lda+i:], lda) + r := bi.Dnrm2(ihi-ilo+1, a[i*lda+ilo:], 1) + ica := bi.Idamax(ihi+1, a[i:], lda) + ca := math.Abs(a[ica*lda+i]) + ira := bi.Idamax(n-ilo, a[i*lda+ilo:], 1) + ra := math.Abs(a[i*lda+ilo+ira]) + + // Guard against zero c or r due to underflow. + if c == 0 || r == 0 { + continue + } + g := r / sclfac + f := 1.0 + s := c + r + for c < g && math.Max(f, math.Max(c, ca)) < sfmax2 && math.Min(r, math.Min(g, ra)) > sfmin2 { + if math.IsNaN(c + f + ca + r + g + ra) { + // Panic if NaN to avoid infinite loop. + panic("lapack: NaN") + } + f *= sclfac + c *= sclfac + ca *= sclfac + g /= sclfac + r /= sclfac + ra /= sclfac + } + g = c / sclfac + for r <= g && math.Max(r, ra) < sfmax2 && math.Min(math.Min(f, c), math.Min(g, ca)) > sfmin2 { + f /= sclfac + c /= sclfac + ca /= sclfac + g /= sclfac + r *= sclfac + ra *= sclfac + } + + if c+r >= factor*s { + // Reduction would be negligible. + continue + } + if f < 1 && scale[i] < 1 && f*scale[i] <= sfmin1 { + continue + } + if f > 1 && scale[i] > 1 && scale[i] >= sfmax1/f { + continue + } + + // Now balance. + scale[i] *= f + bi.Dscal(n-ilo, 1/f, a[i*lda+ilo:], 1) + bi.Dscal(ihi+1, f, a[i:], lda) + conv = false + } + } + return ilo, ihi +} diff --git a/lapack/native/dgebd2.go b/lapack/native/dgebd2.go new file mode 100644 index 00000000..c82ba231 --- /dev/null +++ b/lapack/native/dgebd2.go @@ -0,0 +1,74 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgebd2 reduces an m×n matrix A to upper or lower bidiagonal form by an orthogonal +// transformation. +// Q^T * A * P = B +// if m >= n, B is upper diagonal, otherwise B is lower bidiagonal. +// d is the diagonal, len = min(m,n) +// e is the off-diagonal len = min(m,n)-1 +// +// Dgebd2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebd2(m, n int, a []float64, lda int, d, e, tauQ, tauP, work []float64) { + checkMatrix(m, n, a, lda) + if len(d) < min(m, n) { + panic(badD) + } + if len(e) < min(m, n)-1 { + panic(badE) + } + if len(tauQ) < min(m, n) { + panic(badTauQ) + } + if len(tauP) < min(m, n) { + panic(badTauP) + } + if len(work) < max(m, n) { + panic(badWork) + } + if m >= n { + for i := 0; i < n; i++ { + a[i*lda+i], tauQ[i] = impl.Dlarfg(m-i, a[i*lda+i], a[min(i+1, m-1)*lda+i:], lda) + d[i] = a[i*lda+i] + a[i*lda+i] = 1 + // Apply H_i to A[i:m, i+1:n] from the left. + if i < n-1 { + impl.Dlarf(blas.Left, m-i, n-i-1, a[i*lda+i:], lda, tauQ[i], a[i*lda+i+1:], lda, work) + } + a[i*lda+i] = d[i] + if i < n-1 { + a[i*lda+i+1], tauP[i] = impl.Dlarfg(n-i-1, a[i*lda+i+1], a[i*lda+min(i+2, n-1):], 1) + e[i] = a[i*lda+i+1] + a[i*lda+i+1] = 1 + impl.Dlarf(blas.Right, m-i-1, n-i-1, a[i*lda+i+1:], 1, tauP[i], a[(i+1)*lda+i+1:], lda, work) + a[i*lda+i+1] = e[i] + } else { + tauP[i] = 0 + } + } + return + } + for i := 0; i < m; i++ { + a[i*lda+i], tauP[i] = impl.Dlarfg(n-i, a[i*lda+i], a[i*lda+min(i+1, n-1):], 1) + d[i] = a[i*lda+i] + a[i*lda+i] = 1 + if i < m-1 { + impl.Dlarf(blas.Right, m-i-1, n-i, a[i*lda+i:], 1, tauP[i], a[(i+1)*lda+i:], lda, work) + } + a[i*lda+i] = d[i] + if i < m-1 { + a[(i+1)*lda+i], tauQ[i] = impl.Dlarfg(m-i-1, a[(i+1)*lda+i], a[min(i+2, m-1)*lda+i:], lda) + e[i] = a[(i+1)*lda+i] + a[(i+1)*lda+i] = 1 + impl.Dlarf(blas.Left, m-i-1, n-i-1, a[(i+1)*lda+i:], lda, tauQ[i], a[(i+1)*lda+i+1:], lda, work) + a[(i+1)*lda+i] = e[i] + } else { + tauQ[i] = 0 + } + } +} diff --git a/lapack/native/dgebrd.go b/lapack/native/dgebrd.go new file mode 100644 index 00000000..22ca6b38 --- /dev/null +++ b/lapack/native/dgebrd.go @@ -0,0 +1,150 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dgebrd reduces a general m×n matrix A to upper or lower bidiagonal form B by +// an orthogonal transformation: +// Q^T * A * P = B. +// The diagonal elements of B are stored in d and the off-diagonal elements are stored +// in e. These are additionally stored along the diagonal of A and the off-diagonal +// of A. If m >= n B is an upper-bidiagonal matrix, and if m < n B is a +// lower-bidiagonal matrix. +// +// The remaining elements of A store the data needed to construct Q and P. +// The matrices Q and P are products of elementary reflectors +// if m >= n, Q = H_0 * H_1 * ... * H_{n-1}, +// P = G_0 * G_1 * ... * G_{n-2}, +// if m < n, Q = H_0 * H_1 * ... * H_{m-2}, +// P = G_0 * G_1 * ... * G_{m-1}, +// where +// H_i = I - tauQ[i] * v_i * v_i^T, +// G_i = I - tauP[i] * u_i * u_i^T. +// +// As an example, on exit the entries of A when m = 6, and n = 5 +// [ d e u1 u1 u1] +// [v1 d e u2 u2] +// [v1 v2 d e u3] +// [v1 v2 v3 d e] +// [v1 v2 v3 v4 d] +// [v1 v2 v3 v4 v5] +// and when m = 5, n = 6 +// [ d u1 u1 u1 u1 u1] +// [ e d u2 u2 u2 u2] +// [v1 e d u3 u3 u3] +// [v1 v2 e d u4 u4] +// [v1 v2 v3 e d u5] +// +// d, tauQ, and tauP must all have length at least min(m,n), and e must have +// length min(m,n) - 1, unless lwork is -1 when there is no check except for +// work which must have a length of at least one. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(1,m,n) or be -1 and this function will panic otherwise. +// Dgebrd is blocked decomposition, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgebrd, +// the optimal work length will be stored into work[0]. +// +// Dgebrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgebrd(m, n int, a []float64, lda int, d, e, tauQ, tauP, work []float64, lwork int) { + checkMatrix(m, n, a, lda) + // Calculate optimal work. + nb := impl.Ilaenv(1, "DGEBRD", " ", m, n, -1, -1) + var lworkOpt int + if lwork == -1 { + if len(work) < 1 { + panic(badWork) + } + lworkOpt = ((m + n) * nb) + work[0] = float64(max(1, lworkOpt)) + return + } + minmn := min(m, n) + if len(d) < minmn { + panic(badD) + } + if len(e) < minmn-1 { + panic(badE) + } + if len(tauQ) < minmn { + panic(badTauQ) + } + if len(tauP) < minmn { + panic(badTauP) + } + ws := max(m, n) + if lwork < max(1, ws) { + panic(badWork) + } + if len(work) < lwork { + panic(badWork) + } + var nx int + if nb > 1 && nb < minmn { + nx = max(nb, impl.Ilaenv(3, "DGEBRD", " ", m, n, -1, -1)) + if nx < minmn { + ws = (m + n) * nb + if lwork < ws { + nbmin := impl.Ilaenv(2, "DGEBRD", " ", m, n, -1, -1) + if lwork >= (m+n)*nbmin { + nb = lwork / (m + n) + } else { + nb = minmn + nx = minmn + } + } + } + } else { + nx = minmn + } + bi := blas64.Implementation() + ldworkx := nb + ldworky := nb + var i int + // Netlib lapack has minmn - nx, but this makes the last nx rows (which by + // default is large) be unblocked. As written here, the blocking is more + // consistent. + for i = 0; i < minmn-nb; i += nb { + // Reduce rows and columns i:i+nb to bidiagonal form and return + // the matrices X and Y which are needed to update the unreduced + // part of the matrix. + // X is stored in the first m rows of work, y in the next rows. + x := work[:m*ldworkx] + y := work[m*ldworkx:] + impl.Dlabrd(m-i, n-i, nb, a[i*lda+i:], lda, + d[i:], e[i:], tauQ[i:], tauP[i:], + x, ldworkx, y, ldworky) + + // Update the trailing submatrix A[i+nb:m,i+nb:n], using an update + // of the form A := A - V*Y**T - X*U**T + bi.Dgemm(blas.NoTrans, blas.Trans, m-i-nb, n-i-nb, nb, + -1, a[(i+nb)*lda+i:], lda, y[nb*ldworky:], ldworky, + 1, a[(i+nb)*lda+i+nb:], lda) + + bi.Dgemm(blas.NoTrans, blas.NoTrans, m-i-nb, n-i-nb, nb, + -1, x[nb*ldworkx:], ldworkx, a[i*lda+i+nb:], lda, + 1, a[(i+nb)*lda+i+nb:], lda) + + // Copy diagonal and off-diagonal elements of B back into A. + if m >= n { + for j := i; j < i+nb; j++ { + a[j*lda+j] = d[j] + a[j*lda+j+1] = e[j] + } + } else { + for j := i; j < i+nb; j++ { + a[j*lda+j] = d[j] + a[(j+1)*lda+j] = e[j] + } + } + } + // Use unblocked code to reduce the remainder of the matrix. + impl.Dgebd2(m-i, n-i, a[i*lda+i:], lda, d[i:], e[i:], tauQ[i:], tauP[i:], work) + work[0] = float64(lworkOpt) +} diff --git a/lapack/native/dgecon.go b/lapack/native/dgecon.go new file mode 100644 index 00000000..819490ee --- /dev/null +++ b/lapack/native/dgecon.go @@ -0,0 +1,81 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dgecon estimates the reciprocal of the condition number of the n×n matrix A +// given the LU decomposition of the matrix. The condition number computed may +// be based on the 1-norm or the ∞-norm. +// +// The slice a contains the result of the LU decomposition of A as computed by Dgetrf. +// +// anorm is the corresponding 1-norm or ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 4*n and Dgecon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dgecon will panic otherwise. +func (impl Implementation) Dgecon(norm lapack.MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 { + checkMatrix(n, n, a, lda) + if norm != lapack.MaxColumnSum && norm != lapack.MaxRowSum { + panic(badNorm) + } + if len(work) < 4*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + + if n == 0 { + return 1 + } else if anorm == 0 { + return 0 + } + + bi := blas64.Implementation() + var rcond, ainvnm float64 + var kase int + var normin bool + isave := new([3]int) + onenrm := norm == lapack.MaxColumnSum + smlnum := dlamchS + kase1 := 2 + if onenrm { + kase1 = 1 + } + for { + ainvnm, kase = impl.Dlacn2(n, work[n:], work, iwork, ainvnm, kase, isave) + if kase == 0 { + if ainvnm != 0 { + rcond = (1 / ainvnm) / anorm + } + return rcond + } + var sl, su float64 + if kase == kase1 { + sl = impl.Dlatrs(blas.Lower, blas.NoTrans, blas.Unit, normin, n, a, lda, work, work[2*n:]) + su = impl.Dlatrs(blas.Upper, blas.NoTrans, blas.NonUnit, normin, n, a, lda, work, work[3*n:]) + } else { + su = impl.Dlatrs(blas.Upper, blas.Trans, blas.NonUnit, normin, n, a, lda, work, work[3*n:]) + sl = impl.Dlatrs(blas.Lower, blas.Trans, blas.Unit, normin, n, a, lda, work, work[2*n:]) + } + scale := sl * su + normin = true + if scale != 1 { + ix := bi.Idamax(n, work, 1) + if scale == 0 || scale < math.Abs(work[ix])*smlnum { + return rcond + } + impl.Drscl(n, scale, work, 1) + } + } +} diff --git a/lapack/native/dgeev.go b/lapack/native/dgeev.go new file mode 100644 index 00000000..e10a9e36 --- /dev/null +++ b/lapack/native/dgeev.go @@ -0,0 +1,284 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dgeev computes the eigenvalues and, optionally, the left and/or right +// eigenvectors for an n×n real nonsymmetric matrix A. +// +// The right eigenvector v_j of A corresponding to an eigenvalue λ_j +// is defined by +// A v_j = λ_j v_j, +// and the left eigenvector u_j corresponding to an eigenvalue λ_j is defined by +// u_j^H A = λ_j u_j^H, +// where u_j^H is the conjugate transpose of u_j. +// +// On return, A will be overwritten and the left and right eigenvectors will be +// stored, respectively, in the columns of the n×n matrices VL and VR in the +// same order as their eigenvalues. If the j-th eigenvalue is real, then +// u_j = VL[:,j], +// v_j = VR[:,j], +// and if it is not real, then j and j+1 form a complex conjugate pair and the +// eigenvectors can be recovered as +// u_j = VL[:,j] + i*VL[:,j+1], +// u_{j+1} = VL[:,j] - i*VL[:,j+1], +// v_j = VR[:,j] + i*VR[:,j+1], +// v_{j+1} = VR[:,j] - i*VR[:,j+1], +// where i is the imaginary unit. The computed eigenvectors are normalized to +// have Euclidean norm equal to 1 and largest component real. +// +// Left eigenvectors will be computed only if jobvl == lapack.ComputeLeftEV, +// otherwise jobvl must be lapack.None. Right eigenvectors will be computed +// only if jobvr == lapack.ComputeRightEV, otherwise jobvr must be lapack.None. +// For other values of jobvl and jobvr Dgeev will panic. +// +// wr and wi contain the real and imaginary parts, respectively, of the computed +// eigenvalues. Complex conjugate pairs of eigenvalues appear consecutively with +// the eigenvalue having the positive imaginary part first. +// wr and wi must have length n, and Dgeev will panic otherwise. +// +// work must have length at least lwork and lwork must be at least max(1,4*n) if +// the left or right eigenvectors are computed, and at least max(1,3*n) if no +// eigenvectors are computed. For good performance, lwork must generally be +// larger. On return, optimal value of lwork will be stored in work[0]. +// +// If lwork == -1, instead of performing Dgeev, the function only calculates the +// optimal vaule of lwork and stores it into work[0]. +// +// On return, first is the index of the first valid eigenvalue. If first == 0, +// all eigenvalues and eigenvectors have been computed. If first is positive, +// Dgeev failed to compute all the eigenvalues, no eigenvectors have been +// computed and wr[first:] and wi[first:] contain those eigenvalues which have +// converged. +func (impl Implementation) Dgeev(jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, n int, a []float64, lda int, wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) (first int) { + var wantvl bool + switch jobvl { + default: + panic("lapack: invalid LeftEVJob") + case lapack.ComputeLeftEV: + wantvl = true + case lapack.None: + } + var wantvr bool + switch jobvr { + default: + panic("lapack: invalid RightEVJob") + case lapack.ComputeRightEV: + wantvr = true + case lapack.None: + } + switch { + case n < 0: + panic(nLT0) + case len(work) < lwork: + panic(shortWork) + } + var minwrk int + if wantvl || wantvr { + minwrk = max(1, 4*n) + } else { + minwrk = max(1, 3*n) + } + if lwork != -1 { + checkMatrix(n, n, a, lda) + if wantvl { + checkMatrix(n, n, vl, ldvl) + } + if wantvr { + checkMatrix(n, n, vr, ldvr) + } + switch { + case len(wr) != n: + panic("lapack: bad length of wr") + case len(wi) != n: + panic("lapack: bad length of wi") + case lwork < minwrk: + panic(badWork) + } + } + + // Quick return if possible. + if n == 0 { + work[0] = 1 + return 0 + } + + maxwrk := 2*n + n*impl.Ilaenv(1, "DGEHRD", " ", n, 1, n, 0) + if wantvl || wantvr { + maxwrk = max(maxwrk, 2*n+(n-1)*impl.Ilaenv(1, "DORGHR", " ", n, 1, n, -1)) + impl.Dhseqr(lapack.EigenvaluesAndSchur, lapack.OriginalEV, n, 0, n-1, + nil, 1, nil, nil, nil, 1, work, -1) + maxwrk = max(maxwrk, max(n+1, n+int(work[0]))) + side := lapack.LeftEV + if wantvr { + side = lapack.RightEV + } + impl.Dtrevc3(side, lapack.AllEVMulQ, nil, n, nil, 1, nil, 1, nil, 1, + n, work, -1) + maxwrk = max(maxwrk, n+int(work[0])) + maxwrk = max(maxwrk, 4*n) + } else { + impl.Dhseqr(lapack.EigenvaluesOnly, lapack.None, n, 0, n-1, + nil, 1, nil, nil, nil, 1, work, -1) + maxwrk = max(maxwrk, max(n+1, n+int(work[0]))) + } + maxwrk = max(maxwrk, minwrk) + + if lwork == -1 { + work[0] = float64(maxwrk) + return 0 + } + + // Get machine constants. + smlnum := math.Sqrt(dlamchS) / dlamchP + bignum := 1 / smlnum + + // Scale A if max element outside range [smlnum,bignum]. + anrm := impl.Dlange(lapack.MaxAbs, n, n, a, lda, nil) + var scalea bool + var cscale float64 + if 0 < anrm && anrm < smlnum { + scalea = true + cscale = smlnum + } else if anrm > bignum { + scalea = true + cscale = bignum + } + if scalea { + impl.Dlascl(lapack.General, 0, 0, anrm, cscale, n, n, a, lda) + } + + // Balance the matrix. + workbal := work[:n] + ilo, ihi := impl.Dgebal(lapack.PermuteScale, n, a, lda, workbal) + + // Reduce to upper Hessenberg form. + iwrk := 2 * n + tau := work[n : iwrk-1] + impl.Dgehrd(n, ilo, ihi, a, lda, tau, work[iwrk:], lwork-iwrk) + + var side lapack.EVSide + if wantvl { + side = lapack.LeftEV + // Copy Householder vectors to VL. + impl.Dlacpy(blas.Lower, n, n, a, lda, vl, ldvl) + // Generate orthogonal matrix in VL. + impl.Dorghr(n, ilo, ihi, vl, ldvl, tau, work[iwrk:], lwork-iwrk) + // Perform QR iteration, accumulating Schur vectors in VL. + iwrk = n + first = impl.Dhseqr(lapack.EigenvaluesAndSchur, lapack.OriginalEV, n, ilo, ihi, + a, lda, wr, wi, vl, ldvl, work[iwrk:], lwork-iwrk) + if wantvr { + // Want left and right eigenvectors. + // Copy Schur vectors to VR. + side = lapack.RightLeftEV + impl.Dlacpy(blas.All, n, n, vl, ldvl, vr, ldvr) + } + } else if wantvr { + side = lapack.RightEV + // Copy Householder vectors to VR. + impl.Dlacpy(blas.Lower, n, n, a, lda, vr, ldvr) + // Generate orthogonal matrix in VR. + impl.Dorghr(n, ilo, ihi, vr, ldvr, tau, work[iwrk:], lwork-iwrk) + // Perform QR iteration, accumulating Schur vectors in VR. + iwrk = n + first = impl.Dhseqr(lapack.EigenvaluesAndSchur, lapack.OriginalEV, n, ilo, ihi, + a, lda, wr, wi, vr, ldvr, work[iwrk:], lwork-iwrk) + } else { + // Compute eigenvalues only. + iwrk = n + first = impl.Dhseqr(lapack.EigenvaluesOnly, lapack.None, n, ilo, ihi, + a, lda, wr, wi, nil, 1, work[iwrk:], lwork-iwrk) + } + + if first > 0 { + if scalea { + // Undo scaling. + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, n-first, 1, wr[first:], 1) + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, n-first, 1, wi[first:], 1) + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, ilo, 1, wr, 1) + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, ilo, 1, wi, 1) + } + work[0] = float64(maxwrk) + return first + } + + if wantvl || wantvr { + // Compute left and/or right eigenvectors. + impl.Dtrevc3(side, lapack.AllEVMulQ, nil, n, + a, lda, vl, ldvl, vr, ldvr, n, work[iwrk:], lwork-iwrk) + } + bi := blas64.Implementation() + if wantvl { + // Undo balancing of left eigenvectors. + impl.Dgebak(lapack.PermuteScale, lapack.LeftEV, n, ilo, ihi, workbal, n, vl, ldvl) + // Normalize left eigenvectors and make largest component real. + for i, wii := range wi { + if wii < 0 { + continue + } + if wii == 0 { + scl := 1 / bi.Dnrm2(n, vl[i:], ldvl) + bi.Dscal(n, scl, vl[i:], ldvl) + continue + } + scl := 1 / impl.Dlapy2(bi.Dnrm2(n, vl[i:], ldvl), bi.Dnrm2(n, vl[i+1:], ldvl)) + bi.Dscal(n, scl, vl[i:], ldvl) + bi.Dscal(n, scl, vl[i+1:], ldvl) + for k := 0; k < n; k++ { + vi := vl[k*ldvl+i] + vi1 := vl[k*ldvl+i+1] + work[iwrk+k] = vi*vi + vi1*vi1 + } + k := bi.Idamax(n, work[iwrk:iwrk+n], 1) + cs, sn, _ := impl.Dlartg(vl[k*ldvl+i], vl[k*ldvl+i+1]) + bi.Drot(n, vl[i:], ldvl, vl[i+1:], ldvl, cs, sn) + vl[k*ldvl+i+1] = 0 + } + } + if wantvr { + // Undo balancing of right eigenvectors. + impl.Dgebak(lapack.PermuteScale, lapack.RightEV, n, ilo, ihi, workbal, n, vr, ldvr) + // Normalize right eigenvectors and make largest component real. + for i, wii := range wi { + if wii < 0 { + continue + } + if wii == 0 { + scl := 1 / bi.Dnrm2(n, vr[i:], ldvr) + bi.Dscal(n, scl, vr[i:], ldvr) + continue + } + scl := 1 / impl.Dlapy2(bi.Dnrm2(n, vr[i:], ldvr), bi.Dnrm2(n, vr[i+1:], ldvr)) + bi.Dscal(n, scl, vr[i:], ldvr) + bi.Dscal(n, scl, vr[i+1:], ldvr) + for k := 0; k < n; k++ { + vi := vr[k*ldvr+i] + vi1 := vr[k*ldvr+i+1] + work[iwrk+k] = vi*vi + vi1*vi1 + } + k := bi.Idamax(n, work[iwrk:iwrk+n], 1) + cs, sn, _ := impl.Dlartg(vr[k*ldvr+i], vr[k*ldvr+i+1]) + bi.Drot(n, vr[i:], ldvr, vr[i+1:], ldvr, cs, sn) + vr[k*ldvr+i+1] = 0 + } + } + + if scalea { + // Undo scaling. + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, n-first, 1, wr[first:], 1) + impl.Dlascl(lapack.General, 0, 0, cscale, anrm, n-first, 1, wi[first:], 1) + } + + work[0] = float64(maxwrk) + return first +} diff --git a/lapack/native/dgehd2.go b/lapack/native/dgehd2.go new file mode 100644 index 00000000..57700797 --- /dev/null +++ b/lapack/native/dgehd2.go @@ -0,0 +1,84 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgehd2 reduces a block of a general n×n matrix A to upper Hessenberg form H +// by an orthogonal similarity transformation Q^T * A * Q = H. +// +// The matrix Q is represented as a product of (ihi-ilo) elementary +// reflectors +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// Each H_i has the form +// H_i = I - tau[i] * v * v^T +// where v is a real vector with v[0:i+1] = 0, v[i+1] = 1 and v[ihi+1:n] = 0. +// v[i+2:ihi+1] is stored on exit in A[i+2:ihi+1,i]. +// +// On entry, a contains the n×n general matrix to be reduced. On return, the +// upper triangle and the first subdiagonal of A are overwritten with the upper +// Hessenberg matrix H, and the elements below the first subdiagonal, with the +// slice tau, represent the orthogonal matrix Q as a product of elementary +// reflectors. +// +// The contents of A are illustrated by the following example, with n = 7, ilo = +// 1 and ihi = 5. +// On entry, +// [ a a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a ] +// on return, +// [ a a h h h h a ] +// [ a h h h h a ] +// [ h h h h h h ] +// [ v1 h h h h h ] +// [ v1 v2 h h h h ] +// [ v1 v2 v3 h h h ] +// [ a ] +// where a denotes an element of the original matrix A, h denotes a +// modified element of the upper Hessenberg matrix H, and vi denotes an +// element of the vector defining H_i. +// +// ilo and ihi determine the block of A that will be reduced to upper Hessenberg +// form. It must hold that 0 <= ilo <= ihi <= max(0, n-1), otherwise Dgehd2 will +// panic. +// +// On return, tau will contain the scalar factors of the elementary reflectors. +// It must have length equal to n-1, otherwise Dgehd2 will panic. +// +// work must have length at least n, otherwise Dgehd2 will panic. +// +// Dgehd2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgehd2(n, ilo, ihi int, a []float64, lda int, tau, work []float64) { + checkMatrix(n, n, a, lda) + switch { + case ilo < 0 || ilo > max(0, n-1): + panic(badIlo) + case ihi < min(ilo, n-1) || ihi >= n: + panic(badIhi) + case len(tau) != n-1: + panic(badTau) + case len(work) < n: + panic(badWork) + } + + for i := ilo; i < ihi; i++ { + // Compute elementary reflector H_i to annihilate A[i+2:ihi+1,i]. + var aii float64 + aii, tau[i] = impl.Dlarfg(ihi-i, a[(i+1)*lda+i], a[min(i+2, n-1)*lda+i:], lda) + a[(i+1)*lda+i] = 1 + + // Apply H_i to A[0:ihi+1,i+1:ihi+1] from the right. + impl.Dlarf(blas.Right, ihi+1, ihi-i, a[(i+1)*lda+i:], lda, tau[i], a[i+1:], lda, work) + + // Apply H_i to A[i+1:ihi+1,i+1:n] from the left. + impl.Dlarf(blas.Left, ihi-i, n-i-1, a[(i+1)*lda+i:], lda, tau[i], a[(i+1)*lda+i+1:], lda, work) + a[(i+1)*lda+i] = aii + } +} diff --git a/lapack/native/dgehrd.go b/lapack/native/dgehrd.go new file mode 100644 index 00000000..1bf4680d --- /dev/null +++ b/lapack/native/dgehrd.go @@ -0,0 +1,183 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dgehrd reduces a block of a real n×n general matrix A to upper Hessenberg +// form H by an orthogonal similarity transformation Q^T * A * Q = H. +// +// The matrix Q is represented as a product of (ihi-ilo) elementary +// reflectors +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// Each H_i has the form +// H_i = I - tau[i] * v * v^T +// where v is a real vector with v[0:i+1] = 0, v[i+1] = 1 and v[ihi+1:n] = 0. +// v[i+2:ihi+1] is stored on exit in A[i+2:ihi+1,i]. +// +// On entry, a contains the n×n general matrix to be reduced. On return, the +// upper triangle and the first subdiagonal of A will be overwritten with the +// upper Hessenberg matrix H, and the elements below the first subdiagonal, with +// the slice tau, represent the orthogonal matrix Q as a product of elementary +// reflectors. +// +// The contents of a are illustrated by the following example, with n = 7, ilo = +// 1 and ihi = 5. +// On entry, +// [ a a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a a a a a a ] +// [ a ] +// on return, +// [ a a h h h h a ] +// [ a h h h h a ] +// [ h h h h h h ] +// [ v1 h h h h h ] +// [ v1 v2 h h h h ] +// [ v1 v2 v3 h h h ] +// [ a ] +// where a denotes an element of the original matrix A, h denotes a +// modified element of the upper Hessenberg matrix H, and vi denotes an +// element of the vector defining H_i. +// +// ilo and ihi determine the block of A that will be reduced to upper Hessenberg +// form. It must hold that 0 <= ilo <= ihi < n if n > 0, and ilo == 0 and ihi == +// -1 if n == 0, otherwise Dgehrd will panic. +// +// On return, tau will contain the scalar factors of the elementary reflectors. +// Elements tau[:ilo] and tau[ihi:] will be set to zero. tau must have length +// equal to n-1 if n > 0, otherwise Dgehrd will panic. +// +// work must have length at least lwork and lwork must be at least max(1,n), +// otherwise Dgehrd will panic. On return, work[0] contains the optimal value of +// lwork. +// +// If lwork == -1, instead of performing Dgehrd, only the optimal value of lwork +// will be stored in work[0]. +// +// Dgehrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgehrd(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) { + switch { + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + case len(work) < lwork: + panic(shortWork) + } + if lwork != -1 { + checkMatrix(n, n, a, lda) + if len(tau) != n-1 && n > 0 { + panic(badTau) + } + } + + const ( + nbmax = 64 + ldt = nbmax + 1 + tsize = ldt * nbmax + ) + // Compute the workspace requirements. + nb := min(nbmax, impl.Ilaenv(1, "DGEHRD", " ", n, ilo, ihi, -1)) + lwkopt := n*nb + tsize + if lwork == -1 { + work[0] = float64(lwkopt) + return + } + + // Set tau[:ilo] and tau[ihi:] to zero. + for i := 0; i < ilo; i++ { + tau[i] = 0 + } + for i := ihi; i < n-1; i++ { + tau[i] = 0 + } + + // Quick return if possible. + nh := ihi - ilo + 1 + if nh <= 1 { + work[0] = 1 + return + } + + // Determine the block size. + nbmin := 2 + var nx int + if 1 < nb && nb < nh { + // Determine when to cross over from blocked to unblocked code + // (last block is always handled by unblocked code). + nx = max(nb, impl.Ilaenv(3, "DGEHRD", " ", n, ilo, ihi, -1)) + if nx < nh { + // Determine if workspace is large enough for blocked code. + if lwork < n*nb+tsize { + // Not enough workspace to use optimal nb: + // determine the minimum value of nb, and reduce + // nb or force use of unblocked code. + nbmin = max(2, impl.Ilaenv(2, "DGEHRD", " ", n, ilo, ihi, -1)) + if lwork >= n*nbmin+tsize { + nb = (lwork - tsize) / n + } else { + nb = 1 + } + } + } + } + ldwork := nb // work is used as an n×nb matrix. + + var i int + if nb < nbmin || nh <= nb { + // Use unblocked code below. + i = ilo + } else { + // Use blocked code. + bi := blas64.Implementation() + iwt := n * nb // Size of the matrix Y and index where the matrix T starts in work. + for i = ilo; i < ihi-nx; i += nb { + ib := min(nb, ihi-i) + + // Reduce columns [i:i+ib] to Hessenberg form, returning the + // matrices V and T of the block reflector H = I - V*T*V^T + // which performs the reduction, and also the matrix Y = A*V*T. + impl.Dlahr2(ihi+1, i+1, ib, a[i:], lda, tau[i:], work[iwt:], ldt, work, ldwork) + + // Apply the block reflector H to A[:ihi+1,i+ib:ihi+1] from the + // right, computing A := A - Y * V^T. V[i+ib,i+ib-1] must be set + // to 1. + ei := a[(i+ib)*lda+i+ib-1] + a[(i+ib)*lda+i+ib-1] = 1 + bi.Dgemm(blas.NoTrans, blas.Trans, ihi+1, ihi-i-ib+1, ib, + -1, work, ldwork, + a[(i+ib)*lda+i:], lda, + 1, a[i+ib:], lda) + a[(i+ib)*lda+i+ib-1] = ei + + // Apply the block reflector H to A[0:i+1,i+1:i+ib-1] from the + // right. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, i+1, ib-1, + 1, a[(i+1)*lda+i:], lda, work, ldwork) + for j := 0; j <= ib-2; j++ { + bi.Daxpy(i+1, -1, work[j:], ldwork, a[i+j+1:], lda) + } + + // Apply the block reflector H to A[i+1:ihi+1,i+ib:n] from the + // left. + impl.Dlarfb(blas.Left, blas.Trans, lapack.Forward, lapack.ColumnWise, + ihi-i, n-i-ib, ib, + a[(i+1)*lda+i:], lda, work[iwt:], ldt, a[(i+1)*lda+i+ib:], lda, work, ldwork) + } + } + // Use unblocked code to reduce the rest of the matrix. + impl.Dgehd2(n, i, ihi, a, lda, tau, work) + work[0] = float64(lwkopt) +} diff --git a/lapack/native/dgelq2.go b/lapack/native/dgelq2.go new file mode 100644 index 00000000..648be10a --- /dev/null +++ b/lapack/native/dgelq2.go @@ -0,0 +1,49 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgelq2 computes the LQ factorization of the m×n matrix A. +// +// In an LQ factorization, L is a lower triangular m×n matrix, and Q is an n×n +// orthonormal matrix. +// +// a is modified to contain the information to construct L and Q. +// The lower triangle of a contains the matrix L. The upper triangular elements +// (not including the diagonal) contain the elementary reflectors. tau is modified +// to contain the reflector scales. tau must have length of at least k = min(m,n) +// and this function will panic otherwise. +// +// See Dgeqr2 for a description of the elementary reflectors and orthonormal +// matrix Q. Q is constructed as a product of these elementary reflectors, +// Q = H_{k-1} * ... * H_1 * H_0. +// +// work is temporary storage of length at least m and this function will panic otherwise. +// +// Dgelq2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgelq2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if len(work) < m { + panic(badWork) + } + for i := 0; i < k; i++ { + a[i*lda+i], tau[i] = impl.Dlarfg(n-i, a[i*lda+i], a[i*lda+min(i+1, n-1):], 1) + if i < m-1 { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(blas.Right, m-i-1, n-i, + a[i*lda+i:], 1, + tau[i], + a[(i+1)*lda+i:], lda, + work) + a[i*lda+i] = aii + } + } +} diff --git a/lapack/native/dgelqf.go b/lapack/native/dgelqf.go new file mode 100644 index 00000000..4c124ba5 --- /dev/null +++ b/lapack/native/dgelqf.go @@ -0,0 +1,84 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgelqf computes the LQ factorization of the m×n matrix A using a blocked +// algorithm. See the documentation for Dgelq2 for a description of the +// parameters at entry and exit. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m, and this function will panic otherwise. +// Dgelqf is a blocked LQ factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgelqf, +// the optimal work length will be stored into work[0]. +// +// tau must have length at least min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + nb := impl.Ilaenv(1, "DGELQF", " ", m, n, -1, -1) + lworkopt := m * max(nb, 1) + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + checkMatrix(m, n, a, lda) + if len(work) < lwork { + panic(shortWork) + } + if lwork < m { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if k == 0 { + return + } + // Find the optimal blocking size based on the size of available memory + // and optimal machine parameters. + nbmin := 2 + var nx int + iws := m + ldwork := nb + if nb > 1 && k > nb { + nx = max(0, impl.Ilaenv(3, "DGELQF", " ", m, n, -1, -1)) + if nx < k { + iws = m * nb + if lwork < iws { + nb = lwork / m + nbmin = max(2, impl.Ilaenv(2, "DGELQF", " ", m, n, -1, -1)) + } + } + } + // Computed blocked LQ factorization. + var i int + if nb >= nbmin && nb < k && nx < k { + for i = 0; i < k-nx; i += nb { + ib := min(k-i, nb) + impl.Dgelq2(ib, n-i, a[i*lda+i:], lda, tau[i:], work) + if i+ib < m { + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + impl.Dlarfb(blas.Right, blas.NoTrans, lapack.Forward, lapack.RowWise, + m-i-ib, n-i, ib, + a[i*lda+i:], lda, + work, ldwork, + a[(i+ib)*lda+i:], lda, + work[ib*ldwork:], ldwork) + } + } + } + // Perform unblocked LQ factorization on the remainder. + if i < k { + impl.Dgelq2(m-i, n-i, a[i*lda+i:], lda, tau[i:], work) + } +} diff --git a/lapack/native/dgels.go b/lapack/native/dgels.go new file mode 100644 index 00000000..daed361a --- /dev/null +++ b/lapack/native/dgels.go @@ -0,0 +1,200 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgels finds a minimum-norm solution based on the matrices A and B using the +// QR or LQ factorization. Dgels returns false if the matrix +// A is singular, and true if this solution was successfully found. +// +// The minimization problem solved depends on the input parameters. +// +// 1. If m >= n and trans == blas.NoTrans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// 2. If m < n and trans == blas.NoTrans, Dgels finds the minimum norm solution of +// A * X = B. +// 3. If m >= n and trans == blas.Trans, Dgels finds the minimum norm solution of +// A^T * X = B. +// 4. If m < n and trans == blas.Trans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// Note that the least-squares solutions (cases 1 and 3) perform the minimization +// per column of B. This is not the same as finding the minimum-norm matrix. +// +// The matrix A is a general matrix of size m×n and is modified during this call. +// The input matrix B is of size max(m,n)×nrhs, and serves two purposes. On entry, +// the elements of b specify the input matrix B. B has size m×nrhs if +// trans == blas.NoTrans, and n×nrhs if trans == blas.Trans. On exit, the +// leading submatrix of b contains the solution vectors X. If trans == blas.NoTrans, +// this submatrix is of size n×nrhs, and of size m×nrhs otherwise. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(m,n) + max(m,n,nrhs), and this function will panic +// otherwise. A longer work will enable blocked algorithms to be called. +// In the special case that lwork == -1, work[0] will be set to the optimal working +// length. +func (impl Implementation) Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool { + notran := trans == blas.NoTrans + checkMatrix(m, n, a, lda) + mn := min(m, n) + checkMatrix(max(m, n), nrhs, b, ldb) + + // Find optimal block size. + tpsd := true + if notran { + tpsd = false + } + var nb int + if m >= n { + nb = impl.Ilaenv(1, "DGEQRF", " ", m, n, -1, -1) + if tpsd { + nb = max(nb, impl.Ilaenv(1, "DORMQR", "LN", m, nrhs, n, -1)) + } else { + nb = max(nb, impl.Ilaenv(1, "DORMQR", "LT", m, nrhs, n, -1)) + } + } else { + nb = impl.Ilaenv(1, "DGELQF", " ", m, n, -1, -1) + if tpsd { + nb = max(nb, impl.Ilaenv(1, "DORMLQ", "LT", n, nrhs, m, -1)) + } else { + nb = max(nb, impl.Ilaenv(1, "DORMLQ", "LN", n, nrhs, m, -1)) + } + } + if lwork == -1 { + work[0] = float64(max(1, mn+max(mn, nrhs)*nb)) + return true + } + + if len(work) < lwork { + panic(shortWork) + } + if lwork < mn+max(mn, nrhs) { + panic(badWork) + } + if m == 0 || n == 0 || nrhs == 0 { + impl.Dlaset(blas.All, max(m, n), nrhs, 0, 0, b, ldb) + return true + } + + // Scale the input matrices if they contain extreme values. + smlnum := dlamchS / dlamchP + bignum := 1 / smlnum + anrm := impl.Dlange(lapack.MaxAbs, m, n, a, lda, nil) + var iascl int + if anrm > 0 && anrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, anrm, smlnum, m, n, a, lda) + iascl = 1 + } else if anrm > bignum { + impl.Dlascl(lapack.General, 0, 0, anrm, bignum, m, n, a, lda) + } else if anrm == 0 { + // Matrix is all zeros. + impl.Dlaset(blas.All, max(m, n), nrhs, 0, 0, b, ldb) + return true + } + brow := m + if tpsd { + brow = n + } + bnrm := impl.Dlange(lapack.MaxAbs, brow, nrhs, b, ldb, nil) + ibscl := 0 + if bnrm > 0 && bnrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, bnrm, smlnum, brow, nrhs, b, ldb) + ibscl = 1 + } else if bnrm > bignum { + impl.Dlascl(lapack.General, 0, 0, bnrm, bignum, brow, nrhs, b, ldb) + ibscl = 2 + } + + // Solve the minimization problem using a QR or an LQ decomposition. + var scllen int + if m >= n { + impl.Dgeqrf(m, n, a, lda, work, work[mn:], lwork-mn) + if !tpsd { + impl.Dormqr(blas.Left, blas.Trans, m, nrhs, n, + a, lda, + work[:n], + b, ldb, + work[mn:], lwork-mn) + ok := impl.Dtrtrs(blas.Upper, blas.NoTrans, blas.NonUnit, n, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + scllen = n + } else { + ok := impl.Dtrtrs(blas.Upper, blas.Trans, blas.NonUnit, n, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + for i := n; i < m; i++ { + for j := 0; j < nrhs; j++ { + b[i*ldb+j] = 0 + } + } + impl.Dormqr(blas.Left, blas.NoTrans, m, nrhs, n, + a, lda, + work[:n], + b, ldb, + work[mn:], lwork-mn) + scllen = m + } + } else { + impl.Dgelqf(m, n, a, lda, work, work[mn:], lwork-mn) + if !tpsd { + ok := impl.Dtrtrs(blas.Lower, blas.NoTrans, blas.NonUnit, + m, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + for i := m; i < n; i++ { + for j := 0; j < nrhs; j++ { + b[i*ldb+j] = 0 + } + } + impl.Dormlq(blas.Left, blas.Trans, n, nrhs, m, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + scllen = n + } else { + impl.Dormlq(blas.Left, blas.NoTrans, n, nrhs, m, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + ok := impl.Dtrtrs(blas.Lower, blas.Trans, blas.NonUnit, + m, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + } + } + + // Adjust answer vector based on scaling. + if iascl == 1 { + impl.Dlascl(lapack.General, 0, 0, anrm, smlnum, scllen, nrhs, b, ldb) + } + if iascl == 2 { + impl.Dlascl(lapack.General, 0, 0, anrm, bignum, scllen, nrhs, b, ldb) + } + if ibscl == 1 { + impl.Dlascl(lapack.General, 0, 0, smlnum, bnrm, scllen, nrhs, b, ldb) + } + if ibscl == 2 { + impl.Dlascl(lapack.General, 0, 0, bignum, bnrm, scllen, nrhs, b, ldb) + } + return true +} diff --git a/lapack/native/dgeql2.go b/lapack/native/dgeql2.go new file mode 100644 index 00000000..b5fad21a --- /dev/null +++ b/lapack/native/dgeql2.go @@ -0,0 +1,45 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgeql2 computes the QL factorization of the m×n matrix A. That is, Dgeql2 +// computes Q and L such that +// A = Q * L +// where Q is an m×m orthonormal matrix and L is a lower trapezoidal matrix. +// +// Q is represented as a product of elementary reflectors, +// Q = H_{k-1} * ... * H_1 * H_0 +// where k = min(m,n) and each H_i has the form +// H_i = I - tau[i] * v_i * v_i^T +// Vector v_i has v[m-k+i+1:m] = 0, v[m-k+i] = 1, and v[:m-k+i+1] is stored on +// exit in A[0:m-k+i-1, n-k+i]. +// +// tau must have length at least min(m,n), and Dgeql2 will panic otherwise. +// +// work is temporary memory storage and must have length at least n. +// +// Dgeql2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgeql2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + if len(tau) < min(m, n) { + panic(badTau) + } + if len(work) < n { + panic(badWork) + } + k := min(m, n) + var aii float64 + for i := k - 1; i >= 0; i-- { + // Generate elementary reflector H_i to annihilate A[0:m-k+i-1, n-k+i]. + aii, tau[i] = impl.Dlarfg(m-k+i+1, a[(m-k+i)*lda+n-k+i], a[n-k+i:], lda) + + // Apply H_i to A[0:m-k+i, 0:n-k+i-1] from the left. + a[(m-k+i)*lda+n-k+i] = 1 + impl.Dlarf(blas.Left, m-k+i+1, n-k+i, a[n-k+i:], lda, tau[i], a, lda, work) + a[(m-k+i)*lda+n-k+i] = aii + } +} diff --git a/lapack/native/dgeqp3.go b/lapack/native/dgeqp3.go new file mode 100644 index 00000000..a53ca2ca --- /dev/null +++ b/lapack/native/dgeqp3.go @@ -0,0 +1,174 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dgeqp3 computes a QR factorization with column pivoting of the +// m×n matrix A: A*P = Q*R using Level 3 BLAS. +// +// The matrix Q is represented as a product of elementary reflectors +// Q = H_0 H_1 . . . H_{k-1}, where k = min(m,n). +// Each H_i has the form +// H_i = I - tau * v * v^T +// where tau and v are real vectors with v[0:i-1] = 0 and v[i] = 1; +// v[i:m] is stored on exit in A[i:m, i], and tau in tau[i]. +// +// jpvt specifies a column pivot to be applied to A. If +// jpvt[j] is at least zero, the jth column of A is permuted +// to the front of A*P (a leading column), if jpvt[j] is -1 +// the jth column of A is a free column. If jpvt[j] < -1, Dgeqp3 +// will panic. On return, jpvt holds the permutation that was +// applied; the jth column of A*P was the jpvt[j] column of A. +// jpvt must have length n or Dgeqp3 will panic. +// +// tau holds the scalar factors of the elementary reflectors. +// It must have length min(m, n), otherwise Dgeqp3 will panic. +// +// work must have length at least max(1,lwork), and lwork must be at least +// 3*n+1, otherwise Dgeqp3 will panic. For optimal performance lwork must +// be at least 2*n+(n+1)*nb, where nb is the optimal blocksize. On return, +// work[0] will contain the optimal value of lwork. +// +// If lwork == -1, instead of performing Dgeqp3, only the optimal value of lwork +// will be stored in work[0]. +// +// Dgeqp3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgeqp3(m, n int, a []float64, lda int, jpvt []int, tau, work []float64, lwork int) { + const ( + inb = 1 + inbmin = 2 + ixover = 3 + ) + checkMatrix(m, n, a, lda) + + if len(jpvt) != n { + panic(badIpiv) + } + for _, v := range jpvt { + if v < -1 || n <= v { + panic("lapack: jpvt element out of range") + } + } + minmn := min(m, n) + if len(work) < max(1, lwork) { + panic(badWork) + } + + var iws, lwkopt, nb int + if minmn == 0 { + iws = 1 + lwkopt = 1 + } else { + iws = 3*n + 1 + nb = impl.Ilaenv(inb, "DGEQRF", " ", m, n, -1, -1) + lwkopt = 2*n + (n+1)*nb + } + work[0] = float64(lwkopt) + + if lwork == -1 { + return + } + + if len(tau) < minmn { + panic(badTau) + } + + bi := blas64.Implementation() + + // Move initial columns up front. + var nfxd int + for j := 0; j < n; j++ { + if jpvt[j] == -1 { + jpvt[j] = j + continue + } + if j != nfxd { + bi.Dswap(m, a[j:], lda, a[nfxd:], lda) + jpvt[j], jpvt[nfxd] = jpvt[nfxd], j + } else { + jpvt[j] = j + } + nfxd++ + } + + // Factorize nfxd columns. + // + // Compute the QR factorization of nfxd columns and update remaining columns. + if nfxd > 0 { + na := min(m, nfxd) + impl.Dgeqrf(m, na, a, lda, tau, work, lwork) + iws = max(iws, int(work[0])) + if na < n { + impl.Dormqr(blas.Left, blas.Trans, m, n-na, na, a, lda, tau[:na], a[na:], lda, + work, lwork) + iws = max(iws, int(work[0])) + } + } + + if nfxd >= minmn { + work[0] = float64(iws) + return + } + + // Factorize free columns. + sm := m - nfxd + sn := n - nfxd + sminmn := minmn - nfxd + + // Determine the block size. + nb = impl.Ilaenv(inb, "DGEQRF", " ", sm, sn, -1, -1) + nbmin := 2 + nx := 0 + + if 1 < nb && nb < sminmn { + // Determine when to cross over from blocked to unblocked code. + nx = max(0, impl.Ilaenv(ixover, "DGEQRF", " ", sm, sn, -1, -1)) + + if nx < sminmn { + // Determine if workspace is large enough for blocked code. + minws := 2*sn + (sn+1)*nb + iws = max(iws, minws) + if lwork < minws { + // Not enough workspace to use optimal nb. Reduce + // nb and determine the minimum value of nb. + nb = (lwork - 2*sn) / (sn + 1) + nbmin = max(2, impl.Ilaenv(inbmin, "DGEQRF", " ", sm, sn, -1, -1)) + } + } + } + + // Initialize partial column norms. + // The first n elements of work store the exact column norms. + for j := nfxd; j < n; j++ { + work[j] = bi.Dnrm2(sm, a[nfxd*lda+j:], lda) + work[n+j] = work[j] + } + j := nfxd + if nbmin <= nb && nb < sminmn && nx < sminmn { + // Use blocked code initially. + + // Compute factorization. + var fjb int + for topbmn := minmn - nx; j < topbmn; j += fjb { + jb := min(nb, topbmn-j) + + // Factorize jb columns among columns j:n. + fjb = impl.Dlaqps(m, n-j, j, jb, a[j:], lda, jpvt[j:], tau[j:], + work[j:n], work[j+n:2*n], work[2*n:2*n+jb], work[2*n+jb:], jb) + } + } + + // Use unblocked code to factor the last or only block. + if j < minmn { + impl.Dlaqp2(m, n-j, j, a[j:], lda, jpvt[j:], tau[j:], + work[j:n], work[j+n:2*n], work[2*n:]) + } + + work[0] = float64(iws) +} diff --git a/lapack/native/dgeqr2.go b/lapack/native/dgeqr2.go new file mode 100644 index 00000000..5e8e0f9d --- /dev/null +++ b/lapack/native/dgeqr2.go @@ -0,0 +1,59 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgeqr2 computes a QR factorization of the m×n matrix A. +// +// In a QR factorization, Q is an m×m orthonormal matrix, and R is an +// upper triangular m×n matrix. +// +// A is modified to contain the information to construct Q and R. +// The upper triangle of a contains the matrix R. The lower triangular elements +// (not including the diagonal) contain the elementary reflectors. tau is modified +// to contain the reflector scales. tau must have length at least min(m,n), and +// this function will panic otherwise. +// +// The ith elementary reflector can be explicitly constructed by first extracting +// the +// v[j] = 0 j < i +// v[j] = 1 j == i +// v[j] = a[j*lda+i] j > i +// and computing H_i = I - tau[i] * v * v^T. +// +// The orthonormal matrix Q can be constructed from a product of these elementary +// reflectors, Q = H_0 * H_1 * ... * H_{k-1}, where k = min(m,n). +// +// work is temporary storage of length at least n and this function will panic otherwise. +// +// Dgeqr2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgeqr2(m, n int, a []float64, lda int, tau, work []float64) { + // TODO(btracey): This is oriented such that columns of a are eliminated. + // This likely could be re-arranged to take better advantage of row-major + // storage. + checkMatrix(m, n, a, lda) + if len(work) < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + for i := 0; i < k; i++ { + // Generate elementary reflector H_i. + a[i*lda+i], tau[i] = impl.Dlarfg(m-i, a[i*lda+i], a[min((i+1), m-1)*lda+i:], lda) + if i < n-1 { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(blas.Left, m-i, n-i-1, + a[i*lda+i:], lda, + tau[i], + a[i*lda+i+1:], lda, + work) + a[i*lda+i] = aii + } + } +} diff --git a/lapack/native/dgeqrf.go b/lapack/native/dgeqrf.go new file mode 100644 index 00000000..9072c25b --- /dev/null +++ b/lapack/native/dgeqrf.go @@ -0,0 +1,99 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgeqrf computes the QR factorization of the m×n matrix A using a blocked +// algorithm. See the documentation for Dgeqr2 for a description of the +// parameters at entry and exit. +// +// work is temporary storage, and lwork specifies the usable memory length. +// The length of work must be at least max(1, lwork) and lwork must be -1 +// or at least n, otherwise this function will panic. +// Dgeqrf is a blocked QR factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgeqrf, +// the optimal work length will be stored into work[0]. +// +// tau must have length at least min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + if len(work) < max(1, lwork) { + panic(shortWork) + } + // nb is the optimal blocksize, i.e. the number of columns transformed at a time. + nb := impl.Ilaenv(1, "DGEQRF", " ", m, n, -1, -1) + lworkopt := n * max(nb, 1) + lworkopt = max(n, lworkopt) + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + checkMatrix(m, n, a, lda) + if lwork < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if k == 0 { + work[0] = float64(lworkopt) + return + } + nbmin := 2 // Minimal block size. + var nx int // Use unblocked (unless changed in the next for loop) + iws := n + ldwork := nb + // Only consider blocked if the suggested block size is > 1 and the + // number of rows or columns is sufficiently large. + if 1 < nb && nb < k { + // nx is the block size at which the code switches from blocked + // to unblocked. + nx = max(0, impl.Ilaenv(3, "DGEQRF", " ", m, n, -1, -1)) + if k > nx { + iws = ldwork * n + if lwork < iws { + // Not enough workspace to use the optimal block + // size. Get the minimum block size instead. + nb = lwork / n + nbmin = max(2, impl.Ilaenv(2, "DGEQRF", " ", m, n, -1, -1)) + } + } + } + for i := range work { + work[i] = 0 + } + // Compute QR using a blocked algorithm. + var i int + if nbmin <= nb && nb < k && nx < k { + for i = 0; i < k-nx; i += nb { + ib := min(k-i, nb) + // Compute the QR factorization of the current block. + impl.Dgeqr2(m-i, ib, a[i*lda+i:], lda, tau[i:], work) + if i+ib < n { + // Form the triangular factor of the block reflector and apply H^T + // In Dlarft, work becomes the T matrix. + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + impl.Dlarfb(blas.Left, blas.Trans, lapack.Forward, lapack.ColumnWise, + m-i, n-i-ib, ib, + a[i*lda+i:], lda, + work, ldwork, + a[i*lda+i+ib:], lda, + work[ib*ldwork:], ldwork) + } + } + } + // Call unblocked code on the remaining columns. + if i < k { + impl.Dgeqr2(m-i, n-i, a[i*lda+i:], lda, tau[i:], work) + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dgerq2.go b/lapack/native/dgerq2.go new file mode 100644 index 00000000..b898a2d8 --- /dev/null +++ b/lapack/native/dgerq2.go @@ -0,0 +1,53 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgerq2 computes an RQ factorization of the m×n matrix A, +// A = R * Q. +// On exit, if m <= n, the upper triangle of the subarray +// A[0:m, n-m:n] contains the m×m upper triangular matrix R. +// If m >= n, the elements on and above the (m-n)-th subdiagonal +// contain the m×n upper trapezoidal matrix R. +// The remaining elements, with tau, represent the +// orthogonal matrix Q as a product of min(m,n) elementary +// reflectors. +// +// The matrix Q is represented as a product of elementary reflectors +// Q = H_0 H_1 . . . H_{min(m,n)-1}. +// Each H(i) has the form +// H_i = I - tau_i * v * v^T +// where v is a vector with v[0:n-k+i-1] stored in A[m-k+i, 0:n-k+i-1], +// v[n-k+i:n] = 0 and v[n-k+i] = 1. +// +// tau must have length min(m,n) and work must have length m, otherwise +// Dgerq2 will panic. +// +// Dgerq2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgerq2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if len(work) < m { + panic(badWork) + } + + for i := k - 1; i >= 0; i-- { + // Generate elementary reflector H[i] to annihilate + // A[m-k+i, 0:n-k+i-1]. + mki := m - k + i + nki := n - k + i + var aii float64 + aii, tau[i] = impl.Dlarfg(nki+1, a[mki*lda+nki], a[mki*lda:], 1) + + // Apply H[i] to A[0:m-k+i-1, 0:n-k+i] from the right. + a[mki*lda+nki] = 1 + impl.Dlarf(blas.Right, mki, nki+1, a[mki*lda:], 1, tau[i], a, lda, work) + a[mki*lda+nki] = aii + } +} diff --git a/lapack/native/dgerqf.go b/lapack/native/dgerqf.go new file mode 100644 index 00000000..4530056e --- /dev/null +++ b/lapack/native/dgerqf.go @@ -0,0 +1,128 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgerqf computes an RQ factorization of the m×n matrix A, +// A = R * Q. +// On exit, if m <= n, the upper triangle of the subarray +// A[0:m, n-m:n] contains the m×m upper triangular matrix R. +// If m >= n, the elements on and above the (m-n)-th subdiagonal +// contain the m×n upper trapezoidal matrix R. +// The remaining elements, with tau, represent the +// orthogonal matrix Q as a product of min(m,n) elementary +// reflectors. +// +// The matrix Q is represented as a product of elementary reflectors +// Q = H_0 H_1 . . . H_{min(m,n)-1}. +// Each H(i) has the form +// H_i = I - tau_i * v * v^T +// where v is a vector with v[0:n-k+i-1] stored in A[m-k+i, 0:n-k+i-1], +// v[n-k+i:n] = 0 and v[n-k+i] = 1. +// +// tau must have length min(m,n), work must have length max(1, lwork), +// and lwork must be -1 or at least max(1, m), otherwise Dgerqf will panic. +// On exit, work[0] will contain the optimal length for work. +// +// Dgerqf is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dgerqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(m, n, a, lda) + + if len(work) < max(1, lwork) { + panic(shortWork) + } + if lwork != -1 && lwork < max(1, m) { + panic(badWork) + } + + k := min(m, n) + if len(tau) != k { + panic(badTau) + } + + var nb, lwkopt int + if k == 0 { + lwkopt = 1 + } else { + nb = impl.Ilaenv(1, "DGERQF", " ", m, n, -1, -1) + lwkopt = m * nb + } + work[0] = float64(lwkopt) + + if lwork == -1 { + return + } + + // Return quickly if possible. + if k == 0 { + return + } + + nbmin := 2 + nx := 1 + iws := m + var ldwork int + if 1 < nb && nb < k { + // Determine when to cross over from blocked to unblocked code. + nx = max(0, impl.Ilaenv(3, "DGERQF", " ", m, n, -1, -1)) + if nx < k { + // Determine whether workspace is large enough for blocked code. + iws = m * nb + if lwork < iws { + // Not enough workspace to use optimal nb. Reduce + // nb and determine the minimum value of nb. + nb = lwork / m + nbmin = max(2, impl.Ilaenv(2, "DGERQF", " ", m, n, -1, -1)) + } + ldwork = nb + } + } + + var mu, nu int + if nbmin <= nb && nb < k && nx < k { + // Use blocked code initially. + // The last kk rows are handled by the block method. + ki := ((k - nx - 1) / nb) * nb + kk := min(k, ki+nb) + + var i int + for i = k - kk + ki; i >= k-kk; i -= nb { + ib := min(k-i, nb) + + // Compute the RQ factorization of the current block + // A[m-k+i:m-k+i+ib-1, 0:n-k+i+ib-1]. + impl.Dgerq2(ib, n-k+i+ib, a[(m-k+i)*lda:], lda, tau[i:], work) + if m-k+i > 0 { + // Form the triangular factor of the block reflector + // H = H_{i+ib-1} . . . H_{i+1} H_i. + impl.Dlarft(lapack.Backward, lapack.RowWise, + n-k+i+ib, ib, a[(m-k+i)*lda:], lda, tau[i:], + work, ldwork) + + // Apply H to A[0:m-k+i-1, 0:n-k+i+ib-1] from the right. + impl.Dlarfb(blas.Right, blas.NoTrans, lapack.Backward, lapack.RowWise, + m-k+i, n-k+i+ib, ib, a[(m-k+i)*lda:], lda, + work, ldwork, + a, lda, + work[ib*ldwork:], ldwork) + } + } + mu = m - k + i + nb + nu = n - k + i + nb + } else { + mu = m + nu = n + } + + // Use unblocked code to factor the last or only block. + if mu > 0 && nu > 0 { + impl.Dgerq2(mu, nu, a, lda, tau, work) + } + work[0] = float64(iws) +} diff --git a/lapack/native/dgesvd.go b/lapack/native/dgesvd.go new file mode 100644 index 00000000..ccf867bf --- /dev/null +++ b/lapack/native/dgesvd.go @@ -0,0 +1,1356 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +const noSVDO = "dgesvd: not coded for overwrite" + +// Dgesvd computes the singular value decomposition of the input matrix A. +// +// The singular value decomposition is +// A = U * Sigma * V^T +// where Sigma is an m×n diagonal matrix containing the singular values of A, +// U is an m×m orthogonal matrix and V is an n×n orthogonal matrix. The first +// min(m,n) columns of U and V are the left and right singular vectors of A +// respectively. +// +// jobU and jobVT are options for computing the singular vectors. The behavior +// is as follows +// jobU == lapack.SVDAll All m columns of U are returned in u +// jobU == lapack.SVDInPlace The first min(m,n) columns are returned in u +// jobU == lapack.SVDOverwrite The first min(m,n) columns of U are written into a +// jobU == lapack.SVDNone The columns of U are not computed. +// The behavior is the same for jobVT and the rows of V^T. At most one of jobU +// and jobVT can equal lapack.SVDOverwrite, and Dgesvd will panic otherwise. +// +// On entry, a contains the data for the m×n matrix A. During the call to Dgesvd +// the data is overwritten. On exit, A contains the appropriate singular vectors +// if either job is lapack.SVDOverwrite. +// +// s is a slice of length at least min(m,n) and on exit contains the singular +// values in decreasing order. +// +// u contains the left singular vectors on exit, stored column-wise. If +// jobU == lapack.SVDAll, u is of size m×m. If jobU == lapack.SVDInPlace u is +// of size m×min(m,n). If jobU == lapack.SVDOverwrite or lapack.SVDNone, u is +// not used. +// +// vt contains the left singular vectors on exit, stored row-wise. If +// jobV == lapack.SVDAll, vt is of size n×m. If jobVT == lapack.SVDInPlace vt is +// of size min(m,n)×n. If jobVT == lapack.SVDOverwrite or lapack.SVDNone, vt is +// not used. +// +// work is a slice for storing temporary memory, and lwork is the usable size of +// the slice. lwork must be at least max(5*min(m,n), 3*min(m,n)+max(m,n)). +// If lwork == -1, instead of performing Dgesvd, the optimal work length will be +// stored into work[0]. Dgesvd will panic if the working memory has insufficient +// storage. +// +// Dgesvd returns whether the decomposition successfully completed. +func (impl Implementation) Dgesvd(jobU, jobVT lapack.SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool) { + minmn := min(m, n) + checkMatrix(m, n, a, lda) + if jobU == lapack.SVDAll { + checkMatrix(m, m, u, ldu) + } else if jobU == lapack.SVDInPlace { + checkMatrix(m, minmn, u, ldu) + } + if jobVT == lapack.SVDAll { + checkMatrix(n, n, vt, ldvt) + } else if jobVT == lapack.SVDInPlace { + checkMatrix(minmn, n, vt, ldvt) + } + if jobU == lapack.SVDOverwrite && jobVT == lapack.SVDOverwrite { + panic("lapack: both jobU and jobVT are lapack.SVDOverwrite") + } + if len(s) < minmn { + panic(badS) + } + if jobU == lapack.SVDOverwrite || jobVT == lapack.SVDOverwrite { + panic(noSVDO) + } + if m == 0 || n == 0 { + return true + } + + wantua := jobU == lapack.SVDAll + wantus := jobU == lapack.SVDInPlace + wantuas := wantua || wantus + wantuo := jobU == lapack.SVDOverwrite + wantun := jobU == lapack.None + + wantva := jobVT == lapack.SVDAll + wantvs := jobVT == lapack.SVDInPlace + wantvas := wantva || wantvs + wantvo := jobVT == lapack.SVDOverwrite + wantvn := jobVT == lapack.None + + bi := blas64.Implementation() + var mnthr int + + // Compute optimal space for subroutines. + maxwrk := 1 + opts := string(jobU) + string(jobVT) + var wrkbl, bdspac int + if m >= n { + mnthr = impl.Ilaenv(6, "DGESVD", opts, m, n, 0, 0) + bdspac = 5 * n + impl.Dgeqrf(m, n, a, lda, nil, work, -1) + lwork_dgeqrf := int(work[0]) + impl.Dorgqr(m, n, n, a, lda, nil, work, -1) + lwork_dorgqr_n := int(work[0]) + impl.Dorgqr(m, m, n, a, lda, nil, work, -1) + lwork_dorgqr_m := int(work[0]) + impl.Dgebrd(n, n, a, lda, s, nil, nil, nil, work, -1) + lwork_dgebrd := int(work[0]) + impl.Dorgbr(lapack.ApplyP, n, n, n, a, lda, nil, work, -1) + lwork_dorgbr_p := int(work[0]) + impl.Dorgbr(lapack.ApplyQ, n, n, n, a, lda, nil, work, -1) + lwork_dorgbr_q := int(work[0]) + + if m >= mnthr { + // m >> n + if wantun { + // Path 1 + maxwrk = n + lwork_dgeqrf + maxwrk = max(maxwrk, 3*n+lwork_dgebrd) + if wantvo || wantvas { + maxwrk = max(maxwrk, 3*n+lwork_dorgbr_p) + } + maxwrk = max(maxwrk, bdspac) + } else if wantuo && wantvn { + // Path 2 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_n) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = max(n*n+wrkbl, n*n+m*n+n) + } else if wantuo && wantvs { + // Path 3 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_n) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = max(n*n+wrkbl, n*n+m*n+n) + } else if wantus && wantvn { + // Path 4 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_n) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = n*n + wrkbl + } else if wantus && wantvo { + // Path 5 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_n) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = 2*n*n + wrkbl + } else if wantus && wantvas { + // Path 6 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_n) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = n*n + wrkbl + } else if wantua && wantvn { + // Path 7 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_m) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = n*n + wrkbl + } else if wantua && wantvo { + // Path 8 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_m) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = 2*n*n + wrkbl + } else if wantua && wantvas { + // Path 9 + wrkbl = n + lwork_dgeqrf + wrkbl = max(wrkbl, n+lwork_dorgqr_m) + wrkbl = max(wrkbl, 3*n+lwork_dgebrd) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_q) + wrkbl = max(wrkbl, 3*n+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = n*n + wrkbl + } + } else { + // Path 10: m > n + impl.Dgebrd(m, n, a, lda, s, nil, nil, nil, work, -1) + lwork_dgebrd := int(work[0]) + maxwrk = 3*n + lwork_dgebrd + if wantus || wantuo { + impl.Dorgbr(lapack.ApplyQ, m, n, n, a, lda, nil, work, -1) + lwork_dorgbr_q = int(work[0]) + maxwrk = max(maxwrk, 3*n+lwork_dorgbr_q) + } + if wantua { + impl.Dorgbr(lapack.ApplyQ, m, m, n, a, lda, nil, work, -1) + lwork_dorgbr_q := int(work[0]) + maxwrk = max(maxwrk, 3*n+lwork_dorgbr_q) + } + if !wantvn { + maxwrk = max(maxwrk, 3*n+lwork_dorgbr_p) + } + maxwrk = max(maxwrk, bdspac) + } + } else { + mnthr = impl.Ilaenv(6, "DGESVD", opts, m, n, 0, 0) + + bdspac = 5 * m + impl.Dgelqf(m, n, a, lda, nil, work, -1) + lwork_dgelqf := int(work[0]) + impl.Dorglq(n, n, m, nil, n, nil, work, -1) + lwork_dorglq_n := int(work[0]) + impl.Dorglq(m, n, m, a, lda, nil, work, -1) + lwork_dorglq_m := int(work[0]) + impl.Dgebrd(m, m, a, lda, s, nil, nil, nil, work, -1) + lwork_dgebrd := int(work[0]) + impl.Dorgbr(lapack.ApplyP, m, m, m, a, n, nil, work, -1) + lwork_dorgbr_p := int(work[0]) + impl.Dorgbr(lapack.ApplyQ, m, m, m, a, n, nil, work, -1) + lwork_dorgbr_q := int(work[0]) + if n >= mnthr { + // n >> m + if wantvn { + // Path 1t + maxwrk = m + lwork_dgelqf + maxwrk = max(maxwrk, 3*m+lwork_dgebrd) + if wantuo || wantuas { + maxwrk = max(maxwrk, 3*m+lwork_dorgbr_q) + } + maxwrk = max(maxwrk, bdspac) + } else if wantvo && wantun { + // Path 2t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_m) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = max(m*m+wrkbl, m*m+m*n+m) + } else if wantvo && wantuas { + // Path 3t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_m) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = max(m*m+wrkbl, m*m+m*n+m) + } else if wantvs && wantun { + // Path 4t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_m) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = m*m + wrkbl + } else if wantvs && wantuo { + // Path 5t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_m) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = 2*m*m + wrkbl + } else if wantvs && wantuas { + // Path 6t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_m) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = m*m + wrkbl + } else if wantva && wantun { + // Path 7t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_n) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, bdspac) + maxwrk = m*m + wrkbl + } else if wantva && wantuo { + // Path 8t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_n) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = 2*m*m + wrkbl + } else if wantva && wantuas { + // Path 9t + wrkbl = m + lwork_dgelqf + wrkbl = max(wrkbl, m+lwork_dorglq_n) + wrkbl = max(wrkbl, 3*m+lwork_dgebrd) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_p) + wrkbl = max(wrkbl, 3*m+lwork_dorgbr_q) + wrkbl = max(wrkbl, bdspac) + maxwrk = m*m + wrkbl + } + } else { + // Path 10t, n > m + impl.Dgebrd(m, n, a, lda, s, nil, nil, nil, work, -1) + lwork_dgebrd = int(work[0]) + maxwrk := 3*m + lwork_dgebrd + if wantvs || wantvo { + impl.Dorgbr(lapack.ApplyP, m, n, m, a, n, nil, work, -1) + lwork_dorgbr_p = int(work[0]) + maxwrk = max(maxwrk, 3*m+lwork_dorgbr_p) + } + if wantva { + impl.Dorgbr(lapack.ApplyP, n, n, m, a, n, nil, work, -1) + lwork_dorgbr_p = int(work[0]) + maxwrk = max(maxwrk, 3*m+lwork_dorgbr_p) + } + if !wantun { + maxwrk = max(maxwrk, 3*m+lwork_dorgbr_q) + } + maxwrk = max(maxwrk, bdspac) + } + } + + minWork := max(1, 5*minmn) + if !((wantun && m >= mnthr) || (wantvn && n >= mnthr)) { + minWork = max(minWork, 3*minmn+max(m, n)) + } + + if lwork != -1 { + if len(work) < lwork { + panic(badWork) + } + if lwork < minWork { + panic(badWork) + } + } + if m == 0 || n == 0 { + return true + } + + maxwrk = max(maxwrk, minWork) + work[0] = float64(maxwrk) + if lwork == -1 { + return true + } + + // Perform decomposition. + eps := dlamchE + smlnum := math.Sqrt(dlamchS) / eps + bignum := 1 / smlnum + + // Scale A if max element outside range [smlnum, bignum]. + anrm := impl.Dlange(lapack.MaxAbs, m, n, a, lda, nil) + var iscl bool + if anrm > 0 && anrm < smlnum { + iscl = true + impl.Dlascl(lapack.General, 0, 0, anrm, smlnum, m, n, a, lda) + } else if anrm > bignum { + iscl = true + impl.Dlascl(lapack.General, 0, 0, anrm, bignum, m, n, a, lda) + } + + var ie int + if m >= n { + // If A has sufficiently more rows than columns, use the QR decomposition. + if m >= mnthr { + // m >> n + if wantun { + // Path 1. + itau := 0 + iwork := itau + n + + // Compute A = Q * R. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Zero out below R. + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, a[lda:], lda) + ie = 0 + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + // Bidiagonalize R in A. + impl.Dgebrd(n, n, a, lda, s, work[ie:], work[itauq:], + work[itaup:], work[iwork:], lwork-iwork) + ncvt := 0 + if wantvo || wantvas { + // Generate P^T. + impl.Dorgbr(lapack.ApplyP, n, n, n, a, lda, work[itaup:], + work[iwork:], lwork-iwork) + ncvt = n + } + iwork = ie + n + + // Perform bidiagonal QR iteration computing right singular vectors + // of A in A if desired. + ok = impl.Dbdsqr(blas.Upper, n, ncvt, 0, 0, s, work[ie:], + a, lda, work, 1, work, 1, work[iwork:]) + + // If right singular vectors desired in VT, copy them there. + if wantvas { + impl.Dlacpy(blas.All, n, n, a, lda, vt, ldvt) + } + } else if wantuo && wantvn { + // Path 2 + panic(noSVDO) + } else if wantuo && wantvas { + // Path 3 + panic(noSVDO) + } else if wantus { + if wantvn { + // Path 4 + if lwork >= n*n+max(4*n, bdspac) { + // Sufficient workspace for a fast algorithm. + ir := 0 + var ldworkr int + if lwork >= wrkbl+lda*n { + ldworkr = lda + } else { + ldworkr = n + } + itau := ir + ldworkr*n + iwork := itau + n + // Compute A = Q * R. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Copy R to work[ir:], zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, work[ir:], ldworkr) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, work[ir+ldworkr:], ldworkr) + + // Generate Q in A. + impl.Dorgqr(m, n, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in work[ir:]. + impl.Dgebrd(n, n, work[ir:], ldworkr, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Generate left vectors bidiagonalizing R in work[ir:]. + impl.Dorgbr(lapack.ApplyQ, n, n, n, work[ir:], ldworkr, + work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, compuing left singular + // vectors of R in work[ir:]. + ok = impl.Dbdsqr(blas.Upper, n, 0, n, 0, s, work[ie:], work, 1, + work[ir:], ldworkr, work, 1, work[iwork:]) + + // Multiply Q in A by left singular vectors of R in + // work[ir:], storing result in U. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, n, 1, a, lda, + work[ir:], ldworkr, 0, u, ldu) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + n + + // Compute A = Q*R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Generate Q in U. + impl.Dorgqr(m, n, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Zero out below R in A. + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, a[lda:], lda) + + // Bidiagonalize R in A. + impl.Dgebrd(n, n, a, lda, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply Q in U by left vectors bidiagonalizing R. + impl.Dormbr(lapack.ApplyQ, blas.Right, blas.NoTrans, m, n, n, + a, lda, work[itauq:], u, ldu, work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left + // singular vectors of A in U. + ok = impl.Dbdsqr(blas.Upper, n, 0, m, 0, s, work[ie:], work, 1, + u, ldu, work, 1, work[iwork:]) + } + } else if wantvo { + // Path 5 + panic(noSVDO) + } else if wantvas { + // Path 6 + if lwork >= n*n+max(4*n, bdspac) { + // Sufficient workspace for a fast algorithm. + iu := 0 + var ldworku int + if lwork >= wrkbl+lda*n { + ldworku = lda + } else { + ldworku = n + } + itau := iu + ldworku*n + iwork := itau + n + + // Compute A = Q * R. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + // Copy R to work[iu:], zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, work[iu:], ldworku) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, work[iu+ldworku:], ldworku) + + // Generate Q in A. + impl.Dorgqr(m, n, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in work[iu:], copying result to VT. + impl.Dgebrd(n, n, work[iu:], ldworku, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, n, n, work[iu:], ldworku, vt, ldvt) + + // Generate left bidiagonalizing vectors in work[iu:]. + impl.Dorgbr(lapack.ApplyQ, n, n, n, work[iu:], ldworku, + work[itauq:], work[iwork:], lwork-iwork) + + // Generate right bidiagonalizing vectors in VT. + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of R in work[iu:], and computing right singular + // vectors of R in VT. + ok = impl.Dbdsqr(blas.Upper, n, n, n, 0, s, work[ie:], + vt, ldvt, work[iu:], ldworku, work, 1, work[iwork:]) + + // Multiply Q in A by left singular vectors of R in + // work[iu:], storing result in U. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, n, 1, a, lda, + work[iu:], ldworku, 0, u, ldu) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + n + + // Compute A = Q * R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Generate Q in U. + impl.Dorgqr(m, n, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + + // Copy R to VT, zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, vt, ldvt) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, vt[ldvt:], ldvt) + + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in VT. + impl.Dgebrd(n, n, vt, ldvt, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply Q in U by left bidiagonalizing vectors in VT. + impl.Dormbr(lapack.ApplyQ, blas.Right, blas.NoTrans, m, n, n, + vt, ldvt, work[itauq:], u, ldu, work[iwork:], lwork-iwork) + + // Generate right bidiagonalizing vectors in VT. + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of A in U and computing right singular vectors + // of A in VT. + ok = impl.Dbdsqr(blas.Upper, n, n, m, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + } + } + } else if wantua { + if wantvn { + // Path 7 + if lwork >= n*n+max(max(n+m, 4*n), bdspac) { + // Sufficient workspace for a fast algorithm. + ir := 0 + var ldworkr int + if lwork >= wrkbl+lda*n { + ldworkr = lda + } else { + ldworkr = n + } + itau := ir + ldworkr*n + iwork := itau + n + + // Compute A = Q*R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Copy R to work[ir:], zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, work[ir:], ldworkr) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, work[ir+ldworkr:], ldworkr) + + // Generate Q in U. + impl.Dorgqr(m, m, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in work[ir:]. + impl.Dgebrd(n, n, work[ir:], ldworkr, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Generate left bidiagonalizing vectors in work[ir:]. + impl.Dorgbr(lapack.ApplyQ, n, n, n, work[ir:], ldworkr, + work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of R in work[ir:]. + ok = impl.Dbdsqr(blas.Upper, n, 0, n, 0, s, work[ie:], work, 1, + work[ir:], ldworkr, work, 1, work[iwork:]) + + // Multiply Q in U by left singular vectors of R in + // work[ir:], storing result in A. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, n, 1, u, ldu, + work[ir:], ldworkr, 0, a, lda) + + // Copy left singular vectors of A from A to U. + impl.Dlacpy(blas.All, m, n, a, lda, u, ldu) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + n + + // Compute A = Q*R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Generate Q in U. + impl.Dorgqr(m, m, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Zero out below R in A. + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, a[lda:], lda) + + // Bidiagonalize R in A. + impl.Dgebrd(n, n, a, lda, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply Q in U by left bidiagonalizing vectors in A. + impl.Dormbr(lapack.ApplyQ, blas.Right, blas.NoTrans, m, n, n, + a, lda, work[itauq:], u, ldu, work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left + // singular vectors of A in U. + ok = impl.Dbdsqr(blas.Upper, n, 0, m, 0, s, work[ie:], + work, 1, u, ldu, work, 1, work[iwork:]) + } + } else if wantvo { + // Path 8. + panic(noSVDO) + } else if wantvas { + // Path 9. + if lwork >= n*n+max(max(n+m, 4*n), bdspac) { + // Sufficient workspace for a fast algorithm. + iu := 0 + var ldworku int + if lwork >= wrkbl+lda*n { + ldworku = lda + } else { + ldworku = n + } + itau := iu + ldworku*n + iwork := itau + n + + // Compute A = Q * R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Generate Q in U. + impl.Dorgqr(m, m, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + + // Copy R to work[iu:], zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, work[iu:], ldworku) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, work[iu+ldworku:], ldworku) + + ie = itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in work[iu:], copying result to VT. + impl.Dgebrd(n, n, work[iu:], ldworku, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, n, n, work[iu:], ldworku, vt, ldvt) + + // Generate left bidiagonalizing vectors in work[iu:]. + impl.Dorgbr(lapack.ApplyQ, n, n, n, work[iu:], ldworku, + work[itauq:], work[iwork:], lwork-iwork) + + // Generate right bidiagonalizing vectors in VT. + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of R in work[iu:] and computing right + // singular vectors of R in VT. + ok = impl.Dbdsqr(blas.Upper, n, n, n, 0, s, work[ie:], + vt, ldvt, work[iu:], ldworku, work, 1, work[iwork:]) + + // Multiply Q in U by left singular vectors of R in + // work[iu:], storing result in A. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, n, 1, + u, ldu, work[iu:], ldworku, 0, a, lda) + + // Copy left singular vectors of A from A to U. + impl.Dlacpy(blas.All, m, n, a, lda, u, ldu) + + /* + // Bidiagonalize R in VT. + impl.Dgebrd(n, n, vt, ldvt, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply Q in U by left bidiagonalizing vectors in VT. + impl.Dormbr(lapack.ApplyQ, blas.Right, blas.NoTrans, + m, n, n, vt, ldvt, work[itauq:], u, ldu, work[iwork:], lwork-iwork) + + // Generate right bidiagonalizing vectors in VT. + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of A in U and computing right singular vectors + // of A in VT. + ok = impl.Dbdsqr(blas.Upper, n, n, m, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + */ + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + n + + // Compute A = Q*R, copying result to U. + impl.Dgeqrf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + + // Generate Q in U. + impl.Dorgqr(m, m, n, u, ldu, work[itau:], work[iwork:], lwork-iwork) + + // Copy R from A to VT, zeroing out below it. + impl.Dlacpy(blas.Upper, n, n, a, lda, vt, ldvt) + impl.Dlaset(blas.Lower, n-1, n-1, 0, 0, vt[ldvt:], ldvt) + + ie := itau + itauq := ie + n + itaup := itauq + n + iwork = itaup + n + + // Bidiagonalize R in VT. + impl.Dgebrd(n, n, vt, ldvt, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply Q in U by left bidiagonalizing vectors in VT. + impl.Dormbr(lapack.ApplyQ, blas.Right, blas.NoTrans, + m, n, n, vt, ldvt, work[itauq:], u, ldu, work[iwork:], lwork-iwork) + + // Generate right bidiagonizing vectors in VT. + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + n + + // Perform bidiagonal QR iteration, computing left singular + // vectors of A in U and computing right singular vectors + // of A in VT. + impl.Dbdsqr(blas.Upper, n, n, m, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + } + } + } + } else { + // Path 10. + // M at least N, but not much larger. + ie = 0 + itauq := ie + n + itaup := itauq + n + iwork := itaup + n + + // Bidiagonalize A. + impl.Dgebrd(m, n, a, lda, s, work[ie:], work[itauq:], + work[itaup:], work[iwork:], lwork-iwork) + if wantuas { + // Left singular vectors are desired in U. Copy result to U and + // generate left biadiagonalizing vectors in U. + impl.Dlacpy(blas.Lower, m, n, a, lda, u, ldu) + var ncu int + if wantus { + ncu = n + } + if wantua { + ncu = m + } + impl.Dorgbr(lapack.ApplyQ, m, ncu, n, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + } + if wantvas { + // Right singular vectors are desired in VT. Copy result to VT and + // generate left biadiagonalizing vectors in VT. + impl.Dlacpy(blas.Upper, n, n, a, lda, vt, ldvt) + impl.Dorgbr(lapack.ApplyP, n, n, n, vt, ldvt, work[itaup:], work[iwork:], lwork-iwork) + } + if wantuo { + panic(noSVDO) + } + if wantvo { + panic(noSVDO) + } + iwork = ie + n + var nru, ncvt int + if wantuas || wantuo { + nru = m + } + if wantun { + nru = 0 + } + if wantvas || wantvo { + ncvt = n + } + if wantvn { + ncvt = 0 + } + if !wantuo && !wantvo { + // Perform bidiagonal QR iteration, if desired, computing left + // singular vectors in U and right singular vectors in VT. + ok = impl.Dbdsqr(blas.Upper, n, ncvt, nru, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + } else { + // There will be two branches when the implementation is complete. + panic(noSVDO) + } + } + } else { + // A has more columns than rows. If A has sufficiently more columns than + // rows, first reduce using the LQ decomposition. + if n >= mnthr { + // n >> m. + if wantvn { + // Path 1t. + itau := 0 + iwork := itau + m + + // Compute A = L*Q. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Zero out above L. + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, a[1:], lda) + ie := 0 + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in A. + impl.Dgebrd(m, m, a, lda, s, work[ie:itauq], + work[itauq:itaup], work[itaup:iwork], work[iwork:], lwork-iwork) + if wantuo || wantuas { + impl.Dorgbr(lapack.ApplyQ, m, m, m, a, lda, + work[itauq:], work[iwork:], lwork-iwork) + } + iwork = ie + m + nru := 0 + if wantuo || wantuas { + nru = m + } + + // Perform bidiagonal QR iteration, computing left singular vectors + // of A in A if desired. + ok = impl.Dbdsqr(blas.Upper, m, 0, nru, 0, s, work[ie:], + work, 1, a, lda, work, 1, work[iwork:]) + + // If left singular vectors desired in U, copy them there. + if wantuas { + impl.Dlacpy(blas.All, m, m, a, lda, u, ldu) + } + } else if wantvo && wantun { + // Path 2t. + panic(noSVDO) + } else if wantvo && wantuas { + // Path 3t. + panic(noSVDO) + } else if wantvs { + if wantun { + // Path 4t. + if lwork >= m*m+max(4*m, bdspac) { + // Sufficient workspace for a fast algorithm. + ir := 0 + var ldworkr int + if lwork >= wrkbl+lda*m { + ldworkr = lda + } else { + ldworkr = m + } + itau := ir + ldworkr*m + iwork := itau + m + + // Compute A = L*Q. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Copy L to work[ir:], zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, work[ir:], ldworkr) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, work[ir+1:], ldworkr) + + // Generate Q in A. + impl.Dorglq(m, n, m, a, lda, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in work[ir:]. + impl.Dgebrd(m, m, work[ir:], ldworkr, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Generate right vectors bidiagonalizing L in work[ir:]. + impl.Dorgbr(lapack.ApplyP, m, m, m, work[ir:], ldworkr, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing right singular + // vectors of L in work[ir:]. + ok = impl.Dbdsqr(blas.Upper, m, m, 0, 0, s, work[ie:], + work[ir:], ldworkr, work, 1, work, 1, work[iwork:]) + + // Multiply right singular vectors of L in work[ir:] by + // Q in A, storing result in VT. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, m, 1, + work[ir:], ldworkr, a, lda, 0, vt, ldvt) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + m + + // Compute A = L*Q. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Copy result to VT. + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Generate Q in VT. + impl.Dorglq(m, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Zero out above L in A. + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, a[1:], lda) + + // Bidiagonalize L in A. + impl.Dgebrd(m, m, a, lda, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply right vectors bidiagonalizing L by Q in VT. + impl.Dormbr(lapack.ApplyP, blas.Left, blas.Trans, m, n, m, + a, lda, work[itaup:], vt, ldvt, work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing right + // singular vectors of A in VT. + ok = impl.Dbdsqr(blas.Upper, m, n, 0, 0, s, work[ie:], + vt, ldvt, work, 1, work, 1, work[iwork:]) + } + } else if wantuo { + // Path 5t. + panic(noSVDO) + } else if wantuas { + // Path 6t. + if lwork >= m*m+max(4*m, bdspac) { + // Sufficient workspace for a fast algorithm. + iu := 0 + var ldworku int + if lwork >= wrkbl+lda*m { + ldworku = lda + } else { + ldworku = m + } + itau := iu + ldworku*m + iwork := itau + m + + // Compute A = L*Q. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + + // Copy L to work[iu:], zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, work[iu:], ldworku) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, work[iu+1:], ldworku) + + // Generate Q in A. + impl.Dorglq(m, n, m, a, lda, work[itau:], work[iwork:], lwork-iwork) + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in work[iu:], copying result to U. + impl.Dgebrd(m, m, work[iu:], ldworku, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, m, work[iu:], ldworku, u, ldu) + + // Generate right bidiagionalizing vectors in work[iu:]. + impl.Dorgbr(lapack.ApplyP, m, m, m, work[iu:], ldworku, + work[itaup:], work[iwork:], lwork-iwork) + + // Generate left bidiagonalizing vectors in U. + impl.Dorgbr(lapack.ApplyQ, m, m, m, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing left singular + // vectors of L in U and computing right singular vectors of + // L in work[iu:]. + ok = impl.Dbdsqr(blas.Upper, m, m, m, 0, s, work[ie:], + work[iu:], ldworku, u, ldu, work, 1, work[iwork:]) + + // Multiply right singular vectors of L in work[iu:] by + // Q in A, storing result in VT. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, m, 1, + work[iu:], ldworku, a, lda, 0, vt, ldvt) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + m + + // Compute A = L*Q, copying result to VT. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Generate Q in VT. + impl.Dorglq(m, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + + // Copy L to U, zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, u, ldu) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, u[1:], ldu) + + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in U. + impl.Dgebrd(m, m, u, ldu, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Multiply right bidiagonalizing vectors in U by Q in VT. + impl.Dormbr(lapack.ApplyP, blas.Left, blas.Trans, m, n, m, + u, ldu, work[itaup:], vt, ldvt, work[iwork:], lwork-iwork) + + // Generate left bidiagonalizing vectors in U. + impl.Dorgbr(lapack.ApplyQ, m, m, m, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing left singular + // vectors of A in U and computing right singular vectors + // of A in VT. + impl.Dbdsqr(blas.Upper, m, n, m, 0, s, work[ie:], vt, ldvt, + u, ldu, work, 1, work[iwork:]) + } + } + } else if wantva { + if wantun { + // Path 7t. + if lwork >= m*m+max(max(n+m, 4*m), bdspac) { + // Sufficient workspace for a fast algorithm. + ir := 0 + var ldworkr int + if lwork >= wrkbl+lda*m { + ldworkr = lda + } else { + ldworkr = m + } + itau := ir + ldworkr*m + iwork := itau + m + + // Compute A = L*Q, copying result to VT. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Copy L to work[ir:], zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, work[ir:], ldworkr) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, work[ir+1:], ldworkr) + + // Generate Q in VT. + impl.Dorglq(n, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in work[ir:]. + impl.Dgebrd(m, m, work[ir:], ldworkr, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + + // Generate right bidiagonalizing vectors in work[ir:]. + impl.Dorgbr(lapack.ApplyP, m, m, m, work[ir:], ldworkr, + work[itaup:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing right + // singular vectors of L in work[ir:]. + ok = impl.Dbdsqr(blas.Upper, m, m, 0, 0, s, work[ie:], + work[ir:], ldworkr, work, 1, work, 1, work[iwork:]) + + // Multiply right singular vectors of L in work[ir:] by + // Q in VT, storing result in A. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, m, 1, + work[ir:], ldworkr, vt, ldvt, 0, a, lda) + + // Copy right singular vectors of A from A to VT. + impl.Dlacpy(blas.All, m, n, a, lda, vt, ldvt) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + m + // Compute A = L * Q, copying result to VT. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Generate Q in VT. + impl.Dorglq(n, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + + ie := itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Zero out above L in A. + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, a[1:], lda) + + // Bidiagonalize L in A. + impl.Dgebrd(m, m, a, lda, s, work[ie:], work[itauq:], + work[itaup:], work[iwork:], lwork-iwork) + + // Multiply right bidiagonalizing vectors in A by Q in VT. + impl.Dormbr(lapack.ApplyP, blas.Left, blas.Trans, m, n, m, + a, lda, work[itaup:], vt, ldvt, work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing right singular + // vectors of A in VT. + ok = impl.Dbdsqr(blas.Upper, m, n, 0, 0, s, work[ie:], + vt, ldvt, work, 1, work, 1, work[iwork:]) + } + } else if wantuo { + panic(noSVDO) + } else if wantuas { + // Path 9t. + if lwork >= m*m+max(max(m+n, 4*m), bdspac) { + // Sufficient workspace for a fast algorithm. + iu := 0 + + var ldworku int + if lwork >= wrkbl+lda*m { + ldworku = lda + } else { + ldworku = m + } + itau := iu + ldworku*m + iwork := itau + m + + // Generate A = L * Q copying result to VT. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Generate Q in VT. + impl.Dorglq(n, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + + // Copy L to work[iu:], zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, work[iu:], ldworku) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, work[iu+1:], ldworku) + ie = itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in work[iu:], copying result to U. + impl.Dgebrd(m, m, work[iu:], ldworku, s, work[ie:], + work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Lower, m, m, work[iu:], ldworku, u, ldu) + + // Generate right bidiagonalizing vectors in work[iu:]. + impl.Dorgbr(lapack.ApplyP, m, m, m, work[iu:], ldworku, + work[itaup:], work[iwork:], lwork-iwork) + + // Generate left bidiagonalizing vectors in U. + impl.Dorgbr(lapack.ApplyQ, m, m, m, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing left singular + // vectors of L in U and computing right singular vectors + // of L in work[iu:]. + ok = impl.Dbdsqr(blas.Upper, m, m, m, 0, s, work[ie:], + work[iu:], ldworku, u, ldu, work, 1, work[iwork:]) + + // Multiply right singular vectors of L in work[iu:] + // Q in VT, storing result in A. + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n, m, 1, + work[iu:], ldworku, vt, ldvt, 0, a, lda) + + // Copy right singular vectors of A from A to VT. + impl.Dlacpy(blas.All, m, n, a, lda, vt, ldvt) + } else { + // Insufficient workspace for a fast algorithm. + itau := 0 + iwork := itau + m + + // Compute A = L * Q, copying result to VT. + impl.Dgelqf(m, n, a, lda, work[itau:], work[iwork:], lwork-iwork) + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + + // Generate Q in VT. + impl.Dorglq(n, n, m, vt, ldvt, work[itau:], work[iwork:], lwork-iwork) + + // Copy L to U, zeroing out above it. + impl.Dlacpy(blas.Lower, m, m, a, lda, u, ldu) + impl.Dlaset(blas.Upper, m-1, m-1, 0, 0, u[1:], ldu) + + ie = itau + itauq := ie + m + itaup := itauq + m + iwork = itaup + m + + // Bidiagonalize L in U. + impl.Dgebrd(m, m, u, ldu, s, work[ie:], work[itauq:], + work[itaup:], work[iwork:], lwork-iwork) + + // Multiply right bidiagonalizing vectors in U by Q in VT. + impl.Dormbr(lapack.ApplyP, blas.Left, blas.Trans, m, n, m, + u, ldu, work[itaup:], vt, ldvt, work[iwork:], lwork-iwork) + + // Generate left bidiagonalizing vectors in U. + impl.Dorgbr(lapack.ApplyQ, m, m, m, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + iwork = ie + m + + // Perform bidiagonal QR iteration, computing left singular + // vectors of A in U and computing right singular vectors + // of A in VT. + ok = impl.Dbdsqr(blas.Upper, m, n, m, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + } + } + } + } else { + // Path 10t. + // N at least M, but not much larger. + ie = 0 + itauq := ie + m + itaup := itauq + m + iwork := itaup + m + + // Bidiagonalize A. + impl.Dgebrd(m, n, a, lda, s, work[ie:], work[itauq:], work[itaup:], work[iwork:], lwork-iwork) + if wantuas { + // If left singular vectors desired in U, copy result to U and + // generate left bidiagonalizing vectors in U. + impl.Dlacpy(blas.Lower, m, m, a, lda, u, ldu) + impl.Dorgbr(lapack.ApplyQ, m, m, n, u, ldu, work[itauq:], work[iwork:], lwork-iwork) + } + if wantvas { + // If right singular vectors desired in VT, copy result to VT + // and generate right bidiagonalizing vectors in VT. + impl.Dlacpy(blas.Upper, m, n, a, lda, vt, ldvt) + var nrvt int + if wantva { + nrvt = n + } else { + nrvt = m + } + impl.Dorgbr(lapack.ApplyP, nrvt, n, m, vt, ldvt, work[itaup:], work[iwork:], lwork-iwork) + } + if wantuo { + panic(noSVDO) + } + if wantvo { + panic(noSVDO) + } + iwork = ie + m + var nru, ncvt int + if wantuas || wantuo { + nru = m + } + if wantvas || wantvo { + ncvt = n + } + if !wantuo && !wantvo { + // Perform bidiagonal QR iteration, if desired, computing left + // singular vectors in U and computing right singular vectors in + // VT. + ok = impl.Dbdsqr(blas.Lower, m, ncvt, nru, 0, s, work[ie:], + vt, ldvt, u, ldu, work, 1, work[iwork:]) + } else { + // There will be two branches when the implementation is complete. + panic(noSVDO) + } + } + } + if !ok { + if ie > 1 { + for i := 0; i < minmn-1; i++ { + work[i+1] = work[i+ie] + } + } + if ie < 1 { + for i := minmn - 2; i >= 0; i-- { + work[i+1] = work[i+ie] + } + } + } + // Undo scaling if necessary. + if iscl { + if anrm > bignum { + impl.Dlascl(lapack.General, 0, 0, bignum, anrm, minmn, 1, s, minmn) + } + if !ok && anrm > bignum { + impl.Dlascl(lapack.General, 0, 0, bignum, anrm, minmn-1, 1, work[minmn:], minmn) + } + if anrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, smlnum, anrm, minmn, 1, s, minmn) + } + if !ok && anrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, smlnum, anrm, minmn-1, 1, work[minmn:], minmn) + } + } + work[0] = float64(maxwrk) + return ok +} diff --git a/lapack/native/dgetf2.go b/lapack/native/dgetf2.go new file mode 100644 index 00000000..a7937153 --- /dev/null +++ b/lapack/native/dgetf2.go @@ -0,0 +1,69 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dgetf2 computes the LU decomposition of the m×n matrix A. +// The LU decomposition is a factorization of a into +// A = P * L * U +// where P is a permutation matrix, L is a unit lower triangular matrix, and +// U is a (usually) non-unit upper triangular matrix. On exit, L and U are stored +// in place into a. +// +// ipiv is a permutation vector. It indicates that row i of the matrix was +// changed with ipiv[i]. ipiv must have length at least min(m,n), and will panic +// otherwise. ipiv is zero-indexed. +// +// Dgetf2 returns whether the matrix A is singular. The LU decomposition will +// be computed regardless of the singularity of A, but division by zero +// will occur if the false is returned and the result is used to solve a +// system of equations. +// +// Dgetf2 is an internal routine. It is exported for testing purposes. +func (Implementation) Dgetf2(m, n int, a []float64, lda int, ipiv []int) (ok bool) { + mn := min(m, n) + checkMatrix(m, n, a, lda) + if len(ipiv) < mn { + panic(badIpiv) + } + if m == 0 || n == 0 { + return true + } + bi := blas64.Implementation() + sfmin := dlamchS + ok = true + for j := 0; j < mn; j++ { + // Find a pivot and test for singularity. + jp := j + bi.Idamax(m-j, a[j*lda+j:], lda) + ipiv[j] = jp + if a[jp*lda+j] == 0 { + ok = false + } else { + // Swap the rows if necessary. + if jp != j { + bi.Dswap(n, a[j*lda:], 1, a[jp*lda:], 1) + } + if j < m-1 { + aj := a[j*lda+j] + if math.Abs(aj) >= sfmin { + bi.Dscal(m-j-1, 1/aj, a[(j+1)*lda+j:], lda) + } else { + for i := 0; i < m-j-1; i++ { + a[(j+1)*lda+j] = a[(j+1)*lda+j] / a[lda*j+j] + } + } + } + } + if j < mn-1 { + bi.Dger(m-j-1, n-j-1, -1, a[(j+1)*lda+j:], lda, a[j*lda+j+1:], 1, a[(j+1)*lda+j+1:], lda) + } + } + return ok +} diff --git a/lapack/native/dgetrf.go b/lapack/native/dgetrf.go new file mode 100644 index 00000000..d3200b51 --- /dev/null +++ b/lapack/native/dgetrf.go @@ -0,0 +1,70 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dgetrf computes the LU decomposition of the m×n matrix A. +// The LU decomposition is a factorization of A into +// A = P * L * U +// where P is a permutation matrix, L is a unit lower triangular matrix, and +// U is a (usually) non-unit upper triangular matrix. On exit, L and U are stored +// in place into a. +// +// ipiv is a permutation vector. It indicates that row i of the matrix was +// changed with ipiv[i]. ipiv must have length at least min(m,n), and will panic +// otherwise. ipiv is zero-indexed. +// +// Dgetrf is the blocked version of the algorithm. +// +// Dgetrf returns whether the matrix A is singular. The LU decomposition will +// be computed regardless of the singularity of A, but division by zero +// will occur if the false is returned and the result is used to solve a +// system of equations. +func (impl Implementation) Dgetrf(m, n int, a []float64, lda int, ipiv []int) (ok bool) { + mn := min(m, n) + checkMatrix(m, n, a, lda) + if len(ipiv) < mn { + panic(badIpiv) + } + if m == 0 || n == 0 { + return false + } + bi := blas64.Implementation() + nb := impl.Ilaenv(1, "DGETRF", " ", m, n, -1, -1) + if nb <= 1 || nb >= min(m, n) { + // Use the unblocked algorithm. + return impl.Dgetf2(m, n, a, lda, ipiv) + } + ok = true + for j := 0; j < mn; j += nb { + jb := min(mn-j, nb) + blockOk := impl.Dgetf2(m-j, jb, a[j*lda+j:], lda, ipiv[j:]) + if !blockOk { + ok = false + } + for i := j; i <= min(m-1, j+jb-1); i++ { + ipiv[i] = j + ipiv[i] + } + impl.Dlaswp(j, a, lda, j, j+jb-1, ipiv[:j+jb], 1) + if j+jb < n { + impl.Dlaswp(n-j-jb, a[j+jb:], lda, j, j+jb-1, ipiv[:j+jb], 1) + bi.Dtrsm(blas.Left, blas.Lower, blas.NoTrans, blas.Unit, + jb, n-j-jb, 1, + a[j*lda+j:], lda, + a[j*lda+j+jb:], lda) + if j+jb < m { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m-j-jb, n-j-jb, jb, -1, + a[(j+jb)*lda+j:], lda, + a[j*lda+j+jb:], lda, + 1, a[(j+jb)*lda+j+jb:], lda) + } + } + } + return ok +} diff --git a/lapack/native/dgetri.go b/lapack/native/dgetri.go new file mode 100644 index 00000000..ed0942f3 --- /dev/null +++ b/lapack/native/dgetri.go @@ -0,0 +1,92 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dgetri computes the inverse of the matrix A using the LU factorization computed +// by Dgetrf. On entry, a contains the PLU decomposition of A as computed by +// Dgetrf and on exit contains the reciprocal of the original matrix. +// +// Dgetri will not perform the inversion if the matrix is singular, and returns +// a boolean indicating whether the inversion was successful. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= n and this function will panic otherwise. +// Dgetri is a blocked inversion, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgetri, +// the optimal work length will be stored into work[0]. +func (impl Implementation) Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) (ok bool) { + checkMatrix(n, n, a, lda) + if len(ipiv) < n { + panic(badIpiv) + } + nb := impl.Ilaenv(1, "DGETRI", " ", n, -1, -1, -1) + if lwork == -1 { + work[0] = float64(n * nb) + return true + } + if lwork < n { + panic(badWork) + } + if len(work) < lwork { + panic(badWork) + } + if n == 0 { + return true + } + ok = impl.Dtrtri(blas.Upper, blas.NonUnit, n, a, lda) + if !ok { + return false + } + nbmin := 2 + ldwork := nb + if nb > 1 && nb < n { + iws := max(ldwork*n, 1) + if lwork < iws { + nb = lwork / ldwork + nbmin = max(2, impl.Ilaenv(2, "DGETRI", " ", n, -1, -1, -1)) + } + } + bi := blas64.Implementation() + // TODO(btracey): Replace this with a more row-major oriented algorithm. + if nb < nbmin || nb >= n { + // Unblocked code. + for j := n - 1; j >= 0; j-- { + for i := j + 1; i < n; i++ { + work[i*ldwork] = a[i*lda+j] + a[i*lda+j] = 0 + } + if j < n { + bi.Dgemv(blas.NoTrans, n, n-j-1, -1, a[(j+1):], lda, work[(j+1)*ldwork:], ldwork, 1, a[j:], lda) + } + } + } else { + nn := ((n - 1) / nb) * nb + for j := nn; j >= 0; j -= nb { + jb := min(nb, n-j) + for jj := j; jj < j+jb-1; jj++ { + for i := jj + 1; i < n; i++ { + work[i*ldwork+(jj-j)] = a[i*lda+jj] + a[i*lda+jj] = 0 + } + } + if j+jb < n { + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, jb, n-j-jb, -1, a[(j+jb):], lda, work[(j+jb)*ldwork:], ldwork, 1, a[j:], lda) + bi.Dtrsm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, n, jb, 1, work[j*ldwork:], ldwork, a[j:], lda) + } + } + } + for j := n - 2; j >= 0; j-- { + jp := ipiv[j] + if jp != j { + bi.Dswap(n, a[j:], lda, a[jp:], lda) + } + } + return true +} diff --git a/lapack/native/dgetrs.go b/lapack/native/dgetrs.go new file mode 100644 index 00000000..9790d980 --- /dev/null +++ b/lapack/native/dgetrs.go @@ -0,0 +1,55 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dgetrs solves a system of equations using an LU factorization. +// The system of equations solved is +// A * X = B if trans == blas.Trans +// A^T * X = B if trans == blas.NoTrans +// A is a general n×n matrix with stride lda. B is a general matrix of size n×nrhs. +// +// On entry b contains the elements of the matrix B. On exit, b contains the +// elements of X, the solution to the system of equations. +// +// a and ipiv contain the LU factorization of A and the permutation indices as +// computed by Dgetrf. ipiv is zero-indexed. +func (impl Implementation) Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int) { + checkMatrix(n, n, a, lda) + checkMatrix(n, nrhs, b, ldb) + if len(ipiv) < n { + panic(badIpiv) + } + if n == 0 || nrhs == 0 { + return + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + bi := blas64.Implementation() + if trans == blas.NoTrans { + // Solve A * X = B. + impl.Dlaswp(nrhs, b, ldb, 0, n-1, ipiv, 1) + // Solve L * X = B, updating b. + bi.Dtrsm(blas.Left, blas.Lower, blas.NoTrans, blas.Unit, + n, nrhs, 1, a, lda, b, ldb) + // Solve U * X = B, updating b. + bi.Dtrsm(blas.Left, blas.Upper, blas.NoTrans, blas.NonUnit, + n, nrhs, 1, a, lda, b, ldb) + return + } + // Solve A^T * X = B. + // Solve U^T * X = B, updating b. + bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, + n, nrhs, 1, a, lda, b, ldb) + // Solve L^T * X = B, updating b. + bi.Dtrsm(blas.Left, blas.Lower, blas.Trans, blas.Unit, + n, nrhs, 1, a, lda, b, ldb) + impl.Dlaswp(nrhs, b, ldb, 0, n-1, ipiv, -1) +} diff --git a/lapack/native/dggsvd3.go b/lapack/native/dggsvd3.go new file mode 100644 index 00000000..363243ec --- /dev/null +++ b/lapack/native/dggsvd3.go @@ -0,0 +1,230 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dggsvd3 computes the generalized singular value decomposition (GSVD) +// of an m×n matrix A and p×n matrix B: +// U^T*A*Q = D1*[ 0 R ] +// +// V^T*B*Q = D2*[ 0 R ] +// where U, V and Q are orthogonal matrices. +// +// Dggsvd3 returns k and l, the dimensions of the sub-blocks. k+l +// is the effective numerical rank of the (m+p)×n matrix [ A^T B^T ]^T. +// R is a (k+l)×(k+l) nonsingular upper triangular matrix, D1 and +// D2 are m×(k+l) and p×(k+l) diagonal matrices and of the following +// structures, respectively: +// +// If m-k-l >= 0, +// +// k l +// D1 = k [ I 0 ] +// l [ 0 C ] +// m-k-l [ 0 0 ] +// +// k l +// D2 = l [ 0 S ] +// p-l [ 0 0 ] +// +// n-k-l k l +// [ 0 R ] = k [ 0 R11 R12 ] k +// l [ 0 0 R22 ] l +// +// where +// +// C = diag( alpha_k, ... , alpha_{k+l} ), +// S = diag( beta_k, ... , beta_{k+l} ), +// C^2 + S^2 = I. +// +// R is stored in +// A[0:k+l, n-k-l:n] +// on exit. +// +// If m-k-l < 0, +// +// k m-k k+l-m +// D1 = k [ I 0 0 ] +// m-k [ 0 C 0 ] +// +// k m-k k+l-m +// D2 = m-k [ 0 S 0 ] +// k+l-m [ 0 0 I ] +// p-l [ 0 0 0 ] +// +// n-k-l k m-k k+l-m +// [ 0 R ] = k [ 0 R11 R12 R13 ] +// m-k [ 0 0 R22 R23 ] +// k+l-m [ 0 0 0 R33 ] +// +// where +// C = diag( alpha_k, ... , alpha_m ), +// S = diag( beta_k, ... , beta_m ), +// C^2 + S^2 = I. +// +// R = [ R11 R12 R13 ] is stored in A[1:m, n-k-l+1:n] +// [ 0 R22 R23 ] +// and R33 is stored in +// B[m-k:l, n+m-k-l:n] on exit. +// +// Dggsvd3 computes C, S, R, and optionally the orthogonal transformation +// matrices U, V and Q. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// alpha and beta must have length n or Dggsvd3 will panic. On exit, alpha and +// beta contain the generalized singular value pairs of A and B +// alpha[0:k] = 1, +// beta[0:k] = 0, +// if m-k-l >= 0, +// alpha[k:k+l] = diag(C), +// beta[k:k+l] = diag(S), +// if m-k-l < 0, +// alpha[k:m]= C, alpha[m:k+l]= 0 +// beta[k:m] = S, beta[m:k+l] = 1. +// if k+l < n, +// alpha[k+l:n] = 0 and +// beta[k+l:n] = 0. +// +// On exit, iwork contains the permutation required to sort alpha descending. +// +// iwork must have length n, work must have length at least max(1, lwork), and +// lwork must be -1 or greater than n, otherwise Dggsvd3 will panic. If +// lwork is -1, work[0] holds the optimal lwork on return, but Dggsvd3 does +// not perform the GSVD. +func (impl Implementation) Dggsvd3(jobU, jobV, jobQ lapack.GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool) { + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + wantu := jobU == lapack.GSVDU + if wantu { + checkMatrix(m, m, u, ldu) + } else if jobU != lapack.GSVDNone { + panic(badGSVDJob + "U") + } + wantv := jobV == lapack.GSVDV + if wantv { + checkMatrix(p, p, v, ldv) + } else if jobV != lapack.GSVDNone { + panic(badGSVDJob + "V") + } + wantq := jobQ == lapack.GSVDQ + if wantq { + checkMatrix(n, n, q, ldq) + } else if jobQ != lapack.GSVDNone { + panic(badGSVDJob + "Q") + } + + if len(alpha) != n { + panic(badAlpha) + } + if len(beta) != n { + panic(badBeta) + } + + if lwork != -1 && lwork <= n { + panic(badWork) + } + if len(work) < max(1, lwork) { + panic(shortWork) + } + if len(iwork) < n { + panic(badWork) + } + + // Determine optimal work length. + impl.Dggsvp3(jobU, jobV, jobQ, + m, p, n, + a, lda, + b, ldb, + 0, 0, + u, ldu, + v, ldv, + q, ldq, + iwork, + work, work, -1) + lwkopt := n + int(work[0]) + lwkopt = max(lwkopt, 2*n) + lwkopt = max(lwkopt, 1) + work[0] = float64(lwkopt) + if lwork == -1 { + return 0, 0, true + } + + // Compute the Frobenius norm of matrices A and B. + anorm := impl.Dlange(lapack.NormFrob, m, n, a, lda, nil) + bnorm := impl.Dlange(lapack.NormFrob, p, n, b, ldb, nil) + + // Get machine precision and set up threshold for determining + // the effective numerical rank of the matrices A and B. + tola := float64(max(m, n)) * math.Max(anorm, dlamchS) * dlamchP + tolb := float64(max(p, n)) * math.Max(bnorm, dlamchS) * dlamchP + + // Preprocessing. + k, l = impl.Dggsvp3(jobU, jobV, jobQ, + m, p, n, + a, lda, + b, ldb, + tola, tolb, + u, ldu, + v, ldv, + q, ldq, + iwork, + work[:n], work[n:], lwork-n) + + // Compute the GSVD of two upper "triangular" matrices. + _, ok = impl.Dtgsja(jobU, jobV, jobQ, + m, p, n, + k, l, + a, lda, + b, ldb, + tola, tolb, + alpha, beta, + u, ldu, + v, ldv, + q, ldq, + work) + + // Sort the singular values and store the pivot indices in iwork + // Copy alpha to work, then sort alpha in work. + bi := blas64.Implementation() + bi.Dcopy(n, alpha, 1, work[:n], 1) + ibnd := min(l, m-k) + for i := 0; i < ibnd; i++ { + // Scan for largest alpha_{k+i}. + isub := i + smax := work[k+i] + for j := i + 1; j < ibnd; j++ { + if v := work[k+j]; v > smax { + isub = j + smax = v + } + } + if isub != i { + work[k+isub] = work[k+i] + work[k+i] = smax + iwork[k+i] = k + isub + } else { + iwork[k+i] = k + i + } + } + + work[0] = float64(lwkopt) + + return k, l, ok +} diff --git a/lapack/native/dggsvp3.go b/lapack/native/dggsvp3.go new file mode 100644 index 00000000..acf06a12 --- /dev/null +++ b/lapack/native/dggsvp3.go @@ -0,0 +1,273 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dggsvp3 computes orthogonal matrices U, V and Q such that +// +// n-k-l k l +// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l >= 0; +// l [ 0 0 A23 ] +// m-k-l [ 0 0 0 ] +// +// n-k-l k l +// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l < 0; +// m-k [ 0 0 A23 ] +// +// n-k-l k l +// V^T*B*Q = l [ 0 0 B13 ] +// p-l [ 0 0 0 ] +// +// where the k×k matrix A12 and l×l matrix B13 are non-singular +// upper triangular. A23 is l×l upper triangular if m-k-l >= 0, +// otherwise A23 is (m-k)×l upper trapezoidal. +// +// Dggsvp3 returns k and l, the dimensions of the sub-blocks. k+l +// is the effective numerical rank of the (m+p)×n matrix [ A^T B^T ]^T. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// tola and tolb are the convergence criteria for the Jacobi-Kogbetliantz +// iteration procedure. Generally, they are the same as used in the preprocessing +// step, for example, +// tola = max(m, n)*norm(A)*eps, +// tolb = max(p, n)*norm(B)*eps. +// Where eps is the machine epsilon. +// +// iwork must have length n, work must have length at least max(1, lwork), and +// lwork must be -1 or greater than zero, otherwise Dggsvp3 will panic. +// +// Dggsvp3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, iwork []int, tau, work []float64, lwork int) (k, l int) { + const forward = true + + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + wantu := jobU == lapack.GSVDU + if !wantu && jobU != lapack.GSVDNone { + panic(badGSVDJob + "U") + } + if jobU != lapack.GSVDNone { + checkMatrix(m, m, u, ldu) + } + + wantv := jobV == lapack.GSVDV + if !wantv && jobV != lapack.GSVDNone { + panic(badGSVDJob + "V") + } + if jobV != lapack.GSVDNone { + checkMatrix(p, p, v, ldv) + } + + wantq := jobQ == lapack.GSVDQ + if !wantq && jobQ != lapack.GSVDNone { + panic(badGSVDJob + "Q") + } + if jobQ != lapack.GSVDNone { + checkMatrix(n, n, q, ldq) + } + + if len(iwork) != n { + panic(badWork) + } + if lwork != -1 && lwork < 1 { + panic(badWork) + } + if len(work) < max(1, lwork) { + panic(badWork) + } + + var lwkopt int + impl.Dgeqp3(p, n, b, ldb, iwork, tau, work, -1) + lwkopt = int(work[0]) + if wantv { + lwkopt = max(lwkopt, p) + } + lwkopt = max(lwkopt, min(n, p)) + lwkopt = max(lwkopt, m) + if wantq { + lwkopt = max(lwkopt, n) + } + impl.Dgeqp3(m, n, a, lda, iwork, tau, work, -1) + lwkopt = max(lwkopt, int(work[0])) + lwkopt = max(1, lwkopt) + if lwork == -1 { + work[0] = float64(lwkopt) + return 0, 0 + } + + // tau check must come after lwkopt query since + // the Dggsvd3 call for lwkopt query may have + // lwork == -1, and tau is provided by work. + if len(tau) < n { + panic(badTau) + } + + // QR with column pivoting of B: B*P = V*[ S11 S12 ]. + // [ 0 0 ] + for i := range iwork[:n] { + iwork[i] = 0 + } + impl.Dgeqp3(p, n, b, ldb, iwork, tau, work, lwork) + + // Update A := A*P. + impl.Dlapmt(forward, m, n, a, lda, iwork) + + // Determine the effective rank of matrix B. + for i := 0; i < min(p, n); i++ { + if math.Abs(b[i*ldb+i]) > tolb { + l++ + } + } + + if wantv { + // Copy the details of V, and form V. + impl.Dlaset(blas.All, p, p, 0, 0, v, ldv) + if p > 1 { + impl.Dlacpy(blas.Lower, p-1, min(p, n), b[ldb:], ldb, v[ldv:], ldv) + } + impl.Dorg2r(p, p, min(p, n), v, ldv, tau, work) + } + + // Clean up B. + for i := 1; i < l; i++ { + r := b[i*ldb : i*ldb+i] + for j := range r { + r[j] = 0 + } + } + if p > l { + impl.Dlaset(blas.All, p-l, n, 0, 0, b[l*ldb:], ldb) + } + + if wantq { + // Set Q = I and update Q := Q*P. + impl.Dlaset(blas.All, n, n, 0, 1, q, ldq) + impl.Dlapmt(forward, n, n, q, ldq, iwork) + } + + if p >= l && n != l { + // RQ factorization of [ S11 S12 ]: [ S11 S12 ] = [ 0 S12 ]*Z. + impl.Dgerq2(l, n, b, ldb, tau, work) + + // Update A := A*Z^T. + impl.Dormr2(blas.Right, blas.Trans, m, n, l, b, ldb, tau, a, lda, work) + + if wantq { + // Update Q := Q*Z^T. + impl.Dormr2(blas.Right, blas.Trans, n, n, l, b, ldb, tau, q, ldq, work) + } + + // Clean up B. + impl.Dlaset(blas.All, l, n-l, 0, 0, b, ldb) + for i := 1; i < l; i++ { + r := b[i*ldb+n-l : i*ldb+i+n-l] + for j := range r { + r[j] = 0 + } + } + } + + // Let N-L L + // A = [ A11 A12 ] M, + // + // then the following does the complete QR decomposition of A11: + // + // A11 = U*[ 0 T12 ]*P1^T. + // [ 0 0 ] + for i := range iwork[:n-l] { + iwork[i] = 0 + } + impl.Dgeqp3(m, n-l, a, lda, iwork[:n-l], tau, work, lwork) + + // Determine the effective rank of A11. + for i := 0; i < min(m, n-l); i++ { + if math.Abs(a[i*lda+i]) > tola { + k++ + } + } + + // Update A12 := U^T*A12, where A12 = A[0:m, n-l:n]. + impl.Dorm2r(blas.Left, blas.Trans, m, l, min(m, n-l), a, lda, tau, a[n-l:], lda, work) + + if wantu { + // Copy the details of U, and form U. + impl.Dlaset(blas.All, m, m, 0, 0, u, ldu) + if m > 1 { + impl.Dlacpy(blas.Lower, m-1, min(m, n-l), a[lda:], lda, u[ldu:], ldu) + } + impl.Dorg2r(m, m, min(m, n-l), u, ldu, tau, work) + } + + if wantq { + // Update Q[0:n, 0:n-l] := Q[0:n, 0:n-l]*P1. + impl.Dlapmt(forward, n, n-l, q, ldq, iwork[:n-l]) + } + + // Clean up A: set the strictly lower triangular part of + // A[0:k, 0:k] = 0, and A[k:m, 0:n-l] = 0. + for i := 1; i < k; i++ { + r := a[i*lda : i*lda+i] + for j := range r { + r[j] = 0 + } + } + if m > k { + impl.Dlaset(blas.All, m-k, n-l, 0, 0, a[k*lda:], lda) + } + + if n-l > k { + // RQ factorization of [ T11 T12 ] = [ 0 T12 ]*Z1. + impl.Dgerq2(k, n-l, a, lda, tau, work) + + if wantq { + // Update Q[0:n, 0:n-l] := Q[0:n, 0:n-l]*Z1^T. + impl.Dorm2r(blas.Right, blas.Trans, n, n-l, k, a, lda, tau, q, ldq, work) + } + + // Clean up A. + impl.Dlaset(blas.All, k, n-l-k, 0, 0, a, lda) + for i := 1; i < k; i++ { + r := a[i*lda+n-k-l : i*lda+i+n-k-l] + for j := range r { + a[j] = 0 + } + } + } + + if m > k { + // QR factorization of A[k:m, n-l:n]. + impl.Dgeqr2(m-k, l, a[k*lda+n-l:], lda, tau, work) + if wantu { + // Update U[:, k:m) := U[:, k:m]*U1. + impl.Dorm2r(blas.Right, blas.NoTrans, m, m-k, min(m-k, l), a[k*lda+n-l:], lda, tau, u[k:], ldu, work) + } + + // Clean up A. + for i := k + 1; i < m; i++ { + r := a[i*lda+n-l : i*lda+min(n-l+i-k, n)] + for j := range r { + r[j] = 0 + } + } + } + + work[0] = float64(lwkopt) + return k, l +} diff --git a/lapack/native/dhseqr.go b/lapack/native/dhseqr.go new file mode 100644 index 00000000..2b206f11 --- /dev/null +++ b/lapack/native/dhseqr.go @@ -0,0 +1,257 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dhseqr computes the eigenvalues of an n×n Hessenberg matrix H and, +// optionally, the matrices T and Z from the Schur decomposition +// H = Z T Z^T, +// where T is an n×n upper quasi-triangular matrix (the Schur form), and Z is +// the n×n orthogonal matrix of Schur vectors. +// +// Optionally Z may be postmultiplied into an input orthogonal matrix Q so that +// this routine can give the Schur factorization of a matrix A which has been +// reduced to the Hessenberg form H by the orthogonal matrix Q: +// A = Q H Q^T = (QZ) T (QZ)^T. +// +// If job == lapack.EigenvaluesOnly, only the eigenvalues will be computed. +// If job == lapack.EigenvaluesAndSchur, the eigenvalues and the Schur form T will +// be computed. +// For other values of job Dhseqr will panic. +// +// If compz == lapack.None, no Schur vectors will be computed and Z will not be +// referenced. +// If compz == lapack.HessEV, on return Z will contain the matrix of Schur +// vectors of H. +// If compz == lapack.OriginalEV, on entry z is assumed to contain the orthogonal +// matrix Q that is the identity except for the submatrix +// Q[ilo:ihi+1,ilo:ihi+1]. On return z will be updated to the product Q*Z. +// +// ilo and ihi determine the block of H on which Dhseqr operates. It is assumed +// that H is already upper triangular in rows and columns [0:ilo] and [ihi+1:n], +// although it will be only checked that the block is isolated, that is, +// ilo == 0 or H[ilo,ilo-1] == 0, +// ihi == n-1 or H[ihi+1,ihi] == 0, +// and Dhseqr will panic otherwise. ilo and ihi are typically set by a previous +// call to Dgebal, otherwise they should be set to 0 and n-1, respectively. It +// must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo == 0 and ihi == -1, if n == 0. +// +// wr and wi must have length n. +// +// work must have length at least lwork and lwork must be at least max(1,n) +// otherwise Dhseqr will panic. The minimum lwork delivers very good and +// sometimes optimal performance, although lwork as large as 11*n may be +// required. On return, work[0] will contain the optimal value of lwork. +// +// If lwork is -1, instead of performing Dhseqr, the function only estimates the +// optimal workspace size and stores it into work[0]. Neither h nor z are +// accessed. +// +// unconverged indicates whether Dhseqr computed all the eigenvalues. +// +// If unconverged == 0, all the eigenvalues have been computed and their real +// and imaginary parts will be stored on return in wr and wi, respectively. If +// two eigenvalues are computed as a complex conjugate pair, they are stored in +// consecutive elements of wr and wi, say the i-th and (i+1)th, with wi[i] > 0 +// and wi[i+1] < 0. +// +// If unconverged == 0 and job == lapack.EigenvaluesAndSchur, on return H will +// contain the upper quasi-triangular matrix T from the Schur decomposition (the +// Schur form). 2×2 diagonal blocks (corresponding to complex conjugate pairs of +// eigenvalues) will be returned in standard form, with +// H[i,i] == H[i+1,i+1], +// and +// H[i+1,i]*H[i,i+1] < 0. +// The eigenvalues will be stored in wr and wi in the same order as on the +// diagonal of the Schur form returned in H, with +// wr[i] = H[i,i], +// and, if H[i:i+2,i:i+2] is a 2×2 diagonal block, +// wi[i] = sqrt(-H[i+1,i]*H[i,i+1]), +// wi[i+1] = -wi[i]. +// +// If unconverged == 0 and job == lapack.EigenvaluesOnly, the contents of h +// on return is unspecified. +// +// If unconverged > 0, some eigenvalues have not converged, and the blocks +// [0:ilo] and [unconverged:n] of wr and wi will contain those eigenvalues which +// have been successfully computed. Failures are rare. +// +// If unconverged > 0 and job == lapack.EigenvaluesOnly, on return the +// remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg +// matrix H[ilo:unconverged,ilo:unconverged]. +// +// If unconverged > 0 and job == lapack.EigenvaluesAndSchur, then on +// return +// (initial H) U = U (final H), (*) +// where U is an orthogonal matrix. The final H is upper Hessenberg and +// H[unconverged:ihi+1,unconverged:ihi+1] is upper quasi-triangular. +// +// If unconverged > 0 and compz == lapack.OriginalEV, then on return +// (final Z) = (initial Z) U, +// where U is the orthogonal matrix in (*) regardless of the value of job. +// +// If unconverged > 0 and compz == lapack.HessEV, then on return +// (final Z) = U, +// where U is the orthogonal matrix in (*) regardless of the value of job. +// +// References: +// [1] R. Byers. LAPACK 3.1 xHSEQR: Tuning and Implementation Notes on the +// Small Bulge Multi-Shift QR Algorithm with Aggressive Early Deflation. +// LAPACK Working Note 187 (2007) +// URL: http://www.netlib.org/lapack/lawnspdf/lawn187.pdf +// [2] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part I: +// Maintaining Well-Focused Shifts and Level 3 Performance. SIAM J. Matrix +// Anal. Appl. 23(4) (2002), pp. 929—947 +// URL: http://dx.doi.org/10.1137/S0895479801384573 +// [3] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part II: +// Aggressive Early Deflation. SIAM J. Matrix Anal. Appl. 23(4) (2002), pp. 948—973 +// URL: http://dx.doi.org/10.1137/S0895479801384585 +// +// Dhseqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dhseqr(job lapack.EVJob, compz lapack.EVComp, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, z []float64, ldz int, work []float64, lwork int) (unconverged int) { + var wantt bool + switch job { + default: + panic(badEVJob) + case lapack.EigenvaluesOnly: + case lapack.EigenvaluesAndSchur: + wantt = true + } + var wantz bool + switch compz { + default: + panic(badEVComp) + case lapack.None: + case lapack.HessEV, lapack.OriginalEV: + wantz = true + } + switch { + case n < 0: + panic(nLT0) + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case len(work) < lwork: + panic(shortWork) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + } + if lwork != -1 { + checkMatrix(n, n, h, ldh) + switch { + case wantz: + checkMatrix(n, n, z, ldz) + case len(wr) < n: + panic("lapack: wr has insufficient length") + case len(wi) < n: + panic("lapack: wi has insufficient length") + } + } + + const ( + // Matrices of order ntiny or smaller must be processed by + // Dlahqr because of insufficient subdiagonal scratch space. + // This is a hard limit. + ntiny = 11 + + // nl is the size of a local workspace to help small matrices + // through a rare Dlahqr failure. nl > ntiny is required and + // nl <= nmin = Ilaenv(ispec=12,...) is recommended (the default + // value of nmin is 75). Using nl = 49 allows up to six + // simultaneous shifts and a 16×16 deflation window. + nl = 49 + ) + + // Quick return if possible. + if n == 0 { + work[0] = 1 + return 0 + } + + // Quick return in case of a workspace query. + if lwork == -1 { + impl.Dlaqr04(wantt, wantz, n, ilo, ihi, nil, 0, nil, nil, ilo, ihi, nil, 0, work, -1, 1) + work[0] = math.Max(float64(n), work[0]) + return 0 + } + + // Copy eigenvalues isolated by Dgebal. + for i := 0; i < ilo; i++ { + wr[i] = h[i*ldh+i] + wi[i] = 0 + } + for i := ihi + 1; i < n; i++ { + wr[i] = h[i*ldh+i] + wi[i] = 0 + } + + // Initialize Z to identity matrix if requested. + if compz == lapack.HessEV { + impl.Dlaset(blas.All, n, n, 0, 1, z, ldz) + } + + // Quick return if possible. + if ilo == ihi { + wr[ilo] = h[ilo*ldh+ilo] + wi[ilo] = 0 + return 0 + } + + // Dlahqr/Dlaqr04 crossover point. + nmin := impl.Ilaenv(12, "DHSEQR", string(job)+string(compz), n, ilo, ihi, lwork) + nmin = max(ntiny, nmin) + + if n > nmin { + // Dlaqr0 for big matrices. + unconverged = impl.Dlaqr04(wantt, wantz, n, ilo, ihi, h, ldh, wr[:ihi+1], wi[:ihi+1], + ilo, ihi, z, ldz, work, lwork, 1) + } else { + // Dlahqr for small matrices. + unconverged = impl.Dlahqr(wantt, wantz, n, ilo, ihi, h, ldh, wr[:ihi+1], wi[:ihi+1], + ilo, ihi, z, ldz) + if unconverged > 0 { + // A rare Dlahqr failure! Dlaqr04 sometimes succeeds + // when Dlahqr fails. + kbot := unconverged + if n >= nl { + // Larger matrices have enough subdiagonal + // scratch space to call Dlaqr04 directly. + unconverged = impl.Dlaqr04(wantt, wantz, n, ilo, kbot, h, ldh, + wr[:ihi+1], wi[:ihi+1], ilo, ihi, z, ldz, work, lwork, 1) + } else { + // Tiny matrices don't have enough subdiagonal + // scratch space to benefit from Dlaqr04. Hence, + // tiny matrices must be copied into a larger + // array before calling Dlaqr04. + var hl [nl * nl]float64 + impl.Dlacpy(blas.All, n, n, h, ldh, hl[:], nl) + impl.Dlaset(blas.All, nl, nl-n, 0, 0, hl[n:], nl) + var workl [nl]float64 + unconverged = impl.Dlaqr04(wantt, wantz, nl, ilo, kbot, hl[:], nl, + wr[:ihi+1], wi[:ihi+1], ilo, ihi, z, ldz, workl[:], nl, 1) + work[0] = workl[0] + if wantt || unconverged > 0 { + impl.Dlacpy(blas.All, n, n, hl[:], nl, h, ldh) + } + } + } + } + // Zero out under the first subdiagonal, if necessary. + if (wantt || unconverged > 0) && n > 2 { + impl.Dlaset(blas.Lower, n-2, n-2, 0, 0, h[2*ldh:], ldh) + } + + work[0] = math.Max(float64(n), work[0]) + return unconverged +} diff --git a/lapack/native/dlabrd.go b/lapack/native/dlabrd.go new file mode 100644 index 00000000..d9a566e5 --- /dev/null +++ b/lapack/native/dlabrd.go @@ -0,0 +1,150 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlabrd reduces the first NB rows and columns of a real general m×n matrix +// A to upper or lower bidiagonal form by an orthogonal transformation +// Q**T * A * P +// If m >= n, A is reduced to upper bidiagonal form and upon exit the elements +// on and below the diagonal in the first nb columns represent the elementary +// reflectors, and the elements above the diagonal in the first nb rows represent +// the matrix P. If m < n, A is reduced to lower bidiagonal form and the elements +// P is instead stored above the diagonal. +// +// The reduction to bidiagonal form is stored in d and e, where d are the diagonal +// elements, and e are the off-diagonal elements. +// +// The matrices Q and P are products of elementary reflectors +// Q = H_0 * H_1 * ... * H_{nb-1} +// P = G_0 * G_1 * ... * G_{nb-1} +// where +// H_i = I - tauQ[i] * v_i * v_i^T +// G_i = I - tauP[i] * u_i * u_i^T +// +// As an example, on exit the entries of A when m = 6, n = 5, and nb = 2 +// [ 1 1 u1 u1 u1] +// [v1 1 1 u2 u2] +// [v1 v2 a a a] +// [v1 v2 a a a] +// [v1 v2 a a a] +// [v1 v2 a a a] +// and when m = 5, n = 6, and nb = 2 +// [ 1 u1 u1 u1 u1 u1] +// [ 1 1 u2 u2 u2 u2] +// [v1 1 a a a a] +// [v1 v2 a a a a] +// [v1 v2 a a a a] +// +// Dlabrd also returns the matrices X and Y which are used with U and V to +// apply the transformation to the unreduced part of the matrix +// A := A - V*Y^T - X*U^T +// and returns the matrices X and Y which are needed to apply the +// transformation to the unreduced part of A. +// +// X is an m×nb matrix, Y is an n×nb matrix. d, e, taup, and tauq must all have +// length at least nb. Dlabrd will panic if these size constraints are violated. +// +// Dlabrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlabrd(m, n, nb int, a []float64, lda int, d, e, tauQ, tauP, x []float64, ldx int, y []float64, ldy int) { + checkMatrix(m, n, a, lda) + checkMatrix(m, nb, x, ldx) + checkMatrix(n, nb, y, ldy) + if len(d) < nb { + panic(badD) + } + if len(e) < nb { + panic(badE) + } + if len(tauQ) < nb { + panic(badTauQ) + } + if len(tauP) < nb { + panic(badTauP) + } + if m <= 0 || n <= 0 { + return + } + bi := blas64.Implementation() + if m >= n { + // Reduce to upper bidiagonal form. + for i := 0; i < nb; i++ { + bi.Dgemv(blas.NoTrans, m-i, i, -1, a[i*lda:], lda, y[i*ldy:], 1, 1, a[i*lda+i:], lda) + bi.Dgemv(blas.NoTrans, m-i, i, -1, x[i*ldx:], ldx, a[i:], lda, 1, a[i*lda+i:], lda) + + a[i*lda+i], tauQ[i] = impl.Dlarfg(m-i, a[i*lda+i], a[min(i+1, m-1)*lda+i:], lda) + d[i] = a[i*lda+i] + if i < n-1 { + // Compute Y[i+1:n, i]. + a[i*lda+i] = 1 + bi.Dgemv(blas.Trans, m-i, n-i-1, 1, a[i*lda+i+1:], lda, a[i*lda+i:], lda, 0, y[(i+1)*ldy+i:], ldy) + bi.Dgemv(blas.Trans, m-i, i, 1, a[i*lda:], lda, a[i*lda+i:], lda, 0, y[i:], ldy) + bi.Dgemv(blas.NoTrans, n-i-1, i, -1, y[(i+1)*ldy:], ldy, y[i:], ldy, 1, y[(i+1)*ldy+i:], ldy) + bi.Dgemv(blas.Trans, m-i, i, 1, x[i*ldx:], ldx, a[i*lda+i:], lda, 0, y[i:], ldy) + bi.Dgemv(blas.Trans, i, n-i-1, -1, a[i+1:], lda, y[i:], ldy, 1, y[(i+1)*ldy+i:], ldy) + bi.Dscal(n-i-1, tauQ[i], y[(i+1)*ldy+i:], ldy) + + // Update A[i, i+1:n]. + bi.Dgemv(blas.NoTrans, n-i-1, i+1, -1, y[(i+1)*ldy:], ldy, a[i*lda:], 1, 1, a[i*lda+i+1:], 1) + bi.Dgemv(blas.Trans, i, n-i-1, -1, a[i+1:], lda, x[i*ldx:], 1, 1, a[i*lda+i+1:], 1) + + // Generate reflection P[i] to annihilate A[i, i+2:n]. + a[i*lda+i+1], tauP[i] = impl.Dlarfg(n-i-1, a[i*lda+i+1], a[i*lda+min(i+2, n-1):], 1) + e[i] = a[i*lda+i+1] + a[i*lda+i+1] = 1 + + // Compute X[i+1:m, i]. + bi.Dgemv(blas.NoTrans, m-i-1, n-i-1, 1, a[(i+1)*lda+i+1:], lda, a[i*lda+i+1:], 1, 0, x[(i+1)*ldx+i:], ldx) + bi.Dgemv(blas.Trans, n-i-1, i+1, 1, y[(i+1)*ldy:], ldy, a[i*lda+i+1:], 1, 0, x[i:], ldx) + bi.Dgemv(blas.NoTrans, m-i-1, i+1, -1, a[(i+1)*lda:], lda, x[i:], ldx, 1, x[(i+1)*ldx+i:], ldx) + bi.Dgemv(blas.NoTrans, i, n-i-1, 1, a[i+1:], lda, a[i*lda+i+1:], 1, 0, x[i:], ldx) + bi.Dgemv(blas.NoTrans, m-i-1, i, -1, x[(i+1)*ldx:], ldx, x[i:], ldx, 1, x[(i+1)*ldx+i:], ldx) + bi.Dscal(m-i-1, tauP[i], x[(i+1)*ldx+i:], ldx) + } + } + return + } + // Reduce to lower bidiagonal form. + for i := 0; i < nb; i++ { + // Update A[i,i:n] + bi.Dgemv(blas.NoTrans, n-i, i, -1, y[i*ldy:], ldy, a[i*lda:], 1, 1, a[i*lda+i:], 1) + bi.Dgemv(blas.Trans, i, n-i, -1, a[i:], lda, x[i*ldx:], 1, 1, a[i*lda+i:], 1) + + // Generate reflection P[i] to annihilate A[i, i+1:n] + a[i*lda+i], tauP[i] = impl.Dlarfg(n-i, a[i*lda+i], a[i*lda+min(i+1, n-1):], 1) + d[i] = a[i*lda+i] + if i < m-1 { + a[i*lda+i] = 1 + // Compute X[i+1:m, i]. + bi.Dgemv(blas.NoTrans, m-i-1, n-i, 1, a[(i+1)*lda+i:], lda, a[i*lda+i:], 1, 0, x[(i+1)*ldx+i:], ldx) + bi.Dgemv(blas.Trans, n-i, i, 1, y[i*ldy:], ldy, a[i*lda+i:], 1, 0, x[i:], ldx) + bi.Dgemv(blas.NoTrans, m-i-1, i, -1, a[(i+1)*lda:], lda, x[i:], ldx, 1, x[(i+1)*ldx+i:], ldx) + bi.Dgemv(blas.NoTrans, i, n-i, 1, a[i:], lda, a[i*lda+i:], 1, 0, x[i:], ldx) + bi.Dgemv(blas.NoTrans, m-i-1, i, -1, x[(i+1)*ldx:], ldx, x[i:], ldx, 1, x[(i+1)*ldx+i:], ldx) + bi.Dscal(m-i-1, tauP[i], x[(i+1)*ldx+i:], ldx) + + // Update A[i+1:m, i]. + bi.Dgemv(blas.NoTrans, m-i-1, i, -1, a[(i+1)*lda:], lda, y[i*ldy:], 1, 1, a[(i+1)*lda+i:], lda) + bi.Dgemv(blas.NoTrans, m-i-1, i+1, -1, x[(i+1)*ldx:], ldx, a[i:], lda, 1, a[(i+1)*lda+i:], lda) + + // Generate reflection Q[i] to annihilate A[i+2:m, i]. + a[(i+1)*lda+i], tauQ[i] = impl.Dlarfg(m-i-1, a[(i+1)*lda+i], a[min(i+2, m-1)*lda+i:], lda) + e[i] = a[(i+1)*lda+i] + a[(i+1)*lda+i] = 1 + + // Compute Y[i+1:n, i]. + bi.Dgemv(blas.Trans, m-i-1, n-i-1, 1, a[(i+1)*lda+i+1:], lda, a[(i+1)*lda+i:], lda, 0, y[(i+1)*ldy+i:], ldy) + bi.Dgemv(blas.Trans, m-i-1, i, 1, a[(i+1)*lda:], lda, a[(i+1)*lda+i:], lda, 0, y[i:], ldy) + bi.Dgemv(blas.NoTrans, n-i-1, i, -1, y[(i+1)*ldy:], ldy, y[i:], ldy, 1, y[(i+1)*ldy+i:], ldy) + bi.Dgemv(blas.Trans, m-i-1, i+1, 1, x[(i+1)*ldx:], ldx, a[(i+1)*lda+i:], lda, 0, y[i:], ldy) + bi.Dgemv(blas.Trans, i+1, n-i-1, -1, a[i+1:], lda, y[i:], ldy, 1, y[(i+1)*ldy+i:], ldy) + bi.Dscal(n-i-1, tauQ[i], y[(i+1)*ldy+i:], ldy) + } + } +} diff --git a/lapack/native/dlacn2.go b/lapack/native/dlacn2.go new file mode 100644 index 00000000..fd1e2eb3 --- /dev/null +++ b/lapack/native/dlacn2.go @@ -0,0 +1,134 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dlacn2 estimates the 1-norm of an n×n matrix A using sequential updates with +// matrix-vector products provided externally. +// +// Dlacn2 is called sequentially and it returns the value of est and kase to be +// used on the next call. +// On the initial call, kase must be 0. +// In between calls, x must be overwritten by +// A * X if kase was returned as 1, +// A^T * X if kase was returned as 2, +// and all other parameters must not be changed. +// On the final return, kase is returned as 0, v contains A*W where W is a +// vector, and est = norm(V)/norm(W) is a lower bound for 1-norm of A. +// +// v, x, and isgn must all have length n and n must be at least 1, otherwise +// Dlacn2 will panic. isave is used for temporary storage. +// +// Dlacn2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlacn2(n int, v, x []float64, isgn []int, est float64, kase int, isave *[3]int) (float64, int) { + if n < 1 { + panic("lapack: non-positive n") + } + checkVector(n, x, 1) + checkVector(n, v, 1) + if len(isgn) < n { + panic("lapack: insufficient isgn length") + } + if isave[0] < 0 || isave[0] > 5 { + panic("lapack: bad isave value") + } + if isave[0] == 0 && kase != 0 { + panic("lapack: bad isave value") + } + itmax := 5 + bi := blas64.Implementation() + if kase == 0 { + for i := 0; i < n; i++ { + x[i] = 1 / float64(n) + } + kase = 1 + isave[0] = 1 + return est, kase + } + switch isave[0] { + default: + panic("unreachable") + case 1: + if n == 1 { + v[0] = x[0] + est = math.Abs(v[0]) + kase = 0 + return est, kase + } + est = bi.Dasum(n, x, 1) + for i := 0; i < n; i++ { + x[i] = math.Copysign(1, x[i]) + isgn[i] = int(x[i]) + } + kase = 2 + isave[0] = 2 + return est, kase + case 2: + isave[1] = bi.Idamax(n, x, 1) + isave[2] = 2 + for i := 0; i < n; i++ { + x[i] = 0 + } + x[isave[1]] = 1 + kase = 1 + isave[0] = 3 + return est, kase + case 3: + bi.Dcopy(n, x, 1, v, 1) + estold := est + est = bi.Dasum(n, v, 1) + sameSigns := true + for i := 0; i < n; i++ { + if int(math.Copysign(1, x[i])) != isgn[i] { + sameSigns = false + break + } + } + if !sameSigns && est > estold { + for i := 0; i < n; i++ { + x[i] = math.Copysign(1, x[i]) + isgn[i] = int(x[i]) + } + kase = 2 + isave[0] = 4 + return est, kase + } + case 4: + jlast := isave[1] + isave[1] = bi.Idamax(n, x, 1) + if x[jlast] != math.Abs(x[isave[1]]) && isave[2] < itmax { + isave[2] += 1 + for i := 0; i < n; i++ { + x[i] = 0 + } + x[isave[1]] = 1 + kase = 1 + isave[0] = 3 + return est, kase + } + case 5: + tmp := 2 * (bi.Dasum(n, x, 1)) / float64(3*n) + if tmp > est { + bi.Dcopy(n, x, 1, v, 1) + est = tmp + } + kase = 0 + return est, kase + } + // Iteration complete. Final stage + altsgn := 1.0 + for i := 0; i < n; i++ { + x[i] = altsgn * (1 + float64(i)/float64(n-1)) + altsgn *= -1 + } + kase = 1 + isave[0] = 5 + return est, kase +} diff --git a/lapack/native/dlacpy.go b/lapack/native/dlacpy.go new file mode 100644 index 00000000..e0c7902b --- /dev/null +++ b/lapack/native/dlacpy.go @@ -0,0 +1,40 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dlacpy copies the elements of A specified by uplo into B. Uplo can specify +// a triangular portion with blas.Upper or blas.Lower, or can specify all of the +// elemest with blas.All. +// +// Dlacpy is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlacpy(uplo blas.Uplo, m, n int, a []float64, lda int, b []float64, ldb int) { + checkMatrix(m, n, a, lda) + checkMatrix(m, n, b, ldb) + switch uplo { + default: + panic(badUplo) + case blas.Upper: + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + b[i*ldb+j] = a[i*lda+j] + } + } + + case blas.Lower: + for i := 0; i < m; i++ { + for j := 0; j < min(i+1, n); j++ { + b[i*ldb+j] = a[i*lda+j] + } + } + case blas.All: + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + b[i*ldb+j] = a[i*lda+j] + } + } + } +} diff --git a/lapack/native/dlae2.go b/lapack/native/dlae2.go new file mode 100644 index 00000000..c2fb96ce --- /dev/null +++ b/lapack/native/dlae2.go @@ -0,0 +1,49 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlae2 computes the eigenvalues of a 2×2 symmetric matrix +// [a b] +// [b c] +// and returns the eigenvalue with the larger absolute value as rt1 and the +// smaller as rt2. +// +// Dlae2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlae2(a, b, c float64) (rt1, rt2 float64) { + sm := a + c + df := a - c + adf := math.Abs(df) + tb := b + b + ab := math.Abs(tb) + acmx := c + acmn := a + if math.Abs(a) > math.Abs(c) { + acmx = a + acmn = c + } + var rt float64 + if adf > ab { + rt = adf * math.Sqrt(1+(ab/adf)*(ab/adf)) + } else if adf < ab { + rt = ab * math.Sqrt(1+(adf/ab)*(adf/ab)) + } else { + rt = ab * math.Sqrt2 + } + if sm < 0 { + rt1 = 0.5 * (sm - rt) + rt2 = (acmx/rt1)*acmn - (b/rt1)*b + return rt1, rt2 + } + if sm > 0 { + rt1 = 0.5 * (sm + rt) + rt2 = (acmx/rt1)*acmn - (b/rt1)*b + return rt1, rt2 + } + rt1 = 0.5 * rt + rt2 = -0.5 * rt + return rt1, rt2 +} diff --git a/lapack/native/dlaev2.go b/lapack/native/dlaev2.go new file mode 100644 index 00000000..7cae50d7 --- /dev/null +++ b/lapack/native/dlaev2.go @@ -0,0 +1,82 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlaev2 computes the Eigen decomposition of a symmetric 2×2 matrix. +// The matrix is given by +// [a b] +// [b c] +// Dlaev2 returns rt1 and rt2, the eigenvalues of the matrix where |RT1| > |RT2|, +// and [cs1, sn1] which is the unit right eigenvalue for RT1. +// [ cs1 sn1] [a b] [cs1 -sn1] = [rt1 0] +// [-sn1 cs1] [b c] [sn1 cs1] [ 0 rt2] +// +// Dlaev2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaev2(a, b, c float64) (rt1, rt2, cs1, sn1 float64) { + sm := a + c + df := a - c + adf := math.Abs(df) + tb := b + b + ab := math.Abs(tb) + acmx := c + acmn := a + if math.Abs(a) > math.Abs(c) { + acmx = a + acmn = c + } + var rt float64 + if adf > ab { + rt = adf * math.Sqrt(1+(ab/adf)*(ab/adf)) + } else if adf < ab { + rt = ab * math.Sqrt(1+(adf/ab)*(adf/ab)) + } else { + rt = ab * math.Sqrt(2) + } + var sgn1 float64 + if sm < 0 { + rt1 = 0.5 * (sm - rt) + sgn1 = -1 + rt2 = (acmx/rt1)*acmn - (b/rt1)*b + } else if sm > 0 { + rt1 = 0.5 * (sm + rt) + sgn1 = 1 + rt2 = (acmx/rt1)*acmn - (b/rt1)*b + } else { + rt1 = 0.5 * rt + rt2 = -0.5 * rt + sgn1 = 1 + } + var cs, sgn2 float64 + if df >= 0 { + cs = df + rt + sgn2 = 1 + } else { + cs = df - rt + sgn2 = -1 + } + acs := math.Abs(cs) + if acs > ab { + ct := -tb / cs + sn1 = 1 / math.Sqrt(1+ct*ct) + cs1 = ct * sn1 + } else { + if ab == 0 { + cs1 = 1 + sn1 = 0 + } else { + tn := -cs / tb + cs1 = 1 / math.Sqrt(1+tn*tn) + sn1 = tn * cs1 + } + } + if sgn1 == sgn2 { + tn := cs1 + cs1 = -sn1 + sn1 = tn + } + return rt1, rt2, cs1, sn1 +} diff --git a/lapack/native/dlaexc.go b/lapack/native/dlaexc.go new file mode 100644 index 00000000..47a5f810 --- /dev/null +++ b/lapack/native/dlaexc.go @@ -0,0 +1,261 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlaexc swaps two adjacent diagonal blocks of order 1 or 2 in an n×n upper +// quasi-triangular matrix T by an orthogonal similarity transformation. +// +// T must be in Schur canonical form, that is, block upper triangular with 1×1 +// and 2×2 diagonal blocks; each 2×2 diagonal block has its diagonal elements +// equal and its off-diagonal elements of opposite sign. On return, T will +// contain the updated matrix again in Schur canonical form. +// +// If wantq is true, the transformation is accumulated in the n×n matrix Q, +// otherwise Q is not referenced. +// +// j1 is the index of the first row of the first block. n1 and n2 are the order +// of the first and second block, respectively. +// +// work must have length at least n, otherwise Dlaexc will panic. +// +// If ok is false, the transformed matrix T would be too far from Schur form. +// The blocks are not swapped, and T and Q are not modified. +// +// If n1 and n2 are both equal to 1, Dlaexc will always return true. +// +// Dlaexc is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaexc(wantq bool, n int, t []float64, ldt int, q []float64, ldq int, j1, n1, n2 int, work []float64) (ok bool) { + checkMatrix(n, n, t, ldt) + if wantq { + checkMatrix(n, n, q, ldq) + } + if j1 < 0 || n <= j1 { + panic("lapack: index j1 out of range") + } + if len(work) < n { + panic(badWork) + } + if n1 < 0 || 2 < n1 { + panic("lapack: invalid value of n1") + } + if n2 < 0 || 2 < n2 { + panic("lapack: invalid value of n2") + } + + if n == 0 || n1 == 0 || n2 == 0 { + return true + } + if j1+n1 >= n { + // TODO(vladimir-ch): Reference LAPACK does this check whether + // the start of the second block is in the matrix T. It returns + // true if it is not and moreover it does not check whether the + // whole second block fits into T. This does not feel + // satisfactory. The only caller of Dlaexc is Dtrexc, so if the + // caller makes sure that this does not happen, we could be + // stricter here. + return true + } + + j2 := j1 + 1 + j3 := j1 + 2 + + bi := blas64.Implementation() + + if n1 == 1 && n2 == 1 { + // Swap two 1×1 blocks. + t11 := t[j1*ldt+j1] + t22 := t[j2*ldt+j2] + + // Determine the transformation to perform the interchange. + cs, sn, _ := impl.Dlartg(t[j1*ldt+j2], t22-t11) + + // Apply transformation to the matrix T. + if n-j3 > 0 { + bi.Drot(n-j3, t[j1*ldt+j3:], 1, t[j2*ldt+j3:], 1, cs, sn) + } + if j1 > 0 { + bi.Drot(j1, t[j1:], ldt, t[j2:], ldt, cs, sn) + } + + t[j1*ldt+j1] = t22 + t[j2*ldt+j2] = t11 + + if wantq { + // Accumulate transformation in the matrix Q. + bi.Drot(n, q[j1:], ldq, q[j2:], ldq, cs, sn) + } + + return true + } + + // Swapping involves at least one 2×2 block. + // + // Copy the diagonal block of order n1+n2 to the local array d and + // compute its norm. + nd := n1 + n2 + var d [16]float64 + const ldd = 4 + impl.Dlacpy(blas.All, nd, nd, t[j1*ldt+j1:], ldt, d[:], ldd) + dnorm := impl.Dlange(lapack.MaxAbs, nd, nd, d[:], ldd, work) + + // Compute machine-dependent threshold for test for accepting swap. + eps := dlamchP + thresh := math.Max(10*eps*dnorm, dlamchS/eps) + + // Solve T11*X - X*T22 = scale*T12 for X. + var x [4]float64 + const ldx = 2 + scale, _, _ := impl.Dlasy2(false, false, -1, n1, n2, d[:], ldd, d[n1*ldd+n1:], ldd, d[n1:], ldd, x[:], ldx) + + // Swap the adjacent diagonal blocks. + switch { + case n1 == 1 && n2 == 2: + // Generate elementary reflector H so that + // ( scale, X11, X12 ) H = ( 0, 0, * ) + u := [3]float64{scale, x[0], 1} + _, tau := impl.Dlarfg(3, x[1], u[:2], 1) + t11 := t[j1*ldt+j1] + + // Perform swap provisionally on diagonal block in d. + impl.Dlarfx(blas.Left, 3, 3, u[:], tau, d[:], ldd, work) + impl.Dlarfx(blas.Right, 3, 3, u[:], tau, d[:], ldd, work) + + // Test whether to reject swap. + if math.Max(math.Abs(d[2*ldd]), math.Max(math.Abs(d[2*ldd+1]), math.Abs(d[2*ldd+2]-t11))) > thresh { + return false + } + + // Accept swap: apply transformation to the entire matrix T. + impl.Dlarfx(blas.Left, 3, n-j1, u[:], tau, t[j1*ldt+j1:], ldt, work) + impl.Dlarfx(blas.Right, j2+1, 3, u[:], tau, t[j1:], ldt, work) + + t[j3*ldt+j1] = 0 + t[j3*ldt+j2] = 0 + t[j3*ldt+j3] = t11 + + if wantq { + // Accumulate transformation in the matrix Q. + impl.Dlarfx(blas.Right, n, 3, u[:], tau, q[j1:], ldq, work) + } + + case n1 == 2 && n2 == 1: + // Generate elementary reflector H so that: + // H ( -X11 ) = ( * ) + // ( -X21 ) = ( 0 ) + // ( scale ) = ( 0 ) + u := [3]float64{1, -x[ldx], scale} + _, tau := impl.Dlarfg(3, -x[0], u[1:], 1) + t33 := t[j3*ldt+j3] + + // Perform swap provisionally on diagonal block in D. + impl.Dlarfx(blas.Left, 3, 3, u[:], tau, d[:], ldd, work) + impl.Dlarfx(blas.Right, 3, 3, u[:], tau, d[:], ldd, work) + + // Test whether to reject swap. + if math.Max(math.Abs(d[ldd]), math.Max(math.Abs(d[2*ldd]), math.Abs(d[0]-t33))) > thresh { + return false + } + + // Accept swap: apply transformation to the entire matrix T. + impl.Dlarfx(blas.Right, j3+1, 3, u[:], tau, t[j1:], ldt, work) + impl.Dlarfx(blas.Left, 3, n-j1-1, u[:], tau, t[j1*ldt+j2:], ldt, work) + + t[j1*ldt+j1] = t33 + t[j2*ldt+j1] = 0 + t[j3*ldt+j1] = 0 + + if wantq { + // Accumulate transformation in the matrix Q. + impl.Dlarfx(blas.Right, n, 3, u[:], tau, q[j1:], ldq, work) + } + + default: // n1 == 2 && n2 == 2 + // Generate elementary reflectors H_1 and H_2 so that: + // H_2 H_1 ( -X11 -X12 ) = ( * * ) + // ( -X21 -X22 ) ( 0 * ) + // ( scale 0 ) ( 0 0 ) + // ( 0 scale ) ( 0 0 ) + u1 := [3]float64{1, -x[ldx], scale} + _, tau1 := impl.Dlarfg(3, -x[0], u1[1:], 1) + + temp := -tau1 * (x[1] + u1[1]*x[ldx+1]) + u2 := [3]float64{1, -temp * u1[2], scale} + _, tau2 := impl.Dlarfg(3, -temp*u1[1]-x[ldx+1], u2[1:], 1) + + // Perform swap provisionally on diagonal block in D. + impl.Dlarfx(blas.Left, 3, 4, u1[:], tau1, d[:], ldd, work) + impl.Dlarfx(blas.Right, 4, 3, u1[:], tau1, d[:], ldd, work) + impl.Dlarfx(blas.Left, 3, 4, u2[:], tau2, d[ldd:], ldd, work) + impl.Dlarfx(blas.Right, 4, 3, u2[:], tau2, d[1:], ldd, work) + + // Test whether to reject swap. + m1 := math.Max(math.Abs(d[2*ldd]), math.Abs(d[2*ldd+1])) + m2 := math.Max(math.Abs(d[3*ldd]), math.Abs(d[3*ldd+1])) + if math.Max(m1, m2) > thresh { + return false + } + + // Accept swap: apply transformation to the entire matrix T. + j4 := j1 + 3 + impl.Dlarfx(blas.Left, 3, n-j1, u1[:], tau1, t[j1*ldt+j1:], ldt, work) + impl.Dlarfx(blas.Right, j4+1, 3, u1[:], tau1, t[j1:], ldt, work) + impl.Dlarfx(blas.Left, 3, n-j1, u2[:], tau2, t[j2*ldt+j1:], ldt, work) + impl.Dlarfx(blas.Right, j4+1, 3, u2[:], tau2, t[j2:], ldt, work) + + t[j3*ldt+j1] = 0 + t[j3*ldt+j2] = 0 + t[j4*ldt+j1] = 0 + t[j4*ldt+j2] = 0 + + if wantq { + // Accumulate transformation in the matrix Q. + impl.Dlarfx(blas.Right, n, 3, u1[:], tau1, q[j1:], ldq, work) + impl.Dlarfx(blas.Right, n, 3, u2[:], tau2, q[j2:], ldq, work) + } + } + + if n2 == 2 { + // Standardize new 2×2 block T11. + a, b := t[j1*ldt+j1], t[j1*ldt+j2] + c, d := t[j2*ldt+j1], t[j2*ldt+j2] + var cs, sn float64 + t[j1*ldt+j1], t[j1*ldt+j2], t[j2*ldt+j1], t[j2*ldt+j2], _, _, _, _, cs, sn = impl.Dlanv2(a, b, c, d) + if n-j1-2 > 0 { + bi.Drot(n-j1-2, t[j1*ldt+j1+2:], 1, t[j2*ldt+j1+2:], 1, cs, sn) + } + if j1 > 0 { + bi.Drot(j1, t[j1:], ldt, t[j2:], ldt, cs, sn) + } + if wantq { + bi.Drot(n, q[j1:], ldq, q[j2:], ldq, cs, sn) + } + } + if n1 == 2 { + // Standardize new 2×2 block T22. + j3 := j1 + n2 + j4 := j3 + 1 + a, b := t[j3*ldt+j3], t[j3*ldt+j4] + c, d := t[j4*ldt+j3], t[j4*ldt+j4] + var cs, sn float64 + t[j3*ldt+j3], t[j3*ldt+j4], t[j4*ldt+j3], t[j4*ldt+j4], _, _, _, _, cs, sn = impl.Dlanv2(a, b, c, d) + if n-j3-2 > 0 { + bi.Drot(n-j3-2, t[j3*ldt+j3+2:], 1, t[j4*ldt+j3+2:], 1, cs, sn) + } + bi.Drot(j3, t[j3:], ldt, t[j4:], ldt, cs, sn) + if wantq { + bi.Drot(n, q[j3:], ldq, q[j4:], ldq, cs, sn) + } + } + + return true +} diff --git a/lapack/native/dlags2.go b/lapack/native/dlags2.go new file mode 100644 index 00000000..66fac9b9 --- /dev/null +++ b/lapack/native/dlags2.go @@ -0,0 +1,182 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlags2 computes 2-by-2 orthogonal matrices U, V and Q with the +// triangles of A and B specified by upper. +// +// If upper is true +// +// U^T*A*Q = U^T*[ a1 a2 ]*Q = [ x 0 ] +// [ 0 a3 ] [ x x ] +// and +// V^T*B*Q = V^T*[ b1 b2 ]*Q = [ x 0 ] +// [ 0 b3 ] [ x x ] +// +// otherwise +// +// U^T*A*Q = U^T*[ a1 0 ]*Q = [ x x ] +// [ a2 a3 ] [ 0 x ] +// and +// V^T*B*Q = V^T*[ b1 0 ]*Q = [ x x ] +// [ b2 b3 ] [ 0 x ]. +// +// The rows of the transformed A and B are parallel, where +// +// U = [ csu snu ], V = [ csv snv ], Q = [ csq snq ] +// [ -snu csu ] [ -snv csv ] [ -snq csq ] +// +// Dlags2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (csu, snu, csv, snv, csq, snq float64) { + if upper { + // Input matrices A and B are upper triangular matrices. + // + // Form matrix C = A*adj(B) = [ a b ] + // [ 0 d ] + a := a1 * b3 + d := a3 * b1 + b := a2*b1 - a1*b2 + + // The SVD of real 2-by-2 triangular C. + // + // [ csl -snl ]*[ a b ]*[ csr snr ] = [ r 0 ] + // [ snl csl ] [ 0 d ] [ -snr csr ] [ 0 t ] + _, _, snr, csr, snl, csl := impl.Dlasv2(a, b, d) + + if math.Abs(csl) >= math.Abs(snl) || math.Abs(csr) >= math.Abs(snr) { + // Compute the [0, 0] and [0, 1] elements of U^T*A and V^T*B, + // and [0, 1] element of |U|^T*|A| and |V|^T*|B|. + + ua11r := csl * a1 + ua12 := csl*a2 + snl*a3 + + vb11r := csr * b1 + vb12 := csr*b2 + snr*b3 + + aua12 := math.Abs(csl)*math.Abs(a2) + math.Abs(snl)*math.Abs(a3) + avb12 := math.Abs(csr)*math.Abs(b2) + math.Abs(snr)*math.Abs(b3) + + // Zero [0, 1] elements of U^T*A and V^T*B. + if math.Abs(ua11r)+math.Abs(ua12) != 0 { + if aua12/(math.Abs(ua11r)+math.Abs(ua12)) <= avb12/(math.Abs(vb11r)+math.Abs(vb12)) { + csq, snq, _ = impl.Dlartg(-ua11r, ua12) + } else { + csq, snq, _ = impl.Dlartg(-vb11r, vb12) + } + } else { + csq, snq, _ = impl.Dlartg(-vb11r, vb12) + } + + csu = csl + snu = -snl + csv = csr + snv = -snr + } else { + // Compute the [1, 0] and [1, 1] elements of U^T*A and V^T*B, + // and [1, 1] element of |U|^T*|A| and |V|^T*|B|. + + ua21 := -snl * a1 + ua22 := -snl*a2 + csl*a3 + + vb21 := -snr * b1 + vb22 := -snr*b2 + csr*b3 + + aua22 := math.Abs(snl)*math.Abs(a2) + math.Abs(csl)*math.Abs(a3) + avb22 := math.Abs(snr)*math.Abs(b2) + math.Abs(csr)*math.Abs(b3) + + // Zero [1, 1] elements of U^T*A and V^T*B, and then swap. + if math.Abs(ua21)+math.Abs(ua22) != 0 { + if aua22/(math.Abs(ua21)+math.Abs(ua22)) <= avb22/(math.Abs(vb21)+math.Abs(vb22)) { + csq, snq, _ = impl.Dlartg(-ua21, ua22) + } else { + csq, snq, _ = impl.Dlartg(-vb21, vb22) + } + } else { + csq, snq, _ = impl.Dlartg(-vb21, vb22) + } + + csu = snl + snu = csl + csv = snr + snv = csr + } + } else { + // Input matrices A and B are lower triangular matrices + // + // Form matrix C = A*adj(B) = [ a 0 ] + // [ c d ] + a := a1 * b3 + d := a3 * b1 + c := a2*b3 - a3*b2 + + // The SVD of real 2-by-2 triangular C + // + // [ csl -snl ]*[ a 0 ]*[ csr snr ] = [ r 0 ] + // [ snl csl ] [ c d ] [ -snr csr ] [ 0 t ] + _, _, snr, csr, snl, csl := impl.Dlasv2(a, c, d) + + if math.Abs(csr) >= math.Abs(snr) || math.Abs(csl) >= math.Abs(snl) { + // Compute the [1, 0] and [1, 1] elements of U^T*A and V^T*B, + // and [1, 0] element of |U|^T*|A| and |V|^T*|B|. + + ua21 := -snr*a1 + csr*a2 + ua22r := csr * a3 + + vb21 := -snl*b1 + csl*b2 + vb22r := csl * b3 + + aua21 := math.Abs(snr)*math.Abs(a1) + math.Abs(csr)*math.Abs(a2) + avb21 := math.Abs(snl)*math.Abs(b1) + math.Abs(csl)*math.Abs(b2) + + // Zero [1, 0] elements of U^T*A and V^T*B. + if (math.Abs(ua21) + math.Abs(ua22r)) != 0 { + if aua21/(math.Abs(ua21)+math.Abs(ua22r)) <= avb21/(math.Abs(vb21)+math.Abs(vb22r)) { + csq, snq, _ = impl.Dlartg(ua22r, ua21) + } else { + csq, snq, _ = impl.Dlartg(vb22r, vb21) + } + } else { + csq, snq, _ = impl.Dlartg(vb22r, vb21) + } + + csu = csr + snu = -snr + csv = csl + snv = -snl + } else { + // Compute the [0, 0] and [0, 1] elements of U^T *A and V^T *B, + // and [0, 0] element of |U|^T*|A| and |V|^T*|B|. + + ua11 := csr*a1 + snr*a2 + ua12 := snr * a3 + + vb11 := csl*b1 + snl*b2 + vb12 := snl * b3 + + aua11 := math.Abs(csr)*math.Abs(a1) + math.Abs(snr)*math.Abs(a2) + avb11 := math.Abs(csl)*math.Abs(b1) + math.Abs(snl)*math.Abs(b2) + + // Zero [0, 0] elements of U^T*A and V^T*B, and then swap. + if (math.Abs(ua11) + math.Abs(ua12)) != 0 { + if aua11/(math.Abs(ua11)+math.Abs(ua12)) <= avb11/(math.Abs(vb11)+math.Abs(vb12)) { + csq, snq, _ = impl.Dlartg(ua12, ua11) + } else { + csq, snq, _ = impl.Dlartg(vb12, vb11) + } + } else { + csq, snq, _ = impl.Dlartg(vb12, vb11) + } + + csu = snr + snu = csr + csv = snl + snv = csl + } + } + + return csu, snu, csv, snv, csq, snq +} diff --git a/lapack/native/dlahqr.go b/lapack/native/dlahqr.go new file mode 100644 index 00000000..7e872cc8 --- /dev/null +++ b/lapack/native/dlahqr.go @@ -0,0 +1,423 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dlahqr computes the eigenvalues and Schur factorization of a block of an n×n +// upper Hessenberg matrix H, using the double-shift/single-shift QR algorithm. +// +// h and ldh represent the matrix H. Dlahqr works primarily with the Hessenberg +// submatrix H[ilo:ihi+1,ilo:ihi+1], but applies transformations to all of H if +// wantt is true. It is assumed that H[ihi+1:n,ihi+1:n] is already upper +// quasi-triangular, although this is not checked. +// +// It must hold that +// 0 <= ilo <= max(0,ihi), and ihi < n, +// and that +// H[ilo,ilo-1] == 0, if ilo > 0, +// otherwise Dlahqr will panic. +// +// If unconverged is zero on return, wr[ilo:ihi+1] and wi[ilo:ihi+1] will contain +// respectively the real and imaginary parts of the computed eigenvalues ilo +// to ihi. If two eigenvalues are computed as a complex conjugate pair, they are +// stored in consecutive elements of wr and wi, say the i-th and (i+1)th, with +// wi[i] > 0 and wi[i+1] < 0. If wantt is true, the eigenvalues are stored in +// the same order as on the diagonal of the Schur form returned in H, with +// wr[i] = H[i,i], and, if H[i:i+2,i:i+2] is a 2×2 diagonal block, +// wi[i] = sqrt(abs(H[i+1,i]*H[i,i+1])) and wi[i+1] = -wi[i]. +// +// wr and wi must have length ihi+1. +// +// z and ldz represent an n×n matrix Z. If wantz is true, the transformations +// will be applied to the submatrix Z[iloz:ihiz+1,ilo:ihi+1] and it must hold that +// 0 <= iloz <= ilo, and ihi <= ihiz < n. +// If wantz is false, z is not referenced. +// +// unconverged indicates whether Dlahqr computed all the eigenvalues ilo to ihi +// in a total of 30 iterations per eigenvalue. +// +// If unconverged is zero, all the eigenvalues ilo to ihi have been computed and +// will be stored on return in wr[ilo:ihi+1] and wi[ilo:ihi+1]. +// +// If unconverged is zero and wantt is true, H[ilo:ihi+1,ilo:ihi+1] will be +// overwritten on return by upper quasi-triangular full Schur form with any +// 2×2 diagonal blocks in standard form. +// +// If unconverged is zero and if wantt is false, the contents of h on return is +// unspecified. +// +// If unconverged is positive, some eigenvalues have not converged, and +// wr[unconverged:ihi+1] and wi[unconverged:ihi+1] contain those eigenvalues +// which have been successfully computed. +// +// If unconverged is positive and wantt is true, then on return +// (initial H)*U = U*(final H), (*) +// where U is an orthogonal matrix. The final H is upper Hessenberg and +// H[unconverged:ihi+1,unconverged:ihi+1] is upper quasi-triangular. +// +// If unconverged is positive and wantt is false, on return the remaining +// unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix +// H[ilo:unconverged,ilo:unconverged]. +// +// If unconverged is positive and wantz is true, then on return +// (final Z) = (initial Z)*U, +// where U is the orthogonal matrix in (*) regardless of the value of wantt. +// +// Dlahqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlahqr(wantt, wantz bool, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, iloz, ihiz int, z []float64, ldz int) (unconverged int) { + checkMatrix(n, n, h, ldh) + switch { + case ilo < 0 || max(0, ihi) < ilo: + panic(badIlo) + case n <= ihi: + panic(badIhi) + case len(wr) != ihi+1: + panic("lapack: bad length of wr") + case len(wi) != ihi+1: + panic("lapack: bad length of wi") + case ilo > 0 && h[ilo*ldh+ilo-1] != 0: + panic("lapack: block is not isolated") + } + if wantz { + checkMatrix(n, n, z, ldz) + switch { + case iloz < 0 || ilo < iloz: + panic("lapack: iloz out of range") + case ihiz < ihi || n <= ihiz: + panic("lapack: ihiz out of range") + } + } + + // Quick return if possible. + if n == 0 { + return 0 + } + if ilo == ihi { + wr[ilo] = h[ilo*ldh+ilo] + wi[ilo] = 0 + return 0 + } + + // Clear out the trash. + for j := ilo; j < ihi-2; j++ { + h[(j+2)*ldh+j] = 0 + h[(j+3)*ldh+j] = 0 + } + if ilo <= ihi-2 { + h[ihi*ldh+ihi-2] = 0 + } + + nh := ihi - ilo + 1 + nz := ihiz - iloz + 1 + + // Set machine-dependent constants for the stopping criterion. + ulp := dlamchP + smlnum := float64(nh) / ulp * dlamchS + + // i1 and i2 are the indices of the first row and last column of H to + // which transformations must be applied. If eigenvalues only are being + // computed, i1 and i2 are set inside the main loop. + var i1, i2 int + if wantt { + i1 = 0 + i2 = n - 1 + } + + itmax := 30 * max(10, nh) // Total number of QR iterations allowed. + + // The main loop begins here. i is the loop index and decreases from ihi + // to ilo in steps of 1 or 2. Each iteration of the loop works with the + // active submatrix in rows and columns l to i. Eigenvalues i+1 to ihi + // have already converged. Either l = ilo or H[l,l-1] is negligible so + // that the matrix splits. + bi := blas64.Implementation() + i := ihi + for i >= ilo { + l := ilo + + // Perform QR iterations on rows and columns ilo to i until a + // submatrix of order 1 or 2 splits off at the bottom because a + // subdiagonal element has become negligible. + converged := false + for its := 0; its <= itmax; its++ { + // Look for a single small subdiagonal element. + var k int + for k = i; k > l; k-- { + if math.Abs(h[k*ldh+k-1]) <= smlnum { + break + } + tst := math.Abs(h[(k-1)*ldh+k-1]) + math.Abs(h[k*ldh+k]) + if tst == 0 { + if k-2 >= ilo { + tst += math.Abs(h[(k-1)*ldh+k-2]) + } + if k+1 <= ihi { + tst += math.Abs(h[(k+1)*ldh+k]) + } + } + // The following is a conservative small + // subdiagonal deflation criterion due to Ahues + // & Tisseur (LAWN 122, 1997). It has better + // mathematical foundation and improves accuracy + // in some cases. + if math.Abs(h[k*ldh+k-1]) <= ulp*tst { + ab := math.Max(math.Abs(h[k*ldh+k-1]), math.Abs(h[(k-1)*ldh+k])) + ba := math.Min(math.Abs(h[k*ldh+k-1]), math.Abs(h[(k-1)*ldh+k])) + aa := math.Max(math.Abs(h[k*ldh+k]), math.Abs(h[(k-1)*ldh+k-1]-h[k*ldh+k])) + bb := math.Min(math.Abs(h[k*ldh+k]), math.Abs(h[(k-1)*ldh+k-1]-h[k*ldh+k])) + s := aa + ab + if ab/s*ba <= math.Max(smlnum, aa/s*bb*ulp) { + break + } + } + } + l = k + if l > ilo { + // H[l,l-1] is negligible. + h[l*ldh+l-1] = 0 + } + if l >= i-1 { + // Break the loop because a submatrix of order 1 + // or 2 has split off. + converged = true + break + } + + // Now the active submatrix is in rows and columns l to + // i. If eigenvalues only are being computed, only the + // active submatrix need be transformed. + if !wantt { + i1 = l + i2 = i + } + + const ( + dat1 = 3.0 + dat2 = -0.4375 + ) + var h11, h21, h12, h22 float64 + switch its { + case 10: // Exceptional shift. + s := math.Abs(h[(l+1)*ldh+l]) + math.Abs(h[(l+2)*ldh+l+1]) + h11 = dat1*s + h[l*ldh+l] + h12 = dat2 * s + h21 = s + h22 = h11 + case 20: // Exceptional shift. + s := math.Abs(h[i*ldh+i-1]) + math.Abs(h[(i-1)*ldh+i-2]) + h11 = dat1*s + h[i*ldh+i] + h12 = dat2 * s + h21 = s + h22 = h11 + default: // Prepare to use Francis' double shift (i.e., + // 2nd degree generalized Rayleigh quotient). + h11 = h[(i-1)*ldh+i-1] + h21 = h[i*ldh+i-1] + h12 = h[(i-1)*ldh+i] + h22 = h[i*ldh+i] + } + s := math.Abs(h11) + math.Abs(h12) + math.Abs(h21) + math.Abs(h22) + var ( + rt1r, rt1i float64 + rt2r, rt2i float64 + ) + if s != 0 { + h11 /= s + h21 /= s + h12 /= s + h22 /= s + tr := (h11 + h22) / 2 + det := (h11-tr)*(h22-tr) - h12*h21 + rtdisc := math.Sqrt(math.Abs(det)) + if det >= 0 { + // Complex conjugate shifts. + rt1r = tr * s + rt2r = rt1r + rt1i = rtdisc * s + rt2i = -rt1i + } else { + // Real shifts (use only one of them). + rt1r = tr + rtdisc + rt2r = tr - rtdisc + if math.Abs(rt1r-h22) <= math.Abs(rt2r-h22) { + rt1r *= s + rt2r = rt1r + } else { + rt2r *= s + rt1r = rt2r + } + rt1i = 0 + rt2i = 0 + } + } + + // Look for two consecutive small subdiagonal elements. + var m int + var v [3]float64 + for m = i - 2; m >= l; m-- { + // Determine the effect of starting the + // double-shift QR iteration at row m, and see + // if this would make H[m,m-1] negligible. The + // following uses scaling to avoid overflows and + // most underflows. + h21s := h[(m+1)*ldh+m] + s := math.Abs(h[m*ldh+m]-rt2r) + math.Abs(rt2i) + math.Abs(h21s) + h21s /= s + v[0] = h21s*h[m*ldh+m+1] + (h[m*ldh+m]-rt1r)*((h[m*ldh+m]-rt2r)/s) - rt2i/s*rt1i + v[1] = h21s * (h[m*ldh+m] + h[(m+1)*ldh+m+1] - rt1r - rt2r) + v[2] = h21s * h[(m+2)*ldh+m+1] + s = math.Abs(v[0]) + math.Abs(v[1]) + math.Abs(v[2]) + v[0] /= s + v[1] /= s + v[2] /= s + if m == l { + break + } + dsum := math.Abs(h[(m-1)*ldh+m-1]) + math.Abs(h[m*ldh+m]) + math.Abs(h[(m+1)*ldh+m+1]) + if math.Abs(h[m*ldh+m-1])*(math.Abs(v[1])+math.Abs(v[2])) <= ulp*math.Abs(v[0])*dsum { + break + } + } + + // Double-shift QR step. + for k := m; k < i; k++ { + // The first iteration of this loop determines a + // reflection G from the vector V and applies it + // from left and right to H, thus creating a + // non-zero bulge below the subdiagonal. + // + // Each subsequent iteration determines a + // reflection G to restore the Hessenberg form + // in the (k-1)th column, and thus chases the + // bulge one step toward the bottom of the + // active submatrix. nr is the order of G. + + nr := min(3, i-k+1) + if k > m { + bi.Dcopy(nr, h[k*ldh+k-1:], ldh, v[:], 1) + } + var t0 float64 + v[0], t0 = impl.Dlarfg(nr, v[0], v[1:], 1) + if k > m { + h[k*ldh+k-1] = v[0] + h[(k+1)*ldh+k-1] = 0 + if k < i-1 { + h[(k+2)*ldh+k-1] = 0 + } + } else if m > l { + // Use the following instead of H[k,k-1] = -H[k,k-1] + // to avoid a bug when v[1] and v[2] underflow. + h[k*ldh+k-1] *= 1 - t0 + } + t1 := t0 * v[1] + if nr == 3 { + t2 := t0 * v[2] + + // Apply G from the left to transform + // the rows of the matrix in columns k + // to i2. + for j := k; j <= i2; j++ { + sum := h[k*ldh+j] + v[1]*h[(k+1)*ldh+j] + v[2]*h[(k+2)*ldh+j] + h[k*ldh+j] -= sum * t0 + h[(k+1)*ldh+j] -= sum * t1 + h[(k+2)*ldh+j] -= sum * t2 + } + + // Apply G from the right to transform + // the columns of the matrix in rows i1 + // to min(k+3,i). + for j := i1; j <= min(k+3, i); j++ { + sum := h[j*ldh+k] + v[1]*h[j*ldh+k+1] + v[2]*h[j*ldh+k+2] + h[j*ldh+k] -= sum * t0 + h[j*ldh+k+1] -= sum * t1 + h[j*ldh+k+2] -= sum * t2 + } + + if wantz { + // Accumulate transformations in the matrix Z. + for j := iloz; j <= ihiz; j++ { + sum := z[j*ldz+k] + v[1]*z[j*ldz+k+1] + v[2]*z[j*ldz+k+2] + z[j*ldz+k] -= sum * t0 + z[j*ldz+k+1] -= sum * t1 + z[j*ldz+k+2] -= sum * t2 + } + } + } else if nr == 2 { + // Apply G from the left to transform + // the rows of the matrix in columns k + // to i2. + for j := k; j <= i2; j++ { + sum := h[k*ldh+j] + v[1]*h[(k+1)*ldh+j] + h[k*ldh+j] -= sum * t0 + h[(k+1)*ldh+j] -= sum * t1 + } + + // Apply G from the right to transform + // the columns of the matrix in rows i1 + // to min(k+3,i). + for j := i1; j <= i; j++ { + sum := h[j*ldh+k] + v[1]*h[j*ldh+k+1] + h[j*ldh+k] -= sum * t0 + h[j*ldh+k+1] -= sum * t1 + } + + if wantz { + // Accumulate transformations in the matrix Z. + for j := iloz; j <= ihiz; j++ { + sum := z[j*ldz+k] + v[1]*z[j*ldz+k+1] + z[j*ldz+k] -= sum * t0 + z[j*ldz+k+1] -= sum * t1 + } + } + } + } + } + + if converged == false { + // The QR iteration finished without splitting off a + // submatrix of order 1 or 2. + return i + 1 + } + + if l == i { + // H[i,i-1] is negligible: one eigenvalue has converged. + wr[i] = h[i*ldh+i] + wi[i] = 0 + } else if l == i-1 { + // H[i-1,i-2] is negligible: a pair of eigenvalues have converged. + + // Transform the 2×2 submatrix to standard Schur form, + // and compute and store the eigenvalues. + var cs, sn float64 + a, b := h[(i-1)*ldh+i-1], h[(i-1)*ldh+i] + c, d := h[i*ldh+i-1], h[i*ldh+i] + a, b, c, d, wr[i-1], wi[i-1], wr[i], wi[i], cs, sn = impl.Dlanv2(a, b, c, d) + h[(i-1)*ldh+i-1], h[(i-1)*ldh+i] = a, b + h[i*ldh+i-1], h[i*ldh+i] = c, d + + if wantt { + // Apply the transformation to the rest of H. + if i2 > i { + bi.Drot(i2-i, h[(i-1)*ldh+i+1:], 1, h[i*ldh+i+1:], 1, cs, sn) + } + bi.Drot(i-i1-1, h[i1*ldh+i-1:], ldh, h[i1*ldh+i:], ldh, cs, sn) + } + + if wantz { + // Apply the transformation to Z. + bi.Drot(nz, z[iloz*ldz+i-1:], ldz, z[iloz*ldz+i:], ldz, cs, sn) + } + } + + // Return to start of the main loop with new value of i. + i = l - 1 + } + return 0 +} diff --git a/lapack/native/dlahr2.go b/lapack/native/dlahr2.go new file mode 100644 index 00000000..011f89b6 --- /dev/null +++ b/lapack/native/dlahr2.go @@ -0,0 +1,169 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlahr2 reduces the first nb columns of a real general n×(n-k+1) matrix A so +// that elements below the k-th subdiagonal are zero. The reduction is performed +// by an orthogonal similarity transformation Q^T * A * Q. Dlahr2 returns the +// matrices V and T which determine Q as a block reflector I - V*T*V^T, and +// also the matrix Y = A * V * T. +// +// The matrix Q is represented as a product of nb elementary reflectors +// Q = H_0 * H_1 * ... * H_{nb-1}. +// Each H_i has the form +// H_i = I - tau[i] * v * v^T, +// where v is a real vector with v[0:i+k-1] = 0 and v[i+k-1] = 1. v[i+k:n] is +// stored on exit in A[i+k+1:n,i]. +// +// The elements of the vectors v together form the (n-k+1)×nb matrix +// V which is needed, with T and Y, to apply the transformation to the +// unreduced part of the matrix, using an update of the form +// A = (I - V*T*V^T) * (A - Y*V^T). +// +// On entry, a contains the n×(n-k+1) general matrix A. On return, the elements +// on and above the k-th subdiagonal in the first nb columns are overwritten +// with the corresponding elements of the reduced matrix; the elements below the +// k-th subdiagonal, with the slice tau, represent the matrix Q as a product of +// elementary reflectors. The other columns of A are unchanged. +// +// The contents of A on exit are illustrated by the following example +// with n = 7, k = 3 and nb = 2: +// [ a a a a a ] +// [ a a a a a ] +// [ a a a a a ] +// [ h h a a a ] +// [ v0 h a a a ] +// [ v0 v1 a a a ] +// [ v0 v1 a a a ] +// where a denotes an element of the original matrix A, h denotes a +// modified element of the upper Hessenberg matrix H, and vi denotes an +// element of the vector defining H_i. +// +// k is the offset for the reduction. Elements below the k-th subdiagonal in the +// first nb columns are reduced to zero. +// +// nb is the number of columns to be reduced. +// +// On entry, a represents the n×(n-k+1) matrix A. On return, the elements on and +// above the k-th subdiagonal in the first nb columns are overwritten with the +// corresponding elements of the reduced matrix. The elements below the k-th +// subdiagonal, with the slice tau, represent the matrix Q as a product of +// elementary reflectors. The other columns of A are unchanged. +// +// tau will contain the scalar factors of the elementary reflectors. It must +// have length at least nb. +// +// t and ldt represent the nb×nb upper triangular matrix T, and y and ldy +// represent the n×nb matrix Y. +// +// Dlahr2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlahr2(n, k, nb int, a []float64, lda int, tau, t []float64, ldt int, y []float64, ldy int) { + checkMatrix(n, n-k+1, a, lda) + if len(tau) < nb { + panic(badTau) + } + checkMatrix(nb, nb, t, ldt) + checkMatrix(n, nb, y, ldy) + + // Quick return if possible. + if n <= 1 { + return + } + + bi := blas64.Implementation() + var ei float64 + for i := 0; i < nb; i++ { + if i > 0 { + // Update A[k:n,i]. + + // Update i-th column of A - Y * V^T. + bi.Dgemv(blas.NoTrans, n-k, i, + -1, y[k*ldy:], ldy, + a[(k+i-1)*lda:], 1, + 1, a[k*lda+i:], lda) + + // Apply I - V * T^T * V^T to this column (call it b) + // from the left, using the last column of T as + // workspace. + // Let V = [ V1 ] and b = [ b1 ] (first i rows) + // [ V2 ] [ b2 ] + // where V1 is unit lower triangular. + // + // w := V1^T * b1. + bi.Dcopy(i, a[k*lda+i:], lda, t[nb-1:], ldt) + bi.Dtrmv(blas.Lower, blas.Trans, blas.Unit, i, + a[k*lda:], lda, t[nb-1:], ldt) + + // w := w + V2^T * b2. + bi.Dgemv(blas.Trans, n-k-i, i, + 1, a[(k+i)*lda:], lda, + a[(k+i)*lda+i:], lda, + 1, t[nb-1:], ldt) + + // w := T^T * w. + bi.Dtrmv(blas.Upper, blas.Trans, blas.NonUnit, i, + t, ldt, t[nb-1:], ldt) + + // b2 := b2 - V2*w. + bi.Dgemv(blas.NoTrans, n-k-i, i, + -1, a[(k+i)*lda:], lda, + t[nb-1:], ldt, + 1, a[(k+i)*lda+i:], lda) + + // b1 := b1 - V1*w. + bi.Dtrmv(blas.Lower, blas.NoTrans, blas.Unit, i, + a[k*lda:], lda, t[nb-1:], ldt) + bi.Daxpy(i, -1, t[nb-1:], ldt, a[k*lda+i:], lda) + + a[(k+i-1)*lda+i-1] = ei + } + + // Generate the elementary reflector H_i to annihilate + // A[k+i+1:n,i]. + ei, tau[i] = impl.Dlarfg(n-k-i, a[(k+i)*lda+i], a[min(k+i+1, n-1)*lda+i:], lda) + a[(k+i)*lda+i] = 1 + + // Compute Y[k:n,i]. + bi.Dgemv(blas.NoTrans, n-k, n-k-i, + 1, a[k*lda+i+1:], lda, + a[(k+i)*lda+i:], lda, + 0, y[k*ldy+i:], ldy) + bi.Dgemv(blas.Trans, n-k-i, i, + 1, a[(k+i)*lda:], lda, + a[(k+i)*lda+i:], lda, + 0, t[i:], ldt) + bi.Dgemv(blas.NoTrans, n-k, i, + -1, y[k*ldy:], ldy, + t[i:], ldt, + 1, y[k*ldy+i:], ldy) + bi.Dscal(n-k, tau[i], y[k*ldy+i:], ldy) + + // Compute T[0:i,i]. + bi.Dscal(i, -tau[i], t[i:], ldt) + bi.Dtrmv(blas.Upper, blas.NoTrans, blas.NonUnit, i, + t, ldt, t[i:], ldt) + + t[i*ldt+i] = tau[i] + } + a[(k+nb-1)*lda+nb-1] = ei + + // Compute Y[0:k,0:nb]. + impl.Dlacpy(blas.All, k, nb, a[1:], lda, y, ldy) + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, k, nb, + 1, a[k*lda:], lda, y, ldy) + if n > k+nb { + bi.Dgemm(blas.NoTrans, blas.NoTrans, k, nb, n-k-nb, + 1, a[1+nb:], lda, + a[(k+nb)*lda:], lda, + 1, y, ldy) + } + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.NonUnit, k, nb, + 1, t, ldt, y, ldy) +} diff --git a/lapack/native/dlaln2.go b/lapack/native/dlaln2.go new file mode 100644 index 00000000..29925cfb --- /dev/null +++ b/lapack/native/dlaln2.go @@ -0,0 +1,396 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlaln2 solves a linear equation or a system of 2 linear equations of the form +// (ca A - w D) X = scale B, if trans == false, +// (ca A^T - w D) X = scale B, if trans == true, +// where A is a na×na real matrix, ca is a real scalar, D is a na×na diagonal +// real matrix, w is a scalar, real if nw == 1, complex if nw == 2, and X and B +// are na×1 matrices, real if w is real, complex if w is complex. +// +// If w is complex, X and B are represented as na×2 matrices, the first column +// of each being the real part and the second being the imaginary part. +// +// na and nw must be 1 or 2, otherwise Dlaln2 will panic. +// +// d1 and d2 are the diagonal elements of D. d2 is not used if na == 1. +// +// wr and wi represent the real and imaginary part, respectively, of the scalar +// w. wi is not used if nw == 1. +// +// smin is the desired lower bound on the singular values of A. This should be +// a safe distance away from underflow or overflow, say, between +// (underflow/machine precision) and (overflow*machine precision). +// +// If both singular values of (ca A - w D) are less than smin, smin*identity +// will be used instead of (ca A - w D). If only one singular value is less than +// smin, one element of (ca A - w D) will be perturbed enough to make the +// smallest singular value roughly smin. If both singular values are at least +// smin, (ca A - w D) will not be perturbed. In any case, the perturbation will +// be at most some small multiple of max(smin, ulp*norm(ca A - w D)). The +// singular values are computed by infinity-norm approximations, and thus will +// only be correct to a factor of 2 or so. +// +// All input quantities are assumed to be smaller than overflow by a reasonable +// factor. +// +// scale is a scaling factor less than or equal to 1 which is chosen so that X +// can be computed without overflow. X is further scaled if necessary to assure +// that norm(ca A - w D)*norm(X) is less than overflow. +// +// xnorm contains the infinity-norm of X when X is regarded as a na×nw real +// matrix. +// +// ok will be false if (ca A - w D) had to be perturbed to make its smallest +// singular value greater than smin, otherwise ok will be true. +// +// Dlaln2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaln2(trans bool, na, nw int, smin, ca float64, a []float64, lda int, d1, d2 float64, b []float64, ldb int, wr, wi float64, x []float64, ldx int) (scale, xnorm float64, ok bool) { + // TODO(vladimir-ch): Consider splitting this function into two, one + // handling the real case (nw == 1) and the other handling the complex + // case (nw == 2). Given that Go has complex types, their signatures + // would be simpler and more natural, and the implementation not as + // convoluted. + + if na != 1 && na != 2 { + panic("lapack: invalid value of na") + } + if nw != 1 && nw != 2 { + panic("lapack: invalid value of nw") + } + checkMatrix(na, na, a, lda) + checkMatrix(na, nw, b, ldb) + checkMatrix(na, nw, x, ldx) + + smlnum := 2 * dlamchS + bignum := 1 / smlnum + smini := math.Max(smin, smlnum) + + ok = true + scale = 1 + + if na == 1 { + // 1×1 (i.e., scalar) system C X = B. + + if nw == 1 { + // Real 1×1 system. + + // C = ca A - w D. + csr := ca*a[0] - wr*d1 + cnorm := math.Abs(csr) + + // If |C| < smini, use C = smini. + if cnorm < smini { + csr = smini + cnorm = smini + ok = false + } + + // Check scaling for X = B / C. + bnorm := math.Abs(b[0]) + if cnorm < 1 && bnorm > math.Max(1, bignum*cnorm) { + scale = 1 / bnorm + } + + // Compute X. + x[0] = b[0] * scale / csr + xnorm = math.Abs(x[0]) + + return scale, xnorm, ok + } + + // Complex 1×1 system (w is complex). + + // C = ca A - w D. + csr := ca*a[0] - wr*d1 + csi := -wi * d1 + cnorm := math.Abs(csr) + math.Abs(csi) + + // If |C| < smini, use C = smini. + if cnorm < smini { + csr = smini + csi = 0 + cnorm = smini + ok = false + } + + // Check scaling for X = B / C. + bnorm := math.Abs(b[0]) + math.Abs(b[1]) + if cnorm < 1 && bnorm > math.Max(1, bignum*cnorm) { + scale = 1 / bnorm + } + + // Compute X. + cx := complex(scale*b[0], scale*b[1]) / complex(csr, csi) + x[0], x[1] = real(cx), imag(cx) + xnorm = math.Abs(x[0]) + math.Abs(x[1]) + + return scale, xnorm, ok + } + + // 2×2 system. + + // Compute the real part of + // C = ca A - w D + // or + // C = ca A^T - w D. + crv := [4]float64{ + ca*a[0] - wr*d1, + ca * a[1], + ca * a[lda], + ca*a[lda+1] - wr*d2, + } + if trans { + crv[1] = ca * a[lda] + crv[2] = ca * a[1] + } + + pivot := [4][4]int{ + {0, 1, 2, 3}, + {1, 0, 3, 2}, + {2, 3, 0, 1}, + {3, 2, 1, 0}, + } + + if nw == 1 { + // Real 2×2 system (w is real). + + // Find the largest element in C. + var cmax float64 + var icmax int + for j, v := range crv { + v = math.Abs(v) + if v > cmax { + cmax = v + icmax = j + } + } + + // If norm(C) < smini, use smini*identity. + if cmax < smini { + bnorm := math.Max(math.Abs(b[0]), math.Abs(b[ldb])) + if smini < 1 && bnorm > math.Max(1, bignum*smini) { + scale = 1 / bnorm + } + temp := scale / smini + x[0] = temp * b[0] + x[ldx] = temp * b[ldb] + xnorm = temp * bnorm + ok = false + + return scale, xnorm, ok + } + + // Gaussian elimination with complete pivoting. + // Form upper triangular matrix + // [ur11 ur12] + // [ 0 ur22] + ur11 := crv[icmax] + ur12 := crv[pivot[icmax][1]] + cr21 := crv[pivot[icmax][2]] + cr22 := crv[pivot[icmax][3]] + ur11r := 1 / ur11 + lr21 := ur11r * cr21 + ur22 := cr22 - ur12*lr21 + + // If smaller pivot < smini, use smini. + if math.Abs(ur22) < smini { + ur22 = smini + ok = false + } + + var br1, br2 float64 + if icmax > 1 { + // If the pivot lies in the second row, swap the rows. + br1 = b[ldb] + br2 = b[0] + } else { + br1 = b[0] + br2 = b[ldb] + } + br2 -= lr21 * br1 // Apply the Gaussian elimination step to the right-hand side. + + bbnd := math.Max(math.Abs(ur22*ur11r*br1), math.Abs(br2)) + if bbnd > 1 && math.Abs(ur22) < 1 && bbnd >= bignum*math.Abs(ur22) { + scale = 1 / bbnd + } + + // Solve the linear system ur*xr=br. + xr2 := br2 * scale / ur22 + xr1 := scale*br1*ur11r - ur11r*ur12*xr2 + if icmax&0x1 != 0 { + // If the pivot lies in the second column, swap the components of the solution. + x[0] = xr2 + x[ldx] = xr1 + } else { + x[0] = xr1 + x[ldx] = xr2 + } + xnorm = math.Max(math.Abs(xr1), math.Abs(xr2)) + + // Further scaling if norm(A)*norm(X) > overflow. + if xnorm > 1 && cmax > 1 && xnorm > bignum/cmax { + temp := cmax / bignum + x[0] *= temp + x[ldx] *= temp + xnorm *= temp + scale *= temp + } + + return scale, xnorm, ok + } + + // Complex 2×2 system (w is complex). + + // Find the largest element in C. + civ := [4]float64{ + -wi * d1, + 0, + 0, + -wi * d2, + } + var cmax float64 + var icmax int + for j, v := range crv { + v := math.Abs(v) + if v+math.Abs(civ[j]) > cmax { + cmax = v + math.Abs(civ[j]) + icmax = j + } + } + + // If norm(C) < smini, use smini*identity. + if cmax < smini { + br1 := math.Abs(b[0]) + math.Abs(b[1]) + br2 := math.Abs(b[ldb]) + math.Abs(b[ldb+1]) + bnorm := math.Max(br1, br2) + if smini < 1 && bnorm > 1 && bnorm > bignum*smini { + scale = 1 / bnorm + } + temp := scale / smini + x[0] = temp * b[0] + x[1] = temp * b[1] + x[ldb] = temp * b[ldb] + x[ldb+1] = temp * b[ldb+1] + xnorm = temp * bnorm + ok = false + + return scale, xnorm, ok + } + + // Gaussian elimination with complete pivoting. + ur11 := crv[icmax] + ui11 := civ[icmax] + ur12 := crv[pivot[icmax][1]] + ui12 := civ[pivot[icmax][1]] + cr21 := crv[pivot[icmax][2]] + ci21 := civ[pivot[icmax][2]] + cr22 := crv[pivot[icmax][3]] + ci22 := civ[pivot[icmax][3]] + var ( + ur11r, ui11r float64 + lr21, li21 float64 + ur12s, ui12s float64 + ur22, ui22 float64 + ) + if icmax == 0 || icmax == 3 { + // Off-diagonals of pivoted C are real. + if math.Abs(ur11) > math.Abs(ui11) { + temp := ui11 / ur11 + ur11r = 1 / (ur11 * (1 + temp*temp)) + ui11r = -temp * ur11r + } else { + temp := ur11 / ui11 + ui11r = -1 / (ui11 * (1 + temp*temp)) + ur11r = -temp * ui11r + } + lr21 = cr21 * ur11r + li21 = cr21 * ui11r + ur12s = ur12 * ur11r + ui12s = ur12 * ui11r + ur22 = cr22 - ur12*lr21 + ui22 = ci22 - ur12*li21 + } else { + // Diagonals of pivoted C are real. + ur11r = 1 / ur11 + // ui11r is already 0. + lr21 = cr21 * ur11r + li21 = ci21 * ur11r + ur12s = ur12 * ur11r + ui12s = ui12 * ur11r + ur22 = cr22 - ur12*lr21 + ui12*li21 + ui22 = -ur12*li21 - ui12*lr21 + } + u22abs := math.Abs(ur22) + math.Abs(ui22) + + // If smaller pivot < smini, use smini. + if u22abs < smini { + ur22 = smini + ui22 = 0 + ok = false + } + + var br1, bi1 float64 + var br2, bi2 float64 + if icmax > 1 { + // If the pivot lies in the second row, swap the rows. + br1 = b[ldb] + bi1 = b[ldb+1] + br2 = b[0] + bi2 = b[1] + } else { + br1 = b[0] + bi1 = b[1] + br2 = b[ldb] + bi2 = b[ldb+1] + } + br2 += -lr21*br1 + li21*bi1 + bi2 += -li21*br1 - lr21*bi1 + + bbnd1 := u22abs * (math.Abs(ur11r) + math.Abs(ui11r)) * (math.Abs(br1) + math.Abs(bi1)) + bbnd2 := math.Abs(br2) + math.Abs(bi2) + bbnd := math.Max(bbnd1, bbnd2) + if bbnd > 1 && u22abs < 1 && bbnd >= bignum*u22abs { + scale = 1 / bbnd + br1 *= scale + bi1 *= scale + br2 *= scale + bi2 *= scale + } + + cx2 := complex(br2, bi2) / complex(ur22, ui22) + xr2, xi2 := real(cx2), imag(cx2) + xr1 := ur11r*br1 - ui11r*bi1 - ur12s*xr2 + ui12s*xi2 + xi1 := ui11r*br1 + ur11r*bi1 - ui12s*xr2 - ur12s*xi2 + if icmax&0x1 != 0 { + // If the pivot lies in the second column, swap the components of the solution. + x[0] = xr2 + x[1] = xi2 + x[ldx] = xr1 + x[ldx+1] = xi1 + } else { + x[0] = xr1 + x[1] = xi1 + x[ldx] = xr2 + x[ldx+1] = xi2 + } + xnorm = math.Max(math.Abs(xr1)+math.Abs(xi1), math.Abs(xr2)+math.Abs(xi2)) + + // Further scaling if norm(A)*norm(X) > overflow. + if xnorm > 1 && cmax > 1 && xnorm > bignum/cmax { + temp := cmax / bignum + x[0] *= temp + x[1] *= temp + x[ldx] *= temp + x[ldx+1] *= temp + xnorm *= temp + scale *= temp + } + + return scale, xnorm, ok +} diff --git a/lapack/native/dlange.go b/lapack/native/dlange.go new file mode 100644 index 00000000..7e65c9e4 --- /dev/null +++ b/lapack/native/dlange.go @@ -0,0 +1,84 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlange computes the matrix norm of the general m×n matrix a. The input norm +// specifies the norm computed. +// lapack.MaxAbs: the maximum absolute value of an element. +// lapack.MaxColumnSum: the maximum column sum of the absolute values of the entries. +// lapack.MaxRowSum: the maximum row sum of the absolute values of the entries. +// lapack.NormFrob: the square root of the sum of the squares of the entries. +// If norm == lapack.MaxColumnSum, work must be of length n, and this function will panic otherwise. +// There are no restrictions on work for the other matrix norms. +func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64, lda int, work []float64) float64 { + // TODO(btracey): These should probably be refactored to use BLAS calls. + checkMatrix(m, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if norm == lapack.MaxColumnSum && len(work) < n { + panic(badWork) + } + if m == 0 && n == 0 { + return 0 + } + if norm == lapack.MaxAbs { + var value float64 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + value = math.Max(value, math.Abs(a[i*lda+j])) + } + } + return value + } + if norm == lapack.MaxColumnSum { + if len(work) < n { + panic(badWork) + } + for i := 0; i < n; i++ { + work[i] = 0 + } + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + var value float64 + for i := 0; i < n; i++ { + value = math.Max(value, work[i]) + } + return value + } + if norm == lapack.MaxRowSum { + var value float64 + for i := 0; i < m; i++ { + var sum float64 + for j := 0; j < n; j++ { + sum += math.Abs(a[i*lda+j]) + } + value = math.Max(value, sum) + } + return value + } + if norm == lapack.NormFrob { + var value float64 + scale := 0.0 + sum := 1.0 + for i := 0; i < m; i++ { + scale, sum = impl.Dlassq(n, a[i*lda:], 1, scale, sum) + } + value = scale * math.Sqrt(sum) + return value + } + panic("lapack: bad matrix norm") +} diff --git a/lapack/native/dlanst.go b/lapack/native/dlanst.go new file mode 100644 index 00000000..d806de9b --- /dev/null +++ b/lapack/native/dlanst.go @@ -0,0 +1,68 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlanst computes the specified norm of a symmetric tridiagonal matrix A. +// The diagonal elements of A are stored in d and the off-diagonal elements +// are stored in e. +func (impl Implementation) Dlanst(norm lapack.MatrixNorm, n int, d, e []float64) float64 { + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if n <= 0 { + return 0 + } + switch norm { + default: + panic(badNorm) + case lapack.MaxAbs: + anorm := math.Abs(d[n-1]) + for i := 0; i < n-1; i++ { + sum := math.Abs(d[i]) + if anorm < sum || math.IsNaN(sum) { + anorm = sum + } + sum = math.Abs(e[i]) + if anorm < sum || math.IsNaN(sum) { + anorm = sum + } + } + return anorm + case lapack.MaxColumnSum, lapack.MaxRowSum: + if n == 1 { + return math.Abs(d[0]) + } + anorm := math.Abs(d[0]) + math.Abs(e[0]) + sum := math.Abs(e[n-2]) + math.Abs(d[n-1]) + if anorm < sum || math.IsNaN(sum) { + anorm = sum + } + for i := 1; i < n-1; i++ { + sum := math.Abs(d[i]) + math.Abs(e[i]) + math.Abs(e[i-1]) + if anorm < sum || math.IsNaN(sum) { + anorm = sum + } + } + return anorm + case lapack.NormFrob: + var scale float64 + sum := 1.0 + if n > 1 { + scale, sum = impl.Dlassq(n-1, e, 1, scale, sum) + sum = 2 * sum + } + scale, sum = impl.Dlassq(n, d, 1, scale, sum) + return scale * math.Sqrt(sum) + } +} diff --git a/lapack/native/dlansy.go b/lapack/native/dlansy.go new file mode 100644 index 00000000..4d610b58 --- /dev/null +++ b/lapack/native/dlansy.go @@ -0,0 +1,125 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dlansy computes the specified norm of an n×n symmetric matrix. If +// norm == lapack.MaxColumnSum or norm == lapackMaxRowSum work must have length +// at least n, otherwise work is unused. +func (impl Implementation) Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 { + checkMatrix(n, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if (norm == lapack.MaxColumnSum || norm == lapack.MaxRowSum) && len(work) < n { + panic(badWork) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + + if n == 0 { + return 0 + } + switch norm { + default: + panic("unreachable") + case lapack.MaxAbs: + if uplo == blas.Upper { + var max float64 + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := math.Abs(a[i*lda+j]) + if math.IsNaN(v) { + return math.NaN() + } + if v > max { + max = v + } + } + } + return max + } + var max float64 + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + v := math.Abs(a[i*lda+j]) + if math.IsNaN(v) { + return math.NaN() + } + if v > max { + max = v + } + } + } + return max + case lapack.MaxRowSum, lapack.MaxColumnSum: + // A symmetric matrix has the same 1-norm and ∞-norm. + for i := 0; i < n; i++ { + work[i] = 0 + } + if uplo == blas.Upper { + for i := 0; i < n; i++ { + work[i] += math.Abs(a[i*lda+i]) + for j := i + 1; j < n; j++ { + v := math.Abs(a[i*lda+j]) + work[i] += v + work[j] += v + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + v := math.Abs(a[i*lda+j]) + work[i] += v + work[j] += v + } + work[i] += math.Abs(a[i*lda+i]) + } + } + var max float64 + for i := 0; i < n; i++ { + v := work[i] + if math.IsNaN(v) { + return math.NaN() + } + if v > max { + max = v + } + } + return max + case lapack.NormFrob: + if uplo == blas.Upper { + var sum float64 + for i := 0; i < n; i++ { + v := a[i*lda+i] + sum += v * v + for j := i + 1; j < n; j++ { + v := a[i*lda+j] + sum += 2 * v * v + } + } + return math.Sqrt(sum) + } + var sum float64 + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + v := a[i*lda+j] + sum += 2 * v * v + } + v := a[i*lda+i] + sum += v * v + } + return math.Sqrt(sum) + } +} diff --git a/lapack/native/dlantr.go b/lapack/native/dlantr.go new file mode 100644 index 00000000..a0fedc46 --- /dev/null +++ b/lapack/native/dlantr.go @@ -0,0 +1,252 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dlantr computes the specified norm of an m×n trapezoidal matrix A. If +// norm == lapack.MaxColumnSum work must have length at least n, otherwise work +// is unused. +func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64 { + checkMatrix(m, n, a, lda) + switch norm { + case lapack.MaxRowSum, lapack.MaxColumnSum, lapack.NormFrob, lapack.MaxAbs: + default: + panic(badNorm) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.Unit && diag != blas.NonUnit { + panic(badDiag) + } + if norm == lapack.MaxColumnSum && len(work) < n { + panic(badWork) + } + if min(m, n) == 0 { + return 0 + } + switch norm { + default: + panic("unreachable") + case lapack.MaxAbs: + if diag == blas.Unit { + value := 1.0 + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + tmp := math.Abs(a[i*lda+j]) + if math.IsNaN(tmp) { + return tmp + } + if tmp > value { + value = tmp + } + } + } + return value + } + for i := 1; i < m; i++ { + for j := 0; j < min(i, n); j++ { + tmp := math.Abs(a[i*lda+j]) + if math.IsNaN(tmp) { + return tmp + } + if tmp > value { + value = tmp + } + } + } + return value + } + var value float64 + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + tmp := math.Abs(a[i*lda+j]) + if math.IsNaN(tmp) { + return tmp + } + if tmp > value { + value = tmp + } + } + } + return value + } + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + tmp := math.Abs(a[i*lda+j]) + if math.IsNaN(tmp) { + return tmp + } + if tmp > value { + value = tmp + } + } + } + return value + case lapack.MaxColumnSum: + if diag == blas.Unit { + for i := 0; i < min(m, n); i++ { + work[i] = 1 + } + for i := min(m, n); i < n; i++ { + work[i] = 0 + } + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + } else { + for i := 1; i < m; i++ { + for j := 0; j < min(i, n); j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + } + } else { + for i := 0; i < n; i++ { + work[i] = 0 + } + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + } else { + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + } + } + var max float64 + for _, v := range work[:n] { + if math.IsNaN(v) { + return math.NaN() + } + if v > max { + max = v + } + } + return max + case lapack.MaxRowSum: + var maxsum float64 + if diag == blas.Unit { + if uplo == blas.Upper { + for i := 0; i < m; i++ { + var sum float64 + if i < min(m, n) { + sum = 1 + } + for j := i + 1; j < n; j++ { + sum += math.Abs(a[i*lda+j]) + } + if math.IsNaN(sum) { + return math.NaN() + } + if sum > maxsum { + maxsum = sum + } + } + return maxsum + } else { + for i := 1; i < m; i++ { + var sum float64 + if i < min(m, n) { + sum = 1 + } + for j := 0; j < min(i, n); j++ { + sum += math.Abs(a[i*lda+j]) + } + if math.IsNaN(sum) { + return math.NaN() + } + if sum > maxsum { + maxsum = sum + } + } + return maxsum + } + } else { + if uplo == blas.Upper { + for i := 0; i < m; i++ { + var sum float64 + for j := i; j < n; j++ { + sum += math.Abs(a[i*lda+j]) + } + if math.IsNaN(sum) { + return sum + } + if sum > maxsum { + maxsum = sum + } + } + return maxsum + } else { + for i := 0; i < m; i++ { + var sum float64 + for j := 0; j <= min(i, n-1); j++ { + sum += math.Abs(a[i*lda+j]) + } + if math.IsNaN(sum) { + return sum + } + if sum > maxsum { + maxsum = sum + } + } + return maxsum + } + } + case lapack.NormFrob: + var nrm float64 + if diag == blas.Unit { + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + tmp := a[i*lda+j] + nrm += tmp * tmp + } + } + } else { + for i := 1; i < m; i++ { + for j := 0; j < min(i, n); j++ { + tmp := a[i*lda+j] + nrm += tmp * tmp + } + } + } + nrm += float64(min(m, n)) + } else { + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + tmp := math.Abs(a[i*lda+j]) + nrm += tmp * tmp + } + } + } else { + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + tmp := math.Abs(a[i*lda+j]) + nrm += tmp * tmp + } + } + } + } + return math.Sqrt(nrm) + } +} diff --git a/lapack/native/dlanv2.go b/lapack/native/dlanv2.go new file mode 100644 index 00000000..d462f6ed --- /dev/null +++ b/lapack/native/dlanv2.go @@ -0,0 +1,132 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlanv2 computes the Schur factorization of a real 2×2 matrix: +// [ a b ] = [ cs -sn ] * [ aa bb ] * [ cs sn ] +// [ c d ] [ sn cs ] [ cc dd ] * [-sn cs ] +// If cc is zero, aa and dd are real eigenvalues of the matrix. Otherwise it +// holds that aa = dd and bb*cc < 0, and aa ± sqrt(bb*cc) are complex conjugate +// eigenvalues. The real and imaginary parts of the eigenvalues are returned in +// (rt1r,rt1i) and (rt2r,rt2i). +func (impl Implementation) Dlanv2(a, b, c, d float64) (aa, bb, cc, dd float64, rt1r, rt1i, rt2r, rt2i float64, cs, sn float64) { + switch { + case c == 0: // Matrix is already upper triangular. + aa = a + bb = b + cc = 0 + dd = d + cs = 1 + sn = 0 + case b == 0: // Matrix is lower triangular, swap rows and columns. + aa = d + bb = -c + cc = 0 + dd = a + cs = 0 + sn = 1 + case a == d && math.Signbit(b) != math.Signbit(c): // Matrix is already in the standard Schur form. + aa = a + bb = b + cc = c + dd = d + cs = 1 + sn = 0 + default: + temp := a - d + p := temp / 2 + bcmax := math.Max(math.Abs(b), math.Abs(c)) + bcmis := math.Min(math.Abs(b), math.Abs(c)) + if b*c < 0 { + bcmis *= -1 + } + scale := math.Max(math.Abs(p), bcmax) + z := p/scale*p + bcmax/scale*bcmis + eps := dlamchP + + if z >= 4*eps { + // Real eigenvalues. Compute aa and dd. + if p > 0 { + z = p + math.Sqrt(scale)*math.Sqrt(z) + } else { + z = p - math.Sqrt(scale)*math.Sqrt(z) + } + aa = d + z + dd = d - bcmax/z*bcmis + // Compute bb and the rotation matrix. + tau := impl.Dlapy2(c, z) + cs = z / tau + sn = c / tau + bb = b - c + cc = 0 + } else { + // Complex eigenvalues, or real (almost) equal eigenvalues. + // Make diagonal elements equal. + sigma := b + c + tau := impl.Dlapy2(sigma, temp) + cs = math.Sqrt((1 + math.Abs(sigma)/tau) / 2) + sn = -p / (tau * cs) + if sigma < 0 { + sn *= -1 + } + // Compute [ aa bb ] = [ a b ] [ cs -sn ] + // [ cc dd ] [ c d ] [ sn cs ] + aa = a*cs + b*sn + bb = -a*sn + b*cs + cc = c*cs + d*sn + dd = -c*sn + d*cs + // Compute [ a b ] = [ cs sn ] [ aa bb ] + // [ c d ] [-sn cs ] [ cc dd ] + a = aa*cs + cc*sn + b = bb*cs + dd*sn + c = -aa*sn + cc*cs + d = -bb*sn + dd*cs + + temp = (a + d) / 2 + aa = temp + bb = b + cc = c + dd = temp + + if cc != 0 { + if bb != 0 { + if math.Signbit(bb) == math.Signbit(cc) { + // Real eigenvalues, reduce to + // upper triangular form. + sab := math.Sqrt(math.Abs(bb)) + sac := math.Sqrt(math.Abs(cc)) + p = sab * sac + if cc < 0 { + p *= -1 + } + tau = 1 / math.Sqrt(math.Abs(bb+cc)) + aa = temp + p + bb = bb - cc + cc = 0 + dd = temp - p + cs1 := sab * tau + sn1 := sac * tau + cs, sn = cs*cs1-sn*sn1, cs*sn1+sn+cs1 + } + } else { + bb = -cc + cc = 0 + cs, sn = -sn, cs + } + } + } + } + + // Store eigenvalues in (rt1r,rt1i) and (rt2r,rt2i). + rt1r = aa + rt2r = dd + if cc != 0 { + rt1i = math.Sqrt(math.Abs(bb)) * math.Sqrt(math.Abs(cc)) + rt2i = -rt1i + } + return +} diff --git a/lapack/native/dlapll.go b/lapack/native/dlapll.go new file mode 100644 index 00000000..eea1827a --- /dev/null +++ b/lapack/native/dlapll.go @@ -0,0 +1,36 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas/blas64" + +// Dlapll returns the smallest singular value of the n×2 matrix A = [ x y ]. +// The function first computes the QR factorization of A = Q*R, and then computes +// the SVD of the 2-by-2 upper triangular matrix r. +// +// The contents of x and y are overwritten during the call. +// +// Dlapll is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlapll(n int, x []float64, incX int, y []float64, incY int) float64 { + checkVector(n, x, incX) + checkVector(n, y, incY) + + if n <= 1 { + return 0 + } + + // Compute the QR factorization of the N-by-2 matrix [ X Y ]. + a00, tau := impl.Dlarfg(n, x[0], x[incX:], incX) + x[0] = 1 + + bi := blas64.Implementation() + c := -tau * bi.Ddot(n, x, incX, y, incY) + bi.Daxpy(n, c, x, incX, y, incY) + a11, _ := impl.Dlarfg(n-1, y[incY], y[2*incY:], incY) + + // Compute the SVD of 2-by-2 upper triangular matrix. + ssmin, _ := impl.Dlas2(a00, y[0], a11) + return ssmin +} diff --git a/lapack/native/dlapmt.go b/lapack/native/dlapmt.go new file mode 100644 index 00000000..cb989fea --- /dev/null +++ b/lapack/native/dlapmt.go @@ -0,0 +1,72 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas/blas64" + +// Dlapmt rearranges the columns of the m×n matrix X as specified by the +// permutation k_0, k_1, ..., k_n-1 of the integers 0, ..., n-1. +// +// If forward is true a forward permutation is performed: +// +// X[0:m, k[j]] is moved to X[0:m, j] for j = 0, 1, ..., n-1. +// +// otherwise a backward permutation is performed: +// +// X[0:m, j] is moved to X[0:m, k[j]] for j = 0, 1, ..., n-1. +// +// k must have length n, otherwise Dlapmt will panic. k is zero-indexed. +func (impl Implementation) Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int) { + checkMatrix(m, n, x, ldx) + if len(k) != n { + panic(badKperm) + } + + if n <= 1 { + return + } + + for i, v := range k { + v++ + k[i] = -v + } + + bi := blas64.Implementation() + + if forward { + for j, v := range k { + if v >= 0 { + continue + } + k[j] = -v + i := -v - 1 + for k[i] < 0 { + bi.Dswap(m, x[j:], ldx, x[i:], ldx) + + k[i] = -k[i] + j = i + i = k[i] - 1 + } + } + } else { + for i, v := range k { + if v >= 0 { + continue + } + k[i] = -v + j := -v - 1 + for j != i { + bi.Dswap(m, x[j:], ldx, x[i:], ldx) + + k[j] = -k[j] + j = k[j] - 1 + } + } + } + + for i := range k { + k[i]-- + } +} diff --git a/lapack/native/dlapy2.go b/lapack/native/dlapy2.go new file mode 100644 index 00000000..052a73a9 --- /dev/null +++ b/lapack/native/dlapy2.go @@ -0,0 +1,14 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlapy2 is the LAPACK version of math.Hypot. +// +// Dlapy2 is an internal routine. It is exported for testing purposes. +func (Implementation) Dlapy2(x, y float64) float64 { + return math.Hypot(x, y) +} diff --git a/lapack/native/dlaqp2.go b/lapack/native/dlaqp2.go new file mode 100644 index 00000000..f9ae6454 --- /dev/null +++ b/lapack/native/dlaqp2.go @@ -0,0 +1,111 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlaqp2 computes a QR factorization with column pivoting of the block A[offset:m, 0:n] +// of the m×n matrix A. The block A[0:offset, 0:n] is accordingly pivoted, but not factorized. +// +// On exit, the upper triangle of block A[offset:m, 0:n] is the triangular factor obtained. +// The elements in block A[offset:m, 0:n] below the diagonal, together with tau, represent +// the orthogonal matrix Q as a product of elementary reflectors. +// +// offset is number of rows of the matrix A that must be pivoted but not factorized. +// offset must not be negative otherwise Dlaqp2 will panic. +// +// On exit, jpvt holds the permutation that was applied; the jth column of A*P was the +// jpvt[j] column of A. jpvt must have length n, otherwise Dlaqp2 will panic. +// +// On exit tau holds the scalar factors of the elementary reflectors. It must have length +// at least min(m-offset, n) otherwise Dlaqp2 will panic. +// +// vn1 and vn2 hold the partial and complete column norms respectively. They must have length n, +// otherwise Dlaqp2 will panic. +// +// work must have length n, otherwise Dlaqp2 will panic. +// +// Dlaqp2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaqp2(m, n, offset int, a []float64, lda int, jpvt []int, tau, vn1, vn2, work []float64) { + checkMatrix(m, n, a, lda) + if len(jpvt) != n { + panic(badIpiv) + } + mn := min(m-offset, n) + if len(tau) < mn { + panic(badTau) + } + if len(vn1) < n { + panic(badVn1) + } + if len(vn2) < n { + panic(badVn2) + } + if len(work) < n { + panic(badWork) + } + + tol3z := math.Sqrt(dlamchE) + + bi := blas64.Implementation() + + // Compute factorization. + for i := 0; i < mn; i++ { + offpi := offset + i + + // Determine ith pivot column and swap if necessary. + p := i + bi.Idamax(n-i, vn1[i:], 1) + if p != i { + bi.Dswap(m, a[p:], lda, a[i:], lda) + jpvt[p], jpvt[i] = jpvt[i], jpvt[p] + vn1[p] = vn1[i] + vn2[p] = vn2[i] + } + + // Generate elementary reflector H_i. + if offpi < m-1 { + a[offpi*lda+i], tau[i] = impl.Dlarfg(m-offpi, a[offpi*lda+i], a[(offpi+1)*lda+i:], lda) + } else { + tau[i] = 0 + } + + if i < n-1 { + // Apply H_i^T to A[offset+i:m, i:n] from the left. + aii := a[offpi*lda+i] + a[offpi*lda+i] = 1 + impl.Dlarf(blas.Left, m-offpi, n-i-1, a[offpi*lda+i:], lda, tau[i], a[offpi*lda+i+1:], lda, work) + a[offpi*lda+i] = aii + } + + // Update partial column norms. + for j := i + 1; j < n; j++ { + if vn1[j] == 0 { + continue + } + + // The following marked lines follow from the + // analysis in Lapack Working Note 176. + r := math.Abs(a[offpi*lda+j]) / vn1[j] // * + temp := math.Max(0, 1-r*r) // * + r = vn1[j] / vn2[j] // * + temp2 := temp * r * r // * + if temp2 < tol3z { + var v float64 + if offpi < m-1 { + v = bi.Dnrm2(m-offpi-1, a[(offpi+1)*lda+j:], lda) + } + vn1[j] = v + vn2[j] = v + } else { + vn1[j] *= math.Sqrt(temp) // * + } + } + } +} diff --git a/lapack/native/dlaqps.go b/lapack/native/dlaqps.go new file mode 100644 index 00000000..f96d40a5 --- /dev/null +++ b/lapack/native/dlaqps.go @@ -0,0 +1,217 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlaqps computes a step of QR factorization with column pivoting +// of an m×n matrix A by using Blas-3. It tries to factorize nb +// columns from A starting from the row offset, and updates all +// of the matrix with Dgemm. +// +// In some cases, due to catastrophic cancellations, it cannot +// factorize nb columns. Hence, the actual number of factorized +// columns is returned in kb. +// +// Dlaqps computes a QR factorization with column pivoting of the +// block A[offset:m, 0:nb] of the m×n matrix A. The block +// A[0:offset, 0:n] is accordingly pivoted, but not factorized. +// +// On exit, the upper triangle of block A[offset:m, 0:kb] is the +// triangular factor obtained. The elements in block A[offset:m, 0:n] +// below the diagonal, together with tau, represent the orthogonal +// matrix Q as a product of elementary reflectors. +// +// offset is number of rows of the matrix A that must be pivoted but +// not factorized. offset must not be negative otherwise Dlaqps will panic. +// +// On exit, jpvt holds the permutation that was applied; the jth column +// of A*P was the jpvt[j] column of A. jpvt must have length n, +// otherwise Dlapqs will panic. +// +// On exit tau holds the scalar factors of the elementary reflectors. +// It must have length nb, otherwise Dlapqs will panic. +// +// vn1 and vn2 hold the partial and complete column norms respectively. +// They must have length n, otherwise Dlapqs will panic. +// +// auxv must have length nb, otherwise Dlaqps will panic. +// +// f and ldf represent an n×nb matrix F that is overwritten during the +// call. +// +// Dlaqps is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jpvt []int, tau, vn1, vn2, auxv, f []float64, ldf int) (kb int) { + checkMatrix(m, n, a, lda) + checkMatrix(n, nb, f, ldf) + if offset > m { + panic(offsetGTM) + } + if n < 0 || nb > n { + panic(badNb) + } + if len(jpvt) != n { + panic(badIpiv) + } + if len(tau) < nb { + panic(badTau) + } + if len(vn1) < n { + panic(badVn1) + } + if len(vn2) < n { + panic(badVn2) + } + if len(auxv) < nb { + panic(badAuxv) + } + + lastrk := min(m, n+offset) + lsticc := -1 + tol3z := math.Sqrt(dlamchE) + + bi := blas64.Implementation() + + var k, rk int + for ; k < nb && lsticc == -1; k++ { + rk = offset + k + + // Determine kth pivot column and swap if necessary. + p := k + bi.Idamax(n-k, vn1[k:], 1) + if p != k { + bi.Dswap(m, a[p:], lda, a[k:], lda) + bi.Dswap(k, f[p*ldf:], 1, f[k*ldf:], 1) + jpvt[p], jpvt[k] = jpvt[k], jpvt[p] + vn1[p] = vn1[k] + vn2[p] = vn2[k] + } + + // Apply previous Householder reflectors to column K: + // + // A[rk:m, k] = A[rk:m, k] - A[rk:m, 0:k-1]*F[k, 0:k-1]^T. + if k > 0 { + bi.Dgemv(blas.NoTrans, m-rk, k, -1, + a[rk*lda:], lda, + f[k*ldf:], 1, + 1, + a[rk*lda+k:], lda) + } + + // Generate elementary reflector H_k. + if rk < m-1 { + a[rk*lda+k], tau[k] = impl.Dlarfg(m-rk, a[rk*lda+k], a[(rk+1)*lda+k:], lda) + } else { + tau[k] = 0 + } + + akk := a[rk*lda+k] + a[rk*lda+k] = 1 + + // Compute kth column of F: + // + // Compute F[k+1:n, k] = tau[k]*A[rk:m, k+1:n]^T*A[rk:m, k]. + if k < n-1 { + bi.Dgemv(blas.Trans, m-rk, n-k-1, tau[k], + a[rk*lda+k+1:], lda, + a[rk*lda+k:], lda, + 0, + f[(k+1)*ldf+k:], ldf) + } + + // Padding F[0:k, k] with zeros. + for j := 0; j < k; j++ { + f[j*ldf+k] = 0 + } + + // Incremental updating of F: + // + // F[0:n, k] := F[0:n, k] - tau[k]*F[0:n, 0:k-1]*A[rk:m, 0:k-1]^T*A[rk:m,k]. + if k > 0 { + bi.Dgemv(blas.Trans, m-rk, k, -tau[k], + a[rk*lda:], lda, + a[rk*lda+k:], lda, + 0, + auxv, 1) + bi.Dgemv(blas.NoTrans, n, k, 1, + f, ldf, + auxv, 1, + 1, + f[k:], ldf) + } + + // Update the current row of A: + // + // A[rk, k+1:n] = A[rk, k+1:n] - A[rk, 0:k]*F[k+1:n, 0:k]^T. + if k < n-1 { + bi.Dgemv(blas.NoTrans, n-k-1, k+1, -1, + f[(k+1)*ldf:], ldf, + a[rk*lda:], 1, + 1, + a[rk*lda+k+1:], 1) + } + + // Update partial column norms. + if rk < lastrk-1 { + for j := k + 1; j < n; j++ { + if vn1[j] == 0 { + continue + } + + // The following marked lines follow from the + // analysis in Lapack Working Note 176. + r := math.Abs(a[rk*lda+j]) / vn1[j] // * + temp := math.Max(0, 1-r*r) // * + r = vn1[j] / vn2[j] // * + temp2 := temp * r * r // * + if temp2 < tol3z { + // vn2 is used here as a collection of + // indices into vn2 and also a collection + // of column norms. + vn2[j] = float64(lsticc) + lsticc = j + } else { + vn1[j] *= math.Sqrt(temp) // * + } + } + } + + a[rk*lda+k] = akk + } + kb = k + rk = offset + kb + + // Apply the block reflector to the rest of the matrix: + // + // A[offset+kb+1:m, kb+1:n] := A[offset+kb+1:m, kb+1:n] - A[offset+kb+1:m, 1:kb]*F[kb+1:n, 1:kb]^T. + if kb < min(n, m-offset) { + bi.Dgemm(blas.NoTrans, blas.Trans, + m-rk, n-kb, kb, -1, + a[rk*lda:], lda, + f[kb*ldf:], ldf, + 1, + a[rk*lda+kb:], lda) + } + + // Recomputation of difficult columns. + for lsticc >= 0 { + itemp := int(vn2[lsticc]) + + // NOTE: The computation of vn1[lsticc] relies on the fact that + // Dnrm2 does not fail on vectors with norm below the value of + // sqrt(dlamchS) + v := bi.Dnrm2(m-rk, a[rk*lda+lsticc:], lda) + vn1[lsticc] = v + vn2[lsticc] = v + + lsticc = itemp + } + + return kb +} diff --git a/lapack/native/dlaqr04.go b/lapack/native/dlaqr04.go new file mode 100644 index 00000000..de7e1b46 --- /dev/null +++ b/lapack/native/dlaqr04.go @@ -0,0 +1,475 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" +) + +// Dlaqr04 computes the eigenvalues of a block of an n×n upper Hessenberg matrix +// H, and optionally the matrices T and Z from the Schur decomposition +// H = Z T Z^T +// where T is an upper quasi-triangular matrix (the Schur form), and Z is the +// orthogonal matrix of Schur vectors. +// +// wantt indicates whether the full Schur form T is required. If wantt is false, +// then only enough of H will be updated to preserve the eigenvalues. +// +// wantz indicates whether the n×n matrix of Schur vectors Z is required. If it +// is true, the orthogonal similarity transformation will be accumulated into +// Z[iloz:ihiz+1,ilo:ihi+1], otherwise Z will not be referenced. +// +// ilo and ihi determine the block of H on which Dlaqr04 operates. It must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo == 0 and ihi == -1, if n == 0, +// and the block must be isolated, that is, +// ilo == 0 or H[ilo,ilo-1] == 0, +// ihi == n-1 or H[ihi+1,ihi] == 0, +// otherwise Dlaqr04 will panic. +// +// wr and wi must have length ihi+1. +// +// iloz and ihiz specify the rows of Z to which transformations will be applied +// if wantz is true. It must hold that +// 0 <= iloz <= ilo, and ihi <= ihiz < n, +// otherwise Dlaqr04 will panic. +// +// work must have length at least lwork and lwork must be +// lwork >= 1, if n <= 11, +// lwork >= n, if n > 11, +// otherwise Dlaqr04 will panic. lwork as large as 6*n may be required for +// optimal performance. On return, work[0] will contain the optimal value of +// lwork. +// +// If lwork is -1, instead of performing Dlaqr04, the function only estimates the +// optimal workspace size and stores it into work[0]. Neither h nor z are +// accessed. +// +// recur is the non-negative recursion depth. For recur > 0, Dlaqr04 behaves +// as DLAQR0, for recur == 0 it behaves as DLAQR4. +// +// unconverged indicates whether Dlaqr04 computed all the eigenvalues of H[ilo:ihi+1,ilo:ihi+1]. +// +// If unconverged is zero and wantt is true, H will contain on return the upper +// quasi-triangular matrix T from the Schur decomposition. 2×2 diagonal blocks +// (corresponding to complex conjugate pairs of eigenvalues) will be returned in +// standard form, with H[i,i] == H[i+1,i+1] and H[i+1,i]*H[i,i+1] < 0. +// +// If unconverged is zero and if wantt is false, the contents of h on return is +// unspecified. +// +// If unconverged is zero, all the eigenvalues have been computed and their real +// and imaginary parts will be stored on return in wr[ilo:ihi+1] and +// wi[ilo:ihi+1], respectively. If two eigenvalues are computed as a complex +// conjugate pair, they are stored in consecutive elements of wr and wi, say the +// i-th and (i+1)th, with wi[i] > 0 and wi[i+1] < 0. If wantt is true, then the +// eigenvalues are stored in the same order as on the diagonal of the Schur form +// returned in H, with wr[i] = H[i,i] and, if H[i:i+2,i:i+2] is a 2×2 diagonal +// block, wi[i] = sqrt(-H[i+1,i]*H[i,i+1]) and wi[i+1] = -wi[i]. +// +// If unconverged is positive, some eigenvalues have not converged, and +// wr[unconverged:ihi+1] and wi[unconverged:ihi+1] will contain those +// eigenvalues which have been successfully computed. Failures are rare. +// +// If unconverged is positive and wantt is true, then on return +// (initial H)*U = U*(final H), (*) +// where U is an orthogonal matrix. The final H is upper Hessenberg and +// H[unconverged:ihi+1,unconverged:ihi+1] is upper quasi-triangular. +// +// If unconverged is positive and wantt is false, on return the remaining +// unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix +// H[ilo:unconverged,ilo:unconverged]. +// +// If unconverged is positive and wantz is true, then on return +// (final Z) = (initial Z)*U, +// where U is the orthogonal matrix in (*) regardless of the value of wantt. +// +// References: +// [1] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part I: +// Maintaining Well-Focused Shifts and Level 3 Performance. SIAM J. Matrix +// Anal. Appl. 23(4) (2002), pp. 929—947 +// URL: http://dx.doi.org/10.1137/S0895479801384573 +// [2] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part II: +// Aggressive Early Deflation. SIAM J. Matrix Anal. Appl. 23(4) (2002), pp. 948—973 +// URL: http://dx.doi.org/10.1137/S0895479801384585 +// +// Dlaqr04 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaqr04(wantt, wantz bool, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, iloz, ihiz int, z []float64, ldz int, work []float64, lwork int, recur int) (unconverged int) { + const ( + // Matrices of order ntiny or smaller must be processed by + // Dlahqr because of insufficient subdiagonal scratch space. + // This is a hard limit. + ntiny = 11 + // Exceptional deflation windows: try to cure rare slow + // convergence by varying the size of the deflation window after + // kexnw iterations. + kexnw = 5 + // Exceptional shifts: try to cure rare slow convergence with + // ad-hoc exceptional shifts every kexsh iterations. + kexsh = 6 + + // See https://github.com/gonum/lapack/pull/151#discussion_r68162802 + // and the surrounding discussion for an explanation where these + // constants come from. + // TODO(vladimir-ch): Similar constants for exceptional shifts + // are used also in dlahqr.go. The first constant is different + // there, it is equal to 3. Why? And does it matter? + wilk1 = 0.75 + wilk2 = -0.4375 + ) + + switch { + case ilo < 0 || max(0, n-1) < ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case lwork < 1 && n <= ntiny && lwork != -1: + panic(badWork) + // TODO(vladimir-ch): Enable if and when we figure out what the minimum + // necessary lwork value is. Dlaqr04 says that the minimum is n which + // clashes with Dlaqr23's opinion about optimal work when nw <= 2 + // (independent of n). + // case lwork < n && n > ntiny && lwork != -1: + // panic(badWork) + case len(work) < lwork: + panic(shortWork) + case recur < 0: + panic("lapack: recur is negative") + } + if wantz { + if iloz < 0 || ilo < iloz { + panic("lapack: invalid value of iloz") + } + if ihiz < ihi || n <= ihiz { + panic("lapack: invalid value of ihiz") + } + } + if lwork != -1 { + checkMatrix(n, n, h, ldh) + if wantz { + checkMatrix(n, n, z, ldz) + } + switch { + case ilo > 0 && h[ilo*ldh+ilo-1] != 0: + panic("lapack: block not isolated") + case ihi+1 < n && h[(ihi+1)*ldh+ihi] != 0: + panic("lapack: block not isolated") + case len(wr) != ihi+1: + panic("lapack: bad length of wr") + case len(wi) != ihi+1: + panic("lapack: bad length of wi") + } + } + + // Quick return. + if n == 0 { + work[0] = 1 + return 0 + } + + if n <= ntiny { + // Tiny matrices must use Dlahqr. + work[0] = 1 + if lwork == -1 { + return 0 + } + return impl.Dlahqr(wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz) + } + + // Use small bulge multi-shift QR with aggressive early deflation on + // larger-than-tiny matrices. + var jbcmpz string + if wantt { + jbcmpz = "S" + } else { + jbcmpz = "E" + } + if wantz { + jbcmpz += "V" + } else { + jbcmpz += "N" + } + + var fname string + if recur > 0 { + fname = "DLAQR0" + } else { + fname = "DLAQR4" + } + // nwr is the recommended deflation window size. n is greater than 11, + // so there is enough subdiagonal workspace for nwr >= 2 as required. + // (In fact, there is enough subdiagonal space for nwr >= 3.) + // TODO(vladimir-ch): If there is enough space for nwr >= 3, should we + // use it? + nwr := impl.Ilaenv(13, fname, jbcmpz, n, ilo, ihi, lwork) + nwr = max(2, nwr) + nwr = min(ihi-ilo+1, min((n-1)/3, nwr)) + + // nsr is the recommended number of simultaneous shifts. n is greater + // than 11, so there is enough subdiagonal workspace for nsr to be even + // and greater than or equal to two as required. + nsr := impl.Ilaenv(15, fname, jbcmpz, n, ilo, ihi, lwork) + nsr = min(nsr, min((n+6)/9, ihi-ilo)) + nsr = max(2, nsr&^1) + + // Workspace query call to Dlaqr23. + impl.Dlaqr23(wantt, wantz, n, ilo, ihi, nwr+1, nil, 0, iloz, ihiz, nil, 0, + nil, nil, nil, 0, n, nil, 0, n, nil, 0, work, -1, recur) + // Optimal workspace is max(Dlaqr5, Dlaqr23). + lwkopt := max(3*nsr/2, int(work[0])) + // Quick return in case of workspace query. + if lwork == -1 { + work[0] = float64(lwkopt) + return 0 + } + + // Dlahqr/Dlaqr04 crossover point. + nmin := impl.Ilaenv(12, fname, jbcmpz, n, ilo, ihi, lwork) + nmin = max(ntiny, nmin) + + // Nibble determines when to skip a multi-shift QR sweep (Dlaqr5). + nibble := impl.Ilaenv(14, fname, jbcmpz, n, ilo, ihi, lwork) + nibble = max(0, nibble) + + // Computation mode of far-from-diagonal orthogonal updates in Dlaqr5. + kacc22 := impl.Ilaenv(16, fname, jbcmpz, n, ilo, ihi, lwork) + kacc22 = max(0, min(kacc22, 2)) + + // nwmax is the largest possible deflation window for which there is + // sufficient workspace. + nwmax := min((n-1)/3, lwork/2) + nw := nwmax // Start with maximum deflation window size. + + // nsmax is the largest number of simultaneous shifts for which there is + // sufficient workspace. + nsmax := min((n+6)/9, 2*lwork/3) &^ 1 + + ndfl := 1 // Number of iterations since last deflation. + ndec := 0 // Deflation window size decrement. + + // Main loop. + var ( + itmax = max(30, 2*kexsh) * max(10, (ihi-ilo+1)) + it = 0 + ) + for kbot := ihi; kbot >= ilo; { + if it == itmax { + unconverged = kbot + 1 + break + } + it++ + + // Locate active block. + ktop := ilo + for k := kbot; k >= ilo+1; k-- { + if h[k*ldh+k-1] == 0 { + ktop = k + break + } + } + + // Select deflation window size nw. + // + // Typical Case: + // If possible and advisable, nibble the entire active block. + // If not, use size min(nwr,nwmax) or min(nwr+1,nwmax) + // depending upon which has the smaller corresponding + // subdiagonal entry (a heuristic). + // + // Exceptional Case: + // If there have been no deflations in kexnw or more + // iterations, then vary the deflation window size. At first, + // because larger windows are, in general, more powerful than + // smaller ones, rapidly increase the window to the maximum + // possible. Then, gradually reduce the window size. + nh := kbot - ktop + 1 + nwupbd := min(nh, nwmax) + if ndfl < kexnw { + nw = min(nwupbd, nwr) + } else { + nw = min(nwupbd, 2*nw) + } + if nw < nwmax { + if nw >= nh-1 { + nw = nh + } else { + kwtop := kbot - nw + 1 + if math.Abs(h[kwtop*ldh+kwtop-1]) > math.Abs(h[(kwtop-1)*ldh+kwtop-2]) { + nw++ + } + } + } + if ndfl < kexnw { + ndec = -1 + } else if ndec >= 0 || nw >= nwupbd { + ndec++ + if nw-ndec < 2 { + ndec = 0 + } + nw -= ndec + } + + // Split workspace under the subdiagonal of H into: + // - an nw×nw work array V in the lower left-hand corner, + // - an nw×nhv horizontal work array along the bottom edge (nhv + // must be at least nw but more is better), + // - an nve×nw vertical work array along the left-hand-edge + // (nhv can be any positive integer but more is better). + kv := n - nw + kt := nw + kwv := nw + 1 + nhv := n - kwv - kt + // Aggressive early deflation. + ls, ld := impl.Dlaqr23(wantt, wantz, n, ktop, kbot, nw, + h, ldh, iloz, ihiz, z, ldz, wr[:kbot+1], wi[:kbot+1], + h[kv*ldh:], ldh, nhv, h[kv*ldh+kt:], ldh, nhv, h[kwv*ldh:], ldh, work, lwork, recur) + + // Adjust kbot accounting for new deflations. + kbot -= ld + // ks points to the shifts. + ks := kbot - ls + 1 + + // Skip an expensive QR sweep if there is a (partly heuristic) + // reason to expect that many eigenvalues will deflate without + // it. Here, the QR sweep is skipped if many eigenvalues have + // just been deflated or if the remaining active block is small. + if ld > 0 && (100*ld > nw*nibble || kbot-ktop+1 <= min(nmin, nwmax)) { + // ld is positive, note progress. + ndfl = 1 + continue + } + + // ns is the nominal number of simultaneous shifts. This may be + // lowered (slightly) if Dlaqr23 did not provide that many + // shifts. + ns := min(min(nsmax, nsr), max(2, kbot-ktop)) &^ 1 + + // If there have been no deflations in a multiple of kexsh + // iterations, then try exceptional shifts. Otherwise use shifts + // provided by Dlaqr23 above or from the eigenvalues of a + // trailing principal submatrix. + if ndfl%kexsh == 0 { + ks = kbot - ns + 1 + for i := kbot; i > max(ks, ktop+1); i -= 2 { + ss := math.Abs(h[i*ldh+i-1]) + math.Abs(h[(i-1)*ldh+i-2]) + aa := wilk1*ss + h[i*ldh+i] + _, _, _, _, wr[i-1], wi[i-1], wr[i], wi[i], _, _ = + impl.Dlanv2(aa, ss, wilk2*ss, aa) + } + if ks == ktop { + wr[ks+1] = h[(ks+1)*ldh+ks+1] + wi[ks+1] = 0 + wr[ks] = wr[ks+1] + wi[ks] = wi[ks+1] + } + } else { + // If we got ns/2 or fewer shifts, use Dlahqr or recur + // into Dlaqr04 on a trailing principal submatrix to get + // more. Since ns <= nsmax <=(n+6)/9, there is enough + // space below the subdiagonal to fit an ns×ns scratch + // array. + if kbot-ks+1 <= ns/2 { + ks = kbot - ns + 1 + kt = n - ns + impl.Dlacpy(blas.All, ns, ns, h[ks*ldh+ks:], ldh, h[kt*ldh:], ldh) + if ns > nmin && recur > 0 { + ks += impl.Dlaqr04(false, false, ns, 1, ns-1, h[kt*ldh:], ldh, + wr[ks:ks+ns], wi[ks:ks+ns], 0, 0, nil, 0, work, lwork, recur-1) + } else { + ks += impl.Dlahqr(false, false, ns, 0, ns-1, h[kt*ldh:], ldh, + wr[ks:ks+ns], wi[ks:ks+ns], 0, 0, nil, 0) + } + // In case of a rare QR failure use eigenvalues + // of the trailing 2×2 principal submatrix. + if ks >= kbot { + aa := h[(kbot-1)*ldh+kbot-1] + bb := h[(kbot-1)*ldh+kbot] + cc := h[kbot*ldh+kbot-1] + dd := h[kbot*ldh+kbot] + _, _, _, _, wr[kbot-1], wi[kbot-1], wr[kbot], wi[kbot], _, _ = + impl.Dlanv2(aa, bb, cc, dd) + ks = kbot - 1 + } + } + + if kbot-ks+1 > ns { + // Sorting the shifts helps a little. Bubble + // sort keeps complex conjugate pairs together. + sorted := false + for k := kbot; k > ks; k-- { + if sorted { + break + } + sorted = true + for i := ks; i < k; i++ { + if math.Abs(wr[i])+math.Abs(wi[i]) >= math.Abs(wr[i+1])+math.Abs(wi[i+1]) { + continue + } + sorted = false + wr[i], wr[i+1] = wr[i+1], wr[i] + wi[i], wi[i+1] = wi[i+1], wi[i] + } + } + } + + // Shuffle shifts into pairs of real shifts and pairs of + // complex conjugate shifts using the fact that complex + // conjugate shifts are already adjacent to one another. + // TODO(vladimir-ch): The shuffling here could probably + // be removed but I'm not sure right now and it's safer + // to leave it. + for i := kbot; i > ks+1; i -= 2 { + if wi[i] == -wi[i-1] { + continue + } + wr[i], wr[i-1], wr[i-2] = wr[i-1], wr[i-2], wr[i] + wi[i], wi[i-1], wi[i-2] = wi[i-1], wi[i-2], wi[i] + } + } + + // If there are only two shifts and both are real, then use only one. + if kbot-ks+1 == 2 && wi[kbot] == 0 { + if math.Abs(wr[kbot]-h[kbot*ldh+kbot]) < math.Abs(wr[kbot-1]-h[kbot*ldh+kbot]) { + wr[kbot-1] = wr[kbot] + } else { + wr[kbot] = wr[kbot-1] + } + } + + // Use up to ns of the the smallest magnitude shifts. If there + // aren't ns shifts available, then use them all, possibly + // dropping one to make the number of shifts even. + ns = min(ns, kbot-ks+1) &^ 1 + ks = kbot - ns + 1 + + // Split workspace under the subdiagonal into: + // - a kdu×kdu work array U in the lower left-hand-corner, + // - a kdu×nhv horizontal work array WH along the bottom edge + // (nhv must be at least kdu but more is better), + // - an nhv×kdu vertical work array WV along the left-hand-edge + // (nhv must be at least kdu but more is better). + kdu := 3*ns - 3 + ku := n - kdu + kwh := kdu + kwv = kdu + 3 + nhv = n - kwv - kdu + // Small-bulge multi-shift QR sweep. + impl.Dlaqr5(wantt, wantz, kacc22, n, ktop, kbot, ns, + wr[ks:ks+ns], wi[ks:ks+ns], h, ldh, iloz, ihiz, z, ldz, + work, 3, h[ku*ldh:], ldh, nhv, h[kwv*ldh:], ldh, nhv, h[ku*ldh+kwh:], ldh) + + // Note progress (or the lack of it). + if ld > 0 { + ndfl = 1 + } else { + ndfl++ + } + } + + work[0] = float64(lwkopt) + return unconverged +} diff --git a/lapack/native/dlaqr1.go b/lapack/native/dlaqr1.go new file mode 100644 index 00000000..4d482a5d --- /dev/null +++ b/lapack/native/dlaqr1.go @@ -0,0 +1,57 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlaqr1 sets v to a scalar multiple of the first column of the product +// (H - (sr1 + i*si1)*I)*(H - (sr2 + i*si2)*I) +// where H is a 2×2 or 3×3 matrix, I is the identity matrix of the same size, +// and i is the imaginary unit. Scaling is done to avoid overflows and most +// underflows. +// +// n is the order of H and must be either 2 or 3. It must hold that either sr1 = +// sr2 and si1 = -si2, or si1 = si2 = 0. The length of v must be equal to n. If +// any of these conditions is not met, Dlaqr1 will panic. +// +// Dlaqr1 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaqr1(n int, h []float64, ldh int, sr1, si1, sr2, si2 float64, v []float64) { + if n != 2 && n != 3 { + panic(badDims) + } + checkMatrix(n, n, h, ldh) + if len(v) != n { + panic(badSlice) + } + if !((sr1 == sr2 && si1 == -si2) || (si1 == 0 && si2 == 0)) { + panic(badShifts) + } + + if n == 2 { + s := math.Abs(h[0]-sr2) + math.Abs(si2) + math.Abs(h[ldh]) + if s == 0 { + v[0] = 0 + v[1] = 0 + } else { + h21s := h[ldh] / s + v[0] = h21s*h[1] + (h[0]-sr1)*((h[0]-sr2)/s) - si1*(si2/s) + v[1] = h21s * (h[0] + h[ldh+1] - sr1 - sr2) + } + return + } + + s := math.Abs(h[0]-sr2) + math.Abs(si2) + math.Abs(h[ldh]) + math.Abs(h[2*ldh]) + if s == 0 { + v[0] = 0 + v[1] = 0 + v[2] = 0 + } else { + h21s := h[ldh] / s + h31s := h[2*ldh] / s + v[0] = (h[0]-sr1)*((h[0]-sr2)/s) - si1*(si2/s) + h[1]*h21s + h[2]*h31s + v[1] = h21s*(h[0]+h[ldh+1]-sr1-sr2) + h[ldh+2]*h31s + v[2] = h31s*(h[0]+h[2*ldh+2]-sr1-sr2) + h21s*h[2*ldh+1] + } +} diff --git a/lapack/native/dlaqr23.go b/lapack/native/dlaqr23.go new file mode 100644 index 00000000..0d798dea --- /dev/null +++ b/lapack/native/dlaqr23.go @@ -0,0 +1,403 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlaqr23 performs the orthogonal similarity transformation of an n×n upper +// Hessenberg matrix to detect and deflate fully converged eigenvalues from a +// trailing principal submatrix using aggressive early deflation [1]. +// +// On return, H will be overwritten by a new Hessenberg matrix that is a +// perturbation of an orthogonal similarity transformation of H. It is hoped +// that on output H will have many zero subdiagonal entries. +// +// If wantt is true, the matrix H will be fully updated so that the +// quasi-triangular Schur factor can be computed. If wantt is false, then only +// enough of H will be updated to preserve the eigenvalues. +// +// If wantz is true, the orthogonal similarity transformation will be +// accumulated into Z[iloz:ihiz+1,ktop:kbot+1], otherwise Z is not referenced. +// +// ktop and kbot determine a block [ktop:kbot+1,ktop:kbot+1] along the diagonal +// of H. It must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo == 0 and ihi == -1, if n == 0, +// and the block must be isolated, that is, it must hold that +// ktop == 0 or H[ktop,ktop-1] == 0, +// kbot == n-1 or H[kbot+1,kbot] == 0, +// otherwise Dlaqr23 will panic. +// +// nw is the deflation window size. It must hold that +// 0 <= nw <= kbot-ktop+1, +// otherwise Dlaqr23 will panic. +// +// iloz and ihiz specify the rows of the n×n matrix Z to which transformations +// will be applied if wantz is true. It must hold that +// 0 <= iloz <= ktop, and kbot <= ihiz < n, +// otherwise Dlaqr23 will panic. +// +// sr and si must have length kbot+1, otherwise Dlaqr23 will panic. +// +// v and ldv represent an nw×nw work matrix. +// t and ldt represent an nw×nh work matrix, and nh must be at least nw. +// wv and ldwv represent an nv×nw work matrix. +// +// work must have length at least lwork and lwork must be at least max(1,2*nw), +// otherwise Dlaqr23 will panic. Larger values of lwork may result in greater +// efficiency. On return, work[0] will contain the optimal value of lwork. +// +// If lwork is -1, instead of performing Dlaqr23, the function only estimates the +// optimal workspace size and stores it into work[0]. Neither h nor z are +// accessed. +// +// recur is the non-negative recursion depth. For recur > 0, Dlaqr23 behaves +// as DLAQR3, for recur == 0 it behaves as DLAQR2. +// +// On return, ns and nd will contain respectively the number of unconverged +// (i.e., approximate) eigenvalues and converged eigenvalues that are stored in +// sr and si. +// +// On return, the real and imaginary parts of approximate eigenvalues that may +// be used for shifts will be stored respectively in sr[kbot-nd-ns+1:kbot-nd+1] +// and si[kbot-nd-ns+1:kbot-nd+1]. +// +// On return, the real and imaginary parts of converged eigenvalues will be +// stored respectively in sr[kbot-nd+1:kbot+1] and si[kbot-nd+1:kbot+1]. +// +// References: +// [1] K. Braman, R. Byers, R. Mathias. The Multishift QR Algorithm. Part II: +// Aggressive Early Deflation. SIAM J. Matrix Anal. Appl 23(4) (2002), pp. 948—973 +// URL: http://dx.doi.org/10.1137/S0895479801384585 +// +func (impl Implementation) Dlaqr23(wantt, wantz bool, n, ktop, kbot, nw int, h []float64, ldh int, iloz, ihiz int, z []float64, ldz int, sr, si []float64, v []float64, ldv int, nh int, t []float64, ldt int, nv int, wv []float64, ldwv int, work []float64, lwork int, recur int) (ns, nd int) { + switch { + case ktop < 0 || max(0, n-1) < ktop: + panic("lapack: invalid value of ktop") + case kbot < min(ktop, n-1) || n <= kbot: + panic("lapack: invalid value of kbot") + case (nw < 0 || kbot-ktop+1 < nw) && lwork != -1: + panic("lapack: invalid value of nw") + case nh < nw: + panic("lapack: invalid value of nh") + case lwork < max(1, 2*nw) && lwork != -1: + panic(badWork) + case len(work) < lwork: + panic(shortWork) + case recur < 0: + panic("lapack: recur is negative") + } + if wantz { + switch { + case iloz < 0 || ktop < iloz: + panic("lapack: invalid value of iloz") + case ihiz < kbot || n <= ihiz: + panic("lapack: invalid value of ihiz") + } + } + if lwork != -1 { + // Check input slices only if not doing workspace query. + checkMatrix(n, n, h, ldh) + checkMatrix(nw, nw, v, ldv) + checkMatrix(nw, nh, t, ldt) + checkMatrix(nv, nw, wv, ldwv) + if wantz { + checkMatrix(n, n, z, ldz) + } + switch { + case ktop > 0 && h[ktop*ldh+ktop-1] != 0: + panic("lapack: block not isolated") + case kbot+1 < n && h[(kbot+1)*ldh+kbot] != 0: + panic("lapack: block not isolated") + case len(sr) != kbot+1: + panic("lapack: bad length of sr") + case len(si) != kbot+1: + panic("lapack: bad length of si") + } + } + + // Quick return for zero window size. + if nw == 0 { + work[0] = 1 + return 0, 0 + } + + // LAPACK code does not enforce the documented behavior + // nw <= kbot-ktop+1 + // but we do (we panic above). + jw := nw + lwkopt := max(1, 2*nw) + if jw > 2 { + // Workspace query call to Dgehrd. + impl.Dgehrd(jw, 0, jw-2, nil, 0, nil, work, -1) + lwk1 := int(work[0]) + // Workspace query call to Dormhr. + impl.Dormhr(blas.Right, blas.NoTrans, jw, jw, 0, jw-2, nil, 0, nil, nil, 0, work, -1) + lwk2 := int(work[0]) + if recur > 0 { + // Workspace query call to Dlaqr04. + impl.Dlaqr04(true, true, jw, 0, jw-1, nil, 0, nil, nil, 0, jw-1, nil, 0, work, -1, recur-1) + lwk3 := int(work[0]) + // Optimal workspace. + lwkopt = max(jw+max(lwk1, lwk2), lwk3) + } else { + // Optimal workspace. + lwkopt = jw + max(lwk1, lwk2) + } + } + // Quick return in case of workspace query. + if lwork == -1 { + work[0] = float64(lwkopt) + return 0, 0 + } + + // Machine constants. + ulp := dlamchP + smlnum := float64(n) / ulp * dlamchS + + // Setup deflation window. + var s float64 + kwtop := kbot - jw + 1 + if kwtop != ktop { + s = h[kwtop*ldh+kwtop-1] + } + if kwtop == kbot { + // 1×1 deflation window. + sr[kwtop] = h[kwtop*ldh+kwtop] + si[kwtop] = 0 + ns = 1 + nd = 0 + if math.Abs(s) <= math.Max(smlnum, ulp*math.Abs(h[kwtop*ldh+kwtop])) { + ns = 0 + nd = 1 + if kwtop > ktop { + h[kwtop*ldh+kwtop-1] = 0 + } + } + work[0] = 1 + return ns, nd + } + + // Convert to spike-triangular form. In case of a rare QR failure, this + // routine continues to do aggressive early deflation using that part of + // the deflation window that converged using infqr here and there to + // keep track. + impl.Dlacpy(blas.Upper, jw, jw, h[kwtop*ldh+kwtop:], ldh, t, ldt) + bi := blas64.Implementation() + bi.Dcopy(jw-1, h[(kwtop+1)*ldh+kwtop:], ldh+1, t[ldt:], ldt+1) + impl.Dlaset(blas.All, jw, jw, 0, 1, v, ldv) + nmin := impl.Ilaenv(12, "DLAQR3", "SV", jw, 0, jw-1, lwork) + var infqr int + if recur > 0 && jw > nmin { + infqr = impl.Dlaqr04(true, true, jw, 0, jw-1, t, ldt, sr[kwtop:], si[kwtop:], 0, jw-1, v, ldv, work, lwork, recur-1) + } else { + infqr = impl.Dlahqr(true, true, jw, 0, jw-1, t, ldt, sr[kwtop:], si[kwtop:], 0, jw-1, v, ldv) + } + // Note that ilo == 0 which conveniently coincides with the success + // value of infqr, that is, infqr as an index always points to the first + // converged eigenvalue. + + // Dtrexc needs a clean margin near the diagonal. + for j := 0; j < jw-3; j++ { + t[(j+2)*ldt+j] = 0 + t[(j+3)*ldt+j] = 0 + } + if jw >= 3 { + t[(jw-1)*ldt+jw-3] = 0 + } + + ns = jw + ilst := infqr + // Deflation detection loop. + for ilst < ns { + bulge := false + if ns >= 2 { + bulge = t[(ns-1)*ldt+ns-2] != 0 + } + if !bulge { + // Real eigenvalue. + abst := math.Abs(t[(ns-1)*ldt+ns-1]) + if abst == 0 { + abst = math.Abs(s) + } + if math.Abs(s*v[ns-1]) <= math.Max(smlnum, ulp*abst) { + // Deflatable. + ns-- + } else { + // Undeflatable, move it up out of the way. + // Dtrexc can not fail in this case. + _, ilst, _ = impl.Dtrexc(lapack.UpdateSchur, jw, t, ldt, v, ldv, ns-1, ilst, work) + ilst++ + } + continue + } + // Complex conjugate pair. + abst := math.Abs(t[(ns-1)*ldt+ns-1]) + math.Sqrt(math.Abs(t[(ns-1)*ldt+ns-2]))*math.Sqrt(math.Abs(t[(ns-2)*ldt+ns-1])) + if abst == 0 { + abst = math.Abs(s) + } + if math.Max(math.Abs(s*v[ns-1]), math.Abs(s*v[ns-2])) <= math.Max(smlnum, ulp*abst) { + // Deflatable. + ns -= 2 + } else { + // Undeflatable, move them up out of the way. + // Dtrexc does the right thing with ilst in case of a + // rare exchange failure. + _, ilst, _ = impl.Dtrexc(lapack.UpdateSchur, jw, t, ldt, v, ldv, ns-1, ilst, work) + ilst += 2 + } + } + + // Return to Hessenberg form. + if ns == 0 { + s = 0 + } + if ns < jw { + // Sorting diagonal blocks of T improves accuracy for graded + // matrices. Bubble sort deals well with exchange failures. + sorted := false + i := ns + for !sorted { + sorted = true + kend := i - 1 + i = infqr + var k int + if i == ns-1 || t[(i+1)*ldt+i] == 0 { + k = i + 1 + } else { + k = i + 2 + } + for k <= kend { + var evi float64 + if k == i+1 { + evi = math.Abs(t[i*ldt+i]) + } else { + evi = math.Abs(t[i*ldt+i]) + math.Sqrt(math.Abs(t[(i+1)*ldt+i]))*math.Sqrt(math.Abs(t[i*ldt+i+1])) + } + + var evk float64 + if k == kend || t[(k+1)*ldt+k] == 0 { + evk = math.Abs(t[k*ldt+k]) + } else { + evk = math.Abs(t[k*ldt+k]) + math.Sqrt(math.Abs(t[(k+1)*ldt+k]))*math.Sqrt(math.Abs(t[k*ldt+k+1])) + } + + if evi >= evk { + i = k + } else { + sorted = false + _, ilst, ok := impl.Dtrexc(lapack.UpdateSchur, jw, t, ldt, v, ldv, i, k, work) + if ok { + i = ilst + } else { + i = k + } + } + if i == kend || t[(i+1)*ldt+i] == 0 { + k = i + 1 + } else { + k = i + 2 + } + } + } + } + + // Restore shift/eigenvalue array from T. + for i := jw - 1; i >= infqr; { + if i == infqr || t[i*ldt+i-1] == 0 { + sr[kwtop+i] = t[i*ldt+i] + si[kwtop+i] = 0 + i-- + continue + } + aa := t[(i-1)*ldt+i-1] + bb := t[(i-1)*ldt+i] + cc := t[i*ldt+i-1] + dd := t[i*ldt+i] + _, _, _, _, sr[kwtop+i-1], si[kwtop+i-1], sr[kwtop+i], si[kwtop+i], _, _ = impl.Dlanv2(aa, bb, cc, dd) + i -= 2 + } + + if ns < jw || s == 0 { + if ns > 1 && s != 0 { + // Reflect spike back into lower triangle. + bi.Dcopy(ns, v[:ns], 1, work[:ns], 1) + _, tau := impl.Dlarfg(ns, work[0], work[1:ns], 1) + work[0] = 1 + impl.Dlaset(blas.Lower, jw-2, jw-2, 0, 0, t[2*ldt:], ldt) + impl.Dlarf(blas.Left, ns, jw, work[:ns], 1, tau, t, ldt, work[jw:]) + impl.Dlarf(blas.Right, ns, ns, work[:ns], 1, tau, t, ldt, work[jw:]) + impl.Dlarf(blas.Right, jw, ns, work[:ns], 1, tau, v, ldv, work[jw:]) + impl.Dgehrd(jw, 0, ns-1, t, ldt, work[:jw-1], work[jw:], lwork-jw) + } + + // Copy updated reduced window into place. + if kwtop > 0 { + h[kwtop*ldh+kwtop-1] = s * v[0] + } + impl.Dlacpy(blas.Upper, jw, jw, t, ldt, h[kwtop*ldh+kwtop:], ldh) + bi.Dcopy(jw-1, t[ldt:], ldt+1, h[(kwtop+1)*ldh+kwtop:], ldh+1) + + // Accumulate orthogonal matrix in order to update H and Z, if + // requested. + if ns > 1 && s != 0 { + // work[:ns-1] contains the elementary reflectors stored + // by a call to Dgehrd above. + impl.Dormhr(blas.Right, blas.NoTrans, jw, ns, 0, ns-1, + t, ldt, work[:ns-1], v, ldv, work[jw:], lwork-jw) + } + + // Update vertical slab in H. + var ltop int + if !wantt { + ltop = ktop + } + for krow := ltop; krow < kwtop; krow += nv { + kln := min(nv, kwtop-krow) + bi.Dgemm(blas.NoTrans, blas.NoTrans, kln, jw, jw, + 1, h[krow*ldh+kwtop:], ldh, v, ldv, + 0, wv, ldwv) + impl.Dlacpy(blas.All, kln, jw, wv, ldwv, h[krow*ldh+kwtop:], ldh) + } + + // Update horizontal slab in H. + if wantt { + for kcol := kbot + 1; kcol < n; kcol += nh { + kln := min(nh, n-kcol) + bi.Dgemm(blas.Trans, blas.NoTrans, jw, kln, jw, + 1, v, ldv, h[kwtop*ldh+kcol:], ldh, + 0, t, ldt) + impl.Dlacpy(blas.All, jw, kln, t, ldt, h[kwtop*ldh+kcol:], ldh) + } + } + + // Update vertical slab in Z. + if wantz { + for krow := iloz; krow <= ihiz; krow += nv { + kln := min(nv, ihiz-krow+1) + bi.Dgemm(blas.NoTrans, blas.NoTrans, kln, jw, jw, + 1, z[krow*ldz+kwtop:], ldz, v, ldv, + 0, wv, ldwv) + impl.Dlacpy(blas.All, kln, jw, wv, ldwv, z[krow*ldz+kwtop:], ldz) + } + } + } + + // The number of deflations. + nd = jw - ns + // Shifts are converged eigenvalues that could not be deflated. + // Subtracting infqr from the spike length takes care of the case of a + // rare QR failure while calculating eigenvalues of the deflation + // window. + ns -= infqr + work[0] = float64(lwkopt) + return ns, nd +} diff --git a/lapack/native/dlaqr5.go b/lapack/native/dlaqr5.go new file mode 100644 index 00000000..c66516a6 --- /dev/null +++ b/lapack/native/dlaqr5.go @@ -0,0 +1,616 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlaqr5 performs a single small-bulge multi-shift QR sweep on an isolated +// block of a Hessenberg matrix. +// +// wantt and wantz determine whether the quasi-triangular Schur factor and the +// orthogonal Schur factor, respectively, will be computed. +// +// kacc22 specifies the computation mode of far-from-diagonal orthogonal +// updates. Permitted values are: +// 0: Dlaqr5 will not accumulate reflections and will not use matrix-matrix +// multiply to update far-from-diagonal matrix entries. +// 1: Dlaqr5 will accumulate reflections and use matrix-matrix multiply to +// update far-from-diagonal matrix entries. +// 2: Dlaqr5 will accumulate reflections, use matrix-matrix multiply to update +// far-from-diagonal matrix entries, and take advantage of 2×2 block +// structure during matrix multiplies. +// For other values of kacc2 Dlaqr5 will panic. +// +// n is the order of the Hessenberg matrix H. +// +// ktop and kbot are indices of the first and last row and column of an isolated +// diagonal block upon which the QR sweep will be applied. It must hold that +// ktop == 0, or 0 < ktop <= n-1 and H[ktop, ktop-1] == 0, and +// kbot == n-1, or 0 <= kbot < n-1 and H[kbot+1, kbot] == 0, +// otherwise Dlaqr5 will panic. +// +// nshfts is the number of simultaneous shifts. It must be positive and even, +// otherwise Dlaqr5 will panic. +// +// sr and si contain the real and imaginary parts, respectively, of the shifts +// of origin that define the multi-shift QR sweep. On return both slices may be +// reordered by Dlaqr5. Their length must be equal to nshfts, otherwise Dlaqr5 +// will panic. +// +// h and ldh represent the Hessenberg matrix H of size n×n. On return +// multi-shift QR sweep with shifts sr+i*si has been applied to the isolated +// diagonal block in rows and columns ktop through kbot, inclusive. +// +// iloz and ihiz specify the rows of Z to which transformations will be applied +// if wantz is true. It must hold that 0 <= iloz <= ihiz < n, otherwise Dlaqr5 +// will panic. +// +// z and ldz represent the matrix Z of size n×n. If wantz is true, the QR sweep +// orthogonal similarity transformation is accumulated into +// z[iloz:ihiz,iloz:ihiz] from the right, otherwise z not referenced. +// +// v and ldv represent an auxiliary matrix V of size (nshfts/2)×3. Note that V +// is transposed with respect to the reference netlib implementation. +// +// u and ldu represent an auxiliary matrix of size (3*nshfts-3)×(3*nshfts-3). +// +// wh and ldwh represent an auxiliary matrix of size (3*nshfts-3)×nh. +// +// wv and ldwv represent an auxiliary matrix of size nv×(3*nshfts-3). +// +// Dlaqr5 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot, nshfts int, sr, si []float64, h []float64, ldh int, iloz, ihiz int, z []float64, ldz int, v []float64, ldv int, u []float64, ldu int, nv int, wv []float64, ldwv int, nh int, wh []float64, ldwh int) { + checkMatrix(n, n, h, ldh) + if ktop < 0 || n <= ktop { + panic("lapack: invalid value of ktop") + } + if ktop > 0 && h[ktop*ldh+ktop-1] != 0 { + panic("lapack: diagonal block is not isolated") + } + if kbot < 0 || n <= kbot { + panic("lapack: invalid value of kbot") + } + if kbot < n-1 && h[(kbot+1)*ldh+kbot] != 0 { + panic("lapack: diagonal block is not isolated") + } + if nshfts < 0 || nshfts&0x1 != 0 { + panic("lapack: invalid number of shifts") + } + if len(sr) != nshfts || len(si) != nshfts { + panic(badSlice) // TODO(vladimir-ch) Another message? + } + if wantz { + if ihiz >= n { + panic("lapack: invalid value of ihiz") + } + if iloz < 0 || ihiz < iloz { + panic("lapack: invalid value of iloz") + } + checkMatrix(n, n, z, ldz) + } + checkMatrix(nshfts/2, 3, v, ldv) // Transposed w.r.t. lapack. + checkMatrix(3*nshfts-3, 3*nshfts-3, u, ldu) + checkMatrix(nv, 3*nshfts-3, wv, ldwv) + checkMatrix(3*nshfts-3, nh, wh, ldwh) + if kacc22 != 0 && kacc22 != 1 && kacc22 != 2 { + panic("lapack: invalid value of kacc22") + } + + // If there are no shifts, then there is nothing to do. + if nshfts < 2 { + return + } + // If the active block is empty or 1×1, then there is nothing to do. + if ktop >= kbot { + return + } + + // Shuffle shifts into pairs of real shifts and pairs of complex + // conjugate shifts assuming complex conjugate shifts are already + // adjacent to one another. + for i := 0; i < nshfts-2; i += 2 { + if si[i] == -si[i+1] { + continue + } + sr[i], sr[i+1], sr[i+2] = sr[i+1], sr[i+2], sr[i] + si[i], si[i+1], si[i+2] = si[i+1], si[i+2], si[i] + } + + // Note: lapack says that nshfts must be even but allows it to be odd + // anyway. We panic above if nshfts is not even, so reducing it by one + // is unnecessary. The only caller Dlaqr04 uses only even nshfts. + // + // The original comment and code from lapack-3.6.0/SRC/dlaqr5.f:341: + // * ==== NSHFTS is supposed to be even, but if it is odd, + // * . then simply reduce it by one. The shuffle above + // * . ensures that the dropped shift is real and that + // * . the remaining shifts are paired. ==== + // * + // NS = NSHFTS - MOD( NSHFTS, 2 ) + ns := nshfts + + safmin := dlamchS + ulp := dlamchP + smlnum := safmin * float64(n) / ulp + + // Use accumulated reflections to update far-from-diagonal entries? + accum := kacc22 == 1 || kacc22 == 2 + // If so, exploit the 2×2 block structure? + blk22 := ns > 2 && kacc22 == 2 + + // Clear trash. + if ktop+2 <= kbot { + h[(ktop+2)*ldh+ktop] = 0 + } + + // nbmps = number of 2-shift bulges in the chain. + nbmps := ns / 2 + + // kdu = width of slab. + kdu := 6*nbmps - 3 + + // Create and chase chains of nbmps bulges. + for incol := 3*(1-nbmps) + ktop - 1; incol <= kbot-2; incol += 3*nbmps - 2 { + ndcol := incol + kdu + if accum { + impl.Dlaset(blas.All, kdu, kdu, 0, 1, u, ldu) + } + + // Near-the-diagonal bulge chase. The following loop performs + // the near-the-diagonal part of a small bulge multi-shift QR + // sweep. Each 6*nbmps-2 column diagonal chunk extends from + // column incol to column ndcol (including both column incol and + // column ndcol). The following loop chases a 3*nbmps column + // long chain of nbmps bulges 3*nbmps-2 columns to the right. + // (incol may be less than ktop and ndcol may be greater than + // kbot indicating phantom columns from which to chase bulges + // before they are actually introduced or to which to chase + // bulges beyond column kbot.) + for krcol := incol; krcol <= min(incol+3*nbmps-3, kbot-2); krcol++ { + // Bulges number mtop to mbot are active double implicit + // shift bulges. There may or may not also be small 2×2 + // bulge, if there is room. The inactive bulges (if any) + // must wait until the active bulges have moved down the + // diagonal to make room. The phantom matrix paradigm + // described above helps keep track. + + mtop := max(0, ((ktop-1)-krcol+2)/3) + mbot := min(nbmps, (kbot-krcol)/3) - 1 + m22 := mbot + 1 + bmp22 := (mbot < nbmps-1) && (krcol+3*m22 == kbot-2) + + // Generate reflections to chase the chain right one + // column. (The minimum value of k is ktop-1.) + for m := mtop; m <= mbot; m++ { + k := krcol + 3*m + if k == ktop-1 { + impl.Dlaqr1(3, h[ktop*ldh+ktop:], ldh, + sr[2*m], si[2*m], sr[2*m+1], si[2*m+1], + v[m*ldv:m*ldv+3]) + alpha := v[m*ldv] + _, v[m*ldv] = impl.Dlarfg(3, alpha, v[m*ldv+1:m*ldv+3], 1) + continue + } + beta := h[(k+1)*ldh+k] + v[m*ldv+1] = h[(k+2)*ldh+k] + v[m*ldv+2] = h[(k+3)*ldh+k] + beta, v[m*ldv] = impl.Dlarfg(3, beta, v[m*ldv+1:m*ldv+3], 1) + + // A bulge may collapse because of vigilant deflation or + // destructive underflow. In the underflow case, try the + // two-small-subdiagonals trick to try to reinflate the + // bulge. + if h[(k+3)*ldh+k] != 0 || h[(k+3)*ldh+k+1] != 0 || h[(k+3)*ldh+k+2] == 0 { + // Typical case: not collapsed (yet). + h[(k+1)*ldh+k] = beta + h[(k+2)*ldh+k] = 0 + h[(k+3)*ldh+k] = 0 + continue + } + + // Atypical case: collapsed. Attempt to reintroduce + // ignoring H[k+1,k] and H[k+2,k]. If the fill + // resulting from the new reflector is too large, + // then abandon it. Otherwise, use the new one. + var vt [3]float64 + impl.Dlaqr1(3, h[(k+1)*ldh+k+1:], ldh, sr[2*m], + si[2*m], sr[2*m+1], si[2*m+1], vt[:]) + alpha := vt[0] + _, vt[0] = impl.Dlarfg(3, alpha, vt[1:3], 1) + refsum := vt[0] * (h[(k+1)*ldh+k] + vt[1]*h[(k+2)*ldh+k]) + + dsum := math.Abs(h[k*ldh+k]) + math.Abs(h[(k+1)*ldh+k+1]) + math.Abs(h[(k+2)*ldh+k+2]) + if math.Abs(h[(k+2)*ldh+k]-refsum*vt[1])+math.Abs(refsum*vt[2]) > ulp*dsum { + // Starting a new bulge here would create + // non-negligible fill. Use the old one with + // trepidation. + h[(k+1)*ldh+k] = beta + h[(k+2)*ldh+k] = 0 + h[(k+3)*ldh+k] = 0 + continue + } else { + // Starting a new bulge here would create + // only negligible fill. Replace the old + // reflector with the new one. + h[(k+1)*ldh+k] -= refsum + h[(k+2)*ldh+k] = 0 + h[(k+3)*ldh+k] = 0 + v[m*ldv] = vt[0] + v[m*ldv+1] = vt[1] + v[m*ldv+2] = vt[2] + } + } + + // Generate a 2×2 reflection, if needed. + if bmp22 { + k := krcol + 3*m22 + if k == ktop-1 { + impl.Dlaqr1(2, h[(k+1)*ldh+k+1:], ldh, + sr[2*m22], si[2*m22], sr[2*m22+1], si[2*m22+1], + v[m22*ldv:m22*ldv+2]) + beta := v[m22*ldv] + _, v[m22*ldv] = impl.Dlarfg(2, beta, v[m22*ldv+1:m22*ldv+2], 1) + } else { + beta := h[(k+1)*ldh+k] + v[m22*ldv+1] = h[(k+2)*ldh+k] + beta, v[m22*ldv] = impl.Dlarfg(2, beta, v[m22*ldv+1:m22*ldv+2], 1) + h[(k+1)*ldh+k] = beta + h[(k+2)*ldh+k] = 0 + } + } + + // Multiply H by reflections from the left. + var jbot int + switch { + case accum: + jbot = min(ndcol, kbot) + case wantt: + jbot = n - 1 + default: + jbot = kbot + } + for j := max(ktop, krcol); j <= jbot; j++ { + mend := min(mbot+1, (j-krcol+2)/3) - 1 + for m := mtop; m <= mend; m++ { + k := krcol + 3*m + refsum := v[m*ldv] * (h[(k+1)*ldh+j] + + v[m*ldv+1]*h[(k+2)*ldh+j] + v[m*ldv+2]*h[(k+3)*ldh+j]) + h[(k+1)*ldh+j] -= refsum + h[(k+2)*ldh+j] -= refsum * v[m*ldv+1] + h[(k+3)*ldh+j] -= refsum * v[m*ldv+2] + } + } + if bmp22 { + k := krcol + 3*m22 + for j := max(k+1, ktop); j <= jbot; j++ { + refsum := v[m22*ldv] * (h[(k+1)*ldh+j] + v[m22*ldv+1]*h[(k+2)*ldh+j]) + h[(k+1)*ldh+j] -= refsum + h[(k+2)*ldh+j] -= refsum * v[m22*ldv+1] + } + } + + // Multiply H by reflections from the right. Delay filling in the last row + // until the vigilant deflation check is complete. + var jtop int + switch { + case accum: + jtop = max(ktop, incol) + case wantt: + jtop = 0 + default: + jtop = ktop + } + for m := mtop; m <= mbot; m++ { + if v[m*ldv] == 0 { + continue + } + k := krcol + 3*m + for j := jtop; j <= min(kbot, k+3); j++ { + refsum := v[m*ldv] * (h[j*ldh+k+1] + + v[m*ldv+1]*h[j*ldh+k+2] + v[m*ldv+2]*h[j*ldh+k+3]) + h[j*ldh+k+1] -= refsum + h[j*ldh+k+2] -= refsum * v[m*ldv+1] + h[j*ldh+k+3] -= refsum * v[m*ldv+2] + } + if accum { + // Accumulate U. (If necessary, update Z later with with an + // efficient matrix-matrix multiply.) + kms := k - incol + for j := max(0, ktop-incol-1); j < kdu; j++ { + refsum := v[m*ldv] * (u[j*ldu+kms] + + v[m*ldv+1]*u[j*ldu+kms+1] + v[m*ldv+2]*u[j*ldu+kms+2]) + u[j*ldu+kms] -= refsum + u[j*ldu+kms+1] -= refsum * v[m*ldv+1] + u[j*ldu+kms+2] -= refsum * v[m*ldv+2] + } + } else if wantz { + // U is not accumulated, so update Z now by multiplying by + // reflections from the right. + for j := iloz; j <= ihiz; j++ { + refsum := v[m*ldv] * (z[j*ldz+k+1] + + v[m*ldv+1]*z[j*ldz+k+2] + v[m*ldv+2]*z[j*ldz+k+3]) + z[j*ldz+k+1] -= refsum + z[j*ldz+k+2] -= refsum * v[m*ldv+1] + z[j*ldz+k+3] -= refsum * v[m*ldv+2] + } + } + } + + // Special case: 2×2 reflection (if needed). + if bmp22 && v[m22*ldv] != 0 { + k := krcol + 3*m22 + for j := jtop; j <= min(kbot, k+3); j++ { + refsum := v[m22*ldv] * (h[j*ldh+k+1] + v[m22*ldv+1]*h[j*ldh+k+2]) + h[j*ldh+k+1] -= refsum + h[j*ldh+k+2] -= refsum * v[m22*ldv+1] + } + if accum { + kms := k - incol + for j := max(0, ktop-incol-1); j < kdu; j++ { + refsum := v[m22*ldv] * (u[j*ldu+kms] + v[m22*ldv+1]*u[j*ldu+kms+1]) + u[j*ldu+kms] -= refsum + u[j*ldu+kms+1] -= refsum * v[m22*ldv+1] + } + } else if wantz { + for j := iloz; j <= ihiz; j++ { + refsum := v[m22*ldv] * (z[j*ldz+k+1] + v[m22*ldv+1]*z[j*ldz+k+2]) + z[j*ldz+k+1] -= refsum + z[j*ldz+k+2] -= refsum * v[m22*ldv+1] + } + } + } + + // Vigilant deflation check. + mstart := mtop + if krcol+3*mstart < ktop { + mstart++ + } + mend := mbot + if bmp22 { + mend++ + } + if krcol == kbot-2 { + mend++ + } + for m := mstart; m <= mend; m++ { + k := min(kbot-1, krcol+3*m) + + // The following convergence test requires that the tradition + // small-compared-to-nearby-diagonals criterion and the Ahues & + // Tisseur (LAWN 122, 1997) criteria both be satisfied. The latter + // improves accuracy in some examples. Falling back on an alternate + // convergence criterion when tst1 or tst2 is zero (as done here) is + // traditional but probably unnecessary. + + if h[(k+1)*ldh+k] == 0 { + continue + } + tst1 := math.Abs(h[k*ldh+k]) + math.Abs(h[(k+1)*ldh+k+1]) + if tst1 == 0 { + if k >= ktop+1 { + tst1 += math.Abs(h[k*ldh+k-1]) + } + if k >= ktop+2 { + tst1 += math.Abs(h[k*ldh+k-2]) + } + if k >= ktop+3 { + tst1 += math.Abs(h[k*ldh+k-3]) + } + if k <= kbot-2 { + tst1 += math.Abs(h[(k+2)*ldh+k+1]) + } + if k <= kbot-3 { + tst1 += math.Abs(h[(k+3)*ldh+k+1]) + } + if k <= kbot-4 { + tst1 += math.Abs(h[(k+4)*ldh+k+1]) + } + } + if math.Abs(h[(k+1)*ldh+k]) <= math.Max(smlnum, ulp*tst1) { + h12 := math.Max(math.Abs(h[(k+1)*ldh+k]), math.Abs(h[k*ldh+k+1])) + h21 := math.Min(math.Abs(h[(k+1)*ldh+k]), math.Abs(h[k*ldh+k+1])) + h11 := math.Max(math.Abs(h[(k+1)*ldh+k+1]), math.Abs(h[k*ldh+k]-h[(k+1)*ldh+k+1])) + h22 := math.Min(math.Abs(h[(k+1)*ldh+k+1]), math.Abs(h[k*ldh+k]-h[(k+1)*ldh+k+1])) + scl := h11 + h12 + tst2 := h22 * (h11 / scl) + if tst2 == 0 || h21*(h12/scl) <= math.Max(smlnum, ulp*tst2) { + h[(k+1)*ldh+k] = 0 + } + } + } + + // Fill in the last row of each bulge. + mend = min(nbmps, (kbot-krcol-1)/3) - 1 + for m := mtop; m <= mend; m++ { + k := krcol + 3*m + refsum := v[m*ldv] * v[m*ldv+2] * h[(k+4)*ldh+k+3] + h[(k+4)*ldh+k+1] = -refsum + h[(k+4)*ldh+k+2] = -refsum * v[m*ldv+1] + h[(k+4)*ldh+k+3] -= refsum * v[m*ldv+2] + } + } + + // Use U (if accumulated) to update far-from-diagonal entries in H. + // If required, use U to update Z as well. + if !accum { + continue + } + var jtop, jbot int + if wantt { + jtop = 0 + jbot = n - 1 + } else { + jtop = ktop + jbot = kbot + } + bi := blas64.Implementation() + if !blk22 || incol < ktop || kbot < ndcol || ns <= 2 { + // Updates not exploiting the 2×2 block structure of U. k0 and nu keep track + // of the location and size of U in the special cases of introducing bulges + // and chasing bulges off the bottom. In these special cases and in case the + // number of shifts is ns = 2, there is no 2×2 block structure to exploit. + + k0 := max(0, ktop-incol-1) + nu := kdu - max(0, ndcol-kbot) - k0 + + // Horizontal multiply. + for jcol := min(ndcol, kbot) + 1; jcol <= jbot; jcol += nh { + jlen := min(nh, jbot-jcol+1) + bi.Dgemm(blas.Trans, blas.NoTrans, nu, jlen, nu, + 1, u[k0*ldu+k0:], ldu, + h[(incol+k0+1)*ldh+jcol:], ldh, + 0, wh, ldwh) + impl.Dlacpy(blas.All, nu, jlen, wh, ldwh, h[(incol+k0+1)*ldh+jcol:], ldh) + } + + // Vertical multiply. + for jrow := jtop; jrow <= max(ktop, incol)-1; jrow += nv { + jlen := min(nv, max(ktop, incol)-jrow) + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, nu, nu, + 1, h[jrow*ldh+incol+k0+1:], ldh, + u[k0*ldu+k0:], ldu, + 0, wv, ldwv) + impl.Dlacpy(blas.All, jlen, nu, wv, ldwv, h[jrow*ldh+incol+k0+1:], ldh) + } + + // Z multiply (also vertical). + if wantz { + for jrow := iloz; jrow <= ihiz; jrow += nv { + jlen := min(nv, ihiz-jrow+1) + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, nu, nu, + 1, z[jrow*ldz+incol+k0+1:], ldz, + u[k0*ldu+k0:], ldu, + 0, wv, ldwv) + impl.Dlacpy(blas.All, jlen, nu, wv, ldwv, z[jrow*ldz+incol+k0+1:], ldz) + } + } + + continue + } + + // Updates exploiting U's 2×2 block structure. + + // i2, i4, j2, j4 are the last rows and columns of the blocks. + i2 := (kdu + 1) / 2 + i4 := kdu + j2 := i4 - i2 + j4 := kdu + + // kzs and knz deal with the band of zeros along the diagonal of one of the + // triangular blocks. + kzs := (j4 - j2) - (ns + 1) + knz := ns + 1 + + // Horizontal multiply. + for jcol := min(ndcol, kbot) + 1; jcol <= jbot; jcol += nh { + jlen := min(nh, jbot-jcol+1) + + // Copy bottom of H to top+kzs of scratch (the first kzs + // rows get multiplied by zero). + impl.Dlacpy(blas.All, knz, jlen, h[(incol+1+j2)*ldh+jcol:], ldh, wh[kzs*ldwh:], ldwh) + + // Multiply by U21^T. + impl.Dlaset(blas.All, kzs, jlen, 0, 0, wh, ldwh) + bi.Dtrmm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, knz, jlen, + 1, u[j2*ldu+kzs:], ldu, wh[kzs*ldwh:], ldwh) + + // Multiply top of H by U11^T. + bi.Dgemm(blas.Trans, blas.NoTrans, i2, jlen, j2, + 1, u, ldu, h[(incol+1)*ldh+jcol:], ldh, + 1, wh, ldwh) + + // Copy top of H to bottom of WH. + impl.Dlacpy(blas.All, j2, jlen, h[(incol+1)*ldh+jcol:], ldh, wh[i2*ldwh:], ldwh) + + // Multiply by U21^T. + bi.Dtrmm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit, j2, jlen, + 1, u[i2:], ldu, wh[i2*ldwh:], ldwh) + + // Multiply by U22. + bi.Dgemm(blas.Trans, blas.NoTrans, i4-i2, jlen, j4-j2, + 1, u[j2*ldu+i2:], ldu, h[(incol+1+j2)*ldh+jcol:], ldh, + 1, wh[i2*ldwh:], ldwh) + + // Copy it back. + impl.Dlacpy(blas.All, kdu, jlen, wh, ldwh, h[(incol+1)*ldh+jcol:], ldh) + } + + // Vertical multiply. + for jrow := jtop; jrow <= max(incol, ktop)-1; jrow += nv { + jlen := min(nv, max(incol, ktop)-jrow) + + // Copy right of H to scratch (the first kzs columns get multiplied + // by zero). + impl.Dlacpy(blas.All, jlen, knz, h[jrow*ldh+incol+1+j2:], ldh, wv[kzs:], ldwv) + + // Multiply by U21. + impl.Dlaset(blas.All, jlen, kzs, 0, 0, wv, ldwv) + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.NonUnit, jlen, knz, + 1, u[j2*ldu+kzs:], ldu, wv[kzs:], ldwv) + + // Multiply by U11. + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, i2, j2, + 1, h[jrow*ldh+incol+1:], ldh, u, ldu, + 1, wv, ldwv) + + // Copy left of H to right of scratch. + impl.Dlacpy(blas.All, jlen, j2, h[jrow*ldh+incol+1:], ldh, wv[i2:], ldwv) + + // Multiply by U21. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.NonUnit, jlen, i4-i2, + 1, u[i2:], ldu, wv[i2:], ldwv) + + // Multiply by U22. + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, i4-i2, j4-j2, + 1, h[jrow*ldh+incol+1+j2:], ldh, u[j2*ldu+i2:], ldu, + 1, wv[i2:], ldwv) + + // Copy it back. + impl.Dlacpy(blas.All, jlen, kdu, wv, ldwv, h[jrow*ldh+incol+1:], ldh) + } + + if !wantz { + continue + } + // Multiply Z (also vertical). + for jrow := iloz; jrow <= ihiz; jrow += nv { + jlen := min(nv, ihiz-jrow+1) + + // Copy right of Z to left of scratch (first kzs columns get + // multiplied by zero). + impl.Dlacpy(blas.All, jlen, knz, z[jrow*ldz+incol+1+j2:], ldz, wv[kzs:], ldwv) + + // Multiply by U12. + impl.Dlaset(blas.All, jlen, kzs, 0, 0, wv, ldwv) + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.NonUnit, jlen, knz, + 1, u[j2*ldu+kzs:], ldu, wv[kzs:], ldwv) + + // Multiply by U11. + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, i2, j2, + 1, z[jrow*ldz+incol+1:], ldz, u, ldu, + 1, wv, ldwv) + + // Copy left of Z to right of scratch. + impl.Dlacpy(blas.All, jlen, j2, z[jrow*ldz+incol+1:], ldz, wv[i2:], ldwv) + + // Multiply by U21. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.NonUnit, jlen, i4-i2, + 1, u[i2:], ldu, wv[i2:], ldwv) + + // Multiply by U22. + bi.Dgemm(blas.NoTrans, blas.NoTrans, jlen, i4-i2, j4-j2, + 1, z[jrow*ldz+incol+1+j2:], ldz, u[j2*ldu+i2:], ldu, + 1, wv[i2:], ldwv) + + // Copy the result back to Z. + impl.Dlacpy(blas.All, jlen, kdu, wv, ldwv, z[jrow*ldz+incol+1:], ldz) + } + } +} diff --git a/lapack/native/dlarf.go b/lapack/native/dlarf.go new file mode 100644 index 00000000..d51b0149 --- /dev/null +++ b/lapack/native/dlarf.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlarf applies an elementary reflector to a general rectangular matrix c. +// This computes +// c = h * c if side == Left +// c = c * h if side == right +// where +// h = 1 - tau * v * v^T +// and c is an m * n matrix. +// +// work is temporary storage of length at least m if side == Left and at least +// n if side == Right. This function will panic if this length requirement is not met. +// +// Dlarf is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlarf(side blas.Side, m, n int, v []float64, incv int, tau float64, c []float64, ldc int, work []float64) { + applyleft := side == blas.Left + if (applyleft && len(work) < n) || (!applyleft && len(work) < m) { + panic(badWork) + } + checkMatrix(m, n, c, ldc) + + // v has length m if applyleft and n otherwise. + lenV := n + if applyleft { + lenV = m + } + + checkVector(lenV, v, incv) + + lastv := 0 // last non-zero element of v + lastc := 0 // last non-zero row/column of c + if tau != 0 { + var i int + if applyleft { + lastv = m - 1 + } else { + lastv = n - 1 + } + if incv > 0 { + i = lastv * incv + } + + // Look for the last non-zero row in v. + for lastv >= 0 && v[i] == 0 { + lastv-- + i -= incv + } + if applyleft { + // Scan for the last non-zero column in C[0:lastv, :] + lastc = impl.Iladlc(lastv+1, n, c, ldc) + } else { + // Scan for the last non-zero row in C[:, 0:lastv] + lastc = impl.Iladlr(m, lastv+1, c, ldc) + } + } + if lastv == -1 || lastc == -1 { + return + } + // Sometimes 1-indexing is nicer ... + bi := blas64.Implementation() + if applyleft { + // Form H * C + // w[0:lastc+1] = c[1:lastv+1, 1:lastc+1]^T * v[1:lastv+1,1] + bi.Dgemv(blas.Trans, lastv+1, lastc+1, 1, c, ldc, v, incv, 0, work, 1) + // c[0: lastv, 0: lastc] = c[...] - w[0:lastv, 1] * v[1:lastc, 1]^T + bi.Dger(lastv+1, lastc+1, -tau, v, incv, work, 1, c, ldc) + return + } + // Form C*H + // w[0:lastc+1,1] := c[0:lastc+1,0:lastv+1] * v[0:lastv+1,1] + bi.Dgemv(blas.NoTrans, lastc+1, lastv+1, 1, c, ldc, v, incv, 0, work, 1) + // c[0:lastc+1,0:lastv+1] = c[...] - w[0:lastc+1,0] * v[0:lastv+1,0]^T + bi.Dger(lastc+1, lastv+1, -tau, work, 1, v, incv, c, ldc) +} diff --git a/lapack/native/dlarfb.go b/lapack/native/dlarfb.go new file mode 100644 index 00000000..ed69abe4 --- /dev/null +++ b/lapack/native/dlarfb.go @@ -0,0 +1,431 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlarfb applies a block reflector to a matrix. +// +// In the call to Dlarfb, the mxn c is multiplied by the implicitly defined matrix h as follows: +// c = h * c if side == Left and trans == NoTrans +// c = c * h if side == Right and trans == NoTrans +// c = h^T * c if side == Left and trans == Trans +// c = c * h^T if side == Right and trans == Trans +// h is a product of elementary reflectors. direct sets the direction of multiplication +// h = h_1 * h_2 * ... * h_k if direct == Forward +// h = h_k * h_k-1 * ... * h_1 if direct == Backward +// The combination of direct and store defines the orientation of the elementary +// reflectors. In all cases the ones on the diagonal are implicitly represented. +// +// If direct == lapack.Forward and store == lapack.ColumnWise +// V = [ 1 ] +// [v1 1 ] +// [v1 v2 1] +// [v1 v2 v3] +// [v1 v2 v3] +// If direct == lapack.Forward and store == lapack.RowWise +// V = [ 1 v1 v1 v1 v1] +// [ 1 v2 v2 v2] +// [ 1 v3 v3] +// If direct == lapack.Backward and store == lapack.ColumnWise +// V = [v1 v2 v3] +// [v1 v2 v3] +// [ 1 v2 v3] +// [ 1 v3] +// [ 1] +// If direct == lapack.Backward and store == lapack.RowWise +// V = [v1 v1 1 ] +// [v2 v2 v2 1 ] +// [v3 v3 v3 v3 1] +// An elementary reflector can be explicitly constructed by extracting the +// corresponding elements of v, placing a 1 where the diagonal would be, and +// placing zeros in the remaining elements. +// +// t is a k×k matrix containing the block reflector, and this function will panic +// if t is not of sufficient size. See Dlarft for more information. +// +// work is a temporary storage matrix with stride ldwork. +// work must be of size at least n×k side == Left and m×k if side == Right, and +// this function will panic if this size is not met. +// +// Dlarfb is an internal routine. It is exported for testing purposes. +func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack.Direct, store lapack.StoreV, m, n, k int, v []float64, ldv int, t []float64, ldt int, c []float64, ldc int, work []float64, ldwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.ColumnWise && store != lapack.RowWise { + panic(badStore) + } + checkMatrix(m, n, c, ldc) + if k < 0 { + panic(kLT0) + } + checkMatrix(k, k, t, ldt) + nv := m + nw := n + if side == blas.Right { + nv = n + nw = m + } + if store == lapack.ColumnWise { + checkMatrix(nv, k, v, ldv) + } else { + checkMatrix(k, nv, v, ldv) + } + checkMatrix(nw, k, work, ldwork) + + if m == 0 || n == 0 { + return + } + + bi := blas64.Implementation() + + transt := blas.Trans + if trans == blas.Trans { + transt = blas.NoTrans + } + // TODO(btracey): This follows the original Lapack code where the + // elements are copied into the columns of the working array. The + // loops should go in the other direction so the data is written + // into the rows of work so the copy is not strided. A bigger change + // would be to replace work with work^T, but benchmarks would be + // needed to see if the change is merited. + if store == lapack.ColumnWise { + if direct == lapack.Forward { + // V1 is the first k rows of C. V2 is the remaining rows. + if side == blas.Left { + // W = C^T V = C1^T V1 + C2^T V2 (stored in work). + + // W = C1. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork) + } + // W = W * V1. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, + n, k, 1, + v, ldv, + work, ldwork) + if m > k { + // W = W + C2^T V2. + bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, + 1, c[k*ldc:], ldc, v[k*ldv:], ldv, + 1, work, ldwork) + } + // W = W * T^T or W * T. + bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V * W^T. + if m > k { + // C2 -= V2 * W^T. + bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, + -1, v[k*ldv:], ldv, work, ldwork, + 1, c[k*ldc:], ldc) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + // C1 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[j*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C = C * H or C * H^T, where C = (C1 C2). + + // W = C1. + for i := 0; i < k; i++ { + bi.Dcopy(m, c[i:], ldc, work[i:], ldwork) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, k, n-k, + 1, c[k:], ldc, v[k*ldv:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k, + -1, work, ldwork, v[k*ldv:], ldv, + 1, c[k:], ldc) + } + // C -= W * V^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + // C -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+j] -= work[i*ldwork+j] + } + } + return + } + // V = (V1) + // = (V2) (last k rows) + // Where V2 is unit upper triangular. + if side == blas.Left { + // Form H * C or + // W = C^T V. + + // W = C2^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k, + 1, v[(m-k)*ldv:], ldv, + work, ldwork) + if m > k { + // W += C1^T * V1. + bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V * W^T. + if m > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, + -1, v, ldv, work, ldwork, + 1, c, ldc) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, + 1, v[(m-k)*ldv:], ldv, + work, ldwork) + // C2 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[(m-k+j)*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V. + + // W = C2. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork) + } + + // W = W * V2. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, m, k, + 1, v[(n-k)*ldv:], ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, k, n-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V^T. + if n > k { + // C1 -= W * V1^T. + bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k, + -1, work, ldwork, v, ldv, + 1, c, ldc) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, + 1, v[(n-k)*ldv:], ldv, + work, ldwork) + // C2 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+n-k+j] -= work[i*ldwork+j] + } + } + return + } + // Store = Rowwise. + if direct == lapack.Forward { + // V = (V1 V2) where v1 is unit upper triangular. + if side == blas.Left { + // Form H * C or H^T * C where C = (C1; C2). + // W = C^T * V^T. + + // W = C1^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, n, k, m-k, + 1, c[k*ldc:], ldc, v[k:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V^T * W^T. + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, + -1, v[k:], ldv, work, ldwork, + 1, c[k*ldc:], ldc) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + // C1 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[j*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V^T. + + // W = C1. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[j:], ldc, work[j:], ldwork) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, k, n-k, + 1, c[k:], ldc, v[k:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V. + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n-k, k, + -1, work, ldwork, v[k:], ldv, + 1, c[k:], ldc) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + // C1 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+j] -= work[i*ldwork+j] + } + } + return + } + // V = (V1 V2) where V2 is the last k columns and is lower unit triangular. + if side == blas.Left { + // Form H * C or H^T C where C = (C1 ; C2). + // W = C^T * V^T. + + // W = C2^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, + 1, v[m-k:], ldv, + work, ldwork) + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, n, k, m-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V^T * W^T. + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, + -1, v, ldv, work, ldwork, + 1, c, ldc) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, n, k, + 1, v[m-k:], ldv, + work, ldwork) + // C2 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[(m-k+j)*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V^T. + // W = C2. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, + 1, v[n-k:], ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, k, n-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V. + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n-k, k, + -1, work, ldwork, v, ldv, + 1, c, ldc) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, m, k, + 1, v[n-k:], ldv, + work, ldwork) + // C1 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+n-k+j] -= work[i*ldwork+j] + } + } +} diff --git a/lapack/native/dlarfg.go b/lapack/native/dlarfg.go new file mode 100644 index 00000000..a12735b8 --- /dev/null +++ b/lapack/native/dlarfg.go @@ -0,0 +1,62 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dlarfg generates an elementary reflector for a Householder matrix. It creates +// a real elementary reflector of order n such that +// H * (alpha) = (beta) +// ( x) ( 0) +// H^T * H = I +// H is represented in the form +// H = 1 - tau * (1; v) * (1 v^T) +// where tau is a real scalar. +// +// On entry, x contains the vector x, on exit it contains v. +// +// Dlarfg is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlarfg(n int, alpha float64, x []float64, incX int) (beta, tau float64) { + if n < 0 { + panic(nLT0) + } + if n <= 1 { + return alpha, 0 + } + checkVector(n-1, x, incX) + bi := blas64.Implementation() + xnorm := bi.Dnrm2(n-1, x, incX) + if xnorm == 0 { + return alpha, 0 + } + beta = -math.Copysign(impl.Dlapy2(alpha, xnorm), alpha) + safmin := dlamchS / dlamchE + knt := 0 + if math.Abs(beta) < safmin { + // xnorm and beta may be inaccurate, scale x and recompute. + rsafmn := 1 / safmin + for { + knt++ + bi.Dscal(n-1, rsafmn, x, incX) + beta *= rsafmn + alpha *= rsafmn + if math.Abs(beta) >= safmin { + break + } + } + xnorm = bi.Dnrm2(n-1, x, incX) + beta = -math.Copysign(impl.Dlapy2(alpha, xnorm), alpha) + } + tau = (beta - alpha) / beta + bi.Dscal(n-1, 1/(alpha-beta), x, incX) + for j := 0; j < knt; j++ { + beta *= safmin + } + return beta, tau +} diff --git a/lapack/native/dlarft.go b/lapack/native/dlarft.go new file mode 100644 index 00000000..4a11c62f --- /dev/null +++ b/lapack/native/dlarft.go @@ -0,0 +1,150 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlarft forms the triangular factor T of a block reflector H, storing the answer +// in t. +// H = I - V * T * V^T if store == lapack.ColumnWise +// H = I - V^T * T * V if store == lapack.RowWise +// H is defined by a product of the elementary reflectors where +// H = H_0 * H_1 * ... * H_{k-1} if direct == lapack.Forward +// H = H_{k-1} * ... * H_1 * H_0 if direct == lapack.Backward +// +// t is a k×k triangular matrix. t is upper triangular if direct = lapack.Forward +// and lower triangular otherwise. This function will panic if t is not of +// sufficient size. +// +// store describes the storage of the elementary reflectors in v. Please see +// Dlarfb for a description of layout. +// +// tau contains the scalar factors of the elementary reflectors H_i. +// +// Dlarft is an internal routine. It is exported for testing purposes. +func (Implementation) Dlarft(direct lapack.Direct, store lapack.StoreV, n, k int, + v []float64, ldv int, tau []float64, t []float64, ldt int) { + if n == 0 { + return + } + if n < 0 || k < 0 { + panic(negDimension) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.RowWise && store != lapack.ColumnWise { + panic(badStore) + } + if len(tau) < k { + panic(badTau) + } + checkMatrix(k, k, t, ldt) + bi := blas64.Implementation() + // TODO(btracey): There are a number of minor obvious loop optimizations here. + // TODO(btracey): It may be possible to rearrange some of the code so that + // index of 1 is more common in the Dgemv. + if direct == lapack.Forward { + prevlastv := n - 1 + for i := 0; i < k; i++ { + prevlastv = max(i, prevlastv) + if tau[i] == 0 { + for j := 0; j <= i; j++ { + t[j*ldt+i] = 0 + } + continue + } + var lastv int + if store == lapack.ColumnWise { + // skip trailing zeros + for lastv = n - 1; lastv >= i+1; lastv-- { + if v[lastv*ldv+i] != 0 { + break + } + } + for j := 0; j < i; j++ { + t[j*ldt+i] = -tau[i] * v[i*ldv+j] + } + j := min(lastv, prevlastv) + bi.Dgemv(blas.Trans, j-i, i, + -tau[i], v[(i+1)*ldv:], ldv, v[(i+1)*ldv+i:], ldv, + 1, t[i:], ldt) + } else { + for lastv = n - 1; lastv >= i+1; lastv-- { + if v[i*ldv+lastv] != 0 { + break + } + } + for j := 0; j < i; j++ { + t[j*ldt+i] = -tau[i] * v[j*ldv+i] + } + j := min(lastv, prevlastv) + bi.Dgemv(blas.NoTrans, i, j-i, + -tau[i], v[i+1:], ldv, v[i*ldv+i+1:], 1, + 1, t[i:], ldt) + } + bi.Dtrmv(blas.Upper, blas.NoTrans, blas.NonUnit, i, t, ldt, t[i:], ldt) + t[i*ldt+i] = tau[i] + if i > 1 { + prevlastv = max(prevlastv, lastv) + } else { + prevlastv = lastv + } + } + return + } + prevlastv := 0 + for i := k - 1; i >= 0; i-- { + if tau[i] == 0 { + for j := i; j < k; j++ { + t[j*ldt+i] = 0 + } + continue + } + var lastv int + if i < k-1 { + if store == lapack.ColumnWise { + for lastv = 0; lastv < i; lastv++ { + if v[lastv*ldv+i] != 0 { + break + } + } + for j := i + 1; j < k; j++ { + t[j*ldt+i] = -tau[i] * v[(n-k+i)*ldv+j] + } + j := max(lastv, prevlastv) + bi.Dgemv(blas.Trans, n-k+i-j, k-i-1, + -tau[i], v[j*ldv+i+1:], ldv, v[j*ldv+i:], ldv, + 1, t[(i+1)*ldt+i:], ldt) + } else { + for lastv = 0; lastv < i; lastv++ { + if v[i*ldv+lastv] != 0 { + break + } + } + for j := i + 1; j < k; j++ { + t[j*ldt+i] = -tau[i] * v[j*ldv+n-k+i] + } + j := max(lastv, prevlastv) + bi.Dgemv(blas.NoTrans, k-i-1, n-k+i-j, + -tau[i], v[(i+1)*ldv+j:], ldv, v[i*ldv+j:], 1, + 1, t[(i+1)*ldt+i:], ldt) + } + bi.Dtrmv(blas.Lower, blas.NoTrans, blas.NonUnit, k-i-1, + t[(i+1)*ldt+i+1:], ldt, + t[(i+1)*ldt+i:], ldt) + if i > 0 { + prevlastv = min(prevlastv, lastv) + } else { + prevlastv = lastv + } + } + t[i*ldt+i] = tau[i] + } +} diff --git a/lapack/native/dlarfx.go b/lapack/native/dlarfx.go new file mode 100644 index 00000000..b730be65 --- /dev/null +++ b/lapack/native/dlarfx.go @@ -0,0 +1,535 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dlarfx applies an elementary reflector H to a real m×n matrix C, from either +// the left or the right, with loop unrolling when the reflector has order less +// than 11. +// +// H is represented in the form +// H = I - tau * v * v^T, +// where tau is a real scalar and v is a real vector. If tau = 0, then H is +// taken to be the identity matrix. +// +// v must have length equal to m if side == blas.Left, and equal to n if side == +// blas.Right, otherwise Dlarfx will panic. +// +// c and ldc represent the m×n matrix C. On return, C is overwritten by the +// matrix H * C if side == blas.Left, or C * H if side == blas.Right. +// +// work must have length at least n if side == blas.Left, and at least m if side +// == blas.Right, otherwise Dlarfx will panic. work is not referenced if H has +// order < 11. +// +// Dlarfx is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlarfx(side blas.Side, m, n int, v []float64, tau float64, c []float64, ldc int, work []float64) { + checkMatrix(m, n, c, ldc) + switch side { + case blas.Left: + checkVector(m, v, 1) + if m > 10 && len(work) < n { + panic(badWork) + } + case blas.Right: + checkVector(n, v, 1) + if n > 10 && len(work) < m { + panic(badWork) + } + default: + panic(badSide) + } + + if tau == 0 { + return + } + + if side == blas.Left { + // Form H * C, where H has order m. + switch m { + default: // Code for general m. + impl.Dlarf(side, m, n, v, 1, tau, c, ldc, work) + return + + case 0: // No-op for zero size matrix. + return + + case 1: // Special code for 1×1 Householder matrix. + t0 := 1 - tau*v[0]*v[0] + for j := 0; j < n; j++ { + c[j] *= t0 + } + return + + case 2: // Special code for 2×2 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + } + return + + case 3: // Special code for 3×3 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + } + return + + case 4: // Special code for 4×4 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + } + return + + case 5: // Special code for 5×5 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + } + return + + case 6: // Special code for 6×6 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + + v5*c[5*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + c[5*ldc+j] -= sum * t5 + } + return + + case 7: // Special code for 7×7 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + + v5*c[5*ldc+j] + v6*c[6*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + c[5*ldc+j] -= sum * t5 + c[6*ldc+j] -= sum * t6 + } + return + + case 8: // Special code for 8×8 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + + v5*c[5*ldc+j] + v6*c[6*ldc+j] + v7*c[7*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + c[5*ldc+j] -= sum * t5 + c[6*ldc+j] -= sum * t6 + c[7*ldc+j] -= sum * t7 + } + return + + case 9: // Special code for 9×9 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + v8 := v[8] + t8 := tau * v8 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + + v5*c[5*ldc+j] + v6*c[6*ldc+j] + v7*c[7*ldc+j] + v8*c[8*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + c[5*ldc+j] -= sum * t5 + c[6*ldc+j] -= sum * t6 + c[7*ldc+j] -= sum * t7 + c[8*ldc+j] -= sum * t8 + } + return + + case 10: // Special code for 10×10 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + v8 := v[8] + t8 := tau * v8 + v9 := v[9] + t9 := tau * v9 + for j := 0; j < n; j++ { + sum := v0*c[j] + v1*c[ldc+j] + v2*c[2*ldc+j] + v3*c[3*ldc+j] + v4*c[4*ldc+j] + + v5*c[5*ldc+j] + v6*c[6*ldc+j] + v7*c[7*ldc+j] + v8*c[8*ldc+j] + v9*c[9*ldc+j] + c[j] -= sum * t0 + c[ldc+j] -= sum * t1 + c[2*ldc+j] -= sum * t2 + c[3*ldc+j] -= sum * t3 + c[4*ldc+j] -= sum * t4 + c[5*ldc+j] -= sum * t5 + c[6*ldc+j] -= sum * t6 + c[7*ldc+j] -= sum * t7 + c[8*ldc+j] -= sum * t8 + c[9*ldc+j] -= sum * t9 + } + return + } + } + + // Form C * H, where H has order n. + switch n { + default: // Code for general n. + impl.Dlarf(side, m, n, v, 1, tau, c, ldc, work) + return + + case 0: // No-op for zero size matrix. + return + + case 1: // Special code for 1×1 Householder matrix. + t0 := 1 - tau*v[0]*v[0] + for j := 0; j < m; j++ { + c[j*ldc] *= t0 + } + return + + case 2: // Special code for 2×2 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + } + return + + case 3: // Special code for 3×3 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + } + return + + case 4: // Special code for 4×4 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + } + return + + case 5: // Special code for 5×5 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + } + return + + case 6: // Special code for 6×6 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + v5*cs[5] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + cs[5] -= sum * t5 + } + return + + case 7: // Special code for 7×7 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + + v5*cs[5] + v6*cs[6] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + cs[5] -= sum * t5 + cs[6] -= sum * t6 + } + return + + case 8: // Special code for 8×8 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + + v5*cs[5] + v6*cs[6] + v7*cs[7] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + cs[5] -= sum * t5 + cs[6] -= sum * t6 + cs[7] -= sum * t7 + } + return + + case 9: // Special code for 9×9 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + v8 := v[8] + t8 := tau * v8 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + + v5*cs[5] + v6*cs[6] + v7*cs[7] + v8*cs[8] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + cs[5] -= sum * t5 + cs[6] -= sum * t6 + cs[7] -= sum * t7 + cs[8] -= sum * t8 + } + return + + case 10: // Special code for 10×10 Householder matrix. + v0 := v[0] + t0 := tau * v0 + v1 := v[1] + t1 := tau * v1 + v2 := v[2] + t2 := tau * v2 + v3 := v[3] + t3 := tau * v3 + v4 := v[4] + t4 := tau * v4 + v5 := v[5] + t5 := tau * v5 + v6 := v[6] + t6 := tau * v6 + v7 := v[7] + t7 := tau * v7 + v8 := v[8] + t8 := tau * v8 + v9 := v[9] + t9 := tau * v9 + for j := 0; j < m; j++ { + cs := c[j*ldc:] + sum := v0*cs[0] + v1*cs[1] + v2*cs[2] + v3*cs[3] + v4*cs[4] + + v5*cs[5] + v6*cs[6] + v7*cs[7] + v8*cs[8] + v9*cs[9] + cs[0] -= sum * t0 + cs[1] -= sum * t1 + cs[2] -= sum * t2 + cs[3] -= sum * t3 + cs[4] -= sum * t4 + cs[5] -= sum * t5 + cs[6] -= sum * t6 + cs[7] -= sum * t7 + cs[8] -= sum * t8 + cs[9] -= sum * t9 + } + return + } +} diff --git a/lapack/native/dlartg.go b/lapack/native/dlartg.go new file mode 100644 index 00000000..2b0e324d --- /dev/null +++ b/lapack/native/dlartg.go @@ -0,0 +1,80 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlartg generates a plane rotation so that +// [ cs sn] * [f] = [r] +// [-sn cs] [g] = [0] +// This is a more accurate version of BLAS drotg, with the other differences that +// if g = 0, then cs = 1 and sn = 0, and if f = 0 and g != 0, then cs = 0 and sn = 1. +// If abs(f) > abs(g), cs will be positive. +// +// Dlartg is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlartg(f, g float64) (cs, sn, r float64) { + safmn2 := math.Pow(dlamchB, math.Trunc(math.Log(dlamchS/dlamchE)/math.Log(dlamchB)/2)) + safmx2 := 1 / safmn2 + if g == 0 { + cs = 1 + sn = 0 + r = f + return cs, sn, r + } + if f == 0 { + cs = 0 + sn = 1 + r = g + return cs, sn, r + } + f1 := f + g1 := g + scale := math.Max(math.Abs(f1), math.Abs(g1)) + if scale >= safmx2 { + var count int + for { + count++ + f1 *= safmn2 + g1 *= safmn2 + scale = math.Max(math.Abs(f1), math.Abs(g1)) + if scale < safmx2 { + break + } + } + r = math.Sqrt(f1*f1 + g1*g1) + cs = f1 / r + sn = g1 / r + for i := 0; i < count; i++ { + r *= safmx2 + } + } else if scale <= safmn2 { + var count int + for { + count++ + f1 *= safmx2 + g1 *= safmx2 + scale = math.Max(math.Abs(f1), math.Abs(g1)) + if scale >= safmn2 { + break + } + } + r = math.Sqrt(f1*f1 + g1*g1) + cs = f1 / r + sn = g1 / r + for i := 0; i < count; i++ { + r *= safmn2 + } + } else { + r = math.Sqrt(f1*f1 + g1*g1) + cs = f1 / r + sn = g1 / r + } + if math.Abs(f) > math.Abs(g) && cs < 0 { + cs *= -1 + sn *= -1 + r *= -1 + } + return cs, sn, r +} diff --git a/lapack/native/dlas2.go b/lapack/native/dlas2.go new file mode 100644 index 00000000..ee37bec1 --- /dev/null +++ b/lapack/native/dlas2.go @@ -0,0 +1,43 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlas2 computes the singular values of the 2×2 matrix defined by +// [F G] +// [0 H] +// The smaller and larger singular values are returned in that order. +// +// Dlas2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlas2(f, g, h float64) (ssmin, ssmax float64) { + fa := math.Abs(f) + ga := math.Abs(g) + ha := math.Abs(h) + fhmin := math.Min(fa, ha) + fhmax := math.Max(fa, ha) + if fhmin == 0 { + if fhmax == 0 { + return 0, ga + } + v := math.Min(fhmax, ga) / math.Max(fhmax, ga) + return 0, math.Max(fhmax, ga) * math.Sqrt(1+v*v) + } + if ga < fhmax { + as := 1 + fhmin/fhmax + at := (fhmax - fhmin) / fhmax + au := (ga / fhmax) * (ga / fhmax) + c := 2 / (math.Sqrt(as*as+au) + math.Sqrt(at*at+au)) + return fhmin * c, fhmax / c + } + au := fhmax / ga + if au == 0 { + return fhmin * fhmax / ga, ga + } + as := 1 + fhmin/fhmax + at := (fhmax - fhmin) / fhmax + c := 1 / (math.Sqrt(1+(as*au)*(as*au)) + math.Sqrt(1+(at*au)*(at*au))) + return 2 * (fhmin * c) * au, ga / (c + c) +} diff --git a/lapack/native/dlascl.go b/lapack/native/dlascl.go new file mode 100644 index 00000000..2c130e8b --- /dev/null +++ b/lapack/native/dlascl.go @@ -0,0 +1,89 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlascl multiplies an m×n matrix by the scalar cto/cfrom. +// +// cfrom must not be zero, and cto and cfrom must not be NaN, otherwise Dlascl +// will panic. +// +// Dlascl is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlascl(kind lapack.MatrixType, kl, ku int, cfrom, cto float64, m, n int, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if cfrom == 0 { + panic(zeroDiv) + } + if math.IsNaN(cfrom) || math.IsNaN(cto) { + panic(nanScale) + } + if n == 0 || m == 0 { + return + } + smlnum := dlamchS + bignum := 1 / smlnum + cfromc := cfrom + ctoc := cto + cfrom1 := cfromc * smlnum + for { + var done bool + var mul, ctol float64 + if cfrom1 == cfromc { + // cfromc is inf. + mul = ctoc / cfromc + done = true + ctol = ctoc + } else { + ctol = ctoc / bignum + if ctol == ctoc { + // ctoc is either 0 or inf. + mul = ctoc + done = true + cfromc = 1 + } else if math.Abs(cfrom1) > math.Abs(ctoc) && ctoc != 0 { + mul = smlnum + done = false + cfromc = cfrom1 + } else if math.Abs(ctol) > math.Abs(cfromc) { + mul = bignum + done = false + ctoc = ctol + } else { + mul = ctoc / cfromc + done = true + } + } + switch kind { + default: + panic("lapack: not implemented") + case lapack.General: + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = a[i*lda+j] * mul + } + } + case lapack.UpperTri: + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + a[i*lda+j] = a[i*lda+j] * mul + } + } + case lapack.LowerTri: + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + a[i*lda+j] = a[i*lda+j] * mul + } + } + } + if done { + break + } + } +} diff --git a/lapack/native/dlaset.go b/lapack/native/dlaset.go new file mode 100644 index 00000000..2781ad56 --- /dev/null +++ b/lapack/native/dlaset.go @@ -0,0 +1,40 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dlaset sets the off-diagonal elements of A to alpha, and the diagonal +// elements to beta. If uplo == blas.Upper, only the elements in the upper +// triangular part are set. If uplo == blas.Lower, only the elements in the +// lower triangular part are set. If uplo is otherwise, all of the elements of A +// are set. +// +// Dlaset is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaset(uplo blas.Uplo, m, n int, alpha, beta float64, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + a[i*lda+j] = alpha + } + } + } else if uplo == blas.Lower { + for i := 0; i < m; i++ { + for j := 0; j < min(i+1, n); j++ { + a[i*lda+j] = alpha + } + } + } else { + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = alpha + } + } + } + for i := 0; i < min(m, n); i++ { + a[i*lda+i] = beta + } +} diff --git a/lapack/native/dlasq1.go b/lapack/native/dlasq1.go new file mode 100644 index 00000000..d10d3d5c --- /dev/null +++ b/lapack/native/dlasq1.go @@ -0,0 +1,97 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlasq1 computes the singular values of an n×n bidiagonal matrix with diagonal +// d and off-diagonal e. On exit, d contains the singular values in decreasing +// order, and e is overwritten. d must have length at least n, e must have +// length at least n-1, and the input work must have length at least 4*n. Dlasq1 +// will panic if these conditions are not met. +// +// Dlasq1 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq1(n int, d, e, work []float64) (info int) { + // TODO(btracey): replace info with an error. + if n < 0 { + panic(nLT0) + } + if len(work) < 4*n { + panic(badWork) + } + if len(d) < n { + panic("lapack: length of d less than n") + } + if len(e) < n-1 { + panic("lapack: length of e less than n-1") + } + if n == 0 { + return info + } + if n == 1 { + d[0] = math.Abs(d[0]) + return info + } + if n == 2 { + d[1], d[0] = impl.Dlas2(d[0], e[0], d[1]) + return info + } + // Estimate the largest singular value. + var sigmx float64 + for i := 0; i < n-1; i++ { + d[i] = math.Abs(d[i]) + sigmx = math.Max(sigmx, math.Abs(e[i])) + } + d[n-1] = math.Abs(d[n-1]) + // Early return if sigmx is zero (matrix is already diagonal). + if sigmx == 0 { + impl.Dlasrt(lapack.SortDecreasing, n, d) + return info + } + + for i := 0; i < n; i++ { + sigmx = math.Max(sigmx, d[i]) + } + + // Copy D and E into WORK (in the Z format) and scale (squaring the + // input data makes scaling by a power of the radix pointless). + + eps := dlamchP + safmin := dlamchS + scale := math.Sqrt(eps / safmin) + bi := blas64.Implementation() + bi.Dcopy(n, d, 1, work, 2) + bi.Dcopy(n-1, e, 1, work[1:], 2) + impl.Dlascl(lapack.General, 0, 0, sigmx, scale, 2*n-1, 1, work, 1) + + // Compute the q's and e's. + for i := 0; i < 2*n-1; i++ { + work[i] *= work[i] + } + work[2*n-1] = 0 + + info = impl.Dlasq2(n, work) + if info == 0 { + for i := 0; i < n; i++ { + d[i] = math.Sqrt(work[i]) + } + impl.Dlascl(lapack.General, 0, 0, scale, sigmx, n, 1, d, 1) + } else if info == 2 { + // Maximum number of iterations exceeded. Move data from work + // into D and E so the calling subroutine can try to finish. + for i := 0; i < n; i++ { + d[i] = math.Sqrt(work[2*i]) + e[i] = math.Sqrt(work[2*i+1]) + } + impl.Dlascl(lapack.General, 0, 0, scale, sigmx, n, 1, d, 1) + impl.Dlascl(lapack.General, 0, 0, scale, sigmx, n, 1, e, 1) + } + return info +} diff --git a/lapack/native/dlasq2.go b/lapack/native/dlasq2.go new file mode 100644 index 00000000..07ee0ecf --- /dev/null +++ b/lapack/native/dlasq2.go @@ -0,0 +1,370 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlasq2 computes all the eigenvalues of the symmetric positive +// definite tridiagonal matrix associated with the qd array Z. Eigevalues +// are computed to high relative accuracy avoiding denormalization, underflow +// and overflow. +// +// To see the relation of Z to the tridiagonal matrix, let L be a +// unit lower bidiagonal matrix with sub-diagonals Z(2,4,6,,..) and +// let U be an upper bidiagonal matrix with 1's above and diagonal +// Z(1,3,5,,..). The tridiagonal is L*U or, if you prefer, the +// symmetric tridiagonal to which it is similar. +// +// info returns a status error. The return codes mean as follows: +// 0: The algorithm completed successfully. +// 1: A split was marked by a positive value in e. +// 2: Current block of Z not diagonalized after 100*n iterations (in inner +// while loop). On exit Z holds a qd array with the same eigenvalues as +// the given Z. +// 3: Termination criterion of outer while loop not met (program created more +// than N unreduced blocks). +// +// z must have length at least 4*n, and must not contain any negative elements. +// Dlasq2 will panic otherwise. +// +// Dlasq2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq2(n int, z []float64) (info int) { + // TODO(btracey): make info an error. + if len(z) < 4*n { + panic(badZ) + } + const cbias = 1.5 + + eps := dlamchP + safmin := dlamchS + tol := eps * 100 + tol2 := tol * tol + if n < 0 { + panic(nLT0) + } + if n == 0 { + return info + } + if n == 1 { + if z[0] < 0 { + panic(negZ) + } + return info + } + if n == 2 { + if z[1] < 0 || z[2] < 0 { + panic("lapack: bad z value") + } else if z[2] > z[0] { + z[0], z[2] = z[2], z[0] + } + z[4] = z[0] + z[1] + z[2] + if z[1] > z[2]*tol2 { + t := 0.5 * (z[0] - z[2] + z[1]) + s := z[2] * (z[1] / t) + if s <= t { + s = z[2] * (z[1] / (t * (1 + math.Sqrt(1+s/t)))) + } else { + s = z[2] * (z[1] / (t + math.Sqrt(t)*math.Sqrt(t+s))) + } + t = z[0] + s + z[1] + z[2] *= z[0] / t + z[0] = t + } + z[1] = z[2] + z[5] = z[1] + z[0] + return info + } + // Check for negative data and compute sums of q's and e's. + z[2*n-1] = 0 + emin := z[1] + var d, e, qmax, zmax float64 + var i1, n1 int + for k := 0; k < 2*(n-1); k += 2 { + if z[k] < 0 || z[k+1] < 0 { + panic("lapack: bad z value") + } + d += z[k] + e += z[k+1] + qmax = math.Max(qmax, z[k]) + emin = math.Min(emin, z[k+1]) + zmax = math.Max(math.Max(qmax, zmax), z[k+1]) + } + if z[2*(n-1)] < 0 { + panic("lapack: bad z value") + } + d += z[2*(n-1)] + qmax = math.Max(qmax, z[2*(n-1)]) + zmax = math.Max(qmax, zmax) + // Check for diagonality. + if e == 0 { + for k := 1; k < n; k++ { + z[k] = z[2*k] + } + impl.Dlasrt(lapack.SortDecreasing, n, z) + z[2*(n-1)] = d + return info + } + trace := d + e + // Check for zero data. + if trace == 0 { + z[2*(n-1)] = 0 + return info + } + // Rearrange data for locality: Z=(q1,qq1,e1,ee1,q2,qq2,e2,ee2,...). + for k := 2 * n; k >= 2; k -= 2 { + z[2*k-1] = 0 + z[2*k-2] = z[k-1] + z[2*k-3] = 0 + z[2*k-4] = z[k-2] + } + i0 := 0 + n0 := n - 1 + + // Reverse the qd-array, if warranted. + // z[4*i0-3] --> z[4*(i0+1)-3-1] --> z[4*i0] + if cbias*z[4*i0] < z[4*n0] { + ipn4Out := 4 * (i0 + n0 + 2) + for i4loop := 4 * (i0 + 1); i4loop <= 2*(i0+n0+1); i4loop += 4 { + i4 := i4loop - 1 + ipn4 := ipn4Out - 1 + z[i4-3], z[ipn4-i4-4] = z[ipn4-i4-4], z[i4-3] + z[i4-1], z[ipn4-i4-6] = z[ipn4-i4-6], z[i4-1] + } + } + + // Initial split checking via dqd and Li's test. + pp := 0 + for k := 0; k < 2; k++ { + d = z[4*n0+pp] + for i4loop := 4*n0 + pp; i4loop >= 4*(i0+1)+pp; i4loop -= 4 { + i4 := i4loop - 1 + if z[i4-1] <= tol2*d { + z[i4-1] = math.Copysign(0, -1) + d = z[i4-3] + } else { + d = z[i4-3] * (d / (d + z[i4-1])) + } + } + // dqd maps Z to ZZ plus Li's test. + emin = z[4*(i0+1)+pp] + d = z[4*i0+pp] + for i4loop := 4*(i0+1) + pp; i4loop <= 4*n0+pp; i4loop += 4 { + i4 := i4loop - 1 + z[i4-2*pp-2] = d + z[i4-1] + if z[i4-1] <= tol2*d { + z[i4-1] = math.Copysign(0, -1) + z[i4-2*pp-2] = d + z[i4-2*pp] = 0 + d = z[i4+1] + } else if safmin*z[i4+1] < z[i4-2*pp-2] && safmin*z[i4-2*pp-2] < z[i4+1] { + tmp := z[i4+1] / z[i4-2*pp-2] + z[i4-2*pp] = z[i4-1] * tmp + d *= tmp + } else { + z[i4-2*pp] = z[i4+1] * (z[i4-1] / z[i4-2*pp-2]) + d = z[i4+1] * (d / z[i4-2*pp-2]) + } + emin = math.Min(emin, z[i4-2*pp]) + } + z[4*(n0+1)-pp-3] = d + + // Now find qmax. + qmax = z[4*(i0+1)-pp-3] + for i4loop := 4*(i0+1) - pp + 2; i4loop <= 4*(n0+1)+pp-2; i4loop += 4 { + i4 := i4loop - 1 + qmax = math.Max(qmax, z[i4]) + } + // Prepare for the next iteration on K. + pp = 1 - pp + } + + // Initialise variables to pass to DLASQ3. + var ttype int + var dmin1, dmin2, dn, dn1, dn2, g, tau float64 + var tempq float64 + iter := 2 + var nFail int + nDiv := 2 * (n0 - i0) + var i4 int +outer: + for iwhila := 1; iwhila <= n+1; iwhila++ { + // Test for completion. + if n0 < 0 { + // Move q's to the front. + for k := 1; k < n; k++ { + z[k] = z[4*k] + } + // Sort and compute sum of eigenvalues. + impl.Dlasrt(lapack.SortDecreasing, n, z) + e = 0 + for k := n - 1; k >= 0; k-- { + e += z[k] + } + // Store trace, sum(eigenvalues) and information on performance. + z[2*n] = trace + z[2*n+1] = e + z[2*n+2] = float64(iter) + z[2*n+3] = float64(nDiv) / float64(n*n) + z[2*n+4] = 100 * float64(nFail) / float64(iter) + return info + } + + // While array unfinished do + // e[n0] holds the value of sigma when submatrix in i0:n0 + // splits from the rest of the array, but is negated. + var desig float64 + var sigma float64 + if n0 != n-1 { + sigma = -z[4*(n0+1)-2] + } + if sigma < 0 { + info = 1 + return info + } + // Find last unreduced submatrix's top index i0, find qmax and + // emin. Find Gershgorin-type bound if Q's much greater than E's. + var emax float64 + if n0 > i0 { + emin = math.Abs(z[4*(n0+1)-6]) + } else { + emin = 0 + } + qmin := z[4*(n0+1)-4] + qmax = qmin + zSmall := false + for i4loop := 4 * (n0 + 1); i4loop >= 8; i4loop -= 4 { + i4 = i4loop - 1 + if z[i4-5] <= 0 { + zSmall = true + break + } + if qmin >= 4*emax { + qmin = math.Min(qmin, z[i4-3]) + emax = math.Max(emax, z[i4-5]) + } + qmax = math.Max(qmax, z[i4-7]+z[i4-5]) + emin = math.Min(emin, z[i4-5]) + } + if !zSmall { + i4 = 3 + } + i0 = (i4+1)/4 - 1 + pp = 0 + if n0-i0 > 1 { + dee := z[4*i0] + deemin := dee + kmin := i0 + for i4loop := 4*(i0+1) + 1; i4loop <= 4*(n0+1)-3; i4loop += 4 { + i4 := i4loop - 1 + dee = z[i4] * (dee / (dee + z[i4-2])) + if dee <= deemin { + deemin = dee + kmin = (i4+4)/4 - 1 + } + } + if (kmin-i0)*2 < n0-kmin && deemin <= 0.5*z[4*n0] { + ipn4Out := 4 * (i0 + n0 + 2) + pp = 2 + for i4loop := 4 * (i0 + 1); i4loop <= 2*(i0+n0+1); i4loop += 4 { + i4 := i4loop - 1 + ipn4 := ipn4Out - 1 + z[i4-3], z[ipn4-i4-4] = z[ipn4-i4-4], z[i4-3] + z[i4-2], z[ipn4-i4-3] = z[ipn4-i4-3], z[i4-2] + z[i4-1], z[ipn4-i4-6] = z[ipn4-i4-6], z[i4-1] + z[i4], z[ipn4-i4-5] = z[ipn4-i4-5], z[i4] + } + } + } + // Put -(initial shift) into DMIN. + dmin := -math.Max(0, qmin-2*math.Sqrt(qmin)*math.Sqrt(emax)) + + // Now i0:n0 is unreduced. + // PP = 0 for ping, PP = 1 for pong. + // PP = 2 indicates that flipping was applied to the Z array and + // and that the tests for deflation upon entry in Dlasq3 + // should not be performed. + nbig := 100 * (n0 - i0 + 1) + for iwhilb := 0; iwhilb < nbig; iwhilb++ { + if i0 > n0 { + continue outer + } + + // While submatrix unfinished take a good dqds step. + i0, n0, pp, dmin, sigma, desig, qmax, nFail, iter, nDiv, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau = + impl.Dlasq3(i0, n0, z, pp, dmin, sigma, desig, qmax, nFail, iter, nDiv, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau) + + pp = 1 - pp + // When emin is very small check for splits. + if pp == 0 && n0-i0 >= 3 { + if z[4*(n0+1)-1] <= tol2*qmax || z[4*(n0+1)-2] <= tol2*sigma { + splt := i0 - 1 + qmax = z[4*i0] + emin = z[4*(i0+1)-2] + oldemn := z[4*(i0+1)-1] + for i4loop := 4 * (i0 + 1); i4loop <= 4*(n0-2); i4loop += 4 { + i4 := i4loop - 1 + if z[i4] <= tol2*z[i4-3] || z[i4-1] <= tol2*sigma { + z[i4-1] = -sigma + splt = i4 / 4 + qmax = 0 + emin = z[i4+3] + oldemn = z[i4+4] + } else { + qmax = math.Max(qmax, z[i4+1]) + emin = math.Min(emin, z[i4-1]) + oldemn = math.Min(oldemn, z[i4]) + } + } + z[4*(n0+1)-2] = emin + z[4*(n0+1)-1] = oldemn + i0 = splt + 1 + } + } + } + // Maximum number of iterations exceeded, restore the shift + // sigma and place the new d's and e's in a qd array. + // This might need to be done for several blocks. + info = 2 + i1 = i0 + n1 = n0 + for { + tempq = z[4*i0] + z[4*i0] += sigma + for k := i0 + 1; k <= n0; k++ { + tempe := z[4*(k+1)-6] + z[4*(k+1)-6] *= tempq / z[4*(k+1)-8] + tempq = z[4*k] + z[4*k] += sigma + tempe - z[4*(k+1)-6] + } + // Prepare to do this on the previous block if there is one. + if i1 <= 0 { + break + } + n1 = i1 - 1 + for i1 >= 1 && z[4*(i1+1)-6] >= 0 { + i1 -= 1 + } + sigma = -z[4*(n1+1)-2] + } + for k := 0; k < n; k++ { + z[2*k] = z[4*k] + // Only the block 1..N0 is unfinished. The rest of the e's + // must be essentially zero, although sometimes other data + // has been stored in them. + if k < n0 { + z[2*(k+1)-1] = z[4*(k+1)-1] + } else { + z[2*(k+1)] = 0 + } + } + return info + } + info = 3 + return info +} diff --git a/lapack/native/dlasq3.go b/lapack/native/dlasq3.go new file mode 100644 index 00000000..236671f2 --- /dev/null +++ b/lapack/native/dlasq3.go @@ -0,0 +1,161 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlasq3 checks for deflation, computes a shift (tau) and calls dqds. +// In case of failure it changes shifts, and tries again until output +// is positive. +// +// Dlasq3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq3(i0, n0 int, z []float64, pp int, dmin, sigma, desig, qmax float64, nFail, iter, nDiv int, ttype int, dmin1, dmin2, dn, dn1, dn2, g, tau float64) ( + i0Out, n0Out, ppOut int, dminOut, sigmaOut, desigOut, qmaxOut float64, nFailOut, iterOut, nDivOut, ttypeOut int, dmin1Out, dmin2Out, dnOut, dn1Out, dn2Out, gOut, tauOut float64) { + const cbias = 1.5 + + n0in := n0 + eps := dlamchP + tol := eps * 100 + tol2 := tol * tol + var nn int + var t float64 + for { + if n0 < i0 { + return i0, n0, pp, dmin, sigma, desig, qmax, nFail, iter, nDiv, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau + } + if n0 == i0 { + z[4*(n0+1)-4] = z[4*(n0+1)+pp-4] + sigma + n0-- + continue + } + nn = 4*(n0+1) + pp - 1 + if n0 != i0+1 { + // Check whether e[n0-1] is negligible, 1 eigenvalue. + if z[nn-5] > tol2*(sigma+z[nn-3]) && z[nn-2*pp-4] > tol2*z[nn-7] { + // Check whether e[n0-2] is negligible, 2 eigenvalues. + if z[nn-9] > tol2*sigma && z[nn-2*pp-8] > tol2*z[nn-11] { + break + } + } else { + z[4*(n0+1)-4] = z[4*(n0+1)+pp-4] + sigma + n0-- + continue + } + } + if z[nn-3] > z[nn-7] { + z[nn-3], z[nn-7] = z[nn-7], z[nn-3] + } + t = 0.5 * (z[nn-7] - z[nn-3] + z[nn-5]) + if z[nn-5] > z[nn-3]*tol2 && t != 0 { + s := z[nn-3] * (z[nn-5] / t) + if s <= t { + s = z[nn-3] * (z[nn-5] / (t * (1 + math.Sqrt(1+s/t)))) + } else { + s = z[nn-3] * (z[nn-5] / (t + math.Sqrt(t)*math.Sqrt(t+s))) + } + t = z[nn-7] + (s + z[nn-5]) + z[nn-3] *= z[nn-7] / t + z[nn-7] = t + } + z[4*(n0+1)-8] = z[nn-7] + sigma + z[4*(n0+1)-4] = z[nn-3] + sigma + n0 -= 2 + } + if pp == 2 { + pp = 0 + } + + // Reverse the qd-array, if warranted. + if dmin <= 0 || n0 < n0in { + if cbias*z[4*(i0+1)+pp-4] < z[4*(n0+1)+pp-4] { + ipn4Out := 4 * (i0 + n0 + 2) + for j4loop := 4 * (i0 + 1); j4loop <= 2*((i0+1)+(n0+1)-1); j4loop += 4 { + ipn4 := ipn4Out - 1 + j4 := j4loop - 1 + + z[j4-3], z[ipn4-j4-4] = z[ipn4-j4-4], z[j4-3] + z[j4-2], z[ipn4-j4-3] = z[ipn4-j4-3], z[j4-2] + z[j4-1], z[ipn4-j4-6] = z[ipn4-j4-6], z[j4-1] + z[j4], z[ipn4-j4-5] = z[ipn4-j4-5], z[j4] + } + if n0-i0 <= 4 { + z[4*(n0+1)+pp-2] = z[4*(i0+1)+pp-2] + z[4*(n0+1)-pp-1] = z[4*(i0+1)-pp-1] + } + dmin2 = math.Min(dmin2, z[4*(i0+1)-pp-2]) + z[4*(n0+1)+pp-2] = math.Min(math.Min(z[4*(n0+1)+pp-2], z[4*(i0+1)+pp-2]), z[4*(i0+1)+pp+2]) + z[4*(n0+1)-pp-1] = math.Min(math.Min(z[4*(n0+1)-pp-1], z[4*(i0+1)-pp-1]), z[4*(i0+1)-pp+3]) + qmax = math.Max(math.Max(qmax, z[4*(i0+1)+pp-4]), z[4*(i0+1)+pp]) + dmin = math.Copysign(0, -1) // Fortran code has -zero, but -0 in go is 0 + } + } + + // Choose a shift. + tau, ttype, g = impl.Dlasq4(i0, n0, z, pp, n0in, dmin, dmin1, dmin2, dn, dn1, dn2, tau, ttype, g) + + // Call dqds until dmin > 0. +loop: + for { + i0, n0, pp, tau, sigma, dmin, dmin1, dmin2, dn, dn1, dn2 = impl.Dlasq5(i0, n0, z, pp, tau, sigma) + + nDiv += n0 - i0 + 2 + iter++ + switch { + case dmin >= 0 && dmin1 >= 0: + // Success. + goto done + + case dmin < 0 && dmin1 > 0 && z[4*n0-pp-1] < tol*(sigma+dn1) && math.Abs(dn) < tol*sigma: + // Convergence hidden by negative dn. + z[4*n0-pp+1] = 0 + dmin = 0 + goto done + + case dmin < 0: + // Tau too big. Select new Tau and try again. + nFail++ + if ttype < -22 { + // Failed twice. Play it safe. + tau = 0 + } else if dmin1 > 0 { + // Late failure. Gives excellent shift. + tau = (tau + dmin) * (1 - 2*eps) + ttype -= 11 + } else { + // Early failure. Divide by 4. + tau = tau / 4 + ttype -= 12 + } + + case math.IsNaN(dmin): + if tau == 0 { + break loop + } + tau = 0 + + default: + // Possible underflow. Play it safe. + break loop + } + } + + // Risk of underflow. + dmin, dmin1, dmin2, dn, dn1, dn2 = impl.Dlasq6(i0, n0, z, pp) + nDiv += n0 - i0 + 2 + iter++ + tau = 0 + +done: + if tau < sigma { + desig += tau + t = sigma + desig + desig -= t - sigma + } else { + t = sigma + tau + desig += sigma - (t - tau) + } + sigma = t + return i0, n0, pp, dmin, sigma, desig, qmax, nFail, iter, nDiv, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau +} diff --git a/lapack/native/dlasq4.go b/lapack/native/dlasq4.go new file mode 100644 index 00000000..20aa4612 --- /dev/null +++ b/lapack/native/dlasq4.go @@ -0,0 +1,239 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlasq4 computes an approximation to the smallest eigenvalue using values of d +// from the previous transform. +// i0, n0, and n0in are zero-indexed. +// +// Dlasq4 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq4(i0, n0 int, z []float64, pp int, n0in int, dmin, dmin1, dmin2, dn, dn1, dn2, tau float64, ttype int, g float64) (tauOut float64, ttypeOut int, gOut float64) { + const ( + cnst1 = 0.563 + cnst2 = 1.01 + cnst3 = 1.05 + + cnstthird = 0.333 // TODO(btracey): Fix? + ) + // A negative dmin forces the shift to take that absolute value + // ttype records the type of shift. + if dmin <= 0 { + tau = -dmin + ttype = -1 + return tau, ttype, g + } + nn := 4*(n0+1) + pp - 1 // -1 for zero indexing + s := math.NaN() // Poison s so that failure to take a path below is obvious + if n0in == n0 { + // No eigenvalues deflated. + if dmin == dn || dmin == dn1 { + b1 := math.Sqrt(z[nn-3]) * math.Sqrt(z[nn-5]) + b2 := math.Sqrt(z[nn-7]) * math.Sqrt(z[nn-9]) + a2 := z[nn-7] + z[nn-5] + if dmin == dn && dmin1 == dn1 { + gap2 := dmin2 - a2 - dmin2/4 + var gap1 float64 + if gap2 > 0 && gap2 > b2 { + gap1 = a2 - dn - (b2/gap2)*b2 + } else { + gap1 = a2 - dn - (b1 + b2) + } + if gap1 > 0 && gap1 > b1 { + s = math.Max(dn-(b1/gap1)*b1, 0.5*dmin) + ttype = -2 + } else { + s = 0 + if dn > b1 { + s = dn - b1 + } + if a2 > b1+b2 { + s = math.Min(s, a2-(b1+b2)) + } + s = math.Max(s, cnstthird*dmin) + ttype = -3 + } + } else { + ttype = -4 + s = dmin / 4 + var gam float64 + var np int + if dmin == dn { + gam = dn + a2 = 0 + if z[nn-5] > z[nn-7] { + return tau, ttype, g + } + b2 = z[nn-5] / z[nn-7] + np = nn - 9 + } else { + np = nn - 2*pp + b2 = z[np-2] + gam = dn1 + if z[np-4] > z[np-2] { + return tau, ttype, g + } + a2 = z[np-4] / z[np-2] + if z[nn-9] > z[nn-11] { + return tau, ttype, g + } + b2 = z[nn-9] / z[nn-11] + np = nn - 13 + } + // Approximate contribution to norm squared from i < nn-1. + a2 += b2 + for i4loop := np + 1; i4loop >= 4*(i0+1)-1+pp; i4loop -= 4 { + i4 := i4loop - 1 + if b2 == 0 { + break + } + b1 = b2 + if z[i4] > z[i4-2] { + return tau, ttype, g + } + b2 *= z[i4] / z[i4-2] + a2 += b2 + if 100*math.Max(b2, b1) < a2 || cnst1 < a2 { + break + } + } + a2 *= cnst3 + // Rayleigh quotient residual bound. + if a2 < cnst1 { + s = gam * (1 - math.Sqrt(a2)) / (1 + a2) + } + } + } else if dmin == dn2 { + ttype = -5 + s = dmin / 4 + // Compute contribution to norm squared from i > nn-2. + np := nn - 2*pp + b1 := z[np-2] + b2 := z[np-6] + gam := dn2 + if z[np-8] > b2 || z[np-4] > b1 { + return tau, ttype, g + } + a2 := (z[np-8] / b2) * (1 + z[np-4]/b1) + // Approximate contribution to norm squared from i < nn-2. + if n0-i0 > 2 { + b2 = z[nn-13] / z[nn-15] + a2 += b2 + for i4loop := (nn + 1) - 17; i4loop >= 4*(i0+1)-1+pp; i4loop -= 4 { + i4 := i4loop - 1 + if b2 == 0 { + break + } + b1 = b2 + if z[i4] > z[i4-2] { + return tau, ttype, g + } + b2 *= z[i4] / z[i4-2] + a2 += b2 + if 100*math.Max(b2, b1) < a2 || cnst1 < a2 { + break + } + } + a2 *= cnst3 + } + if a2 < cnst1 { + s = gam * (1 - math.Sqrt(a2)) / (1 + a2) + } + } else { + // Case 6, no information to guide us. + if ttype == -6 { + g += cnstthird * (1 - g) + } else if ttype == -18 { + g = cnstthird / 4 + } else { + g = 1.0 / 4 + } + s = g * dmin + ttype = -6 + } + } else if n0in == (n0 + 1) { + // One eigenvalue just deflated. Use DMIN1, DN1 for DMIN and DN. + if dmin1 == dn1 && dmin2 == dn2 { + ttype = -7 + s = cnstthird * dmin1 + if z[nn-5] > z[nn-7] { + return tau, ttype, g + } + b1 := z[nn-5] / z[nn-7] + b2 := b1 + if b2 != 0 { + for i4loop := 4*(n0+1) - 9 + pp; i4loop >= 4*(i0+1)-1+pp; i4loop -= 4 { + i4 := i4loop - 1 + a2 := b1 + if z[i4] > z[i4-2] { + return tau, ttype, g + } + b1 *= z[i4] / z[i4-2] + b2 += b1 + if 100*math.Max(b1, a2) < b2 { + break + } + } + } + b2 = math.Sqrt(cnst3 * b2) + a2 := dmin1 / (1 + b2*b2) + gap2 := 0.5*dmin2 - a2 + if gap2 > 0 && gap2 > b2*a2 { + s = math.Max(s, a2*(1-cnst2*a2*(b2/gap2)*b2)) + } else { + s = math.Max(s, a2*(1-cnst2*b2)) + ttype = -8 + } + } else { + s = dmin1 / 4 + if dmin1 == dn1 { + s = 0.5 * dmin1 + } + ttype = -9 + } + } else if n0in == (n0 + 2) { + // Two eigenvalues deflated. Use DMIN2, DN2 for DMIN and DN. + if dmin2 == dn2 && 2*z[nn-5] < z[nn-7] { + ttype = -10 + s = cnstthird * dmin2 + if z[nn-5] > z[nn-7] { + return tau, ttype, g + } + b1 := z[nn-5] / z[nn-7] + b2 := b1 + if b2 != 0 { + for i4loop := 4*(n0+1) - 9 + pp; i4loop >= 4*(i0+1)-1+pp; i4loop -= 4 { + i4 := i4loop - 1 + if z[i4] > z[i4-2] { + return tau, ttype, g + } + b1 *= z[i4] / z[i4-2] + b2 += b1 + if 100*b1 < b2 { + break + } + } + } + b2 = math.Sqrt(cnst3 * b2) + a2 := dmin2 / (1 + b2*b2) + gap2 := z[nn-7] + z[nn-9] - math.Sqrt(z[nn-11])*math.Sqrt(z[nn-9]) - a2 + if gap2 > 0 && gap2 > b2*a2 { + s = math.Max(s, a2*(1-cnst2*a2*(b2/gap2)*b2)) + } else { + s = math.Max(s, a2*(1-cnst2*b2)) + } + } else { + s = dmin2 / 4 + ttype = -11 + } + } else if n0in > n0+2 { + // Case 12, more than two eigenvalues deflated. No information. + s = 0 + ttype = -12 + } + tau = s + return tau, ttype, g +} diff --git a/lapack/native/dlasq5.go b/lapack/native/dlasq5.go new file mode 100644 index 00000000..3be3fc9b --- /dev/null +++ b/lapack/native/dlasq5.go @@ -0,0 +1,125 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlasq5 computes one dqds transform in ping-pong form. +// i0 and n0 are zero-indexed. +// +// Dlasq5 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq5(i0, n0 int, z []float64, pp int, tau, sigma float64) (i0Out, n0Out, ppOut int, tauOut, sigmaOut, dmin, dmin1, dmin2, dn, dnm1, dnm2 float64) { + // The lapack function has inputs for ieee and eps, but Go requires ieee so + // these are unnecessary. + if n0-i0-1 <= 0 { + return i0, n0, pp, tau, sigma, dmin, dmin1, dmin2, dn, dnm1, dnm2 + } + eps := dlamchP + dthresh := eps * (sigma + tau) + if tau < dthresh*0.5 { + tau = 0 + } + var j4 int + var emin float64 + if tau != 0 { + j4 = 4*i0 + pp + emin = z[j4+4] + d := z[j4] - tau + dmin = d + dmin1 = -z[j4] + if pp == 0 { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 + z[j4-2] = d + z[j4-1] + tmp := z[j4+1] / z[j4-2] + d = d*tmp - tau + dmin = math.Min(dmin, d) + z[j4] = z[j4-1] * tmp + emin = math.Min(z[j4], emin) + } + } else { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 + z[j4-3] = d + z[j4] + tmp := z[j4+2] / z[j4-3] + d = d*tmp - tau + dmin = math.Min(dmin, d) + z[j4-1] = z[j4] * tmp + emin = math.Min(z[j4-1], emin) + } + } + // Unroll the last two steps. + dnm2 = d + dmin2 = dmin + j4 = 4*((n0+1)-2) - pp - 1 + j4p2 := j4 + 2*pp - 1 + z[j4-2] = dnm2 + z[j4p2] + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dnm1 = z[j4p2+2]*(dnm2/z[j4-2]) - tau + dmin = math.Min(dmin, dnm1) + + dmin1 = dmin + j4 += 4 + j4p2 = j4 + 2*pp - 1 + z[j4-2] = dnm1 + z[j4p2] + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dn = z[j4p2+2]*(dnm1/z[j4-2]) - tau + dmin = math.Min(dmin, dn) + } else { + // This is the version that sets d's to zero if they are small enough. + j4 = 4*(i0+1) + pp - 4 + emin = z[j4+4] + d := z[j4] - tau + dmin = d + dmin1 = -z[j4] + if pp == 0 { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 + z[j4-2] = d + z[j4-1] + tmp := z[j4+1] / z[j4-2] + d = d*tmp - tau + if d < dthresh { + d = 0 + } + dmin = math.Min(dmin, d) + z[j4] = z[j4-1] * tmp + emin = math.Min(z[j4], emin) + } + } else { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 + z[j4-3] = d + z[j4] + tmp := z[j4+2] / z[j4-3] + d = d*tmp - tau + if d < dthresh { + d = 0 + } + dmin = math.Min(dmin, d) + z[j4-1] = z[j4] * tmp + emin = math.Min(z[j4-1], emin) + } + } + // Unroll the last two steps. + dnm2 = d + dmin2 = dmin + j4 = 4*((n0+1)-2) - pp - 1 + j4p2 := j4 + 2*pp - 1 + z[j4-2] = dnm2 + z[j4p2] + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dnm1 = z[j4p2+2]*(dnm2/z[j4-2]) - tau + dmin = math.Min(dmin, dnm1) + + dmin1 = dmin + j4 += 4 + j4p2 = j4 + 2*pp - 1 + z[j4-2] = dnm1 + z[j4p2] + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dn = z[j4p2+2]*(dnm1/z[j4-2]) - tau + dmin = math.Min(dmin, dn) + } + z[j4+2] = dn + z[4*(n0+1)-pp-1] = emin + return i0, n0, pp, tau, sigma, dmin, dmin1, dmin2, dn, dnm1, dnm2 +} diff --git a/lapack/native/dlasq6.go b/lapack/native/dlasq6.go new file mode 100644 index 00000000..456b6cae --- /dev/null +++ b/lapack/native/dlasq6.go @@ -0,0 +1,109 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlasq6 computes one dqd transform in ping-pong form with protection against +// overflow and underflow. z has length at least 4*(n0+1) and holds the qd array. +// i0 is the zero-based first index. +// n0 is the zero-based last index. +// +// Dlasq6 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasq6(i0, n0 int, z []float64, pp int) (dmin, dmin1, dmin2, dn, dnm1, dnm2 float64) { + if len(z) < 4*(n0+1) { + panic(badZ) + } + if n0-i0-1 <= 0 { + return dmin, dmin1, dmin2, dn, dnm1, dnm2 + } + safmin := dlamchS + j4 := 4*(i0+1) + pp - 4 // -4 rather than -3 for zero indexing + emin := z[j4+4] + d := z[j4] + dmin = d + if pp == 0 { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 // Translate back to zero-indexed. + z[j4-2] = d + z[j4-1] + if z[j4-2] == 0 { + z[j4] = 0 + d = z[j4+1] + dmin = d + emin = 0 + } else if safmin*z[j4+1] < z[j4-2] && safmin*z[j4-2] < z[j4+1] { + tmp := z[j4+1] / z[j4-2] + z[j4] = z[j4-1] * tmp + d *= tmp + } else { + z[j4] = z[j4+1] * (z[j4-1] / z[j4-2]) + d = z[j4+1] * (d / z[j4-2]) + } + dmin = math.Min(dmin, d) + emin = math.Min(emin, z[j4]) + } + } else { + for j4loop := 4 * (i0 + 1); j4loop <= 4*((n0+1)-3); j4loop += 4 { + j4 := j4loop - 1 + z[j4-3] = d + z[j4] + if z[j4-3] == 0 { + z[j4-1] = 0 + d = z[j4+2] + dmin = d + emin = 0 + } else if safmin*z[j4+2] < z[j4-3] && safmin*z[j4-3] < z[j4+2] { + tmp := z[j4+2] / z[j4-3] + z[j4-1] = z[j4] * tmp + d *= tmp + } else { + z[j4-1] = z[j4+2] * (z[j4] / z[j4-3]) + d = z[j4+2] * (d / z[j4-3]) + } + dmin = math.Min(dmin, d) + emin = math.Min(emin, z[j4-1]) + } + } + // Unroll last two steps. + dnm2 = d + dmin2 = dmin + j4 = 4*(n0-1) - pp - 1 + j4p2 := j4 + 2*pp - 1 + z[j4-2] = dnm2 + z[j4p2] + if z[j4-2] == 0 { + z[j4] = 0 + dnm1 = z[j4p2+2] + dmin = dnm1 + emin = 0 + } else if safmin*z[j4p2+2] < z[j4-2] && safmin*z[j4-2] < z[j4p2+2] { + tmp := z[j4p2+2] / z[j4-2] + z[j4] = z[j4p2] * tmp + dnm1 = dnm2 * tmp + } else { + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dnm1 = z[j4p2+2] * (dnm2 / z[j4-2]) + } + dmin = math.Min(dmin, dnm1) + dmin1 = dmin + j4 += 4 + j4p2 = j4 + 2*pp - 1 + z[j4-2] = dnm1 + z[j4p2] + if z[j4-2] == 0 { + z[j4] = 0 + dn = z[j4p2+2] + dmin = dn + emin = 0 + } else if safmin*z[j4p2+2] < z[j4-2] && safmin*z[j4-2] < z[j4p2+2] { + tmp := z[j4p2+2] / z[j4-2] + z[j4] = z[j4p2] * tmp + dn = dnm1 * tmp + } else { + z[j4] = z[j4p2+2] * (z[j4p2] / z[j4-2]) + dn = z[j4p2+2] * (dnm1 / z[j4-2]) + } + dmin = math.Min(dmin, dn) + z[j4+2] = dn + z[4*(n0+1)-pp-1] = emin + return dmin, dmin1, dmin2, dn, dnm1, dnm2 +} diff --git a/lapack/native/dlasr.go b/lapack/native/dlasr.go new file mode 100644 index 00000000..554d5bd6 --- /dev/null +++ b/lapack/native/dlasr.go @@ -0,0 +1,268 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dlasr applies a sequence of plane rotations to the m×n matrix A. This series +// of plane rotations is implicitly represented by a matrix P. P is multiplied +// by a depending on the value of side -- A = P * A if side == lapack.Left, +// A = A * P^T if side == lapack.Right. +// +//The exact value of P depends on the value of pivot, but in all cases P is +// implicitly represented by a series of 2×2 rotation matrices. The entries of +// rotation matrix k are defined by s[k] and c[k] +// R(k) = [ c[k] s[k]] +// [-s[k] s[k]] +// If direct == lapack.Forward, the rotation matrices are applied as +// P = P(z-1) * ... * P(2) * P(1), while if direct == lapack.Backward they are +// applied as P = P(1) * P(2) * ... * P(n). +// +// pivot defines the mapping of the elements in R(k) to P(k). +// If pivot == lapack.Variable, the rotation is performed for the (k, k+1) plane. +// P(k) = [1 ] +// [ ... ] +// [ 1 ] +// [ c[k] s[k] ] +// [ -s[k] c[k] ] +// [ 1 ] +// [ ... ] +// [ 1] +// if pivot == lapack.Top, the rotation is performed for the (1, k+1) plane, +// P(k) = [c[k] s[k] ] +// [ 1 ] +// [ ... ] +// [ 1 ] +// [-s[k] c[k] ] +// [ 1 ] +// [ ... ] +// [ 1] +// and if pivot == lapack.Bottom, the rotation is performed for the (k, z) plane. +// P(k) = [1 ] +// [ ... ] +// [ 1 ] +// [ c[k] s[k]] +// [ 1 ] +// [ ... ] +// [ 1 ] +// [ -s[k] c[k]] +// s and c have length m - 1 if side == blas.Left, and n - 1 if side == blas.Right. +// +// Dlasr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasr(side blas.Side, pivot lapack.Pivot, direct lapack.Direct, m, n int, c, s, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if pivot != lapack.Variable && pivot != lapack.Top && pivot != lapack.Bottom { + panic(badPivot) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if side == blas.Left { + if len(c) < m-1 { + panic(badSlice) + } + if len(s) < m-1 { + panic(badSlice) + } + } else { + if len(c) < n-1 { + panic(badSlice) + } + if len(s) < n-1 { + panic(badSlice) + } + } + if m == 0 || n == 0 { + return + } + if side == blas.Left { + if pivot == lapack.Variable { + if direct == lapack.Forward { + for j := 0; j < m-1; j++ { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp2 := a[j*lda+i] + tmp := a[(j+1)*lda+i] + a[(j+1)*lda+i] = ctmp*tmp - stmp*tmp2 + a[j*lda+i] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } + for j := m - 2; j >= 0; j-- { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp2 := a[j*lda+i] + tmp := a[(j+1)*lda+i] + a[(j+1)*lda+i] = ctmp*tmp - stmp*tmp2 + a[j*lda+i] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } else if pivot == lapack.Top { + if direct == lapack.Forward { + for j := 1; j < m; j++ { + ctmp := c[j-1] + stmp := s[j-1] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp := a[j*lda+i] + tmp2 := a[i] + a[j*lda+i] = ctmp*tmp - stmp*tmp2 + a[i] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } + for j := m - 1; j >= 1; j-- { + ctmp := c[j-1] + stmp := s[j-1] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + ctmp := c[j-1] + stmp := s[j-1] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp := a[j*lda+i] + tmp2 := a[i] + a[j*lda+i] = ctmp*tmp - stmp*tmp2 + a[i] = stmp*tmp + ctmp*tmp2 + } + } + } + } + } + return + } + if direct == lapack.Forward { + for j := 0; j < m-1; j++ { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp := a[j*lda+i] + tmp2 := a[(m-1)*lda+i] + a[j*lda+i] = stmp*tmp2 + ctmp*tmp + a[(m-1)*lda+i] = ctmp*tmp2 - stmp*tmp + } + } + } + return + } + for j := m - 2; j >= 0; j-- { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < n; i++ { + tmp := a[j*lda+i] + tmp2 := a[(m-1)*lda+i] + a[j*lda+i] = stmp*tmp2 + ctmp*tmp + a[(m-1)*lda+i] = ctmp*tmp2 - stmp*tmp + } + } + } + return + } + if pivot == lapack.Variable { + if direct == lapack.Forward { + for j := 0; j < n-1; j++ { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j+1] + tmp2 := a[i*lda+j] + a[i*lda+j+1] = ctmp*tmp - stmp*tmp2 + a[i*lda+j] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } + for j := n - 2; j >= 0; j-- { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j+1] + tmp2 := a[i*lda+j] + a[i*lda+j+1] = ctmp*tmp - stmp*tmp2 + a[i*lda+j] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } else if pivot == lapack.Top { + if direct == lapack.Forward { + for j := 1; j < n; j++ { + ctmp := c[j-1] + stmp := s[j-1] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j] + tmp2 := a[i*lda] + a[i*lda+j] = ctmp*tmp - stmp*tmp2 + a[i*lda] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } + for j := n - 1; j >= 1; j-- { + ctmp := c[j-1] + stmp := s[j-1] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j] + tmp2 := a[i*lda] + a[i*lda+j] = ctmp*tmp - stmp*tmp2 + a[i*lda] = stmp*tmp + ctmp*tmp2 + } + } + } + return + } + if direct == lapack.Forward { + for j := 0; j < n-1; j++ { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j] + tmp2 := a[i*lda+n-1] + a[i*lda+j] = stmp*tmp2 + ctmp*tmp + a[i*lda+n-1] = ctmp*tmp2 - stmp*tmp + } + + } + } + return + } + for j := n - 2; j >= 0; j-- { + ctmp := c[j] + stmp := s[j] + if ctmp != 1 || stmp != 0 { + for i := 0; i < m; i++ { + tmp := a[i*lda+j] + tmp2 := a[i*lda+n-1] + a[i*lda+j] = stmp*tmp2 + ctmp*tmp + a[i*lda+n-1] = ctmp*tmp2 - stmp*tmp + } + } + } +} diff --git a/lapack/native/dlasrt.go b/lapack/native/dlasrt.go new file mode 100644 index 00000000..f471764a --- /dev/null +++ b/lapack/native/dlasrt.go @@ -0,0 +1,30 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "sort" + + "github.com/gonum/lapack" +) + +// Dlasrt sorts the numbers in the input slice d. If s == lapack.SortIncreasing, +// the elements are sorted in increasing order. If s == lapack.SortDecreasing, +// the elements are sorted in decreasing order. For other values of s Dlasrt +// will panic. +// +// Dlasrt is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasrt(s lapack.Sort, n int, d []float64) { + checkVector(n, d, 1) + d = d[:n] + switch s { + default: + panic(badSort) + case lapack.SortIncreasing: + sort.Float64s(d) + case lapack.SortDecreasing: + sort.Sort(sort.Reverse(sort.Float64Slice(d))) + } +} diff --git a/lapack/native/dlassq.go b/lapack/native/dlassq.go new file mode 100644 index 00000000..24f60365 --- /dev/null +++ b/lapack/native/dlassq.go @@ -0,0 +1,31 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlassq updates a sum of squares in scaled form. The input parameters scale and +// sumsq represent the current scale and total sum of squares. These values are +// updated with the information in the first n elements of the vector specified +// by x and incX. +// +// Dlassq is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlassq(n int, x []float64, incx int, scale float64, sumsq float64) (scl, smsq float64) { + if n <= 0 { + return scale, sumsq + } + for ix := 0; ix <= (n-1)*incx; ix += incx { + absxi := math.Abs(x[ix]) + if absxi > 0 || math.IsNaN(absxi) { + if scale < absxi { + sumsq = 1 + sumsq*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumsq += (absxi / scale) * (absxi / scale) + } + } + } + return scale, sumsq +} diff --git a/lapack/native/dlasv2.go b/lapack/native/dlasv2.go new file mode 100644 index 00000000..bfae9ecf --- /dev/null +++ b/lapack/native/dlasv2.go @@ -0,0 +1,115 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlasv2 computes the singular value decomposition of a 2×2 matrix. +// [ csl snl] [f g] [csr -snr] = [ssmax 0] +// [-snl csl] [0 h] [snr csr] = [ 0 ssmin] +// ssmax is the larger absolute singular value, and ssmin is the smaller absolute +// singular value. [cls, snl] and [csr, snr] are the left and right singular vectors. +// +// Dlasv2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasv2(f, g, h float64) (ssmin, ssmax, snr, csr, snl, csl float64) { + ft := f + fa := math.Abs(ft) + ht := h + ha := math.Abs(h) + // pmax points to the largest element of the matrix in terms of absolute value. + // 1 if F, 2 if G, 3 if H. + pmax := 1 + swap := ha > fa + if swap { + pmax = 3 + ft, ht = ht, ft + fa, ha = ha, fa + } + gt := g + ga := math.Abs(gt) + var clt, crt, slt, srt float64 + if ga == 0 { + ssmin = ha + ssmax = fa + clt = 1 + crt = 1 + slt = 0 + srt = 0 + } else { + gasmall := true + if ga > fa { + pmax = 2 + if (fa / ga) < dlamchE { + gasmall = false + ssmax = ga + if ha > 1 { + ssmin = fa / (ga / ha) + } else { + ssmin = (fa / ga) * ha + } + clt = 1 + slt = ht / gt + srt = 1 + crt = ft / gt + } + } + if gasmall { + d := fa - ha + l := d / fa + if d == fa { // deal with inf + l = 1 + } + m := gt / ft + t := 2 - l + s := math.Hypot(t, m) + var r float64 + if l == 0 { + r = math.Abs(m) + } else { + r = math.Hypot(l, m) + } + a := 0.5 * (s + r) + ssmin = ha / a + ssmax = fa * a + if m == 0 { + if l == 0 { + t = math.Copysign(2, ft) * math.Copysign(1, gt) + } else { + t = gt/math.Copysign(d, ft) + m/t + } + } else { + t = (m/(s+t) + m/(r+l)) * (1 + a) + } + l = math.Hypot(t, 2) + crt = 2 / l + srt = t / l + clt = (crt + srt*m) / a + slt = (ht / ft) * srt / a + } + } + if swap { + csl = srt + snl = crt + csr = slt + snr = clt + } else { + csl = clt + snl = slt + csr = crt + snr = srt + } + var tsign float64 + switch pmax { + case 1: + tsign = math.Copysign(1, csr) * math.Copysign(1, csl) * math.Copysign(1, f) + case 2: + tsign = math.Copysign(1, snr) * math.Copysign(1, csl) * math.Copysign(1, g) + case 3: + tsign = math.Copysign(1, snr) * math.Copysign(1, snl) * math.Copysign(1, h) + } + ssmax = math.Copysign(ssmax, tsign) + ssmin = math.Copysign(ssmin, tsign*math.Copysign(1, f)*math.Copysign(1, h)) + return ssmin, ssmax, snr, csr, snl, csl +} diff --git a/lapack/native/dlaswp.go b/lapack/native/dlaswp.go new file mode 100644 index 00000000..1eee3057 --- /dev/null +++ b/lapack/native/dlaswp.go @@ -0,0 +1,47 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas/blas64" + +// Dlaswp swaps the rows k1 to k2 of a rectangular matrix A according to the +// indices in ipiv so that row k is swapped with ipiv[k]. +// +// n is the number of columns of A and incX is the increment for ipiv. If incX +// is 1, the swaps are applied from k1 to k2. If incX is -1, the swaps are +// applied in reverse order from k2 to k1. For other values of incX Dlaswp will +// panic. ipiv must have length k2+1, otherwise Dlaswp will panic. +// +// The indices k1, k2, and the elements of ipiv are zero-based. +// +// Dlaswp is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlaswp(n int, a []float64, lda int, k1, k2 int, ipiv []int, incX int) { + switch { + case n < 0: + panic(nLT0) + case k2 < 0: + panic(badK2) + case k1 < 0 || k2 < k1: + panic(badK1) + case len(ipiv) != k2+1: + panic(badIpiv) + case incX != 1 && incX != -1: + panic(absIncNotOne) + } + + if n == 0 { + return + } + bi := blas64.Implementation() + if incX == 1 { + for k := k1; k <= k2; k++ { + bi.Dswap(n, a[k*lda:], 1, a[ipiv[k]*lda:], 1) + } + return + } + for k := k2; k >= k1; k-- { + bi.Dswap(n, a[k*lda:], 1, a[ipiv[k]*lda:], 1) + } +} diff --git a/lapack/native/dlasy2.go b/lapack/native/dlasy2.go new file mode 100644 index 00000000..b14cb256 --- /dev/null +++ b/lapack/native/dlasy2.go @@ -0,0 +1,290 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dlasy2 solves the Sylvester matrix equation where the matrices are of order 1 +// or 2. It computes the unknown n1×n2 matrix X so that +// TL*X + sgn*X*TR = scale*B, if tranl == false and tranr == false, +// TL^T*X + sgn*X*TR = scale*B, if tranl == true and tranr == false, +// TL*X + sgn*X*TR^T = scale*B, if tranl == false and tranr == true, +// TL^T*X + sgn*X*TR^T = scale*B, if tranl == true and tranr == true, +// where TL is n1×n1, TR is n2×n2, B is n1×n2, and 1 <= n1,n2 <= 2. +// +// isgn must be 1 or -1, and n1 and n2 must be 0, 1, or 2, but these conditions +// are not checked. +// +// Dlasy2 returns three values, a scale factor that is chosen less than or equal +// to 1 to prevent the solution overflowing, the infinity norm of the solution, +// and an indicator of success. If ok is false, TL and TR have eigenvalues that +// are too close, so TL or TR is perturbed to get a non-singular equation. +// +// Dlasy2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlasy2(tranl, tranr bool, isgn, n1, n2 int, tl []float64, ldtl int, tr []float64, ldtr int, b []float64, ldb int, x []float64, ldx int) (scale, xnorm float64, ok bool) { + // TODO(vladimir-ch): Add input validation checks conditionally skipped + // using the build tag mechanism. + + ok = true + // Quick return if possible. + if n1 == 0 || n2 == 0 { + return scale, xnorm, ok + } + + // Set constants to control overflow. + eps := dlamchP + smlnum := dlamchS / eps + sgn := float64(isgn) + + if n1 == 1 && n2 == 1 { + // 1×1 case: TL11*X + sgn*X*TR11 = B11. + tau1 := tl[0] + sgn*tr[0] + bet := math.Abs(tau1) + if bet <= smlnum { + tau1 = smlnum + bet = smlnum + ok = false + } + scale = 1 + gam := math.Abs(b[0]) + if smlnum*gam > bet { + scale = 1 / gam + } + x[0] = b[0] * scale / tau1 + xnorm = math.Abs(x[0]) + return scale, xnorm, ok + } + + if n1+n2 == 3 { + // 1×2 or 2×1 case. + var ( + smin float64 + tmp [4]float64 // tmp is used as a 2×2 row-major matrix. + btmp [2]float64 + ) + if n1 == 1 && n2 == 2 { + // 1×2 case: TL11*[X11 X12] + sgn*[X11 X12]*op[TR11 TR12] = [B11 B12]. + // [TR21 TR22] + smin = math.Abs(tl[0]) + smin = math.Max(smin, math.Max(math.Abs(tr[0]), math.Abs(tr[1]))) + smin = math.Max(smin, math.Max(math.Abs(tr[ldtr]), math.Abs(tr[ldtr+1]))) + smin = math.Max(eps*smin, smlnum) + tmp[0] = tl[0] + sgn*tr[0] + tmp[3] = tl[0] + sgn*tr[ldtr+1] + if tranr { + tmp[1] = sgn * tr[1] + tmp[2] = sgn * tr[ldtr] + } else { + tmp[1] = sgn * tr[ldtr] + tmp[2] = sgn * tr[1] + } + btmp[0] = b[0] + btmp[1] = b[1] + } else { + // 2×1 case: op[TL11 TL12]*[X11] + sgn*[X11]*TR11 = [B11]. + // [TL21 TL22]*[X21] [X21] [B21] + smin = math.Abs(tr[0]) + smin = math.Max(smin, math.Max(math.Abs(tl[0]), math.Abs(tl[1]))) + smin = math.Max(smin, math.Max(math.Abs(tl[ldtl]), math.Abs(tl[ldtl+1]))) + smin = math.Max(eps*smin, smlnum) + tmp[0] = tl[0] + sgn*tr[0] + tmp[3] = tl[ldtl+1] + sgn*tr[0] + if tranl { + tmp[1] = tl[ldtl] + tmp[2] = tl[1] + } else { + tmp[1] = tl[1] + tmp[2] = tl[ldtl] + } + btmp[0] = b[0] + btmp[1] = b[ldb] + } + + // Solve 2×2 system using complete pivoting. + // Set pivots less than smin to smin. + + bi := blas64.Implementation() + ipiv := bi.Idamax(len(tmp), tmp[:], 1) + // Compute the upper triangular matrix [u11 u12]. + // [ 0 u22] + u11 := tmp[ipiv] + if math.Abs(u11) <= smin { + ok = false + u11 = smin + } + locu12 := [4]int{1, 0, 3, 2} // Index in tmp of the element on the same row as the pivot. + u12 := tmp[locu12[ipiv]] + locl21 := [4]int{2, 3, 0, 1} // Index in tmp of the element on the same column as the pivot. + l21 := tmp[locl21[ipiv]] / u11 + locu22 := [4]int{3, 2, 1, 0} // Index in tmp of the remaining element. + u22 := tmp[locu22[ipiv]] - l21*u12 + if math.Abs(u22) <= smin { + ok = false + u22 = smin + } + if ipiv&0x2 != 0 { // true for ipiv equal to 2 and 3. + // The pivot was in the second row, swap the elements of + // the right-hand side. + btmp[0], btmp[1] = btmp[1], btmp[0]-l21*btmp[1] + } else { + btmp[1] -= l21 * btmp[0] + } + scale = 1 + if 2*smlnum*math.Abs(btmp[1]) > math.Abs(u22) || 2*smlnum*math.Abs(btmp[0]) > math.Abs(u11) { + scale = 0.5 / math.Max(math.Abs(btmp[0]), math.Abs(btmp[1])) + btmp[0] *= scale + btmp[1] *= scale + } + // Solve the system [u11 u12] [x21] = [ btmp[0] ]. + // [ 0 u22] [x22] [ btmp[1] ] + x22 := btmp[1] / u22 + x21 := btmp[0]/u11 - (u12/u11)*x22 + if ipiv&0x1 != 0 { // true for ipiv equal to 1 and 3. + // The pivot was in the second column, swap the elements + // of the solution. + x21, x22 = x22, x21 + } + x[0] = x21 + if n1 == 1 { + x[1] = x22 + xnorm = math.Abs(x[0]) + math.Abs(x[1]) + } else { + x[ldx] = x22 + xnorm = math.Max(math.Abs(x[0]), math.Abs(x[ldx])) + } + return scale, xnorm, ok + } + + // 2×2 case: op[TL11 TL12]*[X11 X12] + SGN*[X11 X12]*op[TR11 TR12] = [B11 B12]. + // [TL21 TL22] [X21 X22] [X21 X22] [TR21 TR22] [B21 B22] + // + // Solve equivalent 4×4 system using complete pivoting. + // Set pivots less than smin to smin. + + smin := math.Max(math.Abs(tr[0]), math.Abs(tr[1])) + smin = math.Max(smin, math.Max(math.Abs(tr[ldtr]), math.Abs(tr[ldtr+1]))) + smin = math.Max(smin, math.Max(math.Abs(tl[0]), math.Abs(tl[1]))) + smin = math.Max(smin, math.Max(math.Abs(tl[ldtl]), math.Abs(tl[ldtl+1]))) + smin = math.Max(eps*smin, smlnum) + + var t [4][4]float64 + t[0][0] = tl[0] + sgn*tr[0] + t[1][1] = tl[0] + sgn*tr[ldtr+1] + t[2][2] = tl[ldtl+1] + sgn*tr[0] + t[3][3] = tl[ldtl+1] + sgn*tr[ldtr+1] + if tranl { + t[0][2] = tl[ldtl] + t[1][3] = tl[ldtl] + t[2][0] = tl[1] + t[3][1] = tl[1] + } else { + t[0][2] = tl[1] + t[1][3] = tl[1] + t[2][0] = tl[ldtl] + t[3][1] = tl[ldtl] + } + if tranr { + t[0][1] = sgn * tr[1] + t[1][0] = sgn * tr[ldtr] + t[2][3] = sgn * tr[1] + t[3][2] = sgn * tr[ldtr] + } else { + t[0][1] = sgn * tr[ldtr] + t[1][0] = sgn * tr[1] + t[2][3] = sgn * tr[ldtr] + t[3][2] = sgn * tr[1] + } + + var btmp [4]float64 + btmp[0] = b[0] + btmp[1] = b[1] + btmp[2] = b[ldb] + btmp[3] = b[ldb+1] + + // Perform elimination. + var jpiv [4]int // jpiv records any column swaps for pivoting. + for i := 0; i < 3; i++ { + var ( + xmax float64 + ipsv, jpsv int + ) + for ip := i; ip < 4; ip++ { + for jp := i; jp < 4; jp++ { + if math.Abs(t[ip][jp]) >= xmax { + xmax = math.Abs(t[ip][jp]) + ipsv = ip + jpsv = jp + } + } + } + if ipsv != i { + // The pivot is not in the top row of the unprocessed + // block, swap rows ipsv and i of t and btmp. + t[ipsv], t[i] = t[i], t[ipsv] + btmp[ipsv], btmp[i] = btmp[i], btmp[ipsv] + } + if jpsv != i { + // The pivot is not in the left column of the + // unprocessed block, swap columns jpsv and i of t. + for k := 0; k < 4; k++ { + t[k][jpsv], t[k][i] = t[k][i], t[k][jpsv] + } + } + jpiv[i] = jpsv + if math.Abs(t[i][i]) < smin { + ok = false + t[i][i] = smin + } + for k := i + 1; k < 4; k++ { + t[k][i] /= t[i][i] + btmp[k] -= t[k][i] * btmp[i] + for j := i + 1; j < 4; j++ { + t[k][j] -= t[k][i] * t[i][j] + } + } + } + if math.Abs(t[3][3]) < smin { + ok = false + t[3][3] = smin + } + scale = 1 + if 8*smlnum*math.Abs(btmp[0]) > math.Abs(t[0][0]) || + 8*smlnum*math.Abs(btmp[1]) > math.Abs(t[1][1]) || + 8*smlnum*math.Abs(btmp[2]) > math.Abs(t[2][2]) || + 8*smlnum*math.Abs(btmp[3]) > math.Abs(t[3][3]) { + + maxbtmp := math.Max(math.Abs(btmp[0]), math.Abs(btmp[1])) + maxbtmp = math.Max(maxbtmp, math.Max(math.Abs(btmp[2]), math.Abs(btmp[3]))) + scale = 1 / 8 / maxbtmp + btmp[0] *= scale + btmp[1] *= scale + btmp[2] *= scale + btmp[3] *= scale + } + // Compute the solution of the upper triangular system t * tmp = btmp. + var tmp [4]float64 + for i := 3; i >= 0; i-- { + temp := 1 / t[i][i] + tmp[i] = btmp[i] * temp + for j := i + 1; j < 4; j++ { + tmp[i] -= temp * t[i][j] * tmp[j] + } + } + for i := 2; i >= 0; i-- { + if jpiv[i] != i { + tmp[i], tmp[jpiv[i]] = tmp[jpiv[i]], tmp[i] + } + } + x[0] = tmp[0] + x[1] = tmp[1] + x[ldx] = tmp[2] + x[ldx+1] = tmp[3] + xnorm = math.Max(math.Abs(tmp[0])+math.Abs(tmp[1]), math.Abs(tmp[2])+math.Abs(tmp[3])) + return scale, xnorm, ok +} diff --git a/lapack/native/dlatrd.go b/lapack/native/dlatrd.go new file mode 100644 index 00000000..9e47bacc --- /dev/null +++ b/lapack/native/dlatrd.go @@ -0,0 +1,145 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlatrd reduces nb rows and columns of a real n×n symmetric matrix A to symmetric +// tridiagonal form. It computes the orthonormal similarity transformation +// Q^T * A * Q +// and returns the matrices V and W to apply to the unreduced part of A. If +// uplo == blas.Upper, the upper triangle is supplied and the last nb rows are +// reduced. If uplo == blas.Lower, the lower triangle is supplied and the first +// nb rows are reduced. +// +// a contains the symmetric matrix on entry with active triangular half specified +// by uplo. On exit, the nb columns have been reduced to tridiagonal form. The +// diagonal contains the diagonal of the reduced matrix, the off-diagonal is +// set to 1, and the remaining elements contain the data to construct Q. +// +// If uplo == blas.Upper, with n = 5 and nb = 2 on exit a is +// [ a a a v4 v5] +// [ a a v4 v5] +// [ a 1 v5] +// [ d 1] +// [ d] +// +// If uplo == blas.Lower, with n = 5 and nb = 2, on exit a is +// [ d ] +// [ 1 d ] +// [v1 1 a ] +// [v1 v2 a a ] +// [v1 v2 a a a] +// +// e contains the superdiagonal elements of the reduced matrix. If uplo == blas.Upper, +// e[n-nb:n-1] contains the last nb columns of the reduced matrix, while if +// uplo == blas.Lower, e[:nb] contains the first nb columns of the reduced matrix. +// e must have length at least n-1, and Dlatrd will panic otherwise. +// +// tau contains the scalar factors of the elementary reflectors needed to construct Q. +// The reflectors are stored in tau[n-nb:n-1] if uplo == blas.Upper, and in +// tau[:nb] if uplo == blas.Lower. tau must have length n-1, and Dlatrd will panic +// otherwise. +// +// w is an n×nb matrix. On exit it contains the data to update the unreduced part +// of A. +// +// The matrix Q is represented as a product of elementary reflectors. Each reflector +// H has the form +// I - tau * v * v^T +// If uplo == blas.Upper, +// Q = H_{n-1} * H_{n-2} * ... * H_{n-nb} +// where v[:i-1] is stored in A[:i-1,i], v[i-1] = 1, and v[i:n] = 0. +// +// If uplo == blas.Lower, +// Q = H_0 * H_1 * ... * H_{nb-1} +// where v[:i+1] = 0, v[i+1] = 1, and v[i+2:n] is stored in A[i+2:n,i]. +// +// The vectors v form the n×nb matrix V which is used with W to apply a +// symmetric rank-2 update to the unreduced part of A +// A = A - V * W^T - W * V^T +// +// Dlatrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlatrd(uplo blas.Uplo, n, nb int, a []float64, lda int, e, tau, w []float64, ldw int) { + checkMatrix(n, n, a, lda) + checkMatrix(n, nb, w, ldw) + if len(e) < n-1 { + panic(badE) + } + if len(tau) < n-1 { + panic(badTau) + } + if n <= 0 { + return + } + bi := blas64.Implementation() + if uplo == blas.Upper { + for i := n - 1; i >= n-nb; i-- { + iw := i - n + nb + if i < n-1 { + // Update A(0:i, i). + bi.Dgemv(blas.NoTrans, i+1, n-i-1, -1, a[i+1:], lda, + w[i*ldw+iw+1:], 1, 1, a[i:], lda) + bi.Dgemv(blas.NoTrans, i+1, n-i-1, -1, w[iw+1:], ldw, + a[i*lda+i+1:], 1, 1, a[i:], lda) + } + if i > 0 { + // Generate elementary reflector H_i to annihilate A(0:i-2,i). + e[i-1], tau[i-1] = impl.Dlarfg(i, a[(i-1)*lda+i], a[i:], lda) + a[(i-1)*lda+i] = 1 + + // Compute W(0:i-1, i). + bi.Dsymv(blas.Upper, i, 1, a, lda, a[i:], lda, 0, w[iw:], ldw) + if i < n-1 { + bi.Dgemv(blas.Trans, i, n-i-1, 1, w[iw+1:], ldw, + a[i:], lda, 0, w[(i+1)*ldw+iw:], ldw) + bi.Dgemv(blas.NoTrans, i, n-i-1, -1, a[i+1:], lda, + w[(i+1)*ldw+iw:], ldw, 1, w[iw:], ldw) + bi.Dgemv(blas.Trans, i, n-i-1, 1, a[i+1:], lda, + a[i:], lda, 0, w[(i+1)*ldw+iw:], ldw) + bi.Dgemv(blas.NoTrans, i, n-i-1, -1, w[iw+1:], ldw, + w[(i+1)*ldw+iw:], ldw, 1, w[iw:], ldw) + } + bi.Dscal(i, tau[i-1], w[iw:], ldw) + alpha := -0.5 * tau[i-1] * bi.Ddot(i, w[iw:], ldw, a[i:], lda) + bi.Daxpy(i, alpha, a[i:], lda, w[iw:], ldw) + } + } + } else { + // Reduce first nb columns of lower triangle. + for i := 0; i < nb; i++ { + // Update A(i:n, i) + bi.Dgemv(blas.NoTrans, n-i, i, -1, a[i*lda:], lda, + w[i*ldw:], 1, 1, a[i*lda+i:], lda) + bi.Dgemv(blas.NoTrans, n-i, i, -1, w[i*ldw:], ldw, + a[i*lda:], 1, 1, a[i*lda+i:], lda) + if i < n-1 { + // Generate elementary reflector H_i to annihilate A(i+2:n,i). + e[i], tau[i] = impl.Dlarfg(n-i-1, a[(i+1)*lda+i], a[min(i+2, n-1)*lda+i:], lda) + a[(i+1)*lda+i] = 1 + + // Compute W(i+1:n,i). + bi.Dsymv(blas.Lower, n-i-1, 1, a[(i+1)*lda+i+1:], lda, + a[(i+1)*lda+i:], lda, 0, w[(i+1)*ldw+i:], ldw) + bi.Dgemv(blas.Trans, n-i-1, i, 1, w[(i+1)*ldw:], ldw, + a[(i+1)*lda+i:], lda, 0, w[i:], ldw) + bi.Dgemv(blas.NoTrans, n-i-1, i, -1, a[(i+1)*lda:], lda, + w[i:], ldw, 1, w[(i+1)*ldw+i:], ldw) + bi.Dgemv(blas.Trans, n-i-1, i, 1, a[(i+1)*lda:], lda, + a[(i+1)*lda+i:], lda, 0, w[i:], ldw) + bi.Dgemv(blas.NoTrans, n-i-1, i, -1, w[(i+1)*ldw:], ldw, + w[i:], ldw, 1, w[(i+1)*ldw+i:], ldw) + bi.Dscal(n-i-1, tau[i], w[(i+1)*ldw+i:], ldw) + alpha := -0.5 * tau[i] * bi.Ddot(n-i-1, w[(i+1)*ldw+i:], ldw, + a[(i+1)*lda+i:], lda) + bi.Daxpy(n-i-1, alpha, a[(i+1)*lda+i:], lda, + w[(i+1)*ldw+i:], ldw) + } + } + } +} diff --git a/lapack/native/dlatrs.go b/lapack/native/dlatrs.go new file mode 100644 index 00000000..afede760 --- /dev/null +++ b/lapack/native/dlatrs.go @@ -0,0 +1,350 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlatrs solves a triangular system of equations scaled to prevent overflow. It +// solves +// A * x = scale * b if trans == blas.NoTrans +// A^T * x = scale * b if trans == blas.Trans +// where the scale s is set for numeric stability. +// +// A is an n×n triangular matrix. On entry, the slice x contains the values of +// of b, and on exit it contains the solution vector x. +// +// If normin == true, cnorm is an input and cnorm[j] contains the norm of the off-diagonal +// part of the j^th column of A. If trans == blas.NoTrans, cnorm[j] must be greater +// than or equal to the infinity norm, and greater than or equal to the one-norm +// otherwise. If normin == false, then cnorm is treated as an output, and is set +// to contain the 1-norm of the off-diagonal part of the j^th column of A. +// +// Dlatrs is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dlatrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, normin bool, n int, a []float64, lda int, x []float64, cnorm []float64) (scale float64) { + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + if diag != blas.Unit && diag != blas.NonUnit { + panic(badDiag) + } + upper := uplo == blas.Upper + noTrans := trans == blas.NoTrans + nonUnit := diag == blas.NonUnit + + if n < 0 { + panic(nLT0) + } + checkMatrix(n, n, a, lda) + checkVector(n, x, 1) + checkVector(n, cnorm, 1) + + if n == 0 { + return 0 + } + smlnum := dlamchS / dlamchP + bignum := 1 / smlnum + scale = 1 + bi := blas64.Implementation() + if !normin { + if upper { + cnorm[0] = 0 + for j := 1; j < n; j++ { + cnorm[j] = bi.Dasum(j, a[j:], lda) + } + } else { + for j := 0; j < n-1; j++ { + cnorm[j] = bi.Dasum(n-j-1, a[(j+1)*lda+j:], lda) + } + cnorm[n-1] = 0 + } + } + // Scale the column norms by tscal if the maximum element in cnorm is greater than bignum. + imax := bi.Idamax(n, cnorm, 1) + tmax := cnorm[imax] + var tscal float64 + if tmax <= bignum { + tscal = 1 + } else { + tscal = 1 / (smlnum * tmax) + bi.Dscal(n, tscal, cnorm, 1) + } + + // Compute a bound on the computed solution vector to see if bi.Dtrsv can be used. + j := bi.Idamax(n, x, 1) + xmax := math.Abs(x[j]) + xbnd := xmax + var grow float64 + var jfirst, jlast, jinc int + if noTrans { + if upper { + jfirst = n - 1 + jlast = -1 + jinc = -1 + } else { + jfirst = 0 + jlast = n + jinc = 1 + } + // Compute the growth in A * x = b. + if tscal != 1 { + grow = 0 + goto Solve + } + if nonUnit { + grow = 1 / math.Max(xbnd, smlnum) + xbnd = grow + for j := jfirst; j != jlast; j += jinc { + if grow <= smlnum { + goto Solve + } + tjj := math.Abs(a[j*lda+j]) + xbnd = math.Min(xbnd, math.Min(1, tjj)*grow) + if tjj+cnorm[j] >= smlnum { + grow *= tjj / (tjj + cnorm[j]) + } else { + grow = 0 + } + } + grow = xbnd + } else { + grow = math.Min(1, 1/math.Max(xbnd, smlnum)) + for j := jfirst; j != jlast; j += jinc { + if grow <= smlnum { + goto Solve + } + grow *= 1 / (1 + cnorm[j]) + } + } + } else { + if upper { + jfirst = 0 + jlast = n + jinc = 1 + } else { + jfirst = n - 1 + jlast = -1 + jinc = -1 + } + if tscal != 1 { + grow = 0 + goto Solve + } + if nonUnit { + grow = 1 / (math.Max(xbnd, smlnum)) + xbnd = grow + for j := jfirst; j != jlast; j += jinc { + if grow <= smlnum { + goto Solve + } + xj := 1 + cnorm[j] + grow = math.Min(grow, xbnd/xj) + tjj := math.Abs(a[j*lda+j]) + if xj > tjj { + xbnd *= tjj / xj + } + } + grow = math.Min(grow, xbnd) + } else { + grow = math.Min(1, 1/math.Max(xbnd, smlnum)) + for j := jfirst; j != jlast; j += jinc { + if grow <= smlnum { + goto Solve + } + xj := 1 + cnorm[j] + grow /= xj + } + } + } + +Solve: + if grow*tscal > smlnum { + // Use the Level 2 BLAS solve if the reciprocal of the bound on + // elements of X is not too small. + bi.Dtrsv(uplo, trans, diag, n, a, lda, x, 1) + if tscal != 1 { + bi.Dscal(n, 1/tscal, cnorm, 1) + } + return scale + } + + // Use a Level 1 BLAS solve, scaling intermediate results. + if xmax > bignum { + scale = bignum / xmax + bi.Dscal(n, scale, x, 1) + xmax = bignum + } + if noTrans { + for j := jfirst; j != jlast; j += jinc { + xj := math.Abs(x[j]) + var tjj, tjjs float64 + if nonUnit { + tjjs = a[j*lda+j] * tscal + } else { + tjjs = tscal + if tscal == 1 { + goto Skip1 + } + } + tjj = math.Abs(tjjs) + if tjj > smlnum { + if tjj < 1 { + if xj > tjj*bignum { + rec := 1 / xj + bi.Dscal(n, rec, x, 1) + scale *= rec + xmax *= rec + } + } + x[j] /= tjjs + xj = math.Abs(x[j]) + } else if tjj > 0 { + if xj > tjj*bignum { + rec := (tjj * bignum) / xj + if cnorm[j] > 1 { + rec /= cnorm[j] + } + bi.Dscal(n, rec, x, 1) + scale *= rec + xmax *= rec + } + x[j] /= tjjs + xj = math.Abs(x[j]) + } else { + for i := 0; i < n; i++ { + x[i] = 0 + } + x[j] = 1 + xj = 1 + scale = 0 + xmax = 0 + } + Skip1: + if xj > 1 { + rec := 1 / xj + if cnorm[j] > (bignum-xmax)*rec { + rec *= 0.5 + bi.Dscal(n, rec, x, 1) + scale *= rec + } + } else if xj*cnorm[j] > bignum-xmax { + bi.Dscal(n, 0.5, x, 1) + scale *= 0.5 + } + if upper { + if j > 0 { + bi.Daxpy(j, -x[j]*tscal, a[j:], lda, x, 1) + i := bi.Idamax(j, x, 1) + xmax = math.Abs(x[i]) + } + } else { + if j < n-1 { + bi.Daxpy(n-j-1, -x[j]*tscal, a[(j+1)*lda+j:], lda, x[j+1:], 1) + i := j + bi.Idamax(n-j-1, x[j+1:], 1) + xmax = math.Abs(x[i]) + } + } + } + } else { + for j := jfirst; j != jlast; j += jinc { + xj := math.Abs(x[j]) + uscal := tscal + rec := 1 / math.Max(xmax, 1) + var tjjs float64 + if cnorm[j] > (bignum-xj)*rec { + rec *= 0.5 + if nonUnit { + tjjs = a[j*lda+j] * tscal + } else { + tjjs = tscal + } + tjj := math.Abs(tjjs) + if tjj > 1 { + rec = math.Min(1, rec*tjj) + uscal /= tjjs + } + if rec < 1 { + bi.Dscal(n, rec, x, 1) + scale *= rec + xmax *= rec + } + } + var sumj float64 + if uscal == 1 { + if upper { + sumj = bi.Ddot(j, a[j:], lda, x, 1) + } else if j < n-1 { + sumj = bi.Ddot(n-j-1, a[(j+1)*lda+j:], lda, x[j+1:], 1) + } + } else { + if upper { + for i := 0; i < j; i++ { + sumj += (a[i*lda+j] * uscal) * x[i] + } + } else if j < n { + for i := j + 1; i < n; i++ { + sumj += (a[i*lda+j] * uscal) * x[i] + } + } + } + if uscal == tscal { + x[j] -= sumj + xj := math.Abs(x[j]) + var tjjs float64 + if nonUnit { + tjjs = a[j*lda+j] * tscal + } else { + tjjs = tscal + if tscal == 1 { + goto Skip2 + } + } + tjj := math.Abs(tjjs) + if tjj > smlnum { + if tjj < 1 { + if xj > tjj*bignum { + rec = 1 / xj + bi.Dscal(n, rec, x, 1) + scale *= rec + xmax *= rec + } + } + x[j] /= tjjs + } else if tjj > 0 { + if xj > tjj*bignum { + rec = (tjj * bignum) / xj + bi.Dscal(n, rec, x, 1) + scale *= rec + xmax *= rec + } + x[j] /= tjjs + } else { + for i := 0; i < n; i++ { + x[i] = 0 + } + x[j] = 1 + scale = 0 + xmax = 0 + } + } else { + x[j] = x[j]/tjjs - sumj + } + Skip2: + xmax = math.Max(xmax, math.Abs(x[j])) + } + } + scale /= tscal + if tscal != 1 { + bi.Dscal(n, 1/tscal, cnorm, 1) + } + return scale +} diff --git a/lapack/native/doc.go b/lapack/native/doc.go new file mode 100644 index 00000000..d622dc50 --- /dev/null +++ b/lapack/native/doc.go @@ -0,0 +1,28 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package native is a pure-go implementation of the LAPACK API. The LAPACK API defines +// a set of algorithms for advanced matrix operations. +// +// The function definitions and implementations follow that of the netlib reference +// implementation. Please see http://www.netlib.org/lapack/explore-html/ for more +// information, and http://www.netlib.org/lapack/explore-html/d4/de1/_l_i_c_e_n_s_e_source.html +// for more license information. +// +// Slice function arguments frequently represent vectors and matrices. The data +// layout is identical to that found in https://godoc.org/github.com/gonum/blas/native. +// +// Most LAPACK functions are built on top the routines defined in the BLAS API, +// and as such the computation time for many LAPACK functions is +// dominated by BLAS calls. Here, BLAS is accessed through the +// the blas64 package (https://godoc.org/github.com/gonum/blas/blas64). In particular, +// this implies that an external BLAS library will be used if it is +// registered in blas64. +// +// The full LAPACK capability has not been implemented at present. The full +// API is very large, containing approximately 200 functions for double precision +// alone. Future additions will be focused on supporting the gonum matrix +// package (https://godoc.org/github.com/gonum/matrix/mat64), though pull requests +// with implementations and tests for LAPACK function are encouraged. +package native diff --git a/lapack/native/dorg2l.go b/lapack/native/dorg2l.go new file mode 100644 index 00000000..b51e7f89 --- /dev/null +++ b/lapack/native/dorg2l.go @@ -0,0 +1,65 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dorg2l generates an m×n matrix Q with orthonormal columns which is defined +// as the last n columns of a product of k elementary reflectors of order m. +// Q = H_{k-1} * ... * H_1 * H_0 +// See Dgelqf for more information. It must be that m >= n >= k. +// +// tau contains the scalar reflectors computed by Dgeqlf. tau must have length +// at least k, and Dorg2l will panic otherwise. +// +// work contains temporary memory, and must have length at least n. Dorg2l will +// panic otherwise. +// +// Dorg2l is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorg2l(m, n, k int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + if len(tau) < k { + panic(badTau) + } + if len(work) < n { + panic(badWork) + } + if m < n { + panic(mLTN) + } + if k > n { + panic(kGTN) + } + if n == 0 { + return + } + + // Initialize columns 0:n-k to columns of the unit matrix. + for j := 0; j < n-k; j++ { + for l := 0; l < m; l++ { + a[l*lda+j] = 0 + } + a[(m-n+j)*lda+j] = 1 + } + + bi := blas64.Implementation() + for i := 0; i < k; i++ { + ii := n - k + i + + // Apply H_i to A[0:m-k+i, 0:n-k+i] from the left. + a[(m-n+ii)*lda+ii] = 1 + impl.Dlarf(blas.Left, m-n+ii+1, ii, a[ii:], lda, tau[i], a, lda, work) + bi.Dscal(m-n+ii, -tau[i], a[ii:], lda) + a[(m-n+ii)*lda+ii] = 1 - tau[i] + + // Set A[m-k+i:m, n-k+i+1] to zero. + for l := m - n + ii + 1; l < m; l++ { + a[l*lda+ii] = 0 + } + } +} diff --git a/lapack/native/dorg2r.go b/lapack/native/dorg2r.go new file mode 100644 index 00000000..a00c183d --- /dev/null +++ b/lapack/native/dorg2r.go @@ -0,0 +1,65 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dorg2r generates an m×n matrix Q with orthonormal columns defined by the +// product of elementary reflectors as computed by Dgeqrf. +// Q = H_0 * H_1 * ... * H_{k-1} +// len(tau) >= k, 0 <= k <= n, 0 <= n <= m, len(work) >= n. +// Dorg2r will panic if these conditions are not met. +// +// Dorg2r is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorg2r(m, n, k int, a []float64, lda int, tau []float64, work []float64) { + checkMatrix(m, n, a, lda) + if len(tau) < k { + panic(badTau) + } + if len(work) < n { + panic(badWork) + } + if k > n { + panic(kGTN) + } + if n > m { + panic(mLTN) + } + if len(work) < n { + panic(badWork) + } + if n == 0 { + return + } + bi := blas64.Implementation() + // Initialize columns k+1:n to columns of the unit matrix. + for l := 0; l < m; l++ { + for j := k; j < n; j++ { + a[l*lda+j] = 0 + } + } + for j := k; j < n; j++ { + a[j*lda+j] = 1 + } + for i := k - 1; i >= 0; i-- { + for i := range work { + work[i] = 0 + } + if i < n-1 { + a[i*lda+i] = 1 + impl.Dlarf(blas.Left, m-i, n-i-1, a[i*lda+i:], lda, tau[i], a[i*lda+i+1:], lda, work) + } + if i < m-1 { + bi.Dscal(m-i-1, -tau[i], a[(i+1)*lda+i:], lda) + } + a[i*lda+i] = 1 - tau[i] + for l := 0; l < i; l++ { + a[l*lda+i] = 0 + } + } +} diff --git a/lapack/native/dorgbr.go b/lapack/native/dorgbr.go new file mode 100644 index 00000000..2205dda0 --- /dev/null +++ b/lapack/native/dorgbr.go @@ -0,0 +1,124 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/lapack" + +// Dorgbr generates one of the matrices Q or P^T computed by Dgebrd +// computed from the decomposition Dgebrd. See Dgebd2 for the description of +// Q and P^T. +// +// If vect == lapack.ApplyQ, then a is assumed to have been an m×k matrix and +// Q is of order m. If m >= k, then Dorgbr returns the first n columns of Q +// where m >= n >= k. If m < k, then Dorgbr returns Q as an m×m matrix. +// +// If vect == lapack.ApplyP, then A is assumed to have been a k×n matrix, and +// P^T is of order n. If k < n, then Dorgbr returns the first m rows of P^T, +// where n >= m >= k. If k >= n, then Dorgbr returns P^T as an n×n matrix. +// +// Dorgbr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgbr(vect lapack.DecompUpdate, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + mn := min(m, n) + wantq := vect == lapack.ApplyQ + if wantq { + if m < n || n < min(m, k) || m < min(m, k) { + panic(badDims) + } + } else { + if n < m || m < min(n, k) || n < min(n, k) { + panic(badDims) + } + } + if wantq { + if m >= k { + checkMatrix(m, k, a, lda) + } else { + checkMatrix(m, m, a, lda) + } + } else { + if n >= k { + checkMatrix(k, n, a, lda) + } else { + checkMatrix(n, n, a, lda) + } + } + work[0] = 1 + if wantq { + if m >= k { + impl.Dorgqr(m, n, k, a, lda, tau, work, -1) + } else if m > 1 { + impl.Dorgqr(m-1, m-1, m-1, a[lda+1:], lda, tau, work, -1) + } + } else { + if k < n { + impl.Dorglq(m, n, k, a, lda, tau, work, -1) + } else if n > 1 { + impl.Dorglq(n-1, n-1, n-1, a[lda+1:], lda, tau, work, -1) + } + } + lworkopt := int(work[0]) + lworkopt = max(lworkopt, mn) + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + if len(work) < lwork { + panic(badWork) + } + if lwork < mn { + panic(badWork) + } + if m == 0 || n == 0 { + work[0] = 1 + return + } + if wantq { + // Form Q, determined by a call to Dgebrd to reduce an m×k matrix. + if m >= k { + impl.Dorgqr(m, n, k, a, lda, tau, work, lwork) + } else { + // Shift the vectors which define the elementary reflectors one + // column to the right, and set the first row and column of Q to + // those of the unit matrix. + for j := m - 1; j >= 1; j-- { + a[j] = 0 + for i := j + 1; i < m; i++ { + a[i*lda+j] = a[i*lda+j-1] + } + } + a[0] = 1 + for i := 1; i < m; i++ { + a[i*lda] = 0 + } + if m > 1 { + // Form Q[1:m-1, 1:m-1] + impl.Dorgqr(m-1, m-1, m-1, a[lda+1:], lda, tau, work, lwork) + } + } + } else { + // Form P^T, determined by a call to Dgebrd to reduce a k×n matrix. + if k < n { + impl.Dorglq(m, n, k, a, lda, tau, work, lwork) + } else { + // Shift the vectors which define the elementary reflectors one + // row downward, and set the first row and column of P^T to + // those of the unit matrix. + a[0] = 1 + for i := 1; i < n; i++ { + a[i*lda] = 0 + } + for j := 1; j < n; j++ { + for i := j - 1; i >= 1; i-- { + a[i*lda+j] = a[(i-1)*lda+j] + } + a[j] = 0 + } + if n > 1 { + impl.Dorglq(n-1, n-1, n-1, a[lda+1:], lda, tau, work, lwork) + } + } + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dorghr.go b/lapack/native/dorghr.go new file mode 100644 index 00000000..fb4d57f2 --- /dev/null +++ b/lapack/native/dorghr.go @@ -0,0 +1,93 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Dorghr generates an n×n orthogonal matrix Q which is defined as the product +// of ihi-ilo elementary reflectors: +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// +// a and lda represent an n×n matrix that contains the elementary reflectors, as +// returned by Dgehrd. On return, a is overwritten by the n×n orthogonal matrix +// Q. Q will be equal to the identity matrix except in the submatrix +// Q[ilo+1:ihi+1,ilo+1:ihi+1]. +// +// ilo and ihi must have the same values as in the previous call of Dgehrd. It +// must hold that +// 0 <= ilo <= ihi < n, if n > 0, +// ilo = 0, ihi = -1, if n == 0. +// +// tau contains the scalar factors of the elementary reflectors, as returned by +// Dgehrd. tau must have length n-1. +// +// work must have length at least max(1,lwork) and lwork must be at least +// ihi-ilo. For optimum performance lwork must be at least (ihi-ilo)*nb where nb +// is the optimal blocksize. On return, work[0] will contain the optimal value +// of lwork. +// +// If lwork == -1, instead of performing Dorghr, only the optimal value of lwork +// will be stored into work[0]. +// +// If any requirement on input sizes is not met, Dorghr will panic. +// +// Dorghr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorghr(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + nh := ihi - ilo + switch { + case ilo < 0 || max(1, n) <= ilo: + panic(badIlo) + case ihi < min(ilo, n-1) || n <= ihi: + panic(badIhi) + case lwork < max(1, nh) && lwork != -1: + panic(badWork) + case len(work) < max(1, lwork): + panic(shortWork) + } + + lwkopt := max(1, nh) * impl.Ilaenv(1, "DORGQR", " ", nh, nh, nh, -1) + if lwork == -1 { + work[0] = float64(lwkopt) + return + } + + // Quick return if possible. + if n == 0 { + work[0] = 1 + return + } + + // Shift the vectors which define the elementary reflectors one column + // to the right. + for i := ilo + 2; i < ihi+1; i++ { + copy(a[i*lda+ilo+1:i*lda+i], a[i*lda+ilo:i*lda+i-1]) + } + // Set the first ilo+1 and the last n-ihi-1 rows and columns to those of + // the identity matrix. + for i := 0; i < ilo+1; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = 0 + } + a[i*lda+i] = 1 + } + for i := ilo + 1; i < ihi+1; i++ { + for j := 0; j <= ilo; j++ { + a[i*lda+j] = 0 + } + for j := i; j < n; j++ { + a[i*lda+j] = 0 + } + } + for i := ihi + 1; i < n; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = 0 + } + a[i*lda+i] = 1 + } + if nh > 0 { + // Generate Q[ilo+1:ihi+1,ilo+1:ihi+1]. + impl.Dorgqr(nh, nh, nh, a[(ilo+1)*lda+ilo+1:], lda, tau[ilo:ihi], work, lwork) + } + work[0] = float64(lwkopt) +} diff --git a/lapack/native/dorgl2.go b/lapack/native/dorgl2.go new file mode 100644 index 00000000..b8b26cb7 --- /dev/null +++ b/lapack/native/dorgl2.go @@ -0,0 +1,63 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dorgl2 generates an m×n matrix Q with orthonormal rows defined by the +// first m rows product of elementary reflectors as computed by Dgelqf. +// Q = H_0 * H_1 * ... * H_{k-1} +// len(tau) >= k, 0 <= k <= m, 0 <= m <= n, len(work) >= m. +// Dorgl2 will panic if these conditions are not met. +// +// Dorgl2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgl2(m, n, k int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + if len(tau) < k { + panic(badTau) + } + if k > m { + panic(kGTM) + } + if k > m { + panic(kGTM) + } + if m > n { + panic(nLTM) + } + if len(work) < m { + panic(badWork) + } + if m == 0 { + return + } + bi := blas64.Implementation() + if k < m { + for i := k; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = 0 + } + } + for j := k; j < m; j++ { + a[j*lda+j] = 1 + } + } + for i := k - 1; i >= 0; i-- { + if i < n-1 { + if i < m-1 { + a[i*lda+i] = 1 + impl.Dlarf(blas.Right, m-i-1, n-i, a[i*lda+i:], 1, tau[i], a[(i+1)*lda+i:], lda, work) + } + bi.Dscal(n-i-1, -tau[i], a[i*lda+i+1:], 1) + } + a[i*lda+i] = 1 - tau[i] + for l := 0; l < i; l++ { + a[i*lda+l] = 0 + } + } +} diff --git a/lapack/native/dorglq.go b/lapack/native/dorglq.go new file mode 100644 index 00000000..732624d1 --- /dev/null +++ b/lapack/native/dorglq.go @@ -0,0 +1,117 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dorglq generates an m×n matrix Q with orthonormal columns defined by the +// product of elementary reflectors as computed by Dgelqf. +// Q = H_0 * H_1 * ... * H_{k-1} +// Dorglq is the blocked version of Dorgl2 that makes greater use of level-3 BLAS +// routines. +// +// len(tau) >= k, 0 <= k <= n, and 0 <= n <= m. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= m, and the amount of blocking is limited by the usable length. +// If lwork == -1, instead of computing Dorglq the optimal work length is stored +// into work[0]. +// +// Dorglq will panic if the conditions on input values are not met. +// +// Dorglq is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorglq(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + nb := impl.Ilaenv(1, "DORGLQ", " ", m, n, k, -1) + // work is treated as an n×nb matrix + if lwork == -1 { + work[0] = float64(max(1, m) * nb) + return + } + checkMatrix(m, n, a, lda) + if k < 0 { + panic(kLT0) + } + if k > m { + panic(kGTM) + } + if m > n { + panic(nLTM) + } + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork < m { + panic(badWork) + } + if m == 0 { + return + } + nbmin := 2 // Minimum number of blocks + var nx int // Minimum number of rows + iws := m // Length of work needed + var ldwork int + if nb > 1 && nb < k { + nx = max(0, impl.Ilaenv(3, "DORGLQ", " ", m, n, k, -1)) + if nx < k { + ldwork = nb + iws = m * ldwork + if lwork < iws { + nb = lwork / m + ldwork = nb + nbmin = max(2, impl.Ilaenv(2, "DORGLQ", " ", m, n, k, -1)) + } + } + } + var ki, kk int + if nb >= nbmin && nb < k && nx < k { + // The first kk rows are handled by the blocked method. + // Note: lapack has nx here, but this means the last nx rows are handled + // serially which could be quite different than nb. + ki = ((k - nb - 1) / nb) * nb + kk = min(k, ki+nb) + for i := kk; i < m; i++ { + for j := 0; j < kk; j++ { + a[i*lda+j] = 0 + } + } + } + if kk < m { + // Perform the operation on colums kk to the end. + impl.Dorgl2(m-kk, n-kk, k-kk, a[kk*lda+kk:], lda, tau[kk:], work) + } + if kk == 0 { + return + } + // Perform the operation on column-blocks + for i := ki; i >= 0; i -= nb { + ib := min(nb, k-i) + if i+ib < m { + impl.Dlarft(lapack.Forward, lapack.RowWise, + n-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + + impl.Dlarfb(blas.Right, blas.Trans, lapack.Forward, lapack.RowWise, + m-i-ib, n-i, ib, + a[i*lda+i:], lda, + work, ldwork, + a[(i+ib)*lda+i:], lda, + work[ib*ldwork:], ldwork) + } + impl.Dorgl2(ib, n-i, ib, a[i*lda+i:], lda, tau[i:], work) + for l := i; l < i+ib; l++ { + for j := 0; j < i; j++ { + a[l*lda+j] = 0 + } + } + } +} diff --git a/lapack/native/dorgql.go b/lapack/native/dorgql.go new file mode 100644 index 00000000..060d6388 --- /dev/null +++ b/lapack/native/dorgql.go @@ -0,0 +1,130 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dorgql generates the m×n matrix Q with orthonormal columns defined as the +// last n columns of a product of k elementary reflectors of order m +// Q = H_{k-1} * ... * H_1 * H_0. +// +// It must hold that +// 0 <= k <= n <= m, +// and Dorgql will panic otherwise. +// +// On entry, the (n-k+i)-th column of A must contain the vector which defines +// the elementary reflector H_i, for i=0,...,k-1, and tau[i] must contain its +// scalar factor. On return, a contains the m×n matrix Q. +// +// tau must have length at least k, and Dorgql will panic otherwise. +// +// work must have length at least max(1,lwork), and lwork must be at least +// max(1,n), otherwise Dorgql will panic. For optimum performance lwork must +// be a sufficiently large multiple of n. +// +// If lwork == -1, instead of computing Dorgql the optimal work length is stored +// into work[0]. +// +// Dorgql is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgql(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + switch { + case n < 0: + panic(nLT0) + case m < n: + panic(mLTN) + case k < 0: + panic(kLT0) + case k > n: + panic(kGTN) + case lwork < max(1, n) && lwork != -1: + panic(badWork) + case len(work) < lwork: + panic(shortWork) + } + if lwork != -1 { + checkMatrix(m, n, a, lda) + if len(tau) < k { + panic(badTau) + } + } + + if n == 0 { + work[0] = 1 + return + } + + nb := impl.Ilaenv(1, "DORGQL", " ", m, n, k, -1) + if lwork == -1 { + work[0] = float64(n * nb) + return + } + + nbmin := 2 + var nx, ldwork int + iws := n + if nb > 1 && nb < k { + // Determine when to cross over from blocked to unblocked code. + nx = max(0, impl.Ilaenv(3, "DORGQL", " ", m, n, k, -1)) + if nx < k { + // Determine if workspace is large enough for blocked code. + iws = n * nb + if lwork < iws { + // Not enough workspace to use optimal nb: reduce nb and determine + // the minimum value of nb. + nb = lwork / n + nbmin = max(2, impl.Ilaenv(2, "DORGQL", " ", m, n, k, -1)) + } + ldwork = nb + } + } + + var kk int + if nb >= nbmin && nb < k && nx < k { + // Use blocked code after the first block. The last kk columns are handled + // by the block method. + kk = min(k, ((k-nx+nb-1)/nb)*nb) + + // Set A(m-kk:m, 0:n-kk) to zero. + for i := m - kk; i < m; i++ { + for j := 0; j < n-kk; j++ { + a[i*lda+j] = 0 + } + } + } + + // Use unblocked code for the first or only block. + impl.Dorg2l(m-kk, n-kk, k-kk, a, lda, tau, work) + if kk > 0 { + // Use blocked code. + for i := k - kk; i < k; i += nb { + ib := min(nb, k-i) + if n-k+i > 0 { + // Form the triangular factor of the block reflector + // H = H_{i+ib-1} * ... * H_{i+1} * H_i. + impl.Dlarft(lapack.Backward, lapack.ColumnWise, m-k+i+ib, ib, + a[n-k+i:], lda, tau[i:], work, ldwork) + + // Apply H to A[0:m-k+i+ib, 0:n-k+i] from the left. + impl.Dlarfb(blas.Left, blas.NoTrans, lapack.Backward, lapack.ColumnWise, + m-k+i+ib, n-k+i, ib, a[n-k+i:], lda, work, ldwork, + a, lda, work[ib*ldwork:], ldwork) + } + + // Apply H to rows 0:m-k+i+ib of current block. + impl.Dorg2l(m-k+i+ib, ib, ib, a[n-k+i:], lda, tau[i:], work) + + // Set rows m-k+i+ib:m of current block to zero. + for j := n - k + i; j < n-k+i+ib; j++ { + for l := m - k + i + ib; l < m; l++ { + a[l*lda+j] = 0 + } + } + } + } + work[0] = float64(iws) +} diff --git a/lapack/native/dorgqr.go b/lapack/native/dorgqr.go new file mode 100644 index 00000000..1482190b --- /dev/null +++ b/lapack/native/dorgqr.go @@ -0,0 +1,120 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dorgqr generates an m×n matrix Q with orthonormal columns defined by the +// product of elementary reflectors +// Q = H_0 * H_1 * ... * H_{k-1} +// as computed by Dgeqrf. +// Dorgqr is the blocked version of Dorg2r that makes greater use of level-3 BLAS +// routines. +// +// The length of tau must be at least k, and the length of work must be at least n. +// It also must be that 0 <= k <= n and 0 <= n <= m. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= n, and the amount of blocking is limited by the usable +// length. If lwork == -1, instead of computing Dorgqr the optimal work length +// is stored into work[0]. +// +// Dorgqr will panic if the conditions on input values are not met. +// +// Dorgqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { + nb := impl.Ilaenv(1, "DORGQR", " ", m, n, k, -1) + // work is treated as an n×nb matrix + if lwork == -1 { + work[0] = float64(max(1, n) * nb) + return + } + checkMatrix(m, n, a, lda) + if k < 0 { + panic(kLT0) + } + if k > n { + panic(kGTN) + } + if n > m { + panic(mLTN) + } + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork < n { + panic(badWork) + } + if n == 0 { + return + } + nbmin := 2 // Minimum number of blocks + var nx int // Minimum number of rows + iws := n // Length of work needed + var ldwork int + if nb > 1 && nb < k { + nx = max(0, impl.Ilaenv(3, "DORGQR", " ", m, n, k, -1)) + if nx < k { + ldwork = nb + iws = n * ldwork + if lwork < iws { + nb = lwork / n + ldwork = nb + nbmin = max(2, impl.Ilaenv(2, "DORGQR", " ", m, n, k, -1)) + } + } + } + var ki, kk int + if nb >= nbmin && nb < k && nx < k { + // The first kk columns are handled by the blocked method. + // Note: lapack has nx here, but this means the last nx rows are handled + // serially which could be quite different than nb. + ki = ((k - nb - 1) / nb) * nb + kk = min(k, ki+nb) + for j := kk; j < n; j++ { + for i := 0; i < kk; i++ { + a[i*lda+j] = 0 + } + } + } + if kk < n { + // Perform the operation on colums kk to the end. + impl.Dorg2r(m-kk, n-kk, k-kk, a[kk*lda+kk:], lda, tau[kk:], work) + } + if kk == 0 { + return + } + // Perform the operation on column-blocks + for i := ki; i >= 0; i -= nb { + ib := min(nb, k-i) + if i+ib < n { + impl.Dlarft(lapack.Forward, lapack.ColumnWise, + m-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + + impl.Dlarfb(blas.Left, blas.NoTrans, lapack.Forward, lapack.ColumnWise, + m-i, n-i-ib, ib, + a[i*lda+i:], lda, + work, ldwork, + a[i*lda+i+ib:], lda, + work[ib*ldwork:], ldwork) + } + impl.Dorg2r(m-i, ib, ib, a[i*lda+i:], lda, tau[i:], work) + // Set rows 0:i-1 of current block to zero + for j := i; j < i+ib; j++ { + for l := 0; l < i; l++ { + a[l*lda+j] = 0 + } + } + } +} diff --git a/lapack/native/dorgtr.go b/lapack/native/dorgtr.go new file mode 100644 index 00000000..f025e5bb --- /dev/null +++ b/lapack/native/dorgtr.go @@ -0,0 +1,99 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dorgtr generates a real orthogonal matrix Q which is defined as the product +// of n-1 elementary reflectors of order n as returned by Dsytrd. +// +// The construction of Q depends on the value of uplo: +// Q = H_{n-1} * ... * H_1 * H_0 if uplo == blas.Upper +// Q = H_0 * H_1 * ... * H_{n-1} if uplo == blas.Lower +// where H_i is constructed from the elementary reflectors as computed by Dsytrd. +// See the documentation for Dsytrd for more information. +// +// tau must have length at least n-1, and Dorgtr will panic otherwise. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= max(1,n-1), and Dorgtr will panic otherwise. The amount of blocking +// is limited by the usable length. +// If lwork == -1, instead of computing Dorgtr the optimal work length is stored +// into work[0]. +// +// Dorgtr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorgtr(uplo blas.Uplo, n int, a []float64, lda int, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + if len(tau) < n-1 { + panic(badTau) + } + if len(work) < lwork { + panic(badWork) + } + if lwork < n-1 && lwork != -1 { + panic(badWork) + } + upper := uplo == blas.Upper + if !upper && uplo != blas.Lower { + panic(badUplo) + } + + if n == 0 { + work[0] = 1 + return + } + + var nb int + if upper { + nb = impl.Ilaenv(1, "DORGQL", " ", n-1, n-1, n-1, -1) + } else { + nb = impl.Ilaenv(1, "DORGQR", " ", n-1, n-1, n-1, -1) + } + lworkopt := max(1, n-1) * nb + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + + if upper { + // Q was determined by a call to Dsytrd with uplo == blas.Upper. + // Shift the vectors which define the elementary reflectors one column + // to the left, and set the last row and column of Q to those of the unit + // matrix. + for j := 0; j < n-1; j++ { + for i := 0; i < j; i++ { + a[i*lda+j] = a[i*lda+j+1] + } + a[(n-1)*lda+j] = 0 + } + for i := 0; i < n-1; i++ { + a[i*lda+n-1] = 0 + } + a[(n-1)*lda+n-1] = 1 + + // Generate Q[0:n-1, 0:n-1]. + impl.Dorgql(n-1, n-1, n-1, a, lda, tau, work, lwork) + } else { + // Q was determined by a call to Dsytrd with uplo == blas.Upper. + // Shift the vectors which define the elementary reflectors one column + // to the right, and set the first row and column of Q to those of the unit + // matrix. + for j := n - 1; j > 0; j-- { + a[j] = 0 + for i := j + 1; i < n; i++ { + a[i*lda+j] = a[i*lda+j-1] + } + } + a[0] = 1 + for i := 1; i < n; i++ { + a[i*lda] = 0 + } + if n > 1 { + // Generate Q[1:n, 1:n]. + impl.Dorgqr(n-1, n-1, n-1, a[lda+1:], lda, tau, work, lwork) + } + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dorm2r.go b/lapack/native/dorm2r.go new file mode 100644 index 00000000..8761f4f0 --- /dev/null +++ b/lapack/native/dorm2r.go @@ -0,0 +1,88 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dorm2r multiplies a general matrix C by an orthogonal matrix from a QR factorization +// determined by Dgeqrf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of size m×k, and if side == blas.Right +// a is of size n×k. +// +// tau contains the Householder factors and is of length at least k and this function +// will panic otherwise. +// +// work is temporary storage of length at least n if side == blas.Left +// and at least m if side == blas.Right and this function will panic otherwise. +// +// Dorm2r is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorm2r(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + // Q is m x m + checkMatrix(m, k, a, lda) + if len(work) < n { + panic(badWork) + } + } else { + // Q is n x n + checkMatrix(n, k, a, lda) + if len(work) < m { + panic(badWork) + } + } + checkMatrix(m, n, c, ldc) + if m == 0 || n == 0 || k == 0 { + return + } + if len(tau) < k { + panic(badTau) + } + if left { + if notran { + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], lda, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + } + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], lda, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + } + if notran { + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], lda, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + return + } + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], lda, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } +} diff --git a/lapack/native/dormbr.go b/lapack/native/dormbr.go new file mode 100644 index 00000000..40a767ab --- /dev/null +++ b/lapack/native/dormbr.go @@ -0,0 +1,158 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dormbr applies a multiplicative update to the matrix C based on a +// decomposition computed by Dgebrd. +// +// Dormbr overwrites the m×n matrix C with +// Q * C if vect == lapack.ApplyQ, side == blas.Left, and trans == blas.NoTrans +// C * Q if vect == lapack.ApplyQ, side == blas.Right, and trans == blas.NoTrans +// Q^T * C if vect == lapack.ApplyQ, side == blas.Left, and trans == blas.Trans +// C * Q^T if vect == lapack.ApplyQ, side == blas.Right, and trans == blas.Trans +// +// P * C if vect == lapack.ApplyP, side == blas.Left, and trans == blas.NoTrans +// C * P if vect == lapack.ApplyP, side == blas.Right, and trans == blas.NoTrans +// P^T * C if vect == lapack.ApplyP, side == blas.Left, and trans == blas.Trans +// C * P^T if vect == lapack.ApplyP, side == blas.Right, and trans == blas.Trans +// where P and Q are the orthogonal matrices determined by Dgebrd when reducing +// a matrix A to bidiagonal form: A = Q * B * P^T. See Dgebrd for the +// definitions of Q and P. +// +// If vect == lapack.ApplyQ, A is assumed to have been an nq×k matrix, while if +// vect == lapack.ApplyP, A is assumed to have been a k×nq matrix. nq = m if +// side == blas.Left, while nq = n if side == blas.Right. +// +// tau must have length min(nq,k), and Dormbr will panic otherwise. tau contains +// the elementary reflectors to construct Q or P depending on the value of +// vect. +// +// work must have length at least max(1,lwork), and lwork must be either -1 or +// at least max(1,n) if side == blas.Left, and at least max(1,m) if side == +// blas.Right. For optimum performance lwork should be at least n*nb if side == +// blas.Left, and at least m*nb if side == blas.Right, where nb is the optimal +// block size. On return, work[0] will contain the optimal value of lwork. +// +// If lwork == -1, the function only calculates the optimal value of lwork and +// returns it in work[0]. +// +// Dormbr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dormbr(vect lapack.DecompUpdate, side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.NoTrans && trans != blas.Trans { + panic(badTrans) + } + if vect != lapack.ApplyP && vect != lapack.ApplyQ { + panic(badDecompUpdate) + } + nq := n + nw := m + if side == blas.Left { + nq = m + nw = n + } + if vect == lapack.ApplyQ { + checkMatrix(nq, min(nq, k), a, lda) + } else { + checkMatrix(min(nq, k), nq, a, lda) + } + if len(tau) < min(nq, k) { + panic(badTau) + } + checkMatrix(m, n, c, ldc) + if len(work) < lwork { + panic(shortWork) + } + if lwork < max(1, nw) && lwork != -1 { + panic(badWork) + } + + applyQ := vect == lapack.ApplyQ + left := side == blas.Left + var nb int + + // The current implementation does not use opts, but a future change may + // use these options so construct them. + var opts string + if side == blas.Left { + opts = "L" + } else { + opts = "R" + } + if trans == blas.Trans { + opts += "T" + } else { + opts += "N" + } + if applyQ { + if left { + nb = impl.Ilaenv(1, "DORMQR", opts, m-1, n, m-1, -1) + } else { + nb = impl.Ilaenv(1, "DORMQR", opts, m, n-1, n-1, -1) + } + } else { + if left { + nb = impl.Ilaenv(1, "DORMLQ", opts, m-1, n, m-1, -1) + } else { + nb = impl.Ilaenv(1, "DORMLQ", opts, m, n-1, n-1, -1) + } + } + lworkopt := max(1, nw) * nb + if lwork == -1 { + work[0] = float64(lworkopt) + } + if applyQ { + // Change the operation to get Q depending on the size of the initial + // matrix to Dgebrd. The size matters due to the storage location of + // the off-diagonal elements. + if nq >= k { + impl.Dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork) + } else if nq > 1 { + mi := m + ni := n - 1 + i1 := 0 + i2 := 1 + if left { + mi = m - 1 + ni = n + i1 = 1 + i2 = 0 + } + impl.Dormqr(side, trans, mi, ni, nq-1, a[1*lda:], lda, tau[:nq-1], c[i1*ldc+i2:], ldc, work, lwork) + } + work[0] = float64(lworkopt) + return + } + transt := blas.Trans + if trans == blas.Trans { + transt = blas.NoTrans + } + // Change the operation to get P depending on the size of the initial + // matrix to Dgebrd. The size matters due to the storage location of + // the off-diagonal elements. + if nq > k { + impl.Dormlq(side, transt, m, n, k, a, lda, tau, c, ldc, work, lwork) + } else if nq > 1 { + mi := m + ni := n - 1 + i1 := 0 + i2 := 1 + if left { + mi = m - 1 + ni = n + i1 = 1 + i2 = 0 + } + impl.Dormlq(side, transt, mi, ni, nq-1, a[1:], lda, tau, c[i1*ldc+i2:], ldc, work, lwork) + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dormhr.go b/lapack/native/dormhr.go new file mode 100644 index 00000000..33593bf4 --- /dev/null +++ b/lapack/native/dormhr.go @@ -0,0 +1,121 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dormhr multiplies an m×n general matrix C with an nq×nq orthogonal matrix Q +// Q * C, if side == blas.Left and trans == blas.NoTrans, +// Q^T * C, if side == blas.Left and trans == blas.Trans, +// C * Q, if side == blas.Right and trans == blas.NoTrans, +// C * Q^T, if side == blas.Right and trans == blas.Trans, +// where nq == m if side == blas.Left and nq == n if side == blas.Right. +// +// Q is defined implicitly as the product of ihi-ilo elementary reflectors, as +// returned by Dgehrd: +// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. +// Q is equal to the identity matrix except in the submatrix +// Q[ilo+1:ihi+1,ilo+1:ihi+1]. +// +// ilo and ihi must have the same values as in the previous call of Dgehrd. It +// must hold that +// 0 <= ilo <= ihi < m, if m > 0 and side == blas.Left, +// ilo = 0 and ihi = -1, if m = 0 and side == blas.Left, +// 0 <= ilo <= ihi < n, if n > 0 and side == blas.Right, +// ilo = 0 and ihi = -1, if n = 0 and side == blas.Right. +// +// a and lda represent an m×m matrix if side == blas.Left and an n×n matrix if +// side == blas.Right. The matrix contains vectors which define the elementary +// reflectors, as returned by Dgehrd. +// +// tau contains the scalar factors of the elementary reflectors, as returned by +// Dgehrd. tau must have length m-1 if side == blas.Left and n-1 if side == +// blas.Right. +// +// c and ldc represent the m×n matrix C. On return, c is overwritten by the +// product with Q. +// +// work must have length at least max(1,lwork), and lwork must be at least +// max(1,n), if side == blas.Left, and max(1,m), if side == blas.Right. For +// optimum performance lwork should be at least n*nb if side == blas.Left and +// m*nb if side == blas.Right, where nb is the optimal block size. On return, +// work[0] will contain the optimal value of lwork. +// +// If lwork == -1, instead of performing Dormhr, only the optimal value of lwork +// will be stored in work[0]. +// +// If any requirement on input sizes is not met, Dormhr will panic. +// +// Dormhr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dormhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + var ( + nq int // The order of Q. + nw int // The minimum length of work. + ) + switch side { + case blas.Left: + nq = m + nw = n + case blas.Right: + nq = n + nw = m + default: + panic(badSide) + } + switch { + case trans != blas.NoTrans && trans != blas.Trans: + panic(badTrans) + case ilo < 0 || max(1, nq) <= ilo: + panic(badIlo) + case ihi < min(ilo, nq-1) || nq <= ihi: + panic(badIhi) + case lwork < max(1, nw) && lwork != -1: + panic(badWork) + case len(work) < max(1, lwork): + panic(shortWork) + } + if lwork != -1 { + checkMatrix(m, n, c, ldc) + checkMatrix(nq, nq, a, lda) + if len(tau) != nq-1 && nq > 0 { + panic(badTau) + } + + } + + nh := ihi - ilo + var nb int + if side == blas.Left { + opts := "LN" + if trans == blas.Trans { + opts = "LT" + } + nb = impl.Ilaenv(1, "DORMQR", opts, nh, n, nh, -1) + } else { + opts := "RN" + if trans == blas.Trans { + opts = "RT" + } + nb = impl.Ilaenv(1, "DORMQR", opts, m, nh, nh, -1) + } + lwkopt := max(1, nw) * nb + if lwork == -1 { + work[0] = float64(lwkopt) + return + } + + if m == 0 || n == 0 || nh == 0 { + work[0] = 1 + return + } + if side == blas.Left { + impl.Dormqr(side, trans, nh, n, nh, a[(ilo+1)*lda+ilo:], lda, + tau[ilo:ihi], c[(ilo+1)*ldc:], ldc, work, lwork) + } else { + impl.Dormqr(side, trans, m, nh, nh, a[(ilo+1)*lda+ilo:], lda, + tau[ilo:ihi], c[ilo+1:], ldc, work, lwork) + } + work[0] = float64(lwkopt) +} diff --git a/lapack/native/dorml2.go b/lapack/native/dorml2.go new file mode 100644 index 00000000..18a2f23c --- /dev/null +++ b/lapack/native/dorml2.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dorml2 multiplies a general matrix C by an orthogonal matrix from an LQ factorization +// determined by Dgelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of side k×m, and if side == blas.Right +// a is of size k×n. +// +// tau contains the Householder factors and is of length at least k and this function will +// panic otherwise. +// +// work is temporary storage of length at least n if side == blas.Left +// and at least m if side == blas.Right and this function will panic otherwise. +// +// Dorml2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dorml2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + checkMatrix(k, m, a, lda) + if len(work) < n { + panic(badWork) + } + } else { + checkMatrix(k, n, a, lda) + if len(work) < m { + panic(badWork) + } + } + checkMatrix(m, n, c, ldc) + if m == 0 || n == 0 || k == 0 { + return + } + switch { + case left && notran: + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], 1, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + + case left && !notran: + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], 1, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + + case !left && notran: + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], 1, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + + case !left && !notran: + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], 1, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + } +} diff --git a/lapack/native/dormlq.go b/lapack/native/dormlq.go new file mode 100644 index 00000000..d9cc3ee3 --- /dev/null +++ b/lapack/native/dormlq.go @@ -0,0 +1,159 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dormlq multiplies the matrix C by the orthogonal matrix Q defined by the +// slices a and tau. A and tau are as returned from Dgelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, A is a matrix of side k×m, and if side == blas.Right +// A is of size k×n. This uses a blocked algorithm. +// +// work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m if side == blas.Left and lwork >= n if side == blas.Right, +// and this function will panic otherwise. +// Dormlq uses a block algorithm, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dormlq, +// the optimal work length will be stored into work[0]. +// +// tau contains the Householder scales and must have length at least k, and +// this function will panic otherwise. +func (impl Implementation) Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + left := side == blas.Left + if left { + checkMatrix(k, m, a, lda) + } else { + checkMatrix(k, n, a, lda) + } + checkMatrix(m, n, c, ldc) + if len(tau) < k { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + nw := m + if left { + nw = n + } + if lwork < max(1, nw) && lwork != -1 { + panic(badWork) + } + + if m == 0 || n == 0 || k == 0 { + work[0] = 1 + return + } + + const ( + nbmax = 64 + ldt = nbmax + tsize = nbmax * ldt + ) + opts := string(side) + string(trans) + nb := min(nbmax, impl.Ilaenv(1, "DORMLQ", opts, m, n, k, -1)) + lworkopt := max(1, nw)*nb + tsize + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + + nbmin := 2 + if 1 < nb && nb < k { + iws := nw*nb + tsize + if lwork < iws { + nb = (lwork - tsize) / nw + nbmin = max(2, impl.Ilaenv(2, "DORMLQ", opts, m, n, k, -1)) + } + } + if nb < nbmin || k <= nb { + // Call unblocked code. + impl.Dorml2(side, trans, m, n, k, a, lda, tau, c, ldc, work) + work[0] = float64(lworkopt) + return + } + + t := work[:tsize] + wrk := work[tsize:] + ldwrk := nb + + notran := trans == blas.NoTrans + transt := blas.NoTrans + if notran { + transt = blas.Trans + } + + switch { + case left && notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + wrk, ldwrk) + } + + case left && !notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + wrk, ldwrk) + } + + case !left && notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + wrk, ldwrk) + } + + case !left && !notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + wrk, ldwrk) + } + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dormqr.go b/lapack/native/dormqr.go new file mode 100644 index 00000000..79da3b71 --- /dev/null +++ b/lapack/native/dormqr.go @@ -0,0 +1,167 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dormqr multiplies an m×n matrix C by an orthogonal matrix Q as +// C = Q * C, if side == blas.Left and trans == blas.NoTrans, +// C = Q^T * C, if side == blas.Left and trans == blas.Trans, +// C = C * Q, if side == blas.Right and trans == blas.NoTrans, +// C = C * Q^T, if side == blas.Right and trans == blas.Trans, +// where Q is defined as the product of k elementary reflectors +// Q = H_0 * H_1 * ... * H_{k-1}. +// +// If side == blas.Left, A is an m×k matrix and 0 <= k <= m. +// If side == blas.Right, A is an n×k matrix and 0 <= k <= n. +// The ith column of A contains the vector which defines the elementary +// reflector H_i and tau[i] contains its scalar factor. tau must have length k +// and Dormqr will panic otherwise. Dgeqrf returns A and tau in the required +// form. +// +// work must have length at least max(1,lwork), and lwork must be at least n if +// side == blas.Left and at least m if side == blas.Right, otherwise Dormqr will +// panic. +// +// work is temporary storage, and lwork specifies the usable memory length. At +// minimum, lwork >= m if side == blas.Left and lwork >= n if side == +// blas.Right, and this function will panic otherwise. Larger values of lwork +// will generally give better performance. On return, work[0] will contain the +// optimal value of lwork. +// +// If lwork is -1, instead of performing Dormqr, the optimal workspace size will +// be stored into work[0]. +func (impl Implementation) Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + var nq, nw int + switch side { + default: + panic(badSide) + case blas.Left: + nq = m + nw = n + case blas.Right: + nq = n + nw = m + } + switch { + case trans != blas.NoTrans && trans != blas.Trans: + panic(badTrans) + case m < 0 || n < 0: + panic(negDimension) + case k < 0 || nq < k: + panic("lapack: invalid value of k") + case len(work) < lwork: + panic(shortWork) + case lwork < max(1, nw) && lwork != -1: + panic(badWork) + } + if lwork != -1 { + checkMatrix(nq, k, a, lda) + checkMatrix(m, n, c, ldc) + if len(tau) != k { + panic(badTau) + } + } + + if m == 0 || n == 0 || k == 0 { + work[0] = 1 + return + } + + const ( + nbmax = 64 + ldt = nbmax + tsize = nbmax * ldt + ) + opts := string(side) + string(trans) + nb := min(nbmax, impl.Ilaenv(1, "DORMQR", opts, m, n, k, -1)) + lworkopt := max(1, nw)*nb + tsize + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + + nbmin := 2 + if 1 < nb && nb < k { + if lwork < nw*nb+tsize { + nb = (lwork - tsize) / nw + nbmin = max(2, impl.Ilaenv(2, "DORMQR", opts, m, n, k, -1)) + } + } + + if nb < nbmin || k <= nb { + // Call unblocked code. + impl.Dorm2r(side, trans, m, n, k, a, lda, tau, c, ldc, work) + work[0] = float64(lworkopt) + return + } + + var ( + ldwork = nb + left = side == blas.Left + notran = trans == blas.NoTrans + ) + switch { + case left && notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + work[:tsize], ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m-i, n, ib, + a[i*lda+i:], lda, + work[:tsize], ldt, + c[i*ldc:], ldc, + work[tsize:], ldwork) + } + + case left && !notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + work[:tsize], ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m-i, n, ib, + a[i*lda+i:], lda, + work[:tsize], ldt, + c[i*ldc:], ldc, + work[tsize:], ldwork) + } + + case !left && notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + work[:tsize], ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m, n-i, ib, + a[i*lda+i:], lda, + work[:tsize], ldt, + c[i:], ldc, + work[tsize:], ldwork) + } + + case !left && !notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + work[:tsize], ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m, n-i, ib, + a[i*lda+i:], lda, + work[:tsize], ldt, + c[i:], ldc, + work[tsize:], ldwork) + } + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dormr2.go b/lapack/native/dormr2.go new file mode 100644 index 00000000..47c5ed00 --- /dev/null +++ b/lapack/native/dormr2.go @@ -0,0 +1,93 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dormr2 multiplies a general matrix C by an orthogonal matrix from a RQ factorization +// determined by Dgerqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of size k×m, and if side == blas.Right +// a is of size k×n. +// +// tau contains the Householder factors and is of length at least k and this function +// will panic otherwise. +// +// work is temporary storage of length at least n if side == blas.Left +// and at least m if side == blas.Right and this function will panic otherwise. +// +// Dormr2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dormr2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + if k > m { + panic(kGTM) + } + checkMatrix(k, m, a, lda) + if len(work) < n { + panic(badWork) + } + } else { + if k > n { + panic(kGTN) + } + checkMatrix(k, n, a, lda) + if len(work) < m { + panic(badWork) + } + } + if len(tau) < k { + panic(badTau) + } + checkMatrix(m, n, c, ldc) + + if m == 0 || n == 0 || k == 0 { + return + } + if left { + if notran { + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+(m-k+i)] + a[i*lda+(m-k+i)] = 1 + impl.Dlarf(side, m-k+i+1, n, a[i*lda:], 1, tau[i], c, ldc, work) + a[i*lda+(m-k+i)] = aii + } + return + } + for i := 0; i < k; i++ { + aii := a[i*lda+(m-k+i)] + a[i*lda+(m-k+i)] = 1 + impl.Dlarf(side, m-k+i+1, n, a[i*lda:], 1, tau[i], c, ldc, work) + a[i*lda+(m-k+i)] = aii + } + return + } + if notran { + for i := 0; i < k; i++ { + aii := a[i*lda+(n-k+i)] + a[i*lda+(n-k+i)] = 1 + impl.Dlarf(side, m, n-k+i+1, a[i*lda:], 1, tau[i], c, ldc, work) + a[i*lda+(n-k+i)] = aii + } + return + } + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+(n-k+i)] + a[i*lda+(n-k+i)] = 1 + impl.Dlarf(side, m, n-k+i+1, a[i*lda:], 1, tau[i], c, ldc, work) + a[i*lda+(n-k+i)] = aii + } +} diff --git a/lapack/native/dpocon.go b/lapack/native/dpocon.go new file mode 100644 index 00000000..2d2304e2 --- /dev/null +++ b/lapack/native/dpocon.go @@ -0,0 +1,76 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dpocon estimates the reciprocal of the condition number of a positive-definite +// matrix A given the Cholesky decomposition of A. The condition number computed +// is based on the 1-norm and the ∞-norm. +// +// anorm is the 1-norm and the ∞-norm of the original matrix A. +// +// work is a temporary data slice of length at least 3*n and Dpocon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dpocon will panic otherwise. +func (impl Implementation) Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 { + checkMatrix(n, n, a, lda) + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if len(work) < 3*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + var rcond float64 + if n == 0 { + return 1 + } + if anorm == 0 { + return rcond + } + + bi := blas64.Implementation() + var ainvnm float64 + smlnum := dlamchS + upper := uplo == blas.Upper + var kase int + var normin bool + isave := new([3]int) + var sl, su float64 + for { + ainvnm, kase = impl.Dlacn2(n, work[n:], work, iwork, ainvnm, kase, isave) + if kase == 0 { + if ainvnm != 0 { + rcond = (1 / ainvnm) / anorm + } + return rcond + } + if upper { + sl = impl.Dlatrs(blas.Upper, blas.Trans, blas.NonUnit, normin, n, a, lda, work, work[2*n:]) + normin = true + su = impl.Dlatrs(blas.Upper, blas.NoTrans, blas.NonUnit, normin, n, a, lda, work, work[2*n:]) + } else { + sl = impl.Dlatrs(blas.Lower, blas.NoTrans, blas.NonUnit, normin, n, a, lda, work, work[2*n:]) + normin = true + su = impl.Dlatrs(blas.Lower, blas.Trans, blas.NonUnit, normin, n, a, lda, work, work[2*n:]) + } + scale := sl * su + if scale != 1 { + ix := bi.Idamax(n, work, 1) + if scale == 0 || scale < math.Abs(work[ix])*smlnum { + return rcond + } + impl.Drscl(n, scale, work, 1) + } + } +} diff --git a/lapack/native/dpotf2.go b/lapack/native/dpotf2.go new file mode 100644 index 00000000..fbb31986 --- /dev/null +++ b/lapack/native/dpotf2.go @@ -0,0 +1,72 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dpotf2 computes the Cholesky decomposition of the symmetric positive definite +// matrix a. If ul == blas.Upper, then a is stored as an upper-triangular matrix, +// and a = U^T U is stored in place into a. If ul == blas.Lower, then a = L L^T +// is computed and stored in-place into a. If a is not positive definite, false +// is returned. This is the unblocked version of the algorithm. +// +// Dpotf2 is an internal routine. It is exported for testing purposes. +func (Implementation) Dpotf2(ul blas.Uplo, n int, a []float64, lda int) (ok bool) { + if ul != blas.Upper && ul != blas.Lower { + panic(badUplo) + } + checkMatrix(n, n, a, lda) + + if n == 0 { + return true + } + + bi := blas64.Implementation() + if ul == blas.Upper { + for j := 0; j < n; j++ { + ajj := a[j*lda+j] + if j != 0 { + ajj -= bi.Ddot(j, a[j:], lda, a[j:], lda) + } + if ajj <= 0 || math.IsNaN(ajj) { + a[j*lda+j] = ajj + return false + } + ajj = math.Sqrt(ajj) + a[j*lda+j] = ajj + if j < n-1 { + bi.Dgemv(blas.Trans, j, n-j-1, + -1, a[j+1:], lda, a[j:], lda, + 1, a[j*lda+j+1:], 1) + bi.Dscal(n-j-1, 1/ajj, a[j*lda+j+1:], 1) + } + } + return true + } + for j := 0; j < n; j++ { + ajj := a[j*lda+j] + if j != 0 { + ajj -= bi.Ddot(j, a[j*lda:], 1, a[j*lda:], 1) + } + if ajj <= 0 || math.IsNaN(ajj) { + a[j*lda+j] = ajj + return false + } + ajj = math.Sqrt(ajj) + a[j*lda+j] = ajj + if j < n-1 { + bi.Dgemv(blas.NoTrans, n-j-1, j, + -1, a[(j+1)*lda:], lda, a[j*lda:], 1, + 1, a[(j+1)*lda+j:], lda) + bi.Dscal(n-j-1, 1/ajj, a[(j+1)*lda+j:], lda) + } + } + return true +} diff --git a/lapack/native/dpotrf.go b/lapack/native/dpotrf.go new file mode 100644 index 00000000..d2adec95 --- /dev/null +++ b/lapack/native/dpotrf.go @@ -0,0 +1,72 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dpotrf computes the Cholesky decomposition of the symmetric positive definite +// matrix a. If ul == blas.Upper, then a is stored as an upper-triangular matrix, +// and a = U^T U is stored in place into a. If ul == blas.Lower, then a = L L^T +// is computed and stored in-place into a. If a is not positive definite, false +// is returned. This is the blocked version of the algorithm. +func (impl Implementation) Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) { + if ul != blas.Upper && ul != blas.Lower { + panic(badUplo) + } + checkMatrix(n, n, a, lda) + + if n == 0 { + return true + } + + nb := impl.Ilaenv(1, "DPOTRF", string(ul), n, -1, -1, -1) + if nb <= 1 || n <= nb { + return impl.Dpotf2(ul, n, a, lda) + } + bi := blas64.Implementation() + if ul == blas.Upper { + for j := 0; j < n; j += nb { + jb := min(nb, n-j) + bi.Dsyrk(blas.Upper, blas.Trans, jb, j, + -1, a[j:], lda, + 1, a[j*lda+j:], lda) + ok = impl.Dpotf2(blas.Upper, jb, a[j*lda+j:], lda) + if !ok { + return ok + } + if j+jb < n { + bi.Dgemm(blas.Trans, blas.NoTrans, jb, n-j-jb, j, + -1, a[j:], lda, a[j+jb:], lda, + 1, a[j*lda+j+jb:], lda) + bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, jb, n-j-jb, + 1, a[j*lda+j:], lda, + a[j*lda+j+jb:], lda) + } + } + return true + } + for j := 0; j < n; j += nb { + jb := min(nb, n-j) + bi.Dsyrk(blas.Lower, blas.NoTrans, jb, j, + -1, a[j*lda:], lda, + 1, a[j*lda+j:], lda) + ok := impl.Dpotf2(blas.Lower, jb, a[j*lda+j:], lda) + if !ok { + return ok + } + if j+jb < n { + bi.Dgemm(blas.NoTrans, blas.Trans, n-j-jb, jb, j, + -1, a[(j+jb)*lda:], lda, a[j*lda:], lda, + 1, a[(j+jb)*lda+j:], lda) + bi.Dtrsm(blas.Right, blas.Lower, blas.Trans, blas.NonUnit, n-j-jb, jb, + 1, a[j*lda+j:], lda, + a[(j+jb)*lda+j:], lda) + } + } + return true +} diff --git a/lapack/native/drscl.go b/lapack/native/drscl.go new file mode 100644 index 00000000..88d17374 --- /dev/null +++ b/lapack/native/drscl.go @@ -0,0 +1,47 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Drscl multiplies the vector x by 1/a being careful to avoid overflow or +// underflow where possible. +// +// Drscl is an internal routine. It is exported for testing purposes. +func (impl Implementation) Drscl(n int, a float64, x []float64, incX int) { + checkVector(n, x, incX) + bi := blas64.Implementation() + cden := a + cnum := 1.0 + smlnum := dlamchS + bignum := 1 / smlnum + for { + cden1 := cden * smlnum + cnum1 := cnum / bignum + var mul float64 + var done bool + switch { + case cnum != 0 && math.Abs(cden1) > math.Abs(cnum): + mul = smlnum + done = false + cden = cden1 + case math.Abs(cnum1) > math.Abs(cden): + mul = bignum + done = false + cnum = cnum1 + default: + mul = cnum / cden + done = true + } + bi.Dscal(n, mul, x, incX) + if done { + break + } + } +} diff --git a/lapack/native/dsteqr.go b/lapack/native/dsteqr.go new file mode 100644 index 00000000..cb9133d0 --- /dev/null +++ b/lapack/native/dsteqr.go @@ -0,0 +1,374 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dsteqr computes the eigenvalues and optionally the eigenvectors of a symmetric +// tridiagonal matrix using the implicit QL or QR method. The eigenvectors of a +// full or band symmetric matrix can also be found if Dsytrd, Dsptrd, or Dsbtrd +// have been used to reduce this matrix to tridiagonal form. +// +// d, on entry, contains the diagonal elements of the tridiagonal matrix. On exit, +// d contains the eigenvalues in ascending order. d must have length n and +// Dsteqr will panic otherwise. +// +// e, on entry, contains the off-diagonal elements of the tridiagonal matrix on +// entry, and is overwritten during the call to Dsteqr. e must have length n-1 and +// Dsteqr will panic otherwise. +// +// z, on entry, contains the n×n orthogonal matrix used in the reduction to +// tridiagonal form if compz == lapack.OriginalEV. On exit, if +// compz == lapack.OriginalEV, z contains the orthonormal eigenvectors of the +// original symmetric matrix, and if compz == lapack.TridiagEV, z contains the +// orthonormal eigenvectors of the symmetric tridiagonal matrix. z is not used +// if compz == lapack.None. +// +// work must have length at least max(1, 2*n-2) if the eigenvectors are computed, +// and Dsteqr will panic otherwise. +// +// Dsteqr is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsteqr(compz lapack.EVComp, n int, d, e, z []float64, ldz int, work []float64) (ok bool) { + if n < 0 { + panic(nLT0) + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if compz != lapack.None && compz != lapack.TridiagEV && compz != lapack.OriginalEV { + panic(badEVComp) + } + if compz != lapack.None { + if len(work) < max(1, 2*n-2) { + panic(badWork) + } + checkMatrix(n, n, z, ldz) + } + + var icompz int + if compz == lapack.OriginalEV { + icompz = 1 + } else if compz == lapack.TridiagEV { + icompz = 2 + } + + if n == 0 { + return true + } + if n == 1 { + if icompz == 2 { + z[0] = 1 + } + return true + } + + bi := blas64.Implementation() + + eps := dlamchE + eps2 := eps * eps + safmin := dlamchS + safmax := 1 / safmin + ssfmax := math.Sqrt(safmax) / 3 + ssfmin := math.Sqrt(safmin) / eps2 + + // Compute the eigenvalues and eigenvectors of the tridiagonal matrix. + if icompz == 2 { + impl.Dlaset(blas.All, n, n, 0, 1, z, ldz) + } + const maxit = 30 + nmaxit := n * maxit + + jtot := 0 + + // Determine where the matrix splits and choose QL or QR iteration for each + // block, according to whether top or bottom diagonal element is smaller. + l1 := 0 + nm1 := n - 1 + + type scaletype int + const ( + none scaletype = iota + down + up + ) + var iscale scaletype + + for { + if l1 > n-1 { + // Order eigenvalues and eigenvectors. + if icompz == 0 { + impl.Dlasrt(lapack.SortIncreasing, n, d) + } else { + // TODO(btracey): Consider replacing this sort with a call to sort.Sort. + for ii := 1; ii < n; ii++ { + i := ii - 1 + k := i + p := d[i] + for j := ii; j < n; j++ { + if d[j] < p { + k = j + p = d[j] + } + } + if k != i { + d[k] = d[i] + d[i] = p + bi.Dswap(n, z[i:], ldz, z[k:], ldz) + } + } + } + return true + } + if l1 > 0 { + e[l1-1] = 0 + } + var m int + if l1 <= nm1 { + for m = l1; m < nm1; m++ { + test := math.Abs(e[m]) + if test == 0 { + break + } + if test <= (math.Sqrt(math.Abs(d[m]))*math.Sqrt(math.Abs(d[m+1])))*eps { + e[m] = 0 + break + } + } + } + l := l1 + lsv := l + lend := m + lendsv := lend + l1 = m + 1 + if lend == l { + continue + } + + // Scale submatrix in rows and columns L to Lend + anorm := impl.Dlanst(lapack.MaxAbs, lend-l+1, d[l:], e[l:]) + switch { + case anorm == 0: + continue + case anorm > ssfmax: + iscale = down + // Pretend that d and e are matrices with 1 column. + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmax, lend-l+1, 1, d[l:], 1) + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmax, lend-l, 1, e[l:], 1) + case anorm < ssfmin: + iscale = up + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmin, lend-l+1, 1, d[l:], 1) + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmin, lend-l, 1, e[l:], 1) + } + + // Choose between QL and QR. + if math.Abs(d[lend]) < math.Abs(d[l]) { + lend = lsv + l = lendsv + } + if lend > l { + // QL Iteration. Look for small subdiagonal element. + for { + if l != lend { + for m = l; m < lend; m++ { + v := math.Abs(e[m]) + if v*v <= (eps2*math.Abs(d[m]))*math.Abs(d[m+1])+safmin { + break + } + } + } else { + m = lend + } + if m < lend { + e[m] = 0 + } + p := d[l] + if m == l { + // Eigenvalue found. + l++ + if l > lend { + break + } + continue + } + + // If remaining matrix is 2×2, use Dlae2 to compute its eigensystem. + if m == l+1 { + if icompz > 0 { + d[l], d[l+1], work[l], work[n-1+l] = impl.Dlaev2(d[l], e[l], d[l+1]) + impl.Dlasr(blas.Right, lapack.Variable, lapack.Backward, + n, 2, work[l:], work[n-1+l:], z[l:], ldz) + } else { + d[l], d[l+1] = impl.Dlae2(d[l], e[l], d[l+1]) + } + e[l] = 0 + l += 2 + if l > lend { + break + } + continue + } + + if jtot == nmaxit { + break + } + jtot++ + + // Form shift + g := (d[l+1] - p) / (2 * e[l]) + r := impl.Dlapy2(g, 1) + g = d[m] - p + e[l]/(g+math.Copysign(r, g)) + s := 1.0 + c := 1.0 + p = 0.0 + + // Inner loop + for i := m - 1; i >= l; i-- { + f := s * e[i] + b := c * e[i] + c, s, r = impl.Dlartg(g, f) + if i != m-1 { + e[i+1] = r + } + g = d[i+1] - p + r = (d[i]-g)*s + 2*c*b + p = s * r + d[i+1] = g + p + g = c*r - b + + // If eigenvectors are desired, then save rotations. + if icompz > 0 { + work[i] = c + work[n-1+i] = -s + } + } + // If eigenvectors are desired, then apply saved rotations. + if icompz > 0 { + mm := m - l + 1 + impl.Dlasr(blas.Right, lapack.Variable, lapack.Backward, + n, mm, work[l:], work[n-1+l:], z[l:], ldz) + } + d[l] -= p + e[l] = g + } + } else { + // QR Iteration. + // Look for small superdiagonal element. + for { + if l != lend { + for m = l; m > lend; m-- { + v := math.Abs(e[m-1]) + if v*v <= (eps2*math.Abs(d[m])*math.Abs(d[m-1]) + safmin) { + break + } + } + } else { + m = lend + } + if m > lend { + e[m-1] = 0 + } + p := d[l] + if m == l { + // Eigenvalue found + l-- + if l < lend { + break + } + continue + } + + // If remaining matrix is 2×2, use Dlae2 to compute its eigenvalues. + if m == l-1 { + if icompz > 0 { + d[l-1], d[l], work[m], work[n-1+m] = impl.Dlaev2(d[l-1], e[l-1], d[l]) + impl.Dlasr(blas.Right, lapack.Variable, lapack.Forward, + n, 2, work[m:], work[n-1+m:], z[l-1:], ldz) + } else { + d[l-1], d[l] = impl.Dlae2(d[l-1], e[l-1], d[l]) + } + e[l-1] = 0 + l -= 2 + if l < lend { + break + } + continue + } + if jtot == nmaxit { + break + } + jtot++ + + // Form shift. + g := (d[l-1] - p) / (2 * e[l-1]) + r := impl.Dlapy2(g, 1) + g = d[m] - p + (e[l-1])/(g+math.Copysign(r, g)) + s := 1.0 + c := 1.0 + p = 0.0 + + // Inner loop. + for i := m; i < l; i++ { + f := s * e[i] + b := c * e[i] + c, s, r = impl.Dlartg(g, f) + if i != m { + e[i-1] = r + } + g = d[i] - p + r = (d[i+1]-g)*s + 2*c*b + p = s * r + d[i] = g + p + g = c*r - b + + // If eigenvectors are desired, then save rotations. + if icompz > 0 { + work[i] = c + work[n-1+i] = s + } + } + + // If eigenvectors are desired, then apply saved rotations. + if icompz > 0 { + mm := l - m + 1 + impl.Dlasr(blas.Right, lapack.Variable, lapack.Forward, + n, mm, work[m:], work[n-1+m:], z[m:], ldz) + } + d[l] -= p + e[l-1] = g + } + } + + // Undo scaling if necessary. + switch iscale { + case down: + // Pretend that d and e are matrices with 1 column. + impl.Dlascl(lapack.General, 0, 0, ssfmax, anorm, lendsv-lsv+1, 1, d[lsv:], 1) + impl.Dlascl(lapack.General, 0, 0, ssfmax, anorm, lendsv-lsv, 1, e[lsv:], 1) + case up: + impl.Dlascl(lapack.General, 0, 0, ssfmin, anorm, lendsv-lsv+1, 1, d[lsv:], 1) + impl.Dlascl(lapack.General, 0, 0, ssfmin, anorm, lendsv-lsv, 1, e[lsv:], 1) + } + + // Check for no convergence to an eigenvalue after a total of n*maxit iterations. + if jtot >= nmaxit { + break + } + } + for i := 0; i < n-1; i++ { + if e[i] != 0 { + return false + } + } + return true +} diff --git a/lapack/native/dsterf.go b/lapack/native/dsterf.go new file mode 100644 index 00000000..3c9969fc --- /dev/null +++ b/lapack/native/dsterf.go @@ -0,0 +1,278 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dsterf computes all eigenvalues of a symmetric tridiagonal matrix using the +// Pal-Walker-Kahan variant of the QL or QR algorithm. +// +// d contains the diagonal elements of the tridiagonal matrix on entry, and +// contains the eigenvalues in ascending order on exit. d must have length at +// least n, or Dsterf will panic. +// +// e contains the off-diagonal elements of the tridiagonal matrix on entry, and is +// overwritten during the call to Dsterf. e must have length of at least n-1 or +// Dsterf will panic. +// +// Dsterf is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsterf(n int, d, e []float64) (ok bool) { + if n < 0 { + panic(nLT0) + } + if n == 0 { + return true + } + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + + const ( + none = 0 // The values are not scaled. + down = 1 // The values are scaled below ssfmax threshold. + up = 2 // The values are scaled below ssfmin threshold. + ) + + // Determine the unit roundoff for this environment. + eps := dlamchE + eps2 := eps * eps + safmin := dlamchS + safmax := 1 / safmin + ssfmax := math.Sqrt(safmax) / 3 + ssfmin := math.Sqrt(safmin) / eps2 + + // Compute the eigenvalues of the tridiagonal matrix. + maxit := 30 + nmaxit := n * maxit + jtot := 0 + + l1 := 0 + + for { + if l1 > n-1 { + impl.Dlasrt(lapack.SortIncreasing, n, d) + return true + } + if l1 > 0 { + e[l1-1] = 0 + } + var m int + for m = l1; m < n-1; m++ { + if math.Abs(e[m]) <= math.Sqrt(math.Abs(d[m]))*math.Sqrt(math.Abs(d[m+1]))*eps { + e[m] = 0 + break + } + } + + l := l1 + lsv := l + lend := m + lendsv := lend + l1 = m + 1 + if lend == 0 { + continue + } + + // Scale submatrix in rows and columns l to lend. + anorm := impl.Dlanst(lapack.MaxAbs, lend-l+1, d[l:], e[l:]) + iscale := none + if anorm == 0 { + continue + } + if anorm > ssfmax { + iscale = down + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmax, lend-l+1, 1, d[l:], n) + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmax, lend-l, 1, e[l:], n) + } else if anorm < ssfmin { + iscale = up + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmin, lend-l+1, 1, d[l:], n) + impl.Dlascl(lapack.General, 0, 0, anorm, ssfmin, lend-l, 1, e[l:], n) + } + + el := e[l:lend] + for i, v := range el { + el[i] *= v + } + + // Choose between QL and QR iteration. + if math.Abs(d[lend]) < math.Abs(d[l]) { + lend = lsv + l = lendsv + } + if lend >= l { + // QL Iteration. + // Look for small sub-diagonal element. + for { + if l != lend { + for m = l; m < lend; m++ { + if math.Abs(e[m]) <= eps2*(math.Abs(d[m]*d[m+1])) { + break + } + } + } else { + m = lend + } + if m < lend { + e[m] = 0 + } + p := d[l] + if m == l { + // Eigenvalue found. + l++ + if l > lend { + break + } + continue + } + // If remaining matrix is 2 by 2, use Dlae2 to compute its eigenvalues. + if m == l+1 { + d[l], d[l+1] = impl.Dlae2(d[l], math.Sqrt(e[l]), d[l+1]) + e[l] = 0 + l += 2 + if l > lend { + break + } + continue + } + if jtot == nmaxit { + break + } + jtot++ + + // Form shift. + rte := math.Sqrt(e[l]) + sigma := (d[l+1] - p) / (2 * rte) + r := impl.Dlapy2(sigma, 1) + sigma = p - (rte / (sigma + math.Copysign(r, sigma))) + + c := 1.0 + s := 0.0 + gamma := d[m] - sigma + p = gamma * gamma + + // Inner loop. + for i := m - 1; i >= l; i-- { + bb := e[i] + r := p + bb + if i != m-1 { + e[i+1] = s * r + } + oldc := c + c = p / r + s = bb / r + oldgam := gamma + alpha := d[i] + gamma = c*(alpha-sigma) - s*oldgam + d[i+1] = oldgam + (alpha - gamma) + if c != 0 { + p = (gamma * gamma) / c + } else { + p = oldc * bb + } + } + e[l] = s * p + d[l] = sigma + gamma + } + } else { + for { + // QR Iteration. + // Look for small super-diagonal element. + for m = l; m > lend; m-- { + if math.Abs(e[m-1]) <= eps2*math.Abs(d[m]*d[m-1]) { + break + } + } + if m > lend { + e[m-1] = 0 + } + p := d[l] + if m == l { + // Eigenvalue found. + l-- + if l < lend { + break + } + continue + } + + // If remaining matrix is 2 by 2, use Dlae2 to compute its eigenvalues. + if m == l-1 { + d[l], d[l-1] = impl.Dlae2(d[l], math.Sqrt(e[l-1]), d[l-1]) + e[l-1] = 0 + l -= 2 + if l < lend { + break + } + continue + } + if jtot == nmaxit { + break + } + jtot++ + + // Form shift. + rte := math.Sqrt(e[l-1]) + sigma := (d[l-1] - p) / (2 * rte) + r := impl.Dlapy2(sigma, 1) + sigma = p - (rte / (sigma + math.Copysign(r, sigma))) + + c := 1.0 + s := 0.0 + gamma := d[m] - sigma + p = gamma * gamma + + // Inner loop. + for i := m; i < l; i++ { + bb := e[i] + r := p + bb + if i != m { + e[i-1] = s * r + } + oldc := c + c = p / r + s = bb / r + oldgam := gamma + alpha := d[i+1] + gamma = c*(alpha-sigma) - s*oldgam + d[i] = oldgam + alpha - gamma + if c != 0 { + p = (gamma * gamma) / c + } else { + p = oldc * bb + } + } + e[l-1] = s * p + d[l] = sigma + gamma + } + } + + // Undo scaling if necessary + switch iscale { + case down: + impl.Dlascl(lapack.General, 0, 0, ssfmax, anorm, lendsv-lsv+1, 1, d[lsv:], n) + case up: + impl.Dlascl(lapack.General, 0, 0, ssfmin, anorm, lendsv-lsv+1, 1, d[lsv:], n) + } + + // Check for no convergence to an eigenvalue after a total of n*maxit iterations. + if jtot >= nmaxit { + break + } + } + for _, v := range e[:n-1] { + if v != 0 { + return false + } + } + impl.Dlasrt(lapack.SortIncreasing, n, d) + return true +} diff --git a/lapack/native/dsyev.go b/lapack/native/dsyev.go new file mode 100644 index 00000000..032bcbb4 --- /dev/null +++ b/lapack/native/dsyev.go @@ -0,0 +1,113 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dsyev computes all eigenvalues and, optionally, the eigenvectors of a real +// symmetric matrix A. +// +// w contains the eigenvalues in ascending order upon return. w must have length +// at least n, and Dsyev will panic otherwise. +// +// On entry, a contains the elements of the symmetric matrix A in the triangular +// portion specified by uplo. If jobz == lapack.ComputeEV a contains the +// orthonormal eigenvectors of A on exit, otherwise on exit the specified +// triangular region is overwritten. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= 3*n-1, and Dsyev will panic otherwise. The amount of blocking is +// limited by the usable length. If lwork == -1, instead of computing Dsyev the +// optimal work length is stored into work[0]. +func (impl Implementation) Dsyev(jobz lapack.EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool) { + checkMatrix(n, n, a, lda) + upper := uplo == blas.Upper + wantz := jobz == lapack.ComputeEV + var opts string + if upper { + opts = "U" + } else { + opts = "L" + } + nb := impl.Ilaenv(1, "DSYTRD", opts, n, -1, -1, -1) + lworkopt := max(1, (nb+2)*n) + work[0] = float64(lworkopt) + if lwork == -1 { + return + } + if len(work) < lwork { + panic(badWork) + } + if lwork < 3*n-1 { + panic(badWork) + } + if n == 0 { + return true + } + if n == 1 { + w[0] = a[0] + work[0] = 2 + if wantz { + a[0] = 1 + } + return true + } + safmin := dlamchS + eps := dlamchP + smlnum := safmin / eps + bignum := 1 / smlnum + rmin := math.Sqrt(smlnum) + rmax := math.Sqrt(bignum) + + // Scale matrix to allowable range, if necessary. + anrm := impl.Dlansy(lapack.MaxAbs, uplo, n, a, lda, work) + scaled := false + var sigma float64 + if anrm > 0 && anrm < rmin { + scaled = true + sigma = rmin / anrm + } else if anrm > rmax { + scaled = true + sigma = rmax / anrm + } + if scaled { + kind := lapack.LowerTri + if upper { + kind = lapack.UpperTri + } + impl.Dlascl(kind, 0, 0, 1, sigma, n, n, a, lda) + } + var inde int + indtau := inde + n + indwork := indtau + n + llwork := lwork - indwork + impl.Dsytrd(uplo, n, a, lda, w, work[inde:], work[indtau:], work[indwork:], llwork) + + // For eigenvalues only, call Dsterf. For eigenvectors, first call Dorgtr + // to generate the orthogonal matrix, then call Dsteqr. + if !wantz { + ok = impl.Dsterf(n, w, work[inde:]) + } else { + impl.Dorgtr(uplo, n, a, lda, work[indtau:], work[indwork:], llwork) + ok = impl.Dsteqr(lapack.EVComp(jobz), n, w, work[inde:], a, lda, work[indtau:]) + } + if !ok { + return false + } + + // If the matrix was scaled, then rescale eigenvalues appropriately. + if scaled { + bi := blas64.Implementation() + bi.Dscal(n, 1/sigma, w, 1) + } + work[0] = float64(lworkopt) + return true +} diff --git a/lapack/native/dsytd2.go b/lapack/native/dsytd2.go new file mode 100644 index 00000000..f0df454e --- /dev/null +++ b/lapack/native/dsytd2.go @@ -0,0 +1,123 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dsytd2 reduces a symmetric n×n matrix A to symmetric tridiagonal form T by an +// orthogonal similarity transformation +// Q^T * A * Q = T +// On entry, the matrix is contained in the specified triangle of a. On exit, +// if uplo == blas.Upper, the diagonal and first super-diagonal of a are +// overwritten with the elements of T. The elements above the first super-diagonal +// are overwritten with the the elementary reflectors that are used with the +// elements written to tau in order to construct Q. If uplo == blas.Lower, the +// elements are written in the lower triangular region. +// +// d must have length at least n. e and tau must have length at least n-1. Dsytd2 +// will panic if these sizes are not met. +// +// Q is represented as a product of elementary reflectors. +// If uplo == blas.Upper +// Q = H_{n-2} * ... * H_1 * H_0 +// and if uplo == blas.Lower +// Q = H_0 * H_1 * ... * H_{n-2} +// where +// H_i = I - tau * v * v^T +// where tau is stored in tau[i], and v is stored in a. +// +// If uplo == blas.Upper, v[0:i-1] is stored in A[0:i-1,i+1], v[i] = 1, and +// v[i+1:] = 0. The elements of a are +// [ d e v2 v3 v4] +// [ d e v3 v4] +// [ d e v4] +// [ d e] +// [ d] +// If uplo == blas.Lower, v[0:i+1] = 0, v[i+1] = 1, and v[i+2:] is stored in +// A[i+2:n,i]. +// The elements of a are +// [ d ] +// [ e d ] +// [v1 e d ] +// [v1 v2 e d ] +// [v1 v2 v3 e d] +// +// Dsytd2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsytd2(uplo blas.Uplo, n int, a []float64, lda int, d, e, tau []float64) { + checkMatrix(n, n, a, lda) + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if len(tau) < n-1 { + panic(badTau) + } + if n <= 0 { + return + } + bi := blas64.Implementation() + if uplo == blas.Upper { + // Reduce the upper triangle of A. + for i := n - 2; i >= 0; i-- { + // Generate elementary reflector H_i = I - tau * v * v^T to + // annihilate A[i:i-1, i+1]. + var taui float64 + a[i*lda+i+1], taui = impl.Dlarfg(i+1, a[i*lda+i+1], a[i+1:], lda) + e[i] = a[i*lda+i+1] + if taui != 0 { + // Apply H_i from both sides to A[0:i,0:i]. + a[i*lda+i+1] = 1 + + // Compute x := tau * A * v storing x in tau[0:i]. + bi.Dsymv(uplo, i+1, taui, a, lda, a[i+1:], lda, 0, tau, 1) + + // Compute w := x - 1/2 * tau * (x^T * v) * v. + alpha := -0.5 * taui * bi.Ddot(i+1, tau, 1, a[i+1:], lda) + bi.Daxpy(i+1, alpha, a[i+1:], lda, tau, 1) + + // Apply the transformation as a rank-2 update + // A = A - v * w^T - w * v^T. + bi.Dsyr2(uplo, i+1, -1, a[i+1:], lda, tau, 1, a, lda) + a[i*lda+i+1] = e[i] + } + d[i+1] = a[(i+1)*lda+i+1] + tau[i] = taui + } + d[0] = a[0] + return + } + // Reduce the lower triangle of A. + for i := 0; i < n-1; i++ { + // Generate elementary reflector H_i = I - tau * v * v^T to + // annihilate A[i+2:n, i]. + var taui float64 + a[(i+1)*lda+i], taui = impl.Dlarfg(n-i-1, a[(i+1)*lda+i], a[min(i+2, n-1)*lda+i:], lda) + e[i] = a[(i+1)*lda+i] + if taui != 0 { + // Apply H_i from both sides to A[i+1:n, i+1:n]. + a[(i+1)*lda+i] = 1 + + // Compute x := tau * A * v, storing y in tau[i:n-1]. + bi.Dsymv(uplo, n-i-1, taui, a[(i+1)*lda+i+1:], lda, a[(i+1)*lda+i:], lda, 0, tau[i:], 1) + + // Compute w := x - 1/2 * tau * (x^T * v) * v. + alpha := -0.5 * taui * bi.Ddot(n-i-1, tau[i:], 1, a[(i+1)*lda+i:], lda) + bi.Daxpy(n-i-1, alpha, a[(i+1)*lda+i:], lda, tau[i:], 1) + + // Apply the transformation as a rank-2 update + // A = A - v * w^T - w * v^T. + bi.Dsyr2(uplo, n-i-1, -1, a[(i+1)*lda+i:], lda, tau[i:], 1, a[(i+1)*lda+i+1:], lda) + a[(i+1)*lda+i] = e[i] + } + d[i] = a[i*lda+i] + tau[i] = taui + } + d[n-1] = a[(n-1)*lda+n-1] +} diff --git a/lapack/native/dsytrd.go b/lapack/native/dsytrd.go new file mode 100644 index 00000000..4f6f15c9 --- /dev/null +++ b/lapack/native/dsytrd.go @@ -0,0 +1,178 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dsytrd reduces a symmetric n×n matrix A to symmetric tridiagonal form by an +// orthogonal similarity transformation +// Q^T * A * Q = T +// where Q is an orthonormal matrix and T is symmetric and tridiagonal. +// +// On entry, a contains the elements of the input matrix in the triangle specified +// by uplo. On exit, the diagonal and sub/super-diagonal are overwritten by the +// corresponding elements of the tridiagonal matrix T. The remaining elements in +// the triangle, along with the array tau, contain the data to construct Q as +// the product of elementary reflectors. +// +// If uplo == blas.Upper, Q is constructed with +// Q = H_{n-2} * ... * H_1 * H_0 +// where +// H_i = I - tau_i * v * v^T +// v is constructed as v[i+1:n] = 0, v[i] = 1, v[0:i-1] is stored in A[0:i-1, i+1]. +// The elements of A are +// [ d e v1 v2 v3] +// [ d e v2 v3] +// [ d e v3] +// [ d e] +// [ e] +// +// If uplo == blas.Lower, Q is constructed with +// Q = H_0 * H_1 * ... * H_{n-2} +// where +// H_i = I - tau_i * v * v^T +// v is constructed as v[0:i+1] = 0, v[i+1] = 1, v[i+2:n] is stored in A[i+2:n, i]. +// The elements of A are +// [ d ] +// [ e d ] +// [v0 e d ] +// [v0 v1 e d ] +// [v0 v1 v2 e d] +// +// d must have length n, and e and tau must have length n-1. Dsytrd will panic if +// these conditions are not met. +// +// work is temporary storage, and lwork specifies the usable memory length. At minimum, +// lwork >= 1, and Dsytrd will panic otherwise. The amount of blocking is +// limited by the usable length. +// If lwork == -1, instead of computing Dsytrd the optimal work length is stored +// into work[0]. +// +// Dsytrd is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dsytrd(uplo blas.Uplo, n int, a []float64, lda int, d, e, tau, work []float64, lwork int) { + checkMatrix(n, n, a, lda) + if len(d) < n { + panic(badD) + } + if len(e) < n-1 { + panic(badE) + } + if len(tau) < n-1 { + panic(badTau) + } + if len(work) < lwork { + panic(shortWork) + } + if lwork != -1 && lwork < 1 { + panic(badWork) + } + + var upper bool + var opts string + switch uplo { + case blas.Upper: + upper = true + opts = "U" + case blas.Lower: + opts = "L" + default: + panic(badUplo) + } + + if n == 0 { + work[0] = 1 + return + } + + nb := impl.Ilaenv(1, "DSYTRD", opts, n, -1, -1, -1) + lworkopt := n * nb + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + + nx := n + bi := blas64.Implementation() + var ldwork int + if 1 < nb && nb < n { + // Determine when to cross over from blocked to unblocked code. The last + // block is always handled by unblocked code. + opts := "L" + if upper { + opts = "U" + } + nx = max(nb, impl.Ilaenv(3, "DSYTRD", opts, n, -1, -1, -1)) + if nx < n { + // Determine if workspace is large enough for blocked code. + ldwork = nb + iws := n * ldwork + if lwork < iws { + // Not enough workspace to use optimal nb: determine the minimum + // value of nb and reduce nb or force use of unblocked code by + // setting nx = n. + nb = max(lwork/n, 1) + nbmin := impl.Ilaenv(2, "DSYTRD", opts, n, -1, -1, -1) + if nb < nbmin { + nx = n + } + } + } else { + nx = n + } + } else { + nb = 1 + } + ldwork = nb + + if upper { + // Reduce the upper triangle of A. Columns 0:kk are handled by the + // unblocked method. + var i int + kk := n - ((n-nx+nb-1)/nb)*nb + for i = n - nb; i >= kk; i -= nb { + // Reduce columns i:i+nb to tridiagonal form and form the matrix W + // which is needed to update the unreduced part of the matrix. + impl.Dlatrd(uplo, i+nb, nb, a, lda, e, tau, work, ldwork) + + // Update the unreduced submatrix A[0:i-1,0:i-1], using an update + // of the form A = A - V*W^T - W*V^T. + bi.Dsyr2k(uplo, blas.NoTrans, i, nb, -1, a[i:], lda, work, ldwork, 1, a, lda) + + // Copy superdiagonal elements back into A, and diagonal elements into D. + for j := i; j < i+nb; j++ { + a[(j-1)*lda+j] = e[j-1] + d[j] = a[j*lda+j] + } + } + // Use unblocked code to reduce the last or only block + // check that i == kk. + impl.Dsytd2(uplo, kk, a, lda, d, e, tau) + } else { + var i int + // Reduce the lower triangle of A. + for i = 0; i < n-nx; i += nb { + // Reduce columns 0:i+nb to tridiagonal form and form the matrix W + // which is needed to update the unreduced part of the matrix. + impl.Dlatrd(uplo, n-i, nb, a[i*lda+i:], lda, e[i:], tau[i:], work, ldwork) + + // Update the unreduced submatrix A[i+ib:n, i+ib:n], using an update + // of the form A = A + V*W^T - W*V^T. + bi.Dsyr2k(uplo, blas.NoTrans, n-i-nb, nb, -1, a[(i+nb)*lda+i:], lda, + work[nb*ldwork:], ldwork, 1, a[(i+nb)*lda+i+nb:], lda) + + // Copy subdiagonal elements back into A, and diagonal elements into D. + for j := i; j < i+nb; j++ { + a[(j+1)*lda+j] = e[j] + d[j] = a[j*lda+j] + } + } + // Use unblocked code to reduce the last or only block. + impl.Dsytd2(uplo, n-i, a[i*lda+i:], lda, d[i:], e[i:], tau[i:]) + } + work[0] = float64(lworkopt) +} diff --git a/lapack/native/dtgsja.go b/lapack/native/dtgsja.go new file mode 100644 index 00000000..a47e2526 --- /dev/null +++ b/lapack/native/dtgsja.go @@ -0,0 +1,357 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dtgsja computes the generalized singular value decomposition (GSVD) +// of two real upper triangular or trapezoidal matrices A and B. +// +// A and B have the following forms, which may be obtained by the +// preprocessing subroutine Dggsvp from a general m×n matrix A and p×n +// matrix B: +// +// n-k-l k l +// A = k [ 0 A12 A13 ] if m-k-l >= 0; +// l [ 0 0 A23 ] +// m-k-l [ 0 0 0 ] +// +// n-k-l k l +// A = k [ 0 A12 A13 ] if m-k-l < 0; +// m-k [ 0 0 A23 ] +// +// n-k-l k l +// B = l [ 0 0 B13 ] +// p-l [ 0 0 0 ] +// +// where the k×k matrix A12 and l×l matrix B13 are non-singular +// upper triangular. A23 is l×l upper triangular if m-k-l >= 0, +// otherwise A23 is (m-k)×l upper trapezoidal. +// +// On exit, +// +// U^T*A*Q = D1*[ 0 R ], V^T*B*Q = D2*[ 0 R ], +// +// where U, V and Q are orthogonal matrices. +// R is a non-singular upper triangular matrix, and D1 and D2 are +// diagonal matrices, which are of the following structures: +// +// If m-k-l >= 0, +// +// k l +// D1 = k [ I 0 ] +// l [ 0 C ] +// m-k-l [ 0 0 ] +// +// k l +// D2 = l [ 0 S ] +// p-l [ 0 0 ] +// +// n-k-l k l +// [ 0 R ] = k [ 0 R11 R12 ] k +// l [ 0 0 R22 ] l +// +// where +// +// C = diag( alpha_k, ... , alpha_{k+l} ), +// S = diag( beta_k, ... , beta_{k+l} ), +// C^2 + S^2 = I. +// +// R is stored in +// A[0:k+l, n-k-l:n] +// on exit. +// +// If m-k-l < 0, +// +// k m-k k+l-m +// D1 = k [ I 0 0 ] +// m-k [ 0 C 0 ] +// +// k m-k k+l-m +// D2 = m-k [ 0 S 0 ] +// k+l-m [ 0 0 I ] +// p-l [ 0 0 0 ] +// +// n-k-l k m-k k+l-m +// [ 0 R ] = k [ 0 R11 R12 R13 ] +// m-k [ 0 0 R22 R23 ] +// k+l-m [ 0 0 0 R33 ] +// +// where +// C = diag( alpha_k, ... , alpha_m ), +// S = diag( beta_k, ... , beta_m ), +// C^2 + S^2 = I. +// +// R = [ R11 R12 R13 ] is stored in A[0:m, n-k-l:n] +// [ 0 R22 R23 ] +// and R33 is stored in +// B[m-k:l, n+m-k-l:n] on exit. +// +// The computation of the orthogonal transformation matrices U, V or Q +// is optional. These matrices may either be formed explicitly, or they +// may be post-multiplied into input matrices U1, V1, or Q1. +// +// Dtgsja essentially uses a variant of Kogbetliantz algorithm to reduce +// min(l,m-k)×l triangular or trapezoidal matrix A23 and l×l +// matrix B13 to the form: +// +// U1^T*A13*Q1 = C1*R1; V1^T*B13*Q1 = S1*R1, +// +// where U1, V1 and Q1 are orthogonal matrices. C1 and S1 are diagonal +// matrices satisfying +// +// C1^2 + S1^2 = I, +// +// and R1 is an l×l non-singular upper triangular matrix. +// +// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior +// is as follows +// jobU == lapack.GSVDU Compute orthogonal matrix U +// jobU == lapack.GSVDUnit Use unit-initialized matrix +// jobU == lapack.GSVDNone Do not compute orthogonal matrix. +// The behavior is the same for jobV and jobQ with the exception that instead of +// lapack.GSVDU these accept lapack.GSVDV and lapack.GSVDQ respectively. +// The matrices U, V and Q must be m×m, p×p and n×n respectively unless the +// relevant job parameter is lapack.GSVDNone. +// +// k and l specify the sub-blocks in the input matrices A and B: +// A23 = A[k:min(k+l,m), n-l:n) and B13 = B[0:l, n-l:n] +// of A and B, whose GSVD is going to be computed by Dtgsja. +// +// tola and tolb are the convergence criteria for the Jacobi-Kogbetliantz +// iteration procedure. Generally, they are the same as used in the preprocessing +// step, for example, +// tola = max(m, n)*norm(A)*eps, +// tolb = max(p, n)*norm(B)*eps, +// where eps is the machine epsilon. +// +// work must have length at least 2*n, otherwise Dtgsja will panic. +// +// alpha and beta must have length n or Dtgsja will panic. On exit, alpha and +// beta contain the generalized singular value pairs of A and B +// alpha[0:k] = 1, +// beta[0:k] = 0, +// if m-k-l >= 0, +// alpha[k:k+l] = diag(C), +// beta[k:k+l] = diag(S), +// if m-k-l < 0, +// alpha[k:m]= C, alpha[m:k+l]= 0 +// beta[k:m] = S, beta[m:k+l] = 1. +// if k+l < n, +// alpha[k+l:n] = 0 and +// beta[k+l:n] = 0. +// +// On exit, A[n-k:n, 0:min(k+l,m)] contains the triangular matrix R or part of R +// and if necessary, B[m-k:l, n+m-k-l:n] contains a part of R. +// +// Dtgsja returns whether the routine converged and the number of iteration cycles +// that were run. +// +// Dtgsja is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtgsja(jobU, jobV, jobQ lapack.GSVDJob, m, p, n, k, l int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64) (cycles int, ok bool) { + const maxit = 40 + + checkMatrix(m, n, a, lda) + checkMatrix(p, n, b, ldb) + + if len(alpha) != n { + panic(badAlpha) + } + if len(beta) != n { + panic(badBeta) + } + + initu := jobU == lapack.GSVDUnit + wantu := initu || jobU == lapack.GSVDU + if !initu && !wantu && jobU != lapack.GSVDNone { + panic(badGSVDJob + "U") + } + if jobU != lapack.GSVDNone { + checkMatrix(m, m, u, ldu) + } + + initv := jobV == lapack.GSVDUnit + wantv := initv || jobV == lapack.GSVDV + if !initv && !wantv && jobV != lapack.GSVDNone { + panic(badGSVDJob + "V") + } + if jobV != lapack.GSVDNone { + checkMatrix(p, p, v, ldv) + } + + initq := jobQ == lapack.GSVDUnit + wantq := initq || jobQ == lapack.GSVDQ + if !initq && !wantq && jobQ != lapack.GSVDNone { + panic(badGSVDJob + "Q") + } + if jobQ != lapack.GSVDNone { + checkMatrix(n, n, q, ldq) + } + + if len(work) < 2*n { + panic(badWork) + } + + // Initialize U, V and Q, if necessary + if initu { + impl.Dlaset(blas.All, m, m, 0, 1, u, ldu) + } + if initv { + impl.Dlaset(blas.All, p, p, 0, 1, v, ldv) + } + if initq { + impl.Dlaset(blas.All, n, n, 0, 1, q, ldq) + } + + bi := blas64.Implementation() + minTol := math.Min(tola, tolb) + + // Loop until convergence. + upper := false + for cycles = 1; cycles <= maxit; cycles++ { + upper = !upper + + for i := 0; i < l-1; i++ { + for j := i + 1; j < l; j++ { + var a1, a2, a3 float64 + if k+i < m { + a1 = a[(k+i)*lda+n-l+i] + } + if k+j < m { + a3 = a[(k+j)*lda+n-l+j] + } + + b1 := b[i*ldb+n-l+i] + b3 := b[j*ldb+n-l+j] + + var b2 float64 + if upper { + if k+i < m { + a2 = a[(k+i)*lda+n-l+j] + } + b2 = b[i*ldb+n-l+j] + } else { + if k+j < m { + a2 = a[(k+j)*lda+n-l+i] + } + b2 = b[j*ldb+n-l+i] + } + + csu, snu, csv, snv, csq, snq := impl.Dlags2(upper, a1, a2, a3, b1, b2, b3) + + // Update (k+i)-th and (k+j)-th rows of matrix A: U^T*A. + if k+j < m { + bi.Drot(l, a[(k+j)*lda+n-l:], 1, a[(k+i)*lda+n-l:], 1, csu, snu) + } + + // Update i-th and j-th rows of matrix B: V^T*B. + bi.Drot(l, b[j*ldb+n-l:], 1, b[i*ldb+n-l:], 1, csv, snv) + + // Update (n-l+i)-th and (n-l+j)-th columns of matrices + // A and B: A*Q and B*Q. + bi.Drot(min(k+l, m), a[n-l+j:], lda, a[n-l+i:], lda, csq, snq) + bi.Drot(l, b[n-l+j:], ldb, b[n-l+i:], ldb, csq, snq) + + if upper { + if k+i < m { + a[(k+i)*lda+n-l+j] = 0 + } + b[i*ldb+n-l+j] = 0 + } else { + if k+j < m { + a[(k+j)*lda+n-l+i] = 0 + } + b[j*ldb+n-l+i] = 0 + } + + // Update orthogonal matrices U, V, Q, if desired. + if wantu && k+j < m { + bi.Drot(m, u[k+j:], ldu, u[k+i:], ldu, csu, snu) + } + if wantv { + bi.Drot(p, v[j:], ldv, v[i:], ldv, csv, snv) + } + if wantq { + bi.Drot(n, q[n-l+j:], ldq, q[n-l+i:], ldq, csq, snq) + } + } + } + + if !upper { + // The matrices A13 and B13 were lower triangular at the start + // of the cycle, and are now upper triangular. + // + // Convergence test: test the parallelism of the corresponding + // rows of A and B. + var error float64 + for i := 0; i < min(l, m-k); i++ { + bi.Dcopy(l-i, a[(k+i)*lda+n-l+i:], 1, work, 1) + bi.Dcopy(l-i, b[i*ldb+n-l+i:], 1, work[l:], 1) + ssmin := impl.Dlapll(l-i, work, 1, work[l:], 1) + error = math.Max(error, ssmin) + } + if math.Abs(error) <= minTol { + // The algorithm has converged. + // Compute the generalized singular value pairs (alpha, beta) + // and set the triangular matrix R to array A. + for i := 0; i < k; i++ { + alpha[i] = 1 + beta[i] = 0 + } + + for i := 0; i < min(l, m-k); i++ { + a1 := a[(k+i)*lda+n-l+i] + b1 := b[i*ldb+n-l+i] + + if a1 != 0 { + gamma := b1 / a1 + + // Change sign if necessary. + if gamma < 0 { + bi.Dscal(l-i, -1, b[i*ldb+n-l+i:], 1) + if wantv { + bi.Dscal(p, -1, v[i:], ldv) + } + } + beta[k+i], alpha[k+i], _ = impl.Dlartg(math.Abs(gamma), 1) + + if alpha[k+i] >= beta[k+i] { + bi.Dscal(l-i, 1/alpha[k+i], a[(k+i)*lda+n-l+i:], 1) + } else { + bi.Dscal(l-i, 1/beta[k+i], b[i*ldb+n-l+i:], 1) + bi.Dcopy(l-i, b[i*ldb+n-l+i:], 1, a[(k+i)*lda+n-l+i:], 1) + } + } else { + alpha[k+i] = 0 + beta[k+i] = 1 + bi.Dcopy(l-i, b[i*ldb+n-l+i:], 1, a[(k+i)*lda+n-l+i:], 1) + } + } + + for i := m; i < k+l; i++ { + alpha[i] = 0 + beta[i] = 1 + } + if k+l < n { + for i := k + l; i < n; i++ { + alpha[i] = 0 + beta[i] = 0 + } + } + + return cycles, true + } + } + } + + // The algorithm has not converged after maxit cycles. + return cycles, false +} diff --git a/lapack/native/dtrcon.go b/lapack/native/dtrcon.go new file mode 100644 index 00000000..e4e97100 --- /dev/null +++ b/lapack/native/dtrcon.go @@ -0,0 +1,82 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dtrcon estimates the reciprocal of the condition number of a triangular matrix A. +// The condition number computed may be based on the 1-norm or the ∞-norm. +// +// work is a temporary data slice of length at least 3*n and Dtrcon will panic otherwise. +// +// iwork is a temporary data slice of length at least n and Dtrcon will panic otherwise. +func (impl Implementation) Dtrcon(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64 { + if norm != lapack.MaxColumnSum && norm != lapack.MaxRowSum { + panic(badNorm) + } + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.NonUnit && diag != blas.Unit { + panic(badDiag) + } + if len(work) < 3*n { + panic(badWork) + } + if len(iwork) < n { + panic(badWork) + } + if n == 0 { + return 1 + } + bi := blas64.Implementation() + + var rcond float64 + smlnum := dlamchS * float64(n) + + anorm := impl.Dlantr(norm, uplo, diag, n, n, a, lda, work) + + if anorm <= 0 { + return rcond + } + var ainvnm float64 + var normin bool + kase1 := 2 + if norm == lapack.MaxColumnSum { + kase1 = 1 + } + var kase int + isave := new([3]int) + var scale float64 + for { + ainvnm, kase = impl.Dlacn2(n, work[n:], work, iwork, ainvnm, kase, isave) + if kase == 0 { + if ainvnm != 0 { + rcond = (1 / anorm) / ainvnm + } + return rcond + } + if kase == kase1 { + scale = impl.Dlatrs(uplo, blas.NoTrans, diag, normin, n, a, lda, work, work[2*n:]) + } else { + scale = impl.Dlatrs(uplo, blas.Trans, diag, normin, n, a, lda, work, work[2*n:]) + } + normin = true + if scale != 1 { + ix := bi.Idamax(n, work, 1) + xnorm := math.Abs(work[ix]) + if scale == 0 || scale < xnorm*smlnum { + return rcond + } + impl.Drscl(n, scale, work, 1) + } + } +} diff --git a/lapack/native/dtrevc3.go b/lapack/native/dtrevc3.go new file mode 100644 index 00000000..c0ef920b --- /dev/null +++ b/lapack/native/dtrevc3.go @@ -0,0 +1,866 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dtrevc3 computes some or all of the right and/or left eigenvectors of an n×n +// upper quasi-triangular matrix T in Schur canonical form. Matrices of this +// type are produced by the Schur factorization of a real general matrix A +// A = Q T Q^T, +// as computed by Dhseqr. +// +// The right eigenvector x of T corresponding to an +// eigenvalue λ is defined by +// T x = λ x, +// and the left eigenvector is defined by +// y^H T = λ y^H, +// where y^H is the conjugate transpose of y. +// +// The eigenvalues are read directly from the diagonal blocks of T. +// +// This routine returns the matrices X and/or Y of right and left eigenvectors +// of T, or the products Q*X and/or Q*Y, where Q is an input matrix. If Q is the +// orthogonal factor that reduces a matrix A to Schur form T, then Q*X and Q*Y +// are the matrices of right and left eigenvectors of A. +// +// If side == lapack.RightEV, only right eigenvectors will be computed. +// If side == lapack.LeftEV, only left eigenvectors will be computed. +// If side == lapack.RightLeftEV, both right and left eigenvectors will be computed. +// For other values of side, Dtrevc3 will panic. +// +// If howmny == lapack.AllEV, all right and/or left eigenvectors will be +// computed. +// If howmny == lapack.AllEVMulQ, all right and/or left eigenvectors will be +// computed and multiplied from left by the matrices in VR and/or VL. +// If howmny == lapack.SelectedEV, right and/or left eigenvectors will be +// computed as indicated by selected. +// For other values of howmny, Dtrevc3 will panic. +// +// selected specifies which eigenvectors will be computed. It must have length n +// if howmny == lapack.SelectedEV, and it is not referenced otherwise. +// If w_j is a real eigenvalue, the corresponding real eigenvector will be +// computed if selected[j] is true. +// If w_j and w_{j+1} are the real and imaginary parts of a complex eigenvalue, +// the corresponding complex eigenvector is computed if either selected[j] or +// selected[j+1] is true, and on return selected[j] will be set to true and +// selected[j+1] will be set to false. +// +// VL and VR are n×mm matrices. If howmny is lapack.AllEV or +// lapack.AllEVMulQ, mm must be at least n. If howmny == +// lapack.SelectedEV, mm must be large enough to store the selected +// eigenvectors. Each selected real eigenvector occupies one column and each +// selected complex eigenvector occupies two columns. If mm is not sufficiently +// large, Dtrevc3 will panic. +// +// On entry, if howmny == lapack.AllEVMulQ, it is assumed that VL (if side +// is lapack.LeftEV or lapack.RightLeftEV) contains an n×n matrix QL, +// and that VR (if side is lapack.LeftEV or lapack.RightLeftEV) contains +// an n×n matrix QR. QL and QR are typically the orthogonal matrix Q of Schur +// vectors returned by Dhseqr. +// +// On return, if side is lapack.LeftEV or lapack.RightLeftEV, +// VL will contain: +// if howmny == lapack.AllEV, the matrix Y of left eigenvectors of T, +// if howmny == lapack.AllEVMulQ, the matrix Q*Y, +// if howmny == lapack.SelectedEV, the left eigenvectors of T specified by +// selected, stored consecutively in the +// columns of VL, in the same order as their +// eigenvalues. +// VL is not referenced if side == lapack.RightEV. +// +// On return, if side is lapack.RightEV or lapack.RightLeftEV, +// VR will contain: +// if howmny == lapack.AllEV, the matrix X of right eigenvectors of T, +// if howmny == lapack.AllEVMulQ, the matrix Q*X, +// if howmny == lapack.SelectedEV, the left eigenvectors of T specified by +// selected, stored consecutively in the +// columns of VR, in the same order as their +// eigenvalues. +// VR is not referenced if side == lapack.LeftEV. +// +// Complex eigenvectors corresponding to a complex eigenvalue are stored in VL +// and VR in two consecutive columns, the first holding the real part, and the +// second the imaginary part. +// +// Each eigenvector will be normalized so that the element of largest magnitude +// has magnitude 1. Here the magnitude of a complex number (x,y) is taken to be +// |x| + |y|. +// +// work must have length at least lwork and lwork must be at least max(1,3*n), +// otherwise Dtrevc3 will panic. For optimum performance, lwork should be at +// least n+2*n*nb, where nb is the optimal blocksize. +// +// If lwork == -1, instead of performing Dtrevc3, the function only estimates +// the optimal workspace size based on n and stores it into work[0]. +// +// Dtrevc3 returns the number of columns in VL and/or VR actually used to store +// the eigenvectors. +// +// Dtrevc3 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtrevc3(side lapack.EVSide, howmny lapack.HowMany, selected []bool, n int, t []float64, ldt int, vl []float64, ldvl int, vr []float64, ldvr int, mm int, work []float64, lwork int) (m int) { + switch side { + default: + panic(badSide) + case lapack.RightEV, lapack.LeftEV, lapack.RightLeftEV: + } + switch howmny { + default: + panic(badHowMany) + case lapack.AllEV, lapack.AllEVMulQ, lapack.SelectedEV: + } + switch { + case n < 0: + panic(nLT0) + case len(work) < lwork: + panic(shortWork) + case lwork < max(1, 3*n) && lwork != -1: + panic(badWork) + } + if lwork != -1 { + if howmny == lapack.SelectedEV { + if len(selected) != n { + panic("lapack: bad selected length") + } + // Set m to the number of columns required to store the + // selected eigenvectors, and standardize the slice + // selected. + for j := 0; j < n; { + if j == n-1 || t[(j+1)*ldt+j] == 0 { + // Diagonal 1×1 block corresponding to a + // real eigenvalue. + if selected[j] { + m++ + } + j++ + } else { + // Diagonal 2×2 block corresponding to a + // complex eigenvalue. + if selected[j] || selected[j+1] { + selected[j] = true + selected[j+1] = false + m += 2 + } + j += 2 + } + } + } else { + m = n + } + if m > mm { + panic("lapack: insufficient number of columns") + } + checkMatrix(n, n, t, ldt) + if (side == lapack.RightEV || side == lapack.RightLeftEV) && m > 0 { + checkMatrix(n, m, vr, ldvr) + } + if (side == lapack.LeftEV || side == lapack.RightLeftEV) && m > 0 { + checkMatrix(n, m, vl, ldvl) + } + } + + // Quick return if possible. + if n == 0 { + work[0] = 1 + return m + } + + const ( + nbmin = 8 + nbmax = 128 + ) + nb := impl.Ilaenv(1, "DTREVC", string(side)+string(howmny), n, -1, -1, -1) + + // Quick return in case of a workspace query. + if lwork == -1 { + work[0] = float64(n + 2*n*nb) + return m + } + + // Use blocked version of back-transformation if sufficient workspace. + // Zero-out the workspace to avoid potential NaN propagation. + if howmny == lapack.AllEVMulQ && lwork >= n+2*n*nbmin { + nb = min((lwork-n)/(2*n), nbmax) + impl.Dlaset(blas.All, n, 1+2*nb, 0, 0, work[:n+2*nb*n], 1+2*nb) + } else { + nb = 1 + } + + // Set the constants to control overflow. + ulp := dlamchP + smlnum := float64(n) / ulp * dlamchS + bignum := (1 - ulp) / smlnum + + // Split work into a vector of column norms and an n×2*nb matrix b. + norms := work[:n] + ldb := 2 * nb + b := work[n : n+n*ldb] + + // Compute 1-norm of each column of strictly upper triangular part of T + // to control overflow in triangular solver. + norms[0] = 0 + for j := 1; j < n; j++ { + var cn float64 + for i := 0; i < j; i++ { + cn += math.Abs(t[i*ldt+j]) + } + norms[j] = cn + } + + bi := blas64.Implementation() + + var ( + x [4]float64 + + iv int // Index of column in current block. + is int + + // ip is used below to specify the real or complex eigenvalue: + // ip == 0, real eigenvalue, + // 1, first of conjugate complex pair (wr,wi), + // -1, second of conjugate complex pair (wr,wi). + ip int + iscomplex [nbmax]int // Stores ip for each column in current block. + ) + + if side == lapack.LeftEV { + goto leftev + } + + // Compute right eigenvectors. + + // For complex right vector, iv-1 is for real part and iv for complex + // part. Non-blocked version always uses iv=1, blocked version starts + // with iv=nb-1 and goes down to 0 or 1. + iv = max(2, nb) - 1 + ip = 0 + is = m - 1 + for ki := n - 1; ki >= 0; ki-- { + if ip == -1 { + // Previous iteration (ki+1) was second of + // conjugate pair, so this ki is first of + // conjugate pair. + ip = 1 + continue + } + + if ki == 0 || t[ki*ldt+ki-1] == 0 { + // Last column or zero on sub-diagonal, so this + // ki must be real eigenvalue. + ip = 0 + } else { + // Non-zero on sub-diagonal, so this ki is + // second of conjugate pair. + ip = -1 + } + + if howmny == lapack.SelectedEV { + if ip == 0 { + if !selected[ki] { + continue + } + } else if !selected[ki-1] { + continue + } + } + + // Compute the ki-th eigenvalue (wr,wi). + wr := t[ki*ldt+ki] + var wi float64 + if ip != 0 { + wi = math.Sqrt(math.Abs(t[ki*ldt+ki-1])) * math.Sqrt(math.Abs(t[(ki-1)*ldt+ki])) + } + smin := math.Max(ulp*(math.Abs(wr)+math.Abs(wi)), smlnum) + + if ip == 0 { + // Real right eigenvector. + + b[ki*ldb+iv] = 1 + // Form right-hand side. + for k := 0; k < ki; k++ { + b[k*ldb+iv] = -t[k*ldt+ki] + } + // Solve upper quasi-triangular system: + // [ T[0:ki,0:ki] - wr ]*X = scale*b. + for j := ki - 1; j >= 0; { + if j == 0 || t[j*ldt+j-1] == 0 { + // 1×1 diagonal block. + scale, xnorm, _ := impl.Dlaln2(false, 1, 1, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv:], ldb, wr, 0, x[:1], 2) + // Scale X[0,0] to avoid overflow when updating the + // right-hand side. + if xnorm > 1 && norms[j] > bignum/xnorm { + x[0] /= xnorm + scale /= xnorm + } + // Scale if necessary. + if scale != 1 { + bi.Dscal(ki+1, scale, b[iv:], ldb) + } + b[j*ldb+iv] = x[0] + // Update right-hand side. + bi.Daxpy(j, -x[0], t[j:], ldt, b[iv:], ldb) + j-- + } else { + // 2×2 diagonal block. + scale, xnorm, _ := impl.Dlaln2(false, 2, 1, smin, 1, t[(j-1)*ldt+j-1:], ldt, + 1, 1, b[(j-1)*ldb+iv:], ldb, wr, 0, x[:3], 2) + // Scale X[0,0] and X[1,0] to avoid overflow + // when updating the right-hand side. + if xnorm > 1 { + beta := math.Max(norms[j-1], norms[j]) + if beta > bignum/xnorm { + x[0] /= xnorm + x[2] /= xnorm + scale /= xnorm + } + } + // Scale if necessary. + if scale != 1 { + bi.Dscal(ki+1, scale, b[iv:], ldb) + } + b[(j-1)*ldb+iv] = x[0] + b[j*ldb+iv] = x[2] + // Update right-hand side. + bi.Daxpy(j-1, -x[0], t[j-1:], ldt, b[iv:], ldb) + bi.Daxpy(j-1, -x[2], t[j:], ldt, b[iv:], ldb) + j -= 2 + } + } + // Copy the vector x or Q*x to VR and normalize. + switch { + case howmny != lapack.AllEVMulQ: + // No back-transform: copy x to VR and normalize. + bi.Dcopy(ki+1, b[iv:], ldb, vr[is:], ldvr) + ii := bi.Idamax(ki+1, vr[is:], ldvr) + remax := 1 / math.Abs(vr[ii*ldvr+is]) + bi.Dscal(ki+1, remax, vr[is:], ldvr) + for k := ki + 1; k < n; k++ { + vr[k*ldvr+is] = 0 + } + case nb == 1: + // Version 1: back-transform each vector with GEMV, Q*x. + if ki > 0 { + bi.Dgemv(blas.NoTrans, n, ki, 1, vr, ldvr, b[iv:], ldb, + b[ki*ldb+iv], vr[ki:], ldvr) + } + ii := bi.Idamax(n, vr[ki:], ldvr) + remax := 1 / math.Abs(vr[ii*ldvr+ki]) + bi.Dscal(n, remax, vr[ki:], ldvr) + default: + // Version 2: back-transform block of vectors with GEMM. + // Zero out below vector. + for k := ki + 1; k < n; k++ { + b[k*ldb+iv] = 0 + } + iscomplex[iv] = ip + // Back-transform and normalization is done below. + } + } else { + // Complex right eigenvector. + + // Initial solve + // [ ( T[ki-1,ki-1] T[ki-1,ki] ) - (wr + i*wi) ]*X = 0. + // [ ( T[ki, ki-1] T[ki, ki] ) ] + if math.Abs(t[(ki-1)*ldt+ki]) >= math.Abs(t[ki*ldt+ki-1]) { + b[(ki-1)*ldb+iv-1] = 1 + b[ki*ldb+iv] = wi / t[(ki-1)*ldt+ki] + } else { + b[(ki-1)*ldb+iv-1] = -wi / t[ki*ldt+ki-1] + b[ki*ldb+iv] = 1 + } + b[ki*ldb+iv-1] = 0 + b[(ki-1)*ldb+iv] = 0 + // Form right-hand side. + for k := 0; k < ki-1; k++ { + b[k*ldb+iv-1] = -b[(ki-1)*ldb+iv-1] * t[k*ldt+ki-1] + b[k*ldb+iv] = -b[ki*ldb+iv] * t[k*ldt+ki] + } + // Solve upper quasi-triangular system: + // [ T[0:ki-1,0:ki-1] - (wr+i*wi) ]*X = scale*(b1+i*b2) + for j := ki - 2; j >= 0; { + if j == 0 || t[j*ldt+j-1] == 0 { + // 1×1 diagonal block. + + scale, xnorm, _ := impl.Dlaln2(false, 1, 2, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv-1:], ldb, wr, wi, x[:2], 2) + // Scale X[0,0] and X[0,1] to avoid + // overflow when updating the right-hand side. + if xnorm > 1 && norms[j] > bignum/xnorm { + x[0] /= xnorm + x[1] /= xnorm + scale /= xnorm + } + // Scale if necessary. + if scale != 1 { + bi.Dscal(ki+1, scale, b[iv-1:], ldb) + bi.Dscal(ki+1, scale, b[iv:], ldb) + } + b[j*ldb+iv-1] = x[0] + b[j*ldb+iv] = x[1] + // Update the right-hand side. + bi.Daxpy(j, -x[0], t[j:], ldt, b[iv-1:], ldb) + bi.Daxpy(j, -x[1], t[j:], ldt, b[iv:], ldb) + j-- + } else { + // 2×2 diagonal block. + + scale, xnorm, _ := impl.Dlaln2(false, 2, 2, smin, 1, t[(j-1)*ldt+j-1:], ldt, + 1, 1, b[(j-1)*ldb+iv-1:], ldb, wr, wi, x[:], 2) + // Scale X to avoid overflow when updating + // the right-hand side. + if xnorm > 1 { + beta := math.Max(norms[j-1], norms[j]) + if beta > bignum/xnorm { + rec := 1 / xnorm + x[0] *= rec + x[1] *= rec + x[2] *= rec + x[3] *= rec + scale *= rec + } + } + // Scale if necessary. + if scale != 1 { + bi.Dscal(ki+1, scale, b[iv-1:], ldb) + bi.Dscal(ki+1, scale, b[iv:], ldb) + } + b[(j-1)*ldb+iv-1] = x[0] + b[(j-1)*ldb+iv] = x[1] + b[j*ldb+iv-1] = x[2] + b[j*ldb+iv] = x[3] + // Update the right-hand side. + bi.Daxpy(j-1, -x[0], t[j-1:], ldt, b[iv-1:], ldb) + bi.Daxpy(j-1, -x[1], t[j-1:], ldt, b[iv:], ldb) + bi.Daxpy(j-1, -x[2], t[j:], ldt, b[iv-1:], ldb) + bi.Daxpy(j-1, -x[3], t[j:], ldt, b[iv:], ldb) + j -= 2 + } + } + + // Copy the vector x or Q*x to VR and normalize. + switch { + case howmny != lapack.AllEVMulQ: + // No back-transform: copy x to VR and normalize. + bi.Dcopy(ki+1, b[iv-1:], ldb, vr[is-1:], ldvr) + bi.Dcopy(ki+1, b[iv:], ldb, vr[is:], ldvr) + emax := 0.0 + for k := 0; k <= ki; k++ { + emax = math.Max(emax, math.Abs(vr[k*ldvr+is-1])+math.Abs(vr[k*ldvr+is])) + } + remax := 1 / emax + bi.Dscal(ki+1, remax, vr[is-1:], ldvr) + bi.Dscal(ki+1, remax, vr[is:], ldvr) + for k := ki + 1; k < n; k++ { + vr[k*ldvr+is-1] = 0 + vr[k*ldvr+is] = 0 + } + case nb == 1: + // Version 1: back-transform each vector with GEMV, Q*x. + if ki-1 > 0 { + bi.Dgemv(blas.NoTrans, n, ki-1, 1, vr, ldvr, b[iv-1:], ldb, + b[(ki-1)*ldb+iv-1], vr[ki-1:], ldvr) + bi.Dgemv(blas.NoTrans, n, ki-1, 1, vr, ldvr, b[iv:], ldb, + b[ki*ldb+iv], vr[ki:], ldvr) + } else { + bi.Dscal(n, b[(ki-1)*ldb+iv-1], vr[ki-1:], ldvr) + bi.Dscal(n, b[ki*ldb+iv], vr[ki:], ldvr) + } + emax := 0.0 + for k := 0; k < n; k++ { + emax = math.Max(emax, math.Abs(vr[k*ldvr+ki-1])+math.Abs(vr[k*ldvr+ki])) + } + remax := 1 / emax + bi.Dscal(n, remax, vr[ki-1:], ldvr) + bi.Dscal(n, remax, vr[ki:], ldvr) + default: + // Version 2: back-transform block of vectors with GEMM. + // Zero out below vector. + for k := ki + 1; k < n; k++ { + b[k*ldb+iv-1] = 0 + b[k*ldb+iv] = 0 + } + iscomplex[iv-1] = -ip + iscomplex[iv] = ip + iv-- + // Back-transform and normalization is done below. + } + } + if nb > 1 { + // Blocked version of back-transform. + + // For complex case, ki2 includes both vectors (ki-1 and ki). + ki2 := ki + if ip != 0 { + ki2-- + } + // Columns iv:nb of b are valid vectors. + // When the number of vectors stored reaches nb-1 or nb, + // or if this was last vector, do the Gemm. + if iv < 2 || ki2 == 0 { + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, nb-iv, ki2+nb-iv, + 1, vr, ldvr, b[iv:], ldb, + 0, b[nb+iv:], ldb) + // Normalize vectors. + var remax float64 + for k := iv; k < nb; k++ { + if iscomplex[k] == 0 { + // Real eigenvector. + ii := bi.Idamax(n, b[nb+k:], ldb) + remax = 1 / math.Abs(b[ii*ldb+nb+k]) + } else if iscomplex[k] == 1 { + // First eigenvector of conjugate pair. + emax := 0.0 + for ii := 0; ii < n; ii++ { + emax = math.Max(emax, math.Abs(b[ii*ldb+nb+k])+math.Abs(b[ii*ldb+nb+k+1])) + } + remax = 1 / emax + // Second eigenvector of conjugate pair + // will reuse this value of remax. + } + bi.Dscal(n, remax, b[nb+k:], ldb) + } + impl.Dlacpy(blas.All, n, nb-iv, b[nb+iv:], ldb, vr[ki2:], ldvr) + iv = nb - 1 + } else { + iv-- + } + } + is-- + if ip != 0 { + is-- + } + } + + if side == lapack.RightEV { + return m + } + +leftev: + // Compute left eigenvectors. + + // For complex left vector, iv is for real part and iv+1 for complex + // part. Non-blocked version always uses iv=0. Blocked version starts + // with iv=0, goes up to nb-2 or nb-1. + iv = 0 + ip = 0 + is = 0 + for ki := 0; ki < n; ki++ { + if ip == 1 { + // Previous iteration ki-1 was first of conjugate pair, + // so this ki is second of conjugate pair. + ip = -1 + continue + } + + if ki == n-1 || t[(ki+1)*ldt+ki] == 0 { + // Last column or zero on sub-diagonal, so this ki must + // be real eigenvalue. + ip = 0 + } else { + // Non-zero on sub-diagonal, so this ki is first of + // conjugate pair. + ip = 1 + } + if howmny == lapack.SelectedEV && !selected[ki] { + continue + } + + // Compute the ki-th eigenvalue (wr,wi). + wr := t[ki*ldt+ki] + var wi float64 + if ip != 0 { + wi = math.Sqrt(math.Abs(t[ki*ldt+ki+1])) * math.Sqrt(math.Abs(t[(ki+1)*ldt+ki])) + } + smin := math.Max(ulp*(math.Abs(wr)+math.Abs(wi)), smlnum) + + if ip == 0 { + // Real left eigenvector. + + b[ki*ldb+iv] = 1 + // Form right-hand side. + for k := ki + 1; k < n; k++ { + b[k*ldb+iv] = -t[ki*ldt+k] + } + // Solve transposed quasi-triangular system: + // [ T[ki+1:n,ki+1:n] - wr ]^T * X = scale*b + vmax := 1.0 + vcrit := bignum + for j := ki + 1; j < n; { + if j == n-1 || t[(j+1)*ldt+j] == 0 { + // 1×1 diagonal block. + + // Scale if necessary to avoid overflow + // when forming the right-hand side. + if norms[j] > vcrit { + rec := 1 / vmax + bi.Dscal(n-ki, rec, b[ki*ldb+iv:], ldb) + vmax = 1 + vcrit = bignum + } + b[j*ldb+iv] -= bi.Ddot(j-ki-1, t[(ki+1)*ldt+j:], ldt, b[(ki+1)*ldb+iv:], ldb) + // Solve [ T[j,j] - wr ]^T * X = b. + scale, _, _ := impl.Dlaln2(false, 1, 1, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv:], ldb, wr, 0, x[:1], 2) + // Scale if necessary. + if scale != 1 { + bi.Dscal(n-ki, scale, b[ki*ldb+iv:], ldb) + } + b[j*ldb+iv] = x[0] + vmax = math.Max(math.Abs(b[j*ldb+iv]), vmax) + vcrit = bignum / vmax + j++ + } else { + // 2×2 diagonal block. + + // Scale if necessary to avoid overflow + // when forming the right-hand side. + beta := math.Max(norms[j], norms[j+1]) + if beta > vcrit { + bi.Dscal(n-ki+1, 1/vmax, b[ki*ldb+iv:], 1) + vmax = 1 + vcrit = bignum + } + b[j*ldb+iv] -= bi.Ddot(j-ki-1, t[(ki+1)*ldt+j:], ldt, b[(ki+1)*ldb+iv:], ldb) + b[(j+1)*ldb+iv] -= bi.Ddot(j-ki-1, t[(ki+1)*ldt+j+1:], ldt, b[(ki+1)*ldb+iv:], ldb) + // Solve + // [ T[j,j]-wr T[j,j+1] ]^T * X = scale*[ b1 ] + // [ T[j+1,j] T[j+1,j+1]-wr ] [ b2 ] + scale, _, _ := impl.Dlaln2(true, 2, 1, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv:], ldb, wr, 0, x[:3], 2) + // Scale if necessary. + if scale != 1 { + bi.Dscal(n-ki, scale, b[ki*ldb+iv:], ldb) + } + b[j*ldb+iv] = x[0] + b[(j+1)*ldb+iv] = x[2] + vmax = math.Max(vmax, math.Max(math.Abs(b[j*ldb+iv]), math.Abs(b[(j+1)*ldb+iv]))) + vcrit = bignum / vmax + j += 2 + } + } + // Copy the vector x or Q*x to VL and normalize. + switch { + case howmny != lapack.AllEVMulQ: + // No back-transform: copy x to VL and normalize. + bi.Dcopy(n-ki, b[ki*ldb+iv:], ldb, vl[ki*ldvl+is:], ldvl) + ii := bi.Idamax(n-ki, vl[ki*ldvl+is:], ldvl) + ki + remax := 1 / math.Abs(vl[ii*ldvl+is]) + bi.Dscal(n-ki, remax, vl[ki*ldvl+is:], ldvl) + for k := 0; k < ki; k++ { + vl[k*ldvl+is] = 0 + } + case nb == 1: + // Version 1: back-transform each vector with Gemv, Q*x. + if n-ki-1 > 0 { + bi.Dgemv(blas.NoTrans, n, n-ki-1, + 1, vl[ki+1:], ldvl, b[(ki+1)*ldb+iv:], ldb, + b[ki*ldb+iv], vl[ki:], ldvl) + } + ii := bi.Idamax(n, vl[ki:], ldvl) + remax := 1 / math.Abs(vl[ii*ldvl+ki]) + bi.Dscal(n, remax, vl[ki:], ldvl) + default: + // Version 2: back-transform block of vectors with Gemm + // zero out above vector. + for k := 0; k < ki; k++ { + b[k*ldb+iv] = 0 + } + iscomplex[iv] = ip + // Back-transform and normalization is done below. + } + } else { + // Complex left eigenvector. + + // Initial solve: + // [ [ T[ki,ki] T[ki,ki+1] ]^T - (wr - i* wi) ]*X = 0. + // [ [ T[ki+1,ki] T[ki+1,ki+1] ] ] + if math.Abs(t[ki*ldt+ki+1]) >= math.Abs(t[(ki+1)*ldt+ki]) { + b[ki*ldb+iv] = wi / t[ki*ldt+ki+1] + b[(ki+1)*ldb+iv+1] = 1 + } else { + b[ki*ldb+iv] = 1 + b[(ki+1)*ldb+iv+1] = -wi / t[(ki+1)*ldt+ki] + } + b[(ki+1)*ldb+iv] = 0 + b[ki*ldb+iv+1] = 0 + // Form right-hand side. + for k := ki + 2; k < n; k++ { + b[k*ldb+iv] = -b[ki*ldb+iv] * t[ki*ldt+k] + b[k*ldb+iv+1] = -b[(ki+1)*ldb+iv+1] * t[(ki+1)*ldt+k] + } + // Solve transposed quasi-triangular system: + // [ T[ki+2:n,ki+2:n]^T - (wr-i*wi) ]*X = b1+i*b2 + vmax := 1.0 + vcrit := bignum + for j := ki + 2; j < n; { + if j == n-1 || t[(j+1)*ldt+j] == 0 { + // 1×1 diagonal block. + + // Scale if necessary to avoid overflow + // when forming the right-hand side elements. + if norms[j] > vcrit { + rec := 1 / vmax + bi.Dscal(n-ki, rec, b[ki*ldb+iv:], ldb) + bi.Dscal(n-ki, rec, b[ki*ldb+iv+1:], ldb) + vmax = 1 + vcrit = bignum + } + b[j*ldb+iv] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j:], ldt, b[(ki+2)*ldb+iv:], ldb) + b[j*ldb+iv+1] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j:], ldt, b[(ki+2)*ldb+iv+1:], ldb) + // Solve [ T[j,j]-(wr-i*wi) ]*(X11+i*X12) = b1+i*b2. + scale, _, _ := impl.Dlaln2(false, 1, 2, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv:], ldb, wr, -wi, x[:2], 2) + // Scale if necessary. + if scale != 1 { + bi.Dscal(n-ki, scale, b[ki*ldb+iv:], ldb) + bi.Dscal(n-ki, scale, b[ki*ldb+iv+1:], ldb) + } + b[j*ldb+iv] = x[0] + b[j*ldb+iv+1] = x[1] + vmax = math.Max(vmax, math.Max(math.Abs(b[j*ldb+iv]), math.Abs(b[j*ldb+iv+1]))) + vcrit = bignum / vmax + j++ + } else { + // 2×2 diagonal block. + + // Scale if necessary to avoid overflow + // when forming the right-hand side elements. + if math.Max(norms[j], norms[j+1]) > vcrit { + rec := 1 / vmax + bi.Dscal(n-ki, rec, b[ki*ldb+iv:], ldb) + bi.Dscal(n-ki, rec, b[ki*ldb+iv+1:], ldb) + vmax = 1 + vcrit = bignum + } + b[j*ldb+iv] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j:], ldt, b[(ki+2)*ldb+iv:], ldb) + b[j*ldb+iv+1] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j:], ldt, b[(ki+2)*ldb+iv+1:], ldb) + b[(j+1)*ldb+iv] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j+1:], ldt, b[(ki+2)*ldb+iv:], ldb) + b[(j+1)*ldb+iv+1] -= bi.Ddot(j-ki-2, t[(ki+2)*ldt+j+1:], ldt, b[(ki+2)*ldb+iv+1:], ldb) + // Solve 2×2 complex linear equation + // [ [T[j,j] T[j,j+1] ]^T - (wr-i*wi)*I ]*X = scale*b + // [ [T[j+1,j] T[j+1,j+1]] ] + scale, _, _ := impl.Dlaln2(true, 2, 2, smin, 1, t[j*ldt+j:], ldt, + 1, 1, b[j*ldb+iv:], ldb, wr, -wi, x[:], 2) + // Scale if necessary. + if scale != 1 { + bi.Dscal(n-ki, scale, b[ki*ldb+iv:], ldb) + bi.Dscal(n-ki, scale, b[ki*ldb+iv+1:], ldb) + } + b[j*ldb+iv] = x[0] + b[j*ldb+iv+1] = x[1] + b[(j+1)*ldb+iv] = x[2] + b[(j+1)*ldb+iv+1] = x[3] + vmax01 := math.Max(math.Abs(x[0]), math.Abs(x[1])) + vmax23 := math.Max(math.Abs(x[2]), math.Abs(x[3])) + vmax = math.Max(vmax, math.Max(vmax01, vmax23)) + vcrit = bignum / vmax + j += 2 + } + } + // Copy the vector x or Q*x to VL and normalize. + switch { + case howmny != lapack.AllEVMulQ: + // No back-transform: copy x to VL and normalize. + bi.Dcopy(n-ki, b[ki*ldb+iv:], ldb, vl[ki*ldvl+is:], ldvl) + bi.Dcopy(n-ki, b[ki*ldb+iv+1:], ldb, vl[ki*ldvl+is+1:], ldvl) + emax := 0.0 + for k := ki; k < n; k++ { + emax = math.Max(emax, math.Abs(vl[k*ldvl+is])+math.Abs(vl[k*ldvl+is+1])) + } + remax := 1 / emax + bi.Dscal(n-ki, remax, vl[ki*ldvl+is:], ldvl) + bi.Dscal(n-ki, remax, vl[ki*ldvl+is+1:], ldvl) + for k := 0; k < ki; k++ { + vl[k*ldvl+is] = 0 + vl[k*ldvl+is+1] = 0 + } + case nb == 1: + // Version 1: back-transform each vector with GEMV, Q*x. + if n-ki-2 > 0 { + bi.Dgemv(blas.NoTrans, n, n-ki-2, + 1, vl[ki+2:], ldvl, b[(ki+2)*ldb+iv:], ldb, + b[ki*ldb+iv], vl[ki:], ldvl) + bi.Dgemv(blas.NoTrans, n, n-ki-2, + 1, vl[ki+2:], ldvl, b[(ki+2)*ldb+iv+1:], ldb, + b[(ki+1)*ldb+iv+1], vl[ki+1:], ldvl) + } else { + bi.Dscal(n, b[ki*ldb+iv], vl[ki:], ldvl) + bi.Dscal(n, b[(ki+1)*ldb+iv+1], vl[ki+1:], ldvl) + } + emax := 0.0 + for k := 0; k < n; k++ { + emax = math.Max(emax, math.Abs(vl[k*ldvl+ki])+math.Abs(vl[k*ldvl+ki+1])) + } + remax := 1 / emax + bi.Dscal(n, remax, vl[ki:], ldvl) + bi.Dscal(n, remax, vl[ki+1:], ldvl) + default: + // Version 2: back-transform block of vectors with GEMM. + // Zero out above vector. + // Could go from ki-nv+1 to ki-1. + for k := 0; k < ki; k++ { + b[k*ldb+iv] = 0 + b[k*ldb+iv+1] = 0 + } + iscomplex[iv] = ip + iscomplex[iv+1] = -ip + iv++ + // Back-transform and normalization is done below. + } + } + if nb > 1 { + // Blocked version of back-transform. + // For complex case, ki2 includes both vectors ki and ki+1. + ki2 := ki + if ip != 0 { + ki2++ + } + // Columns [0:iv] of work are valid vectors. When the + // number of vectors stored reaches nb-1 or nb, or if + // this was last vector, do the Gemm. + if iv >= nb-2 || ki2 == n-1 { + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, iv+1, n-ki2+iv, + 1, vl[ki2-iv:], ldvl, b[(ki2-iv)*ldb:], ldb, + 0, b[nb:], ldb) + // Normalize vectors. + var remax float64 + for k := 0; k <= iv; k++ { + if iscomplex[k] == 0 { + // Real eigenvector. + ii := bi.Idamax(n, b[nb+k:], ldb) + remax = 1 / math.Abs(b[ii*ldb+nb+k]) + } else if iscomplex[k] == 1 { + // First eigenvector of conjugate pair. + emax := 0.0 + for ii := 0; ii < n; ii++ { + emax = math.Max(emax, math.Abs(b[ii*ldb+nb+k])+math.Abs(b[ii*ldb+nb+k+1])) + } + remax = 1 / emax + // Second eigenvector of conjugate pair + // will reuse this value of remax. + } + bi.Dscal(n, remax, b[nb+k:], ldb) + } + impl.Dlacpy(blas.All, n, iv+1, b[nb:], ldb, vl[ki2-iv:], ldvl) + iv = 0 + } else { + iv++ + } + } + is++ + if ip != 0 { + is++ + } + } + + return m +} diff --git a/lapack/native/dtrexc.go b/lapack/native/dtrexc.go new file mode 100644 index 00000000..ec2cec61 --- /dev/null +++ b/lapack/native/dtrexc.go @@ -0,0 +1,221 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/lapack" + +// Dtrexc reorders the real Schur factorization of a n×n real matrix +// A = Q*T*Q^T +// so that the diagonal block of T with row index ifst is moved to row ilst. +// +// On entry, T must be in Schur canonical form, that is, block upper triangular +// with 1×1 and 2×2 diagonal blocks; each 2×2 diagonal block has its diagonal +// elements equal and its off-diagonal elements of opposite sign. +// +// On return, T will be reordered by an orthogonal similarity transformation Z +// as Z^T*T*Z, and will be again in Schur canonical form. +// +// If compq is lapack.UpdateSchur, on return the matrix Q of Schur vectors will be +// updated by postmultiplying it with Z. +// If compq is lapack.None, the matrix Q is not referenced and will not be +// updated. +// For other values of compq Dtrexc will panic. +// +// ifst and ilst specify the reordering of the diagonal blocks of T. The block +// with row index ifst is moved to row ilst, by a sequence of transpositions +// between adjacent blocks. +// +// If ifst points to the second row of a 2×2 block, ifstOut will point to the +// first row, otherwise it will be equal to ifst. +// +// ilstOut will point to the first row of the block in its final position. If ok +// is true, ilstOut may differ from ilst by +1 or -1. +// +// It must hold that +// 0 <= ifst < n, and 0 <= ilst < n, +// otherwise Dtrexc will panic. +// +// If ok is false, two adjacent blocks were too close to swap because the +// problem is very ill-conditioned. T may have been partially reordered, and +// ilstOut will point to the first row of the block at the position to which it +// has been moved. +// +// work must have length at least n, otherwise Dtrexc will panic. +// +// Dtrexc is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtrexc(compq lapack.EVComp, n int, t []float64, ldt int, q []float64, ldq int, ifst, ilst int, work []float64) (ifstOut, ilstOut int, ok bool) { + checkMatrix(n, n, t, ldt) + var wantq bool + switch compq { + default: + panic("lapack: bad value of compq") + case lapack.None: + // Nothing to do because wantq is already false. + case lapack.UpdateSchur: + wantq = true + checkMatrix(n, n, q, ldq) + } + if (ifst < 0 || n <= ifst) && n > 0 { + panic("lapack: ifst out of range") + } + if (ilst < 0 || n <= ilst) && n > 0 { + panic("lapack: ilst out of range") + } + if len(work) < n { + panic(badWork) + } + + ok = true + + // Quick return if possible. + if n <= 1 { + return ifst, ilst, true + } + + // Determine the first row of specified block + // and find out it is 1×1 or 2×2. + if ifst > 0 && t[ifst*ldt+ifst-1] != 0 { + ifst-- + } + nbf := 1 // Size of the first block. + if ifst+1 < n && t[(ifst+1)*ldt+ifst] != 0 { + nbf = 2 + } + // Determine the first row of the final block + // and find out it is 1×1 or 2×2. + if ilst > 0 && t[ilst*ldt+ilst-1] != 0 { + ilst-- + } + nbl := 1 // Size of the last block. + if ilst+1 < n && t[(ilst+1)*ldt+ilst] != 0 { + nbl = 2 + } + + switch { + case ifst == ilst: + return ifst, ilst, true + + case ifst < ilst: + // Update ilst. + switch { + case nbf == 2 && nbl == 1: + ilst-- + case nbf == 1 && nbl == 2: + ilst++ + } + here := ifst + for here < ilst { + // Swap block with next one below. + if nbf == 1 || nbf == 2 { + // Current block either 1×1 or 2×2. + nbnext := 1 // Size of the next block. + if here+nbf+1 < n && t[(here+nbf+1)*ldt+here+nbf] != 0 { + nbnext = 2 + } + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, nbf, nbnext, work) + if !ok { + return ifst, here, false + } + here += nbnext + // Test if 2×2 block breaks into two 1×1 blocks. + if nbf == 2 && t[(here+1)*ldt+here] == 0 { + nbf = 3 + } + continue + } + + // Current block consists of two 1×1 blocks each of + // which must be swapped individually. + nbnext := 1 // Size of the next block. + if here+3 < n && t[(here+3)*ldt+here+2] != 0 { + nbnext = 2 + } + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here+1, 1, nbnext, work) + if !ok { + return ifst, here, false + } + if nbnext == 1 { + // Swap two 1×1 blocks, no problems possible. + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, 1, nbnext, work) + here++ + continue + } + // Recompute nbnext in case 2×2 split. + if t[(here+2)*ldt+here+1] == 0 { + nbnext = 1 + } + if nbnext == 2 { + // 2×2 block did not split. + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, 1, nbnext, work) + if !ok { + return ifst, here, false + } + } else { + // 2×2 block did split. + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, 1, 1, work) + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here+1, 1, 1, work) + } + here += 2 + } + return ifst, here, true + + default: // ifst > ilst + here := ifst + for here > ilst { + // Swap block with next one above. + if nbf == 1 || nbf == 2 { + // Current block either 1×1 or 2×2. + nbnext := 1 + if here-2 >= 0 && t[(here-1)*ldt+here-2] != 0 { + nbnext = 2 + } + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here-nbnext, nbnext, nbf, work) + if !ok { + return ifst, here, false + } + here -= nbnext + // Test if 2×2 block breaks into two 1×1 blocks. + if nbf == 2 && t[(here+1)*ldt+here] == 0 { + nbf = 3 + } + continue + } + + // Current block consists of two 1×1 blocks each of + // which must be swapped individually. + nbnext := 1 + if here-2 >= 0 && t[(here-1)*ldt+here-2] != 0 { + nbnext = 2 + } + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here-nbnext, nbnext, 1, work) + if !ok { + return ifst, here, false + } + if nbnext == 1 { + // Swap two 1×1 blocks, no problems possible. + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, nbnext, 1, work) + here-- + continue + } + // Recompute nbnext in case 2×2 split. + if t[here*ldt+here-1] == 0 { + nbnext = 1 + } + if nbnext == 2 { + // 2×2 block did not split. + ok = impl.Dlaexc(wantq, n, t, ldt, q, ldq, here-1, 2, 1, work) + if !ok { + return ifst, here, false + } + } else { + // 2×2 block did split. + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here, 1, 1, work) + impl.Dlaexc(wantq, n, t, ldt, q, ldq, here-1, 1, 1, work) + } + here -= 2 + } + return ifst, here, true + } +} diff --git a/lapack/native/dtrti2.go b/lapack/native/dtrti2.go new file mode 100644 index 00000000..3a258fb9 --- /dev/null +++ b/lapack/native/dtrti2.go @@ -0,0 +1,57 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dtrti2 computes the inverse of a triangular matrix, storing the result in place +// into a. This is the BLAS level 2 version of the algorithm. +// +// Dtrti2 is an internal routine. It is exported for testing purposes. +func (impl Implementation) Dtrti2(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) { + checkMatrix(n, n, a, lda) + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.NonUnit && diag != blas.Unit { + panic(badDiag) + } + bi := blas64.Implementation() + + nonUnit := diag == blas.NonUnit + // TODO(btracey): Replace this with a row-major ordering. + if uplo == blas.Upper { + for j := 0; j < n; j++ { + var ajj float64 + if nonUnit { + ajj = 1 / a[j*lda+j] + a[j*lda+j] = ajj + ajj *= -1 + } else { + ajj = -1 + } + bi.Dtrmv(blas.Upper, blas.NoTrans, diag, j, a, lda, a[j:], lda) + bi.Dscal(j, ajj, a[j:], lda) + } + return + } + for j := n - 1; j >= 0; j-- { + var ajj float64 + if nonUnit { + ajj = 1 / a[j*lda+j] + a[j*lda+j] = ajj + ajj *= -1 + } else { + ajj = -1 + } + if j < n-1 { + bi.Dtrmv(blas.Lower, blas.NoTrans, diag, n-j-1, a[(j+1)*lda+j+1:], lda, a[(j+1)*lda+j:], lda) + bi.Dscal(n-j-1, ajj, a[(j+1)*lda+j:], lda) + } + } +} diff --git a/lapack/native/dtrtri.go b/lapack/native/dtrtri.go new file mode 100644 index 00000000..700559dd --- /dev/null +++ b/lapack/native/dtrtri.go @@ -0,0 +1,64 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dtrtri computes the inverse of a triangular matrix, storing the result in place +// into a. This is the BLAS level 3 version of the algorithm which builds upon +// Dtrti2 to operate on matrix blocks instead of only individual columns. +// +// Dtrtri will not perform the inversion if the matrix is singular, and returns +// a boolean indicating whether the inversion was successful. +func (impl Implementation) Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool) { + checkMatrix(n, n, a, lda) + if uplo != blas.Upper && uplo != blas.Lower { + panic(badUplo) + } + if diag != blas.NonUnit && diag != blas.Unit { + panic(badDiag) + } + if n == 0 { + return false + } + nonUnit := diag == blas.NonUnit + if nonUnit { + for i := 0; i < n; i++ { + if a[i*lda+i] == 0 { + return false + } + } + } + + bi := blas64.Implementation() + + nb := impl.Ilaenv(1, "DTRTRI", "UD", n, -1, -1, -1) + if nb <= 1 || nb > n { + impl.Dtrti2(uplo, diag, n, a, lda) + return true + } + if uplo == blas.Upper { + for j := 0; j < n; j += nb { + jb := min(nb, n-j) + bi.Dtrmm(blas.Left, blas.Upper, blas.NoTrans, diag, j, jb, 1, a, lda, a[j:], lda) + bi.Dtrsm(blas.Right, blas.Upper, blas.NoTrans, diag, j, jb, -1, a[j*lda+j:], lda, a[j:], lda) + impl.Dtrti2(blas.Upper, diag, jb, a[j*lda+j:], lda) + } + return true + } + nn := ((n - 1) / nb) * nb + for j := nn; j >= 0; j -= nb { + jb := min(nb, n-j) + if j+jb <= n-1 { + bi.Dtrmm(blas.Left, blas.Lower, blas.NoTrans, diag, n-j-jb, jb, 1, a[(j+jb)*lda+j+jb:], lda, a[(j+jb)*lda+j:], lda) + bi.Dtrsm(blas.Right, blas.Lower, blas.NoTrans, diag, n-j-jb, jb, -1, a[j*lda+j:], lda, a[(j+jb)*lda+j:], lda) + } + impl.Dtrti2(blas.Lower, diag, jb, a[j*lda+j:], lda) + } + return true +} diff --git a/lapack/native/dtrtrs.go b/lapack/native/dtrtrs.go new file mode 100644 index 00000000..a9c36419 --- /dev/null +++ b/lapack/native/dtrtrs.go @@ -0,0 +1,30 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dtrtrs solves a triangular system of the form A * X = B or A^T * X = B. Dtrtrs +// returns whether the solve completed successfully. If A is singular, no solve is performed. +func (impl Implementation) Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool) { + nounit := diag == blas.NonUnit + if n == 0 { + return false + } + // Check for singularity. + if nounit { + for i := 0; i < n; i++ { + if a[i*lda+i] == 0 { + return false + } + } + } + bi := blas64.Implementation() + bi.Dtrsm(blas.Left, uplo, trans, diag, n, nrhs, 1, a, lda, b, ldb) + return true +} diff --git a/lapack/native/general.go b/lapack/native/general.go new file mode 100644 index 00000000..0374386e --- /dev/null +++ b/lapack/native/general.go @@ -0,0 +1,130 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/lapack" +) + +// Implementation is the native Go implementation of LAPACK routines. It +// is built on top of calls to the return of blas64.Implementation(), so while +// this code is in pure Go, the underlying BLAS implementation may not be. +type Implementation struct{} + +var _ lapack.Float64 = Implementation{} + +// This list is duplicated in lapack/cgo. Keep in sync. +const ( + absIncNotOne = "lapack: increment not one or negative one" + badAlpha = "lapack: bad alpha length" + badAuxv = "lapack: auxv has insufficient length" + badBeta = "lapack: bad beta length" + badD = "lapack: d has insufficient length" + badDecompUpdate = "lapack: bad decomp update" + badDiag = "lapack: bad diag" + badDims = "lapack: bad input dimensions" + badDirect = "lapack: bad direct" + badE = "lapack: e has insufficient length" + badEVComp = "lapack: bad EVComp" + badEVJob = "lapack: bad EVJob" + badEVSide = "lapack: bad EVSide" + badGSVDJob = "lapack: bad GSVDJob" + badHowMany = "lapack: bad HowMany" + badIlo = "lapack: ilo out of range" + badIhi = "lapack: ihi out of range" + badIpiv = "lapack: bad permutation length" + badJob = "lapack: bad Job" + badK1 = "lapack: k1 out of range" + badK2 = "lapack: k2 out of range" + badKperm = "lapack: incorrect permutation length" + badLdA = "lapack: index of a out of range" + badNb = "lapack: nb out of range" + badNorm = "lapack: bad norm" + badPivot = "lapack: bad pivot" + badS = "lapack: s has insufficient length" + badShifts = "lapack: bad shifts" + badSide = "lapack: bad side" + badSlice = "lapack: bad input slice length" + badSort = "lapack: bad Sort" + badStore = "lapack: bad store" + badTau = "lapack: tau has insufficient length" + badTauQ = "lapack: tauQ has insufficient length" + badTauP = "lapack: tauP has insufficient length" + badTrans = "lapack: bad trans" + badVn1 = "lapack: vn1 has insufficient length" + badVn2 = "lapack: vn2 has insufficient length" + badUplo = "lapack: illegal triangle" + badWork = "lapack: insufficient working memory" + badWorkStride = "lapack: insufficient working array stride" + badZ = "lapack: insufficient z length" + kGTM = "lapack: k > m" + kGTN = "lapack: k > n" + kLT0 = "lapack: k < 0" + mLT0 = "lapack: m < 0" + mLTN = "lapack: m < n" + nanScale = "lapack: NaN scale factor" + negDimension = "lapack: negative matrix dimension" + negZ = "lapack: negative z value" + nLT0 = "lapack: n < 0" + nLTM = "lapack: n < m" + offsetGTM = "lapack: offset > m" + shortWork = "lapack: working array shorter than declared" + zeroDiv = "lapack: zero divisor" +) + +// checkMatrix verifies the parameters of a matrix input. +func checkMatrix(m, n int, a []float64, lda int) { + if m < 0 { + panic("lapack: has negative number of rows") + } + if n < 0 { + panic("lapack: has negative number of columns") + } + if lda < n { + panic("lapack: stride less than number of columns") + } + if len(a) < (m-1)*lda+n { + panic("lapack: insufficient matrix slice length") + } +} + +func checkVector(n int, v []float64, inc int) { + if n < 0 { + panic("lapack: negative vector length") + } + if (inc > 0 && (n-1)*inc >= len(v)) || (inc < 0 && (1-n)*inc >= len(v)) { + panic("lapack: insufficient vector slice length") + } +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +const ( + // dlamchE is the machine epsilon. For IEEE this is 2^{-53}. + dlamchE = 1.0 / (1 << 53) + + // dlamchB is the radix of the machine (the base of the number system). + dlamchB = 2 + + // dlamchP is base * eps. + dlamchP = dlamchB * dlamchE + + // dlamchS is the "safe minimum", that is, the lowest number such that + // 1/dlamchS does not overflow, or also the smallest normal number. + // For IEEE this is 2^{-1022}. + dlamchS = 1.0 / (1 << 256) / (1 << 256) / (1 << 256) / (1 << 254) +) diff --git a/lapack/native/iladlc.go b/lapack/native/iladlc.go new file mode 100644 index 00000000..c7f06489 --- /dev/null +++ b/lapack/native/iladlc.go @@ -0,0 +1,33 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Iladlc scans a matrix for its last non-zero column. Returns -1 if the matrix +// is all zeros. +// +// Iladlc is an internal routine. It is exported for testing purposes. +func (Implementation) Iladlc(m, n int, a []float64, lda int) int { + if n == 0 || m == 0 { + return n - 1 + } + checkMatrix(m, n, a, lda) + + // Test common case where corner is non-zero. + if a[n-1] != 0 || a[(m-1)*lda+(n-1)] != 0 { + return n - 1 + } + + // Scan each row tracking the highest column seen. + highest := -1 + for i := 0; i < m; i++ { + for j := n - 1; j >= 0; j-- { + if a[i*lda+j] != 0 { + highest = max(highest, j) + break + } + } + } + return highest +} diff --git a/lapack/native/iladlr.go b/lapack/native/iladlr.go new file mode 100644 index 00000000..a488a496 --- /dev/null +++ b/lapack/native/iladlr.go @@ -0,0 +1,30 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Iladlr scans a matrix for its last non-zero row. Returns -1 if the matrix +// is all zeros. +// +// Iladlr is an internal routine. It is exported for testing purposes. +func (Implementation) Iladlr(m, n int, a []float64, lda int) int { + if m == 0 { + return m - 1 + } + + checkMatrix(m, n, a, lda) + + // Check the common case where the corner is non-zero + if a[(m-1)*lda] != 0 || a[(m-1)*lda+n-1] != 0 { + return m - 1 + } + for i := m - 1; i >= 0; i-- { + for j := 0; j < n; j++ { + if a[i*lda+j] != 0 { + return i + } + } + } + return -1 +} diff --git a/lapack/native/ilaenv.go b/lapack/native/ilaenv.go new file mode 100644 index 00000000..cdd42327 --- /dev/null +++ b/lapack/native/ilaenv.go @@ -0,0 +1,387 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Ilaenv returns algorithm tuning parameters for the algorithm given by the +// input string. ispec specifies the parameter to return: +// 1: The optimal block size for a blocked algorithm. +// 2: The minimum block size for a blocked algorithm. +// 3: The block size of unprocessed data at which a blocked algorithm should +// crossover to an unblocked version. +// 4: The number of shifts. +// 5: The minimum column dimension for blocking to be used. +// 6: The crossover point for SVD (to use QR factorization or not). +// 7: The number of processors. +// 8: The crossover point for multi-shift in QR and QZ methods for non-symmetric eigenvalue problems. +// 9: Maximum size of the subproblems in divide-and-conquer algorithms. +// 10: ieee NaN arithmetic can be trusted not to trap. +// 11: infinity arithmetic can be trusted not to trap. +// 12...16: parameters for Dhseqr and related functions. See Iparmq for more +// information. +// +// Ilaenv is an internal routine. It is exported for testing purposes. +func (impl Implementation) Ilaenv(ispec int, s string, opts string, n1, n2, n3, n4 int) int { + // TODO(btracey): Replace this with a constant lookup? A list of constants? + sname := s[0] == 'S' || s[0] == 'D' + cname := s[0] == 'C' || s[0] == 'Z' + if !sname && !cname { + panic("lapack: bad name") + } + c2 := s[1:3] + c3 := s[3:6] + c4 := c3[1:3] + + switch ispec { + default: + panic("lapack: bad ispec") + case 1: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 32 + } + return 32 + case "HRD": + if sname { + return 32 + } + return 32 + case "BRD": + if sname { + return 32 + } + return 32 + case "TRI": + if sname { + return 64 + } + return 64 + } + case "PO": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + } + case "SY": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + case "TRD": + return 32 + case "GST": + return 64 + } + case "HE": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + return 64 + case "TRD": + return 32 + case "GST": + return 64 + } + case "OR": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + case 'M': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + case 'M': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + } + case "GB": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + if n4 <= 64 { + return 1 + } + return 32 + } + if n4 <= 64 { + return 1 + } + return 32 + } + case "PB": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + if n4 <= 64 { + return 1 + } + return 32 + } + if n4 <= 64 { + return 1 + } + return 32 + } + case "TR": + switch c3 { + default: + panic("lapack: bad function name") + case "TRI": + if sname { + return 64 + } + return 64 + case "EVC": + if sname { + return 64 + } + return 64 + } + case "LA": + switch c3 { + default: + panic("lapack: bad function name") + case "UUM": + if sname { + return 64 + } + return 64 + } + case "ST": + if sname && c3 == "EBZ" { + return 1 + } + panic("lapack: bad function name") + } + case 2: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 2 + } + return 2 + case "HRD": + if sname { + return 2 + } + return 2 + case "BRD": + if sname { + return 2 + } + return 2 + case "TRI": + if sname { + return 2 + } + return 2 + } + case "SY": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 8 + } + return 8 + case "TRD": + if sname { + return 2 + } + panic("lapack: bad function name") + } + case "HE": + if c3 == "TRD" { + return 2 + } + panic("lapack: bad function name") + case "OR": + if !sname { + panic("lapack: bad function name") + } + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + case 'M': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + case 'M': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + } + } + case 3: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 128 + } + return 128 + case "HRD": + if sname { + return 128 + } + return 128 + case "BRD": + if sname { + return 128 + } + return 128 + } + case "SY": + if sname && c3 == "TRD" { + return 32 + } + panic("lapack: bad function name") + case "HE": + if c3 == "TRD" { + return 32 + } + panic("lapack: bad function name") + case "OR": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 128 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 128 + } + } + } + case 4: + // Used by xHSEQR + return 6 + case 5: + // Not used + return 2 + case 6: + // Used by xGELSS and xGESVD + return int(float64(min(n1, n2)) * 1.6) + case 7: + // Not used + return 1 + case 8: + // Used by xHSEQR + return 50 + case 9: + // used by xGELSD and xGESDD + return 25 + case 10: + // Go guarantees ieee + return 1 + case 11: + // Go guarantees ieee + return 1 + case 12, 13, 14, 15, 16: + // Dhseqr and related functions for eigenvalue problems. + return impl.Iparmq(ispec, s, opts, n1, n2, n3, n4) + } +} diff --git a/lapack/native/iparmq.go b/lapack/native/iparmq.go new file mode 100644 index 00000000..48cb000f --- /dev/null +++ b/lapack/native/iparmq.go @@ -0,0 +1,115 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Iparmq returns problem and machine dependent parameters useful for Dhseqr and +// related subroutines for eigenvalue problems. +// +// ispec specifies the parameter to return: +// 12: Crossover point between Dlahqr and Dlaqr0. Will be at least 11. +// 13: Deflation window size. +// 14: Nibble crossover point. Determines when to skip a multi-shift QR sweep. +// 15: Number of simultaneous shifts in a multishift QR iteration. +// 16: Select structured matrix multiply. +// For other values of ispec Iparmq will panic. +// +// name is the name of the calling function. name must be in uppercase but this +// is not checked. +// +// opts is not used and exists for future use. +// +// n is the order of the Hessenberg matrix H. +// +// ilo and ihi specify the block [ilo:ihi+1,ilo:ihi+1] that is being processed. +// +// lwork is the amount of workspace available. +// +// Except for ispec input parameters are not checked. +// +// Iparmq is an internal routine. It is exported for testing purposes. +func (Implementation) Iparmq(ispec int, name, opts string, n, ilo, ihi, lwork int) int { + nh := ihi - ilo + 1 + ns := 2 + switch { + case nh >= 30: + ns = 4 + case nh >= 60: + ns = 10 + case nh >= 150: + ns = max(10, nh/int(math.Log(float64(nh))/math.Ln2)) + case nh >= 590: + ns = 64 + case nh >= 3000: + ns = 128 + case nh >= 6000: + ns = 256 + } + ns = max(2, ns-(ns%2)) + + switch ispec { + default: + panic("lapack: bad ispec") + + case 12: + // Matrices of order smaller than nmin get sent to Dlahqr, the + // classic double shift algorithm. This must be at least 11. + const nmin = 75 + return nmin + + case 13: + const knwswp = 500 + if nh <= knwswp { + return ns + } + return 3 * ns / 2 + + case 14: + // Skip a computationally expensive multi-shift QR sweep with + // Dlaqr5 whenever aggressive early deflation finds at least + // nibble*(window size)/100 deflations. The default, small, + // value reflects the expectation that the cost of looking + // through the deflation window with Dlaqr3 will be + // substantially smaller. + const nibble = 14 + return nibble + + case 15: + return ns + + case 16: + if len(name) != 6 { + panic("lapack: bad name") + } + const ( + k22min = 14 + kacmin = 14 + ) + var acc22 int + switch { + case name[1:] == "GGHRD" || name[1:] == "GGHD3": + acc22 = 1 + if nh >= k22min { + acc22 = 2 + } + case name[3:] == "EXC": + if nh >= kacmin { + acc22 = 1 + } + if nh >= k22min { + acc22 = 2 + } + case name[1:] == "HSEQR" || name[1:5] == "LAQR": + if ns >= kacmin { + acc22 = 1 + } + if ns >= k22min { + acc22 = 2 + } + } + return acc22 + } +} diff --git a/lapack/native/lapack_test.go b/lapack/native/lapack_test.go new file mode 100644 index 00000000..ee7ed1ac --- /dev/null +++ b/lapack/native/lapack_test.go @@ -0,0 +1,429 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "testing" + + "github.com/gonum/lapack/testlapack" +) + +var impl = Implementation{} + +func TestDbdsqr(t *testing.T) { + testlapack.DbdsqrTest(t, impl) +} + +func TestDhseqr(t *testing.T) { + testlapack.DhseqrTest(t, impl) +} + +func TestDgebak(t *testing.T) { + testlapack.DgebakTest(t, impl) +} + +func TestDgebal(t *testing.T) { + testlapack.DgebalTest(t, impl) +} + +func TestDgebd2(t *testing.T) { + testlapack.Dgebd2Test(t, impl) +} + +func TestDgebrd(t *testing.T) { + testlapack.DgebrdTest(t, impl) +} + +func TestDgecon(t *testing.T) { + testlapack.DgeconTest(t, impl) +} + +func TestDgeev(t *testing.T) { + testlapack.DgeevTest(t, impl) +} + +func TestDgehd2(t *testing.T) { + testlapack.Dgehd2Test(t, impl) +} + +func TestDgehrd(t *testing.T) { + testlapack.DgehrdTest(t, impl) +} + +func TestDgelqf(t *testing.T) { + testlapack.DgelqfTest(t, impl) +} + +func TestDgelq2(t *testing.T) { + testlapack.Dgelq2Test(t, impl) +} + +func TestDgeql2(t *testing.T) { + testlapack.Dgeql2Test(t, impl) +} + +func TestDgels(t *testing.T) { + testlapack.DgelsTest(t, impl) +} + +func TestDgerq2(t *testing.T) { + testlapack.Dgerq2Test(t, impl) +} + +func TestDgeqp3(t *testing.T) { + testlapack.Dgeqp3Test(t, impl) +} + +func TestDgeqr2(t *testing.T) { + testlapack.Dgeqr2Test(t, impl) +} + +func TestDgeqrf(t *testing.T) { + testlapack.DgeqrfTest(t, impl) +} + +func TestDgerqf(t *testing.T) { + testlapack.DgerqfTest(t, impl) +} + +func TestDgesvd(t *testing.T) { + testlapack.DgesvdTest(t, impl) +} + +func TestDgetri(t *testing.T) { + testlapack.DgetriTest(t, impl) +} + +func TestDgetf2(t *testing.T) { + testlapack.Dgetf2Test(t, impl) +} + +func TestDgetrf(t *testing.T) { + testlapack.DgetrfTest(t, impl) +} + +func TestDgetrs(t *testing.T) { + testlapack.DgetrsTest(t, impl) +} + +func TestDggsvd3(t *testing.T) { + testlapack.Dggsvd3Test(t, impl) +} + +func TestDggsvp3(t *testing.T) { + testlapack.Dggsvp3Test(t, impl) +} + +func TestDlabrd(t *testing.T) { + testlapack.DlabrdTest(t, impl) +} + +func TestDlacn2(t *testing.T) { + testlapack.Dlacn2Test(t, impl) +} + +func TestDlacpy(t *testing.T) { + testlapack.DlacpyTest(t, impl) +} + +func TestDlae2(t *testing.T) { + testlapack.Dlae2Test(t, impl) +} + +func TestDlaev2(t *testing.T) { + testlapack.Dlaev2Test(t, impl) +} + +func TestDlaexc(t *testing.T) { + testlapack.DlaexcTest(t, impl) +} + +func TestDlags2(t *testing.T) { + testlapack.Dlags2Test(t, impl) +} + +func TestDlahqr(t *testing.T) { + testlapack.DlahqrTest(t, impl) +} + +func TestDlahr2(t *testing.T) { + testlapack.Dlahr2Test(t, impl) +} + +func TestDlaln2(t *testing.T) { + testlapack.Dlaln2Test(t, impl) +} + +func TestDlange(t *testing.T) { + testlapack.DlangeTest(t, impl) +} + +func TestDlapy2(t *testing.T) { + testlapack.Dlapy2Test(t, impl) +} + +func TestDlapll(t *testing.T) { + testlapack.DlapllTest(t, impl) +} + +func TestDlapmt(t *testing.T) { + testlapack.DlapmtTest(t, impl) +} + +func TestDlas2(t *testing.T) { + testlapack.Dlas2Test(t, impl) +} + +func TestDlascl(t *testing.T) { + testlapack.DlasclTest(t, impl) +} + +func TestDlaset(t *testing.T) { + testlapack.DlasetTest(t, impl) +} + +func TestDlasrt(t *testing.T) { + testlapack.DlasrtTest(t, impl) +} + +func TestDlaswp(t *testing.T) { + testlapack.DlaswpTest(t, impl) +} + +func TestDlasy2(t *testing.T) { + testlapack.Dlasy2Test(t, impl) +} + +func TestDlanst(t *testing.T) { + testlapack.DlanstTest(t, impl) +} + +func TestDlansy(t *testing.T) { + testlapack.DlansyTest(t, impl) +} + +func TestDlantr(t *testing.T) { + testlapack.DlantrTest(t, impl) +} + +func TestDlanv2(t *testing.T) { + testlapack.Dlanv2Test(t, impl) +} + +func TestDlaqr04(t *testing.T) { + testlapack.Dlaqr04Test(t, impl) +} + +func TestDlaqp2(t *testing.T) { + testlapack.Dlaqp2Test(t, impl) +} + +func TestDlaqps(t *testing.T) { + testlapack.DlaqpsTest(t, impl) +} + +func TestDlaqr1(t *testing.T) { + testlapack.Dlaqr1Test(t, impl) +} + +func TestDlaqr23(t *testing.T) { + testlapack.Dlaqr23Test(t, impl) +} + +func TestDlaqr5(t *testing.T) { + testlapack.Dlaqr5Test(t, impl) +} + +func TestDlarf(t *testing.T) { + testlapack.DlarfTest(t, impl) +} + +func TestDlarfb(t *testing.T) { + testlapack.DlarfbTest(t, impl) +} + +func TestDlarfg(t *testing.T) { + testlapack.DlarfgTest(t, impl) +} + +func TestDlarft(t *testing.T) { + testlapack.DlarftTest(t, impl) +} + +func TestDlarfx(t *testing.T) { + testlapack.DlarfxTest(t, impl) +} + +func TestDlartg(t *testing.T) { + testlapack.DlartgTest(t, impl) +} + +func TestDlasq1(t *testing.T) { + testlapack.Dlasq1Test(t, impl) +} + +func TestDlasq2(t *testing.T) { + testlapack.Dlasq2Test(t, impl) +} + +func TestDlasq3(t *testing.T) { + testlapack.Dlasq3Test(t, impl) +} + +func TestDlasq4(t *testing.T) { + testlapack.Dlasq4Test(t, impl) +} + +func TestDlasq5(t *testing.T) { + testlapack.Dlasq5Test(t, impl) +} + +func TestDlasr(t *testing.T) { + testlapack.DlasrTest(t, impl) +} + +func TestDlasv2(t *testing.T) { + testlapack.Dlasv2Test(t, impl) +} + +func TestDlatrd(t *testing.T) { + testlapack.DlatrdTest(t, impl) +} + +func TestDlatrs(t *testing.T) { + testlapack.DlatrsTest(t, impl) +} + +func TestDorg2r(t *testing.T) { + testlapack.Dorg2rTest(t, impl) +} + +func TestDorgbr(t *testing.T) { + testlapack.DorgbrTest(t, impl) +} + +func TestDorghr(t *testing.T) { + testlapack.DorghrTest(t, impl) +} + +func TestDorg2l(t *testing.T) { + testlapack.Dorg2lTest(t, impl) +} + +func TestDorgl2(t *testing.T) { + testlapack.Dorgl2Test(t, impl) +} + +func TestDorglq(t *testing.T) { + testlapack.DorglqTest(t, impl) +} + +func TestDorgql(t *testing.T) { + testlapack.DorgqlTest(t, impl) +} + +func TestDorgqr(t *testing.T) { + testlapack.DorgqrTest(t, impl) +} + +func TestDorgtr(t *testing.T) { + testlapack.DorgtrTest(t, impl) +} + +func TestDormbr(t *testing.T) { + testlapack.DormbrTest(t, impl) +} + +func TestDormhr(t *testing.T) { + testlapack.DormhrTest(t, impl) +} + +func TestDorml2(t *testing.T) { + testlapack.Dorml2Test(t, impl) +} + +func TestDormlq(t *testing.T) { + testlapack.DormlqTest(t, impl) +} + +func TestDormqr(t *testing.T) { + testlapack.DormqrTest(t, impl) +} + +func TestDormr2(t *testing.T) { + testlapack.Dormr2Test(t, impl) +} + +func TestDorm2r(t *testing.T) { + testlapack.Dorm2rTest(t, impl) +} + +func TestDpocon(t *testing.T) { + testlapack.DpoconTest(t, impl) +} + +func TestDpotf2(t *testing.T) { + testlapack.Dpotf2Test(t, impl) +} + +func TestDpotrf(t *testing.T) { + testlapack.DpotrfTest(t, impl) +} + +func TestDrscl(t *testing.T) { + testlapack.DrsclTest(t, impl) +} + +func TestDsteqr(t *testing.T) { + testlapack.DsteqrTest(t, impl) +} + +func TestDsterf(t *testing.T) { + testlapack.DsterfTest(t, impl) +} + +func TestDsyev(t *testing.T) { + testlapack.DsyevTest(t, impl) +} + +func TestDsytd2(t *testing.T) { + testlapack.Dsytd2Test(t, impl) +} + +func TestDsytrd(t *testing.T) { + testlapack.DsytrdTest(t, impl) +} + +func TestDtgsja(t *testing.T) { + testlapack.DtgsjaTest(t, impl) +} + +func TestDtrcon(t *testing.T) { + testlapack.DtrconTest(t, impl) +} + +func TestDtrevc3(t *testing.T) { + testlapack.Dtrevc3Test(t, impl) +} + +func TestDtrexc(t *testing.T) { + testlapack.DtrexcTest(t, impl) +} + +func TestDtrti2(t *testing.T) { + testlapack.Dtrti2Test(t, impl) +} + +func TestDtrtri(t *testing.T) { + testlapack.DtrtriTest(t, impl) +} + +func TestIladlc(t *testing.T) { + testlapack.IladlcTest(t, impl) +} + +func TestIladlr(t *testing.T) { + testlapack.IladlrTest(t, impl) +} diff --git a/lapack/testlapack/dbdsqr.go b/lapack/testlapack/dbdsqr.go new file mode 100644 index 00000000..0ba9537f --- /dev/null +++ b/lapack/testlapack/dbdsqr.go @@ -0,0 +1,198 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "sort" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dbdsqrer interface { + Dbdsqr(uplo blas.Uplo, n, ncvt, nru, ncc int, d, e, vt []float64, ldvt int, u []float64, ldu int, c []float64, ldc int, work []float64) (ok bool) +} + +func DbdsqrTest(t *testing.T, impl Dbdsqrer) { + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + _ = bi + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, test := range []struct { + n, ncvt, nru, ncc, ldvt, ldu, ldc int + }{ + {5, 5, 5, 5, 0, 0, 0}, + {10, 10, 10, 10, 0, 0, 0}, + {10, 11, 12, 13, 0, 0, 0}, + {20, 13, 12, 11, 0, 0, 0}, + + {5, 5, 5, 5, 6, 7, 8}, + {10, 10, 10, 10, 30, 40, 50}, + {10, 12, 11, 13, 30, 40, 50}, + {20, 12, 13, 11, 30, 40, 50}, + + {130, 130, 130, 500, 900, 900, 500}, + } { + for cas := 0; cas < 100; cas++ { + n := test.n + ncvt := test.ncvt + nru := test.nru + ncc := test.ncc + ldvt := test.ldvt + ldu := test.ldu + ldc := test.ldc + if ldvt == 0 { + ldvt = ncvt + } + if ldu == 0 { + ldu = n + } + if ldc == 0 { + ldc = ncc + } + + d := make([]float64, n) + for i := range d { + d[i] = rnd.NormFloat64() + } + e := make([]float64, n-1) + for i := range e { + e[i] = rnd.NormFloat64() + } + dCopy := make([]float64, len(d)) + copy(dCopy, d) + eCopy := make([]float64, len(e)) + copy(eCopy, e) + work := make([]float64, 4*n) + for i := range work { + work[i] = rnd.NormFloat64() + } + + // First test the decomposition of the bidiagonal matrix. Set + // pt and u equal to I with the correct size. At the result + // of Dbdsqr, p and u will contain the data of P^T and Q, which + // will be used in the next step to test the multiplication + // with Q and VT. + + q := make([]float64, n*n) + ldq := n + pt := make([]float64, n*n) + ldpt := n + for i := 0; i < n; i++ { + q[i*ldq+i] = 1 + } + for i := 0; i < n; i++ { + pt[i*ldpt+i] = 1 + } + + ok := impl.Dbdsqr(uplo, n, n, n, 0, d, e, pt, ldpt, q, ldq, nil, 0, work) + + isUpper := uplo == blas.Upper + errStr := fmt.Sprintf("isUpper = %v, n = %v, ncvt = %v, nru = %v, ncc = %v", isUpper, n, ncvt, nru, ncc) + if !ok { + t.Errorf("Unexpected Dbdsqr failure: %s", errStr) + } + + bMat := constructBidiagonal(uplo, n, dCopy, eCopy) + sMat := constructBidiagonal(uplo, n, d, e) + + tmp := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + ansMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, q, ldq, sMat.Data, sMat.Stride, 0, tmp.Data, tmp.Stride) + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, tmp.Data, tmp.Stride, pt, ldpt, 0, ansMat.Data, ansMat.Stride) + + same := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if !floats.EqualWithinAbsOrRel(ansMat.Data[i*ansMat.Stride+j], bMat.Data[i*bMat.Stride+j], 1e-8, 1e-8) { + same = false + } + } + } + if !same { + t.Errorf("Bidiagonal mismatch. %s", errStr) + } + if !sort.IsSorted(sort.Reverse(sort.Float64Slice(d))) { + t.Errorf("D is not sorted. %s", errStr) + } + + // The above computed the real P and Q. Now input data for V^T, + // U, and C to check that the multiplications happen properly. + dAns := make([]float64, len(d)) + copy(dAns, d) + eAns := make([]float64, len(e)) + copy(eAns, e) + + u := make([]float64, nru*ldu) + for i := range u { + u[i] = rnd.NormFloat64() + } + uCopy := make([]float64, len(u)) + copy(uCopy, u) + vt := make([]float64, n*ldvt) + for i := range vt { + vt[i] = rnd.NormFloat64() + } + vtCopy := make([]float64, len(vt)) + copy(vtCopy, vt) + c := make([]float64, n*ldc) + for i := range c { + c[i] = rnd.NormFloat64() + } + cCopy := make([]float64, len(c)) + copy(cCopy, c) + + // Reset input data + copy(d, dCopy) + copy(e, eCopy) + impl.Dbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work) + + // Check result. + if !floats.EqualApprox(d, dAns, 1e-14) { + t.Errorf("D mismatch second time. %s", errStr) + } + if !floats.EqualApprox(e, eAns, 1e-14) { + t.Errorf("E mismatch second time. %s", errStr) + } + ans := make([]float64, len(vtCopy)) + copy(ans, vtCopy) + ldans := ldvt + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, ncvt, n, 1, pt, ldpt, vtCopy, ldvt, 0, ans, ldans) + if !floats.EqualApprox(ans, vt, 1e-10) { + t.Errorf("Vt result mismatch. %s", errStr) + } + ans = make([]float64, len(uCopy)) + copy(ans, uCopy) + ldans = ldu + bi.Dgemm(blas.NoTrans, blas.NoTrans, nru, n, n, 1, uCopy, ldu, q, ldq, 0, ans, ldans) + if !floats.EqualApprox(ans, u, 1e-10) { + t.Errorf("U result mismatch. %s", errStr) + } + ans = make([]float64, len(cCopy)) + copy(ans, cCopy) + ldans = ldc + bi.Dgemm(blas.Trans, blas.NoTrans, n, ncc, n, 1, q, ldq, cCopy, ldc, 0, ans, ldans) + if !floats.EqualApprox(ans, c, 1e-10) { + t.Errorf("C result mismatch. %s", errStr) + } + } + } + } +} diff --git a/lapack/testlapack/dgebak.go b/lapack/testlapack/dgebak.go new file mode 100644 index 00000000..88517d3c --- /dev/null +++ b/lapack/testlapack/dgebak.go @@ -0,0 +1,110 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +type Dgebaker interface { + Dgebak(job lapack.Job, side lapack.EVSide, n, ilo, ihi int, scale []float64, m int, v []float64, ldv int) +} + +func DgebakTest(t *testing.T, impl Dgebaker) { + rnd := rand.New(rand.NewSource(1)) + + for _, job := range []lapack.Job{lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale} { + for _, side := range []lapack.EVSide{lapack.LeftEV, lapack.RightEV} { + for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { + for _, extra := range []int{0, 11} { + for cas := 0; cas < 100; cas++ { + m := rnd.Intn(n + 1) + v := randomGeneral(n, m, m+extra, rnd) + var ilo, ihi int + if v.Rows > 0 { + ihi = rnd.Intn(n) + ilo = rnd.Intn(ihi + 1) + } else { + ihi = -1 + } + testDgebak(t, impl, job, side, ilo, ihi, v, rnd) + } + } + } + } + } +} + +func testDgebak(t *testing.T, impl Dgebaker, job lapack.Job, side lapack.EVSide, ilo, ihi int, v blas64.General, rnd *rand.Rand) { + const tol = 1e-15 + n := v.Rows + m := v.Cols + extra := v.Stride - v.Cols + + // Create D and D^{-1} by generating random scales between ilo and ihi. + d := eye(n, n) + dinv := eye(n, n) + scale := nanSlice(n) + if job == lapack.Scale || job == lapack.PermuteScale { + if ilo == ihi { + scale[ilo] = 1 + } else { + for i := ilo; i <= ihi; i++ { + scale[i] = 2 * rnd.Float64() + d.Data[i*d.Stride+i] = scale[i] + dinv.Data[i*dinv.Stride+i] = 1 / scale[i] + } + } + } + + // Create P by generating random column swaps. + p := eye(n, n) + if job == lapack.Permute || job == lapack.PermuteScale { + // Make up some random permutations. + for i := n - 1; i > ihi; i-- { + scale[i] = float64(rnd.Intn(i + 1)) + blas64.Swap(n, + blas64.Vector{p.Stride, p.Data[i:]}, + blas64.Vector{p.Stride, p.Data[int(scale[i]):]}) + } + for i := 0; i < ilo; i++ { + scale[i] = float64(i + rnd.Intn(ihi-i+1)) + blas64.Swap(n, + blas64.Vector{p.Stride, p.Data[i:]}, + blas64.Vector{p.Stride, p.Data[int(scale[i]):]}) + } + } + + got := cloneGeneral(v) + impl.Dgebak(job, side, n, ilo, ihi, scale, m, got.Data, got.Stride) + + prefix := fmt.Sprintf("Case job=%v, side=%v, n=%v, ilo=%v, ihi=%v, m=%v, extra=%v", + job, side, n, ilo, ihi, m, extra) + + if !generalOutsideAllNaN(got) { + t.Errorf("%v: out-of-range write to V\n%v", prefix, got.Data) + } + + // Compute D*V or D^{-1}*V and store into dv. + dv := zeros(n, m, m) + if side == lapack.RightEV { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, d, v, 0, dv) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, dinv, v, 0, dv) + } + // Compute P*D*V or P*D^{-1}*V and store into want. + want := zeros(n, m, m) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, p, dv, 0, want) + + if !equalApproxGeneral(want, got, tol) { + t.Errorf("%v: unexpected value of V", prefix) + } +} diff --git a/lapack/testlapack/dgebal.go b/lapack/testlapack/dgebal.go new file mode 100644 index 00000000..fbf5e94f --- /dev/null +++ b/lapack/testlapack/dgebal.go @@ -0,0 +1,175 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +type Dgebaler interface { + Dgebal(job lapack.Job, n int, a []float64, lda int, scale []float64) (int, int) +} + +func DgebalTest(t *testing.T, impl Dgebaler) { + rnd := rand.New(rand.NewSource(1)) + + for _, job := range []lapack.Job{lapack.None, lapack.Permute, lapack.Scale, lapack.PermuteScale} { + for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 18, 31, 53, 100} { + for _, extra := range []int{0, 11} { + for cas := 0; cas < 100; cas++ { + a := unbalancedSparseGeneral(n, n, n+extra, 2*n, rnd) + testDgebal(t, impl, job, a) + } + } + } + } +} + +func testDgebal(t *testing.T, impl Dgebaler, job lapack.Job, a blas64.General) { + const tol = 1e-14 + + n := a.Rows + extra := a.Stride - n + + var scale []float64 + if n > 0 { + scale = nanSlice(n) + } + + want := cloneGeneral(a) + + ilo, ihi := impl.Dgebal(job, n, a.Data, a.Stride, scale) + + prefix := fmt.Sprintf("Case job=%v, n=%v, extra=%v", job, n, extra) + + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + + if n == 0 { + if ilo != 0 { + t.Errorf("%v: unexpected ilo when n=0. Want 0, got %v", prefix, n, ilo) + } + if ihi != -1 { + t.Errorf("%v: unexpected ihi when n=0. Want -1, got %v", prefix, n, ihi) + } + return + } + + if job == lapack.None { + if ilo != 0 { + t.Errorf("%v: unexpected ilo when job=None. Want 0, got %v", prefix, ilo) + } + if ihi != n-1 { + t.Errorf("%v: unexpected ihi when job=None. Want %v, got %v", prefix, n-1, ihi) + } + k := -1 + for i := range scale { + if scale[i] != 1 { + k = i + break + } + } + if k != -1 { + t.Errorf("%v: unexpected scale[%v] when job=None. Want 1, got %v", prefix, k, scale[k]) + } + if !equalApproxGeneral(a, want, 0) { + t.Errorf("%v: unexpected modification of A when job=None", prefix) + } + return + } + + if ilo < 0 || ihi < ilo || n <= ihi { + t.Errorf("%v: invalid ordering of ilo=%v and ihi=%v", prefix, ilo, ihi) + } + + if ilo >= 2 && !isUpperTriangular(blas64.General{ilo - 1, ilo - 1, a.Stride, a.Data}) { + t.Errorf("%v: T1 is not upper triangular", prefix) + } + m := n - ihi - 1 // Order of T2. + k := ihi + 1 + if m >= 2 && !isUpperTriangular(blas64.General{m, m, a.Stride, a.Data[k*a.Stride+k:]}) { + t.Errorf("%v: T2 is not upper triangular", prefix) + } + + if job == lapack.Permute || job == lapack.PermuteScale { + // Check that all rows in [ilo:ihi+1] have at least one nonzero + // off-diagonal element. + zeroRow := -1 + for i := ilo; i <= ihi; i++ { + onlyZeros := true + for j := ilo; j <= ihi; j++ { + if i != j && a.Data[i*a.Stride+j] != 0 { + onlyZeros = false + break + } + } + if onlyZeros { + zeroRow = i + break + } + } + if zeroRow != -1 && ilo != ihi { + t.Errorf("%v: row %v has only zero off-diagonal elements, ilo=%v, ihi=%v", prefix, zeroRow, ilo, ihi) + } + // Check that all columns in [ilo:ihi+1] have at least one nonzero + // off-diagonal element. + zeroCol := -1 + for j := ilo; j <= ihi; j++ { + onlyZeros := true + for i := ilo; i <= ihi; i++ { + if i != j && a.Data[i*a.Stride+j] != 0 { + onlyZeros = false + break + } + } + if onlyZeros { + zeroCol = j + break + } + } + if zeroCol != -1 && ilo != ihi { + t.Errorf("%v: column %v has only zero off-diagonal elements, ilo=%v, ihi=%v", prefix, zeroCol, ilo, ihi) + } + + // Create the permutation matrix P. + p := eye(n, n) + for j := n - 1; j > ihi; j-- { + blas64.Swap(n, + blas64.Vector{p.Stride, p.Data[j:]}, + blas64.Vector{p.Stride, p.Data[int(scale[j]):]}) + } + for j := 0; j < ilo; j++ { + blas64.Swap(n, + blas64.Vector{p.Stride, p.Data[j:]}, + blas64.Vector{p.Stride, p.Data[int(scale[j]):]}) + } + // Compute P^T*A*P and store into want. + ap := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, want, p, 0, ap) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, p, ap, 0, want) + } + if job == lapack.Scale || job == lapack.PermuteScale { + // Modify want by D and D^{-1}. + d := eye(n, n) + dinv := eye(n, n) + for i := ilo; i <= ihi; i++ { + d.Data[i*d.Stride+i] = scale[i] + dinv.Data[i*dinv.Stride+i] = 1 / scale[i] + } + ad := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, want, d, 0, ad) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, dinv, ad, 0, want) + } + if !equalApproxGeneral(want, a, tol) { + t.Errorf("%v: unexpected value of A, ilo=%v, ihi=%v", prefix, ilo, ihi) + } +} diff --git a/lapack/testlapack/dgebd2.go b/lapack/testlapack/dgebd2.go new file mode 100644 index 00000000..f122c407 --- /dev/null +++ b/lapack/testlapack/dgebd2.go @@ -0,0 +1,54 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" +) + +type Dgebd2er interface { + Dgebd2(m, n int, a []float64, lda int, d, e, tauq, taup, work []float64) +} + +func Dgebd2Test(t *testing.T, impl Dgebd2er) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {3, 4, 0}, + {4, 3, 0}, + {3, 4, 10}, + {4, 3, 10}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + nb := min(m, n) // 'nb' name parallel with Dlabrd code. + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + d := nanSlice(nb) + e := nanSlice(nb - 1) + tauP := nanSlice(nb) + tauQ := nanSlice(nb) + work := nanSlice(max(m, n)) + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dgebd2(m, n, a, lda, d, e, tauQ, tauP, work) + if m >= n && nb == n { + tauP[n-1] = 0 + } + if m < n && nb == m { + tauQ[m-1] = 0 + } + + checkBidiagonal(t, m, n, nb, a, lda, d, e, tauP, tauQ, aCopy) + } +} diff --git a/lapack/testlapack/dgebrd.go b/lapack/testlapack/dgebrd.go new file mode 100644 index 00000000..9042659e --- /dev/null +++ b/lapack/testlapack/dgebrd.go @@ -0,0 +1,151 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dgebrder interface { + Dgebrd(m, n int, a []float64, lda int, d, e, tauQ, tauP, work []float64, lwork int) + Dgebd2er +} + +func DgebrdTest(t *testing.T, impl Dgebrder) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {100, 100, 0}, + {100, 150, 0}, + {150, 100, 0}, + {100, 100, 200}, + {100, 150, 200}, + {150, 100, 200}, + + {300, 300, 0}, + {300, 400, 0}, + {400, 300, 0}, + {300, 300, 500}, + {300, 400, 500}, + {300, 400, 500}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + minmn := min(m, n) + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + + d := make([]float64, minmn) + e := make([]float64, minmn-1) + tauP := make([]float64, minmn) + tauQ := make([]float64, minmn) + work := make([]float64, max(m, n)) + for i := range work { + work[i] = math.NaN() + } + + // Store a. + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + // Compute the true answer with the unblocked algorithm. + impl.Dgebd2(m, n, a, lda, d, e, tauQ, tauP, work) + aAns := make([]float64, len(a)) + copy(aAns, a) + dAns := make([]float64, len(d)) + copy(dAns, d) + eAns := make([]float64, len(e)) + copy(eAns, e) + tauQAns := make([]float64, len(tauQ)) + copy(tauQAns, tauQ) + tauPAns := make([]float64, len(tauP)) + copy(tauPAns, tauP) + + // Test with optimal work. + lwork := -1 + copy(a, aCopy) + impl.Dgebrd(m, n, a, lda, d, e, tauQ, tauP, work, lwork) + work = make([]float64, int(work[0])) + lwork = len(work) + for i := range work { + work[i] = math.NaN() + } + for i := range d { + d[i] = math.NaN() + } + for i := range e { + e[i] = math.NaN() + } + for i := range tauQ { + tauQ[i] = math.NaN() + } + for i := range tauP { + tauP[i] = math.NaN() + } + impl.Dgebrd(m, n, a, lda, d, e, tauQ, tauP, work, lwork) + + // Test answers + if !floats.EqualApprox(a, aAns, 1e-10) { + t.Errorf("a mismatch") + } + if !floats.EqualApprox(d, dAns, 1e-10) { + t.Errorf("d mismatch") + } + if !floats.EqualApprox(e, eAns, 1e-10) { + t.Errorf("e mismatch") + } + if !floats.EqualApprox(tauQ, tauQAns, 1e-10) { + t.Errorf("tauQ mismatch") + } + if !floats.EqualApprox(tauP, tauPAns, 1e-10) { + t.Errorf("tauP mismatch") + } + + // Test with shorter than optimal work. + lwork-- + copy(a, aCopy) + for i := range d { + d[i] = 0 + } + for i := range e { + e[i] = 0 + } + for i := range tauP { + tauP[i] = 0 + } + for i := range tauQ { + tauQ[i] = 0 + } + impl.Dgebrd(m, n, a, lda, d, e, tauQ, tauP, work, lwork) + + // Test answers + if !floats.EqualApprox(a, aAns, 1e-10) { + t.Errorf("a mismatch") + } + if !floats.EqualApprox(d, dAns, 1e-10) { + t.Errorf("d mismatch") + } + if !floats.EqualApprox(e, eAns, 1e-10) { + t.Errorf("e mismatch") + } + if !floats.EqualApprox(tauQ, tauQAns, 1e-10) { + t.Errorf("tauQ mismatch") + } + if !floats.EqualApprox(tauP, tauPAns, 1e-10) { + t.Errorf("tauP mismatch") + } + } +} diff --git a/lapack/testlapack/dgecon.go b/lapack/testlapack/dgecon.go new file mode 100644 index 00000000..e140a106 --- /dev/null +++ b/lapack/testlapack/dgecon.go @@ -0,0 +1,97 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "log" + "testing" + + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dgeconer interface { + Dlanger + Dgetrfer + Dgecon(norm lapack.MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 +} + +func DgeconTest(t *testing.T, impl Dgeconer) { + for _, test := range []struct { + m int + n int + a []float64 + condOne float64 + condInf float64 + }{ + { + a: []float64{ + 8, 1, 6, + 3, 5, 7, + 4, 9, 2, + }, + m: 3, + n: 3, + condOne: 3.0 / 16, + condInf: 3.0 / 16, + }, + { + a: []float64{ + 2, 9, 3, 2, + 10, 9, 9, 3, + 1, 1, 5, 2, + 8, 4, 10, 2, + }, + m: 4, + n: 4, + condOne: 0.024740155174938, + condInf: 0.012034465570035, + }, + // Dgecon does not match Dpocon for this case. https://github.com/xianyi/OpenBLAS/issues/664. + { + a: []float64{ + 2.9995576045549965, -2.0898894566158663, 3.965560740124006, + -2.0898894566158663, 1.9634729526261008, -2.8681002706874104, + 3.965560740124006, -2.8681002706874104, 5.502416670471008, + }, + m: 3, + n: 3, + condOne: 0.024054837369015203, + condInf: 0.024054837369015203, + }, + } { + m := test.m + n := test.n + lda := n + a := make([]float64, len(test.a)) + copy(a, test.a) + ipiv := make([]int, min(m, n)) + + // Find the norms of the original matrix. + work := make([]float64, 4*n) + oneNorm := impl.Dlange(lapack.MaxColumnSum, m, n, a, lda, work) + infNorm := impl.Dlange(lapack.MaxRowSum, m, n, a, lda, work) + + // Compute LU factorization of a. + impl.Dgetrf(m, n, a, lda, ipiv) + + // Compute the condition number + iwork := make([]int, n) + condOne := impl.Dgecon(lapack.MaxColumnSum, n, a, lda, oneNorm, work, iwork) + condInf := impl.Dgecon(lapack.MaxRowSum, n, a, lda, infNorm, work, iwork) + + // Error if not the same order, otherwise log the difference. + if !floats.EqualWithinAbsOrRel(condOne, test.condOne, 1e0, 1e0) { + t.Errorf("One norm mismatch. Want %v, got %v.", test.condOne, condOne) + } else if !floats.EqualWithinAbsOrRel(condOne, test.condOne, 1e-14, 1e-14) { + log.Printf("Dgecon one norm mismatch. Want %v, got %v.", test.condOne, condOne) + } + if !floats.EqualWithinAbsOrRel(condInf, test.condInf, 1e0, 1e0) { + t.Errorf("One norm mismatch. Want %v, got %v.", test.condInf, condInf) + } else if !floats.EqualWithinAbsOrRel(condInf, test.condInf, 1e-14, 1e-14) { + log.Printf("Dgecon one norm mismatch. Want %v, got %v.", test.condInf, condInf) + } + } +} diff --git a/lapack/testlapack/dgeev.go b/lapack/testlapack/dgeev.go new file mode 100644 index 00000000..05763821 --- /dev/null +++ b/lapack/testlapack/dgeev.go @@ -0,0 +1,735 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/cmplx" + "math/rand" + "strconv" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dgeever interface { + Dgeev(jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, n int, a []float64, lda int, + wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) int +} + +type dgeevTest struct { + a blas64.General + evWant []complex128 // If nil, the eigenvalues are not known. + valTol float64 // Tolerance for eigenvalue checks. + vecTol float64 // Tolerance for eigenvector checks. +} + +func DgeevTest(t *testing.T, impl Dgeever) { + rnd := rand.New(rand.NewSource(1)) + + for i, test := range []dgeevTest{ + { + a: A123{}.Matrix(), + evWant: A123{}.Eigenvalues(), + }, + + dgeevTestForAntisymRandom(10, rnd), + dgeevTestForAntisymRandom(11, rnd), + dgeevTestForAntisymRandom(50, rnd), + dgeevTestForAntisymRandom(51, rnd), + dgeevTestForAntisymRandom(100, rnd), + dgeevTestForAntisymRandom(101, rnd), + + { + a: Circulant(2).Matrix(), + evWant: Circulant(2).Eigenvalues(), + }, + { + a: Circulant(3).Matrix(), + evWant: Circulant(3).Eigenvalues(), + }, + { + a: Circulant(4).Matrix(), + evWant: Circulant(4).Eigenvalues(), + }, + { + a: Circulant(5).Matrix(), + evWant: Circulant(5).Eigenvalues(), + }, + { + a: Circulant(10).Matrix(), + evWant: Circulant(10).Eigenvalues(), + }, + { + a: Circulant(15).Matrix(), + evWant: Circulant(15).Eigenvalues(), + valTol: 1e-12, + }, + { + a: Circulant(30).Matrix(), + evWant: Circulant(30).Eigenvalues(), + valTol: 1e-11, + vecTol: 1e-12, + }, + { + a: Circulant(50).Matrix(), + evWant: Circulant(50).Eigenvalues(), + valTol: 1e-11, + vecTol: 1e-12, + }, + { + a: Circulant(101).Matrix(), + evWant: Circulant(101).Eigenvalues(), + valTol: 1e-10, + vecTol: 1e-11, + }, + { + a: Circulant(150).Matrix(), + evWant: Circulant(150).Eigenvalues(), + valTol: 1e-9, + vecTol: 1e-10, + }, + + { + a: Clement(2).Matrix(), + evWant: Clement(2).Eigenvalues(), + }, + { + a: Clement(3).Matrix(), + evWant: Clement(3).Eigenvalues(), + }, + { + a: Clement(4).Matrix(), + evWant: Clement(4).Eigenvalues(), + }, + { + a: Clement(5).Matrix(), + evWant: Clement(5).Eigenvalues(), + }, + { + a: Clement(10).Matrix(), + evWant: Clement(10).Eigenvalues(), + }, + { + a: Clement(15).Matrix(), + evWant: Clement(15).Eigenvalues(), + }, + { + a: Clement(30).Matrix(), + evWant: Clement(30).Eigenvalues(), + valTol: 1e-11, + }, + { + a: Clement(50).Matrix(), + evWant: Clement(50).Eigenvalues(), + valTol: 1e-7, + vecTol: 1e-11, + }, + + { + a: Creation(2).Matrix(), + evWant: Creation(2).Eigenvalues(), + }, + { + a: Creation(3).Matrix(), + evWant: Creation(3).Eigenvalues(), + }, + { + a: Creation(4).Matrix(), + evWant: Creation(4).Eigenvalues(), + }, + { + a: Creation(5).Matrix(), + evWant: Creation(5).Eigenvalues(), + }, + { + a: Creation(10).Matrix(), + evWant: Creation(10).Eigenvalues(), + }, + { + a: Creation(15).Matrix(), + evWant: Creation(15).Eigenvalues(), + }, + { + a: Creation(30).Matrix(), + evWant: Creation(30).Eigenvalues(), + }, + { + a: Creation(50).Matrix(), + evWant: Creation(50).Eigenvalues(), + }, + { + a: Creation(101).Matrix(), + evWant: Creation(101).Eigenvalues(), + }, + { + a: Creation(150).Matrix(), + evWant: Creation(150).Eigenvalues(), + }, + + { + a: Diagonal(0).Matrix(), + evWant: Diagonal(0).Eigenvalues(), + }, + { + a: Diagonal(10).Matrix(), + evWant: Diagonal(10).Eigenvalues(), + }, + { + a: Diagonal(50).Matrix(), + evWant: Diagonal(50).Eigenvalues(), + }, + { + a: Diagonal(151).Matrix(), + evWant: Diagonal(151).Eigenvalues(), + }, + + { + a: Downshift(2).Matrix(), + evWant: Downshift(2).Eigenvalues(), + }, + { + a: Downshift(3).Matrix(), + evWant: Downshift(3).Eigenvalues(), + }, + { + a: Downshift(4).Matrix(), + evWant: Downshift(4).Eigenvalues(), + }, + { + a: Downshift(5).Matrix(), + evWant: Downshift(5).Eigenvalues(), + }, + { + a: Downshift(10).Matrix(), + evWant: Downshift(10).Eigenvalues(), + }, + { + a: Downshift(15).Matrix(), + evWant: Downshift(15).Eigenvalues(), + }, + { + a: Downshift(30).Matrix(), + evWant: Downshift(30).Eigenvalues(), + }, + { + a: Downshift(50).Matrix(), + evWant: Downshift(50).Eigenvalues(), + }, + { + a: Downshift(101).Matrix(), + evWant: Downshift(101).Eigenvalues(), + }, + { + a: Downshift(150).Matrix(), + evWant: Downshift(150).Eigenvalues(), + }, + + { + a: Fibonacci(2).Matrix(), + evWant: Fibonacci(2).Eigenvalues(), + }, + { + a: Fibonacci(3).Matrix(), + evWant: Fibonacci(3).Eigenvalues(), + }, + { + a: Fibonacci(4).Matrix(), + evWant: Fibonacci(4).Eigenvalues(), + }, + { + a: Fibonacci(5).Matrix(), + evWant: Fibonacci(5).Eigenvalues(), + }, + { + a: Fibonacci(10).Matrix(), + evWant: Fibonacci(10).Eigenvalues(), + }, + { + a: Fibonacci(15).Matrix(), + evWant: Fibonacci(15).Eigenvalues(), + }, + { + a: Fibonacci(30).Matrix(), + evWant: Fibonacci(30).Eigenvalues(), + }, + { + a: Fibonacci(50).Matrix(), + evWant: Fibonacci(50).Eigenvalues(), + }, + { + a: Fibonacci(101).Matrix(), + evWant: Fibonacci(101).Eigenvalues(), + }, + { + a: Fibonacci(150).Matrix(), + evWant: Fibonacci(150).Eigenvalues(), + }, + + { + a: Gear(2).Matrix(), + evWant: Gear(2).Eigenvalues(), + }, + { + a: Gear(3).Matrix(), + evWant: Gear(3).Eigenvalues(), + }, + { + a: Gear(4).Matrix(), + evWant: Gear(4).Eigenvalues(), + valTol: 1e-7, + }, + { + a: Gear(5).Matrix(), + evWant: Gear(5).Eigenvalues(), + }, + { + a: Gear(10).Matrix(), + evWant: Gear(10).Eigenvalues(), + valTol: 1e-8, + }, + { + a: Gear(15).Matrix(), + evWant: Gear(15).Eigenvalues(), + }, + { + a: Gear(30).Matrix(), + evWant: Gear(30).Eigenvalues(), + valTol: 1e-8, + }, + { + a: Gear(50).Matrix(), + evWant: Gear(50).Eigenvalues(), + valTol: 1e-8, + }, + { + a: Gear(101).Matrix(), + evWant: Gear(101).Eigenvalues(), + }, + { + a: Gear(150).Matrix(), + evWant: Gear(150).Eigenvalues(), + valTol: 1e-8, + }, + + { + a: Grcar{N: 10, K: 3}.Matrix(), + evWant: Grcar{N: 10, K: 3}.Eigenvalues(), + }, + { + a: Grcar{N: 10, K: 7}.Matrix(), + evWant: Grcar{N: 10, K: 7}.Eigenvalues(), + }, + { + a: Grcar{N: 11, K: 7}.Matrix(), + evWant: Grcar{N: 11, K: 7}.Eigenvalues(), + }, + { + a: Grcar{N: 50, K: 3}.Matrix(), + evWant: Grcar{N: 50, K: 3}.Eigenvalues(), + }, + { + a: Grcar{N: 51, K: 3}.Matrix(), + evWant: Grcar{N: 51, K: 3}.Eigenvalues(), + }, + { + a: Grcar{N: 50, K: 10}.Matrix(), + evWant: Grcar{N: 50, K: 10}.Eigenvalues(), + }, + { + a: Grcar{N: 51, K: 10}.Matrix(), + evWant: Grcar{N: 51, K: 10}.Eigenvalues(), + }, + { + a: Grcar{N: 50, K: 30}.Matrix(), + evWant: Grcar{N: 50, K: 30}.Eigenvalues(), + }, + { + a: Grcar{N: 150, K: 2}.Matrix(), + evWant: Grcar{N: 150, K: 2}.Eigenvalues(), + }, + { + a: Grcar{N: 150, K: 148}.Matrix(), + evWant: Grcar{N: 150, K: 148}.Eigenvalues(), + }, + + { + a: Hanowa{N: 6, Alpha: 17}.Matrix(), + evWant: Hanowa{N: 6, Alpha: 17}.Eigenvalues(), + }, + { + a: Hanowa{N: 50, Alpha: -1}.Matrix(), + evWant: Hanowa{N: 50, Alpha: -1}.Eigenvalues(), + }, + { + a: Hanowa{N: 100, Alpha: -1}.Matrix(), + evWant: Hanowa{N: 100, Alpha: -1}.Eigenvalues(), + }, + + { + a: Lesp(2).Matrix(), + evWant: Lesp(2).Eigenvalues(), + }, + { + a: Lesp(3).Matrix(), + evWant: Lesp(3).Eigenvalues(), + }, + { + a: Lesp(4).Matrix(), + evWant: Lesp(4).Eigenvalues(), + }, + { + a: Lesp(5).Matrix(), + evWant: Lesp(5).Eigenvalues(), + }, + { + a: Lesp(10).Matrix(), + evWant: Lesp(10).Eigenvalues(), + }, + { + a: Lesp(15).Matrix(), + evWant: Lesp(15).Eigenvalues(), + }, + { + a: Lesp(30).Matrix(), + evWant: Lesp(30).Eigenvalues(), + }, + { + a: Lesp(50).Matrix(), + evWant: Lesp(50).Eigenvalues(), + valTol: 1e-12, + vecTol: 1e-12, + }, + { + a: Lesp(101).Matrix(), + evWant: Lesp(101).Eigenvalues(), + valTol: 1e-12, + vecTol: 1e-12, + }, + { + a: Lesp(150).Matrix(), + evWant: Lesp(150).Eigenvalues(), + valTol: 1e-12, + vecTol: 1e-12, + }, + + { + a: Rutis{}.Matrix(), + evWant: Rutis{}.Eigenvalues(), + }, + + { + a: Tris{N: 74, X: 1, Y: -2, Z: 1}.Matrix(), + evWant: Tris{N: 74, X: 1, Y: -2, Z: 1}.Eigenvalues(), + }, + { + a: Tris{N: 74, X: 1, Y: 2, Z: -3}.Matrix(), + evWant: Tris{N: 74, X: 1, Y: 2, Z: -3}.Eigenvalues(), + }, + { + a: Tris{N: 75, X: 1, Y: 2, Z: -3}.Matrix(), + evWant: Tris{N: 75, X: 1, Y: 2, Z: -3}.Eigenvalues(), + }, + + { + a: Wilk4{}.Matrix(), + evWant: Wilk4{}.Eigenvalues(), + }, + { + a: Wilk12{}.Matrix(), + evWant: Wilk12{}.Eigenvalues(), + valTol: 1e-8, + }, + { + a: Wilk20(0).Matrix(), + evWant: Wilk20(0).Eigenvalues(), + }, + { + a: Wilk20(1e-10).Matrix(), + evWant: Wilk20(1e-10).Eigenvalues(), + valTol: 1e-12, + vecTol: 1e-12, + }, + + { + a: Zero(1).Matrix(), + evWant: Zero(1).Eigenvalues(), + }, + { + a: Zero(10).Matrix(), + evWant: Zero(10).Eigenvalues(), + }, + { + a: Zero(50).Matrix(), + evWant: Zero(50).Eigenvalues(), + }, + { + a: Zero(100).Matrix(), + evWant: Zero(100).Eigenvalues(), + }, + } { + for _, jobvl := range []lapack.LeftEVJob{lapack.ComputeLeftEV, lapack.None} { + for _, jobvr := range []lapack.RightEVJob{lapack.ComputeRightEV, lapack.None} { + for _, extra := range []int{0, 11} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + testDgeev(t, impl, strconv.Itoa(i), test, jobvl, jobvr, extra, wl) + } + } + } + } + } + + for _, n := range []int{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 50, 51, 100, 101} { + for _, jobvl := range []lapack.LeftEVJob{lapack.ComputeLeftEV, lapack.None} { + for _, jobvr := range []lapack.RightEVJob{lapack.ComputeRightEV, lapack.None} { + for cas := 0; cas < 10; cas++ { + // Create a block diagonal matrix with + // random eigenvalues of random multiplicity. + ev := make([]complex128, n) + tmat := zeros(n, n, n) + for i := 0; i < n; { + re := rnd.NormFloat64() + if i == n-1 || rnd.Float64() < 0.5 { + // Real eigenvalue. + nb := rnd.Intn(min(4, n-i)) + 1 + for k := 0; k < nb; k++ { + tmat.Data[i*tmat.Stride+i] = re + ev[i] = complex(re, 0) + i++ + } + continue + } + // Complex eigenvalue. + im := rnd.NormFloat64() + nb := rnd.Intn(min(4, (n-i)/2)) + 1 + for k := 0; k < nb; k++ { + // 2×2 block for the complex eigenvalue. + tmat.Data[i*tmat.Stride+i] = re + tmat.Data[(i+1)*tmat.Stride+i+1] = re + tmat.Data[(i+1)*tmat.Stride+i] = -im + tmat.Data[i*tmat.Stride+i+1] = im + ev[i] = complex(re, im) + ev[i+1] = complex(re, -im) + i += 2 + } + } + + // Compute A = Q T Q^T where Q is an + // orthogonal matrix. + q := randomOrthogonal(n, rnd) + tq := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.Trans, 1, tmat, q, 0, tq) + a := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, tq, 0, a) + + test := dgeevTest{ + a: a, + evWant: ev, + valTol: 1e-12, + vecTol: 1e-8, + } + testDgeev(t, impl, "random", test, jobvl, jobvr, 0, optimumWork) + } + } + } + } +} + +func testDgeev(t *testing.T, impl Dgeever, tc string, test dgeevTest, jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, extra int, wl worklen) { + const defaultTol = 1e-13 + valTol := test.valTol + if valTol == 0 { + valTol = defaultTol + } + vecTol := test.vecTol + if vecTol == 0 { + vecTol = defaultTol + } + + a := cloneGeneral(test.a) + n := a.Rows + + var vl blas64.General + if jobvl == lapack.ComputeLeftEV { + vl = nanGeneral(n, n, n) + } + + var vr blas64.General + if jobvr == lapack.ComputeRightEV { + vr = nanGeneral(n, n, n) + } + + wr := make([]float64, n) + wi := make([]float64, n) + + var lwork int + switch wl { + case minimumWork: + if jobvl == lapack.ComputeLeftEV || jobvr == lapack.ComputeRightEV { + lwork = max(1, 4*n) + } else { + lwork = max(1, 3*n) + } + case mediumWork: + work := make([]float64, 1) + impl.Dgeev(jobvl, jobvr, n, nil, 1, nil, nil, nil, 1, nil, 1, work, -1) + if jobvl == lapack.ComputeLeftEV || jobvr == lapack.ComputeRightEV { + lwork = (int(work[0]) + 4*n) / 2 + } else { + lwork = (int(work[0]) + 3*n) / 2 + } + lwork = max(1, lwork) + case optimumWork: + work := make([]float64, 1) + impl.Dgeev(jobvl, jobvr, n, nil, 1, nil, nil, nil, 1, nil, 1, work, -1) + lwork = int(work[0]) + } + work := make([]float64, lwork) + + first := impl.Dgeev(jobvl, jobvr, n, a.Data, a.Stride, wr, wi, + vl.Data, vl.Stride, vr.Data, vr.Stride, work, len(work)) + + prefix := fmt.Sprintf("Case #%v: n=%v, jobvl=%v, jobvr=%v, extra=%v, work=%v", + tc, n, jobvl, jobvr, extra, wl) + + if !generalOutsideAllNaN(vl) { + t.Errorf("%v: out-of-range write to VL", prefix) + } + if !generalOutsideAllNaN(vr) { + t.Errorf("%v: out-of-range write to VR", prefix) + } + + if first > 0 { + t.Log("%v: all eigenvalues haven't been computed, first=%v", prefix, first) + } + + // Check that conjugate pair eigevalues are ordered correctly. + for i := first; i < n; { + if wi[i] == 0 { + i++ + continue + } + if wr[i] != wr[i+1] { + t.Errorf("%v: real parts of %vth conjugate pair not equal", prefix, i) + } + if wi[i] < 0 || wi[i+1] > 0 { + t.Errorf("%v: unexpected ordering of %vth conjugate pair", prefix, i) + } + i += 2 + } + + // Check the computed eigenvalues against provided known eigenvalues. + if test.evWant != nil { + used := make([]bool, n) + for i := first; i < n; i++ { + evGot := complex(wr[i], wi[i]) + idx := -1 + for k, evWant := range test.evWant { + if !used[k] && cmplx.Abs(evWant-evGot) < valTol { + idx = k + used[k] = true + break + } + } + if idx == -1 { + t.Errorf("%v: unexpected eigenvalue %v", prefix, evGot) + } + } + } + + if first > 0 || (jobvl == lapack.None && jobvr == lapack.None) { + // No eigenvectors have been computed. + return + } + + // Check that the columns of VL and VR are eigenvectors that correspond + // to the computed eigenvalues. + for k := 0; k < n; { + if wi[k] == 0 { + if jobvl == lapack.ComputeLeftEV { + ev := columnOf(vl, k) + if !isLeftEigenvectorOf(test.a, ev, nil, complex(wr[k], 0), vecTol) { + t.Errorf("%v: VL[:,%v] is not left real eigenvector", + prefix, k) + } + + norm := floats.Norm(ev, 2) + if math.Abs(norm-1) >= defaultTol { + t.Errorf("%v: norm of left real eigenvector %v not equal to 1: got %v", + prefix, k, norm) + } + } + if jobvr == lapack.ComputeRightEV { + ev := columnOf(vr, k) + if !isRightEigenvectorOf(test.a, ev, nil, complex(wr[k], 0), vecTol) { + t.Errorf("%v: VR[:,%v] is not right real eigenvector", + prefix, k) + } + + norm := floats.Norm(ev, 2) + if math.Abs(norm-1) >= defaultTol { + t.Errorf("%v: norm of right real eigenvector %v not equal to 1: got %v", + prefix, k, norm) + } + } + k++ + } else { + if jobvl == lapack.ComputeLeftEV { + evre := columnOf(vl, k) + evim := columnOf(vl, k+1) + if !isLeftEigenvectorOf(test.a, evre, evim, complex(wr[k], wi[k]), vecTol) { + t.Errorf("%v: VL[:,%v:%v] is not left complex eigenvector", + prefix, k, k+1) + } + floats.Scale(-1, evim) + if !isLeftEigenvectorOf(test.a, evre, evim, complex(wr[k+1], wi[k+1]), vecTol) { + t.Errorf("%v: VL[:,%v:%v] is not left complex eigenvector", + prefix, k, k+1) + } + + norm := math.Hypot(floats.Norm(evre, 2), floats.Norm(evim, 2)) + if math.Abs(norm-1) > defaultTol { + t.Errorf("%v: norm of left complex eigenvector %v not equal to 1: got %v", + prefix, k, norm) + } + } + if jobvr == lapack.ComputeRightEV { + evre := columnOf(vr, k) + evim := columnOf(vr, k+1) + if !isRightEigenvectorOf(test.a, evre, evim, complex(wr[k], wi[k]), vecTol) { + t.Errorf("%v: VR[:,%v:%v] is not right complex eigenvector", + prefix, k, k+1) + } + floats.Scale(-1, evim) + if !isRightEigenvectorOf(test.a, evre, evim, complex(wr[k+1], wi[k+1]), vecTol) { + t.Errorf("%v: VR[:,%v:%v] is not right complex eigenvector", + prefix, k, k+1) + } + + norm := math.Hypot(floats.Norm(evre, 2), floats.Norm(evim, 2)) + if math.Abs(norm-1) > defaultTol { + t.Errorf("%v: norm of right complex eigenvector %v not equal to 1: got %v", + prefix, k, norm) + } + } + // We don't test whether the largest component is real + // because checking it is flaky due to rounding errors. + + k += 2 + } + } +} + +func dgeevTestForAntisymRandom(n int, rnd *rand.Rand) dgeevTest { + a := NewAntisymRandom(n, rnd) + return dgeevTest{ + a: a.Matrix(), + evWant: a.Eigenvalues(), + } +} diff --git a/lapack/testlapack/dgeev_bench.go b/lapack/testlapack/dgeev_bench.go new file mode 100644 index 00000000..c7ebaf98 --- /dev/null +++ b/lapack/testlapack/dgeev_bench.go @@ -0,0 +1,63 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +var resultGeneral blas64.General + +func DgeevBenchmark(b *testing.B, impl Dgeever) { + rnd := rand.New(rand.NewSource(1)) + benchmarks := []struct { + name string + a blas64.General + }{ + {"AntisymRandom3", NewAntisymRandom(3, rnd).Matrix()}, + {"AntisymRandom4", NewAntisymRandom(4, rnd).Matrix()}, + {"AntisymRandom5", NewAntisymRandom(5, rnd).Matrix()}, + {"AntisymRandom10", NewAntisymRandom(10, rnd).Matrix()}, + {"AntisymRandom50", NewAntisymRandom(50, rnd).Matrix()}, + {"AntisymRandom100", NewAntisymRandom(100, rnd).Matrix()}, + {"AntisymRandom200", NewAntisymRandom(200, rnd).Matrix()}, + {"AntisymRandom500", NewAntisymRandom(500, rnd).Matrix()}, + {"Circulant3", Circulant(3).Matrix()}, + {"Circulant4", Circulant(4).Matrix()}, + {"Circulant5", Circulant(5).Matrix()}, + {"Circulant10", Circulant(10).Matrix()}, + {"Circulant50", Circulant(50).Matrix()}, + {"Circulant100", Circulant(100).Matrix()}, + {"Circulant200", Circulant(200).Matrix()}, + {"Circulant500", Circulant(500).Matrix()}, + } + for _, bm := range benchmarks { + n := bm.a.Rows + a := zeros(n, n, n) + vl := zeros(n, n, n) + vr := zeros(n, n, n) + wr := make([]float64, n) + wi := make([]float64, n) + work := make([]float64, 1) + impl.Dgeev(lapack.ComputeLeftEV, lapack.ComputeRightEV, n, nil, n, nil, nil, nil, n, nil, n, work, -1) + work = make([]float64, int(work[0])) + b.Run(bm.name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + b.StopTimer() + copyGeneral(a, bm.a) + b.StartTimer() + impl.Dgeev(lapack.ComputeLeftEV, lapack.ComputeRightEV, n, a.Data, a.Stride, wr, wi, + vl.Data, vl.Stride, vr.Data, vr.Stride, work, len(work)) + } + resultGeneral = a + }) + } +} diff --git a/lapack/testlapack/dgehd2.go b/lapack/testlapack/dgehd2.go new file mode 100644 index 00000000..490856b8 --- /dev/null +++ b/lapack/testlapack/dgehd2.go @@ -0,0 +1,196 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgehd2er interface { + Dgehd2(n, ilo, ihi int, a []float64, lda int, tau, work []float64) +} + +func Dgehd2Test(t *testing.T, impl Dgehd2er) { + rnd := rand.New(rand.NewSource(1)) + for _, n := range []int{1, 2, 3, 4, 5, 7, 10, 30} { + for _, extra := range []int{0, 1, 13} { + for cas := 0; cas < 100; cas++ { + testDgehd2(t, impl, n, extra, rnd) + } + } + } +} + +func testDgehd2(t *testing.T, impl Dgehd2er, n, extra int, rnd *rand.Rand) { + ilo := rnd.Intn(n) + ihi := rnd.Intn(n) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + + tau := nanSlice(n - 1) + work := nanSlice(n) + + a := randomGeneral(n, n, n+extra, rnd) + // NaN out elements under the diagonal except + // for the [ilo:ihi,ilo:ihi] block. + for i := 1; i <= ihi; i++ { + for j := 0; j < min(ilo, i); j++ { + a.Data[i*a.Stride+j] = math.NaN() + } + } + for i := ihi + 1; i < n; i++ { + for j := 0; j < i; j++ { + a.Data[i*a.Stride+j] = math.NaN() + } + } + aCopy := a + aCopy.Data = make([]float64, len(a.Data)) + copy(aCopy.Data, a.Data) + + impl.Dgehd2(n, ilo, ihi, a.Data, a.Stride, tau, work) + + prefix := fmt.Sprintf("Case n=%v, ilo=%v, ihi=%v, extra=%v", n, ilo, ihi, extra) + + // Check any invalid modifications of a. + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + for i := ilo; i <= ihi; i++ { + for j := 0; j < min(ilo, i); j++ { + if !math.IsNaN(a.Data[i*a.Stride+j]) { + t.Errorf("%v: expected NaN at A[%v,%v]", prefix, i, j) + } + } + } + for i := ihi + 1; i < n; i++ { + for j := 0; j < i; j++ { + if !math.IsNaN(a.Data[i*a.Stride+j]) { + t.Errorf("%v: expected NaN at A[%v,%v]", prefix, i, j) + } + } + } + for i := 0; i <= ilo; i++ { + for j := i; j < ilo+1; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + for j := ihi + 1; j < n; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + } + for i := ihi + 1; i < n; i++ { + for j := i; j < n; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + } + + // Check that tau has been assigned properly. + for i, v := range tau { + if i < ilo || i >= ihi { + if !math.IsNaN(v) { + t.Errorf("%v: expected NaN at tau[%v]", prefix, i) + } + } else { + if math.IsNaN(v) { + t.Errorf("%v: unexpected NaN at tau[%v]", prefix, i) + } + } + } + + // Extract Q and check that it is orthogonal. + q := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < q.Rows; i++ { + q.Data[i*q.Stride+i] = 1 + } + qCopy := q + qCopy.Data = make([]float64, len(q.Data)) + for j := ilo; j < ihi; j++ { + h := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < h.Rows; i++ { + h.Data[i*h.Stride+i] = 1 + } + v := blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + v.Data[j+1] = 1 + for i := j + 2; i < ihi+1; i++ { + v.Data[i] = a.Data[i*a.Stride+j] + } + blas64.Ger(-tau[j], v, v, h) + copy(qCopy.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, h, 0, q) + } + if !isOrthonormal(q) { + t.Errorf("%v: Q is not orthogonal\nQ=%v", prefix, q) + } + + // Overwrite NaN elements of aCopy with zeros + // (we will multiply with it below). + for i := 1; i <= ihi; i++ { + for j := 0; j < min(ilo, i); j++ { + aCopy.Data[i*aCopy.Stride+j] = 0 + } + } + for i := ihi + 1; i < n; i++ { + for j := 0; j < i; j++ { + aCopy.Data[i*aCopy.Stride+j] = 0 + } + } + + // Construct Q^T * AOrig * Q and check that it is + // equal to A from Dgehd2. + aq := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aCopy, q, 0, aq) + qaq := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, aq, 0, qaq) + for i := ilo; i <= ihi; i++ { + for j := ilo; j <= ihi; j++ { + qaqij := qaq.Data[i*qaq.Stride+j] + if j < i-1 { + if math.Abs(qaqij) > 1e-14 { + t.Errorf("%v: Q^T*A*Q is not upper Hessenberg, [%v,%v]=%v", prefix, i, j, qaqij) + } + continue + } + diff := qaqij - a.Data[i*a.Stride+j] + if math.Abs(diff) > 1e-14 { + t.Errorf("%v: Q^T*AOrig*Q and A are not equal, diff at [%v,%v]=%v", prefix, i, j, diff) + } + } + } +} diff --git a/lapack/testlapack/dgehrd.go b/lapack/testlapack/dgehrd.go new file mode 100644 index 00000000..535b6b25 --- /dev/null +++ b/lapack/testlapack/dgehrd.go @@ -0,0 +1,209 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgehrder interface { + Dgehrd(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) + + Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DgehrdTest(t *testing.T, impl Dgehrder) { + rnd := rand.New(rand.NewSource(1)) + + // Randomized tests for small matrix sizes that will most likely + // use the unblocked algorithm. + for _, n := range []int{1, 2, 3, 4, 5, 10, 34} { + for _, extra := range []int{0, 13} { + for _, optwork := range []bool{true, false} { + for cas := 0; cas < 10; cas++ { + ilo := rnd.Intn(n) + ihi := rnd.Intn(n) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + testDgehrd(t, impl, n, ilo, ihi, extra, optwork, rnd) + } + } + } + } + + // These are selected tests for larger matrix sizes to test the blocked + // algorithm. Use sizes around several powers of two because that is + // where the blocked path will most likely start to be taken. For + // example, at present the blocked algorithm is used for sizes larger + // than 129. + for _, test := range []struct { + n, ilo, ihi int + }{ + {0, 0, -1}, + + {68, 0, 63}, + {68, 0, 64}, + {68, 0, 65}, + {68, 0, 66}, + {68, 0, 67}, + + {132, 2, 129}, + {132, 1, 129}, // Size = 129, unblocked. + {132, 0, 129}, // Size = 130, blocked. + {132, 1, 130}, + {132, 0, 130}, + {132, 1, 131}, + {132, 0, 131}, + + {260, 2, 257}, + {260, 1, 257}, + {260, 0, 257}, + {260, 0, 258}, + {260, 0, 259}, + } { + for _, extra := range []int{0, 13} { + for _, optwork := range []bool{true, false} { + testDgehrd(t, impl, test.n, test.ilo, test.ihi, extra, optwork, rnd) + } + } + } +} + +func testDgehrd(t *testing.T, impl Dgehrder, n, ilo, ihi, extra int, optwork bool, rnd *rand.Rand) { + a := randomGeneral(n, n, n+extra, rnd) + aCopy := a + aCopy.Data = make([]float64, len(a.Data)) + copy(aCopy.Data, a.Data) + + var tau []float64 + if n > 1 { + tau = nanSlice(n - 1) + } + + var work []float64 + if optwork { + work = nanSlice(1) + impl.Dgehrd(n, ilo, ihi, nil, a.Stride, nil, work, -1) + work = nanSlice(int(work[0])) + } else { + work = nanSlice(max(1, n)) + } + + impl.Dgehrd(n, ilo, ihi, a.Data, a.Stride, tau, work, len(work)) + + if n == 0 { + // Just make sure there is no panic. + return + } + + prefix := fmt.Sprintf("Case n=%v, ilo=%v, ihi=%v, extra=%v", n, ilo, ihi, extra) + + // Check any invalid modifications of a. + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + for i := ilo; i <= ihi; i++ { + for j := 0; j < min(ilo, i); j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification of A[%v,%v]", prefix, i, j) + } + } + } + for i := ihi + 1; i < n; i++ { + for j := 0; j < i; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification of A[%v,%v]", prefix, i, j) + } + } + } + for i := 0; i <= ilo; i++ { + for j := i; j < ilo+1; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + for j := ihi + 1; j < n; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + } + for i := ihi + 1; i < n; i++ { + for j := i; j < n; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification at A[%v,%v]", prefix, i, j) + } + } + } + + // Check that tau has been assigned properly. + for i, v := range tau { + if math.IsNaN(v) { + t.Errorf("%v: unexpected NaN at tau[%v]", prefix, i) + } + } + + // Extract Q and check that it is orthogonal. + q := eye(n, n) + if ilo != ihi { + for i := ilo + 2; i <= ihi; i++ { + for j := ilo + 1; j < ihi; j++ { + q.Data[i*q.Stride+j] = a.Data[i*a.Stride+j-1] + } + } + nh := ihi - ilo + impl.Dorgqr(nh, nh, nh, q.Data[(ilo+1)*q.Stride+ilo+1:], q.Stride, tau[ilo:ihi], work, len(work)) + } + if !isOrthonormal(q) { + t.Errorf("%v: Q is not orthogonal\nQ=%v", prefix, q) + } + + // Construct Q^T * AOrig * Q and check that it is upper Hessenberg. + aq := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aCopy, q, 0, aq) + qaq := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, aq, 0, qaq) + for i := 0; i <= ilo; i++ { + for j := ilo + 1; j <= ihi; j++ { + qaqij := qaq.Data[i*qaq.Stride+j] + diff := qaqij - a.Data[i*a.Stride+j] + if math.Abs(diff) > 1e-13 { + t.Errorf("%v: Q^T*AOrig*Q and A are not equal, diff at [%v,%v]=%v", prefix, i, j, diff) + } + } + } + for i := ilo + 1; i <= ihi; i++ { + for j := ilo; j < n; j++ { + qaqij := qaq.Data[i*qaq.Stride+j] + if j < i-1 { + if math.Abs(qaqij) > 1e-13 { + t.Errorf("%v: Q^T*AOrig*Q is not upper Hessenberg, [%v,%v]=%v", prefix, i, j, qaqij) + } + continue + } + diff := qaqij - a.Data[i*a.Stride+j] + if math.Abs(diff) > 1e-13 { + t.Errorf("%v: Q^T*AOrig*Q and A are not equal, diff at [%v,%v]=%v", prefix, i, j, diff) + } + } + } +} diff --git a/lapack/testlapack/dgelq2.go b/lapack/testlapack/dgelq2.go new file mode 100644 index 00000000..c4dd224d --- /dev/null +++ b/lapack/testlapack/dgelq2.go @@ -0,0 +1,113 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgelq2er interface { + Dgelq2(m, n int, a []float64, lda int, tau, work []float64) +} + +func Dgelq2Test(t *testing.T, impl Dgelq2er) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {1, 1, 0}, + {2, 2, 0}, + {3, 2, 0}, + {2, 3, 0}, + {1, 12, 0}, + {2, 6, 0}, + {3, 4, 0}, + {4, 3, 0}, + {6, 2, 0}, + {1, 12, 0}, + {1, 1, 20}, + {2, 2, 20}, + {3, 2, 20}, + {2, 3, 20}, + {1, 12, 20}, + {2, 6, 20}, + {3, 4, 20}, + {4, 3, 20}, + {6, 2, 20}, + {1, 12, 20}, + } { + n := test.n + m := test.m + lda := test.lda + if lda == 0 { + lda = test.n + } + k := min(m, n) + tau := make([]float64, k) + for i := range tau { + tau[i] = rnd.Float64() + } + work := make([]float64, m) + for i := range work { + work[i] = rnd.Float64() + } + a := make([]float64, m*lda) + for i := 0; i < m*lda; i++ { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dgelq2(m, n, a, lda, tau, work) + + Q := constructQ("LQ", m, n, a, lda, tau) + + // Check that Q is orthonormal + for i := 0; i < Q.Rows; i++ { + nrm := blas64.Nrm2(Q.Cols, blas64.Vector{Inc: 1, Data: Q.Data[i*Q.Stride:]}) + if math.Abs(nrm-1) > 1e-14 { + t.Errorf("Q not normal. Norm is %v", nrm) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(Q.Rows, + blas64.Vector{Inc: 1, Data: Q.Data[i*Q.Stride:]}, + blas64.Vector{Inc: 1, Data: Q.Data[j*Q.Stride:]}, + ) + if math.Abs(dot) > 1e-14 { + t.Errorf("Q not orthogonal. Dot is %v", dot) + } + } + } + + L := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + L.Data[i*L.Stride+j] = a[i*lda+j] + } + } + + ans := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + copy(ans.Data, aCopy) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, L, Q, 0, ans) + if !floats.EqualApprox(aCopy, ans.Data, 1e-14) { + t.Errorf("Case %v, LQ mismatch. Want %v, got %v.", c, aCopy, ans.Data) + } + } +} diff --git a/lapack/testlapack/dgelqf.go b/lapack/testlapack/dgelqf.go new file mode 100644 index 00000000..ec396126 --- /dev/null +++ b/lapack/testlapack/dgelqf.go @@ -0,0 +1,98 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dgelqfer interface { + Dgelq2er + Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DgelqfTest(t *testing.T, impl Dgelqfer) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {10, 5, 0}, + {5, 10, 0}, + {10, 10, 0}, + {300, 5, 0}, + {3, 500, 0}, + {200, 200, 0}, + {300, 200, 0}, + {204, 300, 0}, + {1, 3000, 0}, + {3000, 1, 0}, + {10, 5, 30}, + {5, 10, 30}, + {10, 10, 30}, + {300, 5, 500}, + {3, 500, 600}, + {200, 200, 300}, + {300, 200, 300}, + {204, 300, 400}, + {1, 3000, 4000}, + {3000, 1, 4000}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = rnd.Float64() + } + } + tau := make([]float64, n) + for i := 0; i < n; i++ { + tau[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + ans := make([]float64, len(a)) + copy(ans, a) + work := make([]float64, m) + for i := range work { + work[i] = rnd.Float64() + } + // Compute unblocked QR. + impl.Dgelq2(m, n, ans, lda, tau, work) + // Compute blocked QR with small work. + impl.Dgelqf(m, n, a, lda, tau, work, len(work)) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch small work.", c) + } + // Try the full length of work. + impl.Dgelqf(m, n, a, lda, tau, work, -1) + lwork := int(work[0]) + work = make([]float64, lwork) + copy(a, aCopy) + impl.Dgelqf(m, n, a, lda, tau, work, lwork) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch large work.", c) + } + + // Try a slightly smaller version of work to test blocking code. + if len(work) <= m { + continue + } + work = work[1:] + lwork-- + copy(a, aCopy) + impl.Dgelqf(m, n, a, lda, tau, work, lwork) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch large work.", c) + } + } +} diff --git a/lapack/testlapack/dgels.go b/lapack/testlapack/dgels.go new file mode 100644 index 00000000..2acdcd7f --- /dev/null +++ b/lapack/testlapack/dgels.go @@ -0,0 +1,182 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgelser interface { + Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool +} + +func DgelsTest(t *testing.T, impl Dgelser) { + rnd := rand.New(rand.NewSource(1)) + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + m, n, nrhs, lda, ldb int + }{ + {3, 4, 5, 0, 0}, + {3, 5, 4, 0, 0}, + {4, 3, 5, 0, 0}, + {4, 5, 3, 0, 0}, + {5, 3, 4, 0, 0}, + {5, 4, 3, 0, 0}, + {3, 4, 5, 10, 20}, + {3, 5, 4, 10, 20}, + {4, 3, 5, 10, 20}, + {4, 5, 3, 10, 20}, + {5, 3, 4, 10, 20}, + {5, 4, 3, 10, 20}, + {3, 4, 5, 20, 10}, + {3, 5, 4, 20, 10}, + {4, 3, 5, 20, 10}, + {4, 5, 3, 20, 10}, + {5, 3, 4, 20, 10}, + {5, 4, 3, 20, 10}, + {200, 300, 400, 0, 0}, + {200, 400, 300, 0, 0}, + {300, 200, 400, 0, 0}, + {300, 400, 200, 0, 0}, + {400, 200, 300, 0, 0}, + {400, 300, 200, 0, 0}, + {200, 300, 400, 500, 600}, + {200, 400, 300, 500, 600}, + {300, 200, 400, 500, 600}, + {300, 400, 200, 500, 600}, + {400, 200, 300, 500, 600}, + {400, 300, 200, 500, 600}, + {200, 300, 400, 600, 500}, + {200, 400, 300, 600, 500}, + {300, 200, 400, 600, 500}, + {300, 400, 200, 600, 500}, + {400, 200, 300, 600, 500}, + {400, 300, 200, 600, 500}, + } { + m := test.m + n := test.n + nrhs := test.nrhs + + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + // Size of b is the same trans or no trans, because the number of rows + // has to be the max of (m,n). + mb := max(m, n) + nb := nrhs + ldb := test.ldb + if ldb == 0 { + ldb = nb + } + b := make([]float64, mb*ldb) + for i := range b { + b[i] = rnd.Float64() + } + bCopy := make([]float64, len(b)) + copy(bCopy, b) + + // Find optimal work length. + work := make([]float64, 1) + impl.Dgels(trans, m, n, nrhs, a, lda, b, ldb, work, -1) + + // Perform linear solve + work = make([]float64, int(work[0])) + lwork := len(work) + for i := range work { + work[i] = rnd.Float64() + } + impl.Dgels(trans, m, n, nrhs, a, lda, b, ldb, work, lwork) + + // Check that the answer is correct by comparing to the normal equations. + aMat := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, len(aCopy)), + } + copy(aMat.Data, aCopy) + szAta := n + if trans == blas.Trans { + szAta = m + } + aTA := blas64.General{ + Rows: szAta, + Cols: szAta, + Stride: szAta, + Data: make([]float64, szAta*szAta), + } + + // Compute A^T * A if notrans and A * A^T otherwise. + if trans == blas.NoTrans { + blas64.Gemm(blas.Trans, blas.NoTrans, 1, aMat, aMat, 0, aTA) + } else { + blas64.Gemm(blas.NoTrans, blas.Trans, 1, aMat, aMat, 0, aTA) + } + + // Multiply by X. + X := blas64.General{ + Rows: szAta, + Cols: nrhs, + Stride: ldb, + Data: b, + } + ans := blas64.General{ + Rows: aTA.Rows, + Cols: X.Cols, + Stride: X.Cols, + Data: make([]float64, aTA.Rows*X.Cols), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aTA, X, 0, ans) + + B := blas64.General{ + Rows: szAta, + Cols: nrhs, + Stride: ldb, + Data: make([]float64, len(bCopy)), + } + + copy(B.Data, bCopy) + var ans2 blas64.General + if trans == blas.NoTrans { + ans2 = blas64.General{ + Rows: aMat.Cols, + Cols: B.Cols, + Stride: B.Cols, + Data: make([]float64, aMat.Cols*B.Cols), + } + } else { + ans2 = blas64.General{ + Rows: aMat.Rows, + Cols: B.Cols, + Stride: B.Cols, + Data: make([]float64, aMat.Rows*B.Cols), + } + } + + // Compute A^T B if Trans or A * B otherwise + if trans == blas.NoTrans { + blas64.Gemm(blas.Trans, blas.NoTrans, 1, aMat, B, 0, ans2) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aMat, B, 0, ans2) + } + if !floats.EqualApprox(ans.Data, ans2.Data, 1e-12) { + t.Errorf("Normal equations not satisfied") + } + } + } +} diff --git a/lapack/testlapack/dgeql2.go b/lapack/testlapack/dgeql2.go new file mode 100644 index 00000000..86739680 --- /dev/null +++ b/lapack/testlapack/dgeql2.go @@ -0,0 +1,99 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgeql2er interface { + Dgeql2(m, n int, a []float64, lda int, tau, work []float64) +} + +func Dgeql2Test(t *testing.T, impl Dgeql2er) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): Add tests for m < n. + for _, test := range []struct { + m, n, lda int + }{ + {5, 5, 0}, + {5, 3, 0}, + {5, 4, 0}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + tau := nanSlice(min(m, n)) + work := nanSlice(n) + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dgeql2(m, n, a, lda, tau, work) + + k := min(m, n) + // Construct Q. + q := blas64.General{ + Rows: m, + Cols: m, + Stride: m, + Data: make([]float64, m*m), + } + for i := 0; i < m; i++ { + q.Data[i*q.Stride+i] = 1 + } + for i := 0; i < k; i++ { + h := blas64.General{Rows: m, Cols: m, Stride: m, Data: make([]float64, m*m)} + for j := 0; j < m; j++ { + h.Data[j*h.Stride+j] = 1 + } + v := blas64.Vector{Inc: 1, Data: make([]float64, m)} + v.Data[m-k+i] = 1 + for j := 0; j < m-k+i; j++ { + v.Data[j] = a[j*lda+n-k+i] + } + blas64.Ger(-tau[i], v, v, h) + qTmp := blas64.General{Rows: q.Rows, Cols: q.Cols, Stride: q.Stride, Data: make([]float64, len(q.Data))} + copy(qTmp.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, h, qTmp, 0, q) + } + if !isOrthonormal(q) { + t.Errorf("Q is not orthonormal") + } + l := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + if m >= n { + for i := m - n; i < m; i++ { + for j := 0; j <= min(i-(m-n), n-1); j++ { + l.Data[i*l.Stride+j] = a[i*lda+j] + } + } + } else { + panic("untested") + } + ans := blas64.General{Rows: m, Cols: n, Stride: lda, Data: make([]float64, len(a))} + copy(ans.Data, a) + + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, l, 0, ans) + if !floats.EqualApprox(ans.Data, aCopy, 1e-10) { + t.Errorf("Reconstruction mismatch: m = %v, n = %v", m, n) + } + } +} diff --git a/lapack/testlapack/dgeqp3.go b/lapack/testlapack/dgeqp3.go new file mode 100644 index 00000000..6ccdfec5 --- /dev/null +++ b/lapack/testlapack/dgeqp3.go @@ -0,0 +1,135 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgeqp3er interface { + Dlapmter + Dgeqp3(m, n int, a []float64, lda int, jpvt []int, tau, work []float64, lwork int) +} + +func Dgeqp3Test(t *testing.T, impl Dgeqp3er) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {1, 1, 0}, + {2, 2, 0}, + {3, 2, 0}, + {2, 3, 0}, + {1, 12, 0}, + {2, 6, 0}, + {3, 4, 0}, + {4, 3, 0}, + {6, 2, 0}, + {12, 1, 0}, + {1, 1, 20}, + {2, 2, 20}, + {3, 2, 20}, + {2, 3, 20}, + {1, 12, 20}, + {2, 6, 20}, + {3, 4, 20}, + {4, 3, 20}, + {6, 2, 20}, + {12, 1, 20}, + {129, 256, 0}, + {256, 129, 0}, + {129, 256, 266}, + {256, 129, 266}, + } { + n := test.n + m := test.m + lda := test.lda + if lda == 0 { + lda = test.n + } + const ( + all = iota + some + none + ) + for _, free := range []int{all, some, none} { + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + jpvt := make([]int, n) + for j := range jpvt { + switch free { + case all: + jpvt[j] = -1 + case some: + jpvt[j] = rnd.Intn(2) - 1 + case none: + jpvt[j] = 0 + default: + panic("bad freedom") + } + } + k := min(m, n) + tau := make([]float64, k) + for i := range tau { + tau[i] = rnd.Float64() + } + work := make([]float64, 1) + impl.Dgeqp3(m, n, a, lda, jpvt, tau, work, -1) + lwork := int(work[0]) + work = make([]float64, lwork) + for i := range work { + work[i] = rnd.Float64() + } + impl.Dgeqp3(m, n, a, lda, jpvt, tau, work, lwork) + + // Test that the QR factorization has completed successfully. Compute + // Q based on the vectors. + q := constructQ("QR", m, n, a, lda, tau) + + // Check that q is orthonormal + for i := 0; i < m; i++ { + nrm := blas64.Nrm2(m, blas64.Vector{Inc: 1, Data: q.Data[i*m:]}) + if math.Abs(nrm-1) > 1e-13 { + t.Errorf("Case %v, q not normal", c) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(m, blas64.Vector{Inc: 1, Data: q.Data[i*m:]}, blas64.Vector{Inc: 1, Data: q.Data[j*m:]}) + if math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", c) + } + } + } + // Check that A * P = Q * R + r := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + r.Data[i*n+j] = a[i*lda+j] + } + } + got := nanGeneral(m, n, lda) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, r, 0, got) + + want := blas64.General{Rows: m, Cols: n, Stride: lda, Data: aCopy} + impl.Dlapmt(true, want.Rows, want.Cols, want.Data, want.Stride, jpvt) + if !equalApproxGeneral(got, want, 1e-13) { + t.Errorf("Case %v, Q*R != A*P\nQ*R=%v\nA*P=%v", c, got, want) + } + } + } +} diff --git a/lapack/testlapack/dgeqr2.go b/lapack/testlapack/dgeqr2.go new file mode 100644 index 00000000..ff597c03 --- /dev/null +++ b/lapack/testlapack/dgeqr2.go @@ -0,0 +1,111 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgeqr2er interface { + Dgeqr2(m, n int, a []float64, lda int, tau []float64, work []float64) +} + +func Dgeqr2Test(t *testing.T, impl Dgeqr2er) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {1, 1, 0}, + {2, 2, 0}, + {3, 2, 0}, + {2, 3, 0}, + {1, 12, 0}, + {2, 6, 0}, + {3, 4, 0}, + {4, 3, 0}, + {6, 2, 0}, + {12, 1, 0}, + {1, 1, 20}, + {2, 2, 20}, + {3, 2, 20}, + {2, 3, 20}, + {1, 12, 20}, + {2, 6, 20}, + {3, 4, 20}, + {4, 3, 20}, + {6, 2, 20}, + {12, 1, 20}, + } { + n := test.n + m := test.m + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + k := min(m, n) + tau := make([]float64, k) + for i := range tau { + tau[i] = rnd.Float64() + } + work := make([]float64, n) + for i := range work { + work[i] = rnd.Float64() + } + copy(aCopy, a) + impl.Dgeqr2(m, n, a, lda, tau, work) + + // Test that the QR factorization has completed successfully. Compute + // Q based on the vectors. + q := constructQ("QR", m, n, a, lda, tau) + + // Check that q is orthonormal + for i := 0; i < m; i++ { + nrm := blas64.Nrm2(m, blas64.Vector{Inc: 1, Data: q.Data[i*m:]}) + if math.Abs(nrm-1) > 1e-14 { + t.Errorf("Case %v, q not normal", c) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(m, blas64.Vector{Inc: 1, Data: q.Data[i*m:]}, blas64.Vector{Inc: 1, Data: q.Data[j*m:]}) + if math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", c) + } + } + } + // Check that A = Q * R + r := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + r.Data[i*n+j] = a[i*lda+j] + } + } + atmp := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + copy(atmp.Data, a) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, r, 0, atmp) + if !floats.EqualApprox(atmp.Data, aCopy, 1e-14) { + t.Errorf("Q*R != a") + } + } +} diff --git a/lapack/testlapack/dgeqrf.go b/lapack/testlapack/dgeqrf.go new file mode 100644 index 00000000..3b1aa3bf --- /dev/null +++ b/lapack/testlapack/dgeqrf.go @@ -0,0 +1,95 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dgeqrfer interface { + Dgeqr2er + Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DgeqrfTest(t *testing.T, impl Dgeqrfer) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {10, 5, 0}, + {5, 10, 0}, + {10, 10, 0}, + {300, 5, 0}, + {3, 500, 0}, + {200, 200, 0}, + {300, 200, 0}, + {204, 300, 0}, + {1, 3000, 0}, + {3000, 1, 0}, + {10, 5, 20}, + {5, 10, 20}, + {10, 10, 20}, + {300, 5, 400}, + {3, 500, 600}, + {200, 200, 300}, + {300, 200, 300}, + {204, 300, 400}, + {1, 3000, 4000}, + {3000, 1, 4000}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = rnd.Float64() + } + } + tau := make([]float64, n) + for i := 0; i < n; i++ { + tau[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + ans := make([]float64, len(a)) + copy(ans, a) + work := make([]float64, n) + // Compute unblocked QR. + impl.Dgeqr2(m, n, ans, lda, tau, work) + // Compute blocked QR with small work. + impl.Dgeqrf(m, n, a, lda, tau, work, len(work)) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch small work.", c) + } + // Try the full length of work. + impl.Dgeqrf(m, n, a, lda, tau, work, -1) + lwork := int(work[0]) + work = make([]float64, lwork) + copy(a, aCopy) + impl.Dgeqrf(m, n, a, lda, tau, work, lwork) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch large work.", c) + } + + // Try a slightly smaller version of work to test blocking. + if len(work) <= n { + continue + } + work = work[1:] + lwork-- + copy(a, aCopy) + impl.Dgeqrf(m, n, a, lda, tau, work, lwork) + if !floats.EqualApprox(ans, a, 1e-12) { + t.Errorf("Case %v, mismatch large work.", c) + } + } +} diff --git a/lapack/testlapack/dgerq2.go b/lapack/testlapack/dgerq2.go new file mode 100644 index 00000000..f3cdeca4 --- /dev/null +++ b/lapack/testlapack/dgerq2.go @@ -0,0 +1,117 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgerq2er interface { + Dgerq2(m, n int, a []float64, lda int, tau []float64, work []float64) +} + +func Dgerq2Test(t *testing.T, impl Dgerq2er) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {1, 1, 0}, + {2, 2, 0}, + {3, 2, 0}, + {2, 3, 0}, + {1, 12, 0}, + {2, 6, 0}, + {3, 4, 0}, + {4, 3, 0}, + {6, 2, 0}, + {12, 1, 0}, + {1, 1, 20}, + {2, 2, 20}, + {3, 2, 20}, + {2, 3, 20}, + {1, 12, 20}, + {2, 6, 20}, + {3, 4, 20}, + {4, 3, 20}, + {6, 2, 20}, + {12, 1, 20}, + } { + n := test.n + m := test.m + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + k := min(m, n) + tau := make([]float64, k) + for i := range tau { + tau[i] = rnd.Float64() + } + work := make([]float64, m) + for i := range work { + work[i] = rnd.Float64() + } + copy(aCopy, a) + impl.Dgerq2(m, n, a, lda, tau, work) + + // Test that the RQ factorization has completed successfully. Compute + // Q based on the vectors. + q := constructQ("RQ", m, n, a, lda, tau) + + // Check that q is orthonormal + for i := 0; i < q.Rows; i++ { + nrm := blas64.Nrm2(q.Cols, blas64.Vector{Inc: 1, Data: q.Data[i*q.Stride:]}) + if math.IsNaN(nrm) || math.Abs(nrm-1) > 1e-14 { + t.Errorf("Case %v, q not normal", c) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(q.Cols, blas64.Vector{Inc: 1, Data: q.Data[i*q.Stride:]}, blas64.Vector{Inc: 1, Data: q.Data[j*q.Stride:]}) + if math.IsNaN(dot) || math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", c) + } + } + } + // Check that A = R * Q + r := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < m; i++ { + off := m - n + for j := max(0, i-off); j < n; j++ { + r.Data[i*r.Stride+j] = a[i*lda+j] + } + } + + got := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, r, q, 0, got) + want := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: aCopy, + } + if !equalApproxGeneral(got, want, 1e-14) { + t.Errorf("Case %d, R*Q != a\ngot: %+v\nwant:%+v", c, got, want) + } + } +} diff --git a/lapack/testlapack/dgerqf.go b/lapack/testlapack/dgerqf.go new file mode 100644 index 00000000..3ffab087 --- /dev/null +++ b/lapack/testlapack/dgerqf.go @@ -0,0 +1,134 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgerqfer interface { + Dgerqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DgerqfTest(t *testing.T, impl Dgerqfer) { + rnd := rand.New(rand.NewSource(1)) + for c, test := range []struct { + m, n, lda int + }{ + {1, 1, 0}, + {2, 2, 0}, + {3, 2, 0}, + {2, 3, 0}, + {1, 12, 0}, + {2, 6, 0}, + {3, 4, 0}, + {4, 3, 0}, + {6, 2, 0}, + {12, 1, 0}, + {1, 1, 20}, + {2, 2, 20}, + {3, 2, 20}, + {2, 3, 20}, + {1, 12, 20}, + {2, 6, 20}, + {3, 4, 20}, + {4, 3, 20}, + {6, 2, 20}, + {12, 1, 20}, + } { + n := test.n + m := test.m + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + k := min(m, n) + tau := make([]float64, k) + for i := range tau { + tau[i] = rnd.Float64() + } + work := []float64{0} + impl.Dgerqf(m, n, a, lda, tau, work, -1) + lwkopt := int(work[0]) + for _, wk := range []struct { + name string + length int + }{ + {name: "short", length: m}, + {name: "medium", length: lwkopt - 1}, + {name: "long", length: lwkopt}, + } { + if wk.length < max(1, m) { + continue + } + lwork := wk.length + work = make([]float64, lwork) + for i := range work { + work[i] = rnd.Float64() + } + copy(a, aCopy) + impl.Dgerqf(m, n, a, lda, tau, work, lwork) + + // Test that the RQ factorization has completed successfully. Compute + // Q based on the vectors. + q := constructQ("RQ", m, n, a, lda, tau) + + // Check that q is orthonormal + for i := 0; i < q.Rows; i++ { + nrm := blas64.Nrm2(q.Cols, blas64.Vector{Inc: 1, Data: q.Data[i*q.Stride:]}) + if math.IsNaN(nrm) || math.Abs(nrm-1) > 1e-14 { + t.Errorf("Case %v, q not normal", c) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(q.Cols, blas64.Vector{Inc: 1, Data: q.Data[i*q.Stride:]}, blas64.Vector{Inc: 1, Data: q.Data[j*q.Stride:]}) + if math.IsNaN(dot) || math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", c) + } + } + } + // Check that A = R * Q + r := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < m; i++ { + off := m - n + for j := max(0, i-off); j < n; j++ { + r.Data[i*r.Stride+j] = a[i*lda+j] + } + } + + got := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, r, q, 0, got) + want := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: aCopy, + } + if !equalApproxGeneral(got, want, 1e-14) { + t.Errorf("Case %d, R*Q != a %s\ngot: %+v\nwant:%+v", c, wk.name, got, want) + } + } + } +} diff --git a/lapack/testlapack/dgesvd.go b/lapack/testlapack/dgesvd.go new file mode 100644 index 00000000..3f1aa872 --- /dev/null +++ b/lapack/testlapack/dgesvd.go @@ -0,0 +1,286 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dgesvder interface { + Dgesvd(jobU, jobVT lapack.SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool) +} + +func DgesvdTest(t *testing.T, impl Dgesvder) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): Add tests for all of the cases when the SVD implementation + // is finished. + // TODO(btracey): Add tests for m > mnthr and n > mnthr when other SVD + // conditions are implemented. Right now mnthr is 5,000,000 which is too + // large to create a square matrix of that size. + for _, test := range []struct { + m, n, lda, ldu, ldvt int + }{ + {5, 5, 0, 0, 0}, + {5, 6, 0, 0, 0}, + {6, 5, 0, 0, 0}, + {5, 9, 0, 0, 0}, + {9, 5, 0, 0, 0}, + + {5, 5, 10, 11, 12}, + {5, 6, 10, 11, 12}, + {6, 5, 10, 11, 12}, + {5, 5, 10, 11, 12}, + {5, 9, 10, 11, 12}, + {9, 5, 10, 11, 12}, + + {300, 300, 0, 0, 0}, + {300, 400, 0, 0, 0}, + {400, 300, 0, 0, 0}, + {300, 600, 0, 0, 0}, + {600, 300, 0, 0, 0}, + + {300, 300, 400, 450, 460}, + {300, 400, 500, 550, 560}, + {400, 300, 550, 550, 560}, + {300, 600, 700, 750, 760}, + {600, 300, 700, 750, 760}, + } { + jobU := lapack.SVDAll + jobVT := lapack.SVDAll + + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + ldu := test.ldu + if ldu == 0 { + ldu = m + } + ldvt := test.ldvt + if ldvt == 0 { + ldvt = n + } + + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + + u := make([]float64, m*ldu) + for i := range u { + u[i] = rnd.NormFloat64() + } + + vt := make([]float64, n*ldvt) + for i := range vt { + vt[i] = rnd.NormFloat64() + } + + uAllOrig := make([]float64, len(u)) + copy(uAllOrig, u) + vtAllOrig := make([]float64, len(vt)) + copy(vtAllOrig, vt) + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + s := make([]float64, min(m, n)) + + work := make([]float64, 1) + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, u, ldu, vt, ldvt, work, -1) + + if !floats.Equal(a, aCopy) { + t.Errorf("a changed during call to get work length") + } + + work = make([]float64, int(work[0])) + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, u, ldu, vt, ldvt, work, len(work)) + + errStr := fmt.Sprintf("m = %v, n = %v, lda = %v, ldu = %v, ldv = %v", m, n, lda, ldu, ldvt) + svdCheck(t, false, errStr, m, n, s, a, u, ldu, vt, ldvt, aCopy, lda) + svdCheckPartial(t, impl, lapack.SVDAll, errStr, uAllOrig, vtAllOrig, aCopy, m, n, a, lda, s, u, ldu, vt, ldvt, work, false) + + // Test InPlace + jobU = lapack.SVDInPlace + jobVT = lapack.SVDInPlace + copy(a, aCopy) + copy(u, uAllOrig) + copy(vt, vtAllOrig) + + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, u, ldu, vt, ldvt, work, len(work)) + svdCheck(t, true, errStr, m, n, s, a, u, ldu, vt, ldvt, aCopy, lda) + svdCheckPartial(t, impl, lapack.SVDInPlace, errStr, uAllOrig, vtAllOrig, aCopy, m, n, a, lda, s, u, ldu, vt, ldvt, work, false) + } +} + +// svdCheckPartial checks that the singular values and vectors are computed when +// not all of them are computed. +func svdCheckPartial(t *testing.T, impl Dgesvder, job lapack.SVDJob, errStr string, uAllOrig, vtAllOrig, aCopy []float64, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, shortWork bool) { + rnd := rand.New(rand.NewSource(1)) + jobU := job + jobVT := job + // Compare the singular values when computed with {SVDNone, SVDNone.} + sCopy := make([]float64, len(s)) + copy(sCopy, s) + copy(a, aCopy) + for i := range s { + s[i] = rnd.Float64() + } + tmp1 := make([]float64, 1) + tmp2 := make([]float64, 1) + jobU = lapack.SVDNone + jobVT = lapack.SVDNone + + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, tmp1, ldu, tmp2, ldvt, work, -1) + work = make([]float64, int(work[0])) + lwork := len(work) + if shortWork { + lwork-- + } + ok := impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, tmp1, ldu, tmp2, ldvt, work, lwork) + if !ok { + t.Errorf("Dgesvd did not complete successfully") + } + if !floats.EqualApprox(s, sCopy, 1e-10) { + t.Errorf("Singular value mismatch when singular vectors not computed: %s", errStr) + } + // Check that the singular vectors are correctly computed when the other + // is none. + uAll := make([]float64, len(u)) + copy(uAll, u) + vtAll := make([]float64, len(vt)) + copy(vtAll, vt) + + // Copy the original vectors so the data outside the matrix bounds is the same. + copy(u, uAllOrig) + copy(vt, vtAllOrig) + + jobU = job + jobVT = lapack.SVDNone + copy(a, aCopy) + for i := range s { + s[i] = rnd.Float64() + } + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, u, ldu, tmp2, ldvt, work, -1) + work = make([]float64, int(work[0])) + lwork = len(work) + if shortWork { + lwork-- + } + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, u, ldu, tmp2, ldvt, work, len(work)) + if !floats.EqualApprox(uAll, u, 1e-10) { + t.Errorf("U mismatch when VT is not computed: %s", errStr) + } + if !floats.EqualApprox(s, sCopy, 1e-10) { + t.Errorf("Singular value mismatch when U computed VT not") + } + jobU = lapack.SVDNone + jobVT = job + copy(a, aCopy) + for i := range s { + s[i] = rnd.Float64() + } + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, tmp1, ldu, vt, ldvt, work, -1) + work = make([]float64, int(work[0])) + lwork = len(work) + if shortWork { + lwork-- + } + impl.Dgesvd(jobU, jobVT, m, n, a, lda, s, tmp1, ldu, vt, ldvt, work, len(work)) + if !floats.EqualApprox(vtAll, vt, 1e-10) { + t.Errorf("VT mismatch when U is not computed: %s", errStr) + } + if !floats.EqualApprox(s, sCopy, 1e-10) { + t.Errorf("Singular value mismatch when VT computed U not") + } +} + +// svdCheck checks that the singular value decomposition correctly multiplies back +// to the original matrix. +func svdCheck(t *testing.T, thin bool, errStr string, m, n int, s, a, u []float64, ldu int, vt []float64, ldvt int, aCopy []float64, lda int) { + sigma := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + for i := 0; i < min(m, n); i++ { + sigma.Data[i*sigma.Stride+i] = s[i] + } + + uMat := blas64.General{ + Rows: m, + Cols: m, + Stride: ldu, + Data: u, + } + vTMat := blas64.General{ + Rows: n, + Cols: n, + Stride: ldvt, + Data: vt, + } + if thin { + sigma.Rows = min(m, n) + sigma.Cols = min(m, n) + uMat.Cols = min(m, n) + vTMat.Rows = min(m, n) + } + + tmp := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + ans := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + copy(ans.Data, a) + + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, uMat, sigma, 0, tmp) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, vTMat, 0, ans) + + if !floats.EqualApprox(ans.Data, aCopy, 1e-8) { + t.Errorf("Decomposition mismatch. Trim = %v, %s", thin, errStr) + } + + if !thin { + // Check that U and V are orthogonal. + for i := 0; i < uMat.Rows; i++ { + for j := i + 1; j < uMat.Rows; j++ { + dot := blas64.Dot(uMat.Cols, + blas64.Vector{Inc: 1, Data: uMat.Data[i*uMat.Stride:]}, + blas64.Vector{Inc: 1, Data: uMat.Data[j*uMat.Stride:]}, + ) + if dot > 1e-8 { + t.Errorf("U not orthogonal %s", errStr) + } + } + } + for i := 0; i < vTMat.Rows; i++ { + for j := i + 1; j < vTMat.Rows; j++ { + dot := blas64.Dot(vTMat.Cols, + blas64.Vector{Inc: 1, Data: vTMat.Data[i*vTMat.Stride:]}, + blas64.Vector{Inc: 1, Data: vTMat.Data[j*vTMat.Stride:]}, + ) + if dot > 1e-8 { + t.Errorf("V not orthogonal %s", errStr) + } + } + } + } +} diff --git a/lapack/testlapack/dgetf2.go b/lapack/testlapack/dgetf2.go new file mode 100644 index 00000000..01b21e5d --- /dev/null +++ b/lapack/testlapack/dgetf2.go @@ -0,0 +1,195 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgetf2er interface { + Dgetf2(m, n int, a []float64, lda int, ipiv []int) bool +} + +func Dgetf2Test(t *testing.T, impl Dgetf2er) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {10, 10, 0}, + {10, 5, 0}, + {10, 5, 0}, + + {10, 10, 20}, + {5, 10, 20}, + {10, 5, 20}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + mn := min(m, n) + ipiv := make([]int, mn) + for i := range ipiv { + ipiv[i] = rnd.Int() + } + ok := impl.Dgetf2(m, n, a, lda, ipiv) + checkPLU(t, ok, m, n, lda, ipiv, a, aCopy, 1e-14, true) + } + + // Test with singular matrices (random matrices are almost surely non-singular). + for _, test := range []struct { + m, n, lda int + a []float64 + }{ + { + m: 2, + n: 2, + lda: 2, + a: []float64{ + 1, 0, + 0, 0, + }, + }, + { + m: 2, + n: 2, + lda: 2, + a: []float64{ + 1, 5, + 2, 10, + }, + }, + { + m: 3, + n: 3, + lda: 3, + // row 3 = row1 + 2 * row2 + a: []float64{ + 1, 5, 7, + 2, 10, -3, + 5, 25, 1, + }, + }, + { + m: 3, + n: 4, + lda: 4, + // row 3 = row1 + 2 * row2 + a: []float64{ + 1, 5, 7, 9, + 2, 10, -3, 11, + 5, 25, 1, 31, + }, + }, + } { + if impl.Dgetf2(test.m, test.n, test.a, test.lda, make([]int, min(test.m, test.n))) { + t.Log("Returned ok with singular matrix.") + } + } +} + +// checkPLU checks that the PLU factorization contained in factorize matches +// the original matrix contained in original. +func checkPLU(t *testing.T, ok bool, m, n, lda int, ipiv []int, factorized, original []float64, tol float64, print bool) { + var hasZeroDiagonal bool + for i := 0; i < min(m, n); i++ { + if factorized[i*lda+i] == 0 { + hasZeroDiagonal = true + break + } + } + if hasZeroDiagonal && ok { + t.Error("Has a zero diagonal but returned ok") + } + if !hasZeroDiagonal && !ok { + t.Error("Non-zero diagonal but returned !ok") + } + + // Check that the LU decomposition is correct. + mn := min(m, n) + l := make([]float64, m*mn) + ldl := mn + u := make([]float64, mn*n) + ldu := n + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + v := factorized[i*lda+j] + switch { + case i == j: + l[i*ldl+i] = 1 + u[i*ldu+i] = v + case i > j: + l[i*ldl+j] = v + case i < j: + u[i*ldu+j] = v + } + } + } + + LU := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + U := blas64.General{ + Rows: mn, + Cols: n, + Stride: ldu, + Data: u, + } + L := blas64.General{ + Rows: m, + Cols: mn, + Stride: ldl, + Data: l, + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, L, U, 0, LU) + + p := make([]float64, m*m) + ldp := m + for i := 0; i < m; i++ { + p[i*ldp+i] = 1 + } + for i := len(ipiv) - 1; i >= 0; i-- { + v := ipiv[i] + blas64.Swap(m, blas64.Vector{Inc: 1, Data: p[i*ldp:]}, blas64.Vector{Inc: 1, Data: p[v*ldp:]}) + } + P := blas64.General{ + Rows: m, + Cols: m, + Stride: m, + Data: p, + } + aComp := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + copy(aComp.Data, factorized) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, P, LU, 0, aComp) + if !floats.EqualApprox(aComp.Data, original, tol) { + if print { + t.Errorf("PLU multiplication does not match original matrix.\nWant: %v\nGot: %v", original, aComp.Data) + return + } + t.Error("PLU multiplication does not match original matrix.") + } +} diff --git a/lapack/testlapack/dgetrf.go b/lapack/testlapack/dgetrf.go new file mode 100644 index 00000000..1c9c6e45 --- /dev/null +++ b/lapack/testlapack/dgetrf.go @@ -0,0 +1,65 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" +) + +type Dgetrfer interface { + Dgetrf(m, n int, a []float64, lda int, ipiv []int) bool +} + +func DgetrfTest(t *testing.T, impl Dgetrfer) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {10, 5, 0}, + {5, 10, 0}, + {10, 10, 0}, + {300, 5, 0}, + {3, 500, 0}, + {4, 5, 0}, + {300, 200, 0}, + {204, 300, 0}, + {1, 3000, 0}, + {3000, 1, 0}, + {10, 5, 20}, + {5, 10, 20}, + {10, 10, 20}, + {300, 5, 400}, + {3, 500, 600}, + {200, 200, 300}, + {300, 200, 300}, + {204, 300, 400}, + {1, 3000, 4000}, + {3000, 1, 4000}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + mn := min(m, n) + ipiv := make([]int, mn) + for i := range ipiv { + ipiv[i] = rnd.Int() + } + + // Cannot compare the outputs of Dgetrf and Dgetf2 because the pivoting may + // happen differently. Instead check that the LPQ factorization is correct. + aCopy := make([]float64, len(a)) + copy(aCopy, a) + ok := impl.Dgetrf(m, n, a, lda, ipiv) + checkPLU(t, ok, m, n, lda, ipiv, a, aCopy, 1e-10, false) + } +} diff --git a/lapack/testlapack/dgetri.go b/lapack/testlapack/dgetri.go new file mode 100644 index 00000000..fd2e66a4 --- /dev/null +++ b/lapack/testlapack/dgetri.go @@ -0,0 +1,89 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dgetrier interface { + Dgetrfer + Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) bool +} + +func DgetriTest(t *testing.T, impl Dgetrier) { + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + for _, test := range []struct { + n, lda int + }{ + {5, 0}, + {5, 8}, + {45, 0}, + {45, 50}, + {65, 0}, + {65, 70}, + {150, 0}, + {150, 250}, + } { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + // Generate a random well conditioned matrix + perm := rnd.Perm(n) + a := make([]float64, n*lda) + for i := 0; i < n; i++ { + a[i*lda+perm[i]] = 1 + } + for i := range a { + a[i] += 0.01 * rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + ipiv := make([]int, n) + // Compute LU decomposition. + impl.Dgetrf(n, n, a, lda, ipiv) + // Compute inverse. + work := make([]float64, 1) + impl.Dgetri(n, a, lda, ipiv, work, -1) + work = make([]float64, int(work[0])) + lwork := len(work) + + ok := impl.Dgetri(n, a, lda, ipiv, work, lwork) + if !ok { + t.Errorf("Unexpected singular matrix.") + } + + // Check that A(inv) * A = I. + ans := make([]float64, len(a)) + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, aCopy, lda, a, lda, 0, ans, lda) + isEye := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + // This tolerance is so high because computing matrix inverses + // is very unstable. + if math.Abs(ans[i*lda+j]-1) > 5e-2 { + isEye = false + } + } else { + if math.Abs(ans[i*lda+j]) > 5e-2 { + isEye = false + } + } + } + } + if !isEye { + t.Errorf("Inv(A) * A != I. n = %v, lda = %v", n, lda) + } + } +} diff --git a/lapack/testlapack/dgetrs.go b/lapack/testlapack/dgetrs.go new file mode 100644 index 00000000..a04229c8 --- /dev/null +++ b/lapack/testlapack/dgetrs.go @@ -0,0 +1,113 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dgetrser interface { + Dgetrfer + Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int) +} + +func DgetrsTest(t *testing.T, impl Dgetrser) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): Put more thought into creating more regularized matrices + // and what correct tolerances should be. Consider also seeding the random + // number in this test to make it more robust to code changes in other + // parts of the suite. + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + n, nrhs, lda, ldb int + tol float64 + }{ + {3, 3, 0, 0, 1e-12}, + {3, 5, 0, 0, 1e-12}, + {5, 3, 0, 0, 1e-12}, + + {3, 3, 8, 10, 1e-12}, + {3, 5, 8, 10, 1e-12}, + {5, 3, 8, 10, 1e-12}, + + {300, 300, 0, 0, 1e-8}, + {300, 500, 0, 0, 1e-8}, + {500, 300, 0, 0, 1e-6}, + + {300, 300, 700, 600, 1e-8}, + {300, 500, 700, 600, 1e-8}, + {500, 300, 700, 600, 1e-6}, + } { + n := test.n + nrhs := test.nrhs + lda := test.lda + if lda == 0 { + lda = n + } + ldb := test.ldb + if ldb == 0 { + ldb = nrhs + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.Float64() + } + b := make([]float64, n*ldb) + for i := range b { + b[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + bCopy := make([]float64, len(b)) + copy(bCopy, b) + + ipiv := make([]int, n) + for i := range ipiv { + ipiv[i] = rnd.Int() + } + + // Compute the LU factorization. + impl.Dgetrf(n, n, a, lda, ipiv) + // Solve the system of equations given the result. + impl.Dgetrs(trans, n, nrhs, a, lda, ipiv, b, ldb) + + // Check that the system of equations holds. + A := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: aCopy, + } + B := blas64.General{ + Rows: n, + Cols: nrhs, + Stride: ldb, + Data: bCopy, + } + X := blas64.General{ + Rows: n, + Cols: nrhs, + Stride: ldb, + Data: b, + } + tmp := blas64.General{ + Rows: n, + Cols: nrhs, + Stride: ldb, + Data: make([]float64, n*ldb), + } + copy(tmp.Data, bCopy) + blas64.Gemm(trans, blas.NoTrans, 1, A, X, 0, B) + if !floats.EqualApprox(tmp.Data, bCopy, test.tol) { + t.Errorf("Linear solve mismatch. trans = %v, n = %v, nrhs = %v, lda = %v, ldb = %v", trans, n, nrhs, lda, ldb) + } + } + } +} diff --git a/lapack/testlapack/dggsvd3.go b/lapack/testlapack/dggsvd3.go new file mode 100644 index 00000000..8401d7c8 --- /dev/null +++ b/lapack/testlapack/dggsvd3.go @@ -0,0 +1,173 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dggsvd3er interface { + Dggsvd3(jobU, jobV, jobQ lapack.GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool) +} + +func Dggsvd3Test(t *testing.T, impl Dggsvd3er) { + rnd := rand.New(rand.NewSource(1)) + for cas, test := range []struct { + m, p, n, lda, ldb, ldu, ldv, ldq int + + ok bool + }{ + {m: 3, p: 3, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 10, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 10, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 5, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10, ok: true}, + {m: 5, p: 5, n: 5, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10, ok: true}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 10, p: 5, n: 5, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10, ok: true}, + {m: 10, p: 5, n: 5, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10, ok: true}, + {m: 10, p: 10, n: 10, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20, ok: true}, + {m: 10, p: 10, n: 10, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20, ok: true}, + } { + m := test.m + p := test.p + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + ldb := test.ldb + if ldb == 0 { + ldb = n + } + ldu := test.ldu + if ldu == 0 { + ldu = m + } + ldv := test.ldv + if ldv == 0 { + ldv = p + } + ldq := test.ldq + if ldq == 0 { + ldq = n + } + + a := randomGeneral(m, n, lda, rnd) + aCopy := cloneGeneral(a) + b := randomGeneral(p, n, ldb, rnd) + bCopy := cloneGeneral(b) + + alpha := make([]float64, n) + beta := make([]float64, n) + + u := nanGeneral(m, m, ldu) + v := nanGeneral(p, p, ldv) + q := nanGeneral(n, n, ldq) + + iwork := make([]int, n) + + work := []float64{0} + impl.Dggsvd3(lapack.GSVDU, lapack.GSVDV, lapack.GSVDQ, + m, n, p, + a.Data, a.Stride, + b.Data, b.Stride, + alpha, beta, + u.Data, u.Stride, + v.Data, v.Stride, + q.Data, q.Stride, + work, -1, iwork) + + lwork := int(work[0]) + work = make([]float64, lwork) + + k, l, ok := impl.Dggsvd3(lapack.GSVDU, lapack.GSVDV, lapack.GSVDQ, + m, n, p, + a.Data, a.Stride, + b.Data, b.Stride, + alpha, beta, + u.Data, u.Stride, + v.Data, v.Stride, + q.Data, q.Stride, + work, lwork, iwork) + + if !ok { + if test.ok { + t.Errorf("test %d unexpectedly did not converge", cas) + } + continue + } + + // Check orthogonality of U, V and Q. + if !isOrthonormal(u) { + t.Errorf("test %d: U is not orthogonal\n%+v", cas, u) + } + if !isOrthonormal(v) { + t.Errorf("test %d: V is not orthogonal\n%+v", cas, v) + } + if !isOrthonormal(q) { + t.Errorf("test %d: Q is not orthogonal\n%+v", cas, q) + } + + // Check C^2 + S^2 = I. + var elements []float64 + if m-k-l >= 0 { + elements = alpha[k : k+l] + } else { + elements = alpha[k:m] + } + for i := range elements { + i += k + d := alpha[i]*alpha[i] + beta[i]*beta[i] + if !floats.EqualWithinAbsOrRel(d, 1, 1e-14, 1e-14) { + t.Errorf("test %d: alpha_%d^2 + beta_%d^2 != 1: got: %v", cas, i, i, d) + } + } + + zeroR, d1, d2 := constructGSVDresults(n, p, m, k, l, a, b, alpha, beta) + + // Check U^T*A*Q = D1*[ 0 R ]. + uTmp := nanGeneral(m, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, u, aCopy, 0, uTmp) + uAns := nanGeneral(m, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, uTmp, q, 0, uAns) + + d10r := nanGeneral(m, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, d1, zeroR, 0, d10r) + + if !equalApproxGeneral(uAns, d10r, 1e-14) { + t.Errorf("test %d: U^T*A*Q != D1*[ 0 R ]\nU^T*A*Q:\n%+v\nD1*[ 0 R ]:\n%+v", + cas, uAns, d10r) + } + + // Check V^T*B*Q = D2*[ 0 R ]. + vTmp := nanGeneral(p, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, v, bCopy, 0, vTmp) + vAns := nanGeneral(p, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, vTmp, q, 0, vAns) + + d20r := nanGeneral(p, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, d2, zeroR, 0, d20r) + + if !equalApproxGeneral(vAns, d20r, 1e-14) { + t.Errorf("test %d: V^T*B*Q != D2*[ 0 R ]\nV^T*B*Q:\n%+v\nD2*[ 0 R ]:\n%+v", + cas, vAns, d20r) + } + } +} diff --git a/lapack/testlapack/dggsvp3.go b/lapack/testlapack/dggsvp3.go new file mode 100644 index 00000000..48c1ae21 --- /dev/null +++ b/lapack/testlapack/dggsvp3.go @@ -0,0 +1,146 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +type Dggsvp3er interface { + Dlanger + Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, iwork []int, tau, work []float64, lwork int) (k, l int) +} + +func Dggsvp3Test(t *testing.T, impl Dggsvp3er) { + rnd := rand.New(rand.NewSource(1)) + for cas, test := range []struct { + m, p, n, lda, ldb, ldu, ldv, ldq int + }{ + {m: 3, p: 3, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 10, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 10, p: 5, n: 5, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 10, p: 10, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 10, p: 10, n: 10, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0}, + {m: 5, p: 5, n: 5, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10}, + {m: 5, p: 5, n: 5, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20}, + {m: 5, p: 5, n: 10, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20}, + {m: 10, p: 5, n: 5, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10}, + {m: 10, p: 5, n: 5, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10}, + {m: 10, p: 10, n: 10, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20}, + {m: 10, p: 10, n: 10, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20}, + } { + m := test.m + p := test.p + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + ldb := test.ldb + if ldb == 0 { + ldb = n + } + ldu := test.ldu + if ldu == 0 { + ldu = m + } + ldv := test.ldv + if ldv == 0 { + ldv = p + } + ldq := test.ldq + if ldq == 0 { + ldq = n + } + + a := randomGeneral(m, n, lda, rnd) + aCopy := cloneGeneral(a) + b := randomGeneral(p, n, ldb, rnd) + bCopy := cloneGeneral(b) + + tola := float64(max(m, n)) * impl.Dlange(lapack.NormFrob, m, n, a.Data, a.Stride, nil) * dlamchE + tolb := float64(max(p, n)) * impl.Dlange(lapack.NormFrob, p, n, b.Data, b.Stride, nil) * dlamchE + + u := nanGeneral(m, m, ldu) + v := nanGeneral(p, p, ldv) + q := nanGeneral(n, n, ldq) + + iwork := make([]int, n) + tau := make([]float64, n) + + work := []float64{0} + impl.Dggsvp3(lapack.GSVDU, lapack.GSVDV, lapack.GSVDQ, + m, p, n, + a.Data, a.Stride, + b.Data, b.Stride, + tola, tolb, + u.Data, u.Stride, + v.Data, v.Stride, + q.Data, q.Stride, + iwork, tau, + work, -1) + + lwork := int(work[0]) + work = make([]float64, lwork) + + k, l := impl.Dggsvp3(lapack.GSVDU, lapack.GSVDV, lapack.GSVDQ, + m, p, n, + a.Data, a.Stride, + b.Data, b.Stride, + tola, tolb, + u.Data, u.Stride, + v.Data, v.Stride, + q.Data, q.Stride, + iwork, tau, + work, lwork) + + // Check orthogonality of U, V and Q. + if !isOrthonormal(u) { + t.Errorf("test %d: U is not orthogonal\n%+v", cas, u) + } + if !isOrthonormal(v) { + t.Errorf("test %d: V is not orthogonal\n%+v", cas, v) + } + if !isOrthonormal(q) { + t.Errorf("test %d: Q is not orthogonal\n%+v", cas, q) + } + + zeroA, zeroB := constructGSVPresults(n, p, m, k, l, a, b) + + // Check U^T*A*Q = [ 0 RA ]. + uTmp := nanGeneral(m, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, u, aCopy, 0, uTmp) + uAns := nanGeneral(m, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, uTmp, q, 0, uAns) + + if !equalApproxGeneral(uAns, zeroA, 1e-14) { + t.Errorf("test %d: U^T*A*Q != [ 0 RA ]\nU^T*A*Q:\n%+v\n[ 0 RA ]:\n%+v", + cas, uAns, zeroA) + } + + // Check V^T*B*Q = [ 0 RB ]. + vTmp := nanGeneral(p, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, v, bCopy, 0, vTmp) + vAns := nanGeneral(p, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, vTmp, q, 0, vAns) + + if !equalApproxGeneral(vAns, zeroB, 1e-14) { + t.Errorf("test %d: V^T*B*Q != [ 0 RB ]\nV^T*B*Q:\n%+v\n[ 0 RB ]:\n%+v", + cas, vAns, zeroB) + } + } +} diff --git a/lapack/testlapack/dhseqr.go b/lapack/testlapack/dhseqr.go new file mode 100644 index 00000000..f263d634 --- /dev/null +++ b/lapack/testlapack/dhseqr.go @@ -0,0 +1,861 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dhseqrer interface { + Dhseqr(job lapack.EVJob, compz lapack.EVComp, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, + z []float64, ldz int, work []float64, lwork int) int +} + +type dhseqrTest struct { + n int + ilo int + ihi int + h []float64 + tol float64 + + evWant []complex128 +} + +func DhseqrTest(t *testing.T, impl Dhseqrer) { + for i, tc := range dhseqrTests { + for _, job := range []lapack.EVJob{lapack.EigenvaluesOnly, lapack.EigenvaluesAndSchur} { + for _, wantz := range []bool{false, true} { + for _, extra := range []int{0, 11} { + testDhseqr(t, impl, i, tc, job, wantz, extra, true) + testDhseqr(t, impl, i, tc, job, wantz, extra, false) + } + } + } + } +} + +func testDhseqr(t *testing.T, impl Dhseqrer, i int, test dhseqrTest, job lapack.EVJob, wantz bool, extra int, optwork bool) { + const tol = 1e-14 + evTol := test.tol + if evTol == 0 { + evTol = tol + } + + n := test.n + ihi := test.ihi + ilo := test.ilo + h := zeros(n, n, n+extra) + copyGeneral(h, blas64.General{Rows: n, Cols: n, Stride: max(1, n), Data: test.h}) + hCopy := cloneGeneral(h) + + var compz lapack.EVComp = lapack.None + z := blas64.General{Stride: max(1, n)} + if wantz { + // First, let Dhseqr initialize Z to the identity matrix. + compz = lapack.HessEV + z = nanGeneral(n, n, n+extra) + } + + wr := nanSlice(n) + wi := nanSlice(n) + + work := nanSlice(max(1, n)) + if optwork { + impl.Dhseqr(job, lapack.HessEV, n, ilo, ihi, nil, h.Stride, nil, nil, nil, z.Stride, work, -1) + work = nanSlice(int(work[0])) + } + + unconverged := impl.Dhseqr(job, compz, n, ilo, ihi, h.Data, h.Stride, wr, wi, z.Data, z.Stride, work, len(work)) + prefix := fmt.Sprintf("Case %v: job=%v, compz=%v, n=%v, ilo=%v, ihi=%v, extra=%v, optwk=%v", + i, job, compz, n, ilo, ihi, extra, optwork) + if unconverged > 0 { + t.Log("%v: Dhseqr did not compute all eigenvalues. unconverged=%v", prefix, unconverged) + if unconverged <= ilo { + t.Fatalf("%v: 0 < unconverged <= ilo", prefix) + } + } + + // Check that wr and wi have been assigned completely. + if floats.HasNaN(wr) { + t.Errorf("%v: wr has NaN elements", prefix) + } + if floats.HasNaN(wi) { + t.Errorf("%v: wi has NaN elements", prefix) + } + + // Check that complex eigenvalues are stored in consecutive elements as + // complex conjugate pairs. + for i := 0; i < n; { + if unconverged > 0 && i == ilo { + // Skip the unconverged eigenvalues. + i = unconverged + continue + } + if wi[i] == 0 { + // Real eigenvalue. + i++ + continue + } + // Complex conjugate pair. + if wr[i] != wr[i+1] { + t.Errorf("%v: conjugate pair has real parts unequal", prefix) + } + if wi[i] < 0 { + t.Errorf("%v: first in conjugate pair has negative imaginary part", prefix) + } + if wi[i+1] != -wi[i] { + t.Errorf("%v: complex pair is not conjugate", prefix) + } + i += 2 + } + + // Check that H contains the Schur form T. + if job == lapack.EigenvaluesAndSchur { + for i := 0; i < n; { + if unconverged > 0 && i == ilo { + // Skip the unconverged eigenvalues. + i = unconverged + continue + } + if wi[i] == 0 { + // Real eigenvalue. + if wr[i] != h.Data[i*h.Stride+i] { + t.Errorf("%v: T not in Schur form (real eigenvalue not on diagonal)", prefix) + } + i++ + continue + } + // Complex conjugate pair. + im := math.Sqrt(math.Abs(h.Data[(i+1)*h.Stride+i])) * math.Sqrt(math.Abs(h.Data[i*h.Stride+i+1])) + if wr[i] != h.Data[i*h.Stride+i] || wr[i] != h.Data[(i+1)*h.Stride+i+1] || + math.Abs(wi[i]-im) > tol { + t.Errorf("%v: conjugate pair and 2×2 diagonal block don't correspond", prefix) + } + i += 2 + } + } + + // Check that all the found eigenvalues are really eigenvalues. + foundEV := make([]bool, len(test.evWant)) + for i := 0; i < n; { + if unconverged > 0 && i == ilo { + // Skip the unconverged eigenvalues. + i = unconverged + continue + } + ev := complex(wr[i], wi[i]) + // Use problem-specific tolerance for testing eigenvalues. + found, index := containsComplex(test.evWant, ev, evTol) + if !found { + t.Errorf("%v: unexpected eigenvalue %v", prefix, ev) + } else { + foundEV[index] = true + } + i++ + } + if unconverged == 0 { + // Check that all eigenvalues have been found. + // This simple check assumes that all eigenvalues are + // sufficiently separated from each other at least by evTol. + for i := range foundEV { + if !foundEV[i] { + t.Errorf("%v: %vth eigenvalue not found", prefix, i) + } + } + } + + if !wantz { + return + } + + // Z must be orthogonal. + if !isOrthonormal(z) { + t.Errorf("%v: Z is not orthogonal", prefix) + } + + if job == lapack.EigenvaluesAndSchur { + tz := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.Trans, 1, h, z, 0, tz) + ztz := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, z, tz, 0, ztz) + if !equalApproxGeneral(ztz, hCopy, evTol) { + t.Errorf("%v: H != Z T Z^T", prefix) + } + } + + // Restore H. + copyGeneral(h, hCopy) + // Call Dhseqr again with the identity matrix given explicitly in Q. + q := eye(n, n+extra) + impl.Dhseqr(job, lapack.OriginalEV, n, ilo, ihi, h.Data, h.Stride, wr, wi, q.Data, q.Stride, work, len(work)) + if !equalApproxGeneral(z, q, 0) { + t.Errorf("%v: Z and Q are not equal", prefix) + } +} + +var dhseqrTests = []dhseqrTest{ + { + n: 0, + ilo: 0, + ihi: -1, + }, + { + n: 1, + ilo: 0, + ihi: 0, + h: []float64{0}, + evWant: []complex128{0}, + }, + { + n: 1, + ilo: 0, + ihi: 0, + h: []float64{7.09965484086874e-1}, + evWant: []complex128{7.09965484086874e-1}, + }, + { + n: 2, + ilo: 0, + ihi: 1, + h: []float64{0, 0, 0, 0}, + evWant: []complex128{0}, + }, + { + n: 2, + ilo: 0, + ihi: 1, + h: []float64{ + 1, 0, + 0, 1, + }, + evWant: []complex128{1}, + }, + { + n: 2, + ilo: 0, + ihi: 1, + h: []float64{ + 0, -1, + 1, 0, + }, + evWant: []complex128{1i, -1i}, + }, + { + n: 2, + ilo: 0, + ihi: 1, + h: []float64{ + 6.25219991450918e-1, 8.17510791994361e-1, + 3.31218891622294e-1, 1.24103744878131e-1, + }, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + n: 4, + ilo: 1, + ihi: 2, + h: []float64{ + 1, 0, 0, 0, + 0, 6.25219991450918e-1, 8.17510791994361e-1, 0, + 0, 3.31218891622294e-1, 1.24103744878131e-1, 0, + 0, 0, 0, 2, + }, + evWant: []complex128{1, 2, 9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + n: 2, + ilo: 0, + ihi: 1, + h: []float64{ + -1.1219562276608, 6.85473513349362e-1, + -8.19951061145131e-1, 1.93728523178888e-1, + }, + evWant: []complex128{ + -4.64113852240958e-1 + 3.59580510817350e-1i, + -4.64113852240958e-1 - 3.59580510817350e-1i, + }, + }, + { + n: 5, + ilo: 0, + ihi: 4, + h: []float64{ + 9.57590178533658e-1, -5.10651295522708e-1, 9.24974510015869e-1, -1.30016306879522e-1, 2.92601986926954e-2, + -1.08084756637964, 1.77529701001213, -1.36480197632509, 2.23196371219601e-1, 1.12912853063308e-1, + 0, -8.44075612174676e-1, 1.067867614486, -2.55782915176399e-1, -2.00598563137468e-1, + 0, 0, -5.67097237165410e-1, 2.07205057427341e-1, 6.54998340743380e-1, + 0, 0, 0, -1.89441413886041e-1, -4.18125416021786e-1, + }, + evWant: []complex128{ + 2.94393309555622, + 4.97029793606701e-1 + 3.63041654992384e-1i, + 4.97029793606701e-1 - 3.63041654992384e-1i, + -1.74079119166145e-1 + 2.01570009462092e-1i, + -1.74079119166145e-1 - 2.01570009462092e-1i, + }, + }, + { + // BFW62A matrix from MatrixMarket, balanced and factorized into + // upper Hessenberg form in Octave. + // Eigenvalues computed by eig function in Octave. + // Dhseqr considers this matrix small (n <= 75). + n: 62, + ilo: 0, + ihi: 61, + tol: 1e-12, + h: []float64{ + 0.7610708, -0.71474042262732, -1.03373461417302e-17, 8.218284875369092e-18, -4.39003777724509e-18, -7.633870714681998e-18, -9.951525116511751e-18, -6.538760279193677e-18, -1.656240811786753e-18, -4.915424973452908e-18, -7.590492820502813e-18, -4.532592864746854e-18, 1.137360639223451e-18, -2.088794138001457e-18, 4.330727699351238e-18, 4.88172964159538e-18, -6.438459345602974e-18, 7.414402965763168e-18, 8.592387304092668e-19, 2.905505475188102e-18, -5.210204793418634e-18, 2.377023457149656e-18, -1.958364175388968e-18, -8.746122759061733e-20, 1.839015672758814e-18, 3.097454207400904e-18, 1.545856657360309e-18, 1.713923049773744e-21, 1.333951071201153e-18, -1.256151066318485e-18, 5.489655201308922e-19, -2.191335276195054e-18, 3.211054779957158e-18, -4.585099368362507e-19, 4.064807180521144e-18, -3.621561583390336e-18, 4.638803832189033e-19, 1.306132013406548e-18, 7.71710094138792e-19, 2.320760977517361e-18, -6.538298612520761e-19, -3.498839827985687e-18, 2.699116500378558e-18, -1.653627855476782e-18, 7.006984532830204e-19, -2.829108657299736e-18, -5.260772120044258e-18, 1.014346572590618e-18, -1.751563831849658e-18, -1.850186018112724e-19, 2.870415308417256e-18, -8.423700664162806e-19, 3.498345394735042e-19, 1.448350507022323e-18, -3.119800500343431e-18, 4.170966784863917e-18, -4.413795207992463e-19, -2.550853151356032e-18, 2.058575286932081e-18, 1.11609155804576e-18, -2.819648393130598e-18, -2.691434041700446e-19, + -0.71474042262732, 1.938395745278447, -1.179041092366627, 2.994496337305918e-17, -1.886890458028042e-17, -1.696051150581149e-17, -1.066654178739982e-17, -6.29828959344471e-18, -3.017613522337327e-18, -6.087774183044001e-18, -1.623722797471356e-17, -1.609066043798334e-17, 1.1222991062801e-17, -1.199415856132727e-17, 3.254808477409891e-17, 3.032574771313234e-17, -2.950307698970009e-17, 3.390164991463985e-17, 3.580652213399182e-17, -1.363239170451582e-17, 5.318959619432346e-19, -2.094826370136215e-17, 2.503105756608372e-17, 1.02172885473953e-17, 2.072365201436764e-17, 5.419721687057681e-17, 2.946627912791419e-17, -1.348815353957071e-17, -6.109538294302727e-18, 8.919596400140564e-19, -4.965011212156456e-18, -8.892555328798407e-18, -8.533370652960768e-18, 2.670935841220357e-17, 6.294143735482237e-17, -6.631964574578866e-17, 1.610888675267686e-17, -1.914212496162892e-17, 7.491989417296875e-17, 2.433601037912241e-17, -3.471972221532949e-17, 1.239231453972595e-18, 8.477927675716922e-17, 1.832368873558869e-17, -3.15614722379294e-17, -3.481308523858143e-17, 8.753655535825511e-17, -2.311094913977048e-17, -1.97736043621337e-17, -4.591312368362259e-18, -4.090767028097941e-17, 9.630744841167777e-17, 6.376373378245906e-17, 3.517117740157962e-18, -4.504796150838874e-17, 7.517908631343054e-17, 5.08947280115584e-17, -1.382149857389238e-17, -2.198919507523352e-18, 7.280187019637593e-18, -4.195544216643798e-17, -1.69351463438629e-16, + 0, -1.179041092366627, 1.770797890903813, 0.9251612011433773, 0.003661446613681521, -0.005110479724841567, 0.0005014497289028411, 0.00268637752732762, -0.003137790817099964, 0.0001251340392028716, 0.005236816389348038, -0.007596537304410319, -0.003216883293048434, 0.002836879838039065, 0.006069520262676079, 0.002668518333518884, 0.009131523505676264, 0.004626632495050776, 0.00181579510454105, 0.001123900611304629, 0.001677485377614088, 0.00363754391761903, -0.0007470406844762735, 0.002833257933303097, -0.0002375815340930377, -0.002849024657372476, -0.0002629124003065383, -0.0009435052243060314, -0.001501677820905836, 0.0007867717317979819, -0.003255814847476796, 0.0001229596171032013, 0.001899497807037465, 0.001586135347885108, -0.002155598204409179, -0.004095921626627291, -0.004749259183184092, -0.0003901939289968589, -0.00126397970751315, 0.001155644134671306, 0.000291837164140963, -0.0008540793573406925, 0.0005498493646965147, -0.000512747881346778, 0.001308619245804509, -0.001057469234737898, 8.364932352209563e-05, -0.0004759538737373512, 0.0002832407173157385, -2.502295625364179e-05, -0.001116422235449543, 0.0008744887175767913, -0.001577030646119032, 0.0006630051771088335, 0.0008174386956312274, 0.0005885600522543514, -0.000529324123745168, 0.0006462360717703873, -0.0005292503950906053, -0.0008409757119361148, 0.001179292096398777, -7.042243897656571e-05, + 0, 0, 0.9256234889252499, 2.188661152704918, -1.116554836905615, -0.02243454666837822, 0.001818477623431723, 0.01031345522542573, -0.02255181751639313, 0.01064389372187288, 0.02644236613167033, -0.03711341885334873, -0.01368507023909662, 0.005876976997280983, 0.04065670610764593, 0.01666467627475975, 0.04720670725274503, 0.02074371568474985, 0.02492606640786733, -0.0007477579555839802, 0.008780018993769038, 0.02228545976823896, -0.001309713708470288, 0.02515283874752867, -0.002695437114195642, -0.03058898397162627, -0.004721936411831751, -0.01112709820777293, 0.005156744291122814, 0.001266520229863774, -0.0173310067274492, 0.006032177243961209, 0.01546906824241716, 0.004122912475005991, -0.01457685983271352, -0.02472315268907353, -0.0146012575743626, 0.01613627552485761, -0.03570849487210562, 0.009634392591632741, 0.01396210133689555, -0.01085301942984549, 0.02308071799914048, -0.01534806641683973, 0.007461896675297811, 0.001678793578211992, -0.004550709803423801, -0.003543952787451961, 0.01328644094056202, 0.01722933205866279, -0.01604068924890588, 0.01061524273934986, -0.01948663408394128, 0.02488657490054273, 0.002560204204893632, -0.007049942019567433, -0.005861737475764968, 0.007063905438215945, -0.01302170441839208, -0.01452116548010346, 0.008856002952171451, 0.003352799875293177, + 0, 0, 0, -1.131565669446545, 3.458875937128813, -2.92300025604371, 0.0004977656856497978, 0.006279968970473544, 0.0775979532222543, -0.07809248806636047, -0.04323656216106807, 0.05001022064587737, 0.003864067108285046, 0.04141643188583877, -0.1284617838883834, -0.04493800214431209, -0.07456343090218126, -0.01563872481200422, -0.1339020629421785, 0.04186908269102881, -0.01575262227867954, -0.05122401589211525, -0.01356095585891559, -0.1061570482803366, 0.01819813598371521, 0.1481253462698246, 0.02550194602547843, 0.04637287461870648, -0.07444378895306285, 0.01361958240422481, 0.04035022896181466, -0.04232248915252568, -0.06075940528348658, 0.027263798939883, 0.03953143432541723, 0.06518841156851282, -0.03410646432627348, -0.1414076406563496, 0.2323217246349602, -0.03415439789233707, -0.1031903658536844, 0.06725801721048928, -0.1560521418148311, 0.1014900809050588, -0.02098771321982528, -0.03982159107235207, 0.03695361299827822, 0.01067293209294729, -0.09426629859219736, -0.1345822610538289, 0.09362330513280395, -0.05670709861587474, 0.1059566486421828, -0.1760916487632087, 0.003702764511325265, 0.07422105386227762, 0.02742567045198715, -0.03734725575689604, 0.08146131944298318, 0.09081980084945049, -0.03823012624212198, -0.02882941691361127, + 0, 0, 0, 0, -2.935177932025793, 5.590160898106907, -2.264162462726681, -0.02411424982833118, -0.1133643811701465, 0.1104837624251364, 0.05106708784671347, -0.03981053811687705, -0.02554107703230142, -0.06918772930550876, 0.1627330379332113, 0.0515325563326872, 0.0562468014393183, 0.0339155492439978, 0.1634368483167388, -0.06785129040640099, 0.04039982620620088, 0.04044710731973533, 0.0285518510842595, 0.1485759249940305, -0.0304537251951914, -0.2009213484930713, -0.05273834253818357, -0.03107458918212595, 0.09792748883617711, -0.0337039884304953, -0.06657284881035327, 0.04914327832710783, 0.07368372187446774, -0.0404082088678178, -0.04421178865717079, -0.0709487906769288, 0.048430647567918, 0.1864479159285081, -0.3079556699470428, 0.01491993158702447, 0.1333753802314968, -0.09591074161204663, 0.1894696359177905, -0.1319027537070656, 0.03081270942006841, 0.04847952392626505, -0.04816809266890478, -0.0008101823853040729, 0.1149477702272877, 0.1970244006374306, -0.1184305631819092, 0.07656633356645355, -0.140928669738484, 0.2423845347140408, -0.01430733985161339, -0.0967298709856266, -0.03791764167457073, 0.04501910433428818, -0.09499757971636948, -0.1139200858550714, 0.04630019674988028, 0.03975991363586522, + 0, 0, 0, 0, 0, -2.266072850070115, 4.40758227065786, -2.187592801167079, 0.04541318743325212, -0.0292500337966509, -0.02398663294591961, -0.0298607436249778, 0.0765927452101913, 0.03477459705241919, -0.0257224121936686, 0.001477537977391887, 0.04674868179804328, -0.07030659618878905, 0.0114383223715982, 0.04039500147294157, -0.06165490536387656, 0.03052165142437121, -0.03151343169646251, -0.04567511071619659, 0.01389646864038026, 0.03406059858329889, 0.07777247587370216, -0.05562215591676438, -0.02972304398764038, 0.04553302018172632, 0.04905358098395964, 0.02540110963535692, 0.00741827563880251, -0.02406479350578768, 0.00798549007761889, -0.02127832597347739, 0.01170084494509563, 0.002383029926628291, 0.02969332847749644, 0.07478610531483831, 0.01311741704707942, 0.004853415796376565, 0.02254889573704177, -0.0008058983249759786, -0.01674237970384834, 0.007747220993838389, 0.001741724814996781, -0.02678508693786828, 0.03009097476646124, -0.06933693587488159, -0.006894177513041368, -0.003212920179243059, 0.006244662438662574, -0.03261491350065344, 0.03016960268159134, -0.001128724172713099, 0.01002372353957473, 0.01549185843206932, -0.01638802914727083, -0.02186759059889685, 0.02607807397124053, -0.01433672343290503, + 0, 0, 0, 0, 0, 0, -2.208506791141428, 5.240066122406224, -2.182709291422287, -0.04831719550093321, -0.03858222961310988, 0.07090414091109702, 0.07618344970454043, 0.01210977758298604, -0.08775997916346844, -0.04209238321226993, -0.08158937930535407, -0.0691978468647506, -0.0718486976078294, 0.004433709126950578, -0.06338689200675134, -0.03622650750929987, -0.007019326939737634, -0.1038169299762074, -0.003664296783585897, 0.1260404715508425, 0.01449365280740196, 0.02152866502194497, -0.04579662426484265, 0.02137306190373941, 0.02841535413798802, -0.04356497460133966, -0.04882163279365745, 0.0002663261307664017, 0.04049595350038757, 0.05101584504101733, 0.02365749339968924, -0.05799471679730656, 0.1571971147245405, -0.01838060269733261, -0.05301211904637573, 0.02796283933445018, -0.0827747400120639, 0.0826539872568238, -0.004639853234141812, -0.03415100337915269, 0.02043301459221876, -0.01420687321749558, -0.07938788384250468, -0.06984431882951091, 0.01979778686221181, -0.05267713009695951, 0.05803585434476307, -0.1172598583231236, 0.01085942096095348, 0.03045318026097962, 0.03931707061762502, -0.0233260419792624, 0.02886660013519448, 0.03861548107303825, -0.03415507841094348, 0.008098200304311437, + 0, 0, 0, 0, 0, 0, 0, -2.279082737682327, 4.179202389209161, 2.014339592778223, -0.04255211810632337, 0.2215228709530191, 0.04554891291433198, -0.1776754857264893, 0.008167590360928265, -0.03396600462822136, -0.2424067171263278, -0.04982603310212124, 0.08199335145408625, -0.1620942794258422, 0.002338101300086993, -0.07021142224421691, 0.09194811379254013, 0.06141720296344315, -0.04343138202962209, -0.07659354927119244, -0.1361105641705367, 0.04365095033370017, 0.1736465880725596, -0.08740865081391179, -0.01477028109128357, -0.0188999323841316, -0.01077877669937425, -0.04294670860685663, 0.01729899060655344, 0.08739236799944389, 0.182034549192379, 0.1742753783161974, -0.2051811283512857, -0.09696129832199611, 0.08343537923840838, -0.04957366782909829, 0.1265093425463374, -0.07142635715461459, 0.03516617105992843, 0.0383997617140459, -0.04104973319490962, 0.02037353120337982, 0.04757894980296348, 0.2227131172970346, -0.07280127948445575, 0.01933448054625989, -0.05548809149836405, 0.2093056702150173, -0.07255565470500472, -0.123599084041237, -0.01537223729308192, 0.002577573950277644, -0.0733551734670323, -0.03190494711187865, -0.03967527247234395, 0.07966579792866824, + 0, 0, 0, 0, 0, 0, 0, 0, 1.903931035374501, 3.824975942360571, -1.918381148171332, -0.1657229385793016, -0.1612950026821678, 0.06698675826395525, 0.126725548868686, 0.05262161401229534, 0.1736974825351408, 0.1645930486922778, -0.008218244683807857, 0.0481824748986632, 0.1029912224929829, 0.04100531176584442, -0.05027752034197176, 0.03600703924093035, -0.03107821795488815, -0.09759422490480313, -0.04354787932553194, 0.08526304164417117, -0.05355786578034339, -0.0210819410892414, -0.1122497139926173, -0.02837719853579051, 0.02149997813969711, 0.06803627465540676, -0.0458177019216118, -0.09920218030202725, -0.1651400777956252, -0.0455277713939929, 0.003337830551949452, -0.06755253724103881, -0.07801076584667281, -0.04572759847378299, -0.02963338925321968, 0.07597836187621793, 0.01430341925034608, -0.02647305556934371, 0.0228555845523007, 0.01546873666210535, -0.03908905892485317, -0.01513876665871793, 0.0042446623219113, 0.03015387459510092, -0.02120400053387252, -0.03598829734362344, 0.004724005614895581, 0.07940598065515762, 0.01643813194117675, 0.005515400875796831, 0.03057541214871107, -0.01882273722478993, 0.001668026830005827, -0.02913002540516653, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.035489145812599, 3.958195998136282, -2.415518953202652, -0.1018252839623988, 0.09113791429521235, -0.143125166149266, -0.02308820648298807, 0.007900495974597297, 0.0891936029052371, -0.191496963455834, 0.08058392972181647, 0.05211306893716722, -0.02786699591928707, 0.007523375632267236, -0.05648289516476343, 0.06927000214275245, 0.1738730341952659, 0.04931088211870207, 0.03078035118979117, -0.09569654581650394, 0.01335103593932622, 0.06192961771791639, -0.02060940913305214, -0.05414923078827102, 0.06346107123244546, 0.02052335161999402, 0.0759441214578726, -0.1238298106880246, -0.2507681676381417, 0.3220100931816501, -0.01147160193974397, -0.1324548043218159, 0.1477869911354369, -0.2406607672124291, 0.06431201000607845, -0.01766450147458312, -0.0548904673124562, 0.05157233284634812, 0.04488059690309322, -0.06177517133954061, -0.23112183069299, 0.2080819465459902, -0.05619520043449243, 0.1795452492137158, -0.204269300276831, -0.01430899089131678, 0.08951777845217569, -0.02653873178692821, -0.04665500591425999, 0.1362175927592773, 0.1872861054389846, -0.02109220243469613, -0.07237982467321609, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.387825495222564, 5.631333594127314, 1.792900160009439, -0.1292562242890975, 0.1708356554410346, 0.04950951151168896, -0.009914110552264667, 0.1304655891154234, 0.1609748354747077, -0.08607480442007164, 0.1610516858008479, 0.006346254683211893, 0.02530117908848513, 0.2023262116291442, -0.04991598539162005, -0.3298986278194697, -0.1487726465103999, 0.04799870466505981, 0.1882318445518781, -0.1206769872912393, -0.09574976849564885, 0.04601707138105179, 0.0715991702971735, 0.0110319870997898, -0.07468722751312951, -0.06360236467100627, 0.03066807997062939, 0.1978804308092757, -0.4403223814664722, -0.09064370852004526, 0.08638179820445273, -0.1181221434581026, 0.2272147516466281, -0.1254616867610615, -0.0001501123827163629, 0.1032892317050803, -0.05195565185717236, 0.04689531008365307, 0.1236167395644631, 0.2849021718663459, -0.08639934992977449, 0.1211622058496298, -0.1593293433814323, 0.2959939998820938, -0.06193112020165896, -0.06245227757105343, -0.04632893647720479, 0.03583128970774434, -0.07735153068129821, -0.1215213155769518, 0.01117363777162431, 0.01224071348068845, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.970568498833333, 3.432745918572068, -2.179945131289983, 0.1549422681053906, 0.02156733618947362, -0.1743403098753009, 0.04884260166424702, 0.161193984588502, -0.2174611110448761, 0.05521624891494294, -0.05887323587614037, 0.1328019445063764, 0.150653877491827, -0.06531521571304157, -0.1543822385517836, -0.2043044123070031, 0.1255799677545108, 0.1951365223394271, -0.1233664137625445, -0.1191855712864921, -0.04903904444926842, 0.01721465629147372, -0.04824417949824886, -0.001809247060549745, 0.04683387964790045, 0.1406402447048902, 0.2582634735034707, -0.2591765142026595, -0.1617309876246061, 0.1040899633433518, -0.09204034179968526, 0.1659716858767694, -0.07258217699057123, 0.1238542047814545, -0.005315457299413418, -0.04888221850509963, 0.02889824196206881, 0.07250335907166307, 0.3039398127688065, -0.1278843615154275, 0.03794117583347663, -0.08815038995197073, 0.3363118210052076, -0.1106312150714128, -0.1943873573646721, -0.03270119577811206, 0.02061769160692044, -0.1147396461667833, -0.04432517129006736, -0.03624512007085111, 0.1372685073992675, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.971094433373163, 3.959369702740928, 1.887120354843997, -0.05026461165000308, -0.1399839889203879, -0.185627397808518, -0.04596340870656163, 0.008956420059669758, -0.1381531838530755, -0.06179826475610644, 0.03260995306247771, -0.0962297246933979, 0.05268169622571128, 0.2046211566675452, 0.1296024872478153, -0.05109478171641717, -0.06816393508471544, 0.06908783957203835, 0.1203829447316026, 0.01720249086925636, -0.03678250120900584, -0.09954728921499965, 0.08400427932827997, 0.09706474262764897, 0.1099658716687498, -0.02055867348093135, 0.1883358420037133, 0.09179573472650564, 0.0428976892444284, 0.06904499115717885, -0.07352106561747025, -0.01527177851177849, 0.007127245592600535, -0.03478704421611469, 0.003011747710224133, -0.02349766354391826, 0.01004232793292505, -0.1176867876164139, 0.02626695914041232, -0.06316783433824909, 0.07753431035296164, -0.05772959109292543, 0.01954926232340906, -0.06086028308842151, -0.003104675370067428, -0.004923780276110752, 0.008718170992460231, 0.05506074746847181, 0.02126352510068548, 0.02026026825978836, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.051962095286209, 4.783354200058216, -2.891753406247233, 0.1494225282409022, 0.212321254452782, -0.2121415539790813, 0.02466897820188111, 0.06733336624204075, 0.013113247694252, 0.1066584296274234, 0.08752061927245192, 0.07922179944730777, 0.2365701476731576, 0.007588213043408364, -0.05416415411776607, -0.2020969955640969, 0.06349969928685602, -0.06132787289740503, -0.03422718627771316, -0.01952915873386353, 0.0644213739673787, 0.002115696634784188, 0.06255822113535302, -0.199371510170398, -0.3230384741719209, 0.3808208705549075, 0.04071272810763353, -0.01872027971165153, 0.175074940224908, -0.3802378821499527, -0.06108501582393667, 0.06646559313315525, -0.1623676411929772, 0.03990883781119187, 0.04487902512075174, -0.1419408834211026, -0.1568779206082137, 0.1763292664552807, -0.09481989476682466, 0.1344530334023877, -0.1823509060475661, 0.01993854821358784, 0.06058475613302417, -0.08882610769003915, -0.07025689205542202, 0.1720722409076721, 0.2549799182126544, 0.01962928250874243, -0.01708969300024939, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.90166412025067, 5.683663549106058, 1.9210862649828, 0.003584348132213356, -0.04815067261613367, 0.08879292199376522, -0.005675898744132862, 0.03588291164670374, -0.1637463265891401, -0.2197707557186419, -0.08857402261688128, -0.04780383765954515, 0.007843151524149466, 0.1770531910307867, -0.01723997302062695, -0.02612834699223629, -0.00540746785723896, -0.0705490796246758, -0.04457806266766569, 0.06473113864983282, 0.006275761834464256, -0.08950765677362392, -0.1005085571651238, -0.009712772636099888, 0.1241037651167948, -0.1243232786387127, -0.2285046949724745, -0.09330919844079147, 0.05061721851550809, 0.2874490693586184, -0.03620828558028133, 0.009836453811605826, 0.06478449995192533, -0.01171663894787422, 0.006410086373602496, -0.2000108983272982, 0.03916914746487668, 0.03329096249389659, 0.07559233782463498, -0.1503685986635421, -0.006365422116363463, 0.1204026175721976, 0.125722416995956, 0.03865674591865399, -0.0001228620998850972, -0.06816612415831065, -0.03365741691324027, -0.07613321112893839, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.851490093348759, 5.320051320277479, 2.417643700741916, -0.1995237653475895, 0.07621645201183533, -0.1771833255682829, -0.01078146896182771, -0.06438976299009525, -0.2876178310323119, -0.006303714018374637, 0.356885069902641, 0.07024283797935846, 0.01881395860270091, -0.2092513663311028, 0.109718092264327, 0.02854685307727969, -0.1312757974509329, -0.1108285734230257, 0.05182740468109521, 0.07233132504659899, 0.05030539452868459, -0.06059975102985716, -0.2297336103700467, 0.5045083042485633, -0.0004325173131309776, -0.1784693418735473, 0.08394922707081144, -0.2680843663012994, 0.2671400195308918, -0.001793550843300997, -0.1325105555633781, 0.07300804882966573, -0.06897110118534086, -0.2665451791081322, -0.2630899900703882, 0.04369816343226968, -0.156643286665005, 0.1549466071737415, -0.4145076724124122, 0.07488318920361078, 0.1419270611119949, 0.1219043619914908, -0.06378625947413261, 0.08917372812331978, 0.1038377550424948, -0.08072252702869862, 0.009394294196957323, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.53934911433842, 3.08124689760215, -1.480395561682393, 0.2462776680494332, 0.01710234467080554, -0.01750922521427385, -0.08464899612469672, -0.08513339146210799, 0.1497690941692451, 0.2003583687026345, 0.229975304279735, -0.06773544482684146, -0.212962762165994, 0.100805918257745, 0.1387021642494545, 0.05756587177820099, -0.02342135307890196, 0.0413142771758164, 0.01012070144816604, 0.009465626383560421, -0.1768890665508353, -0.3114326451294799, 0.334908331740353, 0.1454336469709651, -0.1253099733433882, 0.187117750616515, -0.2556659183272817, 0.05828504568732875, -0.09923486906264152, -0.01295943412712868, 0.04742766192450461, 0.002467967102260226, -0.09546651038888934, -0.3163510329005083, 0.1861927610821425, -0.06672987133018268, 0.1437750260846377, -0.3332140898455062, 0.07302040974957998, 0.1701107028641413, -0.01658898261297759, -0.05269690883993056, 0.1563566521838276, 0.1337720630335788, 0.01368561538114742, -0.1213888256015452, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.307203302598592, 2.885610538012057, 2.250703368751336, 0.07975315762421138, 0.09370441866373114, -0.1923654024839493, -0.1853398422580131, -0.201205128559576, -0.2125042330970577, -0.1602582952706193, 0.3093660817821342, 0.01852414315637842, -0.09255035727223564, -0.1924195495982953, -0.1559361270247578, -0.02917817624329287, 0.1447862761755991, -0.04690491601291951, -0.1960912348494043, -0.2042284966615884, 0.05841637536106218, 0.02291485689303238, -0.2827174856981686, -0.2943255892311636, -0.2215807563938077, 0.1152617438267267, 0.3936419107039491, 0.02096945169954771, -0.02252698024658075, 0.07773344380322408, -0.006443114230257507, -0.03639999246001423, -0.09084547229099375, -0.0397561686169364, 0.07701104659075265, 0.005605523155556855, -0.09348135695481166, -0.03124263128081152, 0.1542717927672431, 0.175465847613986, 0.0572413755901381, -0.03334819451365621, -0.1404348146594518, -0.06481871409417514, -0.04848557273226619, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.221221516792545, 4.982054100250426, 2.183210516233156, 0.0908360095708884, -0.3019054223643021, -0.5366128211639946, -0.3196918354703204, -0.1253970246067154, -0.02164532399684936, 0.2556280160777759, 0.08182827430850881, -0.03680716913431671, 0.03290225595516987, -0.1262131502004158, -0.09569394699109128, -0.005709824337923843, 0.0821878342740492, -0.1407748396690034, 0.09719614879475127, 0.2301897192422586, 0.04576646414789445, -0.2184893983754594, -0.2792745493536102, -0.363844809151781, 0.3257684950525028, 0.4790184968677053, -0.07652744991329491, 0.06377373985106835, 0.09437678117499698, -0.06131442314952967, 0.1635757313451941, -0.2796573282080887, -0.05643997532345108, 0.1152912068418917, 0.05000521333406865, -0.1112720969259657, 0.0037148809503484, 0.1093948420140112, 0.2980235424512261, 0.1525445958488788, -0.1264302662462978, -0.2913624335279468, -0.003113019822754165, -0.1134308899923566, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.400474057942684, 3.406090954274398, 1.166212384143174, -0.2629422439993046, -0.2702044042321645, -0.06636757078595552, -0.08446798536159737, 0.1313648786119294, 0.1193846426124598, -0.07246210384479049, 0.01554276290017705, 0.07103237282021825, 0.00101034194025556, -0.02392135193032525, 0.06952201574673418, -0.007400528848880757, -0.1551607153718201, -0.1651416045393484, -0.0721038672300459, 0.1237766596982622, -0.03361356917856322, -0.2622129829975602, -0.09615056687603316, 0.06891513871408637, 0.2914707059926323, -0.1250888357080352, 0.06761344442133146, 0.0799843533260796, -0.01371538646021322, 0.07103228925121174, -0.3405952917653196, 0.09927170088586629, 0.07489758155119226, 0.08314980277563824, -0.2366684526630883, 0.04202882159469431, 0.2074629307377897, 0.133356144785867, 0.0637264741453499, 0.0308975379082297, -0.1084379405587302, 0.02099441886765496, -0.1808400593316885, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.086464017862694, 5.114621438496568, 1.930881617131408, 0.1620245301097141, 0.1255287200617495, 0.3368622640783234, -0.07183251945541429, -0.3012926287551759, -0.1116975660537743, 0.113190686135744, -0.04910476738177835, -0.0465386985036234, -0.01788084091497165, 0.06748386592535341, -0.02381369375912231, 0.1493221788544871, 0.02579249903686181, -0.2497357621560777, 0.1787366301893779, 0.1598754145183457, 0.1674188524026742, 0.2477399099122946, -0.3340328954217437, -0.2111911479084411, 0.05086712720251271, -0.1292081829605008, -0.04302551258734066, -0.04971415251604733, -0.3610534332063385, 0.1892568833309398, -0.04472498978753213, -0.2065739236157566, -0.02046944574279112, -0.1756213338724003, 0.07793636245748489, 0.001237377976353086, -0.09033779335999018, -0.160410772384528, 0.08626890948440605, 0.2182749871373348, -0.0838793833068209, 0.1464287335113856, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.723745364788649, 3.894040171351998, -1.604023474297945, 0.3564682842321129, -0.068601028463067, 0.2723514789823699, 0.1226064004710703, -0.1014104100043627, -0.01893991862852569, 0.08732928681306741, 0.1555840779063216, 0.08897747453791588, -0.05848831483689518, -0.0484062742636184, -0.01943252555803195, -0.1897987807964078, -0.04208301117450661, -0.05303588371252462, 0.1133610703860842, -0.02273323404597872, 0.2540238415394855, -0.07855533407962875, -0.06507240945437587, -0.005499676266161271, 0.06537585217565781, -0.04778965574559299, 0.03306331390850831, -0.03674334203422738, 0.03096742123062764, 0.01763537013767625, -0.02727086473016628, -0.003088168719969086, 0.0435625544938414, -0.03476926734733601, -0.03196005989505435, -0.1419829052022682, -0.06959993690169985, 0.04835942714075128, 0.06791350727690673, -0.02769231996290041, 0.02869640238709043, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.887735910703242, 2.376861553923156, -2.059488107339375, -0.1636149309402013, 0.4041266030614025, 0.3896070591189961, -0.2297552131134549, -0.01184707906318158, 0.07039303277467518, 0.09925344398529366, 0.06695981045037805, -0.008491592697259171, -0.04552531630716806, -0.2274274932314481, -0.4148399842074417, -0.04458879883972757, 0.1297363092206598, 0.006733546690957063, -0.3384389296777096, 0.1168946778492827, -0.005399720520138511, 0.3552679244548678, -0.05369187330796665, 0.07272949240516048, 0.04205583963833656, -0.003676655566636833, -0.02270378608066365, -0.2966711461982461, 0.02934135424925877, 0.02865469879716708, 0.06673230222014637, -0.1838317311908014, -0.004436962897364399, 0.1509614176408774, 0.03376168246202512, 0.0005117826261220852, 0.04498835681575293, -0.07866868520578868, -0.0334252458798712, -0.08545921183065397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.342190295905557, 4.675687708808497, -2.268183880250829, 0.2090893331762786, 0.4578770822708127, -0.01884304914244323, -0.07920602266213114, 0.05860045842795304, -0.009411964143128677, -0.009484130845488712, -0.03376087164847531, 0.01728654546382909, -0.2136063948857168, -0.1250583122943451, 0.2295451258972967, -0.06031125891810103, -0.1745972831925295, -0.3612966512867564, -0.1696417690184429, 0.2894160200659208, 0.5167644047563161, -0.08805909441951841, 0.1382094329850753, 0.05099565505493066, -0.04533499187369815, 0.05797820328595679, -0.1922533222149581, -0.1102035618550493, 0.09431486137300341, -0.001494148493882944, -0.09571326182532253, -0.0247601912770405, 0.1256667582306468, 0.2120425181347171, 0.07968400246820299, -0.09760118083265475, -0.2941239252154335, -0.07105438440442044, -0.06896304227007152, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.005975891768637, 3.352830695220589, -1.754960054860547, 0.1623709029576712, -0.01686728241632605, -0.03827200221784547, 0.1561794350456731, 0.1402911103849665, 0.03386692126036084, -0.2383508690881479, 0.08335746314476074, 0.1222986332072196, 0.1365597783993524, 0.1833332391744543, -0.1153402862359182, 0.06132285746330645, 0.103916564083423, 0.1352942358705118, 0.03751837000428822, -0.09780641373392215, 0.01802532012439729, 0.07461290579154131, -0.07340909507755823, 0.0263628669211833, 0.05634194666559207, 0.1326983203399266, -0.07526750794049826, -0.0255602869082238, -0.03079487759048528, 0.2087632832461296, -0.06368900481673745, -0.1885028988850317, -0.09938432303399658, -0.02813603601003281, -0.03116773548046878, -0.01139744596335172, -0.007527417596076127, 0.09996642926056981, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.005352340672642, 4.225811150115511, 2.31447703108509, 0.2404320758625818, -0.1026845105793418, 0.09323203523714457, -0.07188013661735847, -0.04900547068951503, -0.01143900704943617, 0.03127208944683336, -0.1422425637959582, 0.1223555755457385, 0.3629752163517811, -0.1439880981371962, -0.2053548592359871, -0.2670448469719894, -0.2854950646499647, 0.4890836381626159, 0.4252198149550604, -0.04903353665384676, 0.1440097216561384, 0.05263434485402999, -0.05654435812537717, 0.2744897997285071, -0.1869384630385859, -0.0801988284405884, 0.1415754714387316, 0.0461903176790022, 0.07292418854739299, -0.07749396692418822, -0.01197157575397448, 0.2335354584093252, 0.1565196693950396, -0.2175672539551863, -0.294898244011832, -0.04250817996099358, -0.06254226634319582, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.023207199521003, 3.695034404904957, -1.278828575213463, -0.09576460539931182, 0.01293341047109737, -0.1025508423146749, -0.09879959800395338, 0.1293868360344177, 0.02661187351571312, -0.03208813036911215, 0.102284173268301, 0.01897487699556174, -4.171607187027272e-05, -0.2343929177751728, -0.1591895912128799, -0.3479923586821921, 0.2266119442104414, 0.1369767045914879, -0.093264948471121, 0.05584513287015452, 0.1113848723095114, 0.07805629549261404, 0.385159500396428, -0.315090514425508, 0.2619076486635123, 0.2100336864909587, 0.1489157028437222, 0.01899500010404414, -0.05839538028607237, 0.1065294735286251, 0.1429581389759609, 0.1768187396519744, -0.0107077164022975, -0.07184487656799306, 0.1053566314912159, -0.2656344309369447, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.535179041441933, 2.927516278644585, 1.069440149410428, -0.1940154888240462, -0.06435827084629098, 0.03118119256124731, 0.2144814653940334, -0.1459984300204726, -0.01884883111449459, -0.0996859848375896, -0.1929505482810151, -0.142915066638186, 0.04595119246484281, 0.09181030791542119, 0.1046793740137302, -0.1631714112553374, -0.1533173188313381, -0.008178614876768846, -0.03838516939058051, -0.04628352128726964, -0.04001834958725597, -0.3727398948175817, 0.349654467351177, -0.113952499262497, -0.101339746891288, -0.1603850568927218, -0.1309942015965596, 0.07772040042527674, 0.1275463112280693, -0.04252979249843156, -0.1408252690486143, 0.05191953638235136, 0.07165159166941262, -0.1158826338243819, 0.09369294636414835, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.042176179125399, 2.455373013093171, -1.298065125007905, 0.02028671121404909, 0.003306962463612291, -0.1036220220710941, 0.0481345337164661, 0.03315299260062861, 0.04992516180471544, 0.09592872957586211, 0.03096020094331417, 0.009903127869262564, 0.01875056235671545, 0.03272160535846057, 0.01927852349784328, 0.02325854762506147, 0.04608264369572843, -0.009983430343303928, -0.01609838886434818, -0.01003965210423024, 0.02113424938210403, 0.005924265966984703, -0.05179857793569453, -0.0244630676591391, 0.01057802494355381, 0.0691716202360271, -0.02554792020429601, -0.09556309673821282, -0.01109440159507958, 0.002795432770742045, -0.03608009327148794, -0.009904492448746673, -0.004701473084555832, 0.06319402826809284, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.341422080029597, 2.641177760807674, 1.591936295305328, 0.005262995989819829, 0.05712969006064635, -0.05864522459107201, -0.06744950477663363, 0.1271503047471045, 0.2094260695099903, -0.3057531846245879, -0.04037395011724824, -0.02967432474543921, -0.09059292764118339, 0.2862509429106201, 0.1048474566793039, -0.04995247127231636, 0.1184570436074571, -0.03693842645635304, -0.08306079853122639, -0.04945597334476677, 0.2089393586111927, -0.2028924047636768, 0.01499186002602688, -0.1284371246539898, 0.04369426140288886, 0.001107629872198076, 0.002549707872053236, 0.1030701664382734, 0.002039801798898688, -0.1568979174791054, -0.1881891997896287, -0.1100556548512126, 0.06948313266853789, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.629047221760682, 3.633220763136687, 1.407673550411567, 0.0339033673171226, -0.0440877649168133, -0.1309350154964067, -0.05292438726218229, 0.1243733326688556, -0.09611554125353661, -0.01801557361391788, -0.1394535956650391, -0.04800585756898997, 0.2092817652566071, 0.1937706427881193, -0.0316202819028252, 0.08185853657036937, 0.008847184587817514, -0.05390183527194951, 0.0500718698457836, -0.06277970709250076, -0.07596180328240805, 0.04008159730086977, -0.0124923156950488, -0.01841127788787308, -0.008904456301771634, 0.02894837811492813, 0.08379155755674296, 0.038658741027786, -0.1013410184828959, -0.1363862936525638, -0.04609547972146647, -0.01057837708981668, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.387217368144026, 2.728722184696696, 1.424749145313089, -0.01601470906433309, -0.07512459959692018, -0.101188344036713, -0.003441549977747002, 0.06449001937611275, -0.03196276224536809, -0.1213336580505604, -0.009099515848609243, 0.02592480117875633, 0.1486227237292286, -0.00133150660633606, 0.001532054214242922, 0.02645122343613796, -0.01679939752946042, -0.006472860460697598, -0.1046070432475455, 0.002013525317899786, 0.007407876301716394, 0.03426066213629017, -0.07238247076893806, -0.002515176653231992, 0.04897218815805249, 0.04708726516482133, 0.01321800810118652, -0.0106268999083793, -0.03069342204089823, -0.02184119543907794, -0.02064865378574994, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.391700331330132, 3.10873390469995, -1.005261568422076, 0.07033689862768554, -0.01130536743091839, -0.2012624886845097, 0.1894945671077086, 0.07933080126112255, 0.075305885120587, 0.07607468793519609, -0.2915128232499786, -0.05359107726226209, -0.0167141837673077, -0.09941630815355153, -0.003665007998583435, -0.0299234883671778, -0.3018441136613871, 0.06749072049202193, -0.04549007934188216, -0.1272169539451481, -0.04604367173781738, -0.2292387384782596, 0.1104667012348132, 0.1037443269592589, 0.003358877836343526, -0.09748118788274351, 0.1190372958872585, 0.07594840982846023, -0.02118200682737069, 0.04505746778768557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.040421536922372, 2.090179325079248, 1.054133848546223, 0.1016135668098681, 0.1058908215655909, -0.1395436464948118, -0.0005843093291569908, 0.06576578822426617, -0.01954438761767608, 0.1340460322034086, -0.1079153000090457, 0.008558237228615952, 0.05442003661392834, -0.01948493437734833, 0.03204864462372618, 0.1899187419163797, 0.02651889944688371, 0.04143699821901681, 0.06155302263071664, 0.01361677379827648, 0.1864345911285355, -0.06057118267116334, -0.1079059175548875, -0.04926446070686546, 0.04450551753882914, -0.05461151981988153, -0.001886612406799282, 0.0366915411934175, -0.01306027401322379, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.017217105119183, 2.057885109672617, 1.717830826909398, 0.08026860099733665, -0.229664599517274, 0.08592953162584042, 0.07113555573927616, 0.1205711964241209, 0.06034607492733832, -0.1241960272046997, -0.02576402132560143, 0.100546870611732, -0.06664178017945782, 0.01551828302018928, 0.01075203286396453, 0.1648555544266941, -0.06180621835112392, 0.00904698466380283, -0.08614048879659969, 0.1377785336580386, -0.02458732719586508, -0.06527069420169623, -0.09919539357362668, -0.0371614630248139, -0.01956332576116701, -0.02610087976547117, -0.01636500296481732, 0.04290323999519369, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.73126542682124, 3.177372305562633, 1.069892746405991, -0.3373448837554265, 0.04914183280708707, 0.2222099960511715, 0.1000273467845214, 0.02495153836835336, -0.2988822213671982, 0.09070115558214502, 0.006890792477648951, -0.09774415864582336, 0.01733122536241725, -0.06539161565511441, 0.4180846670181008, -0.1348357420052125, -0.01486736897403777, -0.1707564509631871, 0.275788236310813, -0.03928409265616119, -0.1437568066337482, -0.159713937527644, -0.06441082113320754, -0.04838713636560495, 0.03935472474969938, -0.03034455737023176, 0.1502866267461562, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.9860332560182929, 2.457690638088044, 0.7585454975233088, -0.1838919851966072, -0.04382890538941454, -0.140552844264958, 0.09130507944212898, 0.001128260213507534, 0.06804648176327489, -0.03968302808799389, 0.02820745088433483, 0.03697025018803624, 0.06358690037762478, 0.08600302483044212, 0.04484515559448902, 0.08149618479019373, -0.008400294556984093, 0.1073491700579635, -0.06306885174166355, 0.02287587454966997, 0.01464609607772943, 0.03996572206258068, -0.03555777800156044, 0.01763122405260091, -0.01550330692085902, -0.021886735564678, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8854567164260388, 3.24250422074227, -0.9209580946507911, 0.06835402983935927, 0.05640958121017869, 0.1025591786485125, -0.08943334614410312, -0.06811365067010508, 0.1109007141056824, -0.02177056785348171, 0.03875431100769289, 0.2363367275176182, -0.09273940436583276, 0.1105048998268415, 0.01324218642906586, 0.1204923454912281, 0.1300264818238509, -0.07418265989085007, -0.160155156583538, -0.03336518282890372, 0.03274839794300601, -0.02988917934624772, 0.0313012656489897, 0.02783060486964485, -0.03014058011457086, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.9647900465381067, 1.776310496646176, -1.171438051631132, 0.05140489138825926, 0.1299377347834004, 0.2201816497369831, 0.02994176320228855, 0.04558225788991847, -0.02505795321566107, -0.07354754829932028, -0.07990068462027206, 0.03705853127225793, -0.1892721965231484, -0.0414104999094905, -0.04365760163266805, 0.004082206348271171, -0.01640857151771855, -0.04917783956511107, 0.05677253037720179, -0.01538028417587433, -0.1057997510635607, -0.1262079630007641, -0.09383731776836683, 0.1119867440818691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.059667715135062, 2.869444516413392, -0.768053436705612, -0.01982926570738622, -0.05898277292649027, 0.08032989813585734, 0.02430925291918696, -0.05541157112738762, 0.01387900032498306, 0.005672434099991189, 0.05365330433412881, -0.04355934883978447, -0.02337398496984892, -0.01686799971841361, 0.1422537288231567, -0.05666452598379437, -0.1164424129736735, -0.154242271156826, -0.04516863877735287, -0.01545725267339097, 0.05268933296374621, -0.01791535900714333, 0.08893369086218253, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.006637453830663, 1.684689844069783, 0.9123803878361401, 0.3537494043954367, -0.0934425457654232, 0.125950163184819, 0.0008929568569579045, -0.05163443135049815, -0.1076491218622526, -0.0453578935139585, -0.1495191189316716, 0.0001415820705124262, -0.05006551799497391, -0.128789667082152, 0.01100316880829279, 0.1037355563583926, 0.1230844198081173, -0.01355995466456035, -0.04069963982836227, -0.2068443754239467, -0.100425014495166, 0.005750041723483063, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.7847696566083294, 2.188950883712381, -0.6166420348084849, 0.05427293688357122, -0.09172120702478551, 0.01394828380275868, -0.04214925628047594, -0.2002409114863903, 0.2374547253440619, -0.07586414645695061, -0.02243126761233804, -0.09086994858618591, -0.06440645239833823, 0.02923240705539655, 0.1008328000734136, 0.0681346127852103, -0.03404818684407405, -0.03418035480719885, 0.02177303810889437, -0.08932854185081496, 0.05516897717457826, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5961213393185251, 2.487671728233433, 0.9779431494823534, -0.08808252008539449, 0.07346845556012158, 0.03791477768403206, 0.1133987101884693, -0.04867168124335965, 0.1007529815412284, 0.07012067318801543, 0.04686393658752402, -0.007976030601315085, 0.009647274715336393, 0.04388047564013912, 0.1448956828911585, 0.09593976527370232, 0.01772056425810449, -0.01920422214800561, 0.07683802973941063, -0.09812807079543846, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.990432056210743, 2.774709587520062, -0.9402258848421475, 0.01395715665576621, 0.05464370856162152, 0.05969855937401768, -0.09840756262028037, 0.1283282686407038, 0.01393286908802421, 0.0953055258318351, 0.007548139187554635, -0.05906283649224034, -0.0006153285921519075, -0.05497497151651637, -0.008769303020395835, 0.05051213594154082, 0.09095589353294919, -0.006367749500199228, -0.04367472066475442, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.9556547348028801, 2.802801220763579, -1.059088183997589, -0.06046741386547052, -0.109550403372664, 0.1079992883617651, -0.1303209308383404, 0.005273660747274722, -0.103872667440789, -0.06600322769700166, 0.05217402045757749, 0.08518450366824531, 0.09805210958705181, 0.003600709399162004, -0.05665622206864503, -0.1159528275969711, -0.04404155725184447, 0.02203210385909037, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.063540216854957, 1.744535368562572, 0.7905163601870416, 0.02656379893207305, -0.007035839152219695, 0.04085917849823771, -0.009245974538993987, 0.0249953312582957, -0.003223257434620091, 0.005723442767043741, -0.01704173254774269, -0.006825269002180425, 0.001391384124621517, 0.005712500889522121, 0.03850120618331365, 0.01404973463460888, -0.01209325063900243, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.788177934248775, 1.912200014248186, -0.7537507368298558, -0.0661262783848291, 0.05943707989564052, 0.02061524812146071, 0.02585592085441167, -0.02083197113611205, 0.003987942029650998, 0.02210665757083753, -0.02360486919891839, 0.005051227537696999, -0.0006754747654496297, 0.01013804196323632, 0.01058372156918393, -0.05401144478196152, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.8186713915600072, 1.708711700739236, 0.6332443934946002, 0.0347014944537665, -0.01300019502207845, 0.01605786260146845, -0.02637192977655575, -0.02304218343188766, 0.02296628976143508, -0.01424547177831386, -0.03972717940911979, -0.1167021874016301, 0.06633764648895558, -0.1293541599290803, 0.004742672723613311, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5157633499563469, 1.976352201317751, 0.6234503597941091, 0.01391296633390046, -0.07272602653366068, 0.0140570704220571, 0.01336752650183375, 0.05902767787103762, -0.08819062077742636, -0.02551451255772886, 0.1312142929003566, 0.01369744243814129, 0.06473360298498254, 0.01231850487143263, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6533080656351744, 1.758802439425837, 0.4318871049206415, -0.003082957500133511, -0.09814169758462682, 0.04175539354758488, 0.0235289164184994, -0.01629543995009982, -0.05231016932343414, -0.03672204848733453, 0.009389336932342413, -0.06142381433250257, -0.01010858967311151, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4817927293509213, 1.408851322535897, -0.7676055176021872, -0.04505523423060897, 0.01813562786331449, 0.03138728238085502, 0.0007373169379419269, 0.001847667170281647, -0.01640431370966648, 0.04696818974656805, -0.004393748298759055, -0.02848496648956977, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.7883892138973269, 1.746055173045302, 0.4846783430365095, -0.0003922243062844435, 0.01186867835550373, 0.01648380387048428, -0.03174672656471393, -0.03627511739090696, -0.004853687188112606, -0.06885884936290802, -0.004917829299265958, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5208363315616994, 2.037277859382022, 0.5232085356010402, 0.07175407188317283, -0.07019064479939288, -0.02385694223436976, -0.00819063541887864, 0.07192359009199149, -0.06656167507443485, -0.04927759893361527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5819314677010843, 2.130167978098713, 0.5667361680393177, -0.01053764587057425, 0.01592751856907668, -0.01111604356574088, -0.004404610058468247, 0.03850545663289814, 0.04729794670040405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6488904808178829, 1.974426530381294, -0.2820471741701222, 0.02456494941736511, 0.03486280653024869, -0.01809831529884736, 0.08408521068644187, -0.006474401058818371, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.3312307167387429, 1.235934836863219, -0.2452582871525679, 0.01878427096720662, 0.04975840840483642, 0.05672553943361373, 0.01742942062643791, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.2654365696129733, 2.208256891929066, 0.3360201888498769, 0.06660725081463706, -0.01286437627536736, -0.002070231898763094, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3639062481633207, 2.248588741393716, -0.1889980205327704, 0.05688507493685012, -0.04579504315826421, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1624755988486198, 1.590085647221482, 0.1168533202179821, 0.005293082667091636, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.173908380119132, 1.450043378319349, 0.02765965035599782, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02984095753646376, 1.759629990218614, + }, + evWant: []complex128{ + -0.01716884621227793, + -0.1844331609734137, + 0.05200651487352193, + 0.1336851109127556, + 0.2020936631953806, + 0.3566470363060668, + 0.3627207699831158, + 0.4388555152488943, + 0.4776853636435153, + 0.5598821450074998, + 0.6249350549980947, + 0.6791310689291772, + 0.985877008147705 + 0.01929363300192029i, + 0.985877008147705 - 0.01929363300192029i, + 0.9908483217835712, + 1.011990761364073, + 1.130046345264462, + 1.323698071765709, + 1.348598229483672, + 1.363190626641638 + 0.05400660173350781i, + 1.363190626641638 - 0.05400660173350781i, + 1.632832316477256, + 1.646239548684271, + 1.742738908029794, + 1.763069014878969, + 1.789601126186348, + 1.945228042429256, + 1.946373262056993, + 1.997152389795002, + 2.261322781594966, + 2.286944100979884, + 2.447712649969029, + 2.557857506923634, + 2.608379034892128, + 2.653335615965549, + 2.675270309760236, + 2.964219802766918 + 0.01767482509567778i, + 2.964219802766918 - 0.01767482509567778i, + 3.014604817775139, + 3.158289371199042, + 3.311794215710077, + 3.389894197376214, + 3.553333074879877, + 3.641274442796651, + 3.857556223000175, + 4.045817381029103, + 4.330901939363569, + 4.337313647767939, + 4.527400487637496, + 4.917229128467305, + 4.985609414964091, + 5.687686849958608, + 5.79422309012183, + 5.997813119506478, + 6.732426637899077, + 6.957609338485607, + 7.529842664573327, + 7.609108287806763, + 7.761261355516287, + 8.311941758006698, + 9.07053741884884, + 9.217944588000314, + }, + }, + { + // TOLS90 matrix from MatrixMarket, balanced and factorized into + // upper Hessenberg form in Octave. + // Eigenvalues computed by eig function in Octave. + // Dhseqr considers this matrix big (n > 75). + n: 90, + ilo: 0, + ihi: 89, + tol: 1e-12, + h: []float64{ + 0, 15.87097792952162, -0.08018778146407576, 1.923854288576926, 0.2308884192434597, 0.3394611053158814, -0.137843056509317, 0.08273319299962868, 0.09094485832017182, -0.1932984706702652, 0.1180502933247899, -0.2497600660136686, 0.05058238526630414, 0.1559958264692184, -0.1159258671363344, 0.009240657808439554, -0.07576925270220009, -0.08136563335139357, 0.03812188405626555, 0.08890970810264923, 0.03109600803532232, -0.01649595143487545, -0.03210884292964193, -0.06264912164116895, 0.02576130685189339, 0.07030469513274047, -0.03577429596420342, -0.06755584096587573, -0.01609449751643862, -0.034609250889499, -0.006417485131372289, -0.03097242984568944, 0.009636702832094541, 0.03557221482377193, 0.03197869740177413, 0.006433398911967483, -0.01135683279223704, 0.005555822920782794, 0.005082647305173025, 0.009385366191684759, 0.008128896608623586, -0.02296712755081439, -0.003777413820214802, 0.005123235117691023, -0.001849213959133196, -0.02340110883416673, 0.03713005378535863, 0.001732375396842803, -0.002750608017025007, -0.008067437745595896, 0.007330916864526544, -0.002616316716217023, -0.006297132815168344, -0.005559964495164493, -0.009996463242082429, 0.005115046921377182, 0.001491016327339477, -0.000957347151456719, 0.006745577006930539, -0.004544035710017501, -0.004411949528299773, -0.006799740101884459, 0.0005344071027975155, 0.0004690847920096184, -0.004718575501368472, -0.002540214169642457, 0.00357159293854215, -0.003314789809413553, -0.003402372051470523, 0.0006527769815598059, -0.002716170091878954, -0.001540321517093821, 0.001756589868588563, -0.001379260966541515, 2.681259838616508e-05, -0.004307760317855304, -0.001109087032949234, -0.0001659937040461595, -0.0002235436314482387, -0.00119569899683125, 0.0005623327348935116, -0.0006320070189143994, 0.001043573892153891, -0.0008750118344396425, 0.0005348270042878935, 0.0008273143853381587, -0.0006622544067919339, -0.0008492128694001077, -0.0007986665099336194, -0.0009015882205421384, + -12.61872336344661, -0.7232497785660141, 7.609159226285555, 0.3870426982100038, 5.924856640096555, 0.6102682886559223, -0.1693535996869482, -1.919018099340693, -0.2138609560373459, 0.8042623392399718, 0.8674124147325857, 1.331963567449537, -1.782290696158441, -0.8346237530841022, -1.552156412468403, -0.6151273144224881, -0.7391936693539152, 0.9311934770410842, 0.6166024938842418, -1.54644771695033, -1.776481997993627, -0.934164018650274, 1.955449870926906, -2.082936149197492, -0.222464503236819, 0.1331142802435182, -0.7633944660137448, -0.8176194198678164, 0.2746498608375185, -0.1119720547510174, -0.3046093297897633, 0.093708523663493, -0.1254384253653835, -0.3826156782538976, 0.9720657328245648, 0.4435611080311743, -0.002705519800257373, 0.4068502033494004, 0.8228026417475635, 1.898141183528268, -2.19419418629088, -2.26250233043472, 1.169369389476936, -2.320900757809857, 1.963641620262248, -0.9292511308866737, 1.20566753941007, -3.909359844030778, -1.745106869690986, -0.1674293744185332, 1.824325508201922, -0.611032518780414, -0.8172751651339325, -0.379367811436249, -1.118039132172379, -2.1156899896767, 0.6317312221182597, 1.675601832555065, -0.1958681401344015, 3.202902011360347, 0.2083144054490269, 1.651454396883902, -1.879950006164014, 1.114962429097019, -3.728120039552464, 2.115800549383747, 1.993994934513307, 1.036800346894651, 2.843012388647532, 2.665528597975866, -0.08443708961414848, -1.658265513220315, 2.825691629937317, 1.163068598831327, 1.032612155987785, -0.3464359914213002, -0.7374155713124153, -0.009825846309687306, -1.878310233217088, 1.038183449333641, 0.8683442149070821, 0.2096953654957043, 1.097533010763627, -1.40566207568186, 1.539718090250373, -0.3057191046244732, 0.9596910019319377, 0.4410690813618931, -0.01734977865916698, -0.7028527205475527, + 0, -21.14096588949502, -11.77071611766029, 91.38817973790069, 24.01994594814793, 7.139034668143506, -7.77684013545977, 11.8189112903465, 4.350214240774185, -13.41161300072837, 0.8429515510200203, -0.1960485971162483, -1.892239827255886, -2.481138864200454, -4.993335484535367, -1.462743953230215, -1.649744938703439, -3.306123402194819, 0.6299802354863298, 0.006312776908129815, 0.7029217322720615, 0.1969979096896496, 0.6484394805159026, 0.4612739081461551, 1.218623710778157, 1.937283920899595, -4.274393204137636, -1.417028232311232, 1.761975679896983, -1.207846701077455, -2.947009378633724, -1.111456928119195, 2.001483835367479, -0.3273985739357373, 1.27142153234808, 2.470518283440578, -0.497592748085565, -1.01776837453108, 0.1736631347448449, 0.2170284795451557, -1.102797734602059, -0.8983239378242805, 0.8376082516437703, -1.015605628895311, 1.888662040615523, -1.813946159105028, 3.745871277192266, -1.691058864813766, 0.5544744103796291, -0.95962769863539, 1.495178118153111, 0.1369976805376806, -3.134133785033962, -1.134766199832475, -2.142472928604951, 0.4360359463007911, 1.080773790484485, 0.9136687613609559, 1.421868877932455, -0.4939788885367615, 0.01579620756278606, -0.4041188740514539, -0.3370957888349073, 0.4032844546374829, -1.281049156842126, 1.334866305935072, -0.4288161314791398, -0.4076960827986253, 0.8975402184760907, 0.008483305617251051, -0.02300021991545602, -0.4779200297205075, 0.8640559542693361, 0.6740166979504152, 1.271173988705413, -0.125268363712917, -0.02783785192682384, -0.7952831181002197, -0.1834134462936435, -0.3033906534395994, -0.1842466257842833, 0.3294577790658342, 0.4265858101126394, -1.050551059782219, 0.5557053448408287, -0.07549099980078718, 0.4485085972651929, 0.604772326452039, 0.02668915155289681, -0.35958437456048, + 0, 0, -71.67241414253803, -12.6925239065222, -58.51026881403752, -9.923972440030834, -18.08337737101079, 23.73437311293314, 10.42624729020936, -7.39628437264571, 6.93334510855383, -16.20186028661058, 19.09098951338167, 7.231158491837533, 25.86051183536314, 4.692849852643402, 13.50562601772541, -23.8959783279092, 10.46795736800158, 26.42552249365325, 25.55147405605497, 30.98455252329583, -38.26426057779729, 41.72459242758727, 14.01187370572939, -9.227025126956866, 17.69341876066779, 17.7058942448478, -13.2182156659012, 3.273277215940703, 7.82096407961303, -6.540134857551783, 5.302726399754003, 21.6168229759513, -35.45773268931614, -39.5771763658349, 16.91907564224343, 16.55810765769962, 10.84170890675409, 4.539182245882841, 5.966139065523301, 10.43624249585104, -6.306944364017387, 25.11309378553394, -23.98463112536712, -3.253554932408899, -26.20327820737005, 34.95346757431584, -22.06848426488626, 0.3787905650745691, 12.79793983153946, -15.15662916810503, 30.10820985389998, 17.18239253486946, 26.44238280127885, -17.53916820777098, -21.59984930800645, -20.89069843604591, -10.62614963929214, -4.16861219455282, -15.8281632392319, -15.45413424684084, 7.28126264287692, -17.30978445489622, 25.83878482866339, -18.20409699627451, 1.341279973912325, 6.060701390094514, -0.9930555858249585, -0.4770067839263625, -8.050723322366107, 15.00633993006825, -10.12301020599794, -15.02267685265745, -28.87546819977945, -4.887384695963816, 3.812851132430744, 19.10682316350844, 7.478580657962908, -7.486104775378393, 8.24517564743228, -7.51905558097683, -6.644004835040043, 16.04319982377311, -12.24015636297471, -0.4152718733052826, -15.37260980717165, -14.36579932723399, -1.30513875795791, 5.356894027365968, + 0, 0, 0, 88.73441744471468, -9.667604704172753, -22.84943872004879, 5.044285909895449, -2.76004875036668, 0.3050715430090338, 2.281066203460998, -3.081685045157843, 5.563173468318147, 1.196920824152984, 0.7508125732458136, 3.261490552895722, -0.1915889730517104, 2.178042983750966, -5.719722606964433, -0.808717831824074, 3.567750315780947, 4.405620166473985, 8.068713509838501, -3.974147763943233, 4.024558504483837, 1.343369353638846, -1.554164148226279, 1.397410693322202, 1.549071510171349, -0.6861822032616559, -0.03144220974090741, -1.503375319686877, -1.213563509509453, 1.485658175240746, 1.102628808733887, -2.836353822887371, -2.651198571403894, 1.944770277514162, 1.800720538730825, 2.925044559436877, 2.489394773406274, -3.99962439548742, -1.365153890760246, 1.729186611640552, 0.90732580595284, 0.02970965138899272, -9.802670261550649, -3.377885239589956, 3.311681996737421, -2.102890043550365, -2.752571666784161, 7.725320034635699, -0.8099349955071451, 0.5680350525364315, 2.461090824551101, 1.671002962178604, -4.651796111745832, -3.019627268376409, -1.456848301794733, 0.6765376227892419, -2.208873565004413, -2.755468168868538, -2.723938546851782, 1.844529360647301, -1.962817053181678, 2.77164872022158, -0.6312645341808628, 0.9959732581947718, -0.01141276076056162, -1.047045912982139, 0.9659655272370172, -1.069371622104567, -0.564318267120407, -0.9606489624515147, -0.3731646049074267, -0.4361324066751411, -1.228953081985217, 2.112718903093324, 3.774673462225595, 2.038526286226191, -2.037134562294253, -0.6272498215703869, -0.9130826952549337, -0.5356753186936942, 1.739354952287502, -2.607676632661601, 1.167128690015535, -3.643945638175477, -2.247788469333459, 0.4447578257714688, 0.8814188227164721, + 0, 0, 0, 0, 35.22951028609684, -22.61691132174376, 97.10536643650998, -3.714742139430975, 10.06500336745724, -16.35785983037913, 8.78437693523264, 1.985132974393485, -1.609800726068471, 10.55631691645605, 9.224290477011534, 4.722637143581605, 4.125150731568718, -5.396683914299057, 6.364591301561367, 8.24526687743292, 4.911724566872895, 6.542687463438916, -9.348997687795265, 14.18011100433374, 5.720905431367072, -1.582673805208176, 3.789638114574857, 6.440267872588953, -4.901278147004489, 0.421175984045115, 3.797008789173352, 0.2579925025997163, -1.093437933585557, -1.126991905684307, -4.4057666178694, -6.4297958780832, 4.918610437583255, 4.893900733343752, 7.627382484342153, 6.943539836193181, -10.22700285291435, -5.21717606135954, 5.635670539663245, -0.61979670671329, 1.025327494294112, -29.98298952616265, -10.87852244502099, 6.724183768213139, -5.415447368170939, -9.131548344141406, 25.08685243604318, -0.5163094225162969, 5.436141320006754, 5.254969244047728, 5.189340308692745, -14.05566775803058, -3.790558233978546, -2.867451571946585, -2.265074057881479, -13.27098968249704, -6.419573660857155, -2.44809433119093, 5.262803237338727, -6.396156300345669, 12.9332727436708, -2.828158861124294, 6.494893307712784, -4.900718840392307, -12.17623988734707, 2.132680032576169, -4.239391092443586, -4.723934051879516, -6.984654958110764, -2.787156581230434, 4.744573069448925, -7.311973630803457, 14.86842763617212, 11.70461213488476, 10.92665646005423, -8.812367256417245, -1.725823238463376, -0.599065820210566, -2.268141253505947, 2.588966312561057, -7.560432899806777, 4.711500915754516, -11.63409451724343, -3.784667325499409, 0.9845255581998278, 2.917504056968942, + 0, 0, 0, 0, 0, -116.0630192746665, 5.887300060633501, -55.36418027265255, -2.470006763999332, 13.03531089357281, 0.1172864444746298, 2.336301687054243, 4.34928920056458, 9.106206444726951, -0.8318917014102636, 2.753642271658936, -4.563539972366368, 5.616802475300401, -0.4836767449615566, -6.113950704235537, -7.384788928153566, -6.850835642415652, 4.436028327150289, -4.972441466665182, -5.074617872073305, 2.249115729647296, -1.27635805087233, -1.815933433231301, 2.59978300016936, -0.5676863289525813, 1.704036354039219, 1.966949252223741, -2.742379099660473, -5.759265103182953, 6.226978264278319, 6.392620681348136, -0.2885756166938758, -0.2986490248004344, 5.021918870709579, 7.495865991102269, -15.19741578062141, -10.52747112766237, 9.21669911214595, -12.00882240945578, 9.449065100345695, -22.03792558203701, -5.042603937347324, -5.034444931509023, 3.887859743790752, -4.92423649287837, 15.14459404442214, 4.709447859501895, -10.68403398232012, 2.785222602001631, -3.955139727592788, -10.90921547327889, -3.836568621330626, 5.465232651370832, 4.568243480001632, -2.511523602459496, -0.9621054122709324, -0.6044291916789493, 6.467023010391031, 2.662510020284552, -3.203951737691022, 7.315143747841559, 0.2986491524564562, 0.04345879316587933, -0.3120127984400304, 4.715818739144954, -0.3713148742857386, -7.592585985711748, 1.251675665881772, 5.563320889185214, 8.934186230540199, -1.034540314919822, 1.499762588438347, 3.648805772901489, 1.867765342642769, -3.856064394520797, -4.257325323439929, 0.9065282321682452, 0.9958862297862445, -2.214139637816267, -1.516486450508368, 2.326410461051852, -3.227358821350026, -0.4749483061012461, 2.179821376672413, 0.1114550663371978, + 0, 0, 0, 0, 0, 0, 53.90645393584658, -20.01147603384238, 68.25945706992877, -2.001388852130252, -0.6303875033830074, 7.681723436887633, -2.793396522752484, -3.849646005163192, 7.47502807954784, -2.524396627852584, -1.112160063163965, -0.4457759133018216, -5.425351770541893, -7.213840725579055, -0.6234582007920942, -0.3045445372121888, -1.838748235944519, -3.05429610717454, -5.218058811930899, -0.3089178689448414, -0.07503528649101057, 0.1630591210001797, 2.58742687436071, 0.8589336965724809, 0.3026886986297957, 0.0616540381895139, -1.743768523575526, 2.75507802571559, -2.587808530052548, -1.25512695563184, 3.800814529165174, 3.132593897658502, 9.751967320860086, 12.09676139406092, -18.96514427687867, -10.33529268364038, 9.423861340153673, -8.118494925333524, 6.455831882458702, -13.89851030432216, -5.253096745704963, 1.482474561585576, -0.7990859267629726, -0.1919859569182034, 14.99486076662231, 0.8403897566592956, -9.631758825484061, 7.546859017133015, 1.761650219269993, -14.8002789790671, -12.03184495751378, 1.278761976352118, -1.043958743156598, -6.425946785515577, -5.130193263963021, -8.943747092721882, 6.884559516868113, 0.02054820847870697, 1.622114564484586, 8.27790706580309, -0.4201537658318323, 6.949197674374433, 6.109317458173291, 7.745771202714325, -4.383777284917787, -5.023236465266974, 3.152075902042714, 1.185720299074054, -2.570558625807648, -2.575936989524232, 0.7822876332433506, 11.50350236141349, 2.541100031822599, -6.266519860892538, 5.220802309799155, -2.7113287362323, -0.0782755292810481, -1.306667606835813, 0.9121698644456847, 0.07469182002148761, -4.645428950155893, -1.074584465997386, 0.6604539390114011, -0.1666067442015038, + 0, 0, 0, 0, 0, 0, 0, -85.98674061062438, 1.162623410299333, -104.1491535027204, 7.969764337327856, -6.932488858320204, -6.767747448265724, -7.331077471298601, -1.288550484452708, -5.088257375240862, 2.763979746955463, 2.528081478578727, -2.575430737963284, -6.921068854524492, -4.018385524701809, -1.579042698955484, -0.7534247768022768, -5.324588385519177, -4.241013196984152, -2.113061191594958, 1.678130424336868, -0.2888364599120758, -2.575220703265352, 3.435198525295604, 4.161688539607654, 4.731385858073858, -4.276207990137705, -6.32017796521583, 6.190217309330307, 4.183836067935781, 1.849953972589691, 2.606132984461453, 10.00029158683688, 12.0615055907306, -22.12319815923896, -13.94593423436807, 13.56355336723619, -14.73390655737362, 8.504539865599947, -39.98652916386596, -13.54021158220439, -0.05790828602008728, 3.121363813023208, -10.26329339936837, 29.60358127644879, 5.640693459787456, -6.225202166414575, 8.49263970223689, 1.111516509579903, -18.45973622662288, -10.78955835552373, 3.866537233352727, 8.114971974287389, -7.188761733179074, -3.287441529549332, 5.156604610165261, 10.80793451072269, -1.239076505166311, 4.628996155335966, 5.792922582124358, 2.03417264625456, -4.707373530409962, -9.448778191150614, 6.51155292021117, -3.19382039380789, -7.177226661410774, -6.832018005921634, 3.442244659675745, 10.77505720982952, -1.609927625466521, 4.733127783256045, 7.444153456927645, 6.065657625755138, -7.768628874694797, -8.73223505289636, 1.578394964028069, -0.8054671616028769, 0.5972200288905033, -8.68273678581243, 5.453422469912097, -8.723308411603904, -3.656294698422601, 3.713788968458369, 2.245164999387903, + 0, 0, 0, 0, 0, 0, 0, 0, 82.30322830941419, -13.16495817094656, -40.37221874531644, -7.156146024985344, 6.407626256610186, -3.070719411573423, -1.248781274591569, -0.09188094231426196, -0.14791454863577, 10.46460085885971, 2.511645220965021, -7.306021862635426, -8.821036218813667, -11.27778024004047, 8.299073644975818, -2.786388825153335, -1.404614079695401, 1.895971545970186, -2.374603998420206, -1.895908635885413, 0.4177297064772442, 0.3179694660965782, 2.847483353627781, 2.28314647154709, -4.251315293192437, -7.351627496507233, 8.45101495879304, 6.656324309408108, 0.05811442721379975, 0.352210596662256, 7.158242198776926, 9.604014490962273, -19.05916411574244, -13.48053537548751, 11.11056501341958, -13.44816425524262, 13.03794734916214, -23.56660744892662, -3.179691183297922, -4.31381647439135, 9.383878541906311, -8.241547161602726, 15.17745487655014, 10.50533207581469, -12.3496460656361, 8.196225745083185, -0.03575510420729201, -7.579890340619093, -0.7363093925300244, 8.756813214260761, 11.93727799717407, 0.3635376217139206, 0.4603703423631014, 5.507079480435261, 9.421116342576116, 5.29496740123859, -3.941393949093798, 8.749586295075376, -3.842933870553052, -3.434396636354037, 0.7496949834113942, 5.050293641980197, -2.449146742066287, -0.1213669699610963, -2.640456287197764, 5.565782021620873, 8.693308402974377, 2.307206522787629, -4.138693274221668, -6.245432457269187, 0.202505673386626, -6.566863879917412, -11.74280124769381, 5.642870396242308, -0.659648816152216, -1.690565064770402, -5.93672734719091, 4.422450101243651, -0.7271854445212377, 0.7895970235545322, 3.96205972546395, 0.3762898199575608, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 52.18436402228633, -1.17071077050581, -78.74014811145696, -2.436421299700726, -6.158177326953696, -12.84920002328411, -13.40821294858424, -5.273362519386561, -6.872625202393317, -7.634332724591617, 1.036587235099262, 6.207608782298316, 3.391369867457635, -7.524695482267034, -4.223994548482144, 1.005090702038289, -2.66480555032824, 4.646608362152693, 2.243089562166944, -3.34529856305617, 5.740218757228164, 2.12882450346135, 2.939738798956252, -0.03146392010752049, 3.38958622345852, -0.2577487623574973, -3.051389295629871, -0.697296699287094, 0.6189380855708414, -2.814647546822989, -5.010744640386618, 10.8659101121065, 7.550151766381041, -5.138398331003744, 5.941882913285983, -6.24020929364107, 6.192495406215602, -0.1393925926206985, 3.522667688918142, -0.4029078058202559, -1.086721958116794, -9.106949733745292, 1.080723194973581, 12.43512076939469, -1.559991201757955, 2.834826471699229, 10.91592518979253, 10.14280540179991, -0.4312954736361566, 0.1698301469389144, 5.224021770744672, 1.399356722825569, 3.824858056231203, 1.187505521773207, -1.25027597821317, 3.154667536052018, -8.777523547457038, 1.485334722226234, -4.846848932499968, -5.331464798306308, -2.935610863284922, 2.146754442305868, 3.916678542801113, -5.097848412152915, -1.684939990487824, 2.003333243800943, -2.22594720641393, 4.656849950049951, -5.745353345757918, 0.6044487182322886, 1.596087705639433, -5.155786671036686, 3.16998966590795, -2.175693288642318, 2.801445787424951, -3.130319162400883, 2.85020826323644, 0.1640583474231081, -0.214298568273029, -0.1740891639628268, 1.273833756482144, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70.09446168050651, -11.26895002135244, -48.54705040053749, 4.118431277865748, 10.84591029041512, -0.6748674802174282, -3.045053711060402, 2.014682374966249, 2.306026198573233, -1.350656230483865, -2.329953831978132, -9.588390292055525, 3.269359204435148, 9.980505686658566, 1.082807022265471, 6.273567735324175, -5.719240792932494, -2.503890374538294, 5.253867760378612, -7.368019321193995, -5.092315009287605, -5.608336565960785, 7.85433697392239, 13.05231727795986, -10.24473853042492, -6.497760170002005, 0.7720864098024787, -0.9464942766836045, -5.75736090996403, -6.449685187648799, 14.67091581503414, 7.752227657052853, -8.313707502058552, 7.618733560061307, -10.26315766622777, 49.66932226344804, 9.396595252505557, 4.646105097651882, -1.000511699400161, 17.50139800181348, -24.58127340300144, -11.80138366202307, -5.227433380710831, -10.13287460063552, -3.337359409768342, 12.99698337996271, 3.068027046277927, -1.951738372661316, -7.666145241687218, 6.9088789851311, 0.2649618535564444, -15.99488743024383, -0.7701348417963114, 1.505671187381852, -5.323669521268157, 0.5338896728895715, -6.748253910318381, 14.64352852958436, 23.40931931143844, 4.375219426823375, -1.811045463489342, 4.773508381777763, 10.818209698722, -5.294039411650939, -18.70264738152938, -4.975296365083204, -2.600819681501243, 3.308632477674194, -6.40160106179316, 2.538884420020582, 18.76233248591015, -4.114557081532237, 0.5111695455673799, -4.794755383844113, 16.67507540569322, -6.886183084140394, 7.719834159396155, 4.933410312388084, -6.089459478292116, -3.503666218213469, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66.6637247212457, -0.5663386193537134, 86.66019711942882, -15.20175735117943, 4.314620867702222, -19.41396340483079, -15.38151259581058, -4.248235572512307, -2.600133694847515, 4.086685275316547, 6.543863987851957, -3.556770106796698, -8.862927415679744, 0.5940920961482564, 0.2891990484420937, 1.2985992187588, 0.6463973107839561, -0.1897507095552844, 4.999681085896536, -0.6439357872831064, 2.066718921953054, -0.1085645365015185, 0.1070768393458224, 3.026109517007545, 1.481907260983705, 0.1499047456480452, 0.9514718442208902, 3.068093096347056, 2.714461903454389, -3.99786212133959, -1.490015954498088, 3.704196600400429, -3.084024872438948, 1.383157275632034, -16.26579452857151, -7.173167896042849, 2.321998416940817, 2.275237906163105, -6.307537188875993, 6.209730858735038, 4.018421456135293, 0.9621119492629135, 1.945276954758256, 0.4126375340548999, -3.009694590378986, -2.629957817671035, 1.384131483830782, 5.687116562672569, 1.212032906758187, 0.4457093459378468, 5.044411045879187, 2.653766535846431, 0.2411195122877111, -1.543285991977046, 0.8571968890482712, -2.832787648800616, -6.089862603942122, -4.243058413925725, -0.2712347348375778, -0.7571525905438323, -0.1391757644986091, -3.374311051582727, 0.7719310852064701, 3.726864797116653, -0.7589171772472043, 1.688124623456514, -0.06145796388713081, 2.035112211335303, -1.275417314028715, -6.847693700987137, -1.324382865895411, 1.215308587453588, 3.389389718245654, -4.298340356096036, 3.252289347232091, -3.54897896652072, -2.583331482537173, 1.391546454632447, 1.526078993538325, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76.15771433854052, -11.99852507214444, 27.62893281995865, -8.886170208363085, -9.022500867915554, -6.483908690769347, -6.478797015907496, 5.436632960504888, 10.11648415512398, 11.05236551506778, -6.555078182021158, 0.9926522830872675, 7.012674375514302, -3.958653565895998, 11.89784449953233, 4.997490823792532, -11.71308595491765, 7.473858613545575, 4.526049765812032, 2.627760851429408, -3.543040309678986, -0.6545512958150839, -1.975237359166213, -9.752416598897163, 0.1746629230980583, 3.764199942242819, -3.523765142660245, -6.526579460908251, 12.86892013415631, 9.636987335709112, -7.71437307352219, 9.374585571980461, -10.09888573625552, 2.627000532523575, -14.35239184493451, 17.7934680232572, 12.24617038938174, -6.2027891597684, -2.117824121844527, 2.304085371600412, 14.52899092304767, -1.375604453625678, 9.300885546968621, 18.94646416924206, 20.59266172433305, 2.716897787405002, 14.41056423737162, 4.669781485892746, 2.929418504934519, 8.242335741048715, 5.40876543323668, 2.002902940983452, 5.6098816375921, -14.20093255834947, 3.901682718637671, -7.337643713401271, -8.218284944457553, 3.072811403558771, -2.292798328406445, 10.69584853135417, -9.650335290149327, -4.330515729410567, 0.5204595970152146, -1.624267060418924, 8.140164084847148, -15.7637122001724, 2.453007028561554, -4.499820926337408, -18.34001755668463, 9.796120126023718, -6.012926560200856, 4.434295362280665, -9.67082400790736, 10.4548835691208, -1.769628011664158, 0.4768710210096864, 0.3854758620192356, 3.320903327037195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43.98223406015142, -5.032665049120959, 63.89171973078309, -17.03607126733364, -11.37762317554949, -1.901161248292645, -0.8260131144255914, 12.01428472457645, 5.352225349608783, -0.3266225326728286, -15.64216660863595, 0.3825939195623905, -1.494103371722206, -5.375511858816146, -1.862194375089014, 5.63824583310378, 5.360101148587418, -5.696506781095095, -2.080871954585809, -0.7829130324044875, 6.783149785809925, -0.3661710817347401, 2.462769544154133, -0.8126745345164752, -2.507928414100153, -0.7896746658950899, -0.4314818025686951, 3.924872737975131, 3.720963560907183, -0.9854313103876566, 0.5600582865792041, -1.688187106864158, 17.44248034254651, 7.56859337644358, -2.163244623250694, -0.7929207133815144, 6.398869750639878, -6.091736851159077, -4.728849132755795, -2.854085872325754, -4.826855364681831, -3.30106640664588, 0.2719713238103212, 0.2298412502409825, -0.853005758672194, -3.263371003058645, -1.287397261994707, 0.6221723886323094, -3.488369011339807, -1.414828169574871, 0.07717807180754992, -2.684195273815242, 0.2613139899890946, -4.206641018599038, 2.982830136882203, 6.657239919946693, -2.518089625188537, -0.4552654704803235, 2.298800483965624, 2.494983397734763, -1.284395189604125, -4.238400338443188, -0.6366063645353051, -3.325393279736908, -1.764225755959617, -1.813359309843393, -0.2947559613727277, 6.320461175365693, -1.048130219904732, 1.69129533904847, -2.336845279584976, 5.580341689077066, -4.541654669729592, 3.817079261725959, 1.972729191142582, -1.594128333779149, -1.535735104483785, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59.46738063214526, -16.09510211169977, 75.92651854229776, -6.959588443327999, -2.809913552100682, -9.062449485347019, 2.929935910954824, -6.516445771274741, 5.618312537880061, 9.794206647467506, 10.44206520884292, 1.504143210681085, -1.194672878944117, -1.206412082832246, -1.592792412630419, -0.8713955483970806, -0.4430245993565414, 2.114713938914445, -0.3808503381452496, -0.3361054648766276, 1.810321218052103, 0.06324533489118153, -3.207697984086771, -1.888840647774234, -6.337450722394116, -7.051669943095036, 10.24163394168822, 4.591682020148506, -5.157620119910969, 1.350695165969617, 0.7792033958582947, -0.8363399401868995, 0.8398917333791918, -5.122390663285614, -0.589942253467838, 0.1140765360111759, -8.180634436361872, 0.782695084020231, -0.4316505953196415, -4.677604739058501, -3.371394391221965, 6.790122165196175, 5.900302157317789, -1.138518787666086, -2.696524630738898, 13.39780057844131, 4.194434073284752, 5.363099243116376, 4.110197934071277, -2.070985188896846, -1.165572235840805, -1.241624822428416, -7.086628398680193, -7.575672638929711, -1.486981977191632, -2.042873730189658, 5.495814100326541, 1.841533297055732, -6.033390059069625, 1.625951790058254, 5.031090908642416, -5.215840389266634, 1.850639244782789, 2.092351976481545, -1.480623358531872, 5.911569449582607, -1.869423525406329, -0.8096475091606794, -1.000819809262052, 1.841395444723725, 1.081170909224551, 2.284559473058704, -0.6250480378852277, -1.559903447023968, -1.853970655342937, 1.547744137147876, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96.3647680893793, 1.199043513223026, 17.60420974833172, -13.06773608748545, -13.86009320666351, 0.1767817722626665, -0.5124263274350351, -16.26448243634644, -7.14143348503811, -14.24141019732697, 2.26049840163611, -0.5232284569456099, -1.920838853591793, 4.846489507057715, 3.042770898035555, 1.294385928313621, 3.262620434881149, -2.270944593759149, -1.408453286683619, 4.497236785795636, 5.977793107223872, 0.1340518117987963, -0.6905643209085197, 4.805322551598841, 6.502377969783907, -10.47261184903601, -4.131639902258459, 5.974051724377973, -4.360075843426007, 4.73500504926485, -9.718847270507625, -2.119804026495935, -5.657677043459689, -2.856025773969369, 1.756942740498222, 1.717927994018707, 2.836097818243513, -4.425043948906356, 4.283315817519375, -2.059940986323201, -6.307828936261935, -11.44715911847551, 0.3006681108636347, -5.507293839810647, 1.536345859738123, -2.26452399462477, -4.716331237978856, -1.255956886329029, 0.7042206945918659, -2.667007107490436, 6.672978852425663, 3.262254896828355, 5.937155133580987, 1.948386865395799, 4.552963709305849, 1.788332867713114, -10.63067323751173, 5.26892419774046, 3.167593513248493, 1.170780576616151, 1.205868492329382, -0.3777966262231325, 12.93219596919667, -1.629499482312095, 5.270759888996531, 6.75414771239083, -5.680238880370791, 1.763910811059415, 0.2558270515454605, 2.632569608785784, -0.6147023174800583, -1.873856188681823, -1.734814810908174, 0.7079064341945942, -0.9150650771583158, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23.02913191459475, -22.68355714527637, -71.45920181332552, -7.335069133951983, 6.88897969406801, 14.22303129604287, -5.713578960023669, 15.25375807101405, 7.31607076966181, -22.97972556461536, 1.773867719140929, -10.21928707943674, 1.424895097068828, -6.202938372907802, -3.564833182189926, 2.874044501828823, 8.685525653278034, -6.81311188053174, 2.764368126088952, -1.051923578466305, -0.9476817080611526, 1.161644143534287, 0.8923143965210864, -1.986614015969402, -4.795152281813358, -4.571219954943216, 1.206804637019736, 1.189134886949103, -3.389219761826265, -1.403036249676163, 0.1159085048840897, 0.8722638450337192, 0.6308893671254719, 4.417698737007038, -3.617011218574619, -1.59415231672244, -0.4094009736543018, -4.615708070111476, -5.105781556006933, 7.165268502604309, -10.27990343205298, -2.449496798762735, 1.740806437896727, -1.676699767804021, 0.4392602027266447, -2.822535542169061, -7.693191637559086, -0.9799315922761813, -5.464041140223222, 1.890629379194414, -2.234640399497272, -0.9456666715392037, 0.997606186316458, -3.110634577331055, 1.532640947608809, -6.76298600927938, 1.926980466393365, -0.3975761625796731, -0.1074936397088645, 1.428032551521818, -0.2307372170405339, 10.50672618228523, -1.043253387292014, 7.351732297170027, 4.654268870350594, -10.97263974298692, 6.22881607660602, 5.315813011291942, 1.976388766185981, -1.590375718577871, -1.91368371633717, -4.647761418706064, -1.035563975020433, 0.1409584860123588, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75.07192855828178, 12.10308470349448, 73.0310118247737, -9.646003904806241, 4.932961189760345, 1.718589369927463, -15.44305085297956, -19.92076242236019, 1.289853308008594, 19.44625320979492, 4.210588674471425, -2.579319144988436, 2.410104964471558, -3.865247564242535, 0.826851006847084, -3.631426466227551, -2.842039660907502, 2.249433450127177, -3.309261383458769, 0.6757720427689214, 2.35903348697973, 2.568255552039278, -0.321803303996427, -1.108091120089183, -1.412785938851775, 1.785124078160854, 2.573232078948616, -2.076416085393783, -9.312869029610674, -4.310360243055708, 0.07839735762587302, -0.4810908104630088, 0.9952395155647055, -3.886794543907047, 2.525965274526253, 3.540664673781963, -2.704864111340364, -3.864627721141978, 4.457179505634837, -6.813519964253322, -2.007416166791153, -1.607611533013739, 10.38000897763594, -0.3046634977924537, -2.266871922238326, 2.573731821774683, -2.979571190380482, -2.320864784735163, -1.500209869827327, -5.106748863521393, -3.950957911975269, 0.7340374884876252, 1.73889407335216, 2.182641990536762, -6.356098593894809, -5.93055977994974, -0.6040135105288104, 3.029168613692871, -5.042929510576918, 5.833709461846172, 15.29860079283752, -1.235961351707758, 9.34323445595332, 3.785951093156088, -10.34177459105045, 2.911648799971752, 9.281014378066164, -0.4941493880528656, 3.071779513490743, -4.517815603760604, -6.192250219969715, -0.3317883573330157, 1.349445179208848, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63.45021054279741, -15.82766767521525, 41.22915354775575, 4.664008353213778, -1.654066901130316, -23.18254021974398, -12.84906013980607, -0.9626027911697629, 3.41433891445458, -0.06961595567794145, -1.096971305807928, 0.8698295584855787, 3.772196521299375, 6.631293883425417, -7.052125668571361, -3.200823343555333, 3.814349784726156, 4.941784929229768, 0.6315537523938005, -0.01802357802850369, 3.141620177813325, 3.10250469485239, -4.155135005432694, 1.701739006290255, 1.540814933013846, 0.7387665729315541, -5.311958621040922, -13.02405885670838, -4.942498894115073, 2.149572755504388, 3.341124951208096, 3.870026706159178, -2.46509460954075, 0.4769961681706392, 6.604145321870847, -4.15894453283208, -3.374029939123039, 6.807566765521488, -11.58698328431105, -2.80185415106152, -0.002148524464262543, 7.754192162202266, 0.5225981165001614, 2.195290230986459, -5.408948531637178, 0.1049214015983932, -8.924285492967401, -2.350089393085131, -0.5423255417785425, -3.219609856555158, -4.390973896320624, -1.269742631984241, 4.051212063679165, -10.36139506901704, 0.3230350713187323, 1.674998606949747, 3.540984566900865, 1.18972973091647, 2.057607076615883, 13.40112401714828, -1.748763782836714, 13.13716409027571, -0.2243177932456299, -12.24721484928519, 5.87773220153188, 9.74466077242022, -0.8896869572089892, 2.189477242908632, -5.208603883097037, -8.105641911969411, -0.7300180023457923, 2.022265831725371, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52.66687486179152, -3.101783038688906, 62.54840137160225, 9.616670950233983, -12.50481143141205, -28.04924352555032, 18.7558503771284, 14.97634693290006, 5.851320122566384, -0.1677270839150571, -2.409084137352026, -9.845991621034058, -3.801336162247693, -0.9907297274053595, -4.664351290089362, 4.309633797495072, 0.6048954669030202, 1.543984136643211, 0.7189536403742964, 5.611415033458477, 2.487672542609962, -8.621934168449286, -10.05094063299714, 8.742063873037001, -3.490157247009134, 2.066460908332703, -4.477586251672978, -5.332933548411357, -5.713234560480118, -8.240059969073409, -3.364164696488402, 6.227061542811854, 0.1791896591361718, -2.507565879175399, 3.698854501954176, -1.007279474702307, -5.481898046206347, -1.72805442027048, 1.655718519783813, -4.101110323704863, 3.320297978932387, -3.684641982534487, -2.130960673414645, 9.904486582652764, -2.376262647862093, 2.148900292669743, 4.759998469058096, -13.36944502872464, -7.978751527858369, 6.863214185815936, -1.882367548219069, -2.561088530514321, 4.873981502571982, -7.579320197588544, -1.497679078782172, 2.35834379567061, -8.385645880902972, 4.09880893561949, 4.828417395745121, 2.282140125429291, -4.833463519506268, 2.913845215609183, -1.612937226837221, -0.5525869262187749, 0.6145753612090259, -1.089608686377456, -0.3258113829684524, -2.210223671018175, -0.8097847014254713, 1.266046990796156, -0.1222971055896021, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62.97383455884989, -15.72156846847342, -50.52987429444124, -5.821406791941631, -6.271938286848207, -28.08098151092815, 2.368560549147725, -14.39710551246207, 7.569330972477777, -13.4264330861926, 2.75461801976173, 2.688711269115824, 2.764732074458091, 8.408341398358559, -10.04776489918815, -7.396363378028368, -1.149416203511894, -1.054301083542792, -10.04596380901379, -11.69408823775871, 17.38686456253957, 8.299516226227814, -13.25762288717717, 7.349031579684647, -4.534835890890477, 25.89116419268924, -0.01992743860632668, 7.982099277597088, -0.04160883712533649, 2.573520590529096, -11.35149838346194, -4.227617111120538, 0.2168974914804734, -1.795362046493738, 5.631764300285649, 6.008575066010116, 15.72428788595154, -1.842254414189587, -0.5382261085672077, -9.552315485913649, 3.675875209168321, -2.602166724352801, 1.859610651661533, -1.895505270339744, 11.52276237353004, -6.239279748413804, -0.1297742740578715, 0.6991046300254831, -0.4208529689673289, -5.060072193399457, -1.906088726339328, 12.62054139647468, -5.130598829626098, -6.128474594316537, -7.690481592824534, -2.247055264194942, -1.447577869543198, -12.36316455006643, 2.732894276344731, -10.27755222960528, 0.5243468721916534, 9.047719038239586, -4.383971076616716, -4.842518948484556, 1.125600151566935, -1.90225576696169, 4.722031005971605, 5.306544131294808, -1.877228890927751, -0.1571777681548308, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62.52508007922609, -5.719488295515556, -63.28854566104216, -24.50023292372474, -1.974567606587724, 15.49864632949223, 6.998409457393456, -5.489144318408908, -0.6799511450744802, 0.6168873226031361, 7.888491941073679, -11.5213969968209, -12.02867471563315, 7.763694194348873, 8.334853365418969, -2.380451302943409, 0.09020014258787826, 2.3486772567884, 5.673982771176749, -11.02127409093227, -3.603461078419621, 3.167170753763195, -9.711383410279849, 4.723995107208117, -25.16138896067726, -12.23741325241211, -5.007012002050583, 2.190640446078525, -2.216636720328977, -0.5859489793413336, 8.233471386988535, 3.365237643930874, 4.189743657652521, -1.395157859959696, 0.3920210029284703, -7.056426817934152, 2.580560567814978, -2.128975130545938, 4.242435652432224, 2.235031188314527, 3.444275519482045, -0.7064127681508054, 3.521919688523948, -2.59915922665114, 2.796011561611334, 7.213677229286767, -0.2401477293445469, -9.239236230514949, 6.250101954381679, 6.220350851430839, -13.83625185491088, -1.200037472412707, 6.659714118020979, 11.18894360817651, 1.029186325547049, 3.013890675288255, 11.33035543805201, -0.7441654641054523, 9.147248359723497, -2.626393685016684, -5.110468073117602, -0.06530067048820608, 4.76431701962415, -2.253412642242864, 6.519983245052911, -3.976542599366748, -2.604614469192844, 2.348858737245175, 1.219946438299759, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71.32602496514716, -8.756876217814053, 35.04911984263231, 11.85596450877738, 3.138232705310344, -2.194824321913857, -2.176583710259183, -3.343478177638568, -4.236563157562049, -1.392674203474749, -10.32262876392589, -11.63217516576671, 6.360303917047404, 5.478160154717675, -1.373379667953706, 0.1222360308529321, 5.92992964189494, 6.968285486207656, -22.24412202832642, -14.08200805003572, 5.255065130840872, -9.647401891006457, 11.00321233823368, -26.63174562751841, -2.523162844598605, -6.145124307805637, 6.022273738346928, -2.926653347515803, 8.133925760802793, 8.591428362280888, -6.013423802818253, 5.249342941582124, -3.970400887670635, -1.748951928295462, -11.28492868937306, 3.683276522805945, 2.775813620317148, -1.942462052184175, 0.8891846150120821, 1.129690076778026, -5.55530433211887, 6.228804252833361, -6.493720150589822, 9.095196357844529, 8.099379043388204, 3.282276517555831, -3.970254131193375, 7.47529332111375, 3.579752526867083, -14.72795586609742, 5.127558963939634, 7.483150275119841, 8.143770403634198, 5.638865762472385, -1.070704874835951, 9.665581065265565, -1.166404516592552, 7.118528213260745, -2.114185083787445, -6.481345817022934, 2.439165766212086, 1.688770678506234, -1.42208740458422, 3.736908500476163, -2.52099822967916, -1.096365312903943, 3.115453100212649, -0.09261316039995293, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -53.91482041296031, -6.195234141533248, -84.22720528023089, -8.228357964869858, -5.335191448255144, 5.056702938346606, -7.464695583224544, 11.90761078244647, 13.09090097966719, 0.6578496842921259, -10.92616341315019, 13.03744853784803, 12.44023007567226, -1.161373459354644, -1.087744561840636, 5.932731979531396, 9.315732460781408, -21.37551613946766, -11.96248596464901, 13.63024808396517, -9.288714959320243, 7.289554080422293, -28.16285634112625, -9.571761912856207, -12.95118012023273, -3.750611197225868, -3.922432347873787, 6.124510964031026, 8.396222723906581, 0.6148965037770432, 5.13355621975811, -5.15138967657882, -8.114413035924995, -14.85090329064167, 3.39729299292902, -2.657124865451653, 11.34942261680844, -2.606547131090628, 0.1623880304796317, 0.3049177006141654, 1.35635227366094, -6.653050626870728, 8.073015458686122, 4.32132583894199, 2.212964809408603, -2.184076048165147, 9.799834020565784, 5.96606727639304, -17.42599122311193, 2.990347710352649, 8.359376262684071, 11.42371296595421, 0.9821035082629358, 3.26846258160433, 16.37981065781434, -2.885803722420936, 10.97059625603291, 1.611945735717845, -7.260237552742894, 0.9012561107562547, 4.615303611480527, -0.2799207674436057, 5.037467804678709, -4.682042101547799, -3.881526357472375, 2.728902770049329, -0.06849225345413945, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75.12896070864572, -14.55114803420073, -25.88520658421626, 0.3634408911932056, -5.749148081032294, -3.987054468607347, 3.605389714269859, 18.07840198100762, -7.822123425494485, 2.924157083708025, 1.962703760694055, -2.860064629683554, 2.959145172069614, 3.93868226857773, 6.366668810634879, 5.288829466990348, -4.294038560170033, -0.08801626773445168, 5.250702110881997, -0.3152641291658385, 2.199002653107061, -17.67833947760999, -5.045964490505647, 1.211048049454066, 2.421824405506, -4.376451661909966, 6.241973769898392, 4.290964226801218, 5.969309505771088, 0.8555684941579085, -2.217790960392097, -1.35718576281381, -1.746727805108543, 0.5254608653917869, 0.8086186851967726, 5.293064595586645, -0.3599247004146829, 1.959101109902374, 8.947006788222373, -2.378495602576101, 2.723709987744103, -2.329120911932814, -11.05882331472708, -13.0794383091978, -3.452514320213396, -1.512851055243775, 0.1639755205493351, 0.0825479539228451, -15.39065507630122, -3.091131632830409, 5.338329408636449, -8.829569668743607, 8.153591122859282, 9.18321870067153, 3.77411909040066, -0.7259214307321555, -2.707742728847757, -6.070142253582127, 0.8961401710073812, 9.291034725859165, -5.172620787510649, 5.77739330996065, -5.938409073064742, -5.68284811156704, 2.213899420332612, 2.230741101606077, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40.51083229358659, -6.657401086597119, 46.1651355827067, 3.571126140204381, -16.51018529197995, -18.81764925681962, -3.560003960730173, 1.069143039257071, 7.841419461017695, -7.426825297086943, 3.636227586276667, -2.832840975189855, -4.226091127266264, -10.32558071350056, -5.423718841813621, 7.898975963852462, 9.110182036344748, -4.818572270232188, 7.517064129930646, -3.069225466093795, 13.58082569251052, 1.95336044171603, 5.706764456088048, 5.029792791510202, 3.178869494747695, -5.047323754409704, -2.736438120770565, 1.426807143702085, -1.920567914619038, 3.428205422463726, 5.74585589697081, 5.382153677222462, -0.8865556423886194, 3.914778289385668, -6.604066141662078, 3.391876836068548, 3.169728760425306, -4.677156167446953, -1.155070546015535, 3.061191481464817, -3.13123995748959, 6.494562114793292, 3.376621926659731, -4.587404098548453, -4.277527442893002, 1.474886961462322, 3.323795372963384, 5.401089673065682, 0.3253871348814484, -2.369066423960044, 3.865796037257022, -1.638291040075763, -9.722922494527154, 0.5238103099430581, -1.203361374442151, -3.74503959737966, 4.569457144757759, -0.4965825177245843, -2.765019233250034, 0.2829604726448859, -1.146952017594104, 2.265032786536537, 2.680700571952246, -1.255503266954519, 0.1637658162738065, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45.71426451969628, 0.3451233465733878, -42.83879591649266, -9.652152512053839, 2.943077049148836, 3.595807131194814, 12.07618358595724, 7.583721776261375, -2.798504129600953, 0.3493125113412846, -0.3060685650112926, -1.969954034839694, -2.226643423419492, 0.2775817976926701, 6.61252070570618, 0.2026442823847165, -1.756653814676166, 1.358336152476414, -2.953213341300402, 5.767247508163317, 4.576452080845395, -5.48265868666933, -5.584394192816982, 5.087476338922126, -3.141525913674985, -6.275099033613296, 5.577549390317852, -4.816802787505703, -2.484144702930381, -5.941817033794925, -10.3264911173429, -5.364557843392888, -7.843223405124702, -0.5283376840825795, -0.9570442251031415, -5.24883614050029, -7.185962189820855, -2.977003550332989, 1.181048111506568, -2.173863203462683, 4.403509726183693, 5.789771709589788, -3.251326838177565, 0.833293737507765, 2.197330074627189, -6.70359339703703, 2.969866449959098, -1.167049442438063, -0.3088855619701391, 2.234922153742612, -0.8743490423992627, 9.838111926343993, -3.681537357431789, 6.247482122998323, 10.24712337154277, -4.61734564949215, -0.06307486749200926, 1.334451074280191, 5.336299550216522, -2.297158597383811, -1.096756988788949, -2.950656621747207, -1.793982883674879, -1.379935304922622, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58.4305528833414, -10.93080151481084, -73.47222018485503, 1.299575050569214, 18.14449108892977, -6.050719753243367, 0.5840217211940599, 1.960086594084849, -4.368421952540212, 1.788116554787903, 2.164491069701282, 2.358970020887192, 1.093569678019126, 1.989649218755819, -1.28823196621902, -0.5313187250208743, -0.5624844430654856, -1.907667575555907, 6.909040860485212, 2.408127751390964, 0.4215555707913529, -2.780873876588656, 1.85248203975166, 3.135639744664483, -4.380299973926649, -3.921426250428929, 1.495099382458397, 2.622560565964388, 0.2177544811958763, -0.04339424448668048, -0.2214592105458387, -2.06944907992863, 0.1763703512794778, -2.846732426447117, -0.4639421303306322, 1.287390331822631, 0.6533086995560746, -2.425549690664099, 3.088053892492399, -1.130817472618208, 1.485446373139376, 4.380685859773039, -2.57028748480229, -2.127967029034677, 3.41369029366427, 7.568188803198317, 0.496744282104129, -3.964473757500087, 0.0282299427440213, -1.96849998024905, -3.553514188828535, 0.9438074995728989, -3.104500825703638, 1.724858829778236, 1.800147082209048, 0.224333685578572, -3.291601313990126, 1.370577599850704, -3.565441527576292, 1.823418080577437, 1.52484990001091, -0.828729219973382, -1.06107451712335, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60.4551144650917, -1.112031735605267, 40.52296759779913, -2.279357391039372, 4.563291267943169, 8.295632041224566, -3.939508280061141, 1.942114905022437, 3.077992623697353, 0.6979345603294407, 6.071625856395872, 9.832923870768321, -8.720411873028274, -8.458375209728874, 7.032936679862646, -3.660503707293801, 5.13609182864828, -3.763326595416756, -3.646534951906556, 3.175402986994713, 1.020866860271357, -3.886824646779147, 8.218325748247384, 3.32404792165843, -9.200062655640144, 6.295889066677559, 3.845719933212995, -3.43351185274513, 5.438009428491434, 6.112353772294139, 1.228860655027741, 1.024037136509394, -2.139240304739709, 1.532357918757432, 10.1079544033704, 4.044497472104775, -1.295614976235356, 9.473469973585541, -8.029083475961539, -4.343462366128194, 10.84815682088869, 1.011633882504112, -7.169231098330976, 8.133704565655293, 2.691632282997318, 0.8507816064460101, -3.282652921494739, -4.061244378839357, 0.05112572018852947, -3.547751950024609, 5.30365786223212, -9.690997968552335, -1.734557454096158, 2.931578504521047, -0.5834918591113373, -4.496448398993238, -3.031542637377464, -2.036988448519847, 2.154422493546257, 3.299173741623872, 1.162415691741919, -0.5670591291688311, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70.06613504205954, -9.835478687386175, 48.52214856712762, 11.48136951108488, 5.892721436902954, -3.703795834979923, 0.8429544617402316, 0.6016790749403919, -1.12542788838987, 2.368548605557095, -0.6822772589146743, -4.287688004185707, -2.594460038219845, 1.811391939430363, -3.268064562811219, 1.460904850276689, -2.864974741945764, -1.034841388002912, 1.745241178328566, 2.486796799228639, -0.2269447058580376, 3.439717265105236, 1.02136554408696, -4.705182655489384, 2.499760827621522, 1.840963673652037, 2.953808675230261, 4.276133519908038, 2.651957942115774, 0.6355241666252862, 0.57194650441768, -0.1440454915229704, 2.242291193237154, 3.579445219558762, 2.752322997747827, -2.639308831991975, 2.4577698710486, -4.752199390601385, -3.863233755634323, 3.10435637509681, -3.028301690338678, -1.02478741743191, 2.754261908266995, 0.03535310362791887, 0.6383262792814937, 0.4368852433821509, -1.380097243200454, 0.281051180629981, -3.521710925389415, 2.247365619297284, -3.14338177048046, -3.302250573466052, 2.012036598405328, 0.1368976717018865, -1.193536497653941, -2.112322112549731, 0.1388066012915721, 0.8364226293226722, 1.307996121331485, 0.8916481210688338, 0.4828704628796113, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48.35160025190098, -2.541971211171999, -40.68153564873732, 9.207954361446687, -5.556985583068949, -2.844696785788164, 2.796718046185394, 2.464041987072172, 1.893613270308423, 4.028977435880829, 1.580350980861052, -1.926871386712014, 1.936201877177753, 0.03605266371746324, 2.628195057996384, -4.803264934471255, 0.1432706764330213, 0.1079385572562689, 2.678825585163418, -1.064180917349414, -0.5008460410343695, 2.882130267316084, -0.15398049667585, -1.581309397233642, -3.437020133996731, 1.265459202748218, 1.117834225134362, 0.1360954343911673, 0.9375505319888843, 3.243740457337423, 2.092675870695559, 0.04783544042641906, 4.765463295666528, -0.4641437505818906, -0.4785294697426362, 0.9696458103026435, -8.685566793141595, -7.008778621407876, 1.595549810231035, 0.3128462080006037, -1.324425648748344, 1.053200285772633, -9.359526652432077, -1.580936494199254, 3.673447578818254, -5.544913965708159, 2.361010918728093, 4.208995052675768, 0.06177199204784918, -0.7315046900899178, -0.358711190997884, -4.578123417453783, 2.050322078756102, 3.974849259098512, -0.7452561049821164, 1.594734714218798, -1.737806196971752, -2.031916066155333, 0.5613088668818109, 0.7078249129938057, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51.98712898798419, -10.91279555750407, 16.5116520014062, 7.070082094300194, 7.316626743402702, -4.062538962997873, -0.7405273411971364, -2.403988646588473, 4.735499624487429, -2.288345916874214, 1.710004157792464, 0.7759293763857303, 2.319801872864849, 3.523736483172671, -4.063099150658085, -2.492051000480119, 4.11448548909593, 7.129988646336227, -2.243669991226699, -0.01638383640626986, 5.035870505157345, -0.9263294558811588, 2.097755508212908, 1.321512562673401, 3.748642620543865, 3.497629889280451, 2.535560833332076, 6.70155773507767, -2.222025277278504, 3.745469454508642, 4.860671405997067, 1.247993743903351, 1.366709222748014, 0.15728611894614, 2.359412737808513, 2.228713531327038, -1.291887607463255, -2.502446261947766, 0.8576018641230071, 0.2591128365637439, 0.1281550783740285, 1.457088120497456, 2.804040947211357, 3.04089132770398, 0.5933410236497064, 0.5620801447638994, -3.466284049616893, 1.640115928164911, -1.286700740977786, -6.179791106131169, 1.636998061183449, -0.2159342040060719, -0.3846813123879876, -3.023642425428129, 2.529816319670621, 0.03264733953770085, 1.353325216772121, 0.7761992320974147, 0.8335576498590705, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25.43514166894322, -8.17729396479627, -9.755663509088453, 19.19784728348034, -4.384048886049747, -7.499153400798601, 4.435169145012178, 2.435444086759126, -9.059597245945259, -5.325657224831133, 5.740599830438042, -2.492050052381312, 4.19796696197511, -4.263587721918892, 1.77146723826956, -0.4935403175135217, 0.8862361772476778, 0.718637930367225, 2.234402910854942, 1.153322927018771, -3.443329198738874, 0.6587212840847486, -0.7054120735100874, -3.07872040612198, -1.371786433350092, 1.271824407901802, -3.947941817835058, -0.8336796717965617, 0.6116519681575391, -3.071696553703523, 4.475454076327929, 0.7609188629051276, 1.92281105267744, 3.40184922477059, -8.810192326908565, -4.590741833410618, 3.734024788110379, -1.509040639411721, -1.529465630170008, 0.9461084686824491, -6.75503144580174, -2.037690055578029, 1.030666583912851, -3.882610283293217, 2.375072374836591, 5.361220748281059, 2.030587685343521, -2.594516437562062, 3.173762351676447, -3.470985476419609, 0.8394945737986235, 1.011387559197422, -0.3451056702610979, -0.5600384586317051, -1.250437490195752, -0.6594046924812333, 1.043095979522655, 0.3317341014295642, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28.99829564612994, -7.919492306918029, 14.05556909884386, 7.925941651982717, 1.30923833477671, 2.711408876410578, 1.61295413285611, -1.556599660832906, -0.8098128328747748, 0.4820136628666691, 1.242144749021579, 2.59270514147219, 1.070695817241087, 0.3750106994386846, 0.1725150645491444, 1.817115818968294, -0.4814506723964737, -1.161742890285604, 1.472007131837003, -3.436966082846573, 0.6982494240111369, -0.3149935878404753, 0.423370074395463, -0.9574295293157908, 0.2421056567329433, -0.5049850377885065, -4.679003799785368, 1.836812379169509, -0.6413835068300918, 2.492048982685315, 1.392871072424903, 1.054456102018222, 1.562804344198468, -0.5360913571726491, 0.2289458184750688, -1.348818559581913, -0.7324130913590041, 0.2525553513400682, -0.719825146825839, -0.6622690818866591, -0.05716678780881196, 0.03985333634237294, -0.3355682149483769, -0.1341481930486313, -0.2245769325773339, 1.701054496016564, -2.071735516197021, 0.7197321751353539, -0.5990693757732555, 0.7461182301273023, -1.28537860516808, -0.1752635447217054, -0.01940763082982118, -0.1985636316510818, 0.9478745916084782, 0.2042482439571948, -0.4223294809395653, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26.09223882232648, -12.37682729616652, -21.27874182963862, 4.348357266610032, 4.573400992223148, 5.451216191750214, -3.611392020039598, -0.07921190808374405, -0.8260009529279171, -0.8434890069043338, -0.4552052508830591, -0.4528369276968658, 0.485445048833045, 0.7411599447890793, -0.4977249990635382, 1.190184399027994, 0.5973815546085762, -0.787231230010092, 0.03686032549901305, -0.4890816251224443, 0.5247759592075937, -1.879966027178497, 0.7792555164671459, 1.08723712738975, -1.42032534259863, 0.1721744481327533, 0.1056055009830306, -2.005790677375433, 1.016109801476819, -1.242159849121084, 1.243013696198364, 3.432482241304956, -4.523104088240713, -1.568715574671622, 5.119814672065328, 0.3791289530216432, -2.190682514501041, 2.552754170198622, -0.449368385418214, -0.5848836895616387, -0.9128519962622303, -0.9291921116478306, 0.6344008715643001, 1.688400124637569, 0.3633977049284803, -1.575721206061369, 1.961090047103945, -0.6752069375516031, -0.7855465024767947, -0.2102475861881171, 0.6869577789805948, -1.299232189451566, 0.5683367030798885, 0.3130637568892004, 0.1545378225570001, 0.3790410707685513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.78430083032547, 1.185047939349582, 35.77538180501586, -6.08934280503613, -4.628055061913704, 4.470155638785817, 0.1274755893885796, -4.165150926841093, -2.90227906734488, -0.845111562541671, -1.740136245099567, -0.7946086439652909, 0.165908004480544, -0.6322554553948885, -0.7202811048901517, 0.962291525388159, 0.1867569707618253, 0.7090001464102381, -0.9034980429447981, -0.7997832600818465, 0.1057538227773544, -0.2295775902801903, -0.2167480404571516, -1.707234755317263, 2.041285551224553, -0.7878934898873934, -1.430438536425756, 5.730418488030445, 0.6926510312478421, -4.339109958364433, 6.727134105417382, -5.329326344720556, 0.2090167614184525, 9.514829796739471, 6.99752035864157, -5.726866864790069, 2.796275247427376, 2.891078173635352, 0.5284713674492778, -4.068212458937251, 0.007838785072538627, -1.603613176227203, 2.0145967452931, 0.8759256044597022, -3.80096540098218, 3.215984538447468, -2.552801380633107, 0.554399068571981, -0.3103317501790938, 1.208594964868666, -1.283494125131377, 0.7998967241899251, -0.386450465669298, -1.202893469925367, -1.317846847748221, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47.41309320362173, -6.902809138581961, 24.68993718840007, -3.13534854977696, 7.054619343395385, 5.577611289513071, -3.877117196513223, -0.705447221487262, -0.8099002262119813, -0.1565635558190763, -1.127616075289359, -0.340714841660406, 0.660945871772091, -1.386755567315061, -0.4584883778560444, 0.9198751662032315, 1.002014450214894, -0.8640902794196041, -0.8777171102898179, 2.14825103785315, 0.989246034616117, -0.007095782785030112, 1.73906114106083, 0.6255059446607256, 0.1889696248858352, 1.03385909422522, 2.226668602394364, 0.1698945168834521, -1.873328492302393, 1.635950747204321, -0.6535224611564427, -0.5212140486619968, 1.003703892471871, 3.059411904595601, -1.892088474084682, 0.9339283828820583, 2.372361621792483, 1.133949816931869, -0.1994699011958669, 0.6535725484050933, -0.9195781603438848, -1.005444925904406, 0.06444426676642491, -0.8098171033672705, -1.318065403781523, 0.229094599479945, -0.1458840598162685, 0.2580570421599906, 0.599654091348747, -0.1055495042899468, 0.8993623666137143, 0.2691782537744015, -0.1099774106379499, 0.2977644683250328, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24.74429137938651, -3.056148054133861, 19.0056932068058, 16.39870702492764, 4.267138497765569, -7.263096879020432, -2.919011924763906, -0.4167087337896431, -0.8396221408817942, -1.296684951975891, 0.7231090234720337, -0.1375746950653319, 0.4893869484915677, 0.3142640879884956, -0.2220967974170002, -1.109112753429507, 1.837593002510292, 1.479112432032976, -1.096302655894103, -1.964525246159897, -0.3280412024354407, -0.9206324506519383, -3.476018583754276, 0.6640599703563438, 0.3918183916355132, -3.395485381429018, -0.003002004945104059, 3.146782410011682, -5.072333819483568, 5.41257407183969, 0.6517585511003233, -7.269221543477382, -4.056630984171059, 4.210313402070434, -4.078813743290807, -2.25180663054022, -1.292189897325851, 1.427646253569202, -0.02497439324399699, 0.4774218280565992, -0.6503459447009956, 0.2399655638403526, 1.867125503961992, -0.9832308658323502, 0.3873487083709633, 0.05281139747950379, -0.3835529630274041, -1.6917245847278, 1.122860683946538, -1.59095315900844, -0.1293462709264742, 0.744401662451372, 0.550681606700183, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34.33789589268527, -6.878943247619225, -14.64721261322692, 10.01107177766694, -10.23942535961409, -1.01498039173437, -1.897412320562053, 0.1671533339857628, -0.8712694561978971, -1.083706765312663, -0.8072110203673344, 0.8308152015963188, 0.2147544944441696, -0.5493919968376136, 0.1446575439684376, -0.6832698103437359, -0.3948442858808979, -1.115588657559433, 0.3579803772248178, 1.360983446684671, 1.00664254181845, 0.463405794612902, -0.01621384683534825, -0.8228161891870686, -0.9063503571998639, -1.803563811674677, 1.773734326519576, 0.4302873906114944, -1.04322351848609, -2.826856356023816, -1.324768966730078, -3.650267019006124, 0.4946176831514201, 0.9765254105590534, -2.029801194780261, -0.08501190782368655, 2.178344340984078, -1.920968439027878, 1.468087622744764, 0.7608787750954016, -1.000741195716964, 1.504164739818004, -0.2688678814948808, 0.6600983722848048, -1.220320200367525, 0.2410125647060634, 0.1664703506451447, -0.00850398171402288, 0.147174562643468, -0.02779982278043158, 0.8346719111354661, 1.343056942062318, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24.86877278577309, -16.79318934098175, 7.458488104737861, 9.49827773740922, -2.037264532584139, 1.252205231895099, 0.5394711870719748, 2.195699736074124, -0.06182472637253196, 0.7020281028590925, 0.3258270446041916, 0.1103891416148433, 0.2807839830050392, 0.8324674121995713, -0.07707017579260933, 0.04774101018547401, -0.6651862970621468, 0.5716949794838074, 0.2786641675385044, 0.6522299722084175, 0.9870590659751258, 0.07525858148281402, 0.2573717074126062, -0.8694521708682318, -1.166811640779638, 1.298799293918699, -2.203520860482713, 0.6442208455279349, -1.644267690640131, -2.625903488982017, -2.302992147951265, 1.257444945761727, -0.08416130603880936, -1.270800555411265, -0.7611165428890112, 1.039732198091014, -1.251481617872658, 0.668700121789956, -0.6911166576485717, -0.6139792747015455, 1.608281400168625, -0.2867634337303782, 0.1637144135551453, -0.00432411765221891, 0.07102947638320466, -1.167072230215902, 1.020402395737285, -0.8250836936353415, -0.6010780760217853, 0.1575436581466232, 0.3661602997463697, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25.48744110290001, -0.8196103125693783, -28.12739691634226, -14.66875241082419, -0.615739550477418, 0.7968006490105319, 1.893633537382631, -1.654939455947577, -0.6163475289447353, -1.258986228668871, -0.1685854638534228, 0.3466358666389292, -1.426194843008651, -0.2003994306001548, -1.259905297827965, 1.344072840361883, -0.688819755049539, -1.014480774303581, -0.6295918075499517, 0.1776953465799677, -0.2343489103275878, 1.245580834373049, 0.282925806992274, 0.9010886337902754, -1.886506785726124, -1.464163182582124, 1.060688891787593, 0.9766666550692192, -0.7971522349237924, -0.3026477025841756, 0.1569473405096722, -1.562229392252153, -0.5092349552596337, 0.330008450314712, -0.6335053028536132, 0.4247451599698489, 0.0985199006348359, -0.3513889048599413, 0.06524354177060393, -0.1957245081554103, -0.9317593740728739, 0.1952654121598859, -0.2590026012553117, 0.3001134383078498, 1.986414203689662, -1.071273239462749, 1.253278874165287, 0.33617967896085, 0.7395830923202225, 1.549701849275336, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31.61694956773989, -9.578300913349803, -3.504213982861134, 2.937150834658584, 0.9888020778636044, -1.024980201460239, -0.5118645161888414, -1.146567755798608, -1.444823248641867, 0.119064333528641, -0.4696982483040331, 1.095121262010022, -0.5308991134969057, -0.5197247973700743, 1.05002708888555, 1.818937037971043, -0.464288009797318, 0.6619872266917841, 3.401021092823941, -0.9482749170371739, 2.813315825246367, 1.129476242162393, 0.1981687722797381, -1.019635015614744, -3.307198789311745, -1.432171362179824, -1.184749190478042, -1.044919901810701, -0.6539226010822516, 0.4625979387292016, 0.6826291685753989, -1.87320881210041, -0.02360508954848113, 1.040603087479057, -0.4961300270289009, 1.055913719807241, -2.655638121288787, 0.1835672294990115, -0.2887263743968013, -1.414391072650056, 0.9868620830546826, 0.6374153108068793, 0.1452572712918873, -0.3526782564487305, 0.6972915252755666, -0.01466270301749871, -0.4766248436639112, 0.2560860018610663, 0.5918528531262749, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.11268891122238, -18.88517791209816, -7.849457648122431, 0.5186009516658268, 0.9174633102810905, -0.4433385845787631, 0.259117803259069, 0.4812800928303352, 0.3809278637536887, 0.1040308979050729, -0.05696819922547338, 0.04177348257977326, -0.19151417247168, -0.9633478211800127, -0.1242642511041362, 0.3111175057895781, -0.0993555030948718, 0.9200983120151756, -0.283630744431747, -0.3768440931992381, 0.2608693517536536, -0.1701114694365957, 0.1657033422918405, 0.5579125426286559, -1.625886334801126, -0.3807035749043056, 0.9640891719563836, -0.1517544113079037, -0.06175882514010688, 0.4876052179200603, -0.1171970532950455, 0.01944444533954101, 0.4490968232071326, -0.4458741922044034, 0.3254420663099036, 0.5282760372591894, -0.05934694150103174, 0.1060201539053977, 0.8283931026778301, -0.4074091722040743, 0.4784701634625882, -0.02952608481148086, -0.1915663172505298, 0.1218560114391382, -0.3518484009580818, -0.2587618544226619, -0.1011116715064274, -0.4008733499435151, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10.28612342841808, -23.92112732279337, 5.771795426117762, -0.8030148991959661, 0.04406286929137412, -0.2462851679259779, -0.0790329685264313, 0.5162614125094603, 0.01081766552358586, -0.3771532498914852, 0.2371657873877063, -0.1121483962706096, -0.598902253817861, -1.018195608367853, -0.01053082672842091, -0.3684877801366509, 0.3508826267234865, -0.2390155682927431, -0.1773909049534708, 0.1757923535233533, 0.2788684363679378, -0.521760862098457, 0.3153403198775502, 0.08909424355874358, 0.3382317489455293, 0.2248194206427477, 0.6112323344458919, -0.05266682106538524, -0.857521487871565, 0.09621919673355192, 0.1820135304582492, -0.03556509270831806, 0.05480383694627229, -0.05236763037981038, 0.9935679652239512, -0.01831786321756342, 0.205863157809067, 0.3066879134775455, -0.5897438503738709, 0.1809856006527006, 0.2304158672123705, 0.1357359363236704, 0.01081706136475033, -0.2019643081867054, -0.2674765180786534, 0.1218826125012657, 0.06599894348285046, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.508940298192356, -25.92446548490683, 0.8596283612994251, -0.885296785459307, 0.6510912736108546, 0.04489469589179211, 0.1153490121088812, 0.6103383563995985, -0.6314156415588608, 0.01915715564342266, -0.5113720254650198, 0.08321272888636021, 0.2526155635642888, 0.07676680070437664, -0.207069381512334, -0.4238244829828506, 0.1598019632669035, 0.01979690071582769, -0.1131733213057336, 0.1678269137319559, -0.06128460713493483, 0.2950474603493092, -0.05777326473555904, 0.1081544273212701, 0.1350575367841474, -0.1382598662249417, -0.02063619586362458, -0.01748166206219487, 0.1390481463209892, 0.07165704302950053, 0.1349895003361674, 0.06236059106166005, -0.1944785128320574, -0.2787255380331269, 0.01560113047175663, -0.2002320581613433, 0.3115961907926021, 0.1635870368788743, 0.05678294158098499, -0.476018191230865, 0.3068760522389033, -0.3033131104805271, 0.3509349305650783, 0.3398673523876503, -0.02472276597655712, -0.1406202583056918, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.938841061583187, -25.33986700948118, 3.895381103905187, -0.4068328885046618, -1.020248987608946, 1.875210227283616, 0.8326849356539051, 0.3197332657604331, 0.8814021905636888, -0.191597405724302, -1.189763075075068, -1.758874335134983, -0.01899353751647506, 0.0276611350365027, 0.5048267537307356, -0.5806174579955142, -0.02276182921702848, 0.4354081702397676, -0.1913814507405756, -0.1404271457144592, 0.4293939511517911, -0.2455037565707741, -0.6287458194591844, -0.4325390080784384, 0.5663792753160686, 0.06496758462505856, -1.013812891552513, -0.6580075377114708, 0.3012766122553553, 0.7826160029411943, -0.2956334704185347, 0.5829842798108729, 1.888181195419026, 0.2434171191535548, 0.4382404847806721, -0.2260461131572888, -1.002274173244901, 0.1511392353702925, 0.959534113889126, -0.7055427039674402, 0.6121511681849879, -1.070201333103883, -0.85450815461259, 0.3517683076365886, 0.2515058817628869, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.188440162629536, -18.32569924146616, -9.589804523680115, 0.3710427014950839, 0.3218205714481496, -0.2690828162556131, 0.3778764240350382, -0.3074423748293786, 0.005775081556014241, -0.01195607972614768, 0.4411561531339875, -0.03533727446997911, -0.1118188852301485, 0.5245470238731157, -0.01500837976097037, 0.2330462173829136, 0.3097172521421208, -0.1141404752456203, -0.03010554327463865, -0.3053455023961597, -0.568283713910994, -0.4659469523334061, 0.1389552806909783, -0.2547565634519277, -0.08627456156926228, 0.4559236364597809, -0.3852998773859254, -0.2059868514232366, -0.02375049165040808, -0.3131649641419055, 0.1909454021240402, -0.2322739633649241, 0.008020950818914468, -0.08341805591326434, -0.111253448846017, 0.05259516567515898, -0.001122570051102888, 0.1514471161594721, -0.0404691113211848, -0.008872368197677635, 0.0116933627886483, -0.09874720009960319, -0.03877084404075001, 0.05002466574186254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10.03537283004762, -31.0463181244779, 1.779031435921747, 0.5805779942073915, -0.1697490764077751, -0.01914980853094367, -0.2211539569318829, -0.4216165170128795, -0.6480115775079677, -0.4142538428904219, 0.06564004090328103, -0.4941714579440745, 1.034278660942381, -0.2047718684985376, -0.01268161547420685, 0.517525878890536, -0.1043791000267504, -0.3647396058345162, 0.2111603242370048, -0.9972172123676774, -0.5115981269692284, 0.4959144934872069, 0.04212237503456763, -0.0259339732866725, -0.1242882315804042, -0.4810924645313537, -0.02365156513499566, 0.2627756243130801, -0.5274144495229729, 0.2708662778382719, 0.8165087143124619, -0.1013704061972073, 0.2726522755404825, 0.3850625905291744, -0.5191444285929395, 0.1772802840204757, 0.3334115942202089, 0.1315431110247013, -0.02250684048613707, -0.169616886212142, -0.3125742719244352, 0.04507962853556727, 0.01003848565633635, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.534564874870957, -24.59524017605734, 3.803193767088361, 0.1204388472709394, 0.5761719808045163, -0.1117681261275701, -0.2329370688709992, -0.08102002281001033, 0.1428619986726483, 0.104842791253757, -0.1181730570197248, 0.4589008851142075, -0.1080200483321708, 0.1900878438866454, 0.1999148634974392, -0.1482677353246511, -0.1560253005429775, -0.148698943892873, -0.5439804195128841, -0.4178164555772285, 0.1013788135893234, -0.2170885424796042, -0.02176885122945166, 0.2064156754855712, -0.3206810843761114, -0.04373791424112124, 0.2504839663865664, -0.28090563960889, 0.1385536322071997, -0.08959168523700539, -0.05811267349918002, 0.005219295271455209, -0.0006095068025606334, 0.05188819365042641, 0.05557911001260952, 0.07279423774972828, 0.07138061600398075, -0.03756847423989253, 0.02816926549231814, -0.07480288912090098, -0.006340103202835009, 0.0003644593817090534, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.032984611804681, -27.23593121948949, 10.91195300159838, -0.1955025467061237, -0.3108776615407506, -0.3861125933123738, -0.2335216115611025, -0.9691736965590945, -0.2809799173614512, -0.2879486799582545, 0.2288415268907392, -0.06960881368743468, -0.3354356497684607, -0.3414928741679384, -0.060828537807209, -0.301089195863019, 0.200552261417137, 0.1352398329475678, 0.3340834458703997, 0.07377669861905928, 0.2564987850409935, 0.3238811050529972, -0.7225355496632641, 0.2551257047021489, 0.1771742636853869, 0.06594998613853977, 0.07018408521301191, -0.05587922004114503, 0.9700092972137774, -0.2579283194903866, 0.6519487404137869, 0.5508375252467951, -0.6490234945917377, 0.1447953357975773, 0.2164634615540051, 0.3169200204043436, -0.03463118539302083, -0.151318881732286, -0.2345691835471254, -0.01993158819697678, -0.05040377327442637, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.4540626253999, -20.77158386493728, 0.8646709228308843, 0.1362724391608822, 0.1719025418456963, -0.2551996740096885, -0.03511714486680503, 0.1843273888070675, 0.1712704953498521, -0.08238211456267275, -0.0278396535204387, 0.09282985085557675, 0.2532178349906294, 0.08197119062309449, 0.0199260300618629, 0.2535665679716856, -0.1152352645199304, -0.1736314115581865, 0.01698268605977707, 0.04658947833988694, -0.1857939567479137, 0.01460595684305768, -0.05830186068372888, 0.03887623804842972, 0.1233901766950485, -0.03958735173141364, 0.07325984287647014, 0.01640653011899173, 0.1584691045459283, -0.2308825423077231, -0.1894450711707396, 0.01097836857891495, 0.04360019357535277, 0.005697416476426774, -0.2056452089585314, 0.04960126421902575, -0.09143466075759629, -0.0152240285154079, 0.07997148646231036, 0.03173856999389955, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.214993452284615, -24.05350963927314, 2.935180686952885, 0.009367576430711424, 0.02897145608792666, 1.037258110070721, 0.1361330302043889, 0.267403438521004, 0.2041268631368911, 0.009677886298345676, 0.4513281035866327, 0.4879183299083247, -0.04366463541582642, 0.1415327697743105, -0.2267638854965378, -0.4997584611277828, -0.6976848080687116, -0.02518594676737141, -0.2588366599642389, -0.2416744762736605, 0.7221885872238599, -0.5539147131834354, -0.1134910123367641, 0.2737448220857051, -0.2927880039131713, 0.2057867576341399, -0.79800324914354, 0.1932584636177841, -0.5035224041067244, -0.5321735749435307, 0.5437275964446536, -0.1399374304829474, -0.07507775144608267, -0.2918402578666227, 0.09771036738785385, 0.1114599184651533, 0.1302712088256483, 0.0519407976536088, 0.06216196476169271, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.947682961146469, -25.70508238397117, -11.46177925662307, -0.3724367020684367, -0.0346498317775926, 0.06864375351559394, 0.07554361694203379, -0.367323229127421, 0.09593202864671034, 0.1377534867847666, 0.1184603670917067, -0.02650248054294359, 0.2092301771249943, -0.009852203175540166, 0.1288173411245062, -0.01556723710218602, -0.2725343716448551, -0.04882125871058738, -0.1164191596901248, -0.01306504969938954, -0.09972247608276598, -0.05244353803868229, 0.08508888288435545, 0.01494712152255306, 0.06488803226510469, -0.1140190552259744, 0.1236269753074166, -0.2360969288917616, -0.1066473633353232, 0.1264867082185493, -0.02483266501799899, -0.04114542787579798, -0.1266313954297545, 0.03448373932480522, -0.05195144188753792, 0.03249420081315806, 0.03713923614715957, 0.01317281111328615, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11.69631299718309, -22.48619259551776, 0.4736607761650089, 0.3364440611411286, 0.001896101447363962, -0.01839142547031177, 0.03683300808928491, 0.04804330923877288, 0.163622475873788, 0.1554000460872887, -0.08113035605009281, 0.0394436822356209, -0.1518190651150113, -0.2391233604051897, -0.1848160862235859, 0.005028918748719988, -0.1738801952717139, -0.1389518165707553, 0.2440059223399533, -0.1912611405349515, -0.1278732887547087, 0.03594552209482393, -0.1239443437214213, 0.07601115720720845, -0.2413170999853679, 0.01830028011033026, -0.1786719142755088, -0.05040746869497416, 0.1855068663687703, -0.01469530719590392, -0.03565818225935036, -0.006393469065442842, -0.02927051217417908, 0.04981431028590561, 0.01896848487153613, -0.02389638792932929, 0.001671298450249839, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.7907072650120487, -24.90261765607406, -3.336934808793186, -0.1100561385510806, 0.03806580362882676, -0.9795899124384002, 0.2113562476336533, 0.1210755170917097, -0.5709907672936722, 0.06148724086826907, 0.4281734290575387, -0.1228023758602741, 1.217889711872614, 0.5772065011935688, -0.8854453190120086, -0.02188476051865783, 0.2939683523215479, -0.3364845598685323, 0.4389370528196214, 0.2175645153244334, 0.1003089157346634, 0.5938129566146761, -0.2639007244911475, -0.4694860419564821, 0.0619677643285282, -0.05717000630200545, -0.3202406910706038, 0.378107742758849, -0.14006136421472, -0.248450630677327, -0.1410998107329354, 0.0735235604182249, 0.006870838292283573, 0.1952510899320096, 0.0282675631387419, -0.003424908838937833, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.437730841654131, -33.27385476914327, -6.935734943236623, 0.2090812561111312, 0.3348393450135521, -0.223586923299236, -0.07352664648222718, 0.03785759488211347, -0.1513766386596058, -0.2099960883438794, 0.1017048240174961, 0.04182607962471709, 0.237579420640883, 0.2399067162829091, 0.07523955310772605, 0.05857405848698407, -0.05389473909058243, 0.2636593955046162, 0.1468245947741072, -0.1210583952104068, 0.1524669191535411, -0.214238636532872, -0.03816758506191603, -0.1354966639865573, 0.09316724617238126, -0.01615929313522045, 0.005900244511659499, 0.1042542689707338, 0.02949183866897195, 0.037267365131775, -0.07808591456574898, 0.03857619705636327, -0.07145363560926057, 0.002429628071270416, -0.01721018579426699, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.66333148382885, -14.4614219114703, -0.8464300600479908, 0.2514104375223278, -0.09861658442109786, 0.1691348097352446, 0.1896581102869329, -0.08087907706641626, 0.01174408327349146, -0.04072839225976889, -0.21084119330376, -0.2084820021746563, 0.06459499104581255, -0.07220761842989601, -0.08081244480389148, 0.2770967905223476, -0.1130641379249503, 0.01313709061334511, 0.1053117612678122, -0.08548227871695131, 0.04755230373305874, -0.239808392738221, 0.006594669706792055, -0.1160148635147146, -0.1546465218776207, 0.1797178820270592, -0.03514352886331645, -9.157443953328604e-05, -0.08036793482879778, 0.002475861135144963, 0.05097461589006569, 0.01013677531395254, 0.0105449596442005, 0.01367406076786437, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.019923386108676, -26.76235000723083, -5.231507339253204, 0.176832541192354, 0.3017249373834541, -0.1388443978394047, 0.2312643317132779, -0.04464652755082743, 0.07808084544420522, 0.4313216233613872, 0.3080530810133845, -0.3090015643058375, 0.2364897664214366, 0.06604367687341839, -0.1876613180395572, 0.3146210580156822, 0.1784726037504162, -0.02271540068963666, 0.2342699465461129, -0.1343387528471265, 0.06625828689355771, -0.003273887803178955, 0.1450943895905023, 0.00620258099433276, -0.09380102559767173, 0.01798478433460103, -0.07862806231355808, 0.05631636830032596, -0.0196969615930718, 0.04436104332404119, 0.05354400105458426, -0.02354762170847734, -0.02514305223947428, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.177075859399771, -33.39258164773348, 1.63759177075579, -0.06342533195251419, 0.1411980486906961, -0.1464775848775387, -0.04431760714090424, 0.01154744252601158, 0.1026506579361863, -0.02088412824928649, -0.02902179807556261, 0.01304836720502356, -0.07271697524786641, -0.07325213106164481, 0.03704096648459854, -0.05922855466144863, -0.06262650371609046, -0.03182071956590917, 0.009080904737058308, 0.1354599956171088, -0.012606916831903, 0.03239503119872632, 0.1409587222872537, -0.06002807561785677, 0.04627926839441229, 0.02573135330017627, 0.004605365395089219, -0.08725168654474108, 0.002587419133345108, -0.05185185645936881, -0.005849547735873801, -0.009771554197080978, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.064718113513358, -13.12988850942804, -3.438372519392976, 0.1264586180050162, 0.004883996372652178, -0.04481988503927746, 0.09576485030352094, -0.3955235936343703, -0.2087500394183668, 0.3073328906227044, 0.02068102374422703, -0.1083588810681304, 0.1758168533371591, -0.1756277739685251, -0.07450374022378869, -0.01630094419723318, -0.1914647508380139, 0.08895278495397248, 0.1403814278690517, -0.03489253346297209, 0.01598763641739303, 0.1131830343890914, -0.06699742805657724, 0.00240472634967058, 0.05514166821797546, 0.03884124270426484, -0.01101385248527006, 0.01954817931909242, -0.03459346077345329, -0.01274466093412686, -0.003543141293631806, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.395368558938009, -27.6115795496259, 6.02328924849129, -0.0217949039676702, 0.01713458866911107, 0.1204807990971129, -0.1903985203838578, -0.245494995765684, -0.01567899867737631, -0.0483287391034937, -0.060209365295053, -0.00658859715813279, -0.1748730515278048, -0.1172896416076897, 0.002885900683208647, -0.2725962934388483, 0.1896424602622011, 0.2547718270544993, 0.08930762271234099, -0.05000517893940885, 0.198774168883364, -0.1836169107571341, -0.001441577306058042, 0.02027315191018264, 0.07922510191796643, -0.01081020778347853, -0.05485129878921055, -0.003504265936056936, -0.01741627502898858, -0.004300648475577595, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.881439123068173, -31.86267091719867, 0.3170578648639695, 0.4687236230510464, 0.02662683343011025, -0.3302193472780357, -0.477346463679984, -0.0517454341931882, -0.3336060762108314, 0.09422553730446168, 0.04946779745885752, -0.5432213903814268, -0.2492264416620409, 0.1732279550240386, -0.09454901437534985, 0.243084678749923, 0.184313316080481, 0.110429054715389, -0.03650964419849936, 0.09749969511293206, -0.1326505036247279, 0.05009598527464214, 0.1082240240233409, -0.1489278834552438, -0.08096188906466491, -0.0850388793794887, -0.1125032485965546, 0.05122382376743441, 0.05527189635692931, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.7431797386269411, -14.65117500009382, 5.823447882655948, -0.1881157144876831, -0.3008729186775366, -0.2240680575846533, 0.02294923203244657, -0.1328373063914675, 0.01835629292837719, 0.1359000574454446, -0.3469510665265196, -0.1308216630102339, -0.03496464106937285, -0.2440104038689523, 0.04193512042581821, -0.1366336497635793, 0.03231520148337453, -0.1084198723292215, -0.06739647043502352, 0.08740658296680984, -0.05956248732431352, 0.05155443563206404, -0.06543491661245913, 0.06950710262417095, -0.02430554263388206, 0.003834848628751442, 0.03034298318482847, 0.03421651369935733, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.826424710849555, -27.75807925717017, 6.49845414271845, 0.2088222638768245, 0.2567583755247717, 0.1680006630260083, 0.07113722086014379, -0.03228298686790457, -0.1031612528617338, 0.1843360031254731, 0.07332196070209686, -0.01774216015656859, 0.2986364342557484, -0.00134569499401013, 0.05460048981943994, -0.02322575505419388, 0.08264206029436941, 0.08014218496669946, 0.02559186811441928, 0.06346651700418222, -0.0449661723444516, 0.02381879758386176, -0.08682020285221281, 0.08025959489260269, -0.01003292155179478, -0.02340991530415569, -0.02962714897774685, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.435188878061354, -30.23792586523732, 0.4023394954316882, 0.1442634156119251, -0.1020481640743369, 0.2616580251348765, -0.1059180761079543, -0.08743876827521066, 0.2785769450080205, 0.04428252801918474, 0.0202832410441884, 0.04189636473520755, -0.1103209617823084, 0.08801265177191683, -0.06151324254000396, 0.01355502488640757, 0.1011883046619023, 0.01940829963761287, -0.02376145032104872, -0.04253776187455549, 0.1015931898787959, 0.004439366426774084, 0.02720943797022718, 0.03068092663135336, -0.02169503454248668, -0.04815156165797598, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.23475181130263, -25.85002095399512, -9.61072734631551, -0.2587337302523749, -0.2671090327042298, -0.1373193461266922, -0.01686645319925775, 0.1214524395626546, 0.04787321250564932, -0.0102808929635468, -0.1079687161735285, -0.1204158425469933, -0.01370170730210608, 0.03896661385808254, 0.02006408734658718, -0.01957557336743487, 0.02048657847215082, 0.03186441907330201, 0.01437600500970395, -0.07256365762710008, -0.04268726613146586, -0.004291692030780559, -0.02959742701650543, 0.009784658017416398, -0.001361411062570107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9.668539275335888, -23.18029209894821, -7.104549227457261, 0.009494835170991586, -0.2155484926554607, -0.05117708716304314, 0.09558257063666828, -0.006204864175755139, -0.0535983098279376, -0.1721078109347795, -0.1292907195966384, 0.04463480683436428, 0.03962458796875007, -0.03394918991811541, 0.0360179426993984, -0.05098248960386708, 0.05421613324558673, 0.006517343947994034, -0.02849867886559621, -0.07880371848866945, 0.02642259523254391, -0.03587610810807455, -0.0153740561986479, -0.01461543749433446, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.000678311567365, -23.41161932249744, 0.1115405160634775, -0.07148023127921439, -0.03829631039398255, 0.4350529946111771, 0.1273341721442011, -0.03309653396004558, 0.07269741094613814, -0.2517627759593927, -0.0916540014643315, -0.09513082346238068, 0.02936404485630485, -0.03887824155586548, 0.03259923092993516, 0.01480224718798229, -0.06089794884744876, 0.04533354466816, -0.04401696277253729, 0.08384757422274537, 0.03447473565697338, -0.03655777066458333, -0.04286881746219928, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1997455187845329, -23.67906930857953, 3.298493240502194, -0.1847467985210671, 0.1243176781235989, -0.02243375998252476, -0.0004203531178173071, -0.1373119846655697, -0.07119941044543882, 0.0598855239376691, 0.0365497555952217, 0.09940083973287311, 0.02170561702085787, 0.02523145542278863, 0.01398860677045751, -0.02099249665794002, -0.08042834487614063, -0.04514933257707622, 0.0210691994836113, -0.01304565123088667, 0.003317809080060446, 0.01880126864882835, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.363427418619814, -17.41903576009931, 9.186568349711468, 0.1111029283919205, 0.08777631782411636, -0.0106122045071789, 0.1144225997334068, -0.02466841586746403, 0.02750112055321526, -0.05524437334870362, 0.04541263818821106, 0.04741842472464215, 0.03068743352629459, -0.03255656589538247, -0.03729968912772544, 0.01062121564506963, -0.008575892547858845, 0.02301960098527405, 0.01221098646015711, -0.007828736372639752, -0.02174734678713348, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9.23220561660408, -31.51893707701785, 0.629104414809966, -0.002885901152494686, -0.04654352249775812, 0.05655136143073162, 0.04644981489440897, 0.04886269814398012, 0.01421146833364892, -0.02220699538623673, 0.05311321315234985, -0.001358424574760307, 0.00136891734406154, -0.01810167863750104, 0.05846985549778336, 0.02464847599577873, 5.045357884432963e-05, 0.02313650001543124, -0.01897592900555872, -0.01000566869781843, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6213531321316156, -24.30034243436851, -1.105212323117883, 0.1225585085553164, -0.2970472162797997, -0.1131121492749726, 0.005524192917051245, -0.005016083344128715, -0.05408343623542385, -0.02819561803866161, 0.009006334912992457, -0.02024545484485562, 0.03816393987230592, -0.0007047877611201743, 0.04901678014439114, -0.05163410574806857, -0.03130055103817821, 0.03533492988517593, 0.01195601678346641, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.097158496205909, -16.73710946124244, -9.426989245602673, -0.06261182983602319, -0.1059035148370443, 0.05076346286898199, 0.003678172466163399, -0.0454660155043527, 0.02462054291284395, -0.02110890517636086, 0.008241203910568698, 0.02390589384329424, 0.01198364473687612, -0.02957542631061049, 0.002236629456648171, -0.02809381563903465, 0.001689229093064753, -0.007600764285513168, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9.412003466484951, -31.65984264675678, -0.1254812244514544, -0.09114636575550933, -0.0366463804259801, -0.03322040198025862, -0.01209970867041294, -0.01021849930537397, 0.02256075215944923, 0.01825223707293363, 0.003993042619294536, -0.008507286595193135, -0.02427249385479496, 0.03381794787948238, -0.02914842372731508, 0.007082873675038417, -0.006655560097220788, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.27548187849782, -16.01246939790233, 5.644600469890476, -0.04244915968443123, -0.0371436610514518, 0.0530212677895391, 0.008626194479801664, -0.02358451461610269, 0.007412437106157236, -0.04628615223361372, 0.0826909370927158, -0.01312239177378535, 0.05019812567992653, 0.05643602731883488, -0.03169977188973144, -0.02409525389114796, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.831745814038495, -20.41725582289098, -1.583013759260222, -0.02098081085371714, -0.03289988933600374, -0.006011309758863401, 0.03459650459981792, 0.01348477813223562, -0.02336540423557105, -0.003969872715414671, -0.05998169351462899, 0.05263821645435009, -0.0144354245014559, -0.005674777729486418, -0.03142277004383006, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.562800616132969, -36.13433050173559, 0.2585654510438173, -0.02913169721040965, 0.002592481347938085, 0.004329834978588065, 0.06325089767860387, 0.01951445115945309, -0.03070674283592272, -0.02183384192678349, 0.009849968434859515, -0.02891816499635688, 0.002667591177598971, -0.02361460878909238, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2286035973327459, -15.02261004686781, 5.184122379409034, -0.0264079721355016, -0.007786216137000334, -0.008663526410932022, -0.005309693290799501, -0.006680538291880966, 0.001397532516833339, -0.01528554327177548, -0.01182046150296639, 0.005955666147884051, 0.003523919303238692, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.214570242697843, -21.4621144179193, -1.555874989179182, -0.001447535808513384, 0.03124103143611023, 0.01560612912433155, 0.01254222023040845, -0.0006565581414721336, -0.005837445535672976, 0.003328905310192099, -0.003109407401498421, -0.001359993487917328, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.575215080762542, -36.12196181704586, -0.009581763987488548, 0.02181190823948241, 0.004249343259232833, 0.008866640947567769, -0.008827428692463307, 0.0111903702615688, -0.008259743446844802, 0.005994103918828306, 0.02884522108807095, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.02332478841374811, -20.31760288431249, 5.902175782312199, 0.01411291075117598, -0.0401626029282366, -0.04333034577745157, 0.006563645334078613, -0.02686027801335236, 1.82653938945055e-05, -0.009451944888619017, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.843446424852287, -17.22694391469142, 4.615021811975704, 0.03880112444568462, 0.01156878860697344, -0.02011735633875036, 0.007254465185871957, 0.006976302646061595, 0.01061407563995378, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.636349195088934, -35.03142250661902, 0.03540637402307944, 0.006380325215592348, -0.01715112535803765, -0.005381045082520479, -0.02796704437114206, -0.01837431744975316, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03325953074641371, -17.29072432858197, 5.995094557622266, -0.004356649575832386, 0.01324648360020382, -0.002576747161993423, -0.0164552533090047, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.976772821535572, -18.99788030681546, 0.01396461545715264, -0.007601183590626498, 0.005853929901760483, 0.0201199907208218, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002983340164191267, -20.0342372815637, -5.741448414658583, -0.01215113512395332, -0.00662723431795657, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.752040939724589, -16.25515722920224, -0.00713497387655803, -0.004958024634924642, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0004916632598946193, -12.09805746213948, 0.000198676020167099, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001765653829615133, -12.09823117436413, + }, + evWant: []complex128{ + -0.2513649571095319 + 26.5196181977274i, + -0.2513649571095319 - 26.5196181977274i, + -0.3323427794627154 + 14.12147023570828i, + -0.3323427794627154 - 14.12147023570828i, + -0.3885760957072044 + 34.01549575140551i, + -0.3885760957072044 - 34.01549575140551i, + -0.4938394681672298 + 19.28755724237434i, + -0.4938394681672298 - 19.28755724237434i, + -0.5354723308245726 + 44.07811563049843i, + -0.5354723308245726 - 44.07811563049843i, + -0.8831210193505878 + 40.64617136580856i, + -0.8831210193505878 - 40.64617136580856i, + -1.063691744877652 + 54.90113796777709i, + -1.063691744877652 - 54.90113796777709i, + -1.270999250073418 + 55.92169849615225i, + -1.270999250073418 - 55.92169849615225i, + -1.641962795944021 + 124.0727533257146i, + -1.641962795944021 - 124.0727533257146i, + -1.866212165366329 + 67.51198073484791i, + -1.866212165366329 - 67.51198073484791i, + -2.66562659457705 + 102.4818444744388i, + -2.66562659457705 - 102.4818444744388i, + -2.677285588970379 + 109.3976583973073i, + -2.677285588970379 - 109.3976583973073i, + -3.592328373007462 + 116.2450441105874i, + -3.592328373007462 - 116.2450441105874i, + -3.658587455178502 + 105.6223525143237i, + -3.658587455178502 - 105.6223525143237i, + -3.738335632746128 + 95.41374995650723i, + -3.738335632746128 - 95.41374995650723i, + -4.05659124602542 + 85.08673687146815i, + -4.05659124602542 - 85.08673687146815i, + -11.7967401639067 + 0.03421683561959875i, + -11.7967401639067 - 0.03421683561959875i, + -12.06591356324058 + 0.03010079020722811i, + -12.06591356324058 - 0.03010079020722811i, + -12.08354870692898, + -12.09435136773809 + 0.0007639916648241464i, + -12.09435136773809 - 0.0007639916648241464i, + -12.09785209014901 + 0.02991559300476182i, + -12.09785209014901 - 0.02991559300476182i, + -12.09806212746318, + -12.09850417485291, + -12.09864274565634, + -12.10160612637007 + 0.004700099158908263i, + -12.10160612637007 - 0.004700099158908263i, + -12.16873692768957 + 0.02446545858852495i, + -12.16873692768957 - 0.02446545858852495i, + -12.23495190373921 + 0.1453184367031505i, + -12.23495190373921 - 0.1453184367031505i, + -13.54778407074696 + 141.1839768257274i, + -13.54778407074696 - 141.1839768257274i, + -15.38790969472481 + 114.0584849752244i, + -15.38790969472481 - 114.0584849752244i, + -23.60369882806601 + 0.2464158068361128i, + -23.60369882806601 - 0.2464158068361128i, + -24.04314341198735 + 0.3315626206724418i, + -24.04314341198735 - 0.3315626206724418i, + -24.12753399862331 + 0.1634093642552133i, + -24.12753399862331 - 0.1634093642552133i, + -24.18103712080912, + -24.18908889661277, + -24.19357072143492, + -24.19567681157636, + -24.20660003986661, + -24.228086198612 + 0.0220672004906673i, + -24.228086198612 - 0.0220672004906673i, + -24.30677145425284 + 0.1813999700804981i, + -24.30677145425284 - 0.1813999700804981i, + -25.23862373866253 + 0.8733279005402655i, + -25.23862373866253 - 0.8733279005402655i, + -29.42427841595277 + 1.666886570068163i, + -29.42427841595277 - 1.666886570068163i, + -33.94959271558832, + -35.51958918286584, + -36.20666045708104 + 0.1660921702962803i, + -36.20666045708104 - 0.1660921702962803i, + -36.25710351845593 + 0.01052251476620707i, + -36.25710351845593 - 0.01052251476620707i, + -36.28714605125749, + -36.29431583135849, + -36.29711199023137, + -36.31304183793699, + -36.32232768169418, + -36.37871120972082 + 0.1557647672076243i, + -36.37871120972082 - 0.1557647672076243i, + -36.47694233727385 + 0.3738707259908102i, + -36.47694233727385 - 0.3738707259908102i, + -36.66483183150206, + -37.75937189360096, + }, + }, + { + // TUB100 matrix from MatrixMarket, balanced and factorized into + // upper Hessenberg form in Octave, and embedded into a 104×104 + // diagonal matrix to test with ilo != 0 and ihi != n-1. + // Eigenvalues computed by eig function in Octave. + // Dhseqr considers this matrix big (n > 75). + n: 104, + ilo: 2, + ihi: 101, + tol: 1e-10, + h: []float64{ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1063.761, -960.3970563202379, -0.0006079108185996773, -0.009201940691316367, 0.002442836240270196, 0.01550988534551903, -0.005482455008401117, -0.02216870959395947, 0.009747347615349792, 0.02941831540681939, -0.01530136178573213, -0.03750794345694437, 0.02225359194453896, 0.046705617938318, -0.0307619752542162, -0.05730825585675074, 0.04103856105936231, 0.06965250072575992, -0.05335624663776811, -0.08412633500439758, 0.06805680196063389, 0.1011811513254484, -0.08555957035531082, -0.1213434441393789, 0.106369291926541, 0.1452243676184516, -0.1310809449650698, 0.1735240650736495, 0.1603769717276725, 0.2070245946752049, -0.195009056622052, 0.2465616197175694, 0.2357520481176992, 0.2929587463757468, -0.2833105069304027, 0.3469005841220431, 0.3381503031304328, 0.4087132445918312, -0.4002236126054999, 0.4780213717840138, 0.4685650013761221, 0.5532750093152425, -0.5407842250274101, 0.6312148133425258, 0.6125866029330725, 0.7064838330293224, -0.6776224584955323, 0.7717672671130079, 0.728093737707456, 0.4477228711606641, -1.832801684441419, 1.950252997191289, 0.804390452586547, 0.4832557718849113, 0.3060066166102118, 0.2756451553030591, 0.1719798268352208, 0.1844690914416081, 0.1028522851629666, 0.1338501876768783, 0.05922545829023376, 0.1041210893998114, 0.0294781768570502, 0.08738772703908808, 0.008665658061761334, 0.07957418017688388, -0.005841802748350547, 0.07832978350913038, -0.01561691241238414, 0.08229737118429636, -0.02164114160477788, 0.09076446627208183, -0.02452178964005379, -0.1034535010713481, 0.02461324557496748, 0.1203839900069163, -0.02209524508102444, 0.1417838483570761, -0.01702626635186736, 0.1680394493064578, 0.009377435518891378, -0.1996795871970759, -0.0009558646643977288, 0.2373933824702814, -0.01416583764558031, 0.2820880046959302, 0.03057782300299389, -0.3349961435755344, 0.05073634798692103, -0.3978562481735693, -0.0755607412701291, -0.4732063781751494, 0.1066126139010085, -0.5648764073871733, 0.1465759215609417, 0.67885880956596, 0.2001993093624898, -0.8249735752515708, 0.2762967421832379, -7.383366696690373, 0, 0, + 0, 0, -504.7000323579025, -960.7839130908893, 455.6939154064305, -0.0005890239049151091, 0.01222453307167895, 0.002380254112046573, -0.0183767018575125, -0.005347164384529943, 0.02487432959226112, 0.009507444863507727, -0.03195485414878263, -0.0149219770912947, 0.03986517031337426, 0.02169664773526838, -0.04887103316029169, -0.02998576954964119, 0.05926702273427436, 0.03999696952048423, -0.07138712464416012, -0.05199744338214077, 0.08561585141999975, 0.06632116378894419, -0.1023995009673016, -0.08337613594660015, 0.1222563158317329, 0.1036500341236005, -0.145783656379474, 0.1277114126111218, 0.173658096672846, 0.1562008437363875, -0.2066214365478053, 0.1898032066448404, 0.2454413266872829, 0.2291867817273585, -0.290828708487696, 0.2748879884412016, 0.343286767980235, 0.327114242278849, -0.4028620578438859, 0.3854382883926989, 0.4687761898935385, 0.4483798648521518, -0.5389586517254393, 0.5129393074648648, 0.6095951621601606, 0.5742741750224843, -0.6749584326212456, 0.6258664262549096, 0.7279030750048989, 0.361160520701244, -1.817820120247178, 1.493677993805868, 0.9093218408940651, 0.3437577565805193, 0.362630116371123, 0.182491216989941, 0.221714417427429, 0.1064242506044702, 0.1554403491948274, 0.05893517713417926, 0.1191987572531298, 0.02593630450949156, 0.09940153443435777, 0.001987949044964486, 0.0900967012871452, -0.01567758628187121, 0.08812023104053984, -0.02871634215129631, 0.09168600701701864, -0.03819855166921124, 0.09983277639781361, -0.04483241285443643, 0.112135778661831, 0.04908165568011769, -0.1285288605462619, -0.05123906116349945, 0.1491912175066926, -0.05147890107583802, 0.1744806002258908, -0.04989507359069757, -0.2049040909139878, 0.04652399206028981, -0.2411228487302952, -0.04134974220480257, -0.2839940475275046, -0.03428683940013912, 0.3346573639346669, 0.02513376678028306, 0.3946840836316033, 0.01348469011538719, -0.466320753537143, -0.00142779450121434, 0.5528931223683594, -0.0210105793668851, 0.6595061978534259, 0.04783831497380739, 0.7943401758885881, -0.08674091416897045, 7.282263793289921, 1.964402124200457, 0, 0, + 0, 0, 0, 504.7001065567226, -960.8071533894852, -455.6899665187256, -0.0006381542544069418, -0.01696123848664222, 0.002571421839873352, 0.02356372357492877, -0.005765057328779014, -0.03054576659236009, 0.01023675166561691, 0.03816637411322649, -0.01605159633648196, -0.04669530536153424, 0.02332395960802052, 0.05642332124514469, -0.03222102273610906, -0.06767293164234266, 0.04296780496196387, 0.08080966049331523, -0.05585344634069236, -0.09625362412257953, 0.07123822293842015, 0.1144906642960898, -0.08955981060276022, -0.1360815254382584, 0.1113369911164654, -0.1616662801387938, -0.1371665625346616, -0.1919585350680096, 0.1677064944291291, -0.2277205865868329, -0.2036342514104135, -0.2697050947227386, 0.2455629056115962, -0.3185418058062836, -0.2938904117765113, -0.3745411973588626, 0.3485540671441012, -0.4373871729832214, -0.4086704182323145, -0.5057124011628437, 0.4720841567744535, -0.5766169045256523, -0.5349437472430429, -0.6453152755169759, 0.5915742979267851, -0.705252589538002, -0.6350313138183948, -0.4095510871717013, 1.601644767644169, -1.801430257336091, -0.6783540858316911, -0.4521876448242478, -0.254377814677483, -0.2609137525907964, -0.1390187634586346, -0.1780644458672355, -0.07811098364662258, -0.1332228921784263, -0.03844450844393983, -0.1080065082071247, -0.01031758532230231, -0.09498853030853376, 0.01036100507490249, -0.09032395086444481, 0.02576859065961766, -0.09180684083159034, 0.03723131440198095, -0.09818648544931335, 0.04561209756712017, -0.1088355401035232, 0.05148345180798951, 0.1235465165704314, -0.05522144380747635, -0.1423972092039827, 0.05706613305793608, -0.1656652164809836, 0.0571654881872712, -0.1937812736972878, -0.05560491141385822, 0.2273160612316538, -0.05242306351060358, -0.2670005088314752, -0.04760687919206397, -0.3137829156332985, 0.04106438412981419, 0.3689347453356511, 0.03256097086263596, 0.4342239659065471, -0.02160937448771497, 0.5121963228132351, 0.007270440886606282, 0.6066421962514198, -0.01221319300610655, -0.7234154012137514, -0.04013586770219741, 7.505393492740379, 2.207569919375577, -2.286495948142137, 0, 0, + 0, 0, 0, 0, -504.7004946877645, -960.8313859426444, 455.6868630884425, -0.0004564668894400728, 0.01953047220881932, 0.002110185308335535, -0.02552492771185354, -0.004910008054476974, 0.03185603230051105, 0.008867203935794236, -0.03876493903116766, -0.0140372793617222, 0.04650258449956125, 0.02052143233325077, -0.05533916645715601, -0.02846939294478852, 0.06557394899483331, 0.03808355296447862, -0.07754536439486578, -0.04962400720722794, 0.09164110934556451, 0.06341371783532462, -0.1083072609262454, -0.07984241792495486, 0.1280548395158984, -0.09936692302911229, -0.1514604665622404, -0.1225031219103813, 0.1791553196119899, -0.1498024404391789, -0.2117929820588376, -0.181800940883612, 0.2499814001970585, -0.2189235487704594, -0.2941578702525302, -0.2613208334101781, 0.3443825148816139, -0.3086165449914435, -0.4000320253108334, -0.3595628891688978, 0.4594100673703709, -0.4116578643958037, -0.519368340488319, -0.4608838085460648, 0.5751583010135386, -0.5018561564823436, -0.6208288964715706, -0.2890646136834312, 1.547039886853192, -1.173755403489903, -0.7985207315322997, -0.2625825083083085, -0.321674668942854, -0.1352159819750655, -0.1999732725283456, -0.07366734029347159, -0.1440615953055945, -0.0338692953389332, -0.1147504606082463, -0.005029712242208511, -0.1000175433858401, 0.01695421717090311, -0.09456233266164106, 0.03415869939464086, -0.09556433616678824, 0.04784697925863496, -0.101446550453596, 0.05887259823103022, -0.1113844111571908, 0.06784319765312669, -0.1250437127185277, -0.07520036620749675, 0.1424161499432856, 0.08126890147440424, -0.1637146453439622, 0.08629375258215478, -0.189312804562382, 0.09046906112313131, 0.2197194565251569, -0.09395994411067805, 0.2555854707181692, 0.09691288686658349, 0.2977431307518454, 0.09945154948260918, -0.3472856237053809, -0.1016514559138057, -0.4057014604005721, -0.1034872918659082, 0.475092530300298, -0.1047384672449806, -0.5585328441816623, -0.1048045105961936, -0.6606855376279177, 0.1023541847811403, -7.645111917964669, -2.444190547643892, 3.259474730743878, -1.113400990501543, 0, 0, + 0, 0, 0, 0, 0, 504.7005483880675, -960.8563426765877, -455.6810385506663, -0.0006211890719464708, -0.02717449361052982, 0.002624545711740859, 0.03409357098285602, -0.005942159106883158, -0.04143715413018739, 0.01059135423887447, 0.04948858776950704, -0.0166413313054562, -0.05854418379382578, 0.0242148610679564, 0.06892421088657538, -0.03349146754772453, -0.0809841818387797, 0.04471193925388908, 0.09512623948475284, -0.05818359115254906, -0.1118100512572915, 0.07428496523273895, 0.1315618312735884, -0.09346828354041023, 0.1549790152282817, 0.1162558426750438, 0.1827256545244234, -0.1432240256832661, 0.2155105496963288, 0.1749650364632709, 0.254035038834301, -0.212010638405861, 0.2988909563929731, 0.2546958843850197, 0.3503831721602568, -0.3029377534844611, 0.4082512041088586, 0.3559113648605111, 0.471283605276577, -0.411645725224325, 0.5368790186329719, 0.4666463388955495, 0.6007202940611962, -0.5157903324539884, 0.6568675698020393, 0.5528415071271306, 0.3819646735423662, -1.398313345247025, 1.702130138980118, 0.5594893184855516, 0.4345731607149444, 0.2047273101100171, 0.2544540474780775, 0.1063741954770327, 0.1778805766776483, 0.05255231548952451, 0.137900569051342, 0.01589144268877343, 0.1168704015342846, -0.01147530402843068, 0.1075993573348887, -0.03281602394973369, 0.1063490908368691, -0.04987312975903418, 0.1109852985003045, -0.06374396058252166, 0.1203212709282059, -0.07519208505179932, 0.1337915946504525, -0.08477768059074928, -0.1512472309045833, 0.09292245189830053, 0.1728188948893017, -0.09995295179709891, 0.1988310587279109, -0.1061338258071349, 0.2297560668874317, 0.1116956612897333, -0.2662028365209533, 0.1168534044651449, 0.3089378582466848, 0.1218148638037771, 0.3589424141807773, -0.1267685950073432, -0.417514018459675, -0.1318530493084198, -0.4864325194506035, 0.1370935903164596, -0.5682256141066142, -0.1422822434012505, -0.666604844323565, -0.1467513256218947, 7.839832839255147, -2.591992660256728, 3.08252939024389, -1.472235565518307, 1.200611269528463, 0, 0, + 0, 0, 0, 0, 0, 0, -504.7015918274936, -960.8824172487933, 455.6786628322481, -0.0001386040108547678, 0.02825899575001721, 0.00148000990419925, -0.03396816329492456, -0.003913391729580158, 0.03999719012865367, 0.007442680878789934, -0.04659090322133554, -0.0121162968680667, 0.05400401596298283, 0.01802786748313866, -0.06251037884950617, -0.02531818062112227, 0.07241227284910066, 0.03417801432480141, -0.0840495440103118, -0.04485119411434383, 0.09780784101480898, 0.05763670862206309, -0.1141246897988619, 0.07288798740446953, 0.1334907230535002, 0.09100549877450563, -0.1564413552584702, 0.1124168465460749, 0.1835312438634551, 0.1375347555217266, -0.2152794341013849, 0.1666789233629258, 0.2520679325404323, 0.1999435400148238, -0.2939734797154126, 0.2369931492869313, 0.3405172515888476, 0.2767850762901711, -0.390345045347925, 0.3172634202969561, 0.4409132592457857, 0.3551552329611432, -0.4883580204443008, 0.3861049626417496, 0.5278024954606876, 0.221653617736939, -1.310709133012781, 0.8704550092422116, 0.7079030635461785, 0.1843303003648327, 0.289142189894577, 0.0890031466634482, 0.183755046796533, 0.04093279509465775, 0.1369845466667406, 0.008027106857080303, 0.1140671851302532, -0.01733485053642101, 0.104231064513174, -0.03796088669959809, 0.1026821086919593, -0.05525696194664861, 0.1068620954451136, -0.07011029660696497, 0.115354075966287, -0.08317464933480107, 0.1274397517866654, -0.09497453954477812, 0.1428557674294213, 0.1059485191998991, -0.1616373931580192, -0.116473125434708, 0.184018627644066, -0.1268840153469689, 0.2103748991036934, -0.1374978332735491, -0.2412002758106563, 0.1486321821340762, -0.2771135831612571, -0.1606234825346388, -0.318894700017657, -0.173836022567292, 0.3675540114045308, 0.1886613027997724, 0.4244484685316806, 0.2055082541208365, -0.4914687718702396, 0.224768184994539, 0.571342364466508, 0.246749172743278, 7.942734281408671, -2.790996821413193, -3.416416824440133, 1.502698673759963, -2.74025012280437, 0.4374074524376139, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 504.7014268866499, -960.9091609078547, -455.6702009059838, -0.0004715858695197065, -0.03982840046737102, 0.00242224023844466, 0.04693804869973257, -0.005712413463266942, -0.05453060690126599, 0.01036142963375495, 0.06291484964449161, -0.0164440331698878, -0.07241520054585564, 0.02409153161862073, 0.08338313108173702, -0.03349426180113407, -0.09620848027332857, 0.04490493324477595, 0.1113301550654768, -0.0586415214773373, -0.1292450786759426, 0.07508828443695986, -0.150513154673022, -0.09469143119899404, -0.1757538991751067, 0.1179438613939318, -0.2056275754842778, -0.1453500537954308, -0.2407890904812533, 0.1773573065390127, -0.2817971004678554, -0.2142337181273538, -0.3289552292807281, 0.255870859960439, -0.3820621733814443, -0.3014962025572454, -0.4400643963200938, 0.34931588173307, -0.5006585522123436, -0.3961850233060456, -0.5599910362173445, 0.4375268333475068, -0.612726531008857, -0.4678122672345172, -0.3569120201451431, 1.18831598199679, -1.617583791352987, -0.4321697836882517, -0.4219085060089673, -0.1510420456331972, -0.25146678538168, -0.07059891849129137, -0.1807609333405698, -0.0240329511553917, -0.1456531311906457, 0.009769195529775603, -0.1290384618111746, 0.03669700570302369, -0.1238682627899927, 0.05912761689067447, -0.1264561589974369, 0.07833483431516959, -0.1347055607275304, 0.0951733797931347, -0.1474724563406544, 0.1103088335611947, -0.1642393157936116, 0.1242996284536155, 0.1849045503710836, -0.1376315559768252, -0.2096404850603622, 0.150739321415534, -0.2388041370692126, 0.1640310219820809, -0.2728910081209138, -0.1779123181778702, 0.3125232856726328, -0.1928113592711771, -0.3584705110456833, -0.2091969136508766, -0.4117030466307595, 0.2275912605111247, 0.4734858653437208, 0.2485748286117511, 0.5455291692123926, -0.272779071272836, 0.6302263498990262, 0.3008643534306304, 8.20707478604357, 2.932590880343228, 3.566301858755951, 1.591737361864661, -2.080954844450352, 1.063336818518452, -0.312693340165919, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -504.7034311398602, -960.9369925632403, 455.6692107057009, 0.0004356100354586218, 0.03860199096161918, 0.0003618838493967148, -0.04386380370370079, -0.002169347414784144, 0.04942525667989209, 0.004982545942080307, -0.05553497828831112, -0.008840601544025953, 0.0624511939178053, 0.01382568492204521, -0.07045040500021758, -0.0200635944222586, 0.07983573655308961, 0.02772464186081651, -0.09094444742633617, -0.03702388344715066, 0.1041536259789221, -0.04821924316984402, -0.1198819820124656, -0.06160445551722481, 0.1385840425022496, -0.07749220106038934, -0.1607306169402915, -0.09617998733441638, 0.1867658703825194, -0.1178877608692904, -0.2170271396260865, -0.1426531229291118, 0.2516110942742074, -0.1701709400072701, -0.2901735669785757, -0.1995766655123539, 0.33167198231666, -0.2292104536632618, -0.3741087211620817, -0.2564669531327498, 0.4144141160994378, -0.2779196790709351, -0.4486695658607398, -0.1585148155348832, 1.108326036371431, -0.5816638331406274, -0.6376460733569355, -0.1083863705122823, -0.2651532591988918, -0.04346268036180279, -0.1731791135747381, -0.007919955521890586, -0.1343419559206488, 0.01884997316493552, -0.1172998435413015, 0.04139686964273688, -0.1122109969614702, 0.0612644512371045, -0.1146390321312077, 0.07920415164364861, -0.1222036115318655, 0.09574062739795554, -0.1335955000566879, 0.111342587990221, -0.1481684801491999, 0.1264688165440626, -0.1657058794392267, -0.1415730034357649, 0.1862665137934408, 0.1571022793772566, -0.2100850895889454, 0.1735027646062021, -0.2375159098214737, 0.1912338107828908, 0.2690093363603886, -0.2107891668533592, 0.305116325619871, 0.232719244011093, 0.3465174314368482, 0.2576565915212616, -0.3940792105482042, -0.2863453006006712, -0.4489464059320039, -0.3196699442525448, 0.5126872859904976, -0.3587010976918096, -8.28272768639917, -3.069060360130142, 3.927691039870548, 1.671176660764354, 2.407455234884137, -0.8625377998571393, 2.482297646744782, 0.1292734700574192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7028824420881, -960.9653940857651, -455.6573959835257, -0.0001045342927213557, -0.05510952876884354, 0.001813256542621175, 0.06227481799574789, -0.004858797016936023, -0.07000242917077827, 0.009264808465575517, 0.07862878594870333, -0.01511232203008351, -0.08850890488940624, 0.02254001315406766, 0.1000277135969499, -0.03174536747972971, -0.1136106715000355, 0.04298556623718725, 0.1297326922178386, -0.05657684359155325, 0.1489234556474868, 0.07288927434017092, 0.1717652930940824, -0.09233189928394896, 0.198877283105147, 0.1153205669594968, 0.2308750852817715, -0.1422162239454809, 0.2682908269428334, 0.1732165788221063, 0.3114322670825245, -0.2081820549922315, 0.3601601689508011, 0.2463834229879688, 0.4135774742746823, -0.2861906631817055, 0.4696707079443848, 0.3247907144321164, 0.5250325498506966, -0.3581320852927125, 0.5749043514816392, 0.3813740651756898, 0.33559864255759, -0.975267052557106, 1.553286395488471, 0.2975654526534304, 0.4156488593431335, 0.09371170961137179, 0.2528219529681863, 0.0318602025876451, 0.1873286487076531, -0.007406320889202832, 0.1569749836318507, -0.03858434309919215, 0.144934740453739, -0.06545817090963257, 0.1441815831728718, -0.08945270328381889, 0.1510120365349771, -0.1113416651259841, 0.1633234601502849, -0.1317257394447766, 0.1799857228617523, -0.1511744615193794, 0.2005086220062386, -0.170257066128721, -0.2248204324462682, 0.1895400302751218, 0.2531160063974417, -0.2095887459424748, 0.2857621049048731, -0.2309786288335811, 0.3232475487327383, 0.2543197035673892, -0.3661698670568465, 0.2802839275652471, 0.4152519125737978, 0.3096388181156818, 0.4713879968706516, -0.3432857433502883, -0.5357238487236324, -0.3823039298241136, -0.6097820756813976, 0.4280142297040914, -8.593418202744859, -3.211955544343986, 4.01550610066904, -1.769542946482932, -2.385993943945727, -0.9351886806923488, 1.364050528322037, -0.9080040622263671, -0.4464199288967212, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7061722826078, -960.9950980825289, 455.6584934644936, 0.001353924213319257, 0.05069804235078336, -0.001403478172758728, -0.05531669887499667, 0.0005546746219488723, 0.0602176601279568, 0.001178736969878009, -0.06565366943648464, -0.003823298510146261, 0.07188614605884883, 0.007444087396122985, -0.07919288756514294, -0.0121433251462564, 0.08787498194637582, 0.01805863608944551, -0.09826218797222715, 0.02535989650826906, 0.1107152897665785, 0.0342421634090001, -0.1256225901932514, 0.04491137284146533, 0.1433858203414038, 0.05755711615621574, -0.1643879418622154, 0.07230425516591216, 0.1889319980546444, 0.08913300093328734, -0.2171379771443038, 0.107757891711349, 0.2487872536298442, 0.1274663214539597, -0.2831201330658301, 0.1469465463422727, 0.3186294299533511, 0.1641875797212851, -0.3529538909796769, 0.1765977012156841, 0.3830228392206152, 0.09923300750079445, -0.9387659102980379, 0.305398543764229, 0.5874526002501284, 0.03421711551743981, 0.2496160794636069, -0.00172104942964322, 0.1682097394146368, -0.02558725561576955, 0.1361268344344931, -0.04691707458719761, 0.1244564737090883, -0.06726669000070251, 0.1239690575086415, -0.08693811269512493, 0.1304369530627798, -0.1060389333362548, 0.141571663489697, -0.1247414524221453, 0.1561163886904096, -0.1433423840955047, 0.1734586694197238, -0.1622500485292275, 0.1933984716847243, 0.1819498382764446, -0.2159900192240643, -0.2029763815613684, 0.2414387822339389, -0.2259034630808185, 0.2700417931160715, -0.2513516107580024, -0.3021617326012637, 0.280007600114253, -0.3382255019637882, -0.3126552129313027, -0.3787429608129044, -0.3502182255490416, 0.4243439334152545, 0.3938138954989248, 0.4758372286628779, 0.4448387377462819, -8.646476556307604, 3.287657641880755, -4.395262558384979, 1.792030252359884, -2.73372973571881, -0.9241141660969929, -1.712422595404809, 0.4359874306747898, -2.432174107259886, -0.6397052114818167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7050978056665, -961.0251353455429, -455.6426293119019, 0.0005789714464947707, -0.07319751886662666, 0.0006207879061930474, 0.0802799735867732, -0.003129094635399184, -0.08803596071851463, 0.006975460706357075, 0.09683290373786249, -0.01224653915288706, -0.1070596332625383, 0.01908491954449565, 0.1191369742779648, -0.02768776308106317, -0.1335267149602703, 0.03830435886062355, -0.1507372943186485, -0.05122967843956672, -0.1713229356970986, 0.06678971375544743, -0.1958705963395601, -0.08531182846472353, -0.2249654793739225, 0.107069570838405, -0.2591211079527574, -0.1321872027422623, -0.2986553751625171, 0.160487669363109, -0.3434934131000018, -0.191273923827569, -0.3928906485362413, 0.2230621626353611, -0.4451099722739455, -0.2533460049820092, -0.4971642549076689, 0.2785681040388742, -0.5448315365001141, -0.2945449187820606, -0.3188523354151554, 0.7617168830174238, -1.512960882421318, -0.1565418889317566, -0.416770638188017, -0.0330371554958069, -0.2590939561072727, 0.009692898702806391, -0.1979815715767451, 0.04169344337350171, -0.1721638220045798, 0.07052530713197516, -0.1647923498418741, 0.09775169543831891, -0.1687258056803347, 0.1237881291548195, -0.1801639057873346, 0.1488794308490554, -0.1969463086568264, 0.1733613896964222, -0.2179209500175104, 0.1977104526182695, -0.242597178003689, 0.2225166824607487, 0.2709069147142353, -0.2484447312925564, -0.303039084913382, 0.2762089619529779, -0.3393348213625563, 0.3065757332901756, -0.3802323858876161, -0.3403810643090954, 0.4262480705852916, -0.3785664996638002, -0.4779857272391611, -0.4222285054438267, -0.5361702328195965, 0.4726795168378314, 0.6017042384742251, 0.5315431534297506, 8.988404257252103, -3.434234591407497, -4.436704087040918, 1.904958600463788, -2.667252960757383, 1.019315404694702, 1.553413773220462, 0.5240360258904643, -0.8521059937283484, 0.9531203463970385, 1.133055091391562, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7100346863414, -961.0567364446957, 455.646613143601, 0.002722295284934282, 0.06461681973477371, -0.004007947943993217, -0.0683635324772939, 0.004536694220093283, 0.07238640000970466, -0.00433430930478059, -0.07694262150014541, 0.003392025878594218, 0.08229618144787393, -0.001670278858418917, -0.0887242115986121, -0.0008975016974408089, 0.09652212032887546, -0.004400201670914741, -0.1060064440564509, -0.008941741499294128, 0.1175134358385135, -0.01462879396175798, -0.1313898772830384, -0.02154950721841662, 0.1479705007616418, -0.02973757948750487, -0.1675338272440166, -0.03911447566452358, 0.1902263373250469, -0.0494038851796016, -0.2159464070642364, -0.06002011198536771, 0.24419037399957, -0.06995441855483667, -0.2738896861740276, -0.0777218007125729, 0.3033115380943844, -0.08147776924470845, -0.3301302888852998, -0.04342138832490353, 0.800108427299287, -0.04000732313755277, -0.5563775145367175, 0.03855669146460623, -0.2421457122014047, 0.04673467675853111, -0.1685947713495393, 0.05966925766215405, -0.1421356546813504, 0.07617060670611064, -0.1353431117620796, 0.09486340695112068, -0.1392947724748802, 0.1148236878882152, -0.1498272473624081, 0.1355229389653643, -0.1646584030588876, 0.1567892967260354, -0.1825265390991063, 0.1787580887629875, -0.2028097674378218, 0.2017993595211208, -0.2252868325806165, -0.2264439082886397, 0.2499694264649327, 0.2533278498840449, -0.2769901080244833, 0.2831665936584349, -0.3065367197788879, 0.31675352352134, 0.3388193022269569, -0.354979335807952, 0.3740594600432878, 0.3988728455325729, 0.412493048200239, 0.4496557166350698, -0.454379410749675, -0.5088325604398763, -9.020420590072227, -3.450565579378631, -4.828910565671182, -1.874110745373426, 3.031455262150587, -0.9554280057985601, 1.918824600147808, 0.4370410894016331, 1.245159522031377, -0.1566307455549422, 2.552719012229264, 1.137055157228564, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7083084832581, -961.088403701372, -455.6259949644748, 0.001693462288155773, -0.09425609907144253, -0.00135812958186467, 0.1011210298209119, -0.0002358251806337989, -0.1088168511442754, 0.003123702470935177, 0.117746189310862, -0.007394509226016558, -0.1283352037931964, 0.01318721808082886, 0.1410426164823464, -0.02068614552863905, 0.1563657899240353, 0.03011316521908753, 0.1748410515523016, -0.04171287552624901, 0.1970333700401475, 0.05572504926140202, 0.2235071819563995, -0.07233534673786346, 0.2547659637536581, 0.09159167502337025, 0.2911438853529135, -0.1132728046470395, 0.3326320892944551, 0.1367013692972142, 0.3786326012788764, -0.1605193483772494, 0.4276675386247564, 0.1824972953091496, 0.4771381978993297, -0.199534230207109, 0.5233118023773972, 0.2080647751939719, 0.3071312523515405, -0.549473955438997, 1.498520087318462, 0.00989782058163087, 0.4257392836989572, -0.03066419348029967, 0.27053141082994, -0.05385429393158369, 0.2128586455021746, -0.07865838364579553, 0.1912804624944068, -0.1054218514397032, 0.1886052588272439, -0.1333817841205637, 0.1974301330414755, -0.1618922650232225, 0.2137720478898956, -0.1906429188221663, 0.2353555123291881, -0.2196953036046989, 0.2609640871623732, -0.2494334138871651, 0.2900702342300163, -0.2804781709204113, -0.3225735541543351, 0.3136051709871521, 0.3586152379559984, -0.3496963324210602, 0.3984605855948943, -0.3897237334354889, 0.442433754373803, 0.4347674252373997, -0.4908899809534614, 0.48605633051341, 0.5442128827277137, 0.5450303291374311, 0.6028273664098085, -0.6134359722665157, -9.383238747186924, -3.600916739919184, 4.832694315608912, 2.003470413821713, 2.931212798765991, -1.076233974356122, 1.727556840630514, -0.5584158153153711, -0.9677000168663793, -0.2850220760337975, 0.4848137226350174, -1.162124180800043, -1.793676268616248, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7153141286621, -961.1217498954065, 455.6338248564796, 0.004666236513345801, 0.08033835876549655, -0.007676437270062325, -0.08295141844108442, 0.01009977011228604, 0.0858558666115623, -0.01197879976722524, -0.08931330796488612, 0.01333079539699938, 0.09358896098647876, -0.01415383176294858, -0.09895648285762505, -0.0144330727549111, 0.1057012528087135, -0.01414858625643324, -0.114120817737291, -0.01328610322696056, 0.1245201008433383, -0.01185312169985896, -0.1371974259500803, -0.009903932278386084, 0.1524155095853953, -0.007577483035196663, -0.170349858019879, -0.005151094173442019, 0.1910076219888127, -0.003106911843602696, -0.2141162385930753, -0.00219223603220216, 0.2389982098664602, -0.003428653267689329, -0.2644761408819428, -0.007993135284190185, 0.2888757583999775, -0.009238357725273051, -0.689494763421366, -0.2155878440195048, 0.5426652421405607, -0.1100760809768825, 0.2419872852187903, -0.0915757211308498, 0.1738068042043262, -0.09421490159299305, 0.1519131253021238, -0.1063902295366557, 0.1495062851706462, -0.1238496488930524, 0.1576921868225562, -0.144457445676418, 0.1722377145797942, -0.1670559652778887, 0.1907853469363053, -0.1911367180744256, 0.2120098595295308, -0.2166813899045869, 0.2352309624985876, -0.2440312262325445, 0.2601594028118362, 0.2737719046620724, -0.2867127897537385, -0.3066513544997664, 0.3148910096033804, -0.3435341329051073, 0.3446994182012239, -0.3853912741508331, -0.3761050372799959, 0.4333221867749439, -0.4090113357290798, -0.4885956544839816, -0.4432370036767068, -0.5527297958804152, 9.393725843325772, 3.559142669539414, -5.233438534663443, 1.922140772052916, 3.30916008332548, 0.9639922588619462, -2.108426983838054, 0.4210596150978028, -1.37488546401417, -0.126172291118237, -0.9417910946035264, -0.02489482226941209, -2.820413837240554, -1.65719959391188, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.712822627705, -961.1549732256356, -455.6077127096619, 0.003370363513768094, -0.1184233948149237, -0.004352589134933815, 0.1249488727742578, 0.004142598150015885, -0.1325266147065525, -0.002702309633903203, 0.1415989061506627, -5.193242257853952e-05, -0.1526322638582052, 0.004242516041704322, -0.1661238420831387, -0.01002108162905441, -0.1826028877145596, 0.01755321339895132, -0.2026229299653129, -0.02699257791731359, -0.2267375503327169, 0.03843678368101805, -0.2554486834745714, -0.05185463742576753, -0.2891125143344822, 0.06697380838544749, -0.3277869557881715, -0.08312340296797521, -0.3710132247776353, 0.09904931306822057, -0.4175532297672665, -0.1127668418736266, -0.4651618147564519, 0.121590215262521, -0.510544244533257, -0.1225288992181756, -0.3005345609258526, 0.3399230830669571, -1.510041866246306, 0.1414029629131923, -0.4424813889986434, 0.0969566625439009, -0.287030472441386, 0.1002877273344002, -0.2318097264729576, 0.1179696537132148, -0.2141130560573038, 0.1428989401173152, -0.216085496212976, 0.1718969363526398, -0.2299160646037506, 0.2032113426057577, -0.2513516264549205, 0.2359542056548815, -0.2779404049836417, 0.269903604489502, -0.3083522861668259, 0.3053525231567537, -0.3419775604673035, 0.3429586234253998, 0.3786342689363086, -0.3836208986559502, -0.4183589706424067, 0.4283986271914125, -0.4612706968478629, 0.4784824630112978, -0.5074923782141396, -0.5352066248608507, 0.5571092548388775, -0.6000923998546913, -0.6101471292691906, -0.6749305319888952, -9.770051112346868, 3.712532157622387, -5.204107151313059, 2.068330691047585, -3.18125125479366, -1.111446716858055, -1.892155190902516, 0.5769109527951105, -1.074175671579627, 0.2964457689798568, 0.5539281293589068, 0.1648327863802309, -0.2172096485697859, 1.512241614146546, 2.467635656276092, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7224116592663, -961.1902571610938, 455.6205915183505, 0.007332560323131098, 0.09772650675515225, -0.01266681647409895, -0.09890946144936448, 0.01761061930967164, 0.1004319663138764, -0.02223151529100917, -0.1025589734040736, 0.02658527800478494, 0.1055543905435332, 0.0307240137177325, -0.1096846360720932, 0.03470480005138991, 0.1152206928700177, 0.03859926962869588, -0.1224372229859417, 0.04250540794695284, 0.1316063042861069, 0.04656276217394649, -0.1429819416890049, 0.05097254854312608, 0.156770043109164, 0.05602256159687267, -0.1730781884191307, 0.06211263471333318, 0.1918417495221531, 0.06976604123079083, -0.212731221653107, 0.07959687794489242, 0.2350594264866488, 0.09218568189114314, -0.2577207095948243, 0.05895216380708893, 0.6030344606072978, 0.4616425346359402, -0.5436208097610066, 0.1801615878388285, -0.2479542818639472, 0.1359942495801694, -0.1829951211861444, 0.1288696776689487, -0.1647070482516714, 0.1370851711017615, -0.166186009742888, 0.1535729004651733, -0.1783286433187104, 0.175004017949945, -0.1967160001753221, 0.1996016370756137, -0.2188405755084354, 0.2265274150255044, -0.2432545072656078, 0.255616995167631, -0.2691644778819984, 0.287188623645841, -0.296154558573445, -0.3218894031796202, 0.3239813218519342, 0.3605820289961011, -0.3524309991867358, 0.404281451485633, -0.3812277505186181, 0.4541373257413515, 0.4099740685595717, -0.5114462459203447, 0.4381037210394499, 0.5777085075240355, 9.757187794715053, 3.613965379149533, 5.610766740550909, -1.938835199033022, 3.571436149045066, -0.9542168243229318, -2.288013661621963, -0.3938480967566447, 1.496351683252224, -0.08808345484880223, 1.023046330373567, -0.06957848752644458, 0.7559950874575174, 0.1446377341673701, 3.223159785518482, 2.231109599751307, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7190540960186, -961.2250192748934, -455.588180522695, 0.005760119451667827, -0.1458018459472323, -0.008617871967446157, 0.1518886251707371, 0.01036045836723483, -0.1593339434673855, -0.01095512117368798, 0.168623432319206, 0.01033715383235535, 0.1802652315855236, -0.008421308021689847, 0.194792393053006, 0.005117854913200912, 0.2127573865763628, -0.0003573018673901766, 0.2347123846839292, -0.005870115341541783, 0.2611655306170398, 0.0134514921104915, 0.2924997329898752, -0.02205646148738518, 0.3288391697120372, 0.03100724814840945, 0.3698554289066493, -0.0391314172858762, 0.4145293741812473, 0.04465629171074397, 0.4609333830920124, -0.04526915247447261, 0.5061591284697164, 0.03850943070266388, 0.2988211434046964, -0.1343140034874617, 1.545791848932921, -0.2960335360025335, 0.4663736910206594, -0.1651993031618597, 0.3081206807361616, -0.148466528783414, 0.2543776892222589, -0.1590822972569348, 0.2401547949000193, -0.1823264347853362, 0.2466363598796981, -0.2125374666877397, 0.2654664586167893, -0.2468230014420065, 0.2920378799634734, -0.28369945780944, 0.3236595023368128, -0.3226554917179421, 0.3588325700155615, -0.3638932634463122, 0.3968084947760234, -0.4081139430426112, -0.4372603761207967, 0.4563448325195634, 0.4800432615153861, -0.5098306130089106, 0.5250360251830816, -0.5699872792909377, 0.5720443097383854, 0.6384042472680606, -0.620739093955173, 0.7168958955657478, 10.1416026925784, 3.769624166608563, -5.550197612007544, -2.101714625470462, 3.418765229089471, -1.128530918815057, 2.05030202920546, 0.5843666730352316, 1.176141611311618, -0.2998770983489928, 0.6178281648963292, -0.1687738124565776, -0.2572515070648175, -0.1256951327451982, 0.01616907141314794, -1.992214070149926, -3.189662381847132, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7318794445075, -961.2622111936237, 455.6076615218215, 0.01089221138384335, 0.1164944818989575, -0.01927027124317406, -0.1159105114196266, 0.02747804138380453, 0.1157590237274542, -0.03562101111504409, -0.1163053571198556, -0.04381054622555893, 0.11780798689624, -0.05217348627038508, -0.1205218765117039, -0.06086108892227842, 0.1247010612781868, -0.07005691264492792, -0.1305992812196758, -0.07998336769309033, 0.1384666763445831, -0.09090568207321333, -0.148539099266325, -0.103130632313689, 0.1610155426830076, -0.1169945067947107, -0.1760175642549749, -0.1328292092990493, 0.1935251760227961, -0.1508900371219247, -0.2132847544560474, -0.1712230826203191, 0.2346889242553419, -0.1057755931109957, -0.5357642487146973, -0.6973878233988416, 0.5555297188556486, -0.2482482426823123, 0.2583893820691848, -0.1794481217099651, 0.1949556011152848, -0.1629964039187765, 0.1794404990383949, -0.167454966242039, 0.1842879058626768, -0.1830230404376604, 0.2000060175644817, -0.205209645685749, 0.2218995693363221, -0.2316338998877495, 0.2472470804664445, -0.2611383861136601, 0.2744206707423583, -0.2934188634283356, 0.3024520161486941, -0.3287766158418658, 0.330727168992488, 0.3679203274465594, -0.3587549762608285, -0.4118259797084023, 0.3860024176740223, -0.4616568968449378, 0.4117833750068759, -0.5187284681093876, -0.4351768010753159, 0.5845252467597436, -10.10272037837622, -3.615759296992346, 5.961002309639331, -1.925982279272278, -3.820398085376841, 0.9288290974303622, -2.461282861258473, 0.3588964134966156, 1.614524108256882, 0.04643312460190491, -1.101929869918408, -0.1156934037864506, -0.8069532966049089, 0.1939414294536783, -0.6549974120119686, -0.2285123742746999, -3.758505654153285, -2.887002774786242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7275737129024, -961.2986900862034, -455.5680475291849, 0.00903586301318594, -0.1764481378529507, -0.01443633323006236, 0.1820293926317921, 0.01880447073763833, -0.1893830763324559, -0.02212739922183875, -0.1990394755651686, 0.02438113653662378, -0.2115459961113778, -0.02554785138683405, -0.2274636911241468, 0.02563963642219436, -0.2473516518290995, -0.02473404186599173, -0.271730510328668, 0.02302808689174882, -0.3010128812352733, -0.02091691897707183, -0.3353869095894007, 0.01909834439431709, -0.3746441757811209, -0.01868481784601551, -0.4179627386782013, 0.02126895992019769, -0.4636967305855159, -0.02883173464380446, -0.5092745443586736, 0.04334833925615389, -0.3014407655914791, -0.06601281923988526, -1.602324544766366, 0.4521688717502506, -0.4962602535568542, 0.2344899085974771, -0.3329721059649142, 0.1976354384687227, -0.2798012120081235, 0.201207847611257, -0.2686044483634154, 0.2227918565877333, -0.2793525517309335, 0.254208949035389, -0.3030265762539144, 0.2914075927648672, -0.3345889425740216, 0.3323002062548046, -0.3710472412454519, 0.376082825113517, -0.410672419727643, 0.4228703215020564, -0.4525090987053563, 0.4734101217025521, 0.4960038585709059, -0.5288630443220137, -0.5407310407243179, 0.5906642373893218, -0.5862073308755801, 0.6604544266659836, -0.631770882164199, -0.7400800113225439, 10.4912498465414, -3.773373232627433, 5.869292321428817, -2.105388476297262, 3.643747899009217, 1.129947070197685, -2.20333116034871, 0.5839586073720042, -1.276059903111896, -0.299240532723705, -0.6800685739125477, 0.1698588504724025, -0.2942327379600606, 0.1304150900865758, 0.03800351903695634, 0.1417197104665032, 0.1425294782604167, 2.600515797914067, 3.992077820801224, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7444899137037, -961.3378869284877, 455.5961766575729, 0.01554496586389417, 0.1361607262454429, -0.02781289414814694, -0.1334206115553933, 0.04015195437573545, 0.1312610252962056, 0.0527238328643537, -0.1299420806015547, 0.06571735393480846, 0.1297113267134137, 0.07935679284872428, -0.1308093221619015, 0.09390646392500906, 0.1334765342836597, 0.1096692934744826, -0.137961097981063, 0.1269759901739711, 0.1445257840878497, 0.1461596796124059, -0.1534505818065084, 0.1675090650339144, 0.1650223724407157, 0.1911922811662067, -0.1794965959880791, 0.2171469054347325, 0.1970054498924576, 0.2449372580636083, -0.2173831194355537, 0.1495893184212565, 0.4816785595258409, 0.9209202815588715, -0.5736517097497067, 0.313353604698171, -0.2711605588560934, 0.221082155663423, -0.2081281229339226, 0.195658000237407, -0.1947111978907778, 0.1963739070246782, -0.2023853087811128, 0.2108169700402979, -0.2211665513822386, 0.2333844452691181, -0.2460259436412557, 0.2611196517524419, -0.2739795084733933, 0.2925613936013013, -0.3031638285603235, 0.3272759615201772, -0.3323671520526524, 0.3655494198939995, -0.3606901700963588, -0.4081518881755232, 0.3872850919084128, 0.4561704112264385, -0.411165351471291, 0.5109046669029912, -0.4310695720851319, 0.5738286008172455, 10.42318783741847, -3.566018330179493, -6.283039963892671, 1.885086978417805, -4.056461148196111, 0.8896096623583637, 2.629879524658232, -0.3183134586090979, 1.732009409551348, -0.003597002249112677, -1.181752365540581, 0.1607426656367353, 0.8594318003331071, 0.2409887971627989, 0.6872601018528763, -0.2776927275225095, 0.6162945944580821, 0.2949229569475111, 4.432330830999809, 3.652258417704127, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7391854477888, -961.3761134831929, -455.5483160115629, 0.01339975427289111, -0.2103617083669475, -0.02212129334677451, 0.2154107935057459, 0.02989586468758025, 0.2227762054914026, -0.03675410570225757, 0.233029559420389, 0.04274488714190522, 0.2467489261215965, -0.04795860482498126, 0.2645069025107166, 0.05255917574259697, 0.2868406962417143, -0.05682989248602897, 0.3141931378633969, 0.06123725611583161, 0.3468116005115335, -0.06651167350925496, 0.3845953195758418, 0.07372631291715646, 0.4268969633578305, -0.084324035113474, 0.472317693749994, 0.09999329127000312, 0.5185766012306021, -0.122267111761034, 0.3075794130567557, 0.2594922311530679, 1.674677840688869, -0.6074411217165189, 0.530504621157434, -0.3036489093269464, 0.3604292259290603, -0.2468040165898022, 0.3070437102038547, -0.2433124059830945, 0.2983965063767964, -0.2631034380950553, 0.3130548980457453, -0.2954872738506904, 0.3412458946213262, -0.3352576648480358, 0.3774381296472452, -0.3797257621045876, 0.4182777341843855, -0.4278008133993835, 0.4617385983648974, -0.4795135491180799, 0.5065767007844517, -0.5356633184142464, -0.5519108635118929, 0.5975519447496171, 0.5969093166328796, -0.6668064787959627, 0.6405721802139768, -0.7452989581305071, 10.81295073151522, 3.725997667527157, 6.159022350342218, 2.081113170768998, -3.855102702242159, 1.117501368797665, -2.351235823926313, -0.5777697467504209, 1.374856223267653, -0.29701181947491, 0.7424138377886643, 0.1710585953742098, 0.330797445008233, -0.1353650627227564, 0.0576408564358677, -0.1510793503432264, 0.1322861784530395, -0.1959399824468592, -0.2765948893642101, -3.344039432155814, -4.906745836243842, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7613365642291, -961.4178098908683, 455.5878220684487, 0.02152739456950745, 0.155990589845504, -0.03865954626620611, -0.1506307363154621, -0.05612307601046214, 0.1460612037459447, -0.07415968563775244, -0.1425284489543925, -0.09305949879988605, 0.1402637839647557, -0.1131625092824421, -0.1394959528064121, -0.1348497243264618, 0.1404692206213771, -0.1585184900258227, -0.1434668149614358, -0.1845343498098827, 0.1488370709744961, -0.2131515106483328, -0.1570114703269528, -0.2443967819326662, 0.168490761061717, -0.2779233867878602, -0.1837542375722553, -0.3128574421494117, 0.203035425587468, -0.1900946734061147, -0.433834219025143, -1.129221067589957, 0.5923000478378968, -0.3740906900280064, 0.2836979264745814, -0.2597387711190001, 0.22062681445908, -0.2256295048723918, 0.2088235792854549, -0.2224048277552317, 0.2187578425407568, -0.2352143633671168, 0.2399405360599269, -0.2574227677607072, 0.2669932721109848, -0.2855421185023375, 0.2966388173566911, -0.317835119944384, 0.3267272928345747, -0.3537499822930283, 0.35572663703428, -0.3935627878927179, 0.382347718395156, 0.4381069694359088, -0.4052516396076142, -0.4885743991703206, 0.4228306365409398, -0.546400243704626, 10.7123505563827, -3.467401368528632, 6.574905698665654, 1.817773117729432, 4.278777619641925, -0.8378218541754415, 2.793944829112401, -0.2733177456826802, -1.849759245051467, -0.03915110965119177, -1.264069361132026, -0.2034284048409766, 0.9153371450385213, -0.2846049852576992, -0.7235404151249138, -0.3227953515570327, -0.637237958096172, 0.342187055210012, -0.6250483028853673, -0.3568764257507016, -5.257937304882959, -4.55508554936837, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7550364030109, -961.4583496977284, -455.530480379083, 0.0190938476296795, -0.2474730170941161, -0.0320248394429458, -0.2520068723070391, 0.04409746139951185, -0.2595497997911581, -0.05542064500866747, -0.2707037328264438, 0.06615890175647458, -0.2860590669957729, -0.07656112549161879, -0.3061707763092542, 0.08699898599850459, -0.3315091701035143, -0.09801668999733169, -0.3623728933478695, 0.1103893488200521, -0.3987539286431652, -0.1251703436227577, -0.4401558607610471, 0.1436810276293193, -0.4853934971597049, -0.1673540627022936, -0.5324352881075169, 0.1973214093273239, -0.3162259135719306, -0.4443061610633235, -1.756700779373999, 0.7590020979393318, -0.5670900504193579, 0.3712553167121694, -0.3890806275027168, 0.2947777467691565, -0.3348571513627888, 0.2841510646953452, -0.3282692231155715, 0.3018275022954646, -0.3463689030326972, 0.3346649164831056, -0.3785725697111055, 0.3763313412808598, -0.418806990424517, 0.4235591970882376, -0.4633012783675338, 0.4749833840580253, -0.5096588677124098, 0.5305616262560031, -0.5562508167799632, 0.5911571677427112, 0.6017445089562359, -0.658220168495264, -0.6447469122637461, 0.7335866606257689, -11.10138605254825, 3.631034314442978, 6.416520283055733, -2.030929045438653, -4.050883210517207, -1.09263234274095, 2.492947931639272, -0.5671254785083639, 1.472262538497965, 0.294648565121288, -0.8053212026371659, 0.1740959578194711, -0.3680979667177443, -0.1426477808213935, -0.07701400313898601, 0.1623356308255878, 0.1242639559307309, 0.2112653724844634, -0.2740335801422096, 0.2779853011318764, 0.3991136330708569, 4.237178417243852, 5.966755879689668, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.7839768955486, -961.5031356303735, 455.5850306639925, 0.02912480258648458, 0.1749203040042703, 0.05222060442792607, -0.1663669930730279, 0.07592414985531605, 0.1588763076469116, 0.1005831663097198, -0.1526711551376601, 0.1266078291343768, 0.1479660097637017, 0.1544547454180628, -0.1449948514511539, 0.1845887043750316, 0.1440505633533104, 0.2174126453759208, -0.1455339392818743, 0.253156701007274, 0.1499995768662069, 0.2917237939532877, -0.1581666783968385, 0.3325088566360749, 0.1708317017743966, 0.3742344872602825, -0.188600178511197, 0.2268316604370843, 0.3845480392234077, 1.318322244561246, -0.6050237732153305, 0.428731430577431, -0.2930800029727587, 0.2940064673796119, -0.2303095703759141, 0.2514426080702059, -0.2198597838188783, 0.2438453429385534, -0.2314722939759387, 0.2541700231595779, -0.2542443363261532, 0.2748630106477523, -0.2824784951384094, 0.3019732811307502, -0.3125960540799213, 0.3335263049897976, -0.342113632573852, 0.3688741680327827, -0.3690936466192343, 0.4082952782635644, -0.3917330876661867, -0.4526883946043698, 0.4080384200378837, 0.5033598302349126, -10.96490758246675, 3.324010782640217, 6.833995337770606, 1.726068427677496, -4.485538946284208, -0.7744900179888866, -2.952462441243869, 0.2245238076687357, -1.96746806450077, -0.08132430877219025, 1.349148411398959, 0.2433017034817874, 0.9753204169954288, 0.3244179414574758, -0.7646022741758332, 0.3636921476151955, 0.6637918690093022, 0.3848718174085247, 0.6393750651856561, -0.402120829041611, 0.672076261839223, 0.4236321878220717, 6.255464776858338, 5.625936364814542, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.7767711685316, -961.5466022439307, -455.5167169920276, 0.02641646045759053, 0.2876293875521561, -0.04455269836068995, 0.2917046426611087, 0.06192864199017718, 0.2996413203859867, -0.07877768540105098, 0.3120491459019933, 0.09543210301352055, 0.3294985036302559, -0.1123540725858994, 0.3524803724007334, 0.1301721006693483, 0.3813326175940071, -0.1497179815896551, 0.4161216500474114, 0.1720439307471236, 0.456476553154757, -0.1983762992393827, 0.5013934945639351, 0.229926008851196, 0.5490538865200292, -0.2674630790920627, 0.3262584781762246, 0.6184594756429348, 1.841505465819113, -0.9036920907968744, 0.6037649288986811, -0.435730331781932, 0.4173633503092889, -0.3402273078184248, 0.3618792001829753, -0.3223329221765415, 0.3568694292734518, -0.3373610302359374, 0.3778471175268359, -0.3698307686701466, 0.4133989349283659, -0.4123481977579463, 0.4568802691238098, -0.4611046705689894, 0.5040519090114971, -0.5144902166835649, 0.5520670643889852, -0.5724133548481751, 0.5987991975851327, -0.6358180460131468, -0.6423152491290044, 0.7063313713285493, 11.35202456455329, -3.493500196224254, -6.638568150183083, -1.957344673859988, -4.228485425971068, 1.056606712337717, 2.626551471527081, 0.5527901502998748, -1.5670524346359, 0.2928237369304179, -0.8682190156229788, -0.1797627572714807, 0.4061836395463059, -0.1532886909026603, 0.09679996807476349, 0.1768465936273609, -0.1170417081935488, -0.2292432522445197, -0.2742907297354369, -0.2992562708270863, 0.40201700883393, -0.38229571927536, -0.5200048155415438, -5.301175868637563, -7.207800765406747, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.8146309446975, -961.5954948017205, 455.5912580995108, -0.03868887300459015, 0.1914593508419486, -0.06896288380706332, -0.1789757931782649, -0.1001298844401407, 0.1678836436039876, -0.1326643353856479, -0.1583758389218828, -0.1670959289351405, 0.1506643220501891, -0.2039577762706567, -0.1450354518997625, -0.2436945939407161, 0.1419222648546592, -0.286520727014479, -0.1419791043669855, -0.3322284769841388, 0.1461191154367376, -0.3799736358824325, -0.1554340998005074, -0.4281019938694952, 0.1708890736518134, -0.2592200631304444, -0.3256852567521202, -1.483625349429867, 0.6048929864489581, -0.4753236422915989, 0.2961694592646632, -0.3223046209916502, 0.2348874153138894, -0.2714626999105824, 0.2257895769533033, -0.2588066214268311, 0.2385080365992549, -0.2654198271110554, 0.2619285315116793, -0.2829866644015172, 0.2901165131905762, -0.3071846631133203, 0.3192058852536734, -0.3358595624892154, 0.3463380609514268, -0.3683054470711298, 0.3690746037927644, -0.4048218311662792, 0.3849522860948287, 0.4463965618803197, -11.17658830910763, -3.141599888182389, -7.057308180610275, -1.612632569840935, -4.674228358739717, -0.7006254562246356, 3.103524645986586, 0.1721449712789752, 2.083843108349515, 0.1230344465499392, 1.436244916006413, 0.2805779655633087, -1.039058835442039, -0.3606873771771562, -0.8103535254099236, -0.4007449405027154, 0.6957974817861713, -0.4236310613634878, -0.6603595623427048, -0.4431665472145394, -0.6828038414913131, 0.4676302900407178, -0.7523362731509651, -0.5019606323960604, -7.451487262070271, -6.898592890440204, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.8067442478319, -961.6430987511887, 455.5101352313706, 0.03574672013766993, -0.3305806211988256, -0.06018793703629798, -0.3342789822135747, 0.08398862072600807, -0.3428477394831397, -0.1075626639881692, -0.3568661462114826, 0.1314655734088672, -0.3768341259425303, -0.1564176785432246, -0.4031115942603709, 0.1833201534769062, -0.4358166092177098, -0.2132428552839921, -0.4746756170442514, 0.2473424911876484, -0.5188341233287944, -0.2866404669967078, -0.566654544358885, 0.3315822789153745, -0.3365523808315161, -0.7799477365989287, -1.92204447761313, 1.038304945171675, -0.6382333295246007, 0.4954672252621077, -0.4437009237950818, 0.3817879746615038, -0.3867630435618042, 0.3564182943353214, -0.3828941956014584, 0.3680304652111646, -0.4061335779417263, 0.3989834362533684, -0.4442583228007695, 0.4409123847406293, -0.4900404834181868, 0.4895313969246102, -0.5387255048657738, 0.5430334536942414, -0.5869290800627904, 0.6013145526212335, -0.6318954893637412, 0.6654442464724272, 11.56123863009346, -3.319983549512171, 6.821845065194244, 1.863466932603496, 4.38488470063812, 1.01067094368389, 2.749511386838089, -0.5351194258268466, -1.657256920227764, -0.2915679928571555, 0.9297221747564861, -0.1880812619045127, 0.4442416560586033, 0.167463535694055, -0.1167505114866327, 0.1950254755353985, 0.1102695455592749, -0.2505965089753026, 0.2762752306336164, 0.3233977751863117, 0.4086760961549661, 0.4088566255401637, -0.527180830087615, 0.5067736816255463, 0.6471037120006224, 6.563582277433596, 8.669169878915001, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.8564496879252, -961.6978071512939, -455.611344166528, -0.05065962634433919, -0.2035667717073716, -0.08941939694818055, 0.1861819141070234, -0.1293463728361657, -0.1705641231959824, -0.1710413062870665, 0.1568853187052691, -0.2151073082088822, -0.1454027021144876, -0.2620355483771115, 0.1365557074206818, -0.3120320827642339, -0.1310718629875927, -0.364788555337083, 0.1300347438234267, -0.4192352859893375, -0.1348167335882609, -0.473360750181653, 0.1467438213440089, -0.2866158909387535, -0.2490263897518478, -1.620329947670383, 0.5848677254506903, -0.5118461330390914, 0.2897889114975229, -0.3429946413052233, 0.2320656306481047, -0.2839885316813635, 0.2246136703445073, -0.2653143559437961, 0.2379182651793468, -0.2665902029177392, 0.2609701715451156, -0.2789374326510159, 0.2877297688810677, -0.2977825578364603, 0.3140810644157221, -0.3208740171767074, 0.3367519648803812, -0.347497849625001, 0.3526960178041265, -0.3780240749856291, 11.34415339639681, 2.9276728518795, 7.241716186208386, -1.480912627484681, -4.841851735919054, -0.6174008600345655, -3.244551359081532, -0.1161699839121046, 2.196810963053788, -0.1648403832407603, 1.52378878614412, 0.3160144776303719, 1.105419207445201, 0.3942117305648183, -0.8599720166997633, -0.4347652751226382, -0.7325429176455468, -0.4593657200668957, 0.6870715556985062, -0.4812114897627066, -0.7009216608316468, -0.5083517726327081, -0.7613887957889477, 0.5458417512230326, -0.8637959811793713, -0.5970603500508016, -8.878579618167663, -8.41079729749319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.8483022209899, -961.7515375401339, -455.515103378266, 0.04757600714722041, 0.3759601994912693, -0.07952182508355922, 0.3793600134854735, 0.1109858526574028, 0.3887731574427825, -0.1426212566623932, 0.4046909058892191, 0.1752498328905884, 0.4274717745852317, -0.2098572245667174, 0.4572568690190124, 0.2475512176980405, 0.4938376701380627, -0.2894449308435921, 0.5364758189264845, 0.3364018036152697, 0.5836858088124017, -0.3885795342274033, 0.3460998677017337, 0.9269607883637689, 1.991751849844172, -1.159894903453939, 0.6683678480468542, -0.5489774865143997, 0.4666584984984303, -0.4181743697237709, 0.4083256137378595, -0.3850224904055522, 0.4052531090492756, -0.3922030940012985, 0.430154764416738, -0.4201452172640414, 0.4700533145873315, -0.4596423877934347, 0.5171413042952349, -0.5060190814650223, 0.5661040793608841, -0.5573376710742627, 0.6129220747774261, -0.6135503322915893, 11.72621780801965, -3.118567404640785, 6.963211382717763, 1.75302164155703, -4.516867569899999, -0.9561071819941682, -2.858888666291709, -0.5141429755265274, -1.740364185208108, 0.2903667692240343, 0.9878145752430977, 0.1983973188452912, -0.4807765726797618, 0.1846015909228558, -0.1358948953187996, -0.2164957212324468, -0.1043808041537456, -0.2751935128773355, -0.279826746444909, 0.3505627343904102, -0.4181686778299342, -0.4382062477600169, -0.5392140048606524, -0.5377014109662097, 0.6579315820212267, -0.6517663504946155, -0.7869275609113959, -8.05753646041288, -10.39414405360874, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.9138637696153, -961.8143515653112, 455.6519677186474, -0.065587947208334, 0.2085029215343718, -0.1141904493380159, -0.1849281174071089, -0.16417292084848, 0.1635422401442634, -0.2162120711863979, -0.1445429665498645, -0.2708523356285875, 0.128343198787713, -0.3282995933633563, -0.115712162032152, -0.3881537124649574, 0.1078796554266659, -0.4491292094201663, -0.1064891874455163, -0.5088711427777188, 0.113241647884544, -0.3083741181691479, -0.1467011040433109, -1.723923205907633, 0.5382296108587682, -0.5363846735303583, 0.27092624926658, -0.3545066321432684, 0.2197099884192319, -0.287363686337111, 0.2145312764451768, -0.2614204612340402, 0.2280211406842278, -0.2553142195422838, 0.2496987336771662, -0.2598467419074491, 0.2735997743104482, -0.2703495132715409, 0.2954157424967072, -0.2845730952075546, 0.311423814533789, -0.3018822827637243, 11.46523893315575, -2.691413015229958, -7.384362245400597, 1.335236216275609, 4.985185235965488, -0.5262745591804759, -3.372485074148798, -0.05648924165287231, -2.303682267268397, 0.2076207204669117, 1.609522758219237, -0.3508002202525652, 1.172561778202216, 0.4262482117585027, 0.9119656734777154, 0.4669796982018008, -0.7727539450790861, -0.4932706593868525, -0.7182401966339386, -0.5175074770463448, 0.7247978830712355, -0.5473237053574408, -0.7783621609313609, -0.5876369322550071, -0.8723083916636201, 0.6419574139158084, -1.00657473616704, -0.7131802559475791, -10.57449072135191, -10.20410649815866, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.9061412862011, -961.8770732639229, 455.5376417683805, 0.06254419195417743, -0.4232684972590032, -0.1032882224080658, -0.4264012907068119, 0.1437641786514711, -0.4367775016311054, -0.1849091479680357, -0.4547230616343913, 0.2278125351396496, -0.4803659165556683, -0.2736445954407336, -0.5135240332136976, 0.3235038064582032, -0.5535385281539781, -0.3781288842484928, -0.5990476261198098, 0.4374274060989551, -0.3541391351405594, -1.058073342162964, -2.045216966325468, 1.266080794797456, -0.6924316493113732, 0.5950376234995193, -0.4851062828675501, 0.4482900280297341, -0.4257039247593362, 0.4069187711414488, -0.4232424419027072, 0.4083834788979941, -0.4493250721690615, 0.4314669583481853, -0.4903032612085907, 0.4662810430706394, -0.5378049265577316, 0.5078722409403839, -0.5859084246214689, 0.5542724904405595, -11.84485447706039, 2.898542856056091, 7.060252299552289, 1.630303727224056, -4.621383723680353, -0.8942453459292238, 2.951610305967167, 0.4895834794482448, 1.813545938433091, 0.2881843187274703, 1.040043542488245, -0.2094177206260044, -0.5137794499925029, -0.2034268577435624, 0.1527024933413826, -0.2401406725930453, -0.1004080668438968, 0.3021385233083859, 0.2854472563703663, 0.3800924576032388, 0.4303872415260588, -0.4699267499381296, 0.5551933085574434, 0.5711417670203969, 0.6747267714850889, 0.6859780125203653, -0.8010046828883495, 0.8192592301466893, 0.94515561658495, 9.820426173212363, 12.42939017103546, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504.9930103786541, -961.9513356663066, -455.7221717257553, -0.08414743711096713, -0.2026736860667679, -0.1439128065966526, 0.1712281387505495, -0.2050964145610792, -0.1424763186319537, -0.2683067024845924, 0.1167626582609214, -0.333761142126125, -0.0948595784588155, -0.4009780128477423, 0.07811577117355756, -0.4684645116803408, -0.06843920146675211, -0.5335327087101004, 0.0679294038621997, -0.3239054824125787, -0.0116792012931699, -1.790663616927004, 0.4590524896071508, -0.5473106572190689, 0.2369585734237551, -0.3554648484778318, 0.1960271233909658, -0.2800877958506142, 0.1941244183782809, -0.2453078173802557, 0.2076091627418861, -0.2293383987055, 0.227046232106705, -0.2229498501452899, 0.2467672230652324, -0.2215577701206991, 0.2623437054600908, -0.2230571348710727, 11.53795815371153, -2.443315951606555, -7.483391968859528, -1.180817659033836, -5.101147725873458, 0.4291177015601163, 3.484008053855922, 0.006968221311336701, -2.401299468052032, 0.2524588129698827, -1.690603619495555, 0.3864574901609267, 1.238005582549325, -0.4584326101560443, 0.9641940337828574, 0.49897471755453, 0.8145568272198119, 0.5268294835097378, -0.7521215969515586, -0.5534552278380493, -0.7525858951277018, -0.5859592679598992, 0.8009010588386255, -0.6289928712031305, -0.8890676867080832, -0.6859830214698649, -1.014965640327654, 0.7599429084175442, -1.182234401254345, -0.8539617213615083, -12.58037930190747, -12.3224597531326, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504.9867232586682, -962.0267397173889, -455.5858482841886, 0.08146568040030745, 0.4718570639702241, -0.1323792393628501, 0.4746520270081164, 0.1832926548394762, 0.4859370727590149, -0.2354260094769804, 0.5057808128620681, 0.2900438647951354, 0.5339800783871049, -0.3482656295242084, 0.5699120289626995, 0.410743635210365, 0.612307221970398, -0.4771765920828036, 0.3602759907915838, 1.17231410234708, 2.078779437679099, -1.355247085704674, 0.7092702971335834, -0.6327846462311433, 0.4983600087248974, -0.4713003995691609, 0.4384934063277775, -0.4210960673642488, 0.4367016135277066, -0.4152685840028347, 0.4637359288734594, -0.431277660159945, 0.5053758360548571, -0.4587373301787441, 0.5527030534382514, -0.4925622070803836, 11.91525071372664, -2.669737940207489, -7.112070179658535, -1.499950988056173, -4.695989395278955, -0.8264068408364236, 3.024764719308382, 0.4608488246132006, -1.873884959550882, -0.2834560461830024, -1.083707901266197, -0.2191901436954789, -0.5408889135616145, 0.2219393955259065, 0.1652261958197461, 0.2640887562841959, 0.09983770284304504, 0.3297673240943492, 0.2941272369903571, -0.4105473985768032, -0.4457746369230076, -0.5027821554303129, -0.5749124856717664, 0.6060241185316116, -0.6964125744179374, -0.7222036226954593, -0.8219917097087917, -0.8553991180861862, 0.961952339859114, -1.012160660965054, -1.126829376377705, -11.89125844216821, -14.82268386167739, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505.1021960848271, -962.1169026393795, 455.8338729921806, -0.1071062110747086, 0.1815070603285521, -0.179150267652292, -0.1400998028560625, -0.2522503910014173, 0.1021004970621845, -0.3266542012589974, -0.06823635379950285, -0.4018139642522497, 0.03994126095184518, -0.4760406224002068, -0.01938011015157691, -0.5463234758642321, 0.009080595156260448, -0.332710657886771, 0.1616900475175027, -1.817966811669035, 0.3426834356104604, -0.5434318586351045, 0.1858789109600244, -0.3447965208108256, 0.1597482455188877, -0.260904925528362, 0.1625453870579868, -0.2153733000095499, 0.1761648327255745, -0.1866055914925562, 0.1928056464078325, -0.1656576200451232, 0.2073444379444271, -0.1482507898985436, 11.55984343995971, -2.194330913236887, -7.539191327935495, -1.023568455741856, -5.187360036320147, -0.328277306992068, -3.575805403221234, -0.07408649072083257, 2.486163835875462, 0.3004875937099439, -1.763663794387484, 0.4247125801810033, -1.298641369289637, 0.4926794598061576, 1.013844940412112, -0.5326247822284832, 0.855408835835386, 0.5617664880260144, 0.7863621255143287, 0.5906033658897508, -0.7819719026602904, -0.625663908357995, -0.8264736550053368, -0.6712690869377209, 0.9108668466439265, -0.7306688749077851, -1.031594825877172, -0.8068049947691155, -1.19005694174046, 0.9028377648786338, -1.393080617256989, -1.022486576162642, -14.93725702842511, -14.80858779518792, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505.0986792310538, -962.2097661716811, 455.6702293933568, 0.1053158391624666, -0.5209308336066629, -0.167801730661908, -0.5231587860538264, 0.2305615961092414, -0.5350545218265784, -0.2949981297092716, -0.5563330952365698, 0.3622987997093375, -0.5863529471226727, -0.4330778853603579, -0.6238972077621375, 0.5068738237225937, -0.3645929382416744, -1.269034197433159, -2.091002309996033, 1.426568270000934, -0.7184531759372009, 0.6617359656374076, -0.5062857257808602, 0.4866398522234159, -0.4468522920838534, 0.426758635928322, -0.4461365544464869, 0.4117361542474164, -0.4743095042403939, 0.4180529165899515, -0.5166800360497492, 0.4350417285374433, -11.93487401223153, 2.441424296363036, 7.120614763298893, 1.366543100975028, 4.739536856455961, 0.7537631620120923, 3.07601221737414, 0.4269745581475306, -1.918657953164775, -0.2740524529274999, 1.116076917175963, 0.22506572849195, 0.5595705076145522, 0.2373597796023182, 0.1712561169743348, -0.2856470413363019, 0.1044690985263356, -0.3555730312438909, -0.3071946247653678, -0.4396379038796807, -0.4651362087062904, 0.5346799860173224, 0.5985834061049665, 0.640392538677784, 0.7224826043854548, -0.7585342198697523, 0.8484129027006324, 0.8926513574029241, 0.9861836715435827, 1.048258602424987, -1.145257873605194, 1.233529400113939, 1.336236455566228, 14.30571745164884, 17.61787905052259, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505.2522684045481, -962.3209091459635, -456.0021243571045, -0.135204950106543, -0.1394617235875679, -0.220127550372105, 0.08571928452292403, -0.3049409043236431, -0.03659504642708369, -0.3890574180257759, -0.006436425325169574, -0.4706108350838175, 0.04096694825184889, -0.5462820434899358, -0.06401136348259447, -0.3343815237245166, 0.3770481192076843, -1.804641348780662, 0.1862488607745145, -0.5241026690461806, 0.1165329851236274, -0.3218108422408898, 0.1103182214298427, -0.2288701150093211, 0.1197089351929335, -0.1702872232337064, 0.1340809261902273, -0.1252999394856697, 0.1478955058540885, -0.08560365295523495, 11.52576378974406, -1.954372039977865, -7.556599118670414, -0.8696416229998727, -5.243139426145771, -0.2265893727803473, -3.645001180400495, 0.1444022525350471, -2.554614576511419, -0.3526936465053139, 1.824862320705907, 0.4673053399212604, -1.35071736012791, 0.531014596069754, -1.057368223650742, 0.5699553062659776, 0.8919929683549828, -0.5999463785086376, 0.8178418137071368, 0.630579143988404, 0.809941527510296, 0.6678139095408332, -0.8520024722473533, -0.7156241704641815, -0.934272389637509, -0.7770482361065687, 1.05215121053177, -0.8548848555187463, -1.205491122946197, -0.9521918975626668, -1.398620727934507, 1.072675726622418, -1.64131363116556, -1.220973810147752, -17.67939399433237, -17.69696009914344, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505.253017754159, -962.4364747394324, -455.8036682152643, 0.1351126787098899, 0.5695864039965876, -0.2104884546621504, 0.5708245939994814, 0.2862709367223656, 0.5827540820095056, -0.3637808074554126, 0.6046421105793508, 0.4436589944498553, 0.6352690932451194, -0.5253459950861361, 0.3677303232551267, 1.347453344746686, 2.082926012424898, -1.479753805386014, 0.7203282114221324, -0.6816721371214693, 0.5093388325091368, -0.4939242839721554, 0.4515458590346876, -0.4232358982106663, 0.4527789299653081, -0.396731197291685, 0.482881928016134, -0.3902827551017815, 11.89894466315718, -2.22090063369331, -7.092747734361658, -1.234026593177227, -4.753181046423188, -0.6771950822291326, -3.104140201531702, -0.3866040328596608, -1.945692839472312, -0.2572635974024494, 1.134652874596721, 0.2236606491303219, -0.5673297987656002, -0.2460750486326881, -0.1685020505679479, -0.3012253263999956, 0.116250006339078, 0.3761133268443195, -0.3261558958623166, 0.4641080126177665, 0.4894613648488647, 0.5625417455833565, 0.6266107088037656, -0.6712930493524196, -0.7526658702381472, -0.7920386924545679, -0.8791718349910133, 0.9279565248449416, -1.015643135720146, -1.083803569712843, -1.170845050805069, -1.266390093671474, 1.354037366376675, -1.485576073474351, -1.576400237129784, -17.08748638019799, -20.84557350276546, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505.4566106321672, -962.5733809140785, 456.2446669456525, -0.1688459112995087, 0.07034403444173644, -0.2661925457838576, -0.00201291370003544, -0.360842606721788, -0.05949303565750251, -0.4507864673737421, 0.1115494205452214, -0.5324222730975748, -0.150692878879795, -0.3285617939930261, 0.6352611728442655, -1.750928292301286, -0.01079073303553477, -0.4892798325673497, 0.02887167931331536, -0.2862455254245249, 0.04809364620457122, -0.1833951993284249, 0.06648914871000661, -0.1090258324830243, 0.08288235905924721, -0.04388087225057338, 11.42397334205316, -1.730411869135157, -7.54872126209005, -0.7246099232898299, -5.271259193087543, -0.1273016997487224, -3.689949677751227, 0.2168582799717596, -2.60315967042078, 0.4095966898831329, -1.869993120606597, -0.5156814339442469, 1.38982674111601, 0.5753023219269168, -1.090398441258875, 0.6129015965698307, -0.9200861758805992, 0.6431623698555172, 0.842501341267445, -0.6749156741454959, 0.8325483404989181, 0.713623361375966, 0.8735437835352988, 0.7629401789412279, -0.9551462767593792, -0.8256933589190248, -1.071962632591364, -0.9045223083409126, 1.222727743028186, -1.002327294123344, -1.410056693758905, -1.122638822704943, -1.640877341853048, 1.26995573475215, -1.927844246417485, -1.45003227706329, -20.82307411706698, -21.00155992122358, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505.4627685739322, -962.7160457792522, 456.0005200775191, 0.171584773148045, -0.6169168507138828, -0.2608304899009982, -0.6165570206329561, 0.3501697797170152, -0.627679892134454, -0.4403605479968019, -0.6489829640847168, 0.5308300518602039, -0.3709301239614179, -1.405815328723569, -2.058062413586543, 1.514443425105629, -0.7159719725315271, 0.692368587676033, -0.5085223559524636, 0.4927483234228063, -0.4539119844509412, 0.409786918662957, -0.4585601641836641, 0.369060795992091, -11.79766504079141, 2.012479939028762, 7.043555197226082, 1.105137043752469, 4.741914128289426, 0.5972094437860065, 3.109868363286502, 0.3381216846268515, 1.953867566077465, 0.2299457233923843, 1.137533669668121, 0.2109462622238532, -0.5620043637972509, -0.2436579564637029, 0.1548443572169821, 0.306307345836395, -0.1370525568840376, 0.3869435542219369, -0.3524856590577575, -0.4796460558277326, 0.5197151476832278, -0.5821783731153887, -0.6593590868915518, -0.6946136487705999, -0.7866414714126642, 0.8185951248778229, 0.913148489829942, 0.9570365064732725, 1.048232753669613, -1.114138187570384, 1.200190769798651, 1.295704602378807, 1.377356049197987, 1.509847257194258, -1.589258765649288, 1.768262183131415, 1.848069109594906, 20.23420853365266, 24.50766781694805, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505.7302235739897, -962.8808897579297, -456.5799751938149, -0.2074665694865197, 0.03179270034629982, -0.314911648796822, -0.1160409354435016, -0.414899941317193, 0.1896042423128672, -0.5035929949910716, -0.2485406654930217, -0.3148720318285624, 0.9334281744469859, -1.658358518134329, -0.2459729705045449, -0.4395368675508144, -0.07575020637815727, -0.238298110932487, -0.02543448920587639, -0.1242798269864487, 0.00493022955061947, -0.03092176867721523, 11.22885110571361, -1.52501965073773, -7.543615992492188, -0.592424165410839, -5.281049101322963, -0.03384112642572992, -3.711740461545836, 0.2895170179898658, -2.629192995613142, 0.4707504030082303, -1.894805671641967, 0.5704662427677495, -1.411023004415436, -0.6267630427501154, 1.107747137626518, 0.662893542409588, -0.934479879776553, 0.692778028843108, -0.8551991883552512, 0.7247338818733859, 0.8447234697913153, -0.763869215310247, 0.8860283550216375, 0.8135940022344247, 0.9682811777983255, 0.8765586475933742, -1.085448060890765, -0.9552512796328857, -1.235412367552187, -1.052408869707694, 1.419557246828857, -1.171343028943237, -1.642863640112578, -1.316259793628108, -1.914688728881414, 1.492601140725079, -2.250602542324417, -1.707371208414184, -24.34911222913227, -24.69682337532403, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505.741435494995, -963.0504155847199, -456.2741036613125, 0.214479472715505, 0.6621861981953745, -0.3177872890555592, 0.659477202360043, 0.4199363883935496, 0.6686966992655288, -0.5204604440629446, 0.3760250100904552, 1.440136329901755, 2.022077415101587, -1.529242860821105, 0.7070177320978236, -0.6931608182158253, 0.5052503305200324, -0.4823639976910435, 0.4557292865512613, -0.385316970783089, 11.61106437256959, -1.818394061749481, -7.001963622764721, -0.9813357744591734, -4.716881178048456, -0.5141556100260524, -3.0969906159148, -0.280097039848389, -1.943793145915662, -0.1889996708430733, -1.123912478997343, -0.18264542910118, -0.5421787669130134, -0.2251582877779384, 0.1286970772462299, 0.2956319802801666, 0.1683473607021652, -0.3827115546150297, 0.3873303842983701, -0.4809087334725033, 0.5565590506576561, 0.5882754140327704, -0.6968797879222629, 0.7050226515021639, 0.8237435880499643, 0.8327756810598531, 0.9488550233241532, -0.9742434109257527, -1.081502395328126, -1.133196471873608, -1.229668358197086, 1.3146823158554, -1.401016876114531, -1.525516610156299, -1.603885466468684, -1.775180446964151, 1.848426978531237, -2.07736997486411, -2.148126517552196, -23.69694322453203, -28.55450387022301, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506.0870994444517, -963.2380980143934, 457.0227998243373, -0.2485169973393713, -0.1708755956446555, -0.3608775819654662, 0.2702463148020641, -0.4583288971296218, -0.3528976210982101, -0.2928214663649001, 1.263652831351624, -1.529505325655311, -0.5130238387785291, -0.3760704452139064, -0.1942204111583247, -0.1786533015765691, -0.1073884668217014, -0.05177939288958904, 10.88603291358535, -1.337180308687955, -7.596957579622598, -0.4747035515000937, -5.293796730009392, 0.05043538802520772, -3.716922670417109, 0.3592165384067125, -2.632466505734362, 0.5340539274802235, -1.895818658518178, 0.6306645190841967, -1.409275395512805, 0.685196075280273, -1.103655066088433, -0.7201507688034566, 0.929097908006366, 0.7491204140241028, -0.8497455883339168, 0.7802302755862421, -0.8402329799755162, 0.8184522926487809, 0.8831625818888247, -0.8670840673667023, 0.9672225533587266, 0.928669763681313, 1.085819612885373, 1.005581967725039, -1.236140490171399, -1.100404676155905, -1.418629151651308, -1.216231218475, 1.63686735128274, -1.356940773255257, -1.897950583839266, -1.527515842606489, -2.213574416593122, 1.73441741027332, -2.602284267564217, -1.985971407789865, -28.17877747730259, -28.69146328143491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506.0995030305882, -963.4251163002542, 456.6319082336776, 0.2614208946746435, -0.7049929537479934, -0.3775469776448249, -0.6990129299253891, 0.4897228036148983, -0.3853539179729928, -1.442770760684808, -1.98216326068838, 1.520548699194699, -0.6953740263821517, 0.6824190354472228, -0.5011233283967811, 0.4613118931865929, -11.29796537330876, 1.64449147211759, 7.022169169615215, 0.8641805347117423, 4.699276336140136, 0.4291404936096105, 3.07407334406547, 0.2123539984677152, 1.918769023964996, 0.1324679335590006, 1.09476296754075, 0.1352170432778689, 0.5077652860572863, 0.185910694584077, 0.08952722613195557, 0.2638426913931702, 0.2107393703819989, -0.3576622830692115, -0.4310960937466334, 0.4619085175014147, -0.5999884739982514, 0.5746756856778464, -0.7385868745992383, -0.6961886963160135, 0.8626657356149082, -0.8280065670824533, -0.9841390899478625, -0.9726569738046391, -1.112325598821782, 1.133551592359431, 1.25500535004336, 1.315134855586846, 1.419345051714987, -1.523232765666847, 1.612773491431782, 1.765677755404849, 1.843930722061922, 2.053380737994717, -2.123837663941296, 2.402145835888836, 2.467526732917271, 27.35441123139784, 32.85590905559759, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506.535108831963, -963.6167931351213, -457.5765788302061, -0.2861761743318959, 0.3461105740480527, -0.3947395339422998, -0.4564377447058072, -0.2617296324114806, 1.611734008281398, -1.367678013419382, -0.8010059019283635, -0.3006880659872381, -0.3213053025395997, -0.1085392364738896, 10.2725543041519, -1.168526626564622, -7.82064895354263, -0.3713337568773262, -5.352508738636831, 0.1222893217356636, -3.722102280656161, 0.4211608377876347, -2.617734196748431, 0.594901972075254, -1.871992486237874, 0.6925901148668441, -1.38058734154616, 0.74787922336183, -1.072581160949938, 0.7826644587414839, -0.8975809094419182, -0.8105767210582541, 0.8193405723194567, 0.8399098661914142, -0.8120222073214457, 0.875770220099946, -0.8576881155650289, 0.9215289264833487, 0.9444708197958593, -0.9797395325755353, 1.065205863140835, 1.052722623302901, 1.216460299462672, 1.142943964195683, -1.397905992342116, -1.253291158068077, -1.612055771894061, -1.387322544088788, 1.864373007497077, -1.549535917211965, -2.163879565979816, -1.745709327273886, -2.524523036401785, 1.983325027495365, -2.967830167452788, -2.272019538910634, -32.14658674016512, -32.79917505195669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506.5385766328296, -963.7950492893284, -457.0688147458119, 0.3064737493454045, 0.7451295489392065, -0.4320824231461616, 0.4015780387117531, 1.401276142639599, 1.946107688605819, -1.48150526542528, 0.6828643239680722, -0.6570927744752225, 10.7638914509755, -1.517523554864524, -7.212410025151229, -0.7594650802490791, -4.727779988834981, -0.3459479511652795, -3.056982946412603, -0.137792378203823, -1.885965897429857, -0.06147034578463532, -1.053619513536147, -0.06771520575915954, -0.4606626658479292, -0.1231959710791077, -0.03846712123960974, -0.2069083481076168, 0.2634078610725342, -0.3068550531907182, -0.4829610805074276, 0.4170585080045313, 0.6489288141016536, -0.5352933146117154, 0.7829424333419256, -0.6615771584317809, 0.9012282823913962, 0.797293809624204, -1.016026767128407, 0.9447489034757597, 1.136789528309099, 1.107026430413602, 1.271196791521118, -1.288051047513149, -1.426037977791292, -1.492842932266066, -1.60802186802236, 1.727960361905206, -1.824590624194746, -2.002232368690374, -2.084863210703189, -2.327985171787624, 2.400861196107053, -2.723108602478969, -2.789278491542184, -30.98867169157857, -37.17333705763805, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507.0685285381397, -963.9513225378075, 458.2239814297878, -0.3105094100833926, -0.5489621604214274, -0.2207001619135986, 1.956288574692065, -1.176681603230856, -1.09375598392015, -0.2158081274278867, 9.039432404200522, -1.044683628994101, -8.468785467802409, -0.2840135792540254, -5.542745543449104, 0.1779572946344857, -3.761606785421675, 0.4684797722662275, -2.598930526573113, 0.6453592933930452, -1.827562760363265, 0.7487181877066253, -1.324101584715386, 0.808286952945908, -1.010847733279209, 0.8449471423636297, -0.8346332998503472, 0.8724833572892089, -0.7577244949265606, -0.8996473668870159, 0.7532210193109008, 0.9319700291879087, -0.8023001449790493, 0.9731169256921198, -0.8923272475697563, 1.025808942383718, 1.015464062032189, -1.092414194595597, 1.167634916611444, 1.175336052505714, 1.34782203022553, 1.277290630873182, -1.557658237162463, -1.401532229855291, -1.801354910586623, -1.552090405661354, 2.085991956058786, -1.734049468830996, -2.422322212155974, -1.953922901839827, -2.826392120689291, 2.220125678702697, -3.322576673428888, -2.543480350687961, -35.98052650947123, -36.71809122641062, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507.044358239568, -964.0731038498507, 457.5609921269437, 0.339186245230021, -0.4273969477024003, -1.29863116329144, -1.9212155175519, 1.401898391182813, -9.726271535257508, 1.553331598619713, 7.831565439526993, 0.6875158984530817, 4.876888986260434, 0.2743174969664351, 3.073278715408381, 0.06481527948414105, 1.857848936458911, -0.0172058553164797, 1.007270300003323, -0.015493908041739, 0.4052734656641692, 0.03886914827152865, -0.02120544418256508, 0.1245454447689218, -0.3236527085621929, 0.2283392770229724, -0.5404903245807748, 0.3431422365149781, 0.7009598725924222, -0.4659137295498349, -0.8273152365264473, 0.5961381254254794, -0.9363871554481444, 0.7348226673958823, -1.040881025210011, -0.8839501590062537, 1.150503496114657, -1.046240633846492, -1.272940104510185, -1.2251386270737, -1.414709746711867, 1.424957765640063, 1.581930391736834, 1.651204358082938, 1.781057179003545, -1.911084747398959, 2.01966517958886, 2.214321569792053, 2.307406860022854, 2.574510651133963, -2.657307283406697, 3.01140106208788, 3.087681881697911, 34.27753948458455, 41.14981894020637, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507.6607402118162, -964.1324178062038, -458.9202293050566, -0.1686378441806772, 2.26918481619089, -0.9605814475857066, 5.330862093858574, -1.138949076550252, -10.32445599072876, -0.2278821376240088, -6.053185271755386, 0.2111992660067487, -3.90195016026017, 0.4916948027703619, -2.604992480633718, 0.6736549508248011, -1.775821097551055, 0.7869195888388132, -1.245117363143849, 0.85511197805049, -0.9191931180792211, 0.8969679044521599, -0.7382433689234038, 0.9261198029941115, -0.6611696707630135, 0.9518531231496314, -0.6589875072665196, -0.9803308643977939, 0.7113879440961655, 1.015736615269503, -0.8045956932013681, 1.061136120387407, -0.9298638326235749, 1.119078818816151, 1.082360654284157, -1.191995373104534, 1.260356303986052, 1.282483463463084, 1.46470232087969, 1.393532235248562, -1.698581785001543, -1.528731717952134, -1.967581344572053, -1.69251044093007, 2.280123193492441, -1.890433165088037, -2.648431439034473, -2.129603108392172, -3.090370039310071, 2.419171909638182, -3.632813078727661, -2.770878258545604, -39.30905440906147, -40.04060379184506, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507.5823569101401, -964.1327952153448, -453.1525519625071, 24.40574541777206, -56.14514099816383, -2.422186406437542, -25.22429964965732, 1.444867813899084, -12.70852566601807, 2.547941134817951, -6.850174344806808, 2.975175307411678, -3.480196946314358, 2.990960801627664, -1.417378358439735, 2.740289627402432, -0.1451237393712128, 2.339923467563752, 0.6224326970934283, 1.877490924183014, 1.064055147754233, 1.410245383546048, 1.298670025286794, 0.9699280356465935, 1.407692033072784, 0.570056365428795, -1.447206482446987, -0.2126606347621276, 1.45549590027687, -0.106700427367443, 1.458217449192367, -0.3956662520866513, 1.472227262174601, 0.6631737994890589, -1.508479947856337, 0.9184906204287088, 1.574231058518403, 1.170872531544465, 1.674716872315271, -1.429622942231864, -1.814460422530907, -1.704464741494625, -1.998356318905909, 2.006172401087063, -2.232676942948992, -2.347554579943283, -2.526186304333157, -2.745015993852846, 2.891570896342571, -3.221095840304374, -3.347521504585615, -36.81977934526557, -44.35189490614219, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -929.5916205582998, -941.0365306526329, -83.0205570677121, 28.17439325219577, 75.87533570257695, -1.696520866989221, 26.60699159785555, -5.409361115615388, 12.56934180801319, -6.877261269176024, 5.687519948140556, -7.195311665250237, 1.882753730836734, -6.793257487426405, -0.243954230030588, -5.985952308839798, -1.376766663139118, -5.007212173644259, -1.909776318300887, -4.012480308119807, -2.086793153052898, -3.09156896456971, -2.063263714473415, -2.286718302219568, -1.938915871123262, 1.609507069182077, 1.776860515294737, -1.053845022404726, -1.615732919376842, -0.6048003006133782, -1.477928334454509, -0.2440699657679927, 1.375377784059099, -0.0469141625735761, 1.313620215666728, 0.2854287861559656, 1.294663638447388, 0.4868539710419071, -1.318984666977386, -0.6646185691294326, -1.386978049510149, -0.8304585614062736, 1.500098994703478, -0.9948396546158864, -1.661963350617514, -1.167481907502111, -1.879718152404978, 1.357937431688009, -2.166151621008019, -1.576149522040385, -22.8426934593021, -23.12611835160169, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39.74325951288207, -1186.431523127095, 891.9981651399358, -63.78630277783328, -227.1996575944138, -21.36263524515902, -134.9940747033731, -11.91053467248452, -92.38872197451053, -7.137773558531492, -66.40883312595787, -4.159839971417969, -48.55372147263157, -2.266393752869894, -35.63597637393651, -1.094787188040574, -26.12268218585725, -0.3740073215893996, -19.11470230422248, 0.09756406262595478, -14.00177931344374, 0.4539441356094622, -10.33193495392373, 0.7738574705683541, 7.757284995888257, -1.098280483037155, -6.008113485615493, 1.446238834722165, -4.877217783576145, 1.8260185749213, -4.208135864627979, -2.242051708641171, 3.885327967594733, -2.698727377102662, -3.825903864288941, -3.202420566106344, -3.972879079281471, 3.762630114298621, 4.289949398982492, 4.392965687767301, 4.757754982238793, -5.112366708632306, 5.371588692477695, 5.947098472803463, 6.140643591545218, 6.934244894234055, -7.089006463457302, 8.127774292215216, 8.258953377781268, 92.70654077487185, 110.8916502269361, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786.2689336767368, -815.9863464302587, -502.0050839453779, -90.73950140949509, -56.87432228337573, -51.99165992440596, -33.34091308622924, -34.04113075780467, -21.43377478029886, -23.06225529920733, -14.14681954842458, -15.59204793972567, -9.417386184375989, -10.29776713475104, -6.330831000664216, -6.493371297236832, -4.358412747427537, -3.752309549753657, -3.152344856102681, -1.780646844936822, -2.474087100314609, -0.3652993582829661, -2.159473586844666, -0.6519861739832791, 2.096803744336349, 1.389930130712824, -2.211583888600316, 1.937926207260219, -2.455755504596307, 2.363440987643714, 2.800164407662094, -2.717650504667941, 3.229401718516578, 3.039864785640401, 3.738480085017688, 3.361030069362782, -4.33092205126337, -3.706511692235448, -5.018136256707792, -4.098399590204935, 5.820036523452692, -4.557455346103694, -6.767262056924007, -5.104890578388991, -7.905837082177761, 5.763931574597367, -9.306048512065884, -6.560810197006163, -99.50178779115197, -96.99432423638203, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321.507651312602, -910.0072663299117, -591.4192374647588, 2.348605212951472, -124.3655421160505, 2.519037737123322, -84.26548427045947, 2.573811571186274, -59.67166318149743, 2.542520312756454, -42.7047736707389, 2.300331152371294, -30.40208946365, 1.868906337655643, -21.33294075666419, 1.342284397278395, -14.64893633535513, 0.8120400288034471, -9.763872639971726, 0.3354516359221829, -6.235124240181859, -0.06553144651026029, 3.716540641341441, 0.3931256138944335, -1.936614843167815, -0.6618294981785842, -0.6848912674945181, -0.8900811776756501, 0.199127185761292, 1.095738020332698, -0.8359393889447138, 1.294255063198197, 1.31492328463649, 1.498467646770268, 1.702006092723583, -1.719202962560454, -2.046109758511857, -1.966270920929146, -2.384503193805934, 2.249628522569334, -2.747318106025392, -2.580712635786556, -3.161596749861384, -2.974131519986319, 3.655356432931151, -3.449999148965924, -4.262437651783252, -40.50763259878801, -54.03571513338518, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344.0713331149046, -952.725510121053, -416.8443995257026, -1.06754986885831, 45.84646413547254, -1.058403868892041, 31.77101137436911, -1.019954379151325, 22.80926291367322, -0.9071659718312616, 16.5022307529763, -0.7068440514134203, 11.86549955113823, -0.4524387095841191, 8.40538251216984, -0.1887047159960708, 5.82217952814256, 0.05065134824649881, 3.9055606710333, 0.2489662036219396, 2.495002070050333, -0.4034520268008114, -1.463934384255092, 0.5196357992327747, 0.7123003579271661, 0.6066099511692123, 0.1617857928516114, 0.6740824416340541, 0.2481361170724213, -0.7308946494537877, 0.5637692276795909, 0.7845255109986143, 0.8204101808272708, 0.8411152733767217, -1.045170820232432, -0.9057592610820282, -1.259454345228306, -0.9828579943559127, 1.481169292533973, -1.076498380875339, -1.726879905570609, -1.190773320672958, -2.014212738164722, 1.33001392092199, -2.365085594225679, -1.498734072363048, -24.7211856905308, -22.78270797180551, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442.6907539702701, -958.4534825933663, -525.0790057885872, 0.4830776577375593, -34.3647256467903, 0.6314006455905202, -24.3348172625214, 0.7058287395586245, -17.41434346405917, 0.6762376591103615, -12.39697921157262, 0.5581637364705839, -8.69979036834804, 0.3923850266317464, -5.976507461418807, 0.2173455777493897, -3.987524183530083, 0.05722832788370733, -2.551827878146577, -0.07817291001085155, 1.527904886231801, 0.1888356566437113, -0.8048407679343973, -0.2797226979198223, -0.2967379564291665, -0.3574286627927332, 0.06184616772257682, 0.4283754863248733, -0.3199942490552064, 0.4980819539573895, 0.5140709901171847, 0.5710827814267276, 0.6708672126762525, -0.6511525664070008, -0.8102397807569323, -0.741692223923563, -0.9473054632669835, 0.8461535960354408, -1.094295489000015, -0.9685246843169275, -1.262227087133157, -1.113917136472349, 1.462601455450445, -1.289351439294402, -1.709469206945622, -15.37887836207466, -21.35497052390839, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -428.3101323308657, -960.7693411578422, -474.342891355963, 0.04496720051684034, 19.40931799070891, -0.1673280524757375, 13.92731470257143, -0.2557102683826377, 10.07353665325728, -0.242060653548165, 7.24394212742543, -0.1622596506986207, 5.13483244576956, -0.05331961081104578, 3.56174021542921, 0.05739982125560644, 2.395487323148687, 0.1547037661558607, 1.537813226473135, -0.2331433212654467, -0.911475734135779, 0.2933066494077648, 0.4555476781368759, 0.338711646959178, 0.1224074525370889, 0.3738275323799262, 0.1247194820414306, -0.4030263556972666, 0.313950693100759, 0.4301452572858044, 0.4667062381065167, 0.4584109424144206, -0.5994212319450118, -0.4905216003205117, -0.7250428404204554, -0.5287981906358582, 0.8543669982497838, -0.5753440721198483, -0.9973355647586041, -0.6321710321880218, -1.164486942694627, 0.701242039243045, -1.368908791826208, -0.7842864184450526, -14.12684531258338, -12.34623872489789, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453.5947291948034, -961.2035052944622, -514.6492553039509, 0.4825672633043259, -14.63884772835812, 0.4728625789819674, -10.46609788926318, 0.4223503876316634, -7.442448460093368, 0.3329214300137407, -5.216277203642393, 0.2244794898769337, -3.578425180158726, 0.1168914409785088, -2.383907106504585, 0.02230924598695424, -1.523064408492582, -0.05507450668021285, 0.9101446618023145, 0.1163992499184654, -0.4779690543716839, -0.1653691281434937, -0.1745659182869991, -0.2063444223336585, 0.039602682285727, 0.2433424061835201, -0.1941384821064465, 0.2796828695057331, 0.3109312828739628, 0.3179775825463946, 0.4060797546311572, -0.3603111282843304, -0.4915070533384577, -0.4084758403447379, -0.5763074319912898, 0.464226600596208, -0.6678922566067029, -0.5295368917237421, -0.7730382893753434, -0.6068884203575737, 0.89897954742318, -0.699610046209151, -1.054787068983536, -8.609652087354156, -12.8579032884007, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -446.0038881412778, -961.3008847776382, -491.7175432274707, 0.1943007163358473, 9.906958572878336, 0.02345340704111558, 7.173866633051514, -0.04242250621999444, 5.166677008312024, -0.03855525151603313, 3.669944479628774, 0.002466257542828118, 2.552845379807538, 0.05656495909653988, 1.723914622877545, 0.109389231273188, 1.113704343754537, -0.154326556966241, -0.6676835332672917, 0.1897295486417266, 0.3428450695372164, 0.2165827955413441, 0.1055512320135479, 0.2369862849228626, 0.07020719515760521, -0.2532876029564753, 0.2043491608705294, 0.2676915043075377, 0.3120764248151033, 0.2821088161452195, -0.4050727622745833, -0.2981576244336274, -0.4925541862044852, -0.3172019895469589, 0.5822117700075157, -0.3404097672817541, -0.6811329794436601, -0.3687673652742239, -0.7968425416319206, 0.4030092522096378, -0.9387219855322787, -0.4433201240139981, -9.48396669353969, -7.512457904532764, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.4328410845339, -961.0071327788293, -510.5524809166798, 0.4111184351918524, -6.829176411984103, 0.3361386406116716, -4.837760995294381, 0.2502764457319974, -3.37603312459292, 0.1626067927924462, -2.304361871960009, 0.08316396128852019, -1.525802347503765, 0.01755632843579077, -0.9670336043134922, -0.03330222974734559, 0.5708045845795261, 0.07150324591409365, -0.2923816210281723, -0.1003945101884875, -0.09727229178655826, -0.1234001397404901, 0.04066183518259721, 0.1434628037600845, -0.1409083950734027, 0.1628660783751044, 0.2178168134361163, 0.1832999676758237, 0.2819041405558238, -0.2060026677157682, -0.3409546634835108, -0.2319393727963857, -0.4009411424908401, 0.2619589247865226, -0.4668200628062795, -0.296933951573955, -0.5432787484033776, -0.3378788989574256, 0.6355506795869581, -0.3860209451465164, -0.7505093709414847, -5.105954891950948, -8.781352077679234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -452.3304115985688, -960.7608316563131, -498.9493530569109, 0.2350526026148503, 5.452765778836735, 0.1144413317324554, 3.942743416705443, 0.06575193956155491, 2.813198060193881, 0.05979656827468521, 1.967247253532042, 0.07476481999950792, 1.33716927453409, 0.09679248669884244, 0.8715028539151225, -0.1184142632347635, -0.5297539525430655, 0.1364376500843866, 0.279883315023392, 0.1501362016677295, 0.0967277743463185, 0.1600101117691853, 0.0392623455333137, -0.1670646460060667, 0.1431394010753874, 0.1724122128993197, 0.2264583241675105, 0.1770984549392259, -0.2981564198474064, -0.1820260600993679, -0.3653319148757525, -0.1879277629602221, 0.433953340411416, -0.1953399947167113, -0.509568285645821, -0.2045344918635905, -0.5981230469754966, 0.2153519198444021, -0.7071121725209079, -0.2267809863092065, -6.916134867991262, -4.577761093605716, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -457.2821812366932, -960.4249791586459, -508.406803593705, 0.3314600419524246, -3.131681676256192, 0.2387019139078725, -2.160834219382301, 0.1558482495866747, -1.455216313053963, 0.0871664614814559, -0.9473663287775979, 0.03419837662062589, -0.5864332248384088, -0.00432458333663224, 0.3329441537673535, 0.03128353627523617, -0.1562804280922136, -0.04999176058110387, -0.03302664185232766, -0.06346986930062509, 0.05440406541970694, 0.07411879158850035, -0.1190014687949248, 0.08368929303132233, 0.170242902230307, 0.09336390814052453, 0.2150244781654537, -0.1038994057814532, -0.2584450235024301, -0.1157578492126067, -0.3044688209695106, 0.1292115445076401, -0.3565100159947209, -0.144401977523982, -0.4180074998279228, -0.1613341173509704, 0.4930955968984639, -0.1797468301316631, -0.5875758018381303, -2.883918681365754, -6.475332235697652, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.0155128763931, -960.1981319999863, -502.3405067762259, 0.2542491852062611, 3.131489617552865, 0.1670909868692584, 2.252853211778165, 0.1252928337711295, 1.589512082778476, 0.1095856577497441, 1.091340808355062, 0.1069182126000217, 0.7200044935476559, -0.1094190566032491, -0.4450831238377702, 0.1128668647285452, 0.242278665253527, 0.1152987829103931, 0.09231415427747117, 0.1160486567327278, 0.0199468566918988, -0.1151073353429353, 0.1062892592500759, 0.1127688588569004, 0.1758680910212436, 0.1094184084764459, -0.2358574126255636, -0.1054171918706391, -0.2920380304032841, -0.1010121781961295, 0.3493514987155218, -0.09624584560739964, -0.4124750394872714, -0.09081842264154093, -0.4865154108104184, 0.08383114316573474, -0.5780232680965639, -0.07323520324207744, -5.417494102776475, -2.610329978177295, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -457.4493352528837, -959.989698663586, -507.1401709474283, 0.286121368416555, -1.277585644216466, 0.1965314549725704, -0.8296361757391397, 0.126150204699882, -0.5143609771621193, 0.07411570076725935, -0.2955753603877085, 0.03772510850741548, 0.1456031206933647, -0.01346154359781873, -0.04333286374184881, -0.002152095041771392, 0.02709212845432325, -0.01203934086886425, 0.07735364223423614, 0.0184196895883106, -0.1159068759281938, 0.02282300685654621, 0.1487971666617892, 0.0262064128753012, 0.1803514533516238, -0.02907864514102102, -0.2137591327763108, -0.03161342078618522, -0.2515671959433391, 0.03371538499219204, -0.296132352891611, -0.0350175049709756, -0.3500936488703787, -0.03478013453039555, 0.4169709529674968, -0.03159734770668429, -0.5021045752952693, -1.359189375072352, -5.137658691990629, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.1816434524407, -959.8717700049582, -503.9632365405722, 0.2710790852321758, 1.868103062408168, 0.201731258488131, 1.336518241630041, 0.1607751340471668, 0.9312150774562233, 0.136744864573931, 0.6245135082334604, -0.1220039814863793, -0.3939736948288325, 0.1118064051450731, 0.2212852465254199, 0.1033807000084225, 0.09161715516324435, 0.09519253715708004, 0.006912715432142194, -0.08645745594199336, 0.08374228844933723, 0.07681239647201249, 0.1463556032104103, 0.06610891321647951, -0.2007459498469933, -0.05425819168043056, -0.2518586281471307, -0.0410971094331229, 0.3040320723461977, -0.02624784596427822, -0.3614859250552229, -0.00891781755958999, -0.4289462964027577, -0.01244251094956762, -0.5126072586924517, 0.0408259308513107, -4.58392784156386, -1.246428269166816, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -457.3475780693374, -959.8013715842148, -506.3396543584333, 0.2767928687754797, -0.3507679094211566, 0.1964561308894208, -0.175454380884666, 0.1369018349817932, -0.06171313754209207, 0.0948996407982716, -0.01057868944381583, -0.06660941623334156, 0.05625273023108911, 0.04841249702381548, 0.08604193382443961, 0.03731356346471822, 0.1075373379529352, -0.03107613794426697, -0.1259926823207867, -0.02817283438261568, 0.1449896389440946, -0.02768249041446454, 0.1669869201040142, 0.0291682437735234, -0.1937749805283248, 0.03258348528255475, -0.2268682319663226, -0.03823766887670215, -0.2678770945127273, 0.0468458004168191, -0.318925108122332, 0.05970717770473746, 0.3832225686061499, 0.07913811719945757, -0.4660307877839935, -0.283439945606522, -4.418862273762176, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.6253594082521, -959.785934980976, -504.6940382140627, 0.2905146476860859, 1.164315682401765, 0.2287874192618208, 0.8278901909084367, 0.1855742595690876, 0.5670794972681463, -0.1543255466444327, -0.3664024755348232, 0.1304088025212251, 0.2126108080946933, 0.1106574375165147, 0.09451778970188139, 0.09297359092819958, -0.00282311457116445, -0.07598524984762452, 0.07011698901922347, 0.05880426133990931, 0.1305654348080172, 0.04082738142446098, -0.1837050518882388, -0.02156733869032677, -0.2339588783576583, -0.0004920786516655548, 0.2853442102851388, 0.02315710617373445, -0.3419026525153549, 0.05062046787596538, -0.4082936953470016, -0.08404423049499717, -0.4907590591221084, 0.1273101919619071, -4.206720311439787, -0.3002127507778516, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -457.1342767647928, -959.8106159477925, -505.8018624707027, 0.2900898798822178, 0.09138444482380856, 0.2187118527593231, 0.1292492004000186, 0.1662045097025605, -0.1438635095448789, -0.1291313858324679, 0.146482412369866, 0.104009216338187, 0.1447220224795449, 0.08785328495101051, 0.1435558243554511, -0.07835861397425346, -0.1461036208296098, -0.07391291396692715, 0.1542496939603918, -0.07351683292489485, 0.1691302490659806, 0.07668777947971103, -0.191528688062261, 0.08339243901741469, -0.2222158695109802, -0.09404049750512089, -0.262283667277891, 0.1095744988108133, -0.3135425638449527, 0.1317142932715506, 0.3791044132771236, 0.1635054212875869, -0.4644162154949849, 0.4754117380195617, -4.133127727067452, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.7075938580194, -959.859187561279, -504.9641545879152, 0.3112115826946246, 0.7603819900412184, 0.2515787922254607, 0.5346525976842389, -0.2046698188884306, -0.3549498970832715, 0.1667993851467113, 0.2128194443512869, 0.1349829906843502, 0.1004097453865731, 0.1069128978938258, -0.01069617548430252, -0.08086180012056307, 0.06245121559445837, 0.05554789383536447, 0.1243240851970876, 0.02998652907082099, -0.1795147550946357, -0.003335227685768387, -0.232122564808795, 0.02527939571162375, 0.2860328739068638, 0.05697314553891727, -0.3453056616278151, 0.09340770900657025, -0.4147626826939698, -0.1373004236343103, -0.5009888584183517, 0.1933830034629809, -4.165639675833453, 0.3383554269676927, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.8782696374187, -959.9297648403151, -505.4159286188464, 0.3121561806109645, 0.2822056061123752, 0.247980497057797, -0.2569956304425891, -0.1998295916895239, 0.2284297348242049, 0.1650722678022543, 0.2029125660834568, 0.1410884792635043, 0.1841746600175908, -0.1256771230171495, -0.174184152010238, -0.1171886991653117, 0.1738211936975961, -0.1145301840222644, 0.1833868779235939, 0.1171275690499658, -0.2030007615539205, 0.1248977602701297, -0.2329370726129333, -0.1382764499321328, -0.27395747110102, 0.1583471608991634, -0.3277192476797476, 0.1871380238475298, 0.3974011701543539, 0.2282921486952801, -0.4888358484669846, 0.9965699211078363, -4.174355176167373, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.6116649438044, -960.0038871245156, -505.0023454177997, 0.3295930205438109, 0.5143442094150634, -0.2695356906932027, -0.3518849459077303, 0.2184195529530754, 0.2177473194353936, 0.1742696183299925, 0.107588929061941, 0.1351123343048535, -0.01670816731731302, -0.09919323231873232, 0.05953720029339046, 0.06503073496805913, 0.125532380449224, 0.03137214041729913, -0.1853658264427238, 0.002916428236328955, -0.2429142837357705, 0.03901258336924512, 0.3020465696948311, 0.07836548079886681, -0.3669787240345666, 0.1230474258479728, -0.4428645014247397, -0.1763255542849716, -0.5368662993446999, 0.2437700678950443, -4.391525855268358, 0.7382567408086977, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.6126089063781, -960.0836158047517, -505.1187555600291, 0.3334848577914001, -0.348428051728459, -0.2752367222186492, 0.3006944638633078, 0.2302721093152811, 0.2591967524250096, 0.1970876226025629, 0.2278690906060197, -0.1740115500094767, -0.2085463212280925, -0.1595867622233282, 0.2018162461301135, -0.1527406251408078, 0.2076385119268662, 0.1528504282670753, -0.2258110308909343, 0.1597827219954589, -0.2563523040186093, -0.173969694548823, -0.2998702186943654, 0.1965747840879211, -0.3580175279469813, 0.229863604568186, 0.4341837938265395, 0.277970170008693, -0.5347627558106645, 1.329764914690779, -4.483596648143033, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.4349056684294, -960.156647229524, -504.9319775147893, -0.3423523620698637, -0.3475550534848461, 0.2809466994778753, 0.2215706829932298, 0.2255846777578883, 0.1128246391312395, 0.1754514594654858, -0.01937340515435665, -0.1292864557086762, 0.06168462942056975, 0.08573413224271821, 0.1336954218460845, 0.04347198911094055, -0.2001906469386318, -0.00119376064663685, -0.2648271503726893, 0.04251266830607562, 0.3315045719474604, 0.0893994185444924, -0.4046778456006963, 0.1419228134888831, -0.4899638274253278, -0.2038944668407005, -0.5952966220065167, 0.2817106712351145, -4.848415701454543, 0.9427020574859393, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.3526903101317, -960.2239683681914, 504.8729234307502, -0.3489451907029376, 0.3589886699197148, 0.2961466969614354, 0.310480710370148, 0.2543129428137268, 0.2722939468109425, -0.2230677496498586, -0.2472988907469534, -0.2016181817997352, 0.2366019906197148, -0.1891922917107881, 0.2403800750135453, 0.1852769979754018, -0.2584933857871972, 0.1897672879791922, -0.2909693456884552, -0.2031063479701883, -0.3384573551697876, 0.226529417912314, -0.4027594406465836, 0.2624902798236902, 0.4876253939462449, 0.3155583157701459, -0.6001811424846641, 1.506088170407175, -5.032413448243027, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456.2281437872571, -960.2817251702837, -504.8181052368888, -0.3473974178704272, -0.2160721566413612, -0.2844115901002985, -0.1109673640897398, -0.2249663433659822, 0.01558619777087037, 0.1691160884458819, -0.07065303999293307, -0.1161602619016208, -0.1496942207346384, -0.06504337994709028, 0.2242986455097327, 0.01449731249119731, 0.2977971368954605, -0.03700838008878649, -0.3740870837044805, -0.09144942901497075, 0.457896128782557, -0.1516347645680779, 0.5553971193015861, 0.221891957236842, 0.6754711755316094, -0.3094582971264419, 5.522765460179463, -0.97751110694022, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -456.1038688686278, -960.3270004185782, 504.6545436979824, -0.356402682870272, -0.351340066980498, -0.309181275719597, -0.3137167192606073, 0.2710350810973345, 0.2878350893000941, 0.2426229671933997, -0.2763168527076123, 0.2239747467509561, -0.280241947819618, -0.214997170417235, 0.3000011000597085, -0.2157829211419849, 0.3359590943512027, 0.2268880461285561, 0.3890394964897786, -0.2496482263626514, 0.4613794461017247, -0.2867172754999331, -0.5572551598551461, -0.3430608494894536, 0.6847182926632671, -1.544015999089003, 5.81277117568367, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456.0159328177219, -960.3639010644911, -504.6932803542561, 0.3438026307622749, 0.09449263891861819, 0.2791924853298788, -0.0003950261355616105, -0.2158018381788221, 0.08970415379288814, 0.1544060725265021, 0.1757031383879306, 0.09475353685250953, -0.2591866322084164, -0.03594501565049272, -0.3429135694153541, 0.02344530556719954, 0.4306584188832464, 0.08549582247561358, -0.5273917016008263, 0.1532791130988579, -0.6399042657976388, -0.2316168130063649, -0.778179175299526, 0.3285885099115871, -6.416369594901841, 0.8564491667855068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.8653704619311, -960.3842612497629, -504.4466252991523, 0.3553710744569122, 0.3464161627180581, -0.3141480426464132, -0.3263434732993854, -0.2805185077726005, 0.318452179605292, -0.2561088381842067, 0.3256076632881188, 0.2417423068618511, -0.3493440004841665, 0.2380375239176739, -0.3907849327216811, -0.2458444207499498, -0.4514338824492233, 0.2667224509879774, -0.5339931109453619, 0.3035639225688179, 0.6434745768399498, 0.3617520533213044, -0.7890836608012997, 1.453287590263238, -6.830587030361006, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.8082369972718, -960.3994442233231, -504.5727798070742, 0.3313951499504466, 0.03334672491870352, -0.2650323687322864, 0.1237756771616079, 0.1977229200322088, 0.2152372282453819, 0.1308144824330917, -0.3074811043383469, -0.06431874746251602, -0.4022833530695494, 0.002753039484875582, 0.5030555348702184, 0.07234641380894129, -0.6149136653510678, 0.147681447081999, -0.7452813394287314, -0.2340032399414377, -0.9053839955214958, 0.3402398000888476, -7.541821253164034, 0.5849103543979055, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.6329040043291, -960.3950114540172, -504.2353754001218, -0.3460929449122671, -0.3573008762499605, -0.3114301376926339, 0.3594512386076111, -0.2833177549503088, 0.3742883157355104, 0.2642891667618492, -0.4053000240462633, 0.2559854273447855, -0.4549386843075994, -0.2598956392005766, -0.5256874172585198, 0.2779895068618159, -0.6211224810880993, 0.313525507512514, 0.7472565377041231, 0.3723660978852033, -0.9147314187079836, 1.237565421662729, -8.101822161846965, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.6073466604758, -960.3894853751993, 504.4633572926642, -0.3103733552874035, 0.1798092000949148, 0.2419934417708158, 0.2733274466086066, 0.170608369891661, -0.3730126262676927, -0.09792141422899953, -0.4790220884834106, -0.02392951925676049, 0.5940246336099106, 0.05285511329060938, -0.72308359247846, 0.1355803277369181, -0.8742174899740623, -0.2298115577107615, -1.060011360233898, 0.3453065574734215, -8.919981193604276, 0.1624134764758667, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455.4000921853053, -960.361309464515, -504.007882194183, 0.3290914395050692, -0.3942786634383071, 0.3016661987186222, -0.4232028367455296, -0.2802278665379578, 0.4661762517445954, -0.2682364496083171, 0.5277412575464714, 0.2683110547053154, 0.6119088573807965, -0.2831724063939194, 0.7235386787769833, -0.3166483539775581, -0.8699916087218257, -0.3752194315750562, 1.063702555577482, -0.8961354452926642, 9.650619636505867, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.411737801223, -960.33634002581, -504.3683031089997, -0.2810675792469359, -0.3568683235024433, -0.2101973773067176, 0.4610263218581945, 0.1342569173742763, 0.5773846640444537, 0.0549895002126496, -0.7072872888655298, -0.02810812468448988, 0.8554232500908963, -0.1177949641523385, 1.030291473272884, 0.2197751447614384, 1.245920882288997, -0.3445848993688538, 10.57920381944338, 0.4160829872124499, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455.1591691278096, -960.2853155130464, 503.7506267530316, 0.3049590480459953, -0.4680278418562256, -0.2856076919532088, 0.5295716933187377, -0.2723080782051216, 0.6081924100973243, 0.2695854300651085, 0.7101704945576234, -0.2814097861384926, 0.8422035444139073, -0.3125162969328145, -1.013460137059419, -0.3702351580276053, 1.238618787929362, -0.4245068253530189, 11.50934860393606, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455.2183025514214, -960.2418420556575, 504.2904567527979, 0.2437489235262463, -0.5785902355402166, -0.1696099295696916, -0.7030543018352547, -0.08807726217552897, 0.8477643119258153, -0.0003803922022015914, -1.016538148397893, 0.09536127235557913, -1.218135087789733, -0.2047067633976007, -1.468068679276456, 0.3388478362779086, -12.55632491341529, -1.160129556695031, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454.9011576326581, -960.1679733535419, 503.4480310997173, -0.2743159215154021, 0.59210690664036, -0.2642341403577922, 0.6948327035340854, 0.2611611633095301, 0.820468994814445, -0.2710734389097403, 0.9783065442168752, -0.3001250829922114, -1.179929020129721, -0.3568752809307986, 1.442834925435452, 0.1861860221886378, 13.72072654131889, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455.0234951961737, -960.1065185460631, -504.2341761382918, -0.1985155387376615, -0.8636702893987938, -0.1197570863030018, 1.022005815169442, -0.03046148161363051, -1.212498738675283, 0.06965185900521845, -1.44380567993779, -0.1855411271964486, -1.732900209415532, 0.3288765751169174, -14.89970702904785, -2.085331319125681, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -454.6155022554338, -960.0090394364709, 503.080419120223, 0.2378578162407876, -0.7855779404374899, -0.2389268322384859, -0.9427265300586574, 0.2493889345428649, -1.133389617235434, 0.2776001160195384, 1.372380149780934, 0.3338733668864364, -1.680779007748177, -0.9514699644735849, -16.34248127983827, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454.8236752088293, -959.9291937205099, 504.2068595622975, 0.1450192700206833, -1.238921588152978, 0.05908037491561525, 1.451502248422423, -0.04247506464443443, 1.715440182112174, 0.1633637326099601, 2.049030098342237, -0.3153926679720489, 17.67488245777389, 3.216886963304409, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454.2888780517075, -959.8060141768642, 502.6209139189659, -0.1963783784418207, -1.07681015710693, 0.2118129088940946, -1.30957289263114, 0.2416506844030767, 1.594926385284288, 0.2987764905571196, -1.958528602633205, -1.89790052548914, -19.45550897611078, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454.6150435510897, -959.7057073918052, -504.2207918385922, 0.08191276561459389, 1.744978959223401, -0.01623102385292412, 2.044325279439126, 0.139362395300141, 2.428380353063932, -0.2989187527977135, 20.97397716279267, 4.596081079911148, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453.9030102952942, -959.5514771839804, -502.0302313735755, -0.1509069873047727, 1.509921737993699, -0.1866506960156188, -1.853460072170985, -0.2470701568585754, 2.284756111156089, 3.070922511010462, 23.1773864785971, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -454.393273204417, -959.4263564611852, 504.2962075579032, 0.005942404933789297, 2.446660862635643, 0.1147302269971472, 2.888007099445928, -0.2794135351323237, 24.93107187619451, 6.291448555715359, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453.4308183834945, -959.2306762470356, 501.2467662460859, 0.1030197566665109, 2.15672544959436, 0.1707450834055513, -2.672257869508826, -4.548465509453017, -27.68489865384783, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454.1521964870133, -959.071043583621, 504.4663679395445, 0.09038098396525029, 3.453184686592636, -0.2556696326547585, 29.74790742438, 8.418178566025752, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452.828604749646, -958.8118098643598, -500.1677840008083, 0.05562336274628601, -3.140588015388957, -6.465358070370396, -33.25328104675387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453.8814454933349, -958.5973523296369, -504.7879798529249, 0.2240186812962395, -35.739305932474, -11.17424401632893, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -452.0207842240151, -958.2280932680816, 498.6099988306628, -9.061273073482408, -40.32955903922403, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453.5608878051024, -957.9144120234951, 542.7656821084641, 14.91304502929086, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450.8656330991661, -969.8578951037719, 452.1887612775597, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787.8967774818433, -898.9789215779133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, + }, + evWant: []complex128{ + 1, + 2, + -0.8238783640171078 + 1.579766228862017i, + -0.8238783640171078 - 1.579766228862017i, + -3.922907917607387 + 1.654540870297146i, + -3.922907917607387 - 1.654540870297146i, + -10.04176861796659 + 1.651471031280953i, + -10.04176861796659 - 1.651471031280953i, + -19.90533512613429 + 1.64196864045227i, + -19.90533512613429 - 1.64196864045227i, + -33.60610872827028 + 1.635560741682501i, + -33.60610872827028 - 1.635560741682501i, + -51.10943733404228 + 1.631805014774364i, + -51.10943733404228 - 1.631805014774364i, + -72.34919707090897 + 1.629522740505929i, + -72.34919707090897 - 1.629522740505929i, + -97.24021794530901 + 1.628064860261413i, + -97.24021794530901 - 1.628064860261413i, + -125.6811625494976 + 1.627074041605065i, + -125.6811625494976 - 1.627074041605065i, + -157.5556174346503 + 1.626392967840776i, + -157.5556174346503 - 1.626392967840776i, + -192.732837945876 + 1.625893674037654i, + -192.732837945876 - 1.625893674037654i, + -231.0684238575969 + 1.625523897559938i, + -231.0684238575969 - 1.625523897559938i, + -272.404932676379 + 1.625248463045784i, + -272.404932676379 - 1.625248463045784i, + -316.5725618120467 + 1.625029322230836i, + -316.5725618120467 - 1.625029322230836i, + -363.3898435346347 + 1.624863705104029i, + -363.3898435346347 - 1.624863705104029i, + -412.6644183160402 + 1.624734783685709i, + -412.6644183160402 - 1.624734783685709i, + -464.1938275598905 + 1.624629407600858i, + -464.1938275598905 - 1.624629407600858i, + -517.7663337295413 + 1.624555040627727i, + -517.7663337295413 - 1.624555040627727i, + -573.1617958392867 + 1.62448889134649i, + -573.1617958392867 - 1.62448889134649i, + -630.1525854166166 + 1.624445355378192i, + -630.1525854166166 - 1.624445355378192i, + -688.5045249303587 + 1.624414401302088i, + -688.5045249303587 - 1.624414401302088i, + -747.9778126976437 + 1.624396390555459i, + -747.9778126976437 - 1.624396390555459i, + -808.3280706224909 + 1.62438480760184i, + -808.3280706224909 - 1.62438480760184i, + -869.3072903249724 + 1.624387678902335i, + -869.3072903249724 - 1.624387678902335i, + -930.6648831979091 + 1.624396130880259i, + -930.6648831979091 - 1.624396130880259i, + -992.1487134378474 + 1.624417808682915i, + -992.1487134378474 - 1.624417808682915i, + -1053.506114553354 + 1.624453056189826i, + -1053.506114553354 - 1.624453056189826i, + -1114.484928198698 + 1.62449544649428i, + -1114.484928198698 - 1.62449544649428i, + -1174.834554234014 + 1.624553207269019i, + -1174.834554234014 - 1.624553207269019i, + -1234.306981514973 + 1.624623553438826i, + -1234.306981514973 - 1.624623553438826i, + -1292.657768972259 + 1.624709216827242i, + -1292.657768972259 - 1.624709216827242i, + -1349.647106741638 + 1.624814444572517i, + -1349.647106741638 - 1.624814444572517i, + -1405.040739357668 + 1.624951632752096i, + -1405.040739357668 - 1.624951632752096i, + -1458.610953350783 + 1.625104547041682i, + -1458.610953350783 - 1.625104547041682i, + -1510.137508646807 + 1.625304666073007i, + -1510.137508646807 - 1.625304666073007i, + -1559.408520122221 + 1.625548293255404i, + -1559.408520122221 - 1.625548293255404i, + -1606.221305250554 + 1.625851986073836i, + -1606.221305250554 - 1.625851986073836i, + -1650.383201531125 + 1.62624202844641i, + -1650.383201531125 - 1.62624202844641i, + -1691.712315735984 + 1.6267345498979i, + -1691.712315735984 - 1.6267345498979i, + -1730.038177420971 + 1.627388968656263i, + -1730.038177420971 - 1.627388968656263i, + -1765.20230058066 + 1.628268412022146i, + -1765.20230058066 - 1.628268412022146i, + -1797.05860162894 + 1.629473972633416i, + -1797.05860162894 - 1.629473972633416i, + -1825.473493639258 + 1.631220665229006i, + -1825.473493639258 - 1.631220665229006i, + -1850.32542664842 + 1.633834593918563i, + -1850.32542664842 - 1.633834593918563i, + -1871.503056018116 + 1.637993570641514i, + -1871.503056018116 - 1.637993570641514i, + -1888.90026514681 + 1.64508855982818i, + -1888.90026514681 - 1.64508855982818i, + -1902.402515327158 + 1.658179541614067i, + -1902.402515327158 - 1.658179541614067i, + -1911.858940404498 + 1.682209391409579i, + -1911.858940404498 - 1.682209391409579i, + -1916.92602113601 + 1.761877988650816i, + -1916.92602113601 - 1.761877988650816i, + -1930.484166851586 + 1.202676762393897i, + -1930.484166851586 - 1.202676762393897i, + 3, + 4, + }, + }, +} diff --git a/lapack/testlapack/dlabrd.go b/lapack/testlapack/dlabrd.go new file mode 100644 index 00000000..460cefe7 --- /dev/null +++ b/lapack/testlapack/dlabrd.go @@ -0,0 +1,107 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" +) + +type Dlabrder interface { + Dlabrd(m, n, nb int, a []float64, lda int, d, e, tauq, taup, x []float64, ldx int, y []float64, ldy int) +} + +func DlabrdTest(t *testing.T, impl Dlabrder) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, nb, lda, ldx, ldy int + }{ + {4, 5, 2, 0, 0, 0}, + {4, 5, 4, 0, 0, 0}, + {5, 5, 2, 0, 0, 0}, + {5, 5, 5, 0, 0, 0}, + {5, 4, 4, 0, 0, 0}, + {5, 4, 4, 0, 0, 0}, + + {4, 5, 2, 10, 11, 12}, + {4, 5, 4, 10, 11, 12}, + {5, 5, 2, 10, 11, 12}, + {5, 5, 5, 10, 11, 12}, + {5, 4, 2, 10, 11, 12}, + {5, 4, 4, 10, 11, 12}, + + {4, 5, 2, 11, 12, 10}, + {4, 5, 4, 11, 12, 10}, + {5, 5, 2, 11, 12, 10}, + {5, 5, 5, 11, 12, 10}, + {5, 4, 2, 11, 12, 10}, + {5, 4, 4, 11, 12, 10}, + + {4, 5, 2, 12, 11, 10}, + {4, 5, 4, 12, 11, 10}, + {5, 5, 2, 12, 11, 10}, + {5, 5, 5, 12, 11, 10}, + {5, 4, 2, 12, 11, 10}, + {5, 4, 4, 12, 11, 10}, + } { + m := test.m + n := test.n + nb := test.nb + lda := test.lda + if lda == 0 { + lda = n + } + ldy := test.ldy + if ldy == 0 { + ldy = nb + } + ldx := test.ldx + if ldx == 0 { + ldx = nb + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + d := make([]float64, nb) + for i := range d { + d[i] = math.NaN() + } + e := make([]float64, nb) + for i := range e { + e[i] = math.NaN() + } + tauP := make([]float64, nb) + for i := range tauP { + tauP[i] = math.NaN() + } + tauQ := make([]float64, nb) + for i := range tauP { + tauQ[i] = math.NaN() + } + x := make([]float64, m*ldx) + for i := range x { + x[i] = rnd.NormFloat64() + } + y := make([]float64, n*ldy) + for i := range y { + y[i] = rnd.NormFloat64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + // Compute the reduction. + impl.Dlabrd(m, n, nb, a, lda, d, e, tauQ, tauP, x, ldx, y, ldy) + + if m >= n && nb == n { + tauP[n-1] = 0 + } + if m < n && nb == m { + tauQ[m-1] = 0 + } + checkBidiagonal(t, m, n, nb, a, lda, d, e, tauP, tauQ, aCopy) + } +} diff --git a/lapack/testlapack/dlacn2.go b/lapack/testlapack/dlacn2.go new file mode 100644 index 00000000..1fe99906 --- /dev/null +++ b/lapack/testlapack/dlacn2.go @@ -0,0 +1,72 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlacn2er interface { + Dlacn2(n int, v, x []float64, isgn []int, est float64, kase int, isave *[3]int) (float64, int) +} + +func Dlacn2Test(t *testing.T, impl Dlacn2er) { + rnd := rand.New(rand.NewSource(1)) + for _, n := range []int{1, 2, 3, 4, 5, 7, 10, 15, 20, 100} { + for cas := 0; cas < 10; cas++ { + a := randomGeneral(n, n, n, rnd) + + // Compute the 1-norm of A explicitly. + var norm1 float64 + for j := 0; j < n; j++ { + var sum float64 + for i := 0; i < n; i++ { + sum += math.Abs(a.Data[i*a.Stride+j]) + } + if sum > norm1 { + norm1 = sum + } + } + + // Compute the estimate of 1-norm using Dlanc2. + x := make([]float64, n) + work := make([]float64, n) + v := make([]float64, n) + isgn := make([]int, n) + var ( + kase int + isave [3]int + got float64 + ) + loop: + for { + got, kase = impl.Dlacn2(n, v, x, isgn, got, kase, &isave) + switch kase { + default: + panic("Dlacn2 returned invalid value of kase") + case 0: + break loop + case 1: + blas64.Gemv(blas.NoTrans, 1, a, blas64.Vector{1, x}, 0, blas64.Vector{1, work}) + copy(x, work) + case 2: + blas64.Gemv(blas.Trans, 1, a, blas64.Vector{1, x}, 0, blas64.Vector{1, work}) + copy(x, work) + } + } + + // Check that got is either accurate enough or a + // lower estimate of the 1-norm of A. + if math.Abs(got-norm1) > 1e-8 && got > norm1 { + t.Errorf("Case n=%v: not lower estimate. 1-norm %v, estimate %v", n, norm1, got) + } + } + } +} diff --git a/lapack/testlapack/dlacpy.go b/lapack/testlapack/dlacpy.go new file mode 100644 index 00000000..badab1a5 --- /dev/null +++ b/lapack/testlapack/dlacpy.go @@ -0,0 +1,89 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" +) + +type Dlacpyer interface { + Dlacpy(uplo blas.Uplo, m, n int, a []float64, lda int, b []float64, ldb int) +} + +func DlacpyTest(t *testing.T, impl Dlacpyer) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower, blas.All} { + for _, test := range []struct { + m, n, lda, ldb int + }{ + {3, 5, 0, 0}, + {5, 5, 0, 0}, + {7, 5, 0, 0}, + + {3, 5, 10, 12}, + {5, 5, 10, 12}, + {7, 5, 10, 12}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + ldb := test.ldb + if ldb == 0 { + ldb = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + b := make([]float64, m*ldb) + for i := range b { + b[i] = rnd.Float64() + } + impl.Dlacpy(uplo, m, n, a, lda, b, ldb) + equal := true + switch uplo { + case blas.Upper: + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + if b[i*ldb+j] != a[i*lda+j] { + equal = false + goto DoneCheck + } + } + } + case blas.Lower: + for i := 0; i < m; i++ { + for j := 0; j < min(i, n); j++ { + if b[i*ldb+j] != a[i*lda+j] { + equal = false + goto DoneCheck + } + } + } + case blas.All: + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if b[i*ldb+j] != a[i*lda+j] { + equal = false + goto DoneCheck + } + } + } + } + DoneCheck: + if !equal { + fmt.Println(blas.Lower) + t.Errorf("Matrices not equal after copy. Uplo = %d, m = %d, n = %d", uplo, m, n) + } + } + } +} diff --git a/lapack/testlapack/dlae2.go b/lapack/testlapack/dlae2.go new file mode 100644 index 00000000..236b3f2b --- /dev/null +++ b/lapack/testlapack/dlae2.go @@ -0,0 +1,53 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "testing" +) + +type Dlae2er interface { + Dlae2(a, b, c float64) (rt1, rt2 float64) +} + +func Dlae2Test(t *testing.T, impl Dlae2er) { + for _, test := range []struct { + a, b, c float64 + }{ + {-10, 5, 3}, + {3, 5, -10}, + {0, 3, 0}, + {1, 3, 1}, + {1, -3, 1}, + {5, 0, 3}, + {3, 0, -5}, + {1, 3, 1.02}, + {1.02, 3, 1}, + {1, -3, -9}, + } { + a := test.a + b := test.b + c := test.c + rt1, rt2 := impl.Dlae2(a, b, c) + + errStr := fmt.Sprintf("a = %v, b = %v, c = %v", a, b, c) + // Check if rt1 and rt2 are eigenvalues by checking if det(a - λI) = 0 + a1 := a - rt1 + c1 := c - rt1 + det := a1*c1 - b*b + if math.Abs(det) > 1e-10 { + t.Errorf("First eigenvalue mismatch. %s. Det = %v", errStr, det) + } + + a2 := a - rt2 + c2 := c - rt2 + det = a2*c2 - b*b + if math.Abs(det) > 1e-10 { + t.Errorf("Second eigenvalue mismatch. %s. Det = %v", errStr, det) + } + } +} diff --git a/lapack/testlapack/dlaev2.go b/lapack/testlapack/dlaev2.go new file mode 100644 index 00000000..3aea2d74 --- /dev/null +++ b/lapack/testlapack/dlaev2.go @@ -0,0 +1,46 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" +) + +type Dlaev2er interface { + Dlaev2(a, b, c float64) (rt1, rt2, cs1, sn1 float64) +} + +func Dlaev2Test(t *testing.T, impl Dlaev2er) { + rnd := rand.New(rand.NewSource(1)) + for trial := 0; trial < 100; trial++ { + a := rnd.NormFloat64() + b := rnd.NormFloat64() + c := rnd.NormFloat64() + + rt1, rt2, cs1, sn1 := impl.Dlaev2(a, b, c) + tmp := mul2by2([2][2]float64{{cs1, sn1}, {-sn1, cs1}}, [2][2]float64{{a, b}, {b, c}}) + ans := mul2by2(tmp, [2][2]float64{{cs1, -sn1}, {sn1, cs1}}) + if math.Abs(ans[0][0]-rt1) > 1e-14 { + t.Errorf("Largest eigenvalue mismatch. Returned %v, mul %v", rt1, ans[0][0]) + } + if math.Abs(ans[1][0]) > 1e-14 || math.Abs(ans[0][1]) > 1e-14 { + t.Errorf("Non-zero off diagonal. ans[1][0] = %v, ans[0][1] = %v", ans[1][0], ans[0][1]) + } + if math.Abs(ans[1][1]-rt2) > 1e-14 { + t.Errorf("Smallest eigenvalue mismatch. Returned %v, mul %v", rt2, ans[1][1]) + } + } +} + +func mul2by2(a, b [2][2]float64) [2][2]float64 { + var c [2][2]float64 + c[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + c[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + return c +} diff --git a/lapack/testlapack/dlaexc.go b/lapack/testlapack/dlaexc.go new file mode 100644 index 00000000..c0e7bb45 --- /dev/null +++ b/lapack/testlapack/dlaexc.go @@ -0,0 +1,227 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/cmplx" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaexcer interface { + Dlaexc(wantq bool, n int, t []float64, ldt int, q []float64, ldq int, j1, n1, n2 int, work []float64) bool +} + +func DlaexcTest(t *testing.T, impl Dlaexcer) { + rnd := rand.New(rand.NewSource(1)) + + for _, wantq := range []bool{true, false} { + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { + for _, extra := range []int{0, 1, 11} { + for cas := 0; cas < 100; cas++ { + j1 := rnd.Intn(n) + n1 := min(rnd.Intn(3), n-j1) + n2 := min(rnd.Intn(3), n-j1-n1) + testDlaexc(t, impl, wantq, n, j1, n1, n2, extra, rnd) + } + } + } + } +} + +func testDlaexc(t *testing.T, impl Dlaexcer, wantq bool, n, j1, n1, n2, extra int, rnd *rand.Rand) { + const tol = 1e-14 + + tmat := randomGeneral(n, n, n+extra, rnd) + // Zero out the lower triangle. + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + tmat.Data[i*tmat.Stride+j] = 0 + } + } + // Make any 2x2 diagonal block to be in Schur canonical form. + if n1 == 2 { + // Diagonal elements equal. + tmat.Data[(j1+1)*tmat.Stride+j1+1] = tmat.Data[j1*tmat.Stride+j1] + // Off-diagonal elements of opposite sign. + c := rnd.NormFloat64() + if math.Signbit(c) == math.Signbit(tmat.Data[j1*tmat.Stride+j1+1]) { + c *= -1 + } + tmat.Data[(j1+1)*tmat.Stride+j1] = c + } + if n2 == 2 { + // Diagonal elements equal. + tmat.Data[(j1+n1+1)*tmat.Stride+j1+n1+1] = tmat.Data[(j1+n1)*tmat.Stride+j1+n1] + // Off-diagonal elements of opposite sign. + c := rnd.NormFloat64() + if math.Signbit(c) == math.Signbit(tmat.Data[(j1+n1)*tmat.Stride+j1+n1+1]) { + c *= -1 + } + tmat.Data[(j1+n1+1)*tmat.Stride+j1+n1] = c + } + tmatCopy := cloneGeneral(tmat) + var q, qCopy blas64.General + if wantq { + q = eye(n, n+extra) + qCopy = cloneGeneral(q) + } + work := nanSlice(n) + + ok := impl.Dlaexc(wantq, n, tmat.Data, tmat.Stride, q.Data, q.Stride, j1, n1, n2, work) + + prefix := fmt.Sprintf("Case n=%v, j1=%v, n1=%v, n2=%v, wantq=%v, extra=%v", n, j1, n1, n2, wantq, extra) + + if !generalOutsideAllNaN(tmat) { + t.Errorf("%v: out-of-range write to T", prefix) + } + if wantq && !generalOutsideAllNaN(q) { + t.Errorf("%v: out-of-range write to Q", prefix) + } + + if !ok { + if n1 == 1 && n2 == 1 { + t.Errorf("%v: unexpected failure", prefix) + } else { + t.Logf("%v: Dlaexc returned false") + } + } + + if !ok || n1 == 0 || n2 == 0 || j1+n1 >= n { + // Check that T is not modified. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if tmat.Data[i*tmat.Stride+j] != tmatCopy.Data[i*tmatCopy.Stride+j] { + t.Errorf("%v: ok == false but T[%v,%v] modified", prefix, i, j) + } + } + } + if !wantq { + return + } + // Check that Q is not modified. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if q.Data[i*q.Stride+j] != qCopy.Data[i*qCopy.Stride+j] { + t.Errorf("%v: ok == false but Q[%v,%v] modified", prefix, i, j) + } + } + } + return + } + + // Check that T is not modified outside of rows and columns [j1:j1+n1+n2]. + for i := 0; i < n; i++ { + if j1 <= i && i < j1+n1+n2 { + continue + } + for j := 0; j < n; j++ { + if j1 <= j && j < j1+n1+n2 { + continue + } + diff := tmat.Data[i*tmat.Stride+j] - tmatCopy.Data[i*tmatCopy.Stride+j] + if diff != 0 { + t.Errorf("%v: unexpected modification of T[%v,%v]", prefix, i, j) + } + } + } + + if n1 == 1 { + // 1×1 blocks are swapped exactly. + got := tmat.Data[(j1+n2)*tmat.Stride+j1+n2] + want := tmatCopy.Data[j1*tmatCopy.Stride+j1] + if want != got { + t.Errorf("%v: unexpected value of T[%v,%v]. Want %v, got %v", prefix, j1+n2, j1+n2, want, got) + } + } else { + // Check that the swapped 2×2 block is in Schur canonical form. + // The n1×n1 block is now located at T[j1+n2,j1+n2]. + a, b, c, d := extract2x2Block(tmat.Data[(j1+n2)*tmat.Stride+j1+n2:], tmat.Stride) + if !isSchurCanonical(a, b, c, d) { + t.Errorf("%v: 2×2 block at T[%v,%v] not in Schur canonical form", prefix, j1+n2, j1+n2) + } + ev1Got, ev2Got := schurBlockEigenvalues(a, b, c, d) + + // Check that the swapped 2×2 block has the same eigenvalues. + // The n1×n1 block was originally located at T[j1,j1]. + a, b, c, d = extract2x2Block(tmatCopy.Data[j1*tmatCopy.Stride+j1:], tmatCopy.Stride) + ev1Want, ev2Want := schurBlockEigenvalues(a, b, c, d) + if cmplx.Abs(ev1Got-ev1Want) > tol { + t.Errorf("%v: unexpected first eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, j1+n2, j1+n2, ev1Want, ev1Got) + } + if cmplx.Abs(ev2Got-ev2Want) > tol { + t.Errorf("%v: unexpected second eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, j1+n2, j1+n2, ev2Want, ev2Got) + } + } + if n2 == 1 { + // 1×1 blocks are swapped exactly. + got := tmat.Data[j1*tmat.Stride+j1] + want := tmatCopy.Data[(j1+n1)*tmatCopy.Stride+j1+n1] + if want != got { + t.Errorf("%v: unexpected value of T[%v,%v]. Want %v, got %v", prefix, j1, j1, want, got) + } + } else { + // Check that the swapped 2×2 block is in Schur canonical form. + // The n2×n2 block is now located at T[j1,j1]. + a, b, c, d := extract2x2Block(tmat.Data[j1*tmat.Stride+j1:], tmat.Stride) + if !isSchurCanonical(a, b, c, d) { + t.Errorf("%v: 2×2 block at T[%v,%v] not in Schur canonical form", prefix, j1, j1) + } + ev1Got, ev2Got := schurBlockEigenvalues(a, b, c, d) + + // Check that the swapped 2×2 block has the same eigenvalues. + // The n2×n2 block was originally located at T[j1+n1,j1+n1]. + a, b, c, d = extract2x2Block(tmatCopy.Data[(j1+n1)*tmatCopy.Stride+j1+n1:], tmatCopy.Stride) + ev1Want, ev2Want := schurBlockEigenvalues(a, b, c, d) + if cmplx.Abs(ev1Got-ev1Want) > tol { + t.Errorf("%v: unexpected first eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, j1, j1, ev1Want, ev1Got) + } + if cmplx.Abs(ev2Got-ev2Want) > tol { + t.Errorf("%v: unexpected second eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, j1, j1, ev2Want, ev2Got) + } + } + + if !wantq { + return + } + + if !isOrthonormal(q) { + t.Errorf("%v: Q is not orthogonal", prefix) + } + // Check that Q is unchanged outside of columns [j1:j1+n1+n2]. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if j1 <= j && j < j1+n1+n2 { + continue + } + diff := q.Data[i*q.Stride+j] - qCopy.Data[i*qCopy.Stride+j] + if diff != 0 { + t.Errorf("%v: unexpected modification of Q[%v,%v]", prefix, i, j) + } + } + } + // Check that Q^T TOrig Q == T. + tq := eye(n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmatCopy, q, 0, tq) + qtq := eye(n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, tq, 0, qtq) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + diff := qtq.Data[i*qtq.Stride+j] - tmat.Data[i*tmat.Stride+j] + if math.Abs(diff) > tol { + t.Errorf("%v: unexpected value of T[%v,%v]", prefix, i, j) + } + } + } +} diff --git a/lapack/testlapack/dlags2.go b/lapack/testlapack/dlags2.go new file mode 100644 index 00000000..77355956 --- /dev/null +++ b/lapack/testlapack/dlags2.go @@ -0,0 +1,100 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dlags2er interface { + Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (csu, snu, csv, snv, csq, snq float64) +} + +func Dlags2Test(t *testing.T, impl Dlags2er) { + rnd := rand.New(rand.NewSource(1)) + for _, upper := range []bool{true, false} { + for i := 0; i < 100; i++ { + a1 := rnd.Float64() + a2 := rnd.Float64() + a3 := rnd.Float64() + b1 := rnd.Float64() + b2 := rnd.Float64() + b3 := rnd.Float64() + + csu, snu, csv, snv, csq, snq := impl.Dlags2(upper, a1, a2, a3, b1, b2, b3) + + detU := det2x2(csu, snu, -snu, csu) + if !floats.EqualWithinAbsOrRel(math.Abs(detU), 1, 1e-14, 1e-14) { + t.Errorf("U not orthogonal: det(U)=%v", detU) + } + detV := det2x2(csv, snv, -snv, csv) + if !floats.EqualWithinAbsOrRel(math.Abs(detV), 1, 1e-14, 1e-14) { + t.Errorf("V not orthogonal: det(V)=%v", detV) + } + detQ := det2x2(csq, snq, -snq, csq) + if !floats.EqualWithinAbsOrRel(math.Abs(detQ), 1, 1e-14, 1e-14) { + t.Errorf("Q not orthogonal: det(Q)=%v", detQ) + } + + u := blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{csu, snu, -snu, csu}, + } + v := blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{csv, snv, -snv, csv}, + } + q := blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{csq, snq, -snq, csq}, + } + + a := blas64.General{Rows: 2, Cols: 2, Stride: 2} + b := blas64.General{Rows: 2, Cols: 2, Stride: 2} + if upper { + a.Data = []float64{a1, a2, 0, a3} + b.Data = []float64{b1, b2, 0, b3} + } else { + a.Data = []float64{a1, 0, a2, a3} + b.Data = []float64{b1, 0, b2, b3} + } + + tmp := blas64.General{Rows: 2, Cols: 2, Stride: 2, Data: make([]float64, 4)} + blas64.Gemm(blas.Trans, blas.NoTrans, 1, u, a, 0, tmp) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, q, 0, a) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, v, b, 0, tmp) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, q, 0, b) + + var gotA, gotB float64 + if upper { + gotA = a.Data[1] + gotB = b.Data[1] + } else { + gotA = a.Data[2] + gotB = b.Data[2] + } + if !floats.EqualWithinAbsOrRel(gotA, 0, 1e-14, 1e-14) { + t.Errorf("unexpected non-zero value for zero triangle of U^T*A*Q: %v", gotA) + } + if !floats.EqualWithinAbsOrRel(gotB, 0, 1e-14, 1e-14) { + t.Errorf("unexpected non-zero value for zero triangle of V^T*B*Q: %v", gotB) + } + } + } +} + +func det2x2(a, b, c, d float64) float64 { return a*d - b*c } diff --git a/lapack/testlapack/dlahqr.go b/lapack/testlapack/dlahqr.go new file mode 100644 index 00000000..6b0c8fc2 --- /dev/null +++ b/lapack/testlapack/dlahqr.go @@ -0,0 +1,441 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlahqrer interface { + Dlahqr(wantt, wantz bool, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, iloz, ihiz int, z []float64, ldz int) int +} + +type dlahqrTest struct { + h blas64.General + ilo, ihi int + iloz, ihiz int + wantt, wantz bool + + evWant []complex128 // Optional slice holding known eigenvalues. +} + +func DlahqrTest(t *testing.T, impl Dlahqrer) { + rnd := rand.New(rand.NewSource(1)) + + // Tests that choose the [ilo:ihi+1,ilo:ihi+1] and + // [iloz:ihiz+1,ilo:ihi+1] blocks randomly. + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { + for _, extra := range []int{0, 1, 11} { + for cas := 0; cas < 100; cas++ { + ilo := rnd.Intn(n) + ihi := rnd.Intn(n) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + iloz := rnd.Intn(ilo + 1) + ihiz := ihi + rnd.Intn(n-ihi) + h := randomHessenberg(n, n+extra, rnd) + if ilo-1 >= 0 { + h.Data[ilo*h.Stride+ilo-1] = 0 + } + if ihi+1 < n { + h.Data[(ihi+1)*h.Stride+ihi] = 0 + } + test := dlahqrTest{ + h: h, + ilo: ilo, + ihi: ihi, + iloz: iloz, + ihiz: ihiz, + wantt: wantt, + wantz: wantz, + } + testDlahqr(t, impl, test) + } + } + } + } + } + // Tests that make sure that some potentially problematic corner cases, + // like zero-sized matrix, are covered. + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, extra := range []int{0, 1, 11} { + for _, test := range []dlahqrTest{ + { + h: randomHessenberg(0, extra, rnd), + ilo: 0, + ihi: -1, + iloz: 0, + ihiz: -1, + }, + { + h: randomHessenberg(1, 1+extra, rnd), + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + }, + { + h: randomHessenberg(2, 2+extra, rnd), + ilo: 1, + ihi: 1, + iloz: 1, + ihiz: 1, + }, + { + h: randomHessenberg(2, 2+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 9, + iloz: 0, + ihiz: 9, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 9, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 9, + ihi: 9, + iloz: 0, + ihiz: 9, + }, + } { + if test.ilo-1 >= 0 { + test.h.Data[test.ilo*test.h.Stride+test.ilo-1] = 0 + } + if test.ihi+1 < test.h.Rows { + test.h.Data[(test.ihi+1)*test.h.Stride+test.ihi] = 0 + } + test.wantt = wantt + test.wantz = wantz + testDlahqr(t, impl, test) + } + } + } + } + + // Tests with explicit eigenvalues computed by Octave. + for _, test := range []dlahqrTest{ + { + h: blas64.General{ + Rows: 1, + Cols: 1, + Stride: 1, + Data: []float64{7.09965484086874e-1}, + }, + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + evWant: []complex128{7.09965484086874e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 0, -1, + 1, 0, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{1i, -1i}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 6.25219991450918e-1, 8.17510791994361e-1, + 3.31218891622294e-1, 1.24103744878131e-1, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 4, + Cols: 4, + Stride: 4, + Data: []float64{ + 1, 0, 0, 0, + 0, 6.25219991450918e-1, 8.17510791994361e-1, 0, + 0, 3.31218891622294e-1, 1.24103744878131e-1, 0, + 0, 0, 0, 1, + }, + }, + ilo: 1, + ihi: 2, + iloz: 0, + ihiz: 3, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + -1.1219562276608, 6.85473513349362e-1, + -8.19951061145131e-1, 1.93728523178888e-1, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{ + -4.64113852240958e-1 + 3.59580510817350e-1i, + -4.64113852240958e-1 - 3.59580510817350e-1i, + }, + }, + { + h: blas64.General{ + Rows: 5, + Cols: 5, + Stride: 5, + Data: []float64{ + 9.57590178533658e-1, -5.10651295522708e-1, 9.24974510015869e-1, -1.30016306879522e-1, 2.92601986926954e-2, + -1.08084756637964, 1.77529701001213, -1.36480197632509, 2.23196371219601e-1, 1.12912853063308e-1, + 0, -8.44075612174676e-1, 1.067867614486, -2.55782915176399e-1, -2.00598563137468e-1, + 0, 0, -5.67097237165410e-1, 2.07205057427341e-1, 6.54998340743380e-1, + 0, 0, 0, -1.89441413886041e-1, -4.18125416021786e-1, + }, + }, + ilo: 0, + ihi: 4, + iloz: 0, + ihiz: 4, + evWant: []complex128{ + 2.94393309555622, + 4.97029793606701e-1 + 3.63041654992384e-1i, + 4.97029793606701e-1 - 3.63041654992384e-1i, + -1.74079119166145e-1 + 2.01570009462092e-1i, + -1.74079119166145e-1 - 2.01570009462092e-1i, + }, + }, + } { + test.wantt = true + test.wantz = true + testDlahqr(t, impl, test) + } +} + +func testDlahqr(t *testing.T, impl Dlahqrer, test dlahqrTest) { + const tol = 1e-14 + + h := cloneGeneral(test.h) + n := h.Cols + extra := h.Stride - h.Cols + wantt := test.wantt + wantz := test.wantz + ilo := test.ilo + ihi := test.ihi + iloz := test.iloz + ihiz := test.ihiz + + var z, zCopy blas64.General + if wantz { + z = eye(n, n+extra) + zCopy = cloneGeneral(z) + } + + wr := nanSlice(ihi + 1) + wi := nanSlice(ihi + 1) + + unconverged := impl.Dlahqr(wantt, wantz, n, ilo, ihi, h.Data, h.Stride, wr, wi, iloz, ihiz, z.Data, z.Stride) + + prefix := fmt.Sprintf("Case wantt=%v, wantz=%v, n=%v, ilo=%v, ihi=%v, iloz=%v, ihiz=%v, extra=%v", + wantt, wantz, n, ilo, ihi, iloz, ihiz, extra) + + if !generalOutsideAllNaN(h) { + t.Errorf("%v: out-of-range write to H\n%v", prefix, h.Data) + } + if !generalOutsideAllNaN(z) { + t.Errorf("%v: out-of-range write to Z\n%v", prefix, z.Data) + } + + if !isUpperHessenberg(h) { + t.Logf("%v: H is not Hessenberg", prefix) + } + + start := ilo // Index of the first computed eigenvalue. + if unconverged != 0 { + start = unconverged + if start == ihi+1 { + t.Logf("%v: no eigenvalue has converged", prefix) + } + } + + // Check that wr and wi have not been modified in [:start]. + if !isAllNaN(wr[:start]) { + t.Errorf("%v: unexpected modification of wr", prefix) + } + if !isAllNaN(wi[:start]) { + t.Errorf("%v: unexpected modification of wi", prefix) + } + + var hasReal bool + for i := start; i <= ihi; { + if wi[i] == 0 { // Real eigenvalue. + hasReal = true + // Check that the eigenvalue corresponds to a 1×1 block + // on the diagonal of H. + if wantt { + if wr[i] != h.Data[i*h.Stride+i] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i, i) + } + for _, index := range []struct{ r, c int }{ + {i, i - 1}, // h h h + {i + 1, i - 1}, // 0 wr[i] h + {i + 1, i}, // 0 0 h + } { + if index.r >= n || index.c < 0 { + continue + } + if h.Data[index.r*h.Stride+index.c] != 0 { + t.Errorf("%v: H[%v,%v] != 0", prefix, index.r, index.c) + } + } + } + i++ + continue + } + + // Complex eigenvalue. + + // In the conjugate pair the real parts must be equal. + if wr[i] != wr[i+1] { + t.Errorf("%v: real part of conjugate pair not equal, i=%v", prefix, i) + } + // The first imaginary part must be positive. + if wi[i] < 0 { + t.Errorf("%v: wi[%v] not positive", prefix, i) + } + // The second imaginary part must be negative with the same + // magnitude. + if wi[i] != -wi[i+1] { + t.Errorf("%v: wi[%v] != -wi[%v]", prefix, i, i+1) + } + if wantt { + // Check that wi[i] has the correct value. + if wr[i] != h.Data[i*h.Stride+i] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i, i) + } + if wr[i] != h.Data[(i+1)*h.Stride+i+1] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i+1, i+1) + } + prod := math.Abs(h.Data[(i+1)*h.Stride+i] * h.Data[i*h.Stride+i+1]) + if math.Abs(math.Sqrt(prod)-wi[i]) > tol { + t.Errorf("%v: unexpected value of wi[%v]: want %v, got %v", prefix, i, math.Sqrt(prod), wi[i]) + } + + // Check that the corresponding diagonal block is 2×2. + for _, index := range []struct{ r, c int }{ + {i, i - 1}, // i + {i + 1, i - 1}, // h h h h + {i + 2, i - 1}, // 0 wr[i] b h i + {i + 2, i}, // 0 c wr[i+1] h + {i + 2, i + 1}, // 0 0 0 h + } { + if index.r >= n || index.c < 0 { + continue + } + if h.Data[index.r*h.Stride+index.c] != 0 { + t.Errorf("%v: H[%v,%v] != 0", prefix, index.r, index.c) + } + } + } + i += 2 + } + // If the number of found eigenvalues is odd, at least one must be real. + if (ihi+1-start)%2 != 0 && !hasReal { + t.Errorf("%v: expected at least one real eigenvalue", prefix) + } + + // Compare found eigenvalues to the reference, if known. + if test.evWant != nil { + for i := start; i <= ihi; i++ { + ev := complex(wr[i], wi[i]) + found, _ := containsComplex(test.evWant, ev, tol) + if !found { + t.Errorf("%v: unexpected eigenvalue %v", prefix, ev) + } + } + } + + if !wantz { + return + } + + // Z should contain the orthogonal matrix U. + if !isOrthonormal(z) { + t.Errorf("%v: Z is not orthogonal", prefix) + } + // Z should have been modified only in the + // [iloz:ihiz+1,ilo:ihi+1] block. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if iloz <= i && i <= ihiz && ilo <= j && j <= ihi { + continue + } + if z.Data[i*z.Stride+j] != zCopy.Data[i*zCopy.Stride+j] { + t.Errorf("%v: Z modified outside of [iloz:ihiz+1,ilo:ihi+1] block", prefix) + } + } + } + if wantt { + hu := eye(n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, test.h, z, 0, hu) + uhu := eye(n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, z, hu, 0, uhu) + if !equalApproxGeneral(uhu, h, 10*tol) { + t.Errorf("%v: Z^T*(initial H)*Z and (final H) are not equal", prefix) + } + } +} diff --git a/lapack/testlapack/dlahr2.go b/lapack/testlapack/dlahr2.go new file mode 100644 index 00000000..ccd9c71c --- /dev/null +++ b/lapack/testlapack/dlahr2.go @@ -0,0 +1,240 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "compress/gzip" + "encoding/json" + "fmt" + "log" + "math" + "math/rand" + "os" + "path/filepath" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dlahr2er interface { + Dlahr2(n, k, nb int, a []float64, lda int, tau, t []float64, ldt int, y []float64, ldy int) +} + +type Dlahr2test struct { + N, K, NB int + A []float64 + + AWant []float64 + TWant []float64 + YWant []float64 + TauWant []float64 +} + +func Dlahr2Test(t *testing.T, impl Dlahr2er) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + n, k, nb int + }{ + {3, 0, 3}, + {3, 1, 2}, + {3, 1, 1}, + + {5, 0, 5}, + {5, 1, 4}, + {5, 1, 3}, + {5, 1, 2}, + {5, 1, 1}, + {5, 2, 3}, + {5, 2, 2}, + {5, 2, 1}, + {5, 3, 2}, + {5, 3, 1}, + + {7, 3, 4}, + {7, 3, 3}, + {7, 3, 2}, + {7, 3, 1}, + + {10, 0, 10}, + {10, 1, 9}, + {10, 1, 5}, + {10, 1, 1}, + {10, 5, 5}, + {10, 5, 3}, + {10, 5, 1}, + } { + for cas := 0; cas < 100; cas++ { + for _, extraStride := range []int{0, 1, 10} { + n := test.n + k := test.k + nb := test.nb + + a := randomGeneral(n, n-k+1, n-k+1+extraStride, rnd) + aCopy := a + aCopy.Data = make([]float64, len(a.Data)) + copy(aCopy.Data, a.Data) + tmat := nanTriangular(blas.Upper, nb, nb+extraStride) + y := nanGeneral(n, nb, nb+extraStride) + tau := nanSlice(nb) + + impl.Dlahr2(n, k, nb, a.Data, a.Stride, tau, tmat.Data, tmat.Stride, y.Data, y.Stride) + + prefix := fmt.Sprintf("Case n=%v, k=%v, nb=%v, ldex=%v", n, k, nb, extraStride) + + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + if !triangularOutsideAllNaN(tmat) { + t.Errorf("%v: out-of-range write to T\n%v", prefix, tmat.Data) + } + if !generalOutsideAllNaN(y) { + t.Errorf("%v: out-of-range write to Y\n%v", prefix, y.Data) + } + + // Check that A[:k,:] and A[:,nb:] blocks were not modified. + for i := 0; i < n; i++ { + for j := 0; j < n-k+1; j++ { + if i >= k && j < nb { + continue + } + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected write to A[%v,%v]", prefix, i, j) + } + } + } + + // Check that all elements of tau were assigned. + for i, v := range tau { + if math.IsNaN(v) { + t.Errorf("%v: tau[%v] not assigned", prefix, i) + } + } + + // Extract V from a. + v := blas64.General{ + Rows: n - k + 1, + Cols: nb, + Stride: nb, + Data: make([]float64, (n-k+1)*nb), + } + for j := 0; j < v.Cols; j++ { + v.Data[(j+1)*v.Stride+j] = 1 + for i := j + 2; i < v.Rows; i++ { + v.Data[i*v.Stride+j] = a.Data[(i+k-1)*a.Stride+j] + } + } + + // VT = V. + vt := v + vt.Data = make([]float64, len(v.Data)) + copy(vt.Data, v.Data) + // VT = V * T. + blas64.Trmm(blas.Right, blas.NoTrans, 1, tmat, vt) + // YWant = A * V * T. + ywant := blas64.General{ + Rows: n, + Cols: nb, + Stride: nb, + Data: make([]float64, n*nb), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aCopy, vt, 0, ywant) + + // Compare Y and YWant. + for i := 0; i < n; i++ { + for j := 0; j < nb; j++ { + diff := math.Abs(ywant.Data[i*ywant.Stride+j] - y.Data[i*y.Stride+j]) + if diff > 1e-14 { + t.Errorf("%v: unexpected Y[%v,%v], diff=%v", prefix, i, j, diff) + } + } + } + + // Construct Q directly from the first nb columns of a. + q := constructQ("QR", n-k, nb, a.Data[k*a.Stride:], a.Stride, tau) + if !isOrthonormal(q) { + t.Errorf("%v: Q is not orthogonal", prefix) + } + // Construct Q as the product Q = I - V*T*V^T. + qwant := blas64.General{ + Rows: n - k + 1, + Cols: n - k + 1, + Stride: n - k + 1, + Data: make([]float64, (n-k+1)*(n-k+1)), + } + for i := 0; i < qwant.Rows; i++ { + qwant.Data[i*qwant.Stride+i] = 1 + } + blas64.Gemm(blas.NoTrans, blas.Trans, -1, vt, v, 1, qwant) + if !isOrthonormal(qwant) { + t.Errorf("%v: Q = I - V*T*V^T is not orthogonal", prefix) + } + + // Compare Q and QWant. Note that since Q is + // (n-k)×(n-k) and QWant is (n-k+1)×(n-k+1), we + // ignore the first row and column of QWant. + for i := 0; i < n-k; i++ { + for j := 0; j < n-k; j++ { + diff := math.Abs(q.Data[i*q.Stride+j] - qwant.Data[(i+1)*qwant.Stride+j+1]) + if diff > 1e-14 { + t.Errorf("%v: unexpected Q[%v,%v], diff=%v", prefix, i, j, diff) + } + } + } + } + } + } + + // Go runs tests from the source directory, so unfortunately we need to + // include the "../testlapack" part. + file, err := os.Open(filepath.FromSlash("../testlapack/testdata/dlahr2data.json.gz")) + if err != nil { + log.Fatal(err) + } + defer file.Close() + r, err := gzip.NewReader(file) + if err != nil { + log.Fatal(err) + } + defer r.Close() + + var tests []Dlahr2test + json.NewDecoder(r).Decode(&tests) + for _, test := range tests { + tau := make([]float64, len(test.TauWant)) + for _, ldex := range []int{0, 1, 20} { + n := test.N + k := test.K + nb := test.NB + + lda := n - k + 1 + ldex + a := make([]float64, (n-1)*lda+n-k+1) + copyMatrix(n, n-k+1, a, lda, test.A) + + ldt := nb + ldex + tmat := make([]float64, (nb-1)*ldt+nb) + + ldy := nb + ldex + y := make([]float64, (n-1)*ldy+nb) + + impl.Dlahr2(n, k, nb, a, lda, tau, tmat, ldt, y, ldy) + + prefix := fmt.Sprintf("Case n=%v, k=%v, nb=%v, ldex=%v", n, k, nb, ldex) + if !equalApprox(n, n-k+1, a, lda, test.AWant, 1e-14) { + t.Errorf("%v: unexpected matrix A\n got=%v\nwant=%v", prefix, a, test.AWant) + } + if !equalApproxTriangular(true, nb, tmat, ldt, test.TWant, 1e-14) { + t.Errorf("%v: unexpected matrix T\n got=%v\nwant=%v", prefix, tmat, test.TWant) + } + if !equalApprox(n, nb, y, ldy, test.YWant, 1e-14) { + t.Errorf("%v: unexpected matrix Y\n got=%v\nwant=%v", prefix, y, test.YWant) + } + if !floats.EqualApprox(tau, test.TauWant, 1e-14) { + t.Errorf("%v: unexpected slice tau\n got=%v\nwant=%v", prefix, tau, test.TauWant) + } + } + } +} diff --git a/lapack/testlapack/dlaln2.go b/lapack/testlapack/dlaln2.go new file mode 100644 index 00000000..07a322b8 --- /dev/null +++ b/lapack/testlapack/dlaln2.go @@ -0,0 +1,139 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/cmplx" + "math/rand" + "testing" +) + +type Dlaln2er interface { + Dlaln2(trans bool, na, nw int, smin, ca float64, a []float64, lda int, d1, d2 float64, b []float64, ldb int, wr, wi float64, x []float64, ldx int) (scale, xnorm float64, ok bool) +} + +func Dlaln2Test(t *testing.T, impl Dlaln2er) { + rnd := rand.New(rand.NewSource(1)) + for _, trans := range []bool{true, false} { + for _, na := range []int{1, 2} { + for _, nw := range []int{1, 2} { + for _, extra := range []int{0, 1, 2, 13} { + for cas := 0; cas < 1000; cas++ { + testDlaln2(t, impl, trans, na, nw, extra, rnd) + } + } + } + } + } +} + +func testDlaln2(t *testing.T, impl Dlaln2er, trans bool, na, nw, extra int, rnd *rand.Rand) { + const tol = 1e-12 + const dlamchE = 1.0 / (1 << 53) + const dlamchP = 2 * dlamchE + + ca := rnd.NormFloat64() + d1 := rnd.NormFloat64() + d2 := rnd.NormFloat64() + + var w complex128 + if nw == 1 { + w = complex(rand.NormFloat64(), 0) + } else { + w = complex(rand.NormFloat64(), rand.NormFloat64()) + } + smin := dlamchP * (math.Abs(real(w)) + math.Abs(imag(w))) + + a := randomGeneral(na, na, na+extra, rnd) + b := randomGeneral(na, nw, nw+extra, rnd) + x := randomGeneral(na, nw, nw+extra, rnd) + + scale, xnormGot, ok := impl.Dlaln2(trans, na, nw, smin, ca, a.Data, a.Stride, d1, d2, b.Data, b.Stride, real(w), imag(w), x.Data, x.Stride) + + prefix := fmt.Sprintf("Case trans=%v, na=%v, nw=%v, extra=%v", trans, na, nw, extra) + + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + if !generalOutsideAllNaN(b) { + t.Errorf("%v: out-of-range write to B\n%v", prefix, b.Data) + } + if !generalOutsideAllNaN(x) { + t.Errorf("%v: out-of-range write to X\n%v", prefix, x.Data) + } + + if scale <= 0 || 1 < scale { + t.Errorf("%v: invalid value of scale=%v", prefix, scale) + } + + var xnormWant float64 + for i := 0; i < na; i++ { + var rowsum float64 + for j := 0; j < nw; j++ { + rowsum += math.Abs(x.Data[i*x.Stride+j]) + } + if rowsum > xnormWant { + xnormWant = rowsum + } + } + if xnormWant != xnormGot { + t.Errorf("Case %v: unexpected xnorm with scale=%v. Want %v, got %v", prefix, scale, xnormWant, xnormGot) + } + + if !ok { + // If ok is false, the matrix has been perturbed but we don't + // know how. Return without comparing both sides of the + // equation. + return + } + + m := make([]complex128, na*na) + if trans { + for i := 0; i < na; i++ { + for j := 0; j < na; j++ { + m[i*na+j] = complex(ca*a.Data[j*a.Stride+i], 0) + } + } + } else { + for i := 0; i < na; i++ { + for j := 0; j < na; j++ { + m[i*na+j] = complex(ca*a.Data[i*a.Stride+j], 0) + } + } + } + m[0] -= w * complex(d1, 0) + if na == 2 { + m[3] -= w * complex(d2, 0) + } + + cx := make([]complex128, na) + cb := make([]complex128, na) + switch nw { + case 1: + for i := 0; i < na; i++ { + cx[i] = complex(x.Data[i*x.Stride], 0) + cb[i] = complex(scale*b.Data[i*x.Stride], 0) + } + case 2: + for i := 0; i < na; i++ { + cx[i] = complex(x.Data[i*x.Stride], x.Data[i*x.Stride+1]) + cb[i] = complex(scale*b.Data[i*b.Stride], scale*b.Data[i*b.Stride+1]) + } + } + + mx := make([]complex128, na) + for i := 0; i < na; i++ { + for j := 0; j < na; j++ { + mx[i] += m[i*na+j] * cx[j] + } + } + for i := 0; i < na; i++ { + if cmplx.Abs(mx[i]-cb[i]) > tol { + t.Errorf("Case %v: unexpected value of left-hand side at row %v with scale=%v. Want %v, got %v", prefix, i, scale, cb[i], mx[i]) + } + } +} diff --git a/lapack/testlapack/dlange.go b/lapack/testlapack/dlange.go new file mode 100644 index 00000000..6c7e45ba --- /dev/null +++ b/lapack/testlapack/dlange.go @@ -0,0 +1,93 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +type Dlanger interface { + Dlange(norm lapack.MatrixNorm, m, n int, a []float64, lda int, work []float64) float64 +} + +func DlangeTest(t *testing.T, impl Dlanger) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {4, 3, 0}, + {3, 4, 0}, + {4, 3, 100}, + {3, 4, 100}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() - 0.5 + } + work := make([]float64, n) + for i := range work { + work[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + // Test MaxAbs norm. + norm := impl.Dlange(lapack.MaxAbs, m, n, a, lda, work) + var ans float64 + for i := 0; i < m; i++ { + idx := blas64.Iamax(n, blas64.Vector{Inc: 1, Data: aCopy[i*lda:]}) + ans = math.Max(ans, math.Abs(a[i*lda+idx])) + } + // Should be strictly equal because there is no floating point summation error. + if ans != norm { + t.Errorf("MaxAbs mismatch. Want %v, got %v.", ans, norm) + } + + // Test MaxColumnSum norm. + norm = impl.Dlange(lapack.MaxColumnSum, m, n, a, lda, work) + ans = 0 + for i := 0; i < n; i++ { + sum := blas64.Asum(m, blas64.Vector{Inc: lda, Data: aCopy[i:]}) + ans = math.Max(ans, sum) + } + if math.Abs(norm-ans) > 1e-14 { + t.Errorf("MaxColumnSum mismatch. Want %v, got %v.", ans, norm) + } + + // Test MaxRowSum norm. + norm = impl.Dlange(lapack.MaxRowSum, m, n, a, lda, work) + ans = 0 + for i := 0; i < m; i++ { + sum := blas64.Asum(n, blas64.Vector{Inc: 1, Data: aCopy[i*lda:]}) + ans = math.Max(ans, sum) + } + if math.Abs(norm-ans) > 1e-14 { + t.Errorf("MaxRowSum mismatch. Want %v, got %v.", ans, norm) + } + + // Test Frobenius norm + norm = impl.Dlange(lapack.NormFrob, m, n, a, lda, work) + ans = 0 + for i := 0; i < m; i++ { + sum := blas64.Nrm2(n, blas64.Vector{Inc: 1, Data: aCopy[i*lda:]}) + ans += sum * sum + } + ans = math.Sqrt(ans) + if math.Abs(norm-ans) > 1e-14 { + t.Errorf("NormFrob mismatch. Want %v, got %v.", ans, norm) + } + } +} diff --git a/lapack/testlapack/dlanst.go b/lapack/testlapack/dlanst.go new file mode 100644 index 00000000..18e29e88 --- /dev/null +++ b/lapack/testlapack/dlanst.go @@ -0,0 +1,53 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/lapack" +) + +type Dlanster interface { + Dlanst(norm lapack.MatrixNorm, n int, d, e []float64) float64 + Dlanger +} + +func DlanstTest(t *testing.T, impl Dlanster) { + rnd := rand.New(rand.NewSource(1)) + for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxColumnSum, lapack.MaxRowSum, lapack.NormFrob} { + for _, n := range []int{1, 3, 10, 100} { + for cas := 0; cas < 100; cas++ { + d := make([]float64, n) + for i := range d { + d[i] = rnd.NormFloat64() + } + e := make([]float64, n-1) + for i := range e { + e[i] = rnd.NormFloat64() + } + + m := n + lda := n + a := make([]float64, m*lda) + for i := 0; i < n; i++ { + a[i*lda+i] = d[i] + } + for i := 0; i < n-1; i++ { + a[i*lda+i+1] = e[i] + a[(i+1)*lda+i] = e[i] + } + work := make([]float64, n) + syNorm := impl.Dlanst(norm, n, d, e) + geNorm := impl.Dlange(norm, m, n, a, lda, work) + if math.Abs(syNorm-geNorm) > 1e-12 { + t.Errorf("Norm mismatch: norm = %v, cas = %v, n = %v. Want %v, got %v.", string(norm), cas, n, geNorm, syNorm) + } + } + } + } +} diff --git a/lapack/testlapack/dlansy.go b/lapack/testlapack/dlansy.go new file mode 100644 index 00000000..611929d4 --- /dev/null +++ b/lapack/testlapack/dlansy.go @@ -0,0 +1,80 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +type Dlansyer interface { + Dlanger + Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 +} + +func DlansyTest(t *testing.T, impl Dlansyer) { + rnd := rand.New(rand.NewSource(1)) + for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxColumnSum, lapack.MaxRowSum, lapack.NormFrob} { + for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { + for _, test := range []struct { + n, lda int + }{ + {1, 0}, + {3, 0}, + + {1, 10}, + {3, 10}, + } { + for trial := 0; trial < 100; trial++ { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, lda*n) + if trial == 0 { + for i := range a { + a[i] = float64(i) + } + } else { + for i := range a { + a[i] = rnd.NormFloat64() + } + } + + aDense := make([]float64, n*n) + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := a[i*lda+j] + aDense[i*n+j] = v + aDense[j*n+i] = v + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + v := a[i*lda+j] + aDense[i*n+j] = v + aDense[j*n+i] = v + } + } + } + work := make([]float64, n) + got := impl.Dlansy(norm, uplo, n, a, lda, work) + want := impl.Dlange(norm, n, n, aDense, n, work) + if math.Abs(want-got) > 1e-14 { + t.Errorf("Norm mismatch. norm = %c, upper = %v, n = %v, lda = %v, want %v, got %v.", + norm, uplo == blas.Upper, n, lda, got, want) + } + } + } + } + } +} diff --git a/lapack/testlapack/dlantr.go b/lapack/testlapack/dlantr.go new file mode 100644 index 00000000..212ae6a1 --- /dev/null +++ b/lapack/testlapack/dlantr.go @@ -0,0 +1,89 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +type Dlantrer interface { + Dlanger + Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64 +} + +func DlantrTest(t *testing.T, impl Dlantrer) { + rnd := rand.New(rand.NewSource(1)) + for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxColumnSum, lapack.MaxRowSum, lapack.NormFrob} { + for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { + for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { + for _, test := range []struct { + m, n, lda int + }{ + {3, 3, 0}, + {3, 5, 0}, + {10, 5, 0}, + + {5, 5, 11}, + {5, 10, 11}, + {10, 5, 11}, + } { + // Do a couple of random trials since the values change. + for trial := 0; trial < 100; trial++ { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + if trial == 0 { + for i := range a { + a[i] = float64(i) + } + } else { + for i := range a { + a[i] = rnd.NormFloat64() + } + } + aDense := make([]float64, len(a)) + if uplo == blas.Lower { + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + aDense[i*lda+j] = a[i*lda+j] + } + } + } else { + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + aDense[i*lda+j] = a[i*lda+j] + } + } + } + if diag == blas.Unit { + for i := 0; i < min(m, n); i++ { + aDense[i*lda+i] = 1 + } + } + work := make([]float64, n+6) + for i := range work { + work[i] = rnd.Float64() + } + got := impl.Dlantr(norm, uplo, diag, m, n, a, lda, work) + want := impl.Dlange(norm, m, n, aDense, lda, work) + if math.Abs(got-want) > 1e-13 { + t.Errorf("Norm mismatch. norm = %c, unitdiag = %v, upper = %v, m = %v, n = %v, lda = %v, Want %v, got %v.", + norm, diag == blas.Unit, uplo == blas.Upper, m, n, lda, got, want) + } + } + } + } + } + } +} diff --git a/lapack/testlapack/dlanv2.go b/lapack/testlapack/dlanv2.go new file mode 100644 index 00000000..07cf2c51 --- /dev/null +++ b/lapack/testlapack/dlanv2.go @@ -0,0 +1,69 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" +) + +type Dlanv2er interface { + Dlanv2(a, b, c, d float64) (aa, bb, cc, dd float64, rt1r, rt1i, rt2r, rt2i float64, cs, sn float64) +} + +func Dlanv2Test(t *testing.T, impl Dlanv2er) { + rnd := rand.New(rand.NewSource(1)) + for i := 0; i < 1000; i++ { + a := rnd.NormFloat64() + b := rnd.NormFloat64() + c := rnd.NormFloat64() + d := rnd.NormFloat64() + aa, bb, cc, dd, rt1r, rt1i, rt2r, rt2i, cs, sn := impl.Dlanv2(a, b, c, d) + + mat := fmt.Sprintf("[%v %v; %v %v]", a, b, c, d) + if cc == 0 { + if rt1i != 0 || rt2i != 0 { + t.Errorf("Unexpected complex eigenvalues for %v", mat) + } + } else { + if aa != dd { + t.Errorf("Diagonal elements not equal for %v: got [%v %v]", mat, aa, dd) + } + if bb*cc >= 0 { + t.Errorf("Non-diagonal elements have the same sign for %v: got [%v %v]", mat, bb, cc) + } else { + im := math.Sqrt(-bb * cc) + if math.Abs(rt1i-im) > 1e-14 && math.Abs(rt1i+im) > 1e-14 { + t.Errorf("Unexpected imaginary part of eigenvalue for %v: got %v, want %v or %v", mat, rt1i, im, -im) + } + if math.Abs(rt2i-im) > 1e-14 && math.Abs(rt2i+im) > 1e-14 { + t.Errorf("Unexpected imaginary part of eigenvalue for %v: got %v, want %v or %v", mat, rt2i, im, -im) + } + } + } + if rt1r != aa && rt1r != dd { + t.Errorf("Unexpected real part of eigenvalue for %v: got %v, want %v or %v", mat, rt1r, aa, dd) + } + if rt2r != aa && rt2r != dd { + t.Errorf("Unexpected real part of eigenvalue for %v: got %v, want %v or %v", mat, rt2r, aa, dd) + } + if math.Abs(math.Hypot(cs, sn)-1) > 1e-14 { + t.Errorf("Unexpected unitary matrix for %v: got cs %v, sn %v", mat, cs, sn) + } + + gota := cs*(aa*cs-bb*sn) - sn*(cc*cs-dd*sn) + gotb := cs*(aa*sn+bb*cs) - sn*(cc*sn+dd*cs) + gotc := sn*(aa*cs-bb*sn) + cs*(cc*cs-dd*sn) + gotd := sn*(aa*sn+bb*cs) + cs*(cc*sn+dd*cs) + if math.Abs(gota-a) > 1e-14 || + math.Abs(gotb-b) > 1e-14 || + math.Abs(gotc-c) > 1e-14 || + math.Abs(gotd-d) > 1e-14 { + t.Errorf("Unexpected factorization: got [%v %v; %v %v], want [%v %v; %v %v]", gota, gotb, gotc, gotd, a, b, c, d) + } + } +} diff --git a/lapack/testlapack/dlapll.go b/lapack/testlapack/dlapll.go new file mode 100644 index 00000000..4eb30ce2 --- /dev/null +++ b/lapack/testlapack/dlapll.go @@ -0,0 +1,46 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dlapller interface { + Dgesvder + Dlapll(n int, x []float64, incX int, y []float64, incY int) float64 +} + +func DlapllTest(t *testing.T, impl Dlapller) { + rnd := rand.New(rand.NewSource(1)) + for i, m := range []int{5, 6, 9, 300, 400, 600} { + n := 2 + lda := n + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + got := impl.Dlapll(m, a[0:], 2, a[1:], 2) + + s := make([]float64, min(m, n)) + work := make([]float64, 1) + impl.Dgesvd(lapack.SVDNone, lapack.SVDNone, m, n, aCopy, lda, s, nil, 0, nil, 0, work, -1) + work = make([]float64, int(work[0])) + impl.Dgesvd(lapack.SVDNone, lapack.SVDNone, m, n, aCopy, lda, s, nil, 0, nil, 0, work, len(work)) + want := s[len(s)-1] + + if !floats.EqualWithinAbsOrRel(got, want, 1e-14, 1e-14) { + t.Errorf("unexpected ssmin for test %d: got:%f want:%f", i, got, want) + } + } +} diff --git a/lapack/testlapack/dlapmt.go b/lapack/testlapack/dlapmt.go new file mode 100644 index 00000000..2965fb51 --- /dev/null +++ b/lapack/testlapack/dlapmt.go @@ -0,0 +1,113 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "testing" + + "github.com/gonum/blas/blas64" +) + +type Dlapmter interface { + Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int) +} + +func DlapmtTest(t *testing.T, impl Dlapmter) { + for ti, test := range []struct { + forward bool + k []int + + want blas64.General + }{ + { + forward: true, k: []int{0, 1, 2}, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + }, + }, + }, + { + forward: false, k: []int{0, 1, 2}, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + }, + }, + }, + { + forward: true, k: []int{1, 2, 0}, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 2, 3, 1, + 5, 6, 4, + 8, 9, 7, + 11, 12, 10, + }, + }, + }, + { + forward: false, k: []int{1, 2, 0}, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 3, 1, 2, + 6, 4, 5, + 9, 7, 8, + 12, 10, 11, + }, + }, + }, + } { + m := test.want.Rows + n := test.want.Cols + if len(test.k) != n { + panic("bad length of k") + } + + for _, extra := range []int{0, 11} { + x := zeros(m, n, n+extra) + c := 1 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + x.Data[i*x.Stride+j] = float64(c) + c++ + } + } + + k := make([]int, len(test.k)) + copy(k, test.k) + + impl.Dlapmt(test.forward, m, n, x.Data, x.Stride, k) + + prefix := fmt.Sprintf("Case %v (forward=%t,m=%v,n=%v,extra=%v)", ti, test.forward, m, n, extra) + if !generalOutsideAllNaN(x) { + t.Errorf("%v: out-of-range write to X", prefix) + } + + if !equalApproxGeneral(x, test.want, 0) { + t.Errorf("%v: unexpected X\n%v\n%v", prefix, x, test.want) + } + } + } +} diff --git a/lapack/testlapack/dlapy2.go b/lapack/testlapack/dlapy2.go new file mode 100644 index 00000000..5e2cda5f --- /dev/null +++ b/lapack/testlapack/dlapy2.go @@ -0,0 +1,30 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dlapy2er interface { + Dlapy2(float64, float64) float64 +} + +func Dlapy2Test(t *testing.T, impl Dlapy2er) { + rnd := rand.New(rand.NewSource(1)) + for i := 0; i < 10; i++ { + x := math.Abs(1e200 * rnd.NormFloat64()) + y := math.Abs(1e200 * rnd.NormFloat64()) + got := impl.Dlapy2(x, y) + want := math.Hypot(x, y) + if !floats.EqualWithinRel(got, want, 1e-16) { + t.Errorf("Dlapy2(%g, %g) = %g, want %g", x, y, got, want) + } + } +} diff --git a/lapack/testlapack/dlaqp2.go b/lapack/testlapack/dlaqp2.go new file mode 100644 index 00000000..a15b9d89 --- /dev/null +++ b/lapack/testlapack/dlaqp2.go @@ -0,0 +1,115 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaqp2er interface { + Dlapmter + Dlaqp2(m, n, offset int, a []float64, lda int, jpvt []int, tau, vn1, vn2, work []float64) +} + +func Dlaqp2Test(t *testing.T, impl Dlaqp2er) { + for ti, test := range []struct { + m, n, offset int + }{ + {m: 4, n: 3, offset: 0}, + {m: 4, n: 3, offset: 2}, + {m: 4, n: 3, offset: 4}, + {m: 3, n: 4, offset: 0}, + {m: 3, n: 4, offset: 1}, + {m: 3, n: 4, offset: 2}, + {m: 8, n: 3, offset: 0}, + {m: 8, n: 3, offset: 4}, + {m: 8, n: 3, offset: 8}, + {m: 3, n: 8, offset: 0}, + {m: 3, n: 8, offset: 1}, + {m: 3, n: 8, offset: 2}, + {m: 10, n: 10, offset: 0}, + {m: 10, n: 10, offset: 5}, + {m: 10, n: 10, offset: 10}, + } { + m := test.m + n := test.n + jpiv := make([]int, n) + + for _, extra := range []int{0, 11} { + a := zeros(m, n, n+extra) + c := 1 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a.Data[i*a.Stride+j] = float64(c) + c++ + } + } + aCopy := cloneGeneral(a) + for j := range jpiv { + jpiv[j] = j + } + + tau := make([]float64, n) + vn1 := columnNorms(m, n, a.Data, a.Stride) + vn2 := columnNorms(m, n, a.Data, a.Stride) + work := make([]float64, n) + + impl.Dlaqp2(m, n, test.offset, a.Data, a.Stride, jpiv, tau, vn1, vn2, work) + + prefix := fmt.Sprintf("Case %v (offset=%t,m=%v,n=%v,extra=%v)", ti, test.offset, m, n, extra) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + + if test.offset == m { + continue + } + + mo := m - test.offset + q := constructQ("QR", mo, n, a.Data[test.offset*a.Stride:], a.Stride, tau) + // Check that q is orthonormal + for i := 0; i < mo; i++ { + nrm := blas64.Nrm2(mo, blas64.Vector{Inc: 1, Data: q.Data[i*mo:]}) + if math.Abs(nrm-1) > 1e-13 { + t.Errorf("Case %v, q not normal", ti) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(mo, blas64.Vector{Inc: 1, Data: q.Data[i*mo:]}, blas64.Vector{Inc: 1, Data: q.Data[j*mo:]}) + if math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", ti) + } + } + } + + // Check that A * P = Q * R + r := blas64.General{ + Rows: mo, + Cols: n, + Stride: n, + Data: make([]float64, mo*n), + } + for i := 0; i < mo; i++ { + for j := i; j < n; j++ { + r.Data[i*n+j] = a.Data[(test.offset+i)*a.Stride+j] + } + } + got := nanGeneral(mo, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, r, 0, got) + + want := aCopy + impl.Dlapmt(true, want.Rows, want.Cols, want.Data, want.Stride, jpiv) + want.Rows = mo + want.Data = want.Data[test.offset*want.Stride:] + if !equalApproxGeneral(got, want, 1e-12) { + t.Errorf("Case %v, Q*R != A*P\nQ*R=%v\nA*P=%v", ti, got, want) + } + } + } +} diff --git a/lapack/testlapack/dlaqps.go b/lapack/testlapack/dlaqps.go new file mode 100644 index 00000000..ed89a96d --- /dev/null +++ b/lapack/testlapack/dlaqps.go @@ -0,0 +1,112 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaqpser interface { + Dlapmter + Dlaqps(m, n, offset, nb int, a []float64, lda int, jpvt []int, tau, vn1, vn2, auxv, f []float64, ldf int) (kb int) +} + +func DlaqpsTest(t *testing.T, impl Dlaqpser) { + for ti, test := range []struct { + m, n, nb, offset int + }{ + {m: 4, n: 3, nb: 2, offset: 0}, + {m: 4, n: 3, nb: 1, offset: 2}, + {m: 3, n: 4, nb: 2, offset: 0}, + {m: 3, n: 4, nb: 1, offset: 2}, + {m: 8, n: 3, nb: 2, offset: 0}, + {m: 8, n: 3, nb: 1, offset: 4}, + {m: 3, n: 8, nb: 2, offset: 0}, + {m: 3, n: 8, nb: 1, offset: 1}, + {m: 10, n: 10, nb: 3, offset: 0}, + {m: 10, n: 10, nb: 2, offset: 5}, + } { + m := test.m + n := test.n + jpiv := make([]int, n) + + for _, extra := range []int{0, 11} { + a := zeros(m, n, n+extra) + c := 1 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a.Data[i*a.Stride+j] = float64(c) + c++ + } + } + aCopy := cloneGeneral(a) + for j := range jpiv { + jpiv[j] = j + } + + tau := make([]float64, n) + vn1 := columnNorms(m, n, a.Data, a.Stride) + vn2 := columnNorms(m, n, a.Data, a.Stride) + auxv := make([]float64, test.nb) + f := zeros(test.n, test.nb, n) + + kb := impl.Dlaqps(m, n, test.offset, test.nb, a.Data, a.Stride, jpiv, tau, vn1, vn2, auxv, f.Data, f.Stride) + + prefix := fmt.Sprintf("Case %v (offset=%t,m=%v,n=%v,extra=%v)", ti, test.offset, m, n, extra) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + + if test.offset == m { + continue + } + + mo := m - test.offset + q := constructQ("QR", mo, kb, a.Data[test.offset*a.Stride:], a.Stride, tau) + // Check that q is orthonormal + for i := 0; i < mo; i++ { + nrm := blas64.Nrm2(mo, blas64.Vector{Inc: 1, Data: q.Data[i*mo:]}) + if math.Abs(nrm-1) > 1e-13 { + t.Errorf("Case %v, q not normal", ti) + } + for j := 0; j < i; j++ { + dot := blas64.Dot(mo, blas64.Vector{Inc: 1, Data: q.Data[i*mo:]}, blas64.Vector{Inc: 1, Data: q.Data[j*mo:]}) + if math.Abs(dot) > 1e-14 { + t.Errorf("Case %v, q not orthogonal", ti) + } + } + } + + // Check that A * P = Q * R + r := blas64.General{ + Rows: mo, + Cols: kb, + Stride: kb, + Data: make([]float64, mo*kb), + } + for i := 0; i < mo; i++ { + for j := i; j < kb; j++ { + r.Data[i*kb+j] = a.Data[(test.offset+i)*a.Stride+j] + } + } + got := nanGeneral(mo, kb, kb) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, r, 0, got) + + want := aCopy + impl.Dlapmt(true, want.Rows, want.Cols, want.Data, want.Stride, jpiv) + want.Rows = mo + want.Cols = kb + want.Data = want.Data[test.offset*want.Stride:] + if !equalApproxGeneral(got, want, 1e-12) { + t.Errorf("Case %v, Q*R != A*P\nQ*R=%v\nA*P=%v", ti, got, want) + } + } + } +} diff --git a/lapack/testlapack/dlaqr04.go b/lapack/testlapack/dlaqr04.go new file mode 100644 index 00000000..6c3304ee --- /dev/null +++ b/lapack/testlapack/dlaqr04.go @@ -0,0 +1,449 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaqr04er interface { + Dlaqr04(wantt, wantz bool, n, ilo, ihi int, h []float64, ldh int, wr, wi []float64, iloz, ihiz int, z []float64, ldz int, work []float64, lwork int, recur int) int + + Dlahqrer +} + +type dlaqr04Test struct { + h blas64.General + ilo, ihi int + iloz, ihiz int + wantt, wantz bool + + evWant []complex128 // Optional slice holding known eigenvalues. +} + +func Dlaqr04Test(t *testing.T, impl Dlaqr04er) { + rnd := rand.New(rand.NewSource(1)) + + // Tests for small matrices that choose the ilo,ihi and iloz,ihiz pairs + // randomly. + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 11, 12, 18, 29} { + for _, extra := range []int{0, 11} { + for recur := 0; recur <= 2; recur++ { + for cas := 0; cas < n; cas++ { + ilo := rnd.Intn(n) + ihi := rnd.Intn(n) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + iloz := rnd.Intn(ilo + 1) + ihiz := ihi + rnd.Intn(n-ihi) + h := randomHessenberg(n, n+extra, rnd) + if ilo-1 >= 0 { + h.Data[ilo*h.Stride+ilo-1] = 0 + } + if ihi+1 < n { + h.Data[(ihi+1)*h.Stride+ihi] = 0 + } + test := dlaqr04Test{ + h: h, + ilo: ilo, + ihi: ihi, + iloz: iloz, + ihiz: ihiz, + wantt: wantt, + wantz: wantz, + } + testDlaqr04(t, impl, test, false, recur) + testDlaqr04(t, impl, test, true, recur) + } + } + } + } + } + } + + // Tests for matrices large enough to possibly use the recursion (but it + // doesn't seem to be the case). + for _, n := range []int{100, 500} { + for cas := 0; cas < 5; cas++ { + h := randomHessenberg(n, n, rnd) + test := dlaqr04Test{ + h: h, + ilo: 0, + ihi: n - 1, + iloz: 0, + ihiz: n - 1, + wantt: true, + wantz: true, + } + testDlaqr04(t, impl, test, true, 1) + } + } + + // Tests that make sure that some potentially problematic corner cases, + // like zero-sized matrix, are covered. + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, extra := range []int{0, 1, 11} { + for _, test := range []dlaqr04Test{ + { + h: randomHessenberg(0, extra, rnd), + ilo: 0, + ihi: -1, + iloz: 0, + ihiz: -1, + }, + { + h: randomHessenberg(1, 1+extra, rnd), + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + }, + { + h: randomHessenberg(2, 2+extra, rnd), + ilo: 1, + ihi: 1, + iloz: 1, + ihiz: 1, + }, + { + h: randomHessenberg(2, 2+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 9, + iloz: 0, + ihiz: 9, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 9, + }, + { + h: randomHessenberg(10, 10+extra, rnd), + ilo: 9, + ihi: 9, + iloz: 0, + ihiz: 9, + }, + } { + if test.ilo-1 >= 0 { + test.h.Data[test.ilo*test.h.Stride+test.ilo-1] = 0 + } + if test.ihi+1 < test.h.Rows { + test.h.Data[(test.ihi+1)*test.h.Stride+test.ihi] = 0 + } + test.wantt = wantt + test.wantz = wantz + testDlaqr04(t, impl, test, false, 1) + testDlaqr04(t, impl, test, true, 1) + } + } + } + } + + // Tests with known eigenvalues computed by Octave. + for _, test := range []dlaqr04Test{ + { + h: blas64.General{ + Rows: 1, + Cols: 1, + Stride: 1, + Data: []float64{7.09965484086874e-1}, + }, + ilo: 0, + ihi: 0, + iloz: 0, + ihiz: 0, + evWant: []complex128{7.09965484086874e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 0, -1, + 1, 0, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{1i, -1i}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 6.25219991450918e-1, 8.17510791994361e-1, + 3.31218891622294e-1, 1.24103744878131e-1, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 4, + Cols: 4, + Stride: 4, + Data: []float64{ + 1, 0, 0, 0, + 0, 6.25219991450918e-1, 8.17510791994361e-1, 0, + 0, 3.31218891622294e-1, 1.24103744878131e-1, 0, + 0, 0, 0, 1, + }, + }, + ilo: 1, + ihi: 2, + iloz: 0, + ihiz: 3, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + -1.1219562276608, 6.85473513349362e-1, + -8.19951061145131e-1, 1.93728523178888e-1, + }, + }, + ilo: 0, + ihi: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{ + -4.64113852240958e-1 + 3.59580510817350e-1i, + -4.64113852240958e-1 - 3.59580510817350e-1i, + }, + }, + { + h: blas64.General{ + Rows: 5, + Cols: 5, + Stride: 5, + Data: []float64{ + 9.57590178533658e-1, -5.10651295522708e-1, 9.24974510015869e-1, -1.30016306879522e-1, 2.92601986926954e-2, + -1.08084756637964, 1.77529701001213, -1.36480197632509, 2.23196371219601e-1, 1.12912853063308e-1, + 0, -8.44075612174676e-1, 1.067867614486, -2.55782915176399e-1, -2.00598563137468e-1, + 0, 0, -5.67097237165410e-1, 2.07205057427341e-1, 6.54998340743380e-1, + 0, 0, 0, -1.89441413886041e-1, -4.18125416021786e-1, + }, + }, + ilo: 0, + ihi: 4, + iloz: 0, + ihiz: 4, + evWant: []complex128{ + 2.94393309555622, + 4.97029793606701e-1 + 3.63041654992384e-1i, + 4.97029793606701e-1 - 3.63041654992384e-1i, + -1.74079119166145e-1 + 2.01570009462092e-1i, + -1.74079119166145e-1 - 2.01570009462092e-1i, + }, + }, + } { + test.wantt = true + test.wantz = true + testDlaqr04(t, impl, test, false, 1) + testDlaqr04(t, impl, test, true, 1) + } +} + +func testDlaqr04(t *testing.T, impl Dlaqr04er, test dlaqr04Test, optwork bool, recur int) { + const tol = 1e-14 + + h := cloneGeneral(test.h) + n := h.Cols + extra := h.Stride - h.Cols + wantt := test.wantt + wantz := test.wantz + ilo := test.ilo + ihi := test.ihi + iloz := test.iloz + ihiz := test.ihiz + + var z, zCopy blas64.General + if wantz { + z = eye(n, n+extra) + zCopy = cloneGeneral(z) + } + + wr := nanSlice(ihi + 1) + wi := nanSlice(ihi + 1) + + var work []float64 + if optwork { + work = nanSlice(1) + impl.Dlaqr04(wantt, wantz, n, ilo, ihi, nil, 0, nil, nil, iloz, ihiz, nil, 0, work, -1, recur) + work = nanSlice(int(work[0])) + } else { + work = nanSlice(max(1, n)) + } + + unconverged := impl.Dlaqr04(wantt, wantz, n, ilo, ihi, h.Data, h.Stride, wr, wi, iloz, ihiz, z.Data, z.Stride, work, len(work), recur) + + prefix := fmt.Sprintf("Case wantt=%v, wantz=%v, n=%v, ilo=%v, ihi=%v, iloz=%v, ihiz=%v, extra=%v, opt=%v", + wantt, wantz, n, ilo, ihi, iloz, ihiz, extra, optwork) + + if !generalOutsideAllNaN(h) { + t.Errorf("%v: out-of-range write to H\n%v", prefix, h.Data) + } + if !generalOutsideAllNaN(z) { + t.Errorf("%v: out-of-range write to Z\n%v", prefix, z.Data) + } + + start := ilo // Index of the first computed eigenvalue. + if unconverged != 0 { + start = unconverged + if start == ihi+1 { + t.Logf("%v: no eigenvalue has converged", prefix) + } + } + + // Check that wr and wi have not been modified within [:start]. + if !isAllNaN(wr[:start]) { + t.Errorf("%v: unexpected modification of wr", prefix) + } + if !isAllNaN(wi[:start]) { + t.Errorf("%v: unexpected modification of wi", prefix) + } + + var hasReal bool + for i := start; i <= ihi; { + if wi[i] == 0 { // Real eigenvalue. + hasReal = true + // Check that the eigenvalue corresponds to a 1×1 block + // on the diagonal of H. + if wantt && wr[i] != h.Data[i*h.Stride+i] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i, i) + } + i++ + continue + } + + // Complex eigenvalue. + + // In the conjugate pair the real parts must be equal. + if wr[i] != wr[i+1] { + t.Errorf("%v: real part of conjugate pair not equal, i=%v", prefix, i) + } + // The first imaginary part must be positive. + if wi[i] < 0 { + t.Errorf("%v: wi[%v] not positive", prefix, i) + } + // The second imaginary part must be negative with the same + // magnitude. + if wi[i] != -wi[i+1] { + t.Errorf("%v: wi[%v] != wi[%v]", prefix, i, i+1) + } + if wantt { + // Check that wi[i] has the correct value. + if wr[i] != h.Data[i*h.Stride+i] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i, i) + } + if wr[i] != h.Data[(i+1)*h.Stride+i+1] { + t.Errorf("%v: wr[%v] != H[%v,%v]", prefix, i, i+1, i+1) + } + im := math.Sqrt(math.Abs(h.Data[(i+1)*h.Stride+i])) * math.Sqrt(math.Abs(h.Data[i*h.Stride+i+1])) + if math.Abs(im-wi[i]) > tol { + t.Errorf("%v: unexpected value of wi[%v]: want %v, got %v", prefix, i, im, wi[i]) + } + } + i += 2 + } + // If the number of found eigenvalues is odd, at least one must be real. + if (ihi+1-start)%2 != 0 && !hasReal { + t.Errorf("%v: expected at least one real eigenvalue", prefix) + } + + // Compare found eigenvalues to the reference, if known. + if test.evWant != nil { + for i := start; i <= ihi; i++ { + ev := complex(wr[i], wi[i]) + found, _ := containsComplex(test.evWant, ev, tol) + if !found { + t.Errorf("%v: unexpected eigenvalue %v", prefix, ev) + } + } + } + + if !wantz { + return + } + + // Z should contain the orthogonal matrix U. + if !isOrthonormal(z) { + t.Errorf("%v: Z is not orthogonal", prefix) + } + // Z should have been modified only in the + // [iloz:ihiz+1,ilo:ihi+1] block. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if iloz <= i && i <= ihiz && ilo <= j && j <= ihi { + continue + } + if z.Data[i*z.Stride+j] != zCopy.Data[i*zCopy.Stride+j] { + t.Errorf("%v: Z modified outside of [iloz:ihiz+1,ilo:ihi+1] block", prefix) + } + } + } + if wantt { + // Zero out h under the subdiagonal because Dlaqr04 uses it as + // workspace. + for i := 2; i < n; i++ { + for j := 0; j < i-1; j++ { + h.Data[i*h.Stride+j] = 0 + } + } + hz := eye(n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, test.h, z, 0, hz) + zhz := eye(n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, z, hz, 0, zhz) + if !equalApproxGeneral(zhz, h, 10*tol) { + t.Errorf("%v: Z^T*(initial H)*Z and (final H) are not equal", prefix) + } + } +} diff --git a/lapack/testlapack/dlaqr1.go b/lapack/testlapack/dlaqr1.go new file mode 100644 index 00000000..63eaa4c0 --- /dev/null +++ b/lapack/testlapack/dlaqr1.go @@ -0,0 +1,91 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dlaqr1er interface { + Dlaqr1(n int, h []float64, ldh int, sr1, si1, sr2, si2 float64, v []float64) +} + +func Dlaqr1Test(t *testing.T, impl Dlaqr1er) { + rnd := rand.New(rand.NewSource(1)) + + for _, n := range []int{2, 3} { + for _, ldh := range []int{n, n + 1, n + 10} { + for _, cas := range []int{1, 2} { + for k := 0; k < 100; k++ { + v := make([]float64, n) + for i := range v { + v[i] = math.NaN() + } + h := make([]float64, n*(n-1)*ldh) + for i := range h { + h[i] = math.NaN() + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + h[i*ldh+j] = rnd.NormFloat64() + } + } + var sr1, sr2, si1, si2 float64 + if cas == 1 { + sr1 = rnd.NormFloat64() + sr2 = sr1 + si1 = rnd.NormFloat64() + si2 = -si1 + } else { + sr1 = rnd.NormFloat64() + sr2 = rnd.NormFloat64() + si1 = 0 + si2 = 0 + } + impl.Dlaqr1(n, h, ldh, sr1, si1, sr2, si2, v) + + // Matrix H - s1*I. + h1 := make([]complex128, n*n) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + h1[i*n+j] = complex(h[i*ldh+j], 0) + if i == j { + h1[i*n+j] -= complex(sr1, si1) + } + } + } + // First column of H - s2*I. + h2 := make([]complex128, n) + for i := 0; i < n; i++ { + h2[i] = complex(h[i*ldh], 0) + } + h2[0] -= complex(sr2, si2) + + wantv := make([]float64, n) + // Multiply (H-s1*I)*(H-s2*I) to get a tentative + // wantv. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + wantv[i] += real(h1[i*n+j] * h2[j]) + } + } + // Get the unknown scale. + scale := v[0] / wantv[0] + // Compute the actual wantv. + floats.Scale(scale, wantv) + + // The scale must be the same for all elements. + if floats.Distance(wantv, v, math.Inf(1)) > 1e-13 { + t.Errorf("n = %v, ldh = %v, case = %v: Unexpected value of v: got %v, want %v", n, ldh, cas, v, wantv) + } + } + } + } + } +} diff --git a/lapack/testlapack/dlaqr23.go b/lapack/testlapack/dlaqr23.go new file mode 100644 index 00000000..26bdb97e --- /dev/null +++ b/lapack/testlapack/dlaqr23.go @@ -0,0 +1,335 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaqr23er interface { + Dlaqr23(wantt, wantz bool, n, ktop, kbot, nw int, h []float64, ldh int, iloz, ihiz int, z []float64, ldz int, sr, si []float64, v []float64, ldv int, nh int, t []float64, ldt int, nv int, wv []float64, ldwv int, work []float64, lwork int, recur int) (ns, nd int) +} + +type dlaqr23Test struct { + wantt, wantz bool + ktop, kbot int + nw int + h blas64.General + iloz, ihiz int + + evWant []complex128 // Optional slice with known eigenvalues. +} + +func Dlaqr23Test(t *testing.T, impl Dlaqr23er) { + rnd := rand.New(rand.NewSource(1)) + + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 100} { + for _, extra := range []int{0, 11} { + for cas := 0; cas < 30; cas++ { + var nw int + if nw <= 75 { + nw = rnd.Intn(n) + 1 + } else { + nw = 76 + rnd.Intn(n-75) + } + ktop := rnd.Intn(n - nw + 1) + kbot := ktop + nw - 1 + kbot += rnd.Intn(n - kbot) + h := randomHessenberg(n, n+extra, rnd) + if ktop-1 >= 0 { + h.Data[ktop*h.Stride+ktop-1] = 0 + } + if kbot+1 < n { + h.Data[(kbot+1)*h.Stride+kbot] = 0 + } + iloz := rnd.Intn(ktop + 1) + ihiz := kbot + rnd.Intn(n-kbot) + test := dlaqr23Test{ + wantt: wantt, + wantz: wantz, + ktop: ktop, + kbot: kbot, + nw: nw, + h: h, + iloz: iloz, + ihiz: ihiz, + } + testDlaqr23(t, impl, test, false, 1, rnd) + testDlaqr23(t, impl, test, true, 1, rnd) + testDlaqr23(t, impl, test, false, 0, rnd) + testDlaqr23(t, impl, test, true, 0, rnd) + } + } + } + } + } + + // Tests with n=0. + for _, wantt := range []bool{true, false} { + for _, wantz := range []bool{true, false} { + for _, extra := range []int{0, 1, 11} { + test := dlaqr23Test{ + wantt: wantt, + wantz: wantz, + h: randomHessenberg(0, extra, rnd), + ktop: 0, + kbot: -1, + iloz: 0, + ihiz: -1, + nw: 0, + } + testDlaqr23(t, impl, test, true, 1, rnd) + testDlaqr23(t, impl, test, false, 1, rnd) + testDlaqr23(t, impl, test, true, 0, rnd) + testDlaqr23(t, impl, test, false, 0, rnd) + } + } + } + + // Tests with explicit eigenvalues computed by Octave. + for _, test := range []dlaqr23Test{ + { + h: blas64.General{ + Rows: 1, + Cols: 1, + Stride: 1, + Data: []float64{7.09965484086874e-1}, + }, + ktop: 0, + kbot: 0, + iloz: 0, + ihiz: 0, + evWant: []complex128{7.09965484086874e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 0, -1, + 1, 0, + }, + }, + ktop: 0, + kbot: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{1i, -1i}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + 6.25219991450918e-1, 8.17510791994361e-1, + 3.31218891622294e-1, 1.24103744878131e-1, + }, + }, + ktop: 0, + kbot: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 4, + Cols: 4, + Stride: 4, + Data: []float64{ + 1, 0, 0, 0, + 0, 6.25219991450918e-1, 8.17510791994361e-1, 0, + 0, 3.31218891622294e-1, 1.24103744878131e-1, 0, + 0, 0, 0, 1, + }, + }, + ktop: 1, + kbot: 2, + iloz: 0, + ihiz: 3, + evWant: []complex128{9.52203547663447e-1, -2.02879811334398e-1}, + }, + { + h: blas64.General{ + Rows: 2, + Cols: 2, + Stride: 2, + Data: []float64{ + -1.1219562276608, 6.85473513349362e-1, + -8.19951061145131e-1, 1.93728523178888e-1, + }, + }, + ktop: 0, + kbot: 1, + iloz: 0, + ihiz: 1, + evWant: []complex128{ + -4.64113852240958e-1 + 3.59580510817350e-1i, + -4.64113852240958e-1 - 3.59580510817350e-1i, + }, + }, + { + h: blas64.General{ + Rows: 5, + Cols: 5, + Stride: 5, + Data: []float64{ + 9.57590178533658e-1, -5.10651295522708e-1, 9.24974510015869e-1, -1.30016306879522e-1, 2.92601986926954e-2, + -1.08084756637964, 1.77529701001213, -1.36480197632509, 2.23196371219601e-1, 1.12912853063308e-1, + 0, -8.44075612174676e-1, 1.067867614486, -2.55782915176399e-1, -2.00598563137468e-1, + 0, 0, -5.67097237165410e-1, 2.07205057427341e-1, 6.54998340743380e-1, + 0, 0, 0, -1.89441413886041e-1, -4.18125416021786e-1, + }, + }, + ktop: 0, + kbot: 4, + iloz: 0, + ihiz: 4, + evWant: []complex128{ + 2.94393309555622, + 4.97029793606701e-1 + 3.63041654992384e-1i, + 4.97029793606701e-1 - 3.63041654992384e-1i, + -1.74079119166145e-1 + 2.01570009462092e-1i, + -1.74079119166145e-1 - 2.01570009462092e-1i, + }, + }, + } { + test.wantt = true + test.wantz = true + test.nw = test.kbot - test.ktop + 1 + testDlaqr23(t, impl, test, true, 1, rnd) + testDlaqr23(t, impl, test, false, 1, rnd) + testDlaqr23(t, impl, test, true, 0, rnd) + testDlaqr23(t, impl, test, false, 0, rnd) + } +} + +func testDlaqr23(t *testing.T, impl Dlaqr23er, test dlaqr23Test, opt bool, recur int, rnd *rand.Rand) { + const tol = 1e-14 + + h := cloneGeneral(test.h) + n := h.Cols + extra := h.Stride - h.Cols + wantt := test.wantt + wantz := test.wantz + ktop := test.ktop + kbot := test.kbot + nw := test.nw + iloz := test.iloz + ihiz := test.ihiz + + var z, zCopy blas64.General + if wantz { + z = eye(n, n+extra) + zCopy = cloneGeneral(z) + } + + sr := nanSlice(kbot + 1) + si := nanSlice(kbot + 1) + + v := randomGeneral(nw, nw, nw+extra, rnd) + var nh int + if nw > 0 { + nh = nw + rnd.Intn(nw) // nh must be at least nw. + } + tmat := randomGeneral(nw, nh, nh+extra, rnd) + var nv int + if nw > 0 { + nv = rnd.Intn(nw) + 1 + } + wv := randomGeneral(nv, nw, nw+extra, rnd) + + var work []float64 + if opt { + work = nanSlice(1) + impl.Dlaqr23(wantt, wantz, n, ktop, kbot, nw, nil, h.Stride, iloz, ihiz, nil, z.Stride, + nil, nil, nil, v.Stride, tmat.Cols, nil, tmat.Stride, wv.Rows, nil, wv.Stride, work, -1, recur) + work = nanSlice(int(work[0])) + } else { + work = nanSlice(max(1, 2*nw)) + } + + ns, nd := impl.Dlaqr23(wantt, wantz, n, ktop, kbot, nw, h.Data, h.Stride, iloz, ihiz, z.Data, z.Stride, + sr, si, v.Data, v.Stride, tmat.Cols, tmat.Data, tmat.Stride, wv.Rows, wv.Data, wv.Stride, work, len(work), recur) + + prefix := fmt.Sprintf("Case wantt=%v, wantz=%v, n=%v, ktop=%v, kbot=%v, nw=%v, iloz=%v, ihiz=%v, extra=%v", + wantt, wantz, n, ktop, kbot, nw, iloz, ihiz, extra) + + if !generalOutsideAllNaN(h) { + t.Errorf("%v: out-of-range write to H\n%v", prefix, h.Data) + } + if !generalOutsideAllNaN(z) { + t.Errorf("%v: out-of-range write to Z\n%v", prefix, z.Data) + } + if !generalOutsideAllNaN(v) { + t.Errorf("%v: out-of-range write to V\n%v", prefix, v.Data) + } + if !generalOutsideAllNaN(tmat) { + t.Errorf("%v: out-of-range write to T\n%v", prefix, tmat.Data) + } + if !generalOutsideAllNaN(wv) { + t.Errorf("%v: out-of-range write to WV\n%v", prefix, wv.Data) + } + if !isAllNaN(sr[:kbot-nd-ns+1]) || !isAllNaN(sr[kbot+1:]) { + t.Errorf("%v: out-of-range write to sr") + } + if !isAllNaN(si[:kbot-nd-ns+1]) || !isAllNaN(si[kbot+1:]) { + t.Errorf("%v: out-of-range write to si") + } + + if !isUpperHessenberg(h) { + t.Errorf("%v: H is not upper Hessenberg", prefix) + } + + if test.evWant != nil { + for i := kbot - nd + 1; i <= kbot; i++ { + ev := complex(sr[i], si[i]) + found, _ := containsComplex(test.evWant, ev, tol) + if !found { + t.Errorf("%v: unexpected eigenvalue %v", prefix, ev) + } + } + } + + if !wantz { + return + } + + var zmod bool + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if z.Data[i*z.Stride+j] == zCopy.Data[i*zCopy.Stride+j] { + continue + } + if i < iloz || i > ihiz || j < kbot-nw+1 || j > kbot { + zmod = true + } + } + } + if zmod { + t.Errorf("%v: unexpected modification of Z", prefix) + } + if !isOrthonormal(z) { + t.Errorf("%v: Z is not orthogonal", prefix) + } + if wantt { + hu := eye(n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, test.h, z, 0, hu) + uhu := eye(n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, z, hu, 0, uhu) + if !equalApproxGeneral(uhu, h, 10*tol) { + t.Errorf("%v: Z^T*(initial H)*Z and (final H) are not equal", prefix) + } + } +} diff --git a/lapack/testlapack/dlaqr5.go b/lapack/testlapack/dlaqr5.go new file mode 100644 index 00000000..5673b268 --- /dev/null +++ b/lapack/testlapack/dlaqr5.go @@ -0,0 +1,214 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "compress/gzip" + "encoding/json" + "fmt" + "log" + "math" + "math/rand" + "os" + "path/filepath" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlaqr5er interface { + Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot, nshfts int, sr, si []float64, h []float64, ldh int, iloz, ihiz int, z []float64, ldz int, v []float64, ldv int, u []float64, ldu int, nh int, wh []float64, ldwh int, nv int, wv []float64, ldwv int) +} + +type Dlaqr5test struct { + WantT bool + N int + NShifts int + KTop, KBot int + ShiftR, ShiftI []float64 + H []float64 + + HWant []float64 + ZWant []float64 +} + +func Dlaqr5Test(t *testing.T, impl Dlaqr5er) { + // Test without using reference data. + rnd := rand.New(rand.NewSource(1)) + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 30} { + for _, extra := range []int{0, 1, 20} { + for _, kacc22 := range []int{0, 1, 2} { + for cas := 0; cas < 100; cas++ { + testDlaqr5(t, impl, n, extra, kacc22, rnd) + } + } + } + } + + // Test using reference data computed by the reference netlib + // implementation. + file, err := os.Open(filepath.FromSlash("../testlapack/testdata/dlaqr5data.json.gz")) + if err != nil { + log.Fatal(err) + } + defer file.Close() + r, err := gzip.NewReader(file) + if err != nil { + log.Fatal(err) + } + defer r.Close() + + var tests []Dlaqr5test + json.NewDecoder(r).Decode(&tests) + for _, test := range tests { + wantt := test.WantT + n := test.N + nshfts := test.NShifts + ktop := test.KTop + kbot := test.KBot + sr := test.ShiftR + si := test.ShiftI + + for _, extra := range []int{0, 1, 10} { + v := randomGeneral(nshfts/2, 3, 3+extra, rnd) + u := randomGeneral(3*nshfts-3, 3*nshfts-3, 3*nshfts-3+extra, rnd) + nh := n + wh := randomGeneral(3*nshfts-3, n, n+extra, rnd) + nv := n + wv := randomGeneral(n, 3*nshfts-3, 3*nshfts-3+extra, rnd) + + h := nanGeneral(n, n, n+extra) + + for _, kacc22 := range []int{0, 1, 2} { + copyMatrix(n, n, h.Data, h.Stride, test.H) + z := eye(n, n+extra) + + impl.Dlaqr5(wantt, true, kacc22, + n, ktop, kbot, + nshfts, sr, si, + h.Data, h.Stride, + 0, n-1, z.Data, z.Stride, + v.Data, v.Stride, + u.Data, u.Stride, + nv, wv.Data, wv.Stride, + nh, wh.Data, wh.Stride) + + prefix := fmt.Sprintf("wantt=%v, n=%v, nshfts=%v, ktop=%v, kbot=%v, extra=%v, kacc22=%v", + wantt, n, nshfts, ktop, kbot, extra, kacc22) + if !equalApprox(n, n, h.Data, h.Stride, test.HWant, 1e-13) { + t.Errorf("Case %v: unexpected matrix H\nh =%v\nhwant=%v", prefix, h.Data, test.HWant) + } + if !equalApprox(n, n, z.Data, z.Stride, test.ZWant, 1e-13) { + t.Errorf("Case %v: unexpected matrix Z\nz =%v\nzwant=%v", prefix, z.Data, test.ZWant) + } + } + } + } +} + +func testDlaqr5(t *testing.T, impl Dlaqr5er, n, extra, kacc22 int, rnd *rand.Rand) { + wantt := true + wantz := true + nshfts := 2 * n + sr := make([]float64, nshfts) + si := make([]float64, nshfts) + for i := 0; i < n; i++ { + re := rnd.NormFloat64() + im := rnd.NormFloat64() + sr[2*i], sr[2*i+1] = re, re + si[2*i], si[2*i+1] = im, -im + } + ktop := rnd.Intn(n) + kbot := rnd.Intn(n) + if kbot < ktop { + ktop, kbot = kbot, ktop + } + + v := randomGeneral(nshfts/2, 3, 3+extra, rnd) + u := randomGeneral(3*nshfts-3, 3*nshfts-3, 3*nshfts-3+extra, rnd) + nh := n + wh := randomGeneral(3*nshfts-3, n, n+extra, rnd) + nv := n + wv := randomGeneral(n, 3*nshfts-3, 3*nshfts-3+extra, rnd) + + h := randomHessenberg(n, n+extra, rnd) + if ktop > 0 { + h.Data[ktop*h.Stride+ktop-1] = 0 + } + if kbot < n-1 { + h.Data[(kbot+1)*h.Stride+kbot] = 0 + } + hCopy := h + hCopy.Data = make([]float64, len(h.Data)) + copy(hCopy.Data, h.Data) + + z := eye(n, n+extra) + + impl.Dlaqr5(wantt, wantz, kacc22, + n, ktop, kbot, + nshfts, sr, si, + h.Data, h.Stride, + 0, n-1, z.Data, z.Stride, + v.Data, v.Stride, + u.Data, u.Stride, + nv, wv.Data, wv.Stride, + nh, wh.Data, wh.Stride) + + prefix := fmt.Sprintf("Case n=%v, extra=%v, kacc22=%v", n, extra, kacc22) + + if !generalOutsideAllNaN(h) { + t.Errorf("%v: out-of-range write to H\n%v", prefix, h.Data) + } + if !generalOutsideAllNaN(z) { + t.Errorf("%v: out-of-range write to Z\n%v", prefix, z.Data) + } + if !generalOutsideAllNaN(u) { + t.Errorf("%v: out-of-range write to U\n%v", prefix, u.Data) + } + if !generalOutsideAllNaN(v) { + t.Errorf("%v: out-of-range write to V\n%v", prefix, v.Data) + } + if !generalOutsideAllNaN(wh) { + t.Errorf("%v: out-of-range write to WH\n%v", prefix, wh.Data) + } + if !generalOutsideAllNaN(wv) { + t.Errorf("%v: out-of-range write to WV\n%v", prefix, wv.Data) + } + + for i := 0; i < n; i++ { + for j := 0; j < i-1; j++ { + if h.Data[i*h.Stride+j] != 0 { + t.Errorf("%v: H is not Hessenberg, H[%v,%v]!=0", prefix, i, j) + } + } + } + if !isOrthonormal(z) { + t.Errorf("%v: Z is not orthogonal", prefix) + } + // Construct Z^T * HOrig * Z and check that it is equal to H from Dlaqr5. + hz := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, hCopy, z, 0, hz) + zhz := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.Trans, blas.NoTrans, 1, z, hz, 0, zhz) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + diff := zhz.Data[i*zhz.Stride+j] - h.Data[i*h.Stride+j] + if math.Abs(diff) > 1e-13 { + t.Errorf("%v: Z^T*HOrig*Z and H are not equal, diff at [%v,%v]=%v", prefix, i, j, diff) + } + } + } +} diff --git a/lapack/testlapack/dlarf.go b/lapack/testlapack/dlarf.go new file mode 100644 index 00000000..9317f62d --- /dev/null +++ b/lapack/testlapack/dlarf.go @@ -0,0 +1,173 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dlarfer interface { + Dlarf(side blas.Side, m, n int, v []float64, incv int, tau float64, c []float64, ldc int, work []float64) +} + +func DlarfTest(t *testing.T, impl Dlarfer) { + rnd := rand.New(rand.NewSource(1)) + for i, test := range []struct { + m, n, ldc int + incv, lastv int + lastr, lastc int + tau float64 + }{ + { + m: 3, + n: 2, + ldc: 2, + + incv: 4, + lastv: 1, + + lastr: 2, + lastc: 1, + + tau: 2, + }, + { + m: 2, + n: 3, + ldc: 3, + + incv: 4, + lastv: 1, + + lastr: 1, + lastc: 2, + + tau: 2, + }, + { + m: 2, + n: 3, + ldc: 3, + + incv: 4, + lastv: 1, + + lastr: 0, + lastc: 1, + + tau: 2, + }, + { + m: 2, + n: 3, + ldc: 3, + + incv: 4, + lastv: 0, + + lastr: 0, + lastc: 1, + + tau: 2, + }, + { + m: 10, + n: 10, + ldc: 10, + + incv: 4, + lastv: 6, + + lastr: 9, + lastc: 8, + + tau: 2, + }, + } { + // Construct a random matrix. + c := make([]float64, test.ldc*test.m) + for i := 0; i <= test.lastr; i++ { + for j := 0; j <= test.lastc; j++ { + c[i*test.ldc+j] = rnd.Float64() + } + } + cCopy := make([]float64, len(c)) + copy(cCopy, c) + cCopy2 := make([]float64, len(c)) + copy(cCopy2, c) + + // Test with side right. + sz := max(test.m, test.n) // so v works for both right and left side. + v := make([]float64, test.incv*sz+1) + // Fill with nonzero entries up until lastv. + for i := 0; i <= test.lastv; i++ { + v[i*test.incv] = rnd.Float64() + } + // Construct h explicitly to compare. + h := make([]float64, test.n*test.n) + for i := 0; i < test.n; i++ { + h[i*test.n+i] = 1 + } + hMat := blas64.General{ + Rows: test.n, + Cols: test.n, + Stride: test.n, + Data: h, + } + vVec := blas64.Vector{ + Inc: test.incv, + Data: v, + } + blas64.Ger(-test.tau, vVec, vVec, hMat) + + // Apply multiplication (2nd copy is to avoid aliasing). + cMat := blas64.General{ + Rows: test.m, + Cols: test.n, + Stride: test.ldc, + Data: cCopy, + } + cMat2 := blas64.General{ + Rows: test.m, + Cols: test.n, + Stride: test.ldc, + Data: cCopy2, + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, cMat2, hMat, 0, cMat) + + // cMat now stores the true answer. Compare with the function call. + work := make([]float64, sz) + impl.Dlarf(blas.Right, test.m, test.n, v, test.incv, test.tau, c, test.ldc, work) + if !floats.EqualApprox(c, cMat.Data, 1e-14) { + t.Errorf("Dlarf mismatch right, case %v. Want %v, got %v", i, cMat.Data, c) + } + + // Test on the left side. + copy(c, cCopy2) + copy(cCopy, c) + // Construct h. + h = make([]float64, test.m*test.m) + for i := 0; i < test.m; i++ { + h[i*test.m+i] = 1 + } + hMat = blas64.General{ + Rows: test.m, + Cols: test.m, + Stride: test.m, + Data: h, + } + blas64.Ger(-test.tau, vVec, vVec, hMat) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, hMat, cMat2, 0, cMat) + impl.Dlarf(blas.Left, test.m, test.n, v, test.incv, test.tau, c, test.ldc, work) + if !floats.EqualApprox(c, cMat.Data, 1e-14) { + t.Errorf("Dlarf mismatch left, case %v. Want %v, got %v", i, cMat.Data, c) + } + } +} diff --git a/lapack/testlapack/dlarfb.go b/lapack/testlapack/dlarfb.go new file mode 100644 index 00000000..17b60c10 --- /dev/null +++ b/lapack/testlapack/dlarfb.go @@ -0,0 +1,161 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dlarfber interface { + Dlarfter + Dlarfb(side blas.Side, trans blas.Transpose, direct lapack.Direct, + store lapack.StoreV, m, n, k int, v []float64, ldv int, t []float64, ldt int, + c []float64, ldc int, work []float64, ldwork int) +} + +func DlarfbTest(t *testing.T, impl Dlarfber) { + rnd := rand.New(rand.NewSource(1)) + for _, store := range []lapack.StoreV{lapack.ColumnWise, lapack.RowWise} { + for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.Trans, blas.NoTrans} { + for cas, test := range []struct { + ma, na, cdim, lda, ldt, ldc int + }{ + {6, 6, 6, 0, 0, 0}, + {6, 8, 10, 0, 0, 0}, + {6, 10, 8, 0, 0, 0}, + {8, 6, 10, 0, 0, 0}, + {8, 10, 6, 0, 0, 0}, + {10, 6, 8, 0, 0, 0}, + {10, 8, 6, 0, 0, 0}, + {6, 6, 6, 12, 15, 30}, + {6, 8, 10, 12, 15, 30}, + {6, 10, 8, 12, 15, 30}, + {8, 6, 10, 12, 15, 30}, + {8, 10, 6, 12, 15, 30}, + {10, 6, 8, 12, 15, 30}, + {10, 8, 6, 12, 15, 30}, + {6, 6, 6, 15, 12, 30}, + {6, 8, 10, 15, 12, 30}, + {6, 10, 8, 15, 12, 30}, + {8, 6, 10, 15, 12, 30}, + {8, 10, 6, 15, 12, 30}, + {10, 6, 8, 15, 12, 30}, + {10, 8, 6, 15, 12, 30}, + } { + // Generate a matrix for QR + ma := test.ma + na := test.na + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := 0; i < ma; i++ { + for j := 0; j < lda; j++ { + a[i*lda+j] = rnd.Float64() + } + } + k := min(ma, na) + + // H is always ma x ma + var m, n, rowsWork int + switch { + default: + panic("not implemented") + case side == blas.Left: + m = test.ma + n = test.cdim + rowsWork = n + case side == blas.Right: + m = test.cdim + n = test.ma + rowsWork = m + } + + // Use dgeqr2 to find the v vectors + tau := make([]float64, na) + work := make([]float64, na) + impl.Dgeqr2(ma, k, a, lda, tau, work) + + // Correct the v vectors based on the direct and store + vMatTmp := extractVMat(ma, na, a, lda, lapack.Forward, lapack.ColumnWise) + vMat := constructVMat(vMatTmp, store, direct) + v := vMat.Data + ldv := vMat.Stride + + // Use dlarft to find the t vector + ldt := test.ldt + if ldt == 0 { + ldt = k + } + tm := make([]float64, k*ldt) + + impl.Dlarft(direct, store, ma, k, v, ldv, tau, tm, ldt) + + // Generate c matrix + ldc := test.ldc + if ldc == 0 { + ldc = n + } + c := make([]float64, m*ldc) + for i := 0; i < m; i++ { + for j := 0; j < ldc; j++ { + c[i*ldc+j] = rnd.Float64() + } + } + cCopy := make([]float64, len(c)) + copy(cCopy, c) + + ldwork := k + work = make([]float64, rowsWork*k) + + // Call Dlarfb with this information + impl.Dlarfb(side, trans, direct, store, m, n, k, v, ldv, tm, ldt, c, ldc, work, ldwork) + + h := constructH(tau, vMat, store, direct) + + cMat := blas64.General{ + Rows: m, + Cols: n, + Stride: ldc, + Data: make([]float64, m*ldc), + } + copy(cMat.Data, cCopy) + ans := blas64.General{ + Rows: m, + Cols: n, + Stride: ldc, + Data: make([]float64, m*ldc), + } + copy(ans.Data, cMat.Data) + switch { + default: + panic("not implemented") + case side == blas.Left && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, h, cMat, 0, ans) + case side == blas.Left && trans == blas.Trans: + blas64.Gemm(blas.Trans, blas.NoTrans, 1, h, cMat, 0, ans) + case side == blas.Right && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, cMat, h, 0, ans) + case side == blas.Right && trans == blas.Trans: + blas64.Gemm(blas.NoTrans, blas.Trans, 1, cMat, h, 0, ans) + } + if !floats.EqualApprox(ans.Data, c, 1e-14) { + t.Errorf("Cas %v mismatch. Want %v, got %v.", cas, ans.Data, c) + } + } + } + } + } + } +} diff --git a/lapack/testlapack/dlarfg.go b/lapack/testlapack/dlarfg.go new file mode 100644 index 00000000..2cc12c3f --- /dev/null +++ b/lapack/testlapack/dlarfg.go @@ -0,0 +1,134 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlarfger interface { + Dlarfg(n int, alpha float64, x []float64, incX int) (beta, tau float64) +} + +func DlarfgTest(t *testing.T, impl Dlarfger) { + rnd := rand.New(rand.NewSource(1)) + for i, test := range []struct { + alpha float64 + n int + x []float64 + }{ + { + alpha: 4, + n: 3, + }, + { + alpha: -2, + n: 3, + }, + { + alpha: 0, + n: 3, + }, + { + alpha: 1, + n: 1, + }, + { + alpha: 1, + n: 2, + x: []float64{4, 5, 6}, + }, + } { + n := test.n + incX := 1 + var x []float64 + if test.x == nil { + x = make([]float64, n-1) + for i := range x { + x[i] = rnd.Float64() + } + } else { + x = make([]float64, n-1) + copy(x, test.x) + } + xcopy := make([]float64, n-1) + copy(xcopy, x) + alpha := test.alpha + beta, tau := impl.Dlarfg(n, alpha, x, incX) + + // Verify the returns and the values in v. Construct h and perform + // the explicit multiplication. + h := make([]float64, n*n) + for i := 0; i < n; i++ { + h[i*n+i] = 1 + } + hmat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: h, + } + v := make([]float64, n) + copy(v[1:], x) + v[0] = 1 + vVec := blas64.Vector{ + Inc: 1, + Data: v, + } + blas64.Ger(-tau, vVec, vVec, hmat) + eye := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + blas64.Gemm(blas.Trans, blas.NoTrans, 1, hmat, hmat, 0, eye) + iseye := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + if math.Abs(eye.Data[i*n+j]-1) > 1e-14 { + iseye = false + } + } else { + if math.Abs(eye.Data[i*n+j]) > 1e-14 { + iseye = false + } + } + } + } + if !iseye { + t.Errorf("H^T * H is not I %v", eye) + } + + xVec := blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + xVec.Data[0] = test.alpha + copy(xVec.Data[1:], xcopy) + + ans := make([]float64, n) + ansVec := blas64.Vector{ + Inc: 1, + Data: ans, + } + blas64.Gemv(blas.NoTrans, 1, hmat, xVec, 0, ansVec) + if math.Abs(ans[0]-beta) > 1e-14 { + t.Errorf("Case %v, beta mismatch. Want %v, got %v", i, ans[0], beta) + } + for i := 1; i < n; i++ { + if math.Abs(ans[i]) > 1e-14 { + t.Errorf("Case %v, nonzero answer %v", i, ans) + break + } + } + } +} diff --git a/lapack/testlapack/dlarft.go b/lapack/testlapack/dlarft.go new file mode 100644 index 00000000..54853f28 --- /dev/null +++ b/lapack/testlapack/dlarft.go @@ -0,0 +1,168 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dlarfter interface { + Dgeqr2er + Dlarft(direct lapack.Direct, store lapack.StoreV, n, k int, v []float64, ldv int, tau []float64, t []float64, ldt int) +} + +func DlarftTest(t *testing.T, impl Dlarfter) { + rnd := rand.New(rand.NewSource(1)) + for _, store := range []lapack.StoreV{lapack.ColumnWise, lapack.RowWise} { + for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { + for _, test := range []struct { + m, n, ldv, ldt int + }{ + {6, 6, 0, 0}, + {8, 6, 0, 0}, + {6, 8, 0, 0}, + {6, 6, 10, 15}, + {8, 6, 10, 15}, + {6, 8, 10, 15}, + {6, 6, 15, 10}, + {8, 6, 15, 10}, + {6, 8, 15, 10}, + } { + // Generate a matrix + m := test.m + n := test.n + lda := n + if lda == 0 { + lda = n + } + + a := make([]float64, m*lda) + for i := 0; i < m; i++ { + for j := 0; j < lda; j++ { + a[i*lda+j] = rnd.Float64() + } + } + // Use dgeqr2 to find the v vectors + tau := make([]float64, n) + work := make([]float64, n) + impl.Dgeqr2(m, n, a, lda, tau, work) + + // Construct H using these answers + vMatTmp := extractVMat(m, n, a, lda, lapack.Forward, lapack.ColumnWise) + vMat := constructVMat(vMatTmp, store, direct) + v := vMat.Data + ldv := vMat.Stride + + h := constructH(tau, vMat, store, direct) + + k := min(m, n) + ldt := test.ldt + if ldt == 0 { + ldt = k + } + // Find T from the actual function + tm := make([]float64, k*ldt) + for i := range tm { + tm[i] = 100 + rnd.Float64() + } + // The v data has been put into a. + impl.Dlarft(direct, store, m, k, v, ldv, tau, tm, ldt) + + tData := make([]float64, len(tm)) + copy(tData, tm) + if direct == lapack.Forward { + // Zero out the lower traingular portion. + for i := 0; i < k; i++ { + for j := 0; j < i; j++ { + tData[i*ldt+j] = 0 + } + } + } else { + // Zero out the upper traingular portion. + for i := 0; i < k; i++ { + for j := i + 1; j < k; j++ { + tData[i*ldt+j] = 0 + } + } + } + + T := blas64.General{ + Rows: k, + Cols: k, + Stride: ldt, + Data: tData, + } + + vMatT := blas64.General{ + Rows: vMat.Cols, + Cols: vMat.Rows, + Stride: vMat.Rows, + Data: make([]float64, vMat.Cols*vMat.Rows), + } + for i := 0; i < vMat.Rows; i++ { + for j := 0; j < vMat.Cols; j++ { + vMatT.Data[j*vMatT.Stride+i] = vMat.Data[i*vMat.Stride+j] + } + } + var comp blas64.General + if store == lapack.ColumnWise { + // H = I - V * T * V^T + tmp := blas64.General{ + Rows: T.Rows, + Cols: vMatT.Cols, + Stride: vMatT.Cols, + Data: make([]float64, T.Rows*vMatT.Cols), + } + // T * V^T + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, T, vMatT, 0, tmp) + comp = blas64.General{ + Rows: vMat.Rows, + Cols: tmp.Cols, + Stride: tmp.Cols, + Data: make([]float64, vMat.Rows*tmp.Cols), + } + // V * (T * V^T) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, vMat, tmp, 0, comp) + } else { + // H = I - V^T * T * V + tmp := blas64.General{ + Rows: T.Rows, + Cols: vMat.Cols, + Stride: vMat.Cols, + Data: make([]float64, T.Rows*vMat.Cols), + } + // T * V + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, T, vMat, 0, tmp) + comp = blas64.General{ + Rows: vMatT.Rows, + Cols: tmp.Cols, + Stride: tmp.Cols, + Data: make([]float64, vMatT.Rows*tmp.Cols), + } + // V^T * (T * V) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, vMatT, tmp, 0, comp) + } + // I - V^T * T * V + for i := 0; i < comp.Rows; i++ { + for j := 0; j < comp.Cols; j++ { + comp.Data[i*m+j] *= -1 + if i == j { + comp.Data[i*m+j] += 1 + } + } + } + if !floats.EqualApprox(comp.Data, h.Data, 1e-14) { + t.Errorf("T does not construct proper H. Store = %v, Direct = %v.\nWant %v\ngot %v.", string(store), string(direct), h.Data, comp.Data) + } + } + } + } +} diff --git a/lapack/testlapack/dlarfx.go b/lapack/testlapack/dlarfx.go new file mode 100644 index 00000000..c6a9e6d6 --- /dev/null +++ b/lapack/testlapack/dlarfx.go @@ -0,0 +1,82 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlarfxer interface { + Dlarfx(side blas.Side, m, n int, v []float64, tau float64, c []float64, ldc int, work []float64) +} + +func DlarfxTest(t *testing.T, impl Dlarfxer) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Right, blas.Left} { + for m := 1; m < 12; m++ { + for n := 1; n < 12; n++ { + for _, extra := range []int{0, 1, 11} { + for cas := 0; cas < 10; cas++ { + testDlarfx(t, impl, side, m, n, extra, rnd) + } + } + } + } + } +} + +func testDlarfx(t *testing.T, impl Dlarfxer, side blas.Side, m, n, extra int, rnd *rand.Rand) { + const tol = 1e-13 + + c := randomGeneral(m, n, n+extra, rnd) + cWant := randomGeneral(m, n, n+extra, rnd) + tau := rnd.NormFloat64() + + var ( + v []float64 + h blas64.General + ) + if side == blas.Left { + v = randomSlice(m, rnd) + h = eye(m, m+extra) + } else { + v = randomSlice(n, rnd) + h = eye(n, n+extra) + } + blas64.Ger(-tau, blas64.Vector{Inc: 1, Data: v}, blas64.Vector{Inc: 1, Data: v}, h) + if side == blas.Left { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, h, c, 0, cWant) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, c, h, 0, cWant) + } + + var work []float64 + if h.Rows > 10 { + // Allocate work only if H has order > 10. + if side == blas.Left { + work = make([]float64, n) + } else { + work = make([]float64, m) + } + } + + impl.Dlarfx(side, m, n, v, tau, c.Data, c.Stride, work) + + prefix := fmt.Sprintf("Case side=%v, m=%v, n=%v, extra=%v", side, m, n, extra) + + // Check any invalid modifications of c. + if !generalOutsideAllNaN(c) { + t.Errorf("%v: out-of-range write to C\n%v", prefix, c.Data) + } + + if !equalApproxGeneral(c, cWant, tol) { + t.Errorf("%v: unexpected C\n%v", prefix, c.Data) + } +} diff --git a/lapack/testlapack/dlartg.go b/lapack/testlapack/dlartg.go new file mode 100644 index 00000000..b3ca9ca9 --- /dev/null +++ b/lapack/testlapack/dlartg.go @@ -0,0 +1,98 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dlartger interface { + Dlartg(f, g float64) (cs, sn, r float64) +} + +func DlartgTest(t *testing.T, impl Dlartger) { + const tol = 1e-14 + // safmn2 and safmx2 are copied from native.Dlartg. + safmn2 := math.Pow(dlamchB, math.Trunc(math.Log(dlamchS/dlamchE)/math.Log(dlamchB)/2)) + safmx2 := 1 / safmn2 + rnd := rand.New(rand.NewSource(1)) + for i := 0; i < 1000; i++ { + var f float64 + var fHuge bool + switch rnd.Intn(3) { + case 0: + // Huge f. + fHuge = true + f = math.Pow(10, 10-20*rnd.Float64()) * safmx2 + case 1: + // Tiny f. + f = math.Pow(10, 10-20*rnd.Float64()) * safmn2 + default: + f = rnd.NormFloat64() + } + if rnd.Intn(2) == 0 { + f *= -1 + } + + var g float64 + var gHuge bool + switch rnd.Intn(3) { + case 0: + // Huge g. + gHuge = true + g = math.Pow(10, 10-20*rnd.Float64()) * safmx2 + case 1: + // Tiny g. + g = math.Pow(10, 10-20*rnd.Float64()) * safmn2 + default: + g = rnd.NormFloat64() + } + if rnd.Intn(2) == 0 { + g *= -1 + } + + cs, sn, r := impl.Dlartg(f, g) + + rWant := cs*f + sn*g + if !floats.EqualWithinAbsOrRel(math.Abs(rWant), math.Abs(r), tol, tol) { + t.Errorf("Case f=%v,g=%v: unexpected r. Want %v, got %v", f, g, rWant, r) + } + oneTest := cs*cs + sn*sn + if math.Abs(oneTest-1) > tol { + t.Errorf("Case f=%v,g=%v: expected cs^2+sn^2==1, got %v", f, g, oneTest) + } + if !fHuge && !gHuge { + zeroTest := -sn*f + cs*g + if math.Abs(zeroTest) > tol { + t.Errorf("Case f=%v,g=%v: expected zero, got %v", f, g, zeroTest) + } + } + if math.Abs(f) > math.Abs(g) && cs < 0 { + t.Errorf("Case f=%v,g=%v: unexpected negative cs %v", f, g, cs) + } + } + for i := 0; i < 100; i++ { + cs, sn, _ := impl.Dlartg(rnd.NormFloat64(), 0) + if cs != 1 { + t.Errorf("Unexpected cs for g=0. Want 1, got %v", cs) + } + if sn != 0 { + t.Errorf("Unexpected sn for g=0. Want 0, got %v", sn) + } + } + for i := 0; i < 100; i++ { + cs, sn, _ := impl.Dlartg(0, rnd.NormFloat64()) + if cs != 0 { + t.Errorf("Unexpected cs for f=0. Want 0, got %v", cs) + } + if sn != 1 { + t.Errorf("Unexpected sn for f=0. Want 1, got %v", sn) + } + } +} diff --git a/lapack/testlapack/dlas2.go b/lapack/testlapack/dlas2.go new file mode 100644 index 00000000..a76e2742 --- /dev/null +++ b/lapack/testlapack/dlas2.go @@ -0,0 +1,34 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "testing" +) + +type Dlas2er interface { + Dlas2(f, g, h float64) (min, max float64) +} + +func Dlas2Test(t *testing.T, impl Dlas2er) { + for i, test := range []struct { + f, g, h, ssmin, ssmax float64 + }{ + // Singular values computed from Octave. + {10, 30, 12, 3.567778859365365, 33.634371616111189}, + {10, 30, -12, 3.567778859365365, 33.634371616111189}, + {2, 30, -12, 0.741557056404952, 32.364333658088754}, + {-2, 5, 12, 1.842864429909778, 13.023204317408728}, + } { + ssmin, ssmax := impl.Dlas2(test.f, test.g, test.h) + if math.Abs(ssmin-test.ssmin) > 1e-12 { + t.Errorf("Case %d, minimal singular value mismatch. Want %v, got %v", i, test.ssmin, ssmin) + } + if math.Abs(ssmax-test.ssmax) > 1e-12 { + t.Errorf("Case %d, minimal singular value mismatch. Want %v, got %v", i, test.ssmin, ssmin) + } + } +} diff --git a/lapack/testlapack/dlascl.go b/lapack/testlapack/dlascl.go new file mode 100644 index 00000000..eaaf6273 --- /dev/null +++ b/lapack/testlapack/dlascl.go @@ -0,0 +1,106 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/lapack" +) + +type Dlascler interface { + Dlascl(kind lapack.MatrixType, kl, ku int, cfrom, cto float64, m, n int, a []float64, lda int) +} + +func DlasclTest(t *testing.T, impl Dlascler) { + const tol = 1e-16 + + rnd := rand.New(rand.NewSource(1)) + for ti, test := range []struct { + m, n int + }{ + {0, 0}, + {1, 1}, + {1, 10}, + {10, 1}, + {2, 2}, + {2, 11}, + {11, 2}, + {3, 3}, + {3, 11}, + {11, 3}, + {11, 11}, + {11, 100}, + {100, 11}, + } { + m := test.m + n := test.n + for _, extra := range []int{0, 11} { + for _, kind := range []lapack.MatrixType{lapack.General, lapack.UpperTri, lapack.LowerTri} { + a := randomGeneral(m, n, n+extra, rnd) + aCopy := cloneGeneral(a) + cfrom := rnd.NormFloat64() + cto := rnd.NormFloat64() + scale := cto / cfrom + + impl.Dlascl(kind, -1, -1, cfrom, cto, m, n, a.Data, a.Stride) + + prefix := fmt.Sprintf("Case #%v: kind=%v,m=%v,n=%v,extra=%v", ti, kind, m, n, extra) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + switch kind { + case lapack.General: + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + want := scale * aCopy.Data[i*aCopy.Stride+j] + got := a.Data[i*a.Stride+j] + if math.Abs(want-got) > tol { + t.Errorf("%v: unexpected A[%v,%v]=%v, want %v", prefix, i, j, got, want) + } + } + } + case lapack.UpperTri: + for i := 0; i < m; i++ { + for j := i; j < n; j++ { + want := scale * aCopy.Data[i*aCopy.Stride+j] + got := a.Data[i*a.Stride+j] + if math.Abs(want-got) > tol { + t.Errorf("%v: unexpected A[%v,%v]=%v, want %v", prefix, i, j, got, want) + } + } + } + for i := 0; i < m; i++ { + for j := 0; j < min(i, n); j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification in lower triangle of A", prefix) + } + } + } + case lapack.LowerTri: + for i := 0; i < m; i++ { + for j := 0; j <= min(i, n-1); j++ { + want := scale * aCopy.Data[i*aCopy.Stride+j] + got := a.Data[i*a.Stride+j] + if math.Abs(want-got) > tol { + t.Errorf("%v: unexpected A[%v,%v]=%v, want %v", prefix, i, j, got, want) + } + } + } + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + if a.Data[i*a.Stride+j] != aCopy.Data[i*aCopy.Stride+j] { + t.Errorf("%v: unexpected modification in upper triangle of A", prefix) + } + } + } + } + } + } + } +} diff --git a/lapack/testlapack/dlaset.go b/lapack/testlapack/dlaset.go new file mode 100644 index 00000000..32195223 --- /dev/null +++ b/lapack/testlapack/dlaset.go @@ -0,0 +1,76 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" +) + +type Dlaseter interface { + Dlaset(uplo blas.Uplo, m, n int, alpha, beta float64, a []float64, lda int) +} + +func DlasetTest(t *testing.T, impl Dlaseter) { + rnd := rand.New(rand.NewSource(1)) + for ti, test := range []struct { + m, n int + }{ + {0, 0}, + {1, 1}, + {1, 10}, + {10, 1}, + {2, 2}, + {2, 10}, + {10, 2}, + {11, 11}, + {11, 100}, + {100, 11}, + } { + m := test.m + n := test.n + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower, blas.All} { + for _, extra := range []int{0, 10} { + a := randomGeneral(m, n, n+extra, rnd) + alpha := 1.0 + beta := 2.0 + + impl.Dlaset(uplo, m, n, alpha, beta, a.Data, a.Stride) + + prefix := fmt.Sprintf("Case #%v: m=%v,n=%v,uplo=%v,extra=%v", + ti, m, n, uplo, extra) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + for i := 0; i < min(m, n); i++ { + if a.Data[i*a.Stride+i] != beta { + t.Errorf("%v: unexpected diagonal of A") + } + } + if uplo == blas.Upper || uplo == blas.All { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + if a.Data[i*a.Stride+j] != alpha { + t.Errorf("%v: unexpected upper triangle of A") + } + } + } + } + if uplo == blas.Lower || uplo == blas.All { + for i := 1; i < m; i++ { + for j := 0; j < min(i, n); j++ { + if a.Data[i*a.Stride+j] != alpha { + t.Errorf("%v: unexpected lower triangle of A") + } + } + } + } + } + } + } +} diff --git a/lapack/testlapack/dlasq1.go b/lapack/testlapack/dlasq1.go new file mode 100644 index 00000000..1d08fa4f --- /dev/null +++ b/lapack/testlapack/dlasq1.go @@ -0,0 +1,96 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +func printDlasq1FortranInput(d, e, work []float64, n int) { + printFortranArray(d, "d") + printFortranArray(e, "e") + printFortranArray(work, "work") + fmt.Println("n = ", n) + fmt.Println("info = 0") +} + +type Dlasq1er interface { + Dlasq1(n int, d, e, work []float64) int + Dgetrfer +} + +func Dlasq1Test(t *testing.T, impl Dlasq1er) { + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + // TODO(btracey): Increase the size of this test when we have a more numerically + // stable way to test the singular values. + for _, n := range []int{1, 2, 5, 8} { + work := make([]float64, 4*n) + d := make([]float64, n) + e := make([]float64, n-1) + for cas := 0; cas < 1; cas++ { + for i := range work { + work[i] = rnd.Float64() + } + for i := range d { + d[i] = rnd.NormFloat64() + 10 + } + for i := range e { + e[i] = rnd.NormFloat64() + } + ldm := n + m := make([]float64, n*ldm) + // Set up the matrix + for i := 0; i < n; i++ { + m[i*ldm+i] = d[i] + if i != n-1 { + m[(i+1)*ldm+i] = e[i] + } + } + + ldmm := n + mm := make([]float64, n*ldmm) + bi.Dgemm(blas.Trans, blas.NoTrans, n, n, n, 1, m, ldm, m, ldm, 0, mm, ldmm) + + impl.Dlasq1(n, d, e, work) + + // Check that they are singular values. The + // singular values are the square roots of the + // eigenvalues of X^T * X + mmCopy := make([]float64, len(mm)) + copy(mmCopy, mm) + ipiv := make([]int, n) + for elem, sv := range d[0:n] { + copy(mm, mmCopy) + lambda := sv * sv + for i := 0; i < n; i++ { + mm[i*ldm+i] -= lambda + } + + // Compute LU. + ok := impl.Dgetrf(n, n, mm, ldmm, ipiv) + if !ok { + // Definitely singular. + continue + } + // Compute determinant + var logdet float64 + for i := 0; i < n; i++ { + v := mm[i*ldm+i] + logdet += math.Log(math.Abs(v)) + } + if math.Exp(logdet) > 2 { + t.Errorf("Incorrect singular value. n = %d, cas = %d, elem = %d, det = %v", n, cas, elem, math.Exp(logdet)) + } + } + } + } +} diff --git a/lapack/testlapack/dlasq2.go b/lapack/testlapack/dlasq2.go new file mode 100644 index 00000000..8e5b87b6 --- /dev/null +++ b/lapack/testlapack/dlasq2.go @@ -0,0 +1,721 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +func printDlasq2FortranInput(z []float64, n int) { + printFortranArray(z, "z") + fmt.Println("n = ", n) + fmt.Println("info = 0") +} + +type Dlasq2er interface { + Dgetrfer + Dlasq2(n int, z []float64) (info int) +} + +func Dlasq2Test(t *testing.T, impl Dlasq2er) { + dTol := 1e-6 + // Answers from calling the netlib Dlasq2 function directly. + for c, test := range []struct { + n int + z []float64 + info int + zOut []float64 + }{ + { + z: []float64{0.9975595900926172E+00, 0.5668247076112733E+00, 0.9659153754961249E+00, 0.7479276854714322E+00, 0.3673908973747557E+00, 0.4806368987547315E+00, 0.7375426363398452E-01, 0.5355229277727247E-02, 0.3470812885180155E+00, 0.3422438160728350E+00, 0.2179517263384726E+00, 0.1331604100136593E+00, 0.9005245144218924E+00, 0.3867660104574036E+00, 0.4454822893878481E+00, 0.6619321808958428E+00, 0.1610830043055933E-01, 0.6508548361039168E+00, 0.6464088254838254E+00, 0.3229872909405558E+00, 0.8556924028853313E+00, 0.4012869193638139E+00, 0.2068743292187569E+00, 0.9685394642165999E+00, 0.5983995343181346E+00, 0.6729807327762632E+00, 0.4568823106729620E+00, 0.3300151235733747E+00, 0.1003829265021773E+00, 0.7554533047597268E+00, 0.6056932669802318E+00, 0.7190479134084530E+00, 0.8973346038865299E+00, 0.6582291204811077E+00, 0.1507168371301046E+00, 0.6123149049967000E+00, 0.9786602381321465E+00, 0.9991422694268032E+00, 0.2567979861831603E+00, 0.5508654031552206E+00, 0.6590475178936379E+00, 0.5540051353968156E+00, 0.9777600986094505E+00, 0.9019233044604550E+00, 0.6579246844202109E+00, 0.7288585083995637E+00, 0.4024552650632751E+00, 0.9286276631540373E+00, 0.1478351900438915E+00, 0.6745292990637881E+00, 0.7696143092758962E+00, 0.3393225521457851E+00, 0.1158188549489931E+00, 0.6143691843615144E+00, 0.8206171394658319E+00, 0.9470946559240657E+00, 0.7311286518535550E+00, 0.4976039064630389E+00, 0.3748017407872005E+00, 0.4215058560045335E+00, 0.5529030382557849E+00, 0.9979192791781042E+00, 0.9903947480415133E+00, 0.7463096553073095E+00, 0.9537590617479789E+00, 0.9327469033343772E-01, 0.7340236871158429E+00, 0.7517616159256260E+00, 0.9468485056759987E+00, 0.7061763632511533E+00, 0.8138096664824992E+00, 0.5585945195965548E+00, 0.6170557687507783E-01, 0.4803807801853603E+00, 0.5976897721963292E+00, 0.1375319188363359E+00, 0.5873952004066820E+00, 0.5199682629163997E+00, 0.8858783448129579E+00, 0.3038101719904888E+00, 0.6696573039722583E+00, 0.6649400915297697E+00, 0.5036768993979404E+00, 0.2615751204119269E+00}, + n: 21, + zOut: []float64{0.2550031738262204E+01, 0.2480977513501848E+01, 0.2366602269912148E+01, 0.2169993432366266E+01, 0.1810817848712033E+01, 0.1681677309759878E+01, 0.1303743375476047E+01, 0.1202161769544433E+01, 0.1183377192742860E+01, 0.1094206688544886E+01, 0.9154376259418607E+00, 0.8241395430971566E+00, 0.7318275341991307E+00, 0.5186198053161721E+00, 0.4143051093784424E+00, 0.2112065329503869E+00, 0.1093987140067686E+00, 0.9751785856405315E-01, 0.2818174710670554E-01, 0.1697846193036144E-01, 0.2117542506861687E-04, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.2171122324673871E+02, 0.2171122324673871E+02, 0.1020000000000000E+03, 0.3081632653061225E+01, 0.2941176470588236E+01, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + info: 0, + }, + { + z: []float64{0.7655950151081736E-01, 0.1012496627944287E+00, 0.5492657397218519E+00, 0.3755849474908193E+00, 0.1514950257902281E-01, 0.7929154460744389E+00, 0.6208775449015512E+00, 0.7736035774285512E+00, 0.9535807609862423E+00, 0.1142443721338974E+00, 0.3184626428755636E+00, 0.5968198462235605E+00, 0.4815290260558158E-01, 0.1142057780273510E+00, 0.2159649191761220E+00, 0.1005733924928321E+00, 0.7334180249993905E-01, 0.2468617397276878E+00, 0.4433842667962828E+00, 0.2083675732544600E+00, 0.5669983427348256E+00, 0.2431239969651688E-01, 0.4202905770712168E+00, 0.3978530241169832E+00, 0.9765854254920880E+00, 0.6926050329928320E+00, 0.4943367486777372E-02, 0.1299210324451839E+00, 0.4677725963527957E-01, 0.8397777412847708E+00, 0.6784888222113696E+00, 0.5819508167748705E+00, 0.7335259194567719E+00, 0.1160427446694747E+00, 0.8402996546275487E+00, 0.8349959735427709E+00, 0.7465363962886192E+00, 0.8432008930683078E+00, 0.5288390014350658E+00, 0.6654846664813405E+00, 0.7307365692392301E+00, 0.4106042636492306E+00, 0.3557215961646439E+00, 0.7353770423280176E+00, 0.4713176648251016E+00, 0.4626254343486430E+00, 0.7596917071958065E+00, 0.7024594192654096E+00, 0.2579658084846748E+00, 0.9377050325544740E+00, 0.4561035840049426E+00, 0.8084892970067921E+00, 0.9088480529888660E+00, 0.6948766633235142E+00, 0.2194885062923195E+00, 0.8549545559228027E+00, 0.7443966896835119E+00, 0.3011130612705175E+00, 0.6719685452983997E+00, 0.6187140363783860E+00, 0.9675736114028010E+00, 0.9902393027740470E+00, 0.3380065169449795E+00, 0.9207672475882130E+00, 0.3390733399571427E+00, 0.9309435300662920E+00, 0.5465285509796513E+00, 0.4655125893217942E+00, 0.1769140958718970E+00, 0.3779940975005719E+00, 0.1752206228227682E+00, 0.3568582675012224E+00, 0.6656764250906758E+00, 0.6185492680730227E+00, 0.4689472437795331E+00, 0.3162518610221317E+00, 0.2688799086902824E+00, 0.1999212438248075E+00, 0.4154279763213168E+00, 0.9793029133347251E+00, 0.5432115888768534E+00, 0.1295182752745038E+00, 0.8047416637896615E+00, 0.8458210244967665E+00}, + n: 21, + zOut: []float64{0.2649710614371106E+01, 0.2321564474027070E+01, 0.2090779203479937E+01, 0.2001510674733695E+01, 0.1702794694134603E+01, 0.1077066053646038E+01, 0.1060140274732043E+01, 0.9894235909971354E+00, 0.9539342071687115E+00, 0.8046649468928653E+00, 0.7009142227469247E+00, 0.5502651835254770E+00, 0.4423863025187732E+00, 0.3697086796938907E+00, 0.1446051340026323E+00, 0.1110032523123295E+00, 0.7513603923341917E-01, 0.6860214953971246E-01, 0.2434478048112329E-01, 0.6989818532012803E-03, 0.7811996215926567E-04, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.1813933158005285E+02, 0.1813933158005285E+02, 0.1090000000000000E+03, 0.3231292517006803E+01, 0.5504587155963303E+01, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + info: 0, + }, + { + z: []float64{0.7090328374865308E+00, 0.5289732604915972E+00, 0.6638408676820399E+00, 0.9007392577685345E+00, 0.9411642674278379E+00, 0.1144202631330921E+00, 0.8666675899972089E+00, 0.6323680737151134E+00, 0.2427877245566508E+00, 0.1603957810123527E+00, 0.2123565414665629E-01, 0.1902539934369850E+00, 0.3123401294447815E+00, 0.8096475663099788E+00, 0.5737184899962203E+00, 0.8262606712006769E+00, 0.2864548736211023E+00, 0.1605147759074373E+00, 0.3309241142010387E+00, 0.2658533720189140E+00, 0.5447811280109880E+00, 0.5535203163154195E+00, 0.2161483615344606E-01, 0.1487480590324270E+00, 0.1049033762317957E+00, 0.6142137665037214E+00, 0.4062909815669834E+00, 0.9015282863354186E+00, 0.9428381000165521E+00, 0.1566198551488233E+00, 0.9369593797444957E+00, 0.1354729715149707E+00, 0.3712821832808397E+00, 0.3215112250898227E+00, 0.7149642455474942E+00, 0.7297077774959745E+00, 0.3785927874981971E+00, 0.8289344072747380E+00, 0.9536643756705742E+00, 0.3084192540817629E+00, 0.5797406195506623E+00, 0.2334488720392539E+00, 0.8444034680728870E+00, 0.2581324672603945E+00, 0.8397436353763532E+00, 0.5376562757207516E+00, 0.6215703771401371E+00, 0.4908247191212207E+00, 0.2848423854658637E+00, 0.2355591822832676E+00, 0.6513799258897619E+00, 0.6071703403704332E+00, 0.3981458512505542E+00, 0.8487946917355450E+00, 0.6376169839751418E+00, 0.2588233361358196E+00, 0.3588309885453386E+00, 0.5618301121344036E+00, 0.1214685095104872E+00, 0.9784693864155333E+00, 0.3832063578469370E+00, 0.7206987579838013E+00, 0.3582640246022534E+00, 0.9098815720988161E+00, 0.5436872318254895E+00, 0.9596753969896468E+00, 0.9294728975416107E+00, 0.6333208483475120E+00, 0.2956089747729942E+00, 0.1747395639573214E+00, 0.8425785962238860E+00, 0.6185896542974498E+00, 0.7058928872472775E+00, 0.2424399357290958E+00, 0.7979610473510427E+00, 0.3910140128664733E+00, 0.1099592891010870E+00, 0.7536879342329168E+00, 0.2979717756246736E-01, 0.7006607890734408E+00, 0.5252033671714352E+00, 0.7525598235593517E+00, 0.6476778890126167E+00, 0.8710847630132640E+00}, + n: 21, + zOut: []float64{0.2486733497028020E+01, 0.2359071020584524E+01, 0.2276435093308226E+01, 0.2061969496713965E+01, 0.1674052496256098E+01, 0.1634406821090099E+01, 0.1324515540477209E+01, 0.1213036064691536E+01, 0.1142092570196908E+01, 0.8479728747156923E+00, 0.7723287409164926E+00, 0.6845846156476076E+00, 0.4690003902541462E+00, 0.3969394481970619E+00, 0.3209839311891622E+00, 0.1762493640751034E+00, 0.1552318325824889E+00, 0.1299582823757977E+00, 0.4568511390642456E-01, 0.2058742849236605E-01, 0.6687292092604351E-04, 0.0000000000000000E+00, 0.9075510178548721E-16, 0.1809089799756099E-15, 0.1324515540477209E+01, 0.1972152263052530E-28, 0.7207148989396829E-15, 0.1135837106477965E-14, 0.1213036064691536E+01, 0.6865185493883853E-20, 0.3862483738583121E-14, 0.5795548067006594E-14, 0.1142092570196908E+01, 0.1237761291638161E-15, 0.1761387669893985E-13, 0.1204467761940304E-13, 0.8479728747156923E+00, 0.5980780785048348E-20, 0.5961915529495600E-12, 0.8546407799162654E-12, 0.7723287409164926E+00, 0.9983823616477125E-26, 0.2019190149561986E+02, 0.2019190149561985E+02, 0.1120000000000000E+03, 0.3267573696145125E+01, 0.7142857142857143E+01, 0.2981196239393922E-10, 0.4690003902541462E+00, 0.1411215361455214E-23, 0.1291839253366726E-09, 0.2114581039065388E-09, 0.3969394481970619E+00, 0.3215018396446338E-24, 0.8992249144513522E-09, 0.1460279739604385E-08, 0.3209839311891622E+00, 0.5301710738582062E-20, 0.5956459688113839E-08, 0.9509260151006140E-08, 0.1762493640751034E+00, 0.3305918938014538E-18, 0.2145126200057182E-06, 0.1391189925457742E-06, 0.1552318325824889E+00, 0.0000000000000000E+00, 0.8222867095540534E-06, 0.8520250895881005E-06, 0.1299582823757977E+00, 0.1946507846527860E-19, 0.4299487364203470E-05, 0.2670451838837521E-05, 0.4568511390642456E-01, 0.1783600337601646E-17, 0.1688330183620908E-03, 0.2840434656464124E-03, 0.2058742849236605E-01, 0.2127174768075152E-17, 0.5266290662212281E-04, 0.3082204001196310E-04, 0.6687292092604351E-04, 0.4725269249209171E-22, 0.3479992598793783E-02, 0.7157534417412210E-03}, + info: 0, + }, + { + z: []float64{0.8307212987388154E+00, 0.9571804405037874E+00, 0.2222674360399970E+00, 0.5794927951917870E+00, 0.9907605078898842E+00, 0.8399673535531696E+00, 0.1748054629244838E+00, 0.7095417514667766E+00, 0.3015507353664195E+00, 0.2504155371033889E-01, 0.9167396887269817E+00, 0.6888065712047682E+00, 0.7567577995550097E+00, 0.9327280452266753E+00, 0.5500991579404824E-01, 0.4989499454693689E+00, 0.5949898652751251E-01, 0.1718660951302574E+00, 0.6883620036166904E+00, 0.3066205390931208E+00, 0.7351901912310475E+00, 0.7521684164853142E+00, 0.3957210266430871E+00, 0.8778502662051324E-01, 0.4896297811280748E-01, 0.7793618951247419E+00, 0.6807766665219679E+00, 0.3115699624095645E+00, 0.5227646665950632E+00, 0.5057964692468060E+00, 0.4385260593432981E+00, 0.5876392780963172E+00, 0.2973252261444674E+00, 0.2948995727695043E+00, 0.7378444260331429E-01, 0.9749457382350615E+00, 0.7281626398300706E+00, 0.7580903878987629E+00, 0.3091762186458183E+00, 0.2464983240671905E+00, 0.2568872936019900E+00, 0.6180627613788815E+00, 0.9377882352337240E+00, 0.9921824152100049E+00, 0.2248192100106184E+00, 0.9472840045361628E+00, 0.8477853668436538E+00, 0.7001263233958666E+00, 0.5544440083201581E+00, 0.4415839019184687E+00, 0.2491818172148126E+00, 0.8976627554942691E+00, 0.1457298176556392E+00, 0.4345936198183369E+00, 0.4573762249453559E+00, 0.3093805347522776E+00, 0.4809246108862507E+00, 0.6897426752489948E+00, 0.8107988692352123E+00, 0.3921644162683642E+00, 0.2931487419364392E+00, 0.5759780604710760E+00, 0.7253418085569345E+00, 0.1427733376597652E+00, 0.3335555091947459E+00, 0.1603897948564823E+00, 0.5345943097231743E+00, 0.7233253065718669E+00, 0.2281802915301432E+00, 0.1990064435881517E+00, 0.9726196083044836E+00, 0.9935713768557323E+00, 0.8195201715007894E-01, 0.2508806553004002E+00, 0.2158489797899930E+00, 0.1957771185505375E+00, 0.8502651710165565E+00, 0.4468235108377239E-01, 0.8639211642125266E+00, 0.6713373034638015E-01, 0.4273173462824215E+00, 0.1373188375801981E+00, 0.1190874985301729E+00, 0.3059495456429208E+00}, + n: 21, + zOut: []float64{0.2399198387954965E+01, 0.2388283868878418E+01, 0.2234728187505421E+01, 0.1947641030296732E+01, 0.1845273105794422E+01, 0.1837097911259683E+01, 0.1471118007292610E+01, 0.1105651020532553E+01, 0.9883044021137968E+00, 0.9478841363642468E+00, 0.8550293065516678E+00, 0.7566674361156733E+00, 0.5310790726859680E+00, 0.3571217714437427E+00, 0.2893653184719416E+00, 0.2534414197270934E+00, 0.2173582726294167E+00, 0.4908458037260943E-01, 0.1246498683649276E-01, 0.5862142085722914E-02, 0.4704104342516643E-04, 0.1939986690620616E-19, 0.1034652479755287E-16, 0.1536368559490732E-16, 0.1471118007292610E+01, 0.5364686198585281E-13, 0.6088846084221820E-07, 0.1529604999486430E-06, 0.1105651020532553E+01, 0.2903008131213323E-27, 0.1160127138141562E-06, 0.1335479603764263E-06, 0.9883044021137968E+00, 0.2125606020077514E-18, 0.5906967539735199E-07, 0.6675815740532400E-07, 0.9478841363642468E+00, 0.1331202777560457E-29, 0.4438231138534822E-07, 0.3948328125271971E-07, 0.8550293065516678E+00, 0.5860341995390921E-20, 0.2049270140595660E+02, 0.2049270140595660E+02, 0.9800000000000000E+02, 0.2893424036281179E+01, 0.4081632653061225E+01, 0.1377712740565197E-07, 0.5310790726859680E+00, 0.1537961403283359E-19, 0.8011211497963711E-08, 0.8400248580143560E-08, 0.3571217714437427E+00, 0.5389497704469953E-25, 0.6965765014245226E-08, 0.7336584331089061E-08, 0.2893653184719416E+00, 0.6081961202185573E-17, 0.9973730165755502E-08, 0.8562226724273748E-08, 0.2534414197270934E+00, 0.3644137891043716E-17, 0.1552441635408352E-06, 0.1605842922922618E-07, 0.2173582726294167E+00, 0.1710250442519154E-26, 0.2805940935843235E-04, 0.1153299285109565E-04, 0.4908458037260943E-01, 0.1140499340513312E-15, 0.3458275194991493E-03, 0.2689727098393103E-03, 0.1246498683649276E-01, 0.4437342591868191E-30, 0.1429141842628293E-03, 0.1683368406483595E-03, 0.5862142085722914E-02, 0.2515327803596613E-22, 0.2394538487567536E-03, 0.1603201011413965E-03, 0.4704104342516643E-04, 0.0000000000000000E+00, 0.2149753858259932E-02, 0.4092589741085703E-02}, + info: 0, + }, + { + z: []float64{0.6132370003914160E+00, 0.6636632940312478E+00, 0.8959100063178993E+00, 0.7536793777540497E+00, 0.6298705159481864E+00, 0.2209880035966978E+00, 0.4838373503885766E+00, 0.6150203746616348E+00, 0.9876587724998732E+00, 0.5591876171910803E+00, 0.3708840600033242E+00, 0.3375947236522073E+00, 0.7454250822233153E+00, 0.5697349010621601E+00, 0.4561367007431339E+00, 0.6481896738286699E+00, 0.6835960923418801E+00, 0.1703905177923075E+00, 0.2730661115049011E+00, 0.4407624886449348E+00, 0.4577220273293221E+00, 0.3952566732937318E+00, 0.6883342106097436E+00, 0.2988887099704991E+00, 0.2052274263883085E+00, 0.1922842703083140E+00, 0.4189999528960880E+00, 0.6906452535299822E+00, 0.1405554539793709E+00, 0.1437412601859918E+00, 0.6624635742176765E+00, 0.5756752017566100E+00, 0.7749505183416766E+00, 0.7752965769666669E+00, 0.7653541054136069E+00, 0.8765107194498384E+00, 0.9921378985956986E-01, 0.3345156485504346E+00, 0.6450936562634260E+00, 0.1316181443467312E+00, 0.8075436662342752E+00, 0.5418723210737144E+00, 0.2657525890099199E+00, 0.4588749915888913E+00, 0.5109250246010762E+00, 0.5048342930643721E+00, 0.9617739307304302E+00, 0.5502351700731637E+00, 0.1896288106400514E+00, 0.2011189112848212E+00, 0.2487376305081674E+00, 0.9700914054633822E+00, 0.7763920500140777E+00, 0.2727004477756484E+00, 0.4969507403482072E+00, 0.3987515903118115E+00, 0.6132963384905279E+00, 0.8526865910258985E-01, 0.7370021348269777E+00, 0.8628692345603857E+00, 0.3410351221174988E+00, 0.6944408188735030E+00, 0.6418832405583447E+00, 0.8549561267667016E-01, 0.7079842121947655E+00, 0.5924596383322266E+00, 0.2327865765542259E+00, 0.7519783901092147E-01, 0.3243359400926964E+00, 0.9130914950306788E+00, 0.2042866226175709E+00, 0.4527677275849958E+00, 0.7271733772634871E+00, 0.2835797318864963E-01, 0.5170298378180002E+00, 0.7676612860726464E+00, 0.8943646165240225E+00, 0.9444900692816881E+00, 0.2898061819682256E+00, 0.5314658042534958E+00, 0.2328255902743269E+00, 0.3127766212762262E+00, 0.1415213232426512E+00, 0.3425808715425687E+00}, + n: 21, + zOut: []float64{0.2568497247033635E+01, 0.2474290441512907E+01, 0.2254355189310800E+01, 0.1987099258783412E+01, 0.1595738223681455E+01, 0.1520583769371047E+01, 0.1349481184037943E+01, 0.1286943522977408E+01, 0.1233633359467258E+01, 0.1105388350935419E+01, 0.8741663391031235E+00, 0.7042784684853729E+00, 0.6809050564171195E+00, 0.5312535309083547E+00, 0.3765999563195902E+00, 0.2982885955048700E+00, 0.1761408438030470E+00, 0.1021950592815966E+00, 0.5149411253987173E-01, 0.2409819364774552E-01, 0.3292801347387554E-02, 0.7649046082865931E-16, 0.2073367755475779E-07, 0.1625592945762753E-07, 0.1349481184037943E+01, 0.1183291357831518E-29, 0.4660703060512034E-13, 0.1807862490656452E-12, 0.1286943522977408E+01, 0.1649665924998180E-25, 0.1294990598064480E-10, 0.5231829186377068E-10, 0.1233633359467258E+01, 0.8526291632353489E-16, 0.3101844497115867E-08, 0.1140775990076438E-07, 0.1105388350935419E+01, 0.9624103043696344E-28, 0.5663389137423196E-06, 0.4346359020206590E-06, 0.8741663391031235E+00, 0.3067428736041242E-19, 0.2119872350446936E+02, 0.2119872350446936E+02, 0.1030000000000000E+03, 0.3056689342403628E+01, 0.2912621359223301E+01, 0.2039882393707806E-06, 0.6809050564171195E+00, 0.0000000000000000E+00, 0.3469744030301619E-06, 0.2644131172050035E-06, 0.5312535309083547E+00, 0.3043881270837009E-21, 0.5541811479797519E-05, 0.3827690844980446E-05, 0.3765999563195902E+00, 0.1909043390634849E-27, 0.3412067971678679E-04, 0.3418356678006945E-04, 0.2982885955048700E+00, 0.1167175485134229E-15, 0.1390598737761422E-03, 0.1685020271483295E-03, 0.1761408438030470E+00, 0.3311298373357662E-16, 0.2687183242739271E-03, 0.2970561145148615E-03, 0.1021950592815966E+00, 0.3861046454850253E-20, 0.3877059717439437E-03, 0.4274183271611622E-03, 0.5149411253987173E-01, 0.3171094621243632E-24, 0.5614281929126997E-03, 0.6201503766753644E-03, 0.2409819364774552E-01, 0.5854827030937197E-31, 0.8580439238194122E-03, 0.9937175751003719E-03, 0.3292801347387554E-02, 0.1687712113428427E-19, 0.6404816195044538E-02, 0.3574263865391779E-02}, + info: 0, + }, + { + z: []float64{0.1535280608392028E+00, 0.8492164242958209E+00, 0.9720508422713467E+00, 0.4409240313091006E+00, 0.7744413453832578E+00, 0.4562143200311385E+00, 0.8645004927526174E+00, 0.7279750979364787E+00, 0.6373358699411871E+00, 0.7240388495630282E+00, 0.6042124182518795E+00, 0.2629417492305242E-01, 0.2927658696806527E+00, 0.1971917075100318E+00, 0.9486620805007744E+00, 0.5318461733579811E+00, 0.1035922758398233E-01, 0.4521355876782263E+00, 0.9635828765019094E+00, 0.9861179636072996E+00, 0.3409131837267612E+00, 0.9592913933135179E+00, 0.3267081303471464E+00, 0.7042329006712417E+00, 0.7904477014671945E+00, 0.7235636505410947E+00, 0.7289557043239185E+00, 0.4453819137782510E+00, 0.3817792285714174E+00, 0.9222246883547156E+00, 0.7484233302016036E+00, 0.4267300781414476E+00, 0.2174272124496083E+00, 0.7294135193889231E+00, 0.7969150359898325E+00, 0.5584233158827989E+00, 0.8854167010119880E+00, 0.3831257236275667E+00, 0.2407966333760054E+00, 0.3150832526072347E+00, 0.4329046703236793E+00, 0.4798261053116015E-01, 0.4240797212710790E+00, 0.7373271503520912E+00, 0.8727856342792233E+00, 0.3079871491200393E+00, 0.8433176604823556E+00, 0.8160920845908722E+00, 0.4068006968345205E+00, 0.8649881745683563E+00, 0.8522504948442566E+00, 0.5120820890311298E+00, 0.7764141319706099E+00, 0.4928600452500731E+00, 0.2048536231221674E+00, 0.4451308747598662E+00, 0.4335546033385644E+00, 0.5471256397417612E-01, 0.7004960984988220E+00, 0.9192372420579460E+00, 0.3890133989146303E+00, 0.2488782917619309E+00, 0.3663470187625480E+00, 0.9986636866778884E+00, 0.6620792031393874E+00, 0.1797345205931197E+00, 0.8723761011602340E+00, 0.2439575243714007E+00, 0.1163919437436586E+00, 0.8182195270597429E+00, 0.5356403226658167E+00, 0.9880537276300997E+00, 0.4163057033602857E+00, 0.8081980088045720E+00, 0.2399383760782623E+00, 0.9702581513812658E+00, 0.3763181880939181E+00, 0.6334004896983517E+00, 0.1368995930243956E+00, 0.7684724492197631E+00, 0.1011989548860721E+00, 0.5519462180485674E+00, 0.8316516728108886E+00, 0.3772586994144635E+00}, + n: 21, + zOut: []float64{0.2579297838383781E+01, 0.2566242251743589E+01, 0.2402206059499122E+01, 0.2314572748831938E+01, 0.2210246243389976E+01, 0.2073991263591532E+01, 0.1647852770173070E+01, 0.1458062583915517E+01, 0.1424747680105817E+01, 0.1229594627898745E+01, 0.8682818248784862E+00, 0.7800126440184885E+00, 0.7769870810337002E+00, 0.4018986220147585E+00, 0.3451236345722463E+00, 0.2059421010707241E+00, 0.1665395041671736E+00, 0.1384541468623413E+00, 0.4569625338134105E-01, 0.3572364569397507E-01, 0.7785678858960618E-04, 0.1325624140040768E-19, 0.1464254707155794E-03, 0.9424803187834284E-04, 0.1647852770173070E+01, 0.1564186274351218E-15, 0.3473328524848360E-05, 0.4592867365821283E-05, 0.1458062583915517E+01, 0.3231174267785264E-26, 0.1403657959312935E-04, 0.9634257574341414E-05, 0.1424747680105817E+01, 0.1020140793606197E-15, 0.1723203566561169E-05, 0.6067379842882497E-05, 0.1229594627898745E+01, 0.2663149152121406E-17, 0.1061013981937667E-04, 0.1674993264096194E-04, 0.8682818248784862E+00, 0.8099755562101574E-24, 0.2367155138201492E+02, 0.2367155138201491E+02, 0.1110000000000000E+03, 0.3174603174603174E+01, 0.5405405405405405E+01, 0.8398559432747079E-06, 0.7769870810337002E+00, 0.0000000000000000E+00, 0.6532651675838807E-05, 0.1393736055608104E-04, 0.4018986220147585E+00, 0.1488702756444268E-16, 0.4786924897797409E-03, 0.2484818164296786E-03, 0.3451236345722463E+00, 0.1393994753571567E-18, 0.7967956438667165E-06, 0.1566848631115136E-05, 0.2059421010707241E+00, 0.1872521839860791E-17, 0.1674828806776016E-04, 0.3829209207735075E-04, 0.1665395041671736E+00, 0.5127595883936577E-29, 0.1145979873394449E-04, 0.6763541499702777E-05, 0.1384541468623413E+00, 0.6162975822039155E-31, 0.1509781169748205E-03, 0.4934238518442497E-04, 0.4569625338134105E-01, 0.3815207438965640E-25, 0.3298388086972868E-02, 0.1367005987525658E-02, 0.3572364569397507E-01, 0.2773930797150972E-21, 0.3955985102398275E-03, 0.3433403686203228E-03, 0.7785678858960618E-04, 0.7790054198074833E-21, 0.1914938157793930E-01, 0.1330976133014081E-01}, + info: 0, + }, + { + z: []float64{0.8677677383100214E+00, 0.6246622741727026E+00, 0.5523136647126087E+00, 0.2116103484147348E+00, 0.8227197076777661E+00, 0.3636019443697256E+00, 0.2305222034118074E+00, 0.3291143648196290E+00, 0.6800926583943011E+00, 0.4290450477605455E+00, 0.4523048516285796E+00, 0.9276084588261152E+00, 0.4462311938877914E+00, 0.6672491542978151E+00, 0.7808537049355564E+00, 0.7908271145868994E+00, 0.1977402045683964E+00, 0.2563794060302639E+00, 0.6768044668199432E+00, 0.8985309013607360E+00, 0.3750140409512910E+00, 0.2003663066929584E-01, 0.4020022629723622E+00, 0.9909625073113403E+00, 0.9747495116121061E+00, 0.9702779584867087E+00, 0.9688371740876045E+00, 0.3747269639045615E+00, 0.9728403214040160E-01, 0.7507234588709335E+00, 0.8245099981459856E+00, 0.7244448753186800E+00, 0.3670523289486082E+00, 0.6220520718362722E+00, 0.3063226611493952E+00, 0.3012769332894331E+00, 0.6763821017483275E+00, 0.8300640433662996E+00, 0.5563237542291373E+00, 0.5594449054752113E+00, 0.3278038518373678E+00, 0.7307041435680680E+00, 0.1582529760475658E+00, 0.5328751876026443E+00, 0.7841944053171677E+00, 0.2157818394558657E+00, 0.3253134136288985E+00, 0.5014502641306768E+00, 0.2229178930043155E+00, 0.4664985859426845E+00, 0.1867987929192785E+00, 0.1951091673564507E+00, 0.2069185156156168E+00, 0.9058058542218750E+00, 0.7999188612304056E+00, 0.7349484002829904E+00, 0.4153480749961962E+00, 0.8109879258422723E+00, 0.9883741464101338E+00, 0.4911202582082937E+00, 0.2193166361224579E+00, 0.7618820222564749E+00, 0.9073087210515056E+00, 0.5896383620860655E+00, 0.8706198942119541E+00, 0.3860710050052940E-01, 0.9380336544251486E+00, 0.4690283060543987E-01, 0.8970820572284144E+00, 0.1974579201509297E-01, 0.9992442335759629E+00, 0.9801967887432729E+00, 0.6116617864086051E+00, 0.5875675950916066E+00, 0.9622537584002233E+00, 0.8934200351761762E+00, 0.2022182729782195E+00, 0.1273316669652236E-01, 0.2549904925850485E+00, 0.8904280763656908E+00, 0.2695748922419082E+00, 0.8890196843116763E+00, 0.5191439214393291E+00, 0.3672061831861048E+00}, + n: 21, + zOut: []float64{0.3071910136434907E+01, 0.2366684893081943E+01, 0.2247985022656176E+01, 0.2134160618983571E+01, 0.1929380862422316E+01, 0.1895668448583188E+01, 0.1735809456784568E+01, 0.1390623822795548E+01, 0.1372853012616850E+01, 0.1197489438156041E+01, 0.1106600205023489E+01, 0.8564547950868329E+00, 0.4949238197552136E+00, 0.3889452841496929E+00, 0.3405947975938995E+00, 0.2516597920662951E+00, 0.2113890461921598E+00, 0.1169778386549868E+00, 0.1072268106836703E+00, 0.7646784687889400E-02, 0.1286588928027629E-02, 0.1194767075191949E-22, 0.1162094363453686E-09, 0.8691558890693288E-10, 0.1735809456784568E+01, 0.8134816760001801E-14, 0.1019665656815186E-08, 0.1906916241197346E-08, 0.1390623822795548E+01, 0.0000000000000000E+00, 0.1594323424098234E-05, 0.3312168640703357E-05, 0.1372853012616850E+01, 0.0000000000000000E+00, 0.3830524268846776E-04, 0.1577534719508939E-04, 0.1197489438156041E+01, 0.1592850300841939E-16, 0.1256296423282912E-03, 0.1149042579564614E-03, 0.1106600205023489E+01, 0.6530365529382261E-18, 0.2322627147533726E+02, 0.2322627147533726E+02, 0.1020000000000000E+03, 0.2963718820861678E+01, 0.3921568627450980E+01, 0.6483516393063832E-03, 0.4949238197552136E+00, 0.1972152263052530E-28, 0.5430985229870038E-04, 0.4447663749968261E-04, 0.3889452841496929E+00, 0.1329049288162406E-17, 0.2738942590248176E-04, 0.1582812372822289E-04, 0.3405947975938995E+00, 0.1187508759187252E-18, 0.7465410105999781E-04, 0.1255487400488340E-03, 0.2516597920662951E+00, 0.4141519752410312E-29, 0.2152266118694742E-04, 0.6710408995051273E-05, 0.2113890461921598E+00, 0.3333294884283764E-18, 0.6132111109262542E-03, 0.4277764486586744E-03, 0.1169778386549868E+00, 0.2711709361697228E-30, 0.3832079371139971E-03, 0.3904887652242632E-03, 0.1072268106836703E+00, 0.2176254805972020E-18, 0.4306247975784355E-03, 0.4948147025217374E-03, 0.7646784687889400E-02, 0.1110488679882733E-19, 0.1569670832436511E-02, 0.2092370053382882E-02, 0.1286588928027629E-02, 0.5442848430598922E-18, 0.4460307636637516E-02, 0.7046212350403941E-02}, + info: 0, + }, + { + z: []float64{0.9838241499564321E+00, 0.8769514477589457E+00, 0.6814467524843054E+00, 0.3624618995089947E+00, 0.1981908649829056E+00, 0.1872278407669582E+00, 0.9876554444003832E+00, 0.1826583579385833E+00, 0.1183269767614670E-01, 0.9437175277915953E+00, 0.4919320768587329E+00, 0.9805291749478650E+00, 0.6132842150855770E+00, 0.3626870797541525E+00, 0.5323780753704027E+00, 0.1457937981484730E+00, 0.1328300737138376E+00, 0.3811835111034733E+00, 0.7003413504474413E+00, 0.5497308136521228E+00, 0.8255713255718768E+00, 0.5373393799690840E+00, 0.6623327475759663E+00, 0.5316913920782962E-01, 0.1714649183335913E+00, 0.6186592957613974E+00, 0.7587327126921758E+00, 0.9100586255702885E+00, 0.7140000863381626E+00, 0.7400119974078728E+00, 0.3567025022071233E+00, 0.8218612151637966E+00, 0.5520556331010515E+00, 0.6508027169553372E+00, 0.1875664464519897E+00, 0.8183092398415237E+00, 0.2239662369231676E-01, 0.6571790154721793E+00, 0.1196415656369646E+00, 0.3853512775546503E+00, 0.2426450009067070E+00, 0.9653447575661293E+00, 0.4852906340727067E+00, 0.9923496603563310E+00, 0.2812811891225394E+00, 0.9784300144088514E+00, 0.9528689986126391E+00, 0.2431080020200448E+00, 0.4166208849723857E+00, 0.7357806826601304E+00, 0.1952831632199464E+00, 0.6393407699957093E+00, 0.6296804002658308E+00, 0.1028694374663701E+00, 0.1387452591062114E+00, 0.4549213107961220E+00, 0.9843671628976580E+00, 0.4249152858158138E+00, 0.7048043599695387E+00, 0.3653998904622074E+00, 0.2003765309007774E+00, 0.4095912484595889E+00, 0.2392233396621621E+00, 0.7050044605645847E+00, 0.7908086424110450E-01, 0.2038177493661538E+00, 0.1735168081909322E-01, 0.3343100300667304E+00, 0.2848572906345944E+00, 0.8454138442968477E+00, 0.4944340369822147E+00, 0.7101083458004501E+00, 0.2546477176633619E+00, 0.8227235336957786E+00, 0.2816146807741101E+00, 0.6247995550265835E+00, 0.7458069042729408E+00, 0.8739345864578790E+00, 0.1278937298671606E+00, 0.2791833532060612E+00, 0.9234762152279486E+00, 0.9863012584972185E+00, 0.7892913846591531E+00, 0.3479266835120939E+00}, + n: 21, + zOut: []float64{0.2623495482601064E+01, 0.2337512212773574E+01, 0.2310508039367694E+01, 0.2188663096012427E+01, 0.1954141717332891E+01, 0.1371476701077329E+01, 0.1267869950064541E+01, 0.1203016320141301E+01, 0.1132845050819559E+01, 0.9979737678355206E+00, 0.8633053234635751E+00, 0.6603430282082061E+00, 0.6064350433288983E+00, 0.4855760962077864E+00, 0.4280373135604714E+00, 0.3659370670152315E+00, 0.1453682093766173E+00, 0.9617861239701422E-01, 0.7192949634365248E-01, 0.1892143303127712E-02, 0.3946528731286962E-05, 0.0000000000000000E+00, 0.9258243476772570E-07, 0.9000418438492766E-07, 0.1267869950064541E+01, 0.0000000000000000E+00, 0.2500234135491857E-07, 0.1856395032302831E-07, 0.1203016320141301E+01, 0.2658426139847422E-18, 0.4168972835699797E-07, 0.5531467635213317E-07, 0.1132845050819559E+01, 0.2518044009465470E-24, 0.1194059466661935E-08, 0.2159625808467239E-08, 0.9979737678355206E+00, 0.1047506307937635E-23, 0.4478743649191460E-07, 0.9991281120631680E-07, 0.8633053234635751E+00, 0.5895762127714383E-22, 0.2111250861775921E+02, 0.2111250861775921E+02, 0.9900000000000000E+02, 0.2927437641723356E+01, 0.4040404040404041E+01, 0.9244672049175682E-07, 0.6064350433288983E+00, 0.1817535525629211E-26, 0.9398974933478891E-07, 0.9547946669183887E-07, 0.4855760962077864E+00, 0.3185418565406740E-17, 0.9937648506460343E-07, 0.9792626502078532E-07, 0.4280373135604714E+00, 0.2958228394578794E-30, 0.9921525775570031E-07, 0.1006425128472401E-06, 0.3659370670152315E+00, 0.4461863922899316E-21, 0.1047488573169732E-06, 0.1032270990738791E-06, 0.1453682093766173E+00, 0.6504493884088473E-15, 0.1102576940374778E-06, 0.1180293023862048E-06, 0.9617861239701422E-01, 0.6467797587852522E-18, 0.1844536574504796E-06, 0.1488485108626942E-06, 0.7192949634365248E-01, 0.2114103686638959E-13, 0.8531410278849863E-06, 0.1408572284551695E-05, 0.1892143303127712E-02, 0.0000000000000000E+00, 0.6242841403373791E-04, 0.3522115697192072E-04, 0.3946528731286962E-05, 0.6203854594147708E-24, 0.1209929086462260E-02, 0.4906802871097585E-03}, + info: 0, + }, + { + z: []float64{0.7643247442799757E+00, 0.1930914554442843E+00, 0.6441117687067544E-01, 0.4522061669974708E-01, 0.1465182320932497E+00, 0.8069033698425149E+00, 0.6560188128523874E+00, 0.2446749124420051E+00, 0.3243649544497533E+00, 0.9836733438970116E+00, 0.6137527621157332E+00, 0.2925225554635034E+00, 0.4955619768673408E+00, 0.7361289066349539E+00, 0.3953262269487445E-01, 0.1565854250658760E-01, 0.4785236355428808E+00, 0.7766165270899886E+00, 0.9069259340739989E+00, 0.9151936268801151E+00, 0.3338292872636017E+00, 0.2993135005490550E+00, 0.8287022194584887E+00, 0.4593628480546942E+00, 0.1484428934315618E-01, 0.3390977660295040E+00, 0.5819746692101802E-01, 0.9277352020779983E-01, 0.6517310862845033E+00, 0.3951866136249272E+00, 0.6199300068296295E+00, 0.8252199884043853E+00, 0.3390764160478065E+00, 0.3084679704183562E+00, 0.3609211283483548E+00, 0.4116857210304998E+00, 0.4609476939442378E+00, 0.3824129844545763E+00, 0.6431169626236315E+00, 0.2416519334621993E+00, 0.7156780768158061E+00, 0.8568018406565006E+00, 0.1639408452444666E+00, 0.7313040585903831E+00, 0.5099183572592548E+00, 0.2801641590611897E+00, 0.9930562568266591E+00, 0.7612468327164370E+00, 0.3271886985411110E-01, 0.7066605591101006E+00, 0.6720867845388043E+00, 0.9004209067318458E-01, 0.4611918168927077E+00, 0.2638384667560661E+00, 0.3554909044606102E+00, 0.7231384727137510E+00, 0.2729268177075039E-01, 0.5848397641916390E+00, 0.6942450598380807E+00, 0.1106927451590289E+00, 0.5262572286481777E+00, 0.9936768911750095E+00, 0.7262536107933111E+00, 0.7604873714570974E+00, 0.2036182130165832E+00, 0.8632527217998969E+00, 0.1924957421132846E+00, 0.8815968660524154E-01, 0.2412813036310424E+00, 0.9105232147744077E+00, 0.8298587923387578E+00, 0.7754575363227978E-01, 0.8714764594177653E+00, 0.5571901679066804E+00, 0.3971870017409277E+00, 0.9993097753535422E+00, 0.7700188328643205E+00, 0.7856615172810383E+00, 0.7533953600915489E+00, 0.5602208064288483E+00, 0.6944234372397261E+00, 0.8756090822068926E+00, 0.1433700749181099E-01, 0.2857413018245216E+00}, + n: 21, + zOut: []float64{0.2546753248931182E+01, 0.2051980365170268E+01, 0.1958366389726797E+01, 0.1631238683423845E+01, 0.1586034790683645E+01, 0.1538534425510682E+01, 0.1255412586747036E+01, 0.1121690972560896E+01, 0.9718147643766369E+00, 0.9049110982817965E+00, 0.7946671649858114E+00, 0.5884376759528481E+00, 0.4050217422474118E+00, 0.3189813042957475E+00, 0.2502079076659038E+00, 0.1378021633219403E+00, 0.1230588999356998E+00, 0.5024634530670342E-01, 0.4118371112977081E-01, 0.5279820157992808E-02, 0.1421284452028254E-03, 0.2680065184671810E-21, 0.2301930285321580E-14, 0.5132436462785431E-14, 0.1255412586747036E+01, 0.2424007516335156E-18, 0.1913029885324846E-10, 0.9021761757831104E-11, 0.1121690972560896E+01, 0.1977581519346623E-22, 0.4602280167506019E-08, 0.2460881124989248E-08, 0.9718147643766369E+00, 0.1104484640438811E-18, 0.4278245612761057E-07, 0.2387897413722468E-07, 0.9049110982817965E+00, 0.2768434971275651E-16, 0.3015076539683485E-07, 0.2961312447326530E-07, 0.7946671649858114E+00, 0.1262042385269225E-19, 0.1828176618885781E+02, 0.1828176618885782E+02, 0.1040000000000000E+03, 0.3122448979591837E+01, 0.3846153846153846E+01, 0.1851926648424158E-06, 0.4050217422474118E+00, 0.9293221980374701E-17, 0.1284245841610550E-05, 0.2164676294343609E-05, 0.3189813042957475E+00, 0.1378649105642637E-16, 0.4610281885819925E-06, 0.1003327305702036E-05, 0.2502079076659038E+00, 0.2177821011994986E-13, 0.3677246803752887E-04, 0.3095541926811936E-04, 0.1378021633219403E+00, 0.9210656120777790E-20, 0.9401458780737957E-05, 0.1039122642078444E-04, 0.1230588999356998E+00, 0.4930380657631324E-30, 0.6528493871226699E-06, 0.1524653341983116E-05, 0.5024634530670342E-01, 0.6838275466788171E-23, 0.2104276631320477E-03, 0.3160258883556432E-03, 0.4118371112977081E-01, 0.6162975822039155E-32, 0.9318133168194381E-04, 0.1261364640367337E-03, 0.5279820157992808E-02, 0.7005084838362585E-27, 0.1903158606362315E-02, 0.7288242235414376E-03, 0.1421284452028254E-03, 0.7703719777548943E-33, 0.7890744155827079E-03, 0.6129022301104231E-03}, + info: 0, + }, + { + z: []float64{0.1813251202119042E+00, 0.8077156210855166E+00, 0.5525396662071069E+00, 0.4858391136124270E+00, 0.5367389425969793E+00, 0.4534294101162717E-01, 0.1438386197304258E+00, 0.7801305810912117E+00, 0.7706244548712898E+00, 0.1595286891781422E+00, 0.4689597797472277E+00, 0.1630160981693277E+00, 0.5488525733069047E+00, 0.3050379405729475E+00, 0.1544160351990825E+00, 0.5750210099163514E+00, 0.1440876969429373E+00, 0.1932969959898051E+00, 0.6910796187912660E+00, 0.9501882645686455E+00, 0.1314109921701710E+00, 0.7099941843070685E+00, 0.3797313713209320E+00, 0.3979808845174081E+00, 0.1006018923100482E-02, 0.4131896358268045E+00, 0.8038132966802857E+00, 0.8778643630407806E+00, 0.1407889867849830E+00, 0.4305134083308382E-01, 0.5656496703997997E+00, 0.5820188952601091E-01, 0.8713537916178680E+00, 0.3443162753417257E+00, 0.4898335360866699E+00, 0.2822165738696382E+00, 0.2385629061714932E+00, 0.5496478420286478E+00, 0.7138724344268773E+00, 0.9028268569137332E+00, 0.7573748459251011E+00, 0.5392259606733280E+00, 0.6459213128573325E+00, 0.7769497211063184E+00, 0.8790154346127051E+00, 0.6027389165195913E+00, 0.6151696559086139E-01, 0.4391208291942791E+00, 0.8705350585502258E-02, 0.2995750933531418E+00, 0.9735013653226658E+00, 0.9551710085419519E+00, 0.2132875677034638E+00, 0.6739668529657764E+00, 0.5361543284664445E+00, 0.3596977928604983E+00, 0.1373006735837845E-02, 0.8494363479416891E+00, 0.4214720423022895E+00, 0.7478449906096684E+00, 0.1164429527473354E-01, 0.6143683285709396E+00, 0.4444360064738268E+00, 0.6626608299302873E+00, 0.6887459689591686E+00, 0.9391262494647765E+00, 0.7167310461528731E+00, 0.4516657019045726E+00, 0.6345059624902227E+00, 0.2241941493026407E+00, 0.3981621310014529E+00, 0.8300976429090324E+00, 0.1390103241004258E+00, 0.7559319384422415E+00, 0.7929892786129927E+00, 0.2279061631835571E+00, 0.5280867615120838E+00, 0.1374499172030500E+00, 0.1739503966093568E+00, 0.1475298919309330E+00, 0.8100098524713260E+00, 0.2514850916075489E+00, 0.4100580488172028E+00, 0.9565966467338131E+00}, + n: 21, + zOut: []float64{0.2319179815575576E+01, 0.1965907124623829E+01, 0.1887317422176422E+01, 0.1806195743608332E+01, 0.1738584542532610E+01, 0.1518839817892385E+01, 0.1233018482483247E+01, 0.1147944957333420E+01, 0.8847632334488245E+00, 0.7964611162721277E+00, 0.7478364459856081E+00, 0.6404526251941426E+00, 0.4533452491188792E+00, 0.4218888103472739E+00, 0.2727838365998446E+00, 0.2511907405802137E+00, 0.9874721307137806E-01, 0.7639943902083833E-01, 0.4105860224136690E-01, 0.2835039177122555E-01, 0.1849635761425839E-05, 0.5687744349931984E-17, 0.4733652108368680E-16, 0.8474188088642906E-16, 0.1233018482483247E+01, 0.2772075531849652E-16, 0.2588283290162890E-14, 0.3835910828290052E-14, 0.1147944957333420E+01, 0.1246926305809672E-21, 0.2331804915191085E-13, 0.1628473983494628E-13, 0.8847632334488245E+00, 0.1029638495848151E-18, 0.6869501877456999E-13, 0.5177641249986829E-13, 0.7964611162721277E+00, 0.2366582715663035E-28, 0.1931319748910825E-12, 0.1483226506162133E-12, 0.7478364459856081E+00, 0.0000000000000000E+00, 0.1833026745951331E+02, 0.1833026745951330E+02, 0.1060000000000000E+03, 0.3281179138321995E+01, 0.4716981132075472E+01, 0.1032982741787823E-11, 0.4533452491188792E+00, 0.1306947070833229E-13, 0.7648022419924529E-11, 0.9563864191611805E-11, 0.4218888103472739E+00, 0.2958228394578794E-30, 0.1901963755802408E-10, 0.2450915092704452E-10, 0.2727838365998446E+00, 0.2459678163240430E-25, 0.5533379126041796E-09, 0.3623624255644135E-09, 0.2511907405802137E+00, 0.1890110728909544E-26, 0.3358805149198491E-08, 0.5375184613165106E-08, 0.9874721307137806E-01, 0.5174927538249837E-27, 0.5300164302540724E-07, 0.8261446474891677E-07, 0.7639943902083833E-01, 0.5686866711287438E-23, 0.3075058441398368E-06, 0.1980286028193141E-06, 0.4105860224136690E-01, 0.3391723239215845E-21, 0.3233943307567427E-08, 0.7908141105983331E-09, 0.2835039177122555E-01, 0.0000000000000000E+00, 0.6263230510933575E-04, 0.3843833760247782E-04, 0.1849635761425839E-05, 0.1263270231490984E-18, 0.3749684628997549E-02, 0.9345197933294263E-02}, + info: 0, + }, + { + z: []float64{0.7197398584131909E+00, 0.8353840049537183E+00, 0.7768334206137515E+00, 0.5378835466874095E+00, 0.6112887154160760E+00, 0.6941229566444685E+00, 0.6006831303610110E+00, 0.9634869426512738E-01, 0.5491965547787625E+00, 0.2928965321959978E+00, 0.2058564636772363E+00, 0.8430652032339261E+00, 0.6514967955084195E+00, 0.9630832188959448E+00, 0.6099558369768557E+00, 0.4038812997556026E+00, 0.1286146012481256E+00, 0.1377932216741019E+00, 0.2151249629422850E+00, 0.5230096632076910E+00, 0.7097266420339532E+00, 0.5223889086485353E+00, 0.1844557902493219E+00, 0.8630886970819189E+00, 0.3143018526841452E+00, 0.3064747008129198E-02, 0.9995777893655772E+00, 0.8804003743833377E+00, 0.2437734590599224E+00, 0.5439224193002447E+00, 0.7609946860078259E+00, 0.6816222186177212E+00, 0.4213100187092527E+00, 0.5947299218072758E+00, 0.4464510683518146E+00, 0.9444991162538406E+00, 0.1663546170185037E+00, 0.9745722490509305E+00, 0.8691156687582791E-01, 0.1511122923287322E+00, 0.9099013034006386E+00, 0.2055280668016559E+00, 0.2215435147609097E+00, 0.1341458340087506E+00, 0.6974464577249216E+00, 0.9770585050570383E+00, 0.2836484389736937E-02, 0.4942205711890229E+00, 0.2476589071081227E+00, 0.9025674475802441E+00, 0.1043173067377164E+00, 0.7752297952628227E+00, 0.1045812556997563E+00, 0.6207135868564088E+00, 0.3343332589884191E+00, 0.9777410164371825E+00, 0.6919265640807399E+00, 0.8276791372331573E+00, 0.9681277631171376E+00, 0.2774385945770376E+00, 0.3660516291700039E+00, 0.1542243233614283E+00, 0.9809065840498956E+00, 0.9317468521553756E+00, 0.2342755587307467E+00, 0.1233924367977165E+00, 0.3662228319745224E+00, 0.8394462754756703E+00, 0.1257927855780998E+00, 0.9899742295380913E+00, 0.4800112259347978E+00, 0.9614338190585195E+00, 0.9605383026678687E+00, 0.7532278237974727E+00, 0.6455994058946259E+00, 0.6648840697262024E+00, 0.8792931963163917E+00, 0.7296338860815629E+00, 0.6962759488463338E+00, 0.5343477930729980E+00, 0.7488075021642351E+00, 0.8267598422017227E+00, 0.4128864062622362E-02, 0.2248794313377519E+00}, + n: 21, + zOut: []float64{0.2440396187223568E+01, 0.2429593845031884E+01, 0.2248977224883395E+01, 0.1983141106497864E+01, 0.1775047097539426E+01, 0.1685850120713433E+01, 0.1685238074648001E+01, 0.1228212776246503E+01, 0.1167582065653490E+01, 0.1163468828895948E+01, 0.9840288601088477E+00, 0.8446765744020336E+00, 0.5858419229944851E+00, 0.5828733061329966E+00, 0.4321746091262585E+00, 0.2506332278777725E+00, 0.1601952029039821E+00, 0.9519704710728188E-01, 0.5380488026634178E-01, 0.2070966044404248E-02, 0.4144953892415127E-03, 0.1577721810442024E-28, 0.2622007349295965E-13, 0.1959395597612919E-13, 0.1685238074648001E+01, 0.5298116057209151E-24, 0.4690429322435832E-13, 0.6275308499802102E-13, 0.1228212776246503E+01, 0.3786532345060857E-26, 0.6968636880972768E-12, 0.1483661956038748E-11, 0.1167582065653490E+01, 0.4135903062764930E-23, 0.1852086238235612E-10, 0.7750996975985970E-11, 0.1163468828895948E+01, 0.1171277614412583E-17, 0.1085363071939462E-09, 0.2643024434742409E-09, 0.9840288601088477E+00, 0.6878867093527223E-27, 0.2179941841968715E+02, 0.2179941841968716E+02, 0.1010000000000000E+03, 0.3140589569160998E+01, 0.4950495049504950E+01, 0.1077573597463830E-06, 0.5858419229944851E+00, 0.3627601229823987E-15, 0.8463992810044351E-06, 0.7647582718993818E-06, 0.5828733061329966E+00, 0.5798443197736525E-25, 0.5805124866712180E-06, 0.5336279095847515E-06, 0.4321746091262585E+00, 0.1164890830118439E-21, 0.3270430863981586E-06, 0.3120015969970153E-06, 0.2506332278777725E+00, 0.1344740577327136E-22, 0.6612009870063018E-06, 0.4716796838663449E-06, 0.1601952029039821E+00, 0.0000000000000000E+00, 0.1909143391170965E-04, 0.1029106625513428E-04, 0.9519704710728188E-01, 0.5127595883936577E-28, 0.3722911957200607E-04, 0.5334790194682025E-04, 0.5380488026634178E-01, 0.4916199468524512E-16, 0.8145434425645190E-04, 0.4879722252791062E-03, 0.2070966044404248E-02, 0.2051115390772406E-31, 0.1886522673573371E-02, 0.1146190938097804E-02, 0.4144953892415127E-03, 0.1134788402846185E-20, 0.5837570815253673E-02, 0.1435831510150291E-01}, + info: 0, + }, + { + z: []float64{0.4141124863190200E+00, 0.6286592513493726E+00, 0.4875442526190354E-01, 0.6631999174821102E+00, 0.1778328741285358E+00, 0.5820997881750413E+00, 0.9610329112936564E+00, 0.2860180457593013E+00, 0.2800413372286658E+00, 0.8782990052007664E+00, 0.6769848820880126E+00, 0.2361981145928655E+00, 0.1864129841856804E+00, 0.6207802268756868E-01, 0.1668832170172669E+00, 0.2136536864861034E+00, 0.4266698341219798E+00, 0.9672331991204097E-01, 0.2350195655513042E+00, 0.1297162551474343E+00, 0.9428942697229301E+00, 0.3355426683568981E+00, 0.6977568272344947E-01, 0.4926170514192555E+00, 0.6966571762613959E+00, 0.7422949877167778E+00, 0.1216493993328296E+00, 0.5414775352707472E+00, 0.4507250901570525E+00, 0.6851601412475350E+00, 0.8339584749808495E+00, 0.9321374665508209E+00, 0.7664819871766777E+00, 0.5935455015911359E+00, 0.4047285985374618E+00, 0.9996987445838635E+00, 0.1347158425141065E+00, 0.3601395592420920E+00, 0.1128763847009464E+00, 0.6316809196633902E+00, 0.1559195263655234E+00, 0.4041853050912981E+00, 0.1854167847278504E+00, 0.6852913644854558E+00, 0.6126092157077416E+00, 0.2444516268314137E+00, 0.1447238269517732E+00, 0.7179956614587130E+00, 0.8198652148251639E+00, 0.1186997025611126E+00, 0.1267596520196094E+00, 0.2863431547875360E+00, 0.9867539057590858E+00, 0.2454746550565152E+00, 0.4891318294681372E+00, 0.2969454310391295E-01, 0.2349636207332649E+00, 0.4537731552146703E+00, 0.2883801124165087E+00, 0.7150664117598651E+00, 0.4359050919721921E+00, 0.6116081525473241E+00, 0.5619840590438748E+00, 0.3431726287099235E+00, 0.7715898362788249E+00, 0.4981359837313185E+00, 0.4537925078699018E+00, 0.6956466175473529E+00, 0.1814680828887681E+00, 0.4413903687143481E+00, 0.4367593306147978E+00, 0.5875066776157845E-01, 0.3688522862246468E+00, 0.4308468783440871E+00, 0.1986553761412286E+00, 0.3949957841484223E+00, 0.2468986938324821E+00, 0.6216444107315144E-01, 0.9076510210089642E+00, 0.5197394332656491E+00, 0.8460559187475114E-01, 0.3959477165848089E+00, 0.1014864219123556E+00, 0.4789226780612066E-01}, + n: 21, + zOut: []float64{0.2746085040517442E+01, 0.2006646947029628E+01, 0.1843368381126182E+01, 0.1738309804669461E+01, 0.1678478075610122E+01, 0.1408432532104903E+01, 0.1219097982435216E+01, 0.1121569511965291E+01, 0.9315294884679637E+00, 0.7914377647612258E+00, 0.7334412101899261E+00, 0.6113376828240070E+00, 0.4134386595159317E+00, 0.3303980566325673E+00, 0.2866331058299493E+00, 0.2287206720574312E+00, 0.1408981800627584E+00, 0.6649497607659796E-01, 0.5733628497886722E-01, 0.1387598234001070E-02, 0.2497701489633820E-04, 0.3487740233155725E-22, 0.3361270559917294E-05, 0.1214091727263821E-05, 0.1219097982435216E+01, 0.2843433355651033E-23, 0.3877657623657789E-06, 0.2861458561047538E-06, 0.1121569511965291E+01, 0.1501849799666580E-22, 0.7980776610337536E-07, 0.1296132789777516E-06, 0.9315294884679637E+00, 0.1397279453391396E-14, 0.3797866386428551E-06, 0.5462183171930727E-06, 0.7914377647612258E+00, 0.1231982124821006E-21, 0.6463973892160826E-06, 0.4555968092429713E-06, 0.7334412101899261E+00, 0.9423416829408119E-25, 0.1835506693210437E+02, 0.1835506693210436E+02, 0.9800000000000000E+02, 0.2884353741496599E+01, 0.2040816326530612E+01, 0.6355562713716383E-07, 0.4134386595159317E+00, 0.4284860196510039E-21, 0.4931868922851139E-05, 0.2760082849901006E-05, 0.3303980566325673E+00, 0.1448288531514775E-16, 0.4631299886341806E-05, 0.9149811670123540E-05, 0.2866331058299493E+00, 0.1558000287811498E-28, 0.1337090019087612E-05, 0.8008074996380075E-06, 0.2287206720574312E+00, 0.2366582715663035E-29, 0.4303808308110317E-06, 0.3181248709867330E-06, 0.1408981800627584E+00, 0.2443697032165075E-19, 0.2973006759321362E-05, 0.5017304713868616E-05, 0.6649497607659796E-01, 0.1131941655598205E-16, 0.8328041136745409E-04, 0.8552508571764750E-04, 0.5733628497886722E-01, 0.9398173280441046E-25, 0.5097763200650848E-04, 0.5644224660768206E-04, 0.1387598234001070E-02, 0.8888394955180400E-22, 0.1868721561136477E-03, 0.1091351925463373E-03, 0.2497701489633820E-04, 0.0000000000000000E+00, 0.1020791029288490E-01, 0.2791888375404797E-02}, + info: 0, + }, + { + z: []float64{0.2396228092919251E+00, 0.6434601049058037E+00, 0.5488667726527494E+00, 0.1843504645657519E+00, 0.4269001369847240E+00, 0.6276093013166625E+00, 0.8724336393628729E-01, 0.5371039952903035E+00, 0.8447460457667564E+00, 0.4094766929502263E+00, 0.2031514124499976E+00, 0.8271428312997948E+00, 0.9658284302973903E+00, 0.3777353969048113E+00, 0.6471334022587341E+00, 0.6777435175679861E+00, 0.4456890557292859E+00, 0.1720826572683752E+00, 0.3520207432901141E+00, 0.3291396508341311E+00, 0.7468262262373744E+00, 0.2715104496960554E+00, 0.5612917863396235E+00, 0.1324429469286776E+00, 0.7983766064014711E+00, 0.2059599586019641E+00, 0.2655510256425775E-01, 0.1962390264484870E+00, 0.7845246896371560E-02, 0.8217737559711210E+00, 0.9444498218704492E+00, 0.4679957695831033E+00, 0.1135918053039552E+00, 0.1604948252571132E+00, 0.8452381101613837E+00, 0.8537070814716049E+00, 0.3013932596816266E+00, 0.2511715406702125E+00, 0.2008647638036438E+00, 0.2607897573444329E+00, 0.2571050910078490E+00, 0.6286174024463315E+00, 0.4739701849723611E+00, 0.8698947534844018E+00, 0.6486079589595961E+00, 0.8894321904301987E+00, 0.7952475840185558E+00, 0.8801661721215410E+00, 0.2147272194381030E+00, 0.9518356646476019E+00, 0.7191152289414877E+00, 0.1106524971173308E+00, 0.9574587230734148E+00, 0.6469474230679395E+00, 0.5818260757443584E+00, 0.1292202837075540E-01, 0.2761722913438078E+00, 0.8004535925585585E+00, 0.3278973855590038E+00, 0.5794037438664289E+00, 0.2396155443104175E-01, 0.6699048475753794E+00, 0.1814492937128086E+00, 0.2866184936222242E+00, 0.6584557212506269E+00, 0.5889651227775431E+00, 0.6369766519060738E-01, 0.1328193529598596E+00, 0.7416631417262871E+00, 0.5003318278706693E+00, 0.3144077296395376E-01, 0.9907393156403193E+00, 0.3423696594914594E-02, 0.6992922072850826E+00, 0.7590519617064543E+00, 0.2542182514116359E+00, 0.3314657184555089E+00, 0.5728659684019645E+00, 0.9915854796414423E+00, 0.4896749730105238E+00, 0.5611369720796141E+00, 0.6064142215043516E+00, 0.8567590164766914E-01, 0.2581731932678185E+00}, + n: 21, + zOut: []float64{0.2319327880258489E+01, 0.2079713994229665E+01, 0.1953873370330741E+01, 0.1755147049127663E+01, 0.1569664109844580E+01, 0.1497177879850755E+01, 0.1442939549198070E+01, 0.1142654640257259E+01, 0.1037259380018118E+01, 0.7336163063097807E+00, 0.6300572204242147E+00, 0.3966542874116493E+00, 0.3925821156107781E+00, 0.2721798695257625E+00, 0.2365431978248397E+00, 0.2044065204974935E+00, 0.1570073942488483E+00, 0.8918832674569614E-01, 0.5938710196407761E-01, 0.3241742658191688E-02, 0.4778146591607052E-04, 0.1325286320771300E-27, 0.1485620696270319E-14, 0.4653485276256090E-14, 0.1442939549198070E+01, 0.1846131417899111E-22, 0.1162592678154001E-11, 0.3263011919854044E-11, 0.1142654640257259E+01, 0.4412642697382792E-11, 0.1735169830505648E-08, 0.3333560963091213E-08, 0.1037259380018118E+01, 0.1055565179678919E-18, 0.1940309609380032E-07, 0.3465529731850831E-07, 0.7336163063097807E+00, 0.4440642298320086E-11, 0.3810071749579748E-06, 0.5916980508399715E-06, 0.6300572204242147E+00, 0.4658681208910640E-20, 0.1797266971780259E+02, 0.1797266971780259E+02, 0.1110000000000000E+03, 0.3253968253968254E+01, 0.3603603603603604E+01, 0.2492194730770069E-13, 0.3925821156107781E+00, 0.0000000000000000E+00, 0.7667233942003248E-12, 0.2416678934089916E-12, 0.2721798695257625E+00, 0.2051915459060795E-16, 0.1487877135020801E-08, 0.6143545671036994E-08, 0.2365431978248397E+00, 0.1972152263052530E-29, 0.1960096418178738E-05, 0.2274829676605902E-05, 0.2044065204974935E+00, 0.2021903259098794E-21, 0.8745843979356665E-06, 0.9251106153042376E-06, 0.1570073942488483E+00, 0.5482898835648120E-25, 0.7118492322907369E-04, 0.3316595178521346E-03, 0.8918832674569614E-01, 0.1022725463125710E-19, 0.2167108979032774E-02, 0.1228336641518804E-02, 0.5938710196407761E-01, 0.1994240368398718E-26, 0.2711464061500906E-02, 0.2561834534417173E-02, 0.3241742658191688E-02, 0.1814380082008327E-27, 0.4237092909216320E-02, 0.4420407214578293E-02, 0.4778146591607052E-04, 0.2596519942803954E-20, 0.1820843269063370E-02, 0.8929397931439835E-02}, + info: 0, + }, + { + z: []float64{0.4704013808869884E+00, 0.8133248937317098E+00, 0.7246209022332254E+00, 0.9930301346620946E+00, 0.6565279241713462E-01, 0.7480498761899035E-01, 0.8311943018468732E+00, 0.4127487814312358E+00, 0.6620288516904083E+00, 0.2540390589975015E+00, 0.4830377447593585E+00, 0.6124023244542695E+00, 0.6830062885714996E+00, 0.4006497306883100E+00, 0.2108017907398356E+00, 0.9099126499549155E+00, 0.4756780627224959E+00, 0.8563186613679700E+00, 0.9168447467108382E+00, 0.5153963449488133E+00, 0.7188966629304918E+00, 0.2875525393671987E+00, 0.6200986280097742E-01, 0.3765186242141257E+00, 0.2589923271177115E+00, 0.5404093081826918E+00, 0.5343437371907505E+00, 0.3104227497255196E-01, 0.4221838478889377E+00, 0.4233113354732956E+00, 0.6486058235731677E+00, 0.1590032665029245E+00, 0.3877113621801469E+00, 0.6038849620024899E+00, 0.5400341407425849E+00, 0.7060013907006117E+00, 0.1173345165878200E+00, 0.8548311704210352E+00, 0.5804532700087333E+00, 0.5231399784962363E+00, 0.4754841524148748E+00, 0.3395282932287647E-01, 0.7668594432348432E+00, 0.8184682560752043E+00, 0.5633264054575460E-01, 0.2127176392631261E+00, 0.7432372685121402E+00, 0.3098453278874418E+00, 0.1150335122169536E+00, 0.8681635561145716E+00, 0.3593935949259885E+00, 0.9085822737263088E+00, 0.2122810259380176E+00, 0.3589456483065394E+00, 0.9437026007300053E-01, 0.6518875210051764E+00, 0.9046367728621729E+00, 0.7638617707854546E+00, 0.8924521343092110E+00, 0.8353112965912926E+00, 0.5076189975461921E+00, 0.4955137299922637E+00, 0.5041148053921253E+00, 0.7686114107944846E+00, 0.3833696141187980E+00, 0.9181102072361824E-01, 0.9260679284685853E+00, 0.7081687340916837E+00, 0.8312629527805896E+00, 0.8010881636433624E+00, 0.5891143654107377E+00, 0.8149927954305255E+00, 0.7192672792238343E+00, 0.9981622901025261E+00, 0.9368513325443091E+00, 0.6909941993236977E+00, 0.7208744872845105E+00, 0.6334330703247726E+00, 0.8856108044732016E+00, 0.7612967011342276E+00, 0.6840498257884192E+00, 0.8627400929877541E+00, 0.2970500386847904E+00, 0.9828991929119790E+00}, + n: 21, + zOut: []float64{0.2548749189884266E+01, 0.2318283655447516E+01, 0.1949991272828373E+01, 0.1903113092077109E+01, 0.1681173723989745E+01, 0.1621144658162279E+01, 0.1435953736019784E+01, 0.1373215273744876E+01, 0.1276544145324249E+01, 0.8508650942792525E+00, 0.7433578075251207E+00, 0.7333566617981635E+00, 0.6327824956484905E+00, 0.5146506379994326E+00, 0.4497218333883862E+00, 0.2736876649003249E+00, 0.2262999758546705E+00, 0.6320618886076086E-01, 0.1413547856395308E-01, 0.6182735080657475E-02, 0.1223662826415605E-02, 0.9844984097158227E-26, 0.2664250906052687E-13, 0.8143635875649387E-14, 0.1435953736019784E+01, 0.7237830359838992E-24, 0.1147364015889613E-09, 0.4819137169184198E-10, 0.1373215273744876E+01, 0.5490471900338242E-27, 0.1654936529088367E-07, 0.7460880307437913E-08, 0.1276544145324249E+01, 0.2958228394578794E-30, 0.1455672577071588E-05, 0.7169454013791148E-06, 0.8508650942792525E+00, 0.4041314959719700E-19, 0.1917383253612269E-05, 0.1657209462004936E-05, 0.7433578075251207E+00, 0.2357464745776125E-22, 0.2061763898420382E+02, 0.2061763898420383E+02, 0.9600000000000000E+02, 0.2888888888888889E+01, 0.3125000000000000E+01, 0.6718966036888534E-06, 0.6327824956484905E+00, 0.1006441314168352E-20, 0.4252254757420258E-06, 0.3750418335727261E-06, 0.5146506379994326E+00, 0.1125208173090593E-20, 0.1634173128014842E-06, 0.1777130114194832E-06, 0.4497218333883862E+00, 0.1397861524051633E-26, 0.1373153840978587E-06, 0.1424351942740530E-06, 0.2736876649003249E+00, 0.3055476705078142E-15, 0.2530372171390620E-06, 0.3073674645773779E-06, 0.2262999758546705E+00, 0.3987473575125276E-15, 0.5814400581048744E-06, 0.7370753629310487E-06, 0.6320618886076086E-01, 0.9597492304117215E-21, 0.2453687283764395E-05, 0.3193610655869065E-05, 0.1413547856395308E-01, 0.8528167491936360E-20, 0.7231103044220720E-05, 0.9769896858142881E-05, 0.6182735080657475E-02, 0.0000000000000000E+00, 0.3039337033448658E-04, 0.5367078032707280E-04, 0.1223662826415605E-02, 0.6617444900424221E-23, 0.7353916438463039E-03, 0.2144171525794732E-02}, + info: 0, + }, + { + z: []float64{0.9714680453643365E-01, 0.6357804703219754E+00, 0.6664990519488578E-01, 0.1729636879767130E+00, 0.4638342338705743E+00, 0.4390808892462035E+00, 0.8041041328438946E+00, 0.4288731182982508E+00, 0.7624625505229141E+00, 0.7083386603826051E+00, 0.2464792096944004E+00, 0.9011775040224685E+00, 0.6339539510596026E-01, 0.1795036824346197E-01, 0.9473751738931280E+00, 0.4886196718733559E+00, 0.3845982510172906E+00, 0.8175566437299375E-01, 0.4796454941504319E+00, 0.1995303497008669E+00, 0.3542217290845850E+00, 0.4313075601907782E+00, 0.9062634832132850E+00, 0.9362490171108290E+00, 0.7454458344912314E+00, 0.9678028365928690E+00, 0.8785588729275070E+00, 0.2582842558253936E+00, 0.7937433110799214E+00, 0.7912406502001545E-01, 0.1813501620770241E-01, 0.3340784700607168E+00, 0.3348119644971841E+00, 0.5042866134297835E+00, 0.3808798817625770E+00, 0.8932448815066745E+00, 0.2612469692343123E+00, 0.4943911382967600E+00, 0.7396437014435053E+00, 0.6180267747680381E+00, 0.6768529193184074E+00, 0.7346572400466492E+00, 0.8658232798365260E+00, 0.6590888814314796E+00, 0.9020629495832085E+00, 0.2719526227756762E+00, 0.9337960905099231E+00, 0.1402012445044727E+00, 0.3363383773836534E+00, 0.4741712787560632E+00, 0.1270352327896518E-02, 0.2317652069389444E+00, 0.9583986396877475E+00, 0.8857657675309066E+00, 0.5564654172742324E+00, 0.3373121694331064E+00, 0.1866413892025005E+00, 0.3829716065530064E+00, 0.6660176769447556E+00, 0.9140619394089379E+00, 0.4126532961354976E+00, 0.9883322088463480E+00, 0.1678362296131076E+00, 0.1246866166129172E+00, 0.5083959276848560E+00, 0.4743484764552197E+00, 0.1561141239638767E+00, 0.4867628897662705E+00, 0.8068909470080686E+00, 0.9878597697456749E+00, 0.8535449450676436E-01, 0.9609706407601909E+00, 0.7015171470525342E+00, 0.4808513401395343E+00, 0.4421870922261545E+00, 0.2476919441028158E-01, 0.2417065613871903E+00, 0.1174043678151601E+00, 0.4259626380136439E-02, 0.2614829171642307E+00, 0.5973781466265196E+00, 0.3195524674053074E-01, 0.4778949570977242E+00, 0.2741401812748340E+00}, + n: 21, + zOut: []float64{0.2956562879292357E+01, 0.2160920112738185E+01, 0.2057048821491083E+01, 0.1826665062315388E+01, 0.1626476426276149E+01, 0.1617659828407750E+01, 0.1458559932420392E+01, 0.1037845007643388E+01, 0.9436387491729998E+00, 0.8889042931978449E+00, 0.8147110102488896E+00, 0.7938854029224469E+00, 0.5240642869032099E+00, 0.4281570616174346E+00, 0.4032231719469492E+00, 0.2134769254146812E+00, 0.1570954054223686E+00, 0.5771888278451791E-01, 0.2771650645038780E-01, 0.1168397530048623E-02, 0.8626671344136174E-03, 0.6837796509826355E-18, 0.5416843762303492E-12, 0.3045298824248355E-12, 0.1458559932420392E+01, 0.8473754517266856E-24, 0.4783112378014045E-11, 0.8163747631331082E-11, 0.1037845007643388E+01, 0.8077935669463161E-27, 0.2442833758035109E-10, 0.3576901446935589E-10, 0.9436387491729998E+00, 0.1292469707114106E-25, 0.1060154010453575E-09, 0.7148292157772074E-10, 0.8889042931978449E+00, 0.5995342879679690E-28, 0.2265830666026058E-09, 0.3413067902462323E-09, 0.8147110102488896E+00, 0.6874131484520357E-19, 0.1999636083133089E+02, 0.1999636083133089E+02, 0.1000000000000000E+03, 0.3002267573696145E+01, 0.2000000000000000E+01, 0.2441378744031031E-06, 0.5240642869032099E+00, 0.2169367489357782E-29, 0.9564347597274963E-06, 0.8629398155870994E-06, 0.4281570616174346E+00, 0.1533177238774536E-16, 0.2198723423439569E-05, 0.1852641299824983E-05, 0.4032231719469492E+00, 0.1742814620686677E-24, 0.6898774546312495E-05, 0.1242988026413374E-04, 0.2134769254146812E+00, 0.1303198215425112E-25, 0.3054946518379762E-04, 0.2458010895625246E-04, 0.1570954054223686E+00, 0.2480178686014861E-25, 0.5573684427056079E-04, 0.2879079609909993E-04, 0.5771888278451791E-01, 0.0000000000000000E+00, 0.4895501114079361E-04, 0.6615663653270374E-04, 0.2771650645038780E-01, 0.6559433690090112E-18, 0.2090848897194263E-03, 0.3843856621792604E-03, 0.1168397530048623E-02, 0.0000000000000000E+00, 0.2396113765895983E-02, 0.4353699886144585E-02, 0.8626671344136174E-03, 0.1420984816841217E-20, 0.3572874909786609E-04, 0.2591037812233495E-05}, + info: 0, + }, + { + z: []float64{0.7761482897976135E-01, 0.7690133527529974E-01, 0.8589697242168557E+00, 0.5718901484414876E+00, 0.8450349347421171E-01, 0.5688250545090190E+00, 0.6202247495663940E+00, 0.7388100008042665E+00, 0.9890328265375476E+00, 0.2969659976080158E+00, 0.5442392738534707E-01, 0.9562602329262000E+00, 0.8530135563879812E+00, 0.5471012261519459E-01, 0.9710076793297340E+00, 0.4869447961696205E+00, 0.4659851368281548E+00, 0.7647605444900396E-01, 0.7872766307526106E+00, 0.3237029299700311E+00, 0.7194522935712468E+00, 0.7270865543961295E+00, 0.5183429612108851E+00, 0.3145688411100903E+00, 0.9096514649777033E+00, 0.7816253592835525E+00, 0.4809049584349555E+00, 0.2052154618933422E-01, 0.1481963756328628E+00, 0.8742358520807045E+00, 0.4565878430880338E+00, 0.1977913919695908E+00, 0.6526813957349178E+00, 0.8032154703264597E+00, 0.2356108621359847E+00, 0.4857415898450358E+00, 0.2259727396620309E+00, 0.1176413330041139E+00, 0.8335507369731385E+00, 0.4539477133958770E+00, 0.8910876835374724E+00, 0.1559757847548392E+00, 0.1885199219441583E+00, 0.1520953639100613E+00, 0.6035948595957944E+00, 0.9286538294716984E+00, 0.9676298024186124E+00, 0.1209629819848071E+00, 0.1660874781174386E+00, 0.8622065054293394E+00, 0.7485077140876945E+00, 0.9420716698171637E+00, 0.2904751962009996E+00, 0.2180437045655230E+00, 0.6692025851955981E+00, 0.9258369042460884E+00, 0.6243742234586596E+00, 0.6760203577391158E+00, 0.2199572443863818E-02, 0.5981650670220221E+00, 0.8252506688545779E+00, 0.9433813762695346E+00, 0.5320093960532474E+00, 0.3846966829839934E+00, 0.6727780061271659E+00, 0.4937802596181958E+00, 0.1177802539787526E+00, 0.2963448754612064E-01, 0.2479547713122239E+00, 0.2694003173993550E+00, 0.8186090816580105E+00, 0.2886041049393229E-01, 0.7384561600560133E+00, 0.8345282295575730E+00, 0.1740871089016751E+00, 0.7946006936544379E+00, 0.5640836203667244E+00, 0.4951346622832815E+00, 0.4981407974176422E+00, 0.2513094341381288E+00, 0.4316077257561814E+00, 0.1685190107506288E+00, 0.3264570829830372E+00, 0.1676643753771256E-01}, + n: 21, + zOut: []float64{0.2309990065237698E+01, 0.2261037149894265E+01, 0.1946075797700671E+01, 0.1868880050926239E+01, 0.1838164096767709E+01, 0.1792848619787804E+01, 0.1601503570675395E+01, 0.1526383850720226E+01, 0.1395433670210245E+01, 0.1010109387319946E+01, 0.8644978203099237E+00, 0.7632668975571170E+00, 0.4552388959212355E+00, 0.4364144823342648E+00, 0.2696980874891977E+00, 0.1302983706884531E+00, 0.1278582769210706E+00, 0.7956979307866878E-01, 0.7389266586143965E-01, 0.8102308371415692E-02, 0.2690335013870282E-02, 0.5752609692135112E-13, 0.2842400234743069E-06, 0.1045980487121886E-05, 0.1601503570675395E+01, 0.1668093198756260E-18, 0.5190756964721459E-05, 0.2367180586416983E-05, 0.1526383850720226E+01, 0.1262177448353619E-27, 0.1974011051185169E-03, 0.4728862593194215E-03, 0.1395433670210245E+01, 0.2337388813815525E-19, 0.1632969150852556E-06, 0.4026698297028720E-06, 0.1010109387319946E+01, 0.3802651360818291E-21, 0.1380334146666910E-03, 0.1568641113059460E-03, 0.8644978203099237E+00, 0.2788260408793746E-19, 0.2076195419278686E+02, 0.2076195419278686E+02, 0.1070000000000000E+03, 0.3183673469387755E+01, 0.2803738317757009E+01, 0.1273578837393323E-04, 0.4552388959212355E+00, 0.1016579123433529E-20, 0.9426551662020599E-04, 0.5179870206653002E-04, 0.4364144823342648E+00, 0.7336406418555410E-28, 0.1112142557098828E-05, 0.1460057881679474E-05, 0.2696980874891977E+00, 0.8909623382378835E-18, 0.3232451044433717E-03, 0.3229988347563871E-03, 0.1302983706884531E+00, 0.0000000000000000E+00, 0.2867336104451064E-03, 0.2890982620847502E-03, 0.1278582769210706E+00, 0.6875938841518755E-23, 0.2127348925826359E-06, 0.9655734242129450E-07, 0.7956979307866878E-01, 0.3291208348307372E-17, 0.5717743824937758E-07, 0.2183606505996598E-06, 0.7389266586143965E-01, 0.7801771243763389E-24, 0.1012732311499954E-04, 0.2863554462185051E-05, 0.8102308371415692E-02, 0.5719241562852336E-29, 0.6292939995324734E-04, 0.3382281194073554E-04, 0.2690335013870282E-02, 0.4951522129891247E-25, 0.3008856418189283E-03, 0.2691027365699742E-03}, + info: 0, + }, + { + z: []float64{0.1834451937168287E+00, 0.4501020603239488E+00, 0.9673873583575473E+00, 0.2207688184907047E+00, 0.4205773270263516E+00, 0.6767264871143511E+00, 0.2493506785870784E+00, 0.7809638015955807E+00, 0.8297195492174936E+00, 0.1617611869044215E+00, 0.9206032300762146E+00, 0.1914715918877316E+00, 0.7976268296797403E+00, 0.9839522457816396E+00, 0.8841932579084628E+00, 0.6979540605797908E+00, 0.8049859576106227E+00, 0.8117504351099887E+00, 0.3842107296635322E+00, 0.6368881208030270E+00, 0.2369530469547876E+00, 0.8005533377467571E+00, 0.7105152962140180E+00, 0.5356376472112734E-02, 0.2192323464228777E+00, 0.8992715082939398E+00, 0.5988055508193698E+00, 0.4081645962203215E+00, 0.1002944447483383E+00, 0.1052431248059748E+00, 0.5730054733733171E+00, 0.2386396328544268E+00, 0.6503058109411604E+00, 0.9019164849722401E+00, 0.4702244241412763E+00, 0.5759947448793571E+00, 0.7588959717342861E+00, 0.4126392985506339E+00, 0.9987799941641187E+00, 0.5598172962702971E+00, 0.2151524348024290E+00, 0.7511708041336773E-01, 0.1539602741757972E+00, 0.4584191954304165E+00, 0.8937659116858414E+00, 0.6186897030318780E+00, 0.6386630452844105E+00, 0.9151803046984296E+00, 0.3614526997644965E+00, 0.9143967867261915E+00, 0.1523575506386343E+00, 0.9745493424336691E+00, 0.4149640117372425E+00, 0.7418302113477876E+00, 0.3041602774831942E-01, 0.4852660298208696E+00, 0.9115870107661288E+00, 0.9024516441581734E+00, 0.9201550825657324E+00, 0.5200815862126855E+00, 0.7353784634707106E+00, 0.8264932398040087E+00, 0.7035838297463828E+00, 0.6738634069153341E+00, 0.7657166064092835E-01, 0.4678396966074577E+00, 0.9927685693816569E+00, 0.5845157970225999E+00, 0.5638346985777254E+00, 0.5850492500516753E+00, 0.3856054034589584E+00, 0.8134648529141429E+00, 0.4174766661784889E+00, 0.3336151222017159E+00, 0.5355530597844248E+00, 0.9274106499154580E+00, 0.7442750408730826E+00, 0.2948331405701974E+00, 0.5696937454611060E+00, 0.3104181547964658E+00, 0.4694844160987418E+00, 0.1538578615150018E+00, 0.5969883537795497E+00, 0.3873507919637014E+00}, + n: 21, + zOut: []float64{0.2914952592069403E+01, 0.2353566179964282E+01, 0.2062119351173516E+01, 0.1965819938313762E+01, 0.1942714243081098E+01, 0.1812271492844174E+01, 0.1712144141310849E+01, 0.1666892005264074E+01, 0.1208030687686805E+01, 0.1159871012571561E+01, 0.9581193432281622E+00, 0.7738358894690665E+00, 0.7454032361827709E+00, 0.3901865930581417E+00, 0.3240765847275939E+00, 0.2173673669709887E+00, 0.1778074780703053E+00, 0.5660863840842725E-01, 0.3038731391621440E-01, 0.1466323002394464E-01, 0.7362797481955845E-02, 0.1496427221292385E-15, 0.2798385737764086E-17, 0.6348906733176861E-18, 0.1712144141310849E+01, 0.2625127144183791E-23, 0.5842516095868784E-15, 0.1699577922475928E-15, 0.1666892005264074E+01, 0.2934562567422164E-27, 0.7233314809955462E-13, 0.2286859678494404E-12, 0.1208030687686805E+01, 0.8467561517631538E-12, 0.2143114506868008E-08, 0.4305471816838367E-08, 0.1159871012571561E+01, 0.4930380657631324E-31, 0.3270528389239616E-07, 0.6410715811146478E-07, 0.9581193432281622E+00, 0.8911174733768286E-23, 0.2249420011581710E+02, 0.2249420011581710E+02, 0.1050000000000000E+03, 0.3197278911564626E+01, 0.2857142857142857E+01, 0.6896683202589802E-07, 0.7454032361827709E+00, 0.3255610023185390E-23, 0.5315428740895598E-04, 0.2875762635390457E-03, 0.3901865930581417E+00, 0.4610239445276015E-22, 0.9146669702187219E-04, 0.4183987855699404E-04, 0.3240765847275939E+00, 0.4688433862556419E-23, 0.8204008598914952E-05, 0.1523341313649621E-04, 0.2173673669709887E+00, 0.4570683409889788E-20, 0.9316307389873694E-05, 0.2741587710667867E-05, 0.1778074780703053E+00, 0.3706159570762342E-17, 0.9605798472890332E-04, 0.3099752510959849E-03, 0.5660863840842725E-01, 0.5638682600030866E-16, 0.1627758109301002E-02, 0.5977814903797443E-03, 0.3038731391621440E-01, 0.7161878634670464E-18, 0.4935537640644100E-05, 0.4281293465082162E-05, 0.1466323002394464E-01, 0.9343665470806783E-19, 0.1384059308707374E-05, 0.7139695062761456E-05, 0.7362797481955845E-02, 0.1252221392641006E-22, 0.1398979151771859E-02, 0.1830558814226920E-02}, + info: 0, + }, + { + z: []float64{0.1901253435444810E+00, 0.1005117877448146E+00, 0.7431497892893435E-02, 0.4180244733822649E+00, 0.5723993917742813E+00, 0.5092276894610764E+00, 0.6914570054828403E+00, 0.6343440208263138E+00, 0.9714240100252226E+00, 0.9708780190932921E+00, 0.7346948492781401E+00, 0.9261658900466149E+00, 0.6500321763704298E-01, 0.2101988980308164E+00, 0.2569765082490436E+00, 0.6872855071573251E+00, 0.7393915007490531E+00, 0.5293076476804583E+00, 0.5736721160165409E+00, 0.6249080544922647E+00, 0.1805969142240157E+00, 0.6235867578362418E+00, 0.3156395994838945E+00, 0.6768110107418109E+00, 0.5036038244498190E+00, 0.2096885591435443E+00, 0.2471056170621776E+00, 0.4420201221816504E+00, 0.5954916898507195E+00, 0.6849385183400085E+00, 0.6865376402638398E+00, 0.5015659601935997E+00, 0.9646916309223035E+00, 0.1976274617660123E+00, 0.6173831761654865E+00, 0.9161785290588952E+00, 0.8303766381148641E+00, 0.4163407208236638E+00, 0.2406183750735502E-01, 0.9033217043220854E+00, 0.3435327703530300E-01, 0.4851293431546745E+00, 0.1308952665690980E+00, 0.1639949900839996E+00, 0.6530528840204755E+00, 0.4007776795656349E+00, 0.6520732821596675E-01, 0.2482448577499247E+00, 0.6417548063561368E+00, 0.6287927677318972E+00, 0.2491821746122613E+00, 0.1309766085785375E+00, 0.1799023200797401E+00, 0.6166520678731939E+00, 0.4068347418426869E+00, 0.8022499378251485E+00, 0.2090643045880468E+00, 0.9552039287477454E-01, 0.3405285833145572E+00, 0.9010017729234689E+00, 0.8087026571264999E-01, 0.6784547103017031E+00, 0.5001579210546183E+00, 0.9044563563261202E+00, 0.6248337185292430E-01, 0.7231216956646513E+00, 0.3330924448715603E+00, 0.5906941805835393E+00, 0.6144619726434308E-01, 0.4494963607638514E-01, 0.5817524116985039E+00, 0.4323943825883398E+00, 0.9871518362913079E-01, 0.9577530955877981E+00, 0.7720928198042669E+00, 0.1473259710759589E+00, 0.7227644962870149E+00, 0.9964485210410867E+00, 0.3235582385765219E+00, 0.5984954533580267E-01, 0.1531719633524309E-01, 0.8969070444410814E+00, 0.8320043732823273E+00, 0.7541623800831910E+00}, + n: 21, + zOut: []float64{0.2943190889471759E+01, 0.2404733889291933E+01, 0.2164120218254414E+01, 0.2101040443717650E+01, 0.1828309865967689E+01, 0.1647179310188885E+01, 0.1393092850251358E+01, 0.1217421086377993E+01, 0.1157068329170861E+01, 0.9693609911235493E+00, 0.7556225164779018E+00, 0.6051010122910800E+00, 0.5244111548905432E+00, 0.4204021043595824E+00, 0.3294230503008973E+00, 0.2905705444026201E+00, 0.1318042053167392E+00, 0.6748792703931331E-01, 0.3115549452672914E-01, 0.3850968595106850E-02, 0.1766035472385010E-05, 0.2996366283941816E-12, 0.8018633237482923E-17, 0.2249911398990393E-16, 0.1393092850251358E+01, 0.8588781736260544E-19, 0.1768526861021460E-14, 0.8068659675231548E-15, 0.1217421086377993E+01, 0.2465190328815662E-30, 0.6841595655394777E-14, 0.1344694857995563E-13, 0.1157068329170861E+01, 0.2714422906896024E-19, 0.9771202940807984E-13, 0.1895423136689650E-12, 0.9693609911235493E+00, 0.1093011646009194E-15, 0.5148224565067754E-11, 0.9904113235317579E-11, 0.7556225164779018E+00, 0.6752649348691861E-27, 0.2098534861805207E+02, 0.2098534861805208E+02, 0.9600000000000000E+02, 0.2832199546485261E+01, 0.2083333333333333E+01, 0.3437245789676428E-09, 0.5244111548905432E+00, 0.2665011951551765E-23, 0.6566411319039389E-08, 0.3635282930812000E-08, 0.4204021043595824E+00, 0.1249353725478346E-22, 0.6690013285699780E-07, 0.1185995569029548E-06, 0.3294230503008973E+00, 0.3250106929510569E-26, 0.6264577969246473E-06, 0.1086745069147475E-05, 0.2905705444026201E+00, 0.1121066009627684E-24, 0.5553814969713904E-05, 0.9554866377781883E-05, 0.1318042053167392E+00, 0.1875595688253478E-25, 0.3215548179944659E-03, 0.4036498498040293E-03, 0.6748792703931331E-01, 0.4043956767801041E-20, 0.1191830515693705E-02, 0.1851908589351717E-02, 0.3115549452672914E-01, 0.1124126789939942E-28, 0.7898349055483677E-03, 0.3617649115749287E-02, 0.3850968595106850E-02, 0.4455486392688275E-26, 0.3971779475237804E-01, 0.1814591379891354E-01, 0.1766035472385010E-05, 0.2780981219403279E-20, 0.1014029004767683E-01, 0.8718057102094371E-02}, + info: 0, + }, + { + z: []float64{0.3437994630115073E+00, 0.2969584004763312E+00, 0.5428789456218400E+00, 0.3643219910857877E+00, 0.8842011736515154E-01, 0.4426793535323088E+00, 0.9851327949196382E+00, 0.9928836193844874E+00, 0.9294888334528270E+00, 0.5131906939013953E+00, 0.8372743749579292E-01, 0.3799113781856175E+00, 0.9980979619320958E+00, 0.1940068951405882E+00, 0.1265916571930514E+00, 0.7533120158726621E+00, 0.7604310151358937E+00, 0.9521608240404056E-01, 0.6048411980078113E+00, 0.8887307551694945E-01, 0.9109406880842844E+00, 0.9457532858494480E+00, 0.7192031611135805E+00, 0.5051759890546635E+00, 0.1927673350758418E+00, 0.6784576615085791E+00, 0.4582307655806892E+00, 0.4110913566635671E+00, 0.5843861752552199E+00, 0.1849014446101248E+00, 0.5286425989283670E+00, 0.9425316584065953E+00, 0.9757360470900053E+00, 0.4697986765545260E+00, 0.5423082602059015E-01, 0.4516134263086808E+00, 0.2022962345269688E+00, 0.4899666677522230E-01, 0.9657583521001409E+00, 0.7147044884479304E+00, 0.8698989147298346E+00, 0.1620630683580001E+00, 0.4917083507892124E+00, 0.6587971895356357E+00, 0.2830046270176211E+00, 0.8907428232631098E-01, 0.3385480253038764E-01, 0.3808208973559474E+00, 0.6301790073720519E+00, 0.7283330529106518E+00, 0.8754045015579843E+00, 0.5691786300850922E+00, 0.2221459247333947E+00, 0.3807253530058278E+00, 0.5099681617674874E+00, 0.8815981352292609E+00, 0.2670679959789202E-02, 0.3061419069919761E+00, 0.9088634553510815E+00, 0.3137439308670030E+00, 0.3256630871489109E+00, 0.7397175549546020E-01, 0.8600700672393357E+00, 0.2944165267259768E-01, 0.1962740610392520E+00, 0.7223088666910011E+00, 0.1555262415199788E+00, 0.7683934132272936E+00, 0.9837306979871404E+00, 0.4307236017454147E+00, 0.2763099157748476E+00, 0.5623054633156477E-01, 0.1414438705425911E+00, 0.3910643421231946E+00, 0.3414855836828583E+00, 0.4833767934540261E+00, 0.1874948602631823E+00, 0.6456680649630069E+00, 0.5377739930676261E+00, 0.4911199998049517E+00, 0.3925147326457343E+00, 0.1205990368593943E+00, 0.6208170182205421E+00, 0.4308681300066786E+00}, + n: 21, + zOut: []float64{0.2838978926644850E+01, 0.2478331275466363E+01, 0.2456585262660691E+01, 0.2180185738821122E+01, 0.1712066680562540E+01, 0.1602701074250422E+01, 0.1503969746560551E+01, 0.1233768461187729E+01, 0.9787455830966086E+00, 0.9668289373592873E+00, 0.7729605529095109E+00, 0.7035556930615693E+00, 0.5295938697567051E+00, 0.4165425267136870E+00, 0.3781386605204551E+00, 0.3701077812928417E+00, 0.1575477292510020E+00, 0.7328369731218511E-01, 0.3974472017556452E-01, 0.4256064253578745E-02, 0.1985700463370783E-02, 0.0000000000000000E+00, 0.2182718854229073E-04, 0.3091215918753839E-04, 0.1503969746560551E+01, 0.7889046064910921E-15, 0.8525655623819580E-10, 0.5987167574554257E-09, 0.1233768461187729E+01, 0.1850899338648654E-19, 0.6965867087478826E-06, 0.6532556049979120E-06, 0.9787455830966086E+00, 0.3101927297073854E-24, 0.3608646891594891E-06, 0.2907657476508735E-06, 0.9668289373592873E+00, 0.5936688180990121E-20, 0.1421522625242826E-07, 0.7063390122609291E-08, 0.7729605529095109E+00, 0.1231338578304599E-17, 0.2139987868232064E+02, 0.2139987868232063E+02, 0.9600000000000000E+02, 0.2854875283446712E+01, 0.2083333333333333E+01, 0.2575545978160743E-06, 0.5295938697567051E+00, 0.8537368260663878E-24, 0.6647760383095535E-05, 0.6726768703723720E-05, 0.4165425267136870E+00, 0.5898327163094257E-18, 0.6007815560144262E-05, 0.6070984870789135E-05, 0.3781386605204551E+00, 0.1932242212135588E-23, 0.5780348596252855E-05, 0.5727260717649887E-05, 0.3701077812928417E+00, 0.2291245128765917E-16, 0.5589406660782675E-05, 0.5617175435749363E-05, 0.1575477292510020E+00, 0.3855952104720306E-26, 0.8404567502440466E-05, 0.1060626986994499E-04, 0.7328369731218511E-01, 0.1176980470589750E-26, 0.3402042835087641E-05, 0.5518338211116594E-05, 0.3974472017556452E-01, 0.3697785493223493E-30, 0.6423930978115149E-05, 0.5690659965930955E-05, 0.4256064253578745E-02, 0.1813010266067178E-20, 0.3330330670135602E-05, 0.3509207052336586E-05, 0.1985700463370783E-02, 0.9911627066431288E-23, 0.2656536456367949E-04, 0.9644853918428974E-05}, + info: 0, + }, + { + z: []float64{0.6087347824331316E+00, 0.2344592930815549E+00, 0.1839180152431182E+00, 0.8946895357068063E-01, 0.3789275576065679E+00, 0.1028144130339237E-01, 0.8432962228323871E+00, 0.5720035990048252E+00, 0.9674750777949459E+00, 0.1387850858951470E+00, 0.1049983295079311E+00, 0.1869597635484084E+00, 0.2049847474830355E+00, 0.9353902309354832E+00, 0.7711597045807418E+00, 0.6677931698783810E+00, 0.5710020050743191E+00, 0.7559352115290241E+00, 0.8799700817290574E+00, 0.2989086447618220E+00, 0.7223221852829088E+00, 0.9172044263776469E-01, 0.8222766733565161E+00, 0.4357755436106698E+00, 0.3174399370719186E+00, 0.3716323007311311E+00, 0.5710261889832198E+00, 0.5875728000816982E-01, 0.1970825867540514E+00, 0.7514821290356389E+00, 0.4768968814440278E+00, 0.1414806690779697E+00, 0.5126469713172739E+00, 0.2618595999903317E-01, 0.3414455658478163E+00, 0.7845736413672471E+00, 0.3193997824316201E+00, 0.5244207174429636E+00, 0.7114985438553419E+00, 0.6380953409710879E+00, 0.5110544105167975E+00, 0.6987353947091863E+00, 0.2359552404464268E+00, 0.1389779414569779E+00, 0.4283565484470430E+00, 0.5978343235372734E+00, 0.8941068622870674E+00, 0.9993918591572127E+00, 0.9276104816334276E+00, 0.6840640077048410E+00, 0.1906252952212643E+00, 0.3896055694019390E+00, 0.8889540838698040E-01, 0.6972017776398595E+00, 0.7403854978121883E+00, 0.9624319129844994E-01, 0.7107468555423346E-01, 0.2167351328914763E+00, 0.5250363507339506E-01, 0.3012298012035964E+00, 0.7467053513110199E+00, 0.6311877906561809E+00, 0.6465457722939830E+00, 0.9462483307457270E-01, 0.1615629644808589E+00, 0.3714392567485900E+00, 0.5909086992570731E+00, 0.2147078824711308E+00, 0.8083150503324107E+00, 0.1136496291628873E+00, 0.3556622878263437E+00, 0.1687673308056986E+00, 0.2663369573375586E+00, 0.9992292880074174E+00, 0.4743706799728067E+00, 0.3784791276003248E+00, 0.9641428139214289E+00, 0.4526980047510465E-01, 0.5291384859598749E+00, 0.9114927597067145E+00, 0.2015740390806801E+00, 0.9111109510473957E+00, 0.4797378470164849E+00, 0.4344842342843944E+00}, + n: 21, + zOut: []float64{0.2535248843080872E+01, 0.2027297538476471E+01, 0.1999341423958793E+01, 0.1905819580237666E+01, 0.1558994176508815E+01, 0.1443542425236611E+01, 0.1321312714967014E+01, 0.1044341128979687E+01, 0.9175998827905956E+00, 0.8543653487373744E+00, 0.6128068085852322E+00, 0.5723484802692980E+00, 0.4865842293721045E+00, 0.4743009418296827E+00, 0.4424121716041568E+00, 0.2157744105271115E+00, 0.1401155020588904E+00, 0.9545054691199920E-01, 0.4846378139764250E-01, 0.2597131641839770E-01, 0.9574417588705024E-02, 0.7983827718913915E-23, 0.5897957913656464E-08, 0.4905965358471980E-08, 0.1321312714967014E+01, 0.1437620113674772E-24, 0.2330664696165742E-08, 0.2036082149427908E-08, 0.1044341128979687E+01, 0.7099748146989106E-29, 0.1191493821660667E-08, 0.1294122655697948E-08, 0.9175998827905956E+00, 0.7069460558567906E-16, 0.2320495180901029E-08, 0.3242686959161780E-08, 0.8543653487373744E+00, 0.3414430154917050E-13, 0.2143028595220802E-07, 0.3181347787023606E-07, 0.6128068085852322E+00, 0.0000000000000000E+00, 0.1873166566953712E+02, 0.1873166566953712E+02, 0.1040000000000000E+03, 0.3224489795918367E+01, 0.2884615384615385E+01, 0.3533200143891392E-06, 0.4865842293721045E+00, 0.4552522969733916E-17, 0.1776353409716398E-09, 0.6419018055060889E-09, 0.4743009418296827E+00, 0.4679164786798698E-18, 0.4782181507340309E-06, 0.1264406900548246E-06, 0.4424121716041568E+00, 0.1728289684559415E-20, 0.3046857378867568E-04, 0.2182730305393890E-04, 0.2157744105271115E+00, 0.1120182485413837E-27, 0.4003877877583194E-03, 0.2588513428463001E-03, 0.1401155020588904E+00, 0.0000000000000000E+00, 0.6916990427934659E-04, 0.5501406364660823E-04, 0.9545054691199920E-01, 0.6162975822039155E-32, 0.1059944134272042E-03, 0.1421052287262650E-03, 0.4846378139764250E-01, 0.1755514705909767E-17, 0.4499204819889415E-04, 0.2567010249779503E-03, 0.2597131641839770E-01, 0.1143848312570467E-28, 0.5289175880660015E-04, 0.5437725505075631E-04, 0.9574417588705024E-02, 0.3697785493223493E-31, 0.2606391166909807E-05, 0.6294847321319143E-06}, + info: 0, + }, + { + z: []float64{0.3257261020965838E+00, 0.9499222527145429E+00, 0.3597416524070001E+00, 0.7608369220069154E+00, 0.3348964244425234E-01, 0.9918240230913730E+00, 0.2435073049094116E-01, 0.2927090414647138E-01, 0.2724578324033788E+00, 0.7486167980650003E+00, 0.2854897136111678E+00, 0.2267361867398041E+00, 0.4294380831801550E+00, 0.7722184192395405E+00, 0.5889718788171796E+00, 0.5201154937785833E+00, 0.1341644467607439E-01, 0.3251983707424297E+00, 0.3712514383296180E+00, 0.8346822920283823E+00, 0.2613611110008908E+00, 0.7377020224374462E+00, 0.4290238209924468E-01, 0.8422463567888154E+00, 0.1390406385354674E+00, 0.8899155813346852E+00, 0.5366293959824918E+00, 0.1311808378334547E+00, 0.5127829646320820E+00, 0.3806825827063995E+00, 0.9008244723505014E+00, 0.8397173164045483E+00, 0.8005434668537068E+00, 0.4188784622408616E+00, 0.4815341947551696E+00, 0.2004130034689415E+00, 0.9620560381224039E+00, 0.9936712626034268E+00, 0.7996240982628953E+00, 0.9066259300527590E+00, 0.7119745510778175E+00, 0.4009593231138309E+00, 0.7503038869147766E+00, 0.2307657656692345E+00, 0.5796381959344894E+00, 0.4564585857276309E+00, 0.3087632483431468E-01, 0.4925813444884515E+00, 0.2548189626174928E+00, 0.7548007003619551E+00, 0.2595357873879023E+00, 0.2576161595637174E+00, 0.6530834734960895E+00, 0.9659056802808288E+00, 0.4073417244577716E+00, 0.7973054858347279E+00, 0.1098542135402614E-03, 0.5270152208809449E+00, 0.9503221531609122E+00, 0.3389760481404548E+00, 0.2936463197963648E+00, 0.1532837593240226E+00, 0.7039965742744211E+00, 0.1538522429841973E+00, 0.4565500206514618E+00, 0.4890306322657354E+00, 0.7406911389536464E+00, 0.4609110724077861E+00, 0.3010957214922741E+00, 0.4706875322819619E+00, 0.9245411658881026E+00, 0.1225486958523536E-02, 0.7513538867599376E+00, 0.7480092012350148E+00, 0.1668544624863488E+00, 0.6027497133760584E+00, 0.4060848284780354E+00, 0.7777661676033926E+00, 0.5476587806685121E+00, 0.3318235867866506E+00, 0.4865355710680780E+00, 0.9789804028805801E+00, 0.6449091593541079E-01, 0.3386899175207851E+00}, + n: 21, + zOut: []float64{0.2916446272919928E+01, 0.2518523111789073E+01, 0.1881620740030630E+01, 0.1802535552376618E+01, 0.1705712498790935E+01, 0.1630934300031556E+01, 0.1493206464268041E+01, 0.1289863129801601E+01, 0.1141879970494692E+01, 0.1064939765404915E+01, 0.9148995873510519E+00, 0.6667419164223021E+00, 0.5793746811807822E+00, 0.5763823737203533E+00, 0.5577209455074719E+00, 0.2258972104173268E+00, 0.1775772659782911E+00, 0.1224839196229167E+00, 0.7643325286481288E-01, 0.1088888144792382E-01, 0.1013218159024319E-07, 0.1529626957613473E-16, 0.4760904670371191E-26, 0.1685698503770275E-25, 0.1493206464268041E+01, 0.4740164255731978E-15, 0.6203207773025231E-22, 0.1697026618649852E-21, 0.1289863129801601E+01, 0.1555744028694447E-17, 0.2220966892754199E-18, 0.8352563633635413E-19, 0.1141879970494692E+01, 0.8283039504820624E-29, 0.9137114046044313E-17, 0.2186983724354431E-16, 0.1064939765404915E+01, 0.7560947786617519E-24, 0.1476623491156538E-14, 0.6521525514986541E-15, 0.9148995873510519E+00, 0.3956572890903056E-23, 0.2135406185055340E+02, 0.2135406185055340E+02, 0.1110000000000000E+03, 0.3462585034013606E+01, 0.7207207207207207E+01, 0.3107640874581820E-11, 0.5793746811807822E+00, 0.0000000000000000E+00, 0.5611258671513064E-10, 0.1000932867794445E-09, 0.5763823737203533E+00, 0.2935229715008717E-19, 0.5869279282596528E-09, 0.3232392517855140E-09, 0.5577209455074719E+00, 0.7161080495560552E-17, 0.6771347567635994E-08, 0.1273942735381484E-07, 0.2258972104173268E+00, 0.2531843062293473E-19, 0.3233128964696781E-05, 0.1839431244951091E-05, 0.1775772659782911E+00, 0.1025519176787315E-28, 0.1632093348006395E-04, 0.1394944946706296E-04, 0.1224839196229167E+00, 0.3147671031182890E-20, 0.4090539240175316E-04, 0.3499438731982919E-04, 0.7643325286481288E-01, 0.4418024966021139E-23, 0.7751221398283570E-04, 0.6522231732461535E-04, 0.1088888144792382E-01, 0.0000000000000000E+00, 0.1168516922729128E-02, 0.6798960389683572E-03, 0.1013218159024319E-07, 0.8311253061997563E-15, 0.2266806408535672E-02, 0.8228900118596701E-02}, + info: 0, + }, + { + z: []float64{0.9013837094783728E-01, 0.4093071371456288E+00, 0.7563443593246222E-01, 0.6047712831067179E+00, 0.3616734158068488E+00, 0.3179352368154293E+00, 0.4877726790168605E+00, 0.7283754332956183E+00, 0.6564126870433257E+00, 0.7426267273836333E+00, 0.9575970808689874E+00, 0.2328163542816707E+00, 0.9804488839127946E+00, 0.5880329556580101E+00, 0.6720101508999355E+00, 0.3029641470022006E+00, 0.9176198736416905E+00, 0.9273523415722473E-01, 0.7356501689695268E+00, 0.3516482504433937E+00, 0.5613309946663773E+00, 0.8064085547776983E+00, 0.2421909924481950E+00, 0.4321291285180304E+00, 0.7195726435630079E+00, 0.4201959590716675E-01, 0.6971840239025084E-03, 0.6931587576362976E+00, 0.4512374813335629E+00, 0.9105433528826555E+00, 0.8233348499205092E+00, 0.5270028711667427E+00, 0.5092902528068642E+00, 0.6527825111058926E+00, 0.8077059946216197E+00, 0.5037249441803524E+00, 0.7474524841642615E+00, 0.8361353459662745E+00, 0.6675800963161582E+00, 0.5004244151247563E+00, 0.7976263900002633E+00, 0.1983499023889042E+00, 0.7522366994446783E+00, 0.3654861843844912E+00, 0.8247542543249066E+00, 0.9124235995852386E+00, 0.1818459043196227E+00, 0.8196813052173683E+00, 0.5538880208895494E+00, 0.9080443570480472E+00, 0.2981632101337024E+00, 0.6044133722200155E+00, 0.1883025355842233E+00, 0.2434431972046255E+00, 0.3420561860884004E+00, 0.3312086041097358E+00, 0.8261796050670067E-01, 0.2597483126975232E+00, 0.9037350022806145E+00, 0.5691251256015616E+00, 0.5433137600205407E-01, 0.2948423088781353E+00, 0.7125818959241866E+00, 0.1168360183447441E+00, 0.2271931321361120E-01, 0.5832011197836875E+00, 0.4321285977614958E+00, 0.9214755199664483E+00, 0.2929460789941122E+00, 0.9911839954873096E+00, 0.9352897353900299E+00, 0.6549195608155846E+00, 0.7733376794047198E-01, 0.7345459966842849E+00, 0.2997108680399072E+00, 0.6923968300089707E+00, 0.9895794156524929E+00, 0.2694202749089550E+00, 0.2419924375765692E-01, 0.2728256718882756E+00, 0.7688978378093437E+00, 0.6794051971520565E-01, 0.8211384369868754E+00, 0.7581877817293103E-01}, + n: 21, + zOut: []float64{0.2587082763537058E+01, 0.2518438946693926E+01, 0.2381638511714923E+01, 0.2064758819607097E+01, 0.1861546331198453E+01, 0.1823771413694203E+01, 0.1462413605342042E+01, 0.1295483717305927E+01, 0.1204792654692795E+01, 0.1153126691944095E+01, 0.9646786889507554E+00, 0.8876075724637406E+00, 0.7328920239265601E+00, 0.5128961040525114E+00, 0.4187721082034697E+00, 0.3198505150609477E+00, 0.1661143074789019E+00, 0.1249876230738883E+00, 0.5554047196429147E-01, 0.2079344839078052E-02, 0.4713171572265143E-04, 0.1874281408120013E-19, 0.2104034717604745E-09, 0.2619972849686678E-09, 0.1462413605342042E+01, 0.9259545558536950E-18, 0.2890370685025388E-10, 0.3242632456342165E-10, 0.1295483717305927E+01, 0.1323488980084844E-22, 0.2279224462592833E-10, 0.2555931367214743E-10, 0.1204792654692795E+01, 0.2978738778114541E-26, 0.7485181957332586E-10, 0.4566030880095840E-10, 0.1153126691944095E+01, 0.6733803272339514E-21, 0.2633277318950464E-08, 0.1440235383519861E-08, 0.9646786889507554E+00, 0.7499216124683276E-17, 0.2253851934746039E+02, 0.2253851934746038E+02, 0.1040000000000000E+03, 0.3111111111111111E+01, 0.5769230769230769E+01, 0.2633869415622400E-06, 0.7328920239265601E+00, 0.6980417424693642E-13, 0.1603044445805627E-06, 0.1255532606981617E-06, 0.5128961040525114E+00, 0.6981404369947554E-21, 0.8484909168369356E-07, 0.7367232980661418E-07, 0.4187721082034697E+00, 0.2465190328815662E-30, 0.1470967366725541E-06, 0.2274394647752198E-06, 0.3198505150609477E+00, 0.9424343740971753E-25, 0.8932721831570202E-05, 0.5259727349591482E-05, 0.1661143074789019E+00, 0.1697763391846713E-18, 0.4712327641645974E-05, 0.7305995006514358E-05, 0.1249876230738883E+00, 0.9266645908481002E-19, 0.3596318120009657E-04, 0.2001742175196116E-04, 0.5554047196429147E-01, 0.5985976337495067E-16, 0.4811066675748340E-03, 0.3416912105856511E-03, 0.2079344839078052E-02, 0.8697917232094458E-24, 0.5710266423841766E-02, 0.2981491759065521E-02, 0.4713171572265143E-04, 0.0000000000000000E+00, 0.3288287603570621E-02, 0.1038987759212308E-02}, + info: 0, + }, + { + z: []float64{0.3453921918700114E+00, 0.8256584009865165E+00, 0.5027306146870630E+00, 0.5014619412470180E+00, 0.9910264683396075E+00, 0.7385152238869899E+00, 0.9936695869989243E+00, 0.6206355260490602E+00, 0.6835539321104728E+00, 0.3987727521414011E+00, 0.2155721742355131E+00, 0.8212295891891395E+00, 0.7021626430853991E+00, 0.3753314442932942E+00, 0.2575710525141791E+00, 0.6551328468445583E+00, 0.3738398426943970E+00, 0.8805730558289802E+00, 0.6848909798416613E+00, 0.5520069040756137E-01, 0.8817067703079440E+00, 0.3238117712584516E+00, 0.1001825089826291E+00, 0.7369585910327309E+00, 0.7601318359400422E+00, 0.4312449588193277E+00, 0.4932891154015395E+00, 0.1099211239093930E+00, 0.5764729343614433E+00, 0.1286539516629047E+00, 0.5170000684627285E+00, 0.4006756226519864E+00, 0.5897018197291505E+00, 0.3774659871747915E+00, 0.4211183018281148E+00, 0.6260997273722376E+00, 0.7810234892670644E+00, 0.9934154489086249E+00, 0.5116204079460294E+00, 0.7948452919719275E+00, 0.5998807734230309E+00, 0.4868691071952969E-01, 0.7977221292955683E+00, 0.4907992372099745E+00, 0.4337635562764541E-01, 0.4865658084478622E+00, 0.7887982210525304E+00, 0.6218441262679077E+00, 0.1807768964120138E-01, 0.7341707407508724E+00, 0.4738048273586776E+00, 0.9324751870816922E+00, 0.4643019354540665E+00, 0.2401905271601299E+00, 0.6072757133952530E+00, 0.6257046236339610E+00, 0.1662572295885112E-01, 0.3360107439465247E+00, 0.5925152832499899E+00, 0.4206234399601897E+00, 0.1828405120649758E+00, 0.8923354266778754E+00, 0.6211472795399554E+00, 0.3215240169291051E+00, 0.3967102459115966E+00, 0.4376502563326659E+00, 0.4571232280132043E-01, 0.2973405440159681E+00, 0.1737124961451384E+00, 0.1123665207380958E+00, 0.8069742345287393E+00, 0.5302931605046994E+00, 0.2541675285808478E+00, 0.9099997182043015E+00, 0.7562530283478575E-01, 0.2521110146593245E+00, 0.2525672524245413E+00, 0.8930826245328107E+00, 0.8545394186204489E+00, 0.1856025965008533E+00, 0.8541401621096930E+00, 0.7406868214039234E+00, 0.5851270108744718E+00, 0.7554853143122133E+00}, + n: 21, + zOut: []float64{0.2818806710434786E+01, 0.2596766072486540E+01, 0.2041400548479265E+01, 0.1919012388179902E+01, 0.1900863080415201E+01, 0.1778136512482050E+01, 0.1649297429111022E+01, 0.1375943901620400E+01, 0.1287933944237744E+01, 0.1246950647018126E+01, 0.9346701076388835E+00, 0.8619836761278706E+00, 0.6928534822715838E+00, 0.5816592049742084E+00, 0.4759893592204403E+00, 0.2537953742738920E+00, 0.2205935192530503E+00, 0.8350022078832350E-01, 0.3307087507037688E-01, 0.2105652896299196E-01, 0.3857874617179747E-02, 0.9177981866196648E-17, 0.6043035417783778E-14, 0.7682115486038763E-14, 0.1649297429111022E+01, 0.9047287949798740E-23, 0.2120842457393041E-14, 0.2617862539054627E-14, 0.1375943901620400E+01, 0.1499552906513639E-17, 0.3376573256769321E-15, 0.2886563968474245E-15, 0.1287933944237744E+01, 0.1966621906344823E-17, 0.2937881411718043E-15, 0.4577311861870994E-15, 0.1246950647018126E+01, 0.2742371736879744E-17, 0.2913637797754287E-14, 0.1483948533056680E-14, 0.9346701076388835E+00, 0.5800058106323822E-18, 0.2277814145766384E+02, 0.2277814145766384E+02, 0.9800000000000000E+02, 0.2997732426303855E+01, 0.1020408163265306E+01, 0.9030119244814722E-12, 0.6928534822715838E+00, 0.1471303281095442E-16, 0.2634125396797654E-10, 0.5071585384120369E-10, 0.5816592049742084E+00, 0.1365675999118616E-25, 0.3358753759221612E-09, 0.6258446588335648E-09, 0.4759893592204403E+00, 0.1479114197289397E-30, 0.3734630956704811E-08, 0.6716634735981551E-08, 0.2537953742738920E+00, 0.7467396771867359E-25, 0.3072344915986320E-06, 0.1829961043616119E-06, 0.2205935192530503E+00, 0.4437342591868191E-30, 0.2385309167517414E-05, 0.3978543929472447E-05, 0.8350022078832350E-01, 0.2436129622029919E-19, 0.4589207629691226E-04, 0.2836221395611648E-04, 0.3307087507037688E-01, 0.3081487911019577E-32, 0.1362072635971665E-04, 0.2978962617014088E-04, 0.2105652896299196E-01, 0.2711709361697228E-30, 0.2444625596237189E-05, 0.7827983423195974E-05, 0.3857874617179747E-02, 0.8925769947935872E-20, 0.9826965253502863E-02, 0.1259209175531780E-01}, + info: 0, + }, + { + z: []float64{0.9560856702670685E+00, 0.5885863857778361E+00, 0.8071258175651005E+00, 0.5175476341605639E+00, 0.1941426739297742E+00, 0.8451490614471896E+00, 0.9052305950784733E+00, 0.6791526261185319E+00, 0.6480230038264980E+00, 0.8438040949137990E+00, 0.3034844043967853E+00, 0.3090582723248356E+00, 0.3282769832503399E+00, 0.7489751201458807E+00, 0.6672021557248126E+00, 0.1697989591956236E+00, 0.5723860504781838E+00, 0.3660621222567975E+00, 0.1505291330148173E-01, 0.7436839329892437E+00, 0.3679212455376497E+00, 0.5305714072096270E+00, 0.5792221354999488E+00, 0.3031533452885045E+00, 0.9514596930492207E+00, 0.3278419583960311E+00, 0.5742176036064726E+00, 0.7216680447710266E+00, 0.6608941225668634E+00, 0.3887216422692293E+00, 0.6952172825541724E+00, 0.8072929471269218E+00, 0.8776672848787970E-01, 0.9363773133978057E+00, 0.3470717327786855E+00, 0.9438495003134180E+00, 0.5511880105145929E+00, 0.5826637033513504E+00, 0.3416802173197317E+00, 0.5650234571673005E+00, 0.2927187699119284E+00, 0.4936451925034285E+00, 0.7496439056333554E+00, 0.8462697295115110E+00, 0.4661250827466905E+00, 0.3912590593193351E+00, 0.9140228064649625E+00, 0.4016314378444454E+00, 0.7105479239000361E+00, 0.3751330850058705E+00, 0.7309804928539319E+00, 0.1378037023247644E+00, 0.7527056268407295E+00, 0.1640478774378548E+00, 0.6030857470066908E+00, 0.7427119073248016E+00, 0.9996405952923426E-01, 0.7406467144237725E+00, 0.3762498316380406E+00, 0.8295145255291534E+00, 0.8322845800948830E-01, 0.6101670185797291E+00, 0.9451596878306588E+00, 0.1176379504958335E+00, 0.7940514845464750E+00, 0.3068100097277620E+00, 0.2371282369406802E+00, 0.2163781309135768E+00, 0.4705542393165623E+00, 0.4003463805482307E+00, 0.2731285781388088E+00, 0.8862626881898287E+00, 0.5854390777280626E+00, 0.4661955367614972E+00, 0.1993415035442425E+00, 0.9213995968359628E+00, 0.1542739762296447E+00, 0.9419076789558214E+00, 0.9611493561784724E+00, 0.7596360150269755E+00, 0.6590873675145426E+00, 0.3894853423829039E+00, 0.8407621320868611E+00, 0.4517123559923821E+00}, + n: 21, + zOut: []float64{0.2583735261373388E+01, 0.2239759728480232E+01, 0.2157858012928955E+01, 0.2146305201359927E+01, 0.1853050031878152E+01, 0.1788497392649839E+01, 0.1558387970436693E+01, 0.1494017846927041E+01, 0.1323723239351723E+01, 0.1188003233397794E+01, 0.9827022795744828E+00, 0.8335582164080391E+00, 0.7854672559750093E+00, 0.6236176061997519E+00, 0.4677974993044671E+00, 0.2968385185647548E+00, 0.2304456569541352E+00, 0.1793008998018142E+00, 0.2471364396669566E-01, 0.7537422761275628E-02, 0.3241997301555496E-04, 0.1184063810429910E-21, 0.1281976731077423E-10, 0.2849227344309828E-10, 0.1558387970436693E+01, 0.3001369155282220E-19, 0.2940080271049715E-08, 0.1685793775386140E-08, 0.1494017846927041E+01, 0.1696366490587264E-24, 0.4557030850938984E-08, 0.5166797185591864E-08, 0.1323723239351723E+01, 0.1862197338326049E-12, 0.1908610209474282E-08, 0.1816527091730617E-08, 0.1188003233397794E+01, 0.1613415991578665E-17, 0.2801618631477443E-08, 0.2177314380835442E-08, 0.9827022795744828E+00, 0.1073695634537585E-17, 0.2276534933826718E+02, 0.2276534933826718E+02, 0.1060000000000000E+03, 0.3113378684807256E+01, 0.3773584905660377E+01, 0.2107018980320373E-07, 0.7854672559750093E+00, 0.7395570986446986E-31, 0.5134101120680572E-07, 0.6949862017183880E-07, 0.6236176061997519E+00, 0.1700003115737185E-12, 0.4917011909790346E-06, 0.6444201346122313E-06, 0.4677974993044671E+00, 0.1676329423594650E-29, 0.2178752696080751E-05, 0.1697685142168825E-05, 0.2968385185647548E+00, 0.2903323170704433E-20, 0.9062193610690628E-05, 0.7062135859641892E-05, 0.2304456569541352E+00, 0.9860761315262648E-30, 0.1460945060339096E-04, 0.1904220434906198E-04, 0.1793008998018142E+00, 0.4606947686490709E-27, 0.4451684144215141E-07, 0.1728984935219646E-06, 0.2471364396669566E-01, 0.1407327854914285E-26, 0.1942342839475662E-02, 0.3052712133602924E-02, 0.7537422761275628E-02, 0.9865964111678957E-20, 0.3214451590395407E-02, 0.5215635567340069E-02, 0.3241997301555496E-04, 0.0000000000000000E+00, 0.1184307710713820E-01, 0.9427403294935964E-02}, + info: 0, + }, + { + z: []float64{0.4101594051788160E+00, 0.1002974419660251E+00, 0.8434067081152193E+00, 0.7258916354493068E+00, 0.9256853341957688E+00, 0.8379265467529036E+00, 0.1564408324797836E+00, 0.8292039738515364E+00, 0.3771190822561328E+00, 0.8236097732630416E+00, 0.3320638300046872E+00, 0.6850750205938005E-01, 0.5616647045816037E+00, 0.8305938719521835E+00, 0.6006351465721590E+00, 0.8469146468608777E+00, 0.1179160781320751E+00, 0.6975716721259332E+00, 0.3237957597653003E+00, 0.1297318227605904E-01, 0.8416519209661123E+00, 0.2623987624579764E+00, 0.3323289069826861E+00, 0.9848995259497869E+00, 0.1295798367899781E-01, 0.4196318718239949E+00, 0.8791346827157692E+00, 0.9015205418757779E+00, 0.2557984197164971E+00, 0.7295221077613672E+00, 0.8796719157178668E+00, 0.6983240767110626E+00, 0.6461186804049626E+00, 0.5003600760145155E-01, 0.3411701822058120E+00, 0.6026846298507913E+00, 0.4649210011845201E+00, 0.4169632595817018E+00, 0.9745024564197420E+00, 0.9159749674174896E+00, 0.3798779762430529E+00, 0.6757581567027395E+00, 0.1501600637708167E+00, 0.8841295845033917E+00, 0.1700642059156726E+00, 0.5745602516925833E+00, 0.7146078194346678E+00, 0.7876321314233041E+00, 0.3623958693011297E+00, 0.1316504845867333E+00, 0.6150819295249010E+00, 0.9948396700221377E+00, 0.2186788175334711E+00, 0.3433450548510013E+00, 0.4434886569716980E+00, 0.6596978167473024E+00, 0.7067569387667516E+00, 0.2710992196058543E+00, 0.2531644393448058E+00, 0.6179743389634106E+00, 0.6395694224823617E+00, 0.6233992467844496E-01, 0.9270082862838847E-01, 0.6813409948026068E+00, 0.8489230752840353E+00, 0.4248777519526148E+00, 0.9258241367507150E+00, 0.7591306919901064E-01, 0.1337231221457533E+00, 0.6673452115706187E+00, 0.3161361894802919E+00, 0.9287930266484576E+00, 0.9211411715651807E+00, 0.7110889130885073E+00, 0.6783920645346327E+00, 0.5798290672446252E+00, 0.6003988035906362E+00, 0.8338909998640337E+00, 0.1150264810560550E+00, 0.8268177524919460E+00, 0.2868686997384918E+00, 0.7734675037869032E+00, 0.8495624932870276E+00, 0.7382167415731139E+00}, + n: 21, + zOut: []float64{0.2565771617602568E+01, 0.2464815559540473E+01, 0.2377249642737961E+01, 0.2182027799722737E+01, 0.1994511663794419E+01, 0.1777930797653110E+01, 0.1532836111328556E+01, 0.1298104160091711E+01, 0.1162548328490141E+01, 0.1031426069242260E+01, 0.9067767207978197E+00, 0.7702116437984168E+00, 0.7023507576840374E+00, 0.5846573732521254E+00, 0.3836750731694669E+00, 0.3732780616075560E+00, 0.2146097506115993E+00, 0.5462411591703480E-01, 0.3208967690429450E-01, 0.2788258306628742E-02, 0.1838228532938987E-03, 0.1703684557466520E-17, 0.8886730161731292E-14, 0.1725592004801531E-13, 0.1532836111328556E+01, 0.2310659810285515E-15, 0.8778995686431983E-12, 0.1396745951735637E-11, 0.1298104160091711E+01, 0.0000000000000000E+00, 0.8497749401208094E-11, 0.5925398902948847E-11, 0.1162548328490141E+01, 0.1292469707114106E-25, 0.1515360700076446E-10, 0.2085752134421418E-10, 0.1031426069242260E+01, 0.1195331315767287E-17, 0.8898419915788489E-10, 0.1186621585503233E-09, 0.9067767207978197E+00, 0.1888339631531495E-12, 0.2241246700510621E+02, 0.2241246700510621E+02, 0.1190000000000000E+03, 0.3539682539682540E+01, 0.7563025210084033E+01, 0.2596357213906324E-08, 0.7023507576840374E+00, 0.1416275483756143E-17, 0.5106480833143134E-08, 0.6438584684288567E-08, 0.5846573732521254E+00, 0.1317619996636992E-15, 0.1896058302301025E-07, 0.2367797858508706E-07, 0.3836750731694669E+00, 0.9199951564453634E-11, 0.8967796171107713E-07, 0.1296821709728121E-06, 0.3732780616075560E+00, 0.1615587133892578E-26, 0.3088999981101691E-06, 0.2343043411729366E-06, 0.2146097506115993E+00, 0.2055968734232262E-28, 0.9134179982896841E-05, 0.6280501592969192E-05, 0.5462411591703480E-01, 0.1901142159808155E-23, 0.3768301572228235E-05, 0.8777513601148953E-05, 0.3208967690429450E-01, 0.1479114197289397E-29, 0.1428515450408294E-03, 0.5208612044311805E-04, 0.2788258306628742E-02, 0.2057124874537592E-17, 0.2063479623178836E-02, 0.3566698154744510E-02, 0.1838228532938987E-03, 0.3273772756667199E-28, 0.8538542526496483E-03, 0.1571849612061994E-03}, + info: 0, + }, + { + z: []float64{0.1589037341524596E+00, 0.1455226073481288E+00, 0.1938395273812957E+00, 0.1962691615573132E+00, 0.1687822326883440E+00, 0.6650981615477494E+00, 0.8270615916362424E+00, 0.1710502783654970E+00, 0.2206713720159043E+00, 0.4369721197399372E+00, 0.9301314325299896E+00, 0.5722466234411457E+00, 0.1135089451836189E+00, 0.5846068541971138E+00, 0.9216025315561343E+00, 0.9066267701445474E+00, 0.5584279552920539E+00, 0.4343925455049338E+00, 0.9858452060735702E+00, 0.6563046209578444E+00, 0.7077011175365495E+00, 0.4947310926689127E+00, 0.7385820400647596E+00, 0.5937728681009750E+00, 0.9762402194896037E+00, 0.3450302019452143E+00, 0.3805099852593911E+00, 0.7529397554746390E+00, 0.7330092480109731E+00, 0.3330086450808912E+00, 0.9038518043983117E+00, 0.6574079221280790E+00, 0.2509077957372493E+00, 0.6249580721461656E+00, 0.2757992349681960E+00, 0.5001238277403597E+00, 0.9621194298806066E+00, 0.3061711826567661E+00, 0.1119838022409911E+00, 0.2976298035182879E+00, 0.6363137835930621E-01, 0.4930031667447814E+00, 0.1865676338649569E-01, 0.4250211458984191E+00, 0.1095501188334868E+00, 0.2763357459722963E+00, 0.7075737347301593E+00, 0.5363987747039417E+00, 0.3986581101260644E+00, 0.2692140175173962E+00, 0.5588052030209328E+00, 0.5539805437492590E+00, 0.6882419411200217E+00, 0.6525011142322502E+00, 0.2351213214810641E+00, 0.4862287407564582E+00, 0.9494457572755843E-01, 0.2775605674126462E+00, 0.6088686305117397E-01, 0.1602712446759722E+00, 0.6726078044316741E-01, 0.1771280849255007E+00, 0.9403546682132294E+00, 0.1182787468569617E+00, 0.6084837514797026E+00, 0.4725411123129805E+00, 0.2891346904124859E-01, 0.3056197468639377E-01, 0.3597281640784106E+00, 0.3047108802830497E+00, 0.9462624965987684E+00, 0.6795048656132132E+00, 0.3142878274718968E+00, 0.2255775176392846E+00, 0.5741746909618360E+00, 0.6125119194512041E+00, 0.8636232492271716E+00, 0.5595270150362563E-01, 0.4894380312911951E+00, 0.2945948126181174E+00, 0.4782956027971728E+00, 0.1100404727801326E+00, 0.2692801555328298E+00, 0.4567347029351195E+00}, + n: 21, + zOut: []float64{0.2662663085210597E+01, 0.2404979690430721E+01, 0.2214109781172517E+01, 0.2010332580463078E+01, 0.1879931283999763E+01, 0.1831239586461748E+01, 0.1664682288858752E+01, 0.1512516241203824E+01, 0.1081258277181201E+01, 0.8471473481460485E+00, 0.6221178288483303E+00, 0.5493156782308360E+00, 0.4496825320738197E+00, 0.3768653101376996E+00, 0.2833465507506064E+00, 0.2013980912694376E+00, 0.1418989984144841E+00, 0.7096946004385345E-01, 0.4542843847166723E-01, 0.6747056508451696E-02, 0.1343590842619022E-02, 0.4141519752410312E-28, 0.4845145585707669E-05, 0.3343357997526164E-05, 0.1664682288858752E+01, 0.8527270841077049E-25, 0.1655046287299363E-04, 0.2231546414257453E-04, 0.1512516241203824E+01, 0.5692210911982269E-19, 0.1383329297784762E-03, 0.1072264803352635E-03, 0.1081258277181201E+01, 0.1459392674658872E-28, 0.4158771817821724E-03, 0.3910579975830214E-03, 0.8471473481460485E+00, 0.2949199315750023E-16, 0.2216793811640345E-03, 0.2203201078239036E-03, 0.6221178288483303E+00, 0.2055113688275276E-18, 0.2085797369872005E+02, 0.2085797369872006E+02, 0.9000000000000000E+02, 0.2732426303854875E+01, 0.0000000000000000E+00, 0.1772659828830871E-05, 0.4496825320738197E+00, 0.4437342591868191E-30, 0.2138076899966292E-04, 0.1340116970023588E-04, 0.3768653101376996E+00, 0.2904017873172006E-24, 0.4668906275608195E-04, 0.7182837805013731E-04, 0.2833465507506064E+00, 0.4888968615550842E-22, 0.1290326696826671E-05, 0.6479808231987577E-06, 0.2013980912694376E+00, 0.4436553730962970E-26, 0.1673384055036320E-03, 0.7106703019344439E-04, 0.1418989984144841E+00, 0.3443985257364436E-16, 0.1415746442632383E-02, 0.1286112519803737E-02, 0.7096946004385345E-01, 0.1380506584136771E-29, 0.1898294559619081E-02, 0.3536485589649533E-02, 0.4542843847166723E-01, 0.9860761315262648E-31, 0.1085724134073318E-03, 0.2838967874935677E-03, 0.6747056508451696E-02, 0.2742900553697359E-16, 0.1307657950440773E-02, 0.4192938789348323E-02, 0.1343590842619022E-02, 0.2423380700838948E-25, 0.4340570868086748E-02, 0.9691995934364128E-02}, + info: 0, + }, + { + z: []float64{0.6603307676446488E+00, 0.5215490552441340E+00, 0.9279560414420993E+00, 0.3871591216009305E+00, 0.4489001158072897E+00, 0.2115798060938074E+00, 0.6013990647859857E-01, 0.6977506014884622E+00, 0.8981757899514635E+00, 0.6366966965554082E+00, 0.5447619366248987E+00, 0.2926906196279220E+00, 0.9538633412864880E+00, 0.4052441866103130E+00, 0.9970193775088028E+00, 0.1550480233350559E+00, 0.9697068099139655E+00, 0.3748402815554551E+00, 0.3906465669660910E+00, 0.4103562008634933E+00, 0.9514404866677418E+00, 0.5608812699221558E+00, 0.6226680723027547E+00, 0.8653188982275728E+00, 0.3999642050403411E+00, 0.8968004947108832E+00, 0.1007886665847859E+00, 0.2055140520989622E+00, 0.8479005785073866E+00, 0.4772281284198989E+00, 0.3664785333935638E+00, 0.9311163393120341E+00, 0.2051534177095988E+00, 0.5588930379235971E+00, 0.9385948972790567E+00, 0.1380523811906209E+00, 0.9076293986285472E+00, 0.9937542903014829E+00, 0.5330397746663563E+00, 0.5373590340921116E+00, 0.2667502750074380E-01, 0.9996497580467543E+00, 0.7460509377370035E+00, 0.5868152625248035E+00, 0.2352631583529476E+00, 0.2062979890255305E+00, 0.1864397664760209E-02, 0.1562262993494207E+00, 0.1880894213999632E+00, 0.5369024951393064E+00, 0.6560943776892021E+00, 0.9558063214302399E+00, 0.1463497248954505E+00, 0.6977928179134164E+00, 0.8204108917709737E+00, 0.9530026100161404E+00, 0.7191901603465490E+00, 0.4974721533134605E+00, 0.8445129869563219E+00, 0.9007488855711614E+00, 0.4164322161987429E+00, 0.5750362072910759E+00, 0.1935672755254650E+00, 0.2663393354536251E+00, 0.3913931132271733E+00, 0.7724103066167269E+00, 0.7871420607985310E+00, 0.3766724710952808E+00, 0.9224124235283799E+00, 0.1080194858843619E+00, 0.3512364719709385E+00, 0.9868075881536598E-02, 0.9893144531298202E+00, 0.5983612801716819E+00, 0.2882889058269555E-01, 0.2759662054778022E+00, 0.4865673169207868E+00, 0.4317793431152178E+00, 0.4039098350536063E-01, 0.7594353556100967E+00, 0.6702102151313558E+00, 0.5757953377080282E+00, 0.7036908158147406E+00, 0.3078985083785768E+00}, + n: 21, + zOut: []float64{0.2422149931211175E+01, 0.2394118175176597E+01, 0.2305882752563478E+01, 0.2031709011458775E+01, 0.2015634640599460E+01, 0.1933740155888154E+01, 0.1715509223328114E+01, 0.1559424733880939E+01, 0.1425500044444135E+01, 0.1021162532677627E+01, 0.8999999270989295E+00, 0.8371987758218183E+00, 0.7469639623683311E+00, 0.6494523294995699E+00, 0.4251816116188064E+00, 0.2881024603279346E+00, 0.2247792687845145E+00, 0.8318936570759092E-01, 0.1886599847837073E-01, 0.1029977709531541E-01, 0.8015530498900421E-03, 0.8380373580927862E-22, 0.1621276583815588E-04, 0.5889624784943332E-05, 0.1715509223328114E+01, 0.2616454581976124E-17, 0.2563506401168800E-03, 0.3048038004625151E-03, 0.1559424733880939E+01, 0.5629222562364776E-20, 0.1824080863602310E-03, 0.8021857862878124E-04, 0.1425500044444135E+01, 0.1078233452249475E-15, 0.2986624164553499E-03, 0.4306384056300427E-03, 0.1021162532677627E+01, 0.2425965640253176E-21, 0.3415477187080772E-04, 0.2730971166672021E-04, 0.8999999270989295E+00, 0.1110716154551185E-26, 0.2300966623107952E+02, 0.2300966623107953E+02, 0.9800000000000000E+02, 0.2877551020408163E+01, 0.3061224489795918E+01, 0.5341669529353412E-07, 0.7469639623683311E+00, 0.1147369787651374E-23, 0.3199917396615717E-04, 0.1114773640824220E-03, 0.6494523294995699E+00, 0.1324417262847731E-16, 0.4143040953885707E-03, 0.3815591968277185E-03, 0.4251816116188064E+00, 0.4294702353329713E-20, 0.5586157832836348E-03, 0.4985099391803953E-03, 0.2881024603279346E+00, 0.3449343154346125E-19, 0.3018840928486242E-04, 0.4804099248496092E-04, 0.2247792687845145E+00, 0.8223054085459871E-16, 0.6535536077614123E-03, 0.5704051254743707E-03, 0.8318936570759092E-01, 0.1269822990867506E-16, 0.2750660948852983E-03, 0.2439371709019565E-03, 0.1886599847837073E-01, 0.2261821987449685E-25, 0.1693307421164339E-03, 0.1879460762504110E-03, 0.1029977709531541E-01, 0.2207699818464282E-23, 0.8362752373159153E-06, 0.5564443135649789E-05, 0.8015530498900421E-03, 0.1142002837193949E-22, 0.2005722186927794E-03, 0.1790331282576109E-02}, + info: 0, + }, + { + z: []float64{0.7180522604364612E+00, 0.1926580568606098E+00, 0.9998274874952506E-01, 0.5945840846677781E+00, 0.6814004826706310E-01, 0.6532586662527488E+00, 0.6162535781196632E+00, 0.6323752897874746E+00, 0.6913197528064650E+00, 0.8218961980054600E+00, 0.2391583485552943E+00, 0.6893465701234240E+00, 0.8646254741258573E+00, 0.4399082441653793E+00, 0.7657207697437258E+00, 0.6442902814401660E+00, 0.2997828758931008E+00, 0.3311754429773528E+00, 0.4602753981904284E-01, 0.2937498413335546E+00, 0.9438033090912972E+00, 0.6689413829611792E+00, 0.3690605709328096E+00, 0.1297746871929878E+00, 0.5761771518385747E+00, 0.9470476076636891E+00, 0.6065387228873672E+00, 0.3279182193602236E+00, 0.7521029317260848E+00, 0.3448791591170053E-01, 0.8260379882894462E+00, 0.3381289908082724E+00, 0.6350192899014672E+00, 0.6181098759446546E+00, 0.7961594478307139E+00, 0.9929813242449080E+00, 0.4678192142649594E+00, 0.8317252674327552E+00, 0.1301328932823079E+00, 0.9710090231649569E+00, 0.1522128889234372E+00, 0.8594558260240532E+00, 0.6013715693159983E+00, 0.8742383713574672E+00, 0.7309721379377087E+00, 0.5021385621750218E+00, 0.9190365975533138E+00, 0.8027800227596282E-01, 0.1149439815205374E+00, 0.3491372322884074E+00, 0.3638810075690350E+00, 0.7397316797734275E+00, 0.6765505976038609E+00, 0.6412509132149137E+00, 0.6636796276324973E+00, 0.2769301898862327E+00, 0.6293983439129569E+00, 0.7661949976862148E+00, 0.1787796367414251E+00, 0.2134901744318570E+00, 0.8213730837735125E+00, 0.5732135541056227E+00, 0.8956530012694059E+00, 0.5095442527120628E+00, 0.8428538487299666E+00, 0.6837140150023939E+00, 0.1256023460764972E+00, 0.1828667371827231E-01, 0.3922785557614588E+00, 0.9906794824083128E+00, 0.6528984219237121E+00, 0.2175815548938115E+00, 0.5215238469901794E+00, 0.6874084104558049E+00, 0.4144717036123762E+00, 0.5901719497674505E+00, 0.3178975712304457E+00, 0.7061784208820305E+00, 0.6028763180221938E+00, 0.6012903376000152E+00, 0.6812913355997376E+00, 0.7728807542206401E+00, 0.4888911469874758E+00, 0.1012713084879602E+00}, + n: 21, + zOut: []float64{0.2588311953706596E+01, 0.2370344164465735E+01, 0.2152772432177807E+01, 0.2121020324458281E+01, 0.1935798000017230E+01, 0.1639966751245229E+01, 0.1447991497477954E+01, 0.1303796318075928E+01, 0.1122178474206467E+01, 0.1028684266176079E+01, 0.9663785372526962E+00, 0.8401839996503420E+00, 0.6468021461987292E+00, 0.5148128374433424E+00, 0.4081393344645305E+00, 0.3744044838513741E+00, 0.1951863401557736E+00, 0.1222936930600034E+00, 0.3610852087288927E-01, 0.2215175692702855E-02, 0.1055251342481684E-03, 0.5816113682013476E-24, 0.3490790538048844E-06, 0.5279190866861155E-06, 0.1447991497477954E+01, 0.6749793798367842E-21, 0.1187240552619153E-05, 0.8669686727541259E-06, 0.1303796318075928E+01, 0.2818270319791895E-16, 0.1425495821091504E-08, 0.4238958678865879E-08, 0.1122178474206467E+01, 0.1974523135472784E-17, 0.8140039386639262E-06, 0.3278912117172865E-06, 0.1028684266176079E+01, 0.3004196424688596E-17, 0.2459469608149132E-06, 0.1027360875624831E-06, 0.9663785372526962E+00, 0.8319175140295936E-21, 0.2181749477578394E+02, 0.2181749477578394E+02, 0.1040000000000000E+03, 0.3040816326530612E+01, 0.3846153846153846E+01, 0.3006532860022149E-05, 0.6468021461987292E+00, 0.2129924444096732E-28, 0.3097317061779137E-05, 0.3301766384461962E-05, 0.5148128374433424E+00, 0.5841522899747606E-17, 0.6589564866042633E-05, 0.8825655271690012E-05, 0.4081393344645305E+00, 0.5522026336547083E-29, 0.6929345622607317E-04, 0.1121666398022498E-03, 0.3744044838513741E+00, 0.4071868297361024E-19, 0.4964849153130707E-03, 0.6240579194345771E-03, 0.1951863401557736E+00, 0.3096999756315481E-22, 0.1538823843362176E-02, 0.5557701536471033E-03, 0.1222936930600034E+00, 0.9508642973366516E-17, 0.9344625728185554E-03, 0.1303932473154565E-02, 0.3610852087288927E-01, 0.2671050208464689E-19, 0.5349955893117279E-02, 0.9991286391872665E-02, 0.2215175692702855E-02, 0.2465190328815662E-30, 0.2737788875312504E-02, 0.2378589653250575E-02, 0.1055251342481684E-03, 0.0000000000000000E+00, 0.1487915832966980E-01, 0.9945584373260818E-02}, + info: 0, + }, + { + z: []float64{0.2443960928887767E+00, 0.5306690011327519E+00, 0.8844980893594125E+00, 0.8505050348613927E+00, 0.1179365025679910E+00, 0.6787232231004032E+00, 0.4781425309482933E+00, 0.8596658025119301E+00, 0.7267566040500681E+00, 0.7988986860541384E+00, 0.5066697395752245E+00, 0.9256193759419001E+00, 0.1614174453766865E+00, 0.7938782145253169E+00, 0.3207377639351938E+00, 0.5936236877473402E+00, 0.5294512496859689E+00, 0.3341300959064973E+00, 0.8739309914591177E+00, 0.1643518115289022E-01, 0.9695643985202173E+00, 0.9508789318813814E+00, 0.6599781146531454E+00, 0.8013437877388673E+00, 0.1929493765752847E+00, 0.7655052376601326E+00, 0.6319580998438735E+00, 0.6831519307583876E+00, 0.3834927697748418E+00, 0.7094548193343077E+00, 0.7020510393185050E+00, 0.6520146205437408E+00, 0.6562814689912274E+00, 0.5240471964184201E+00, 0.2362557689024753E+00, 0.4347621644220048E+00, 0.1660979681267404E+00, 0.2422730270980831E+00, 0.7891782502389337E+00, 0.5007812255281535E+00, 0.4444633531981611E+00, 0.3026778693869716E+00, 0.9990331636150707E-02, 0.4097233632314936E+00, 0.9940240633376396E+00, 0.1626467187830966E+00, 0.3461071508544706E+00, 0.6476433090511620E+00, 0.7204399230581238E-01, 0.6885344672911693E+00, 0.1941295874559149E+00, 0.5883115695765473E+00, 0.7359955011333836E+00, 0.4277388472789430E+00, 0.4017294206583021E+00, 0.7838762945853397E+00, 0.9128155969033611E+00, 0.4856080402782125E+00, 0.4763260467232836E+00, 0.5586410048770161E+00, 0.8031586091432461E+00, 0.6068401118620381E-01, 0.9247455618544214E+00, 0.5857147883918616E+00, 0.7467203590494284E+00, 0.1453563221196804E+00, 0.2297646010524917E+00, 0.8950965613541395E+00, 0.3335127494359967E+00, 0.9671078623732762E+00, 0.8023166958816280E+00, 0.1059134943829219E+00, 0.7122485680883537E+00, 0.3211310961264330E+00, 0.1626983074059779E+00, 0.4042697895935750E+00, 0.4799615975845870E+00, 0.3426607739026810E-02, 0.5147088911567483E+00, 0.7533023355653040E+00, 0.9693400349159813E+00, 0.7251923493536844E+00, 0.9132309180417886E-01, 0.4001770994110867E+00}, + n: 21, + zOut: []float64{0.2574587707602998E+01, 0.2548516143888565E+01, 0.2328646361106399E+01, 0.2152335028165169E+01, 0.1900054508136636E+01, 0.1821843561986577E+01, 0.1641395708303600E+01, 0.1593513640807486E+01, 0.1254245828754644E+01, 0.1184500984874290E+01, 0.9407518766665146E+00, 0.8321813659237318E+00, 0.6961683120499664E+00, 0.5315544763312857E+00, 0.4082285577131941E+00, 0.4022023658419822E+00, 0.2892256147411429E+00, 0.1412172326671640E+00, 0.7919841586115514E-01, 0.2055312514153672E-02, 0.1458583715266580E-03, 0.5995342879679690E-28, 0.2082901809770958E-07, 0.9383395476751434E-08, 0.1641395708303600E+01, 0.1321835131711384E-15, 0.1191741688360734E-04, 0.3695487724817346E-05, 0.1593513640807486E+01, 0.5607617048340495E-15, 0.5232768419257040E-05, 0.4082864434107817E-05, 0.1254245828754644E+01, 0.1850697850686327E-14, 0.2071860298001858E-05, 0.2753629328588578E-05, 0.1184500984874290E+01, 0.3549874073494553E-29, 0.9441520198112501E-05, 0.5871348343515868E-05, 0.9407518766665146E+00, 0.3656881477565973E-23, 0.2332256886230818E+02, 0.2332256886230818E+02, 0.1000000000000000E+03, 0.2984126984126984E+01, 0.3000000000000000E+01, 0.1218265160373847E-03, 0.6961683120499664E+00, 0.3847797347882626E-19, 0.2944801840696127E-03, 0.4565874591840146E-03, 0.5315544763312857E+00, 0.2366582715663035E-29, 0.5951942600827748E-04, 0.7082415940475930E-04, 0.4082285577131941E+00, 0.1744834104604043E-24, 0.4087064324555941E-04, 0.4051735857075661E-04, 0.4022023658419822E+00, 0.5055621275172978E-20, 0.1443306547898801E-05, 0.5013891517830428E-06, 0.2892256147411429E+00, 0.1446770900175336E-26, 0.7439355829951562E-04, 0.1741194257531676E-03, 0.1412172326671640E+00, 0.3448013628188340E-14, 0.2774107535050150E-02, 0.3338675080262731E-02, 0.7919841586115514E-01, 0.2413026984508734E-18, 0.7157138061395222E-03, 0.6803125903293225E-03, 0.2055312514153672E-02, 0.3994185778863994E-23, 0.5722078415717462E-03, 0.5910838594703896E-03, 0.1458583715266580E-03, 0.1183291357831518E-27, 0.8602246198024520E-03, 0.1402897408133881E-02}, + info: 0, + }, + { + z: []float64{0.6756942057876089E+00, 0.6579919202857232E+00, 0.8168130848194743E+00, 0.2483963371195050E+00, 0.2866280219451008E+00, 0.7172808579862799E-03, 0.2411898945446896E+00, 0.5534360794587689E-02, 0.3878248310175912E+00, 0.4256983490856848E+00, 0.7118512164413080E+00, 0.8762976594477806E+00, 0.6850772131038755E+00, 0.4603991232581716E+00, 0.6546622425118448E+00, 0.3103854094723100E+00, 0.7913005955185648E+00, 0.4864788053022765E+00, 0.6214717223070496E+00, 0.7079028836241165E+00, 0.2446362485461124E+00, 0.3062353821816216E+00, 0.8766788389923219E-01, 0.4381267847541642E+00, 0.4459912790878073E-01, 0.9432264671740954E+00, 0.3830574008366420E+00, 0.3381025391982955E+00, 0.6585260539196298E+00, 0.1004337858849739E+00, 0.9320890528134474E+00, 0.3322930037041504E+00, 0.7282334590214989E-02, 0.8367863647557111E+00, 0.9736104021592913E+00, 0.1613168640897539E+00, 0.6409545774446285E+00, 0.8441218931570360E-01, 0.9793937208019250E+00, 0.8303681522642254E+00, 0.1022316826967604E+00, 0.3021608972738009E+00, 0.1238379032543057E+00, 0.3839961366681232E+00, 0.8871553342676223E+00, 0.2909019998361990E+00, 0.7955411369197152E-01, 0.6476593477808288E+00, 0.1739219408315845E+00, 0.6498034164943688E+00, 0.3405210004266120E+00, 0.5459816771585898E+00, 0.2574285667818188E-01, 0.8691155035114945E+00, 0.4320450067500660E+00, 0.6967311316847606E+00, 0.9186339034853966E+00, 0.9491091410944081E+00, 0.2046793386144015E+00, 0.4114169869296881E+00, 0.9170199522695309E+00, 0.1514288291023066E+00, 0.2203325773257230E+00, 0.7891126546748299E+00, 0.4738113210301682E+00, 0.6729225031084131E+00, 0.2382373075875677E+00, 0.4180455054749687E+00, 0.9185761229203592E+00, 0.8030412579733187E+00, 0.4789612026295414E+00, 0.5038982716350845E+00, 0.9959829239394621E+00, 0.3087119711461705E-01, 0.6615773194242809E+00, 0.4461280013353816E+00, 0.1982838436639324E+00, 0.7583555141388076E+00, 0.7946309632008934E+00, 0.6749216068143323E+00, 0.9948312782688508E+00, 0.2854132428873886E+00, 0.8405396060835862E+00, 0.3412432527462372E-01}, + n: 21, + zOut: []float64{0.2393193272196224E+01, 0.2018136210599260E+01, 0.1995725670346335E+01, 0.1962470040389077E+01, 0.1880885332732760E+01, 0.1640866198530974E+01, 0.1381237309251015E+01, 0.1349378962361067E+01, 0.9454836406584929E+00, 0.7636867441308103E+00, 0.6820433637129892E+00, 0.6091604279437030E+00, 0.5856982990037397E+00, 0.4957297472312800E+00, 0.2553870576469542E+00, 0.2360257010865909E+00, 0.1371029529316844E+00, 0.8102847375475340E-01, 0.5521596879227348E-01, 0.9135542089709688E-02, 0.7426079491367038E-04, 0.1040308236944517E-14, 0.7301351780522185E-10, 0.7774740781328628E-10, 0.1381237309251015E+01, 0.2169367489357782E-29, 0.6020076428884570E-10, 0.5781767346304832E-10, 0.1349378962361067E+01, 0.1885108385497271E-16, 0.6878646083705261E-10, 0.6530919047819172E-10, 0.9454836406584929E+00, 0.5778430642028005E-17, 0.9207835097245334E-10, 0.7637719283517905E-10, 0.7636867441308103E+00, 0.1387778780781446E-16, 0.1259777267883337E-09, 0.1656656563258317E-09, 0.6820433637129892E+00, 0.0000000000000000E+00, 0.1947766517618461E+02, 0.1947766517618461E+02, 0.1070000000000000E+03, 0.3197278911564626E+01, 0.3738317757009346E+01, 0.5169611983503601E-09, 0.5856982990037397E+00, 0.2460562659624748E-15, 0.4628473083370263E-08, 0.9345989594028561E-08, 0.4957297472312800E+00, 0.2615714135774493E-18, 0.2264320058754590E-06, 0.2929148984854635E-06, 0.2553870576469542E+00, 0.1029104326196136E-18, 0.2640422579955958E-07, 0.2108896012270181E-07, 0.2360257010865909E+00, 0.3005450327091600E-17, 0.6822175517251369E-08, 0.8519370047734521E-08, 0.1371029529316844E+00, 0.3395257336071235E-24, 0.2687435952714477E-08, 0.2177398712709520E-08, 0.8102847375475340E-01, 0.0000000000000000E+00, 0.5343374415472690E-09, 0.5384901342094013E-09, 0.5521596879227348E-01, 0.2914620163738177E-24, 0.6457803167637477E-08, 0.2258738450739571E-07, 0.9135542089709688E-02, 0.5326388832052272E-25, 0.9576323906120589E-06, 0.3243967823107194E-05, 0.7426079491367038E-04, 0.3164925372525892E-18, 0.6752170208452239E-05, 0.3302115586194402E-04}, + info: 0, + }, + { + z: []float64{0.1859840927709887E+00, 0.1326482709507555E+00, 0.1830793816152183E+00, 0.4955347339015181E+00, 0.7174832323677909E+00, 0.1239131234434754E-01, 0.8960455455727024E+00, 0.1883195594308053E+00, 0.3701760109540279E+00, 0.5189832590024491E+00, 0.8746518205444311E+00, 0.5127960794741733E+00, 0.2715029219143491E+00, 0.3130984190329523E+00, 0.6427011945330067E+00, 0.2728531634457195E+00, 0.4849915812764480E+00, 0.4474855195890282E-01, 0.1232624016522375E+00, 0.4054507321320544E+00, 0.8168182420396084E+00, 0.5779650563825861E+00, 0.3336575737681243E+00, 0.4793345429794458E+00, 0.3323762775436829E+00, 0.4013874798394268E-01, 0.3250840079396182E+00, 0.3339528328323188E+00, 0.6534745789256358E+00, 0.1592419685588734E+00, 0.4882641395765897E-01, 0.3378473153079410E+00, 0.1498873352536064E+00, 0.9366519936638189E+00, 0.8628314489246045E+00, 0.9035188141748132E+00, 0.3376603415628452E+00, 0.8754867721780122E+00, 0.4314313357227496E+00, 0.6689080802643724E+00, 0.7427192946427073E+00, 0.8408966332922378E+00, 0.3923135283693152E+00, 0.9856346160535667E+00, 0.5253798946684216E+00, 0.4589666030610524E+00, 0.3627813920321372E+00, 0.6650592661455799E+00, 0.5488555419923284E+00, 0.8723519563008553E+00, 0.5759829964509324E+00, 0.8314551283704829E+00, 0.8033910216639006E-01, 0.5533270198466882E+00, 0.4579854660280547E-01, 0.8805162884999327E+00, 0.7798601625088321E+00, 0.3998529604552336E+00, 0.2290634020126769E-01, 0.4087780821380217E+00, 0.8084384129630373E-01, 0.1651045317338867E+00, 0.5138876592921692E+00, 0.1502237554834691E+00, 0.3139451210283801E+00, 0.4951417832103121E+00, 0.4305502836911147E+00, 0.4221379680427187E+00, 0.6629276271381638E+00, 0.6032939209531929E+00, 0.7486429236694788E+00, 0.4603187644190643E+00, 0.9910999698454684E+00, 0.9830579802970648E+00, 0.1327788029232968E+00, 0.7906300391462903E+00, 0.4870686063503010E+00, 0.9107501765395865E-01, 0.5847999740468798E+00, 0.5237055378474927E+00, 0.1949033413503392E+00, 0.6706570830152104E+00, 0.4839742423553839E+00, 0.6933746141255293E+00}, + n: 21, + zOut: []float64{0.2594702985921864E+01, 0.1963381202215380E+01, 0.1899121104965353E+01, 0.1852857657580134E+01, 0.1352179381057759E+01, 0.1316420368068040E+01, 0.1223907530772361E+01, 0.1104722051320913E+01, 0.1042814535040686E+01, 0.9392359492223399E+00, 0.5879944547218380E+00, 0.5343064059199153E+00, 0.3616892068472140E+00, 0.3474187565935542E+00, 0.3132932870269020E+00, 0.2394766491234008E+00, 0.1924620369224269E+00, 0.5796610832720670E-01, 0.4900919199482741E-01, 0.2087594658763894E-01, 0.6804292520862544E-03, 0.2186403793390500E-19, 0.2668268315891067E-16, 0.1216320938093713E-16, 0.1223907530772361E+01, 0.3077822220048293E-18, 0.9690290545884895E-18, 0.1677534925257981E-18, 0.1104722051320913E+01, 0.3294338264035954E-18, 0.1270509199570000E-13, 0.4678488073918506E-13, 0.1042814535040686E+01, 0.2740439675865377E-23, 0.1047809983111396E-11, 0.5781643460797313E-12, 0.9392359492223399E+00, 0.3379215452805658E-16, 0.8350045830190690E-10, 0.5730922211948388E-10, 0.5879944547218380E+00, 0.6938893903907228E-17, 0.1799451523948185E+02, 0.1799451523948184E+02, 0.1150000000000000E+03, 0.3578231292517007E+01, 0.6086956521739131E+01, 0.8630088713732289E-10, 0.3616892068472140E+00, 0.1664229231319872E-20, 0.9644621511794884E-10, 0.9354199679969641E-10, 0.3474187565935542E+00, 0.0000000000000000E+00, 0.1015403419286529E-09, 0.1046840761330470E-09, 0.3132932870269020E+00, 0.6366107505133565E-27, 0.3071873418074744E-11, 0.5342885575500614E-12, 0.2394766491234008E+00, 0.2599072586631376E-18, 0.1837414559126179E-09, 0.2303923049314304E-09, 0.1924620369224269E+00, 0.3400814535759169E-17, 0.9192916981159684E-08, 0.4803632388224207E-08, 0.5796610832720670E-01, 0.0000000000000000E+00, 0.1565526746702558E-05, 0.8408463868497472E-06, 0.4900919199482741E-01, 0.7888609052210118E-30, 0.1903794116022181E-04, 0.1014775117962413E-04, 0.2087594658763894E-01, 0.9734740470109229E-22, 0.4676468030348868E-06, 0.4248047233272650E-05, 0.6804292520862544E-03, 0.3161038140634776E-18, 0.1818811163938070E-02, 0.3653457173655013E-02}, + info: 0, + }, + { + z: []float64{0.2029039404458555E-01, 0.4529725864625287E+00, 0.6412066909421453E+00, 0.6139288440336396E+00, 0.3661028502807454E+00, 0.9178254749803582E+00, 0.4307551173824371E+00, 0.4985808870906128E+00, 0.8171615510934167E+00, 0.8279058065788196E+00, 0.3035261047197422E+00, 0.7877147223127390E+00, 0.7688130520483442E+00, 0.4834409462671818E-01, 0.3121145202501183E+00, 0.5269232357652766E+00, 0.7600633371694686E+00, 0.5251092877920901E+00, 0.8263235554592012E+00, 0.6894073332954654E+00, 0.3521429062439027E+00, 0.6447189811681343E+00, 0.1105592548668879E+00, 0.1049454508922576E+00, 0.7381247076050562E+00, 0.7320584094686099E+00, 0.7003114013559573E+00, 0.9638534557041758E+00, 0.5727311775052889E+00, 0.3930768970870516E+00, 0.7640649329763241E+00, 0.3221407324893386E+00, 0.9725443946255905E+00, 0.6922592425787558E+00, 0.3449642467056757E-01, 0.1384627086161467E+00, 0.4398391723165511E+00, 0.8406456486574913E+00, 0.4126144976348992E+00, 0.5351779876797247E-01, 0.6669497026260232E+00, 0.5746288223886410E+00, 0.4589594741804619E+00, 0.7484833637036891E+00, 0.3274476209575072E-01, 0.7067960763848782E+00, 0.8759136475280368E+00, 0.3284828537280239E+00, 0.2536109230678856E+00, 0.8799264273691800E+00, 0.8159607815416694E+00, 0.5729670098854700E-01, 0.8884200881604851E+00, 0.5249116128877267E+00, 0.6498061599007876E-01, 0.6075292761444269E+00, 0.2428201413403417E+00, 0.2668460043818345E+00, 0.1429723702275580E+00, 0.6942338078813951E+00, 0.9271225003121289E+00, 0.8931957344289477E+00, 0.6420336733834545E+00, 0.3786225606645894E+00, 0.9421368123010410E-01, 0.9476439119845459E+00, 0.6497389318978118E+00, 0.3841806572586668E+00, 0.1329188317035728E+00, 0.6545507077812880E+00, 0.4430247695845350E+00, 0.1753161904868739E+00, 0.2413409779703910E+00, 0.1476409499735053E+00, 0.1179852848482287E+00, 0.3704631210033814E+00, 0.1967445635592234E+00, 0.2100970549835486E+00, 0.5744473538919733E+00, 0.1093206314301038E+00, 0.5132572818416121E+00, 0.4964557538937117E+00, 0.7518888363275744E-02, 0.9720615373003737E+00}, + n: 21, + zOut: []float64{0.2563191374817756E+01, 0.2359364796169898E+01, 0.2296884847589588E+01, 0.2056943321577226E+01, 0.1949112826206492E+01, 0.1629835138023691E+01, 0.1562766390641567E+01, 0.1422208590143927E+01, 0.1368481726990307E+01, 0.1150114414099739E+01, 0.8482773777570239E+00, 0.7665061168435710E+00, 0.7135198036652551E+00, 0.3486547062556205E+00, 0.2456691453437445E+00, 0.2203009969871996E+00, 0.1404417091680581E+00, 0.1160909181211330E+00, 0.2112854362928769E-01, 0.5069559443178203E-02, 0.5650407111696261E-03, 0.3717112585401408E-26, 0.2316306425767847E-08, 0.1632477182259275E-08, 0.1562766390641567E+01, 0.6446192664231602E-24, 0.9634960729667980E-08, 0.6524712961691138E-08, 0.1422208590143927E+01, 0.1932709217791479E-28, 0.4932058767625490E-07, 0.7860293908453283E-07, 0.1368481726990307E+01, 0.1238511621196989E-27, 0.2778987342481399E-06, 0.5558918854266694E-06, 0.1150114414099739E+01, 0.2156683454185074E-19, 0.1662595987219070E-04, 0.2580299679298412E-04, 0.8482773777570239E+00, 0.7914569980025776E-17, 0.2178512734418544E+02, 0.2178512734418543E+02, 0.1000000000000000E+03, 0.2934240362811791E+01, 0.1000000000000000E+01, 0.1715129124192563E-05, 0.7135198036652551E+00, 0.1613909508212798E-19, 0.2836076293001813E-04, 0.1595224464977716E-04, 0.3486547062556205E+00, 0.3352658847189300E-29, 0.8812160938383347E-04, 0.1178320764067675E-03, 0.2456691453437445E+00, 0.0000000000000000E+00, 0.5251568647637462E-04, 0.4480459044047029E-04, 0.2203009969871996E+00, 0.6471183777709004E-25, 0.1114279427921990E-09, 0.2270576453660371E-10, 0.1404417091680581E+00, 0.2855676476900063E-27, 0.2886261726979772E-05, 0.5470704056451658E-06, 0.1160909181211330E+00, 0.3526208246337923E-27, 0.3588687949078309E-02, 0.5383294574404876E-02, 0.2112854362928769E-01, 0.2896602354076833E-17, 0.1732996915625309E-02, 0.1499310228751921E-02, 0.5069559443178203E-02, 0.1003594455767978E-17, 0.5081816639203317E-03, 0.1080637708244138E-02, 0.5650407111696261E-03, 0.0000000000000000E+00, 0.5066428376081889E-02, 0.3247326449492487E-02}, + info: 0, + }, + { + z: []float64{0.7177806115181969E+00, 0.9619042524298227E+00, 0.9756290650460009E-01, 0.2695657197860104E+00, 0.5092382615580680E+00, 0.2216490915715645E+00, 0.7713962041593733E+00, 0.9019626308054164E+00, 0.1009043823109016E+00, 0.7164892891763703E+00, 0.6972336574704985E+00, 0.5604456603447616E-01, 0.4658944020177349E+00, 0.4677429402719713E+00, 0.9395972368396054E+00, 0.6567060928508761E-01, 0.6711470087762763E+00, 0.3572615865847095E-01, 0.7841795004355456E-01, 0.2100489732227784E+00, 0.1528790147771258E+00, 0.2944728557463859E+00, 0.6929796239262105E+00, 0.5593689694083593E+00, 0.5600220347177359E+00, 0.6885800745012647E+00, 0.1441376161827218E+00, 0.2468678391528564E+00, 0.2219056216366488E+00, 0.7828887069679423E+00, 0.1781536622262658E-01, 0.9712383516530864E+00, 0.1031071887927941E+00, 0.5428204596104211E+00, 0.9920375605622551E+00, 0.2231614148449633E+00, 0.1774197365731667E+00, 0.1667803739895276E+00, 0.2293956181863850E+00, 0.8453959149417756E+00, 0.2211895679989639E+00, 0.5610288802043042E+00, 0.3749535737701304E-01, 0.7418144847444434E+00, 0.2593245755300763E+00, 0.5358881543370908E-01, 0.9118629582226685E+00, 0.6483736004795430E+00, 0.7595140552166778E+00, 0.2981894989055883E+00, 0.6091779707233183E+00, 0.7798268953767704E+00, 0.1682114110436058E+00, 0.3801835867597201E+00, 0.6380508025759659E+00, 0.7892946000460455E-01, 0.7607559424299619E+00, 0.3271484239841950E+00, 0.7700240256278714E+00, 0.5894107219393652E+00, 0.6207117138108632E+00, 0.4725019923733027E+00, 0.3616574024313524E+00, 0.6744122205664662E+00, 0.5489632027065386E+00, 0.1532930834122788E+00, 0.1692473010839316E+00, 0.7515070367293223E+00, 0.1186783750638719E+00, 0.1028479850139022E+00, 0.3468642488228025E+00, 0.5278752643808988E+00, 0.3849250707234438E+00, 0.7889573536656195E+00, 0.4738712276132427E+00, 0.7058571493185843E+00, 0.8948240863202030E+00, 0.3494029097065446E+00, 0.4916843795342892E+00, 0.1993321046695898E+00, 0.3650043431665774E+00, 0.2403686388300026E+00, 0.5474155466298688E+00, 0.6157434374908201E+00}, + n: 21, + zOut: []float64{0.1955717973339200E+01, 0.1915826728710446E+01, 0.1780143898982495E+01, 0.1751081083154649E+01, 0.1679171531306522E+01, 0.1398798787154148E+01, 0.1289579288306139E+01, 0.1171599632002814E+01, 0.9950381700653156E+00, 0.9008548767119643E+00, 0.7944341357698450E+00, 0.7347990252582277E+00, 0.4053391427425183E+00, 0.3415476013970046E+00, 0.2769292856200630E+00, 0.2086988709391624E+00, 0.7594980741000955E-01, 0.5721582845751132E-01, 0.5152297043277422E-01, 0.6186350115045150E-02, 0.5774958135565486E-05, 0.6722096271457334E-14, 0.6635533119216432E-06, 0.1048982691930868E-05, 0.1289579288306139E+01, 0.0000000000000000E+00, 0.9172850657907766E-08, 0.6527900227304331E-08, 0.1171599632002814E+01, 0.0000000000000000E+00, 0.3386861611239913E-06, 0.1115072165646295E-06, 0.9950381700653156E+00, 0.1044578056257455E-24, 0.5793689136913799E-11, 0.1625904890507595E-10, 0.9008548767119643E+00, 0.8883435102679349E-21, 0.3220671712964998E-09, 0.8453946299986560E-09, 0.7944341357698450E+00, 0.1653452457343241E-26, 0.1779044076283400E+02, 0.1779044076283399E+02, 0.1120000000000000E+03, 0.3267573696145125E+01, 0.3571428571428572E+01, 0.1211740269624600E-06, 0.4053391427425183E+00, 0.5298753945086544E-14, 0.1515410194583574E-06, 0.2069357347527298E-06, 0.3415476013970046E+00, 0.0000000000000000E+00, 0.2579333883676927E-05, 0.8435987645777294E-05, 0.2769292856200630E+00, 0.2465190328815662E-30, 0.1658852164453815E-08, 0.3207072615633299E-09, 0.2086988709391624E+00, 0.2017246551328580E-19, 0.6091457019925236E-05, 0.6297972233022177E-05, 0.7594980741000955E-01, 0.2553131970482608E-15, 0.2736366650719638E-04, 0.2348362771705736E-04, 0.5721582845751132E-01, 0.1141311335899276E-23, 0.6030351005218485E-04, 0.3385365250818500E-04, 0.5152297043277422E-01, 0.0000000000000000E+00, 0.4442856906399686E-04, 0.3980460155412817E-04, 0.6186350115045150E-02, 0.2711709361697228E-30, 0.1322896557202734E-03, 0.3209571887096705E-03, 0.5774958135565486E-05, 0.0000000000000000E+00, 0.9248295446812529E-03, 0.1317994001905306E-02}, + info: 0, + }, + { + z: []float64{0.7669589114699304E-01, 0.2959120838012549E+00, 0.8617075527885690E+00, 0.3774472194278293E+00, 0.7430204868341380E+00, 0.3337487204025202E-01, 0.2115072947611989E+00, 0.8195300149220009E+00, 0.4610153087687133E+00, 0.1049580467270205E+00, 0.6553761031646719E+00, 0.2044425657813468E+00, 0.1419536829746254E+00, 0.8338399989758465E+00, 0.9917105482281005E+00, 0.3698082853107363E+00, 0.5656210986926330E+00, 0.5849265049217818E+00, 0.9018145207330325E+00, 0.7089264704350354E+00, 0.2562038341655152E+00, 0.1524378342317656E-01, 0.9206210351037002E+00, 0.1877259832276945E+00, 0.3637451600309541E+00, 0.9979742594017312E+00, 0.8919698496914060E+00, 0.3716780472994426E+00, 0.3142548907151147E+00, 0.4170439734847903E+00, 0.3197415298896636E+00, 0.7285365914169133E+00, 0.5784968714882697E+00, 0.6831919512327895E+00, 0.6057174197537164E+00, 0.6413693987683566E-01, 0.8827799219498907E+00, 0.4192891003797022E+00, 0.6040167945472836E+00, 0.6469271762278970E+00, 0.7359461974470041E+00, 0.5539488596393002E+00, 0.4023966166720030E+00, 0.9915288950117843E+00, 0.3043860170301459E+00, 0.4917889743094436E+00, 0.1179472550216760E+00, 0.9125202427370891E+00, 0.8786441005384636E+00, 0.4634730997209351E+00, 0.1080276946115265E+00, 0.6187727001119313E+00, 0.6709766557170562E+00, 0.3818949179452977E+00, 0.8906457783485427E+00, 0.8010289089804480E+00, 0.6931910498827129E+00, 0.8914072225833563E+00, 0.3822463769530011E+00, 0.5898102885291842E+00, 0.1092049166271940E+00, 0.8496011938807149E+00, 0.2304394290731624E+00, 0.5949006075515944E+00, 0.3290638194228065E+00, 0.1971699984758039E+00, 0.7443144303888384E+00, 0.4653555333092598E+00, 0.8207632269304853E+00, 0.4152482306441556E+00, 0.1689785233215235E+00, 0.1721084345877374E+00, 0.3931596107353640E+00, 0.5403345228237123E+00, 0.6387555392172577E+00, 0.1804790096977364E+00, 0.5783025205396422E+00, 0.7395837791384520E+00, 0.5701597209798811E+00, 0.1952734055752668E+00, 0.9661114908130567E+00, 0.4893113195434146E+00, 0.6562980654604210E+00, 0.1879394621701417E+00}, + n: 21, + zOut: []float64{0.2390558120678448E+01, 0.2326196956724044E+01, 0.2071676597874671E+01, 0.1995424877356871E+01, 0.1973795189776371E+01, 0.1728273264358535E+01, 0.1492322130169846E+01, 0.1216694895544233E+01, 0.1149617898796123E+01, 0.1007011094632661E+01, 0.9207056739913982E+00, 0.7404938152461292E+00, 0.6082352700464410E+00, 0.5965144149455339E+00, 0.2276577044879657E+00, 0.1776272681811473E+00, 0.1662286875439616E+00, 0.8310804130734020E-01, 0.4604735683437314E-01, 0.1806926893972028E-01, 0.1257133375345320E-01, 0.3600386373101646E-15, 0.6280777483216298E-03, 0.1060573000233681E-02, 0.1492322130169846E+01, 0.1292469707114105E-25, 0.5799349861429450E-06, 0.5584709508928944E-06, 0.1216694895544233E+01, 0.2047280287874868E-18, 0.1299955932331242E-09, 0.8534229075832313E-10, 0.1149617898796123E+01, 0.5088714046955349E-16, 0.6001732451841635E-09, 0.4081989685050919E-09, 0.1007011094632661E+01, 0.5578719308559292E-21, 0.1498995168909837E-07, 0.5625367692005608E-08, 0.9207056739913982E+00, 0.2728742825015995E-21, 0.2094882986118927E+02, 0.2094882986118927E+02, 0.9800000000000000E+02, 0.3004535147392290E+01, 0.4081632653061225E+01, 0.6223967900246754E-04, 0.6082352700464410E+00, 0.4038967834731580E-26, 0.1122996207538654E-05, 0.1754126012223728E-05, 0.5965144149455339E+00, 0.4386207914826929E-19, 0.1334483593164094E-04, 0.6982705884252015E-05, 0.2276577044879657E+00, 0.3148538924591216E-18, 0.9085150621800872E-04, 0.4628114404518947E-04, 0.1776272681811473E+00, 0.1149284743081177E-19, 0.3934684725502468E-05, 0.5044161242313764E-05, 0.1662286875439616E+00, 0.3944304526105059E-30, 0.1149340461723492E-04, 0.8510588625472410E-05, 0.8310804130734020E-01, 0.1540743955509789E-32, 0.1285467894756909E-02, 0.9239857033877289E-03, 0.4604735683437314E-01, 0.2169367489357782E-29, 0.2808730938050547E-03, 0.3455059327639833E-03, 0.1806926893972028E-01, 0.4614836295542919E-28, 0.7683442768713957E-06, 0.1846813906304985E-05, 0.1257133375345320E-01, 0.2538554393001216E-26, 0.4028502005942143E-04, 0.8466712427867894E-04}, + info: 0, + }, + { + z: []float64{0.5568197491282034E+00, 0.7338530212513171E+00, 0.1711270247791036E+00, 0.6696990680288049E+00, 0.1107644593582661E+00, 0.1487844153251054E+00, 0.6221478836712087E+00, 0.3739707210550620E+00, 0.6142936216832375E+00, 0.4504419047617665E+00, 0.1390832371836795E+00, 0.9602056283222130E+00, 0.4128383897877478E+00, 0.6202590221465013E+00, 0.5716294881431405E+00, 0.7009876531280159E+00, 0.8556346552408018E+00, 0.4300043005510307E+00, 0.5625488786064613E+00, 0.5236571943623558E+00, 0.2035297706440273E+00, 0.5324677179555473E+00, 0.9854023908952125E+00, 0.8088580870995794E+00, 0.7902887218423563E+00, 0.4196418643524230E+00, 0.5294914665193529E+00, 0.5947417442754066E-01, 0.2753919335549286E+00, 0.8807083336864044E+00, 0.6016279529290567E+00, 0.4144655693858035E-01, 0.4808953029705748E+00, 0.8506686680287934E-01, 0.2145404015834380E+00, 0.3020133878086849E+00, 0.8967140938263458E+00, 0.5344538485865815E+00, 0.2536120629120923E+00, 0.2552452828610304E+00, 0.9211096671641958E+00, 0.9028760680202415E+00, 0.3005599522329846E+00, 0.1197919551028395E+00, 0.3772579707039786E+00, 0.4157715274081910E+00, 0.2203607291065889E+00, 0.1084188329562713E+00, 0.5463193166123409E+00, 0.8107359194268960E+00, 0.6676190072779817E+00, 0.6711454730587799E+00, 0.6360708014875704E-01, 0.8242026716736568E+00, 0.3687006444230088E+00, 0.2216898043026083E-01, 0.4978612409817640E+00, 0.3144452507777135E+00, 0.3412289603988730E+00, 0.3266626310182044E+00, 0.4581662376370765E+00, 0.6985218227047190E+00, 0.6594479039269319E-01, 0.3938130402504401E+00, 0.9907371819490932E+00, 0.2478499678343852E+00, 0.3565435772734814E+00, 0.8420455744018336E+00, 0.2692247454903065E+00, 0.7327570909626056E+00, 0.1752776205164243E+00, 0.3569190164542581E+00, 0.2122621782757903E+00, 0.2056257129895300E+00, 0.6641092684756426E+00, 0.5386917539530447E+00, 0.8420713652275945E+00, 0.3587226239611645E+00, 0.9561844063661247E+00, 0.9126272291387975E+00, 0.5768542567999925E+00, 0.1972168939311342E+00, 0.5763304496236371E+00, 0.9478337554439876E+00}, + n: 21, + zOut: []float64{0.2593664459139222E+01, 0.2338172956520739E+01, 0.1783072679058981E+01, 0.1768637196043293E+01, 0.1688808722758796E+01, 0.1535694950136988E+01, 0.1488691522387158E+01, 0.1290354539321546E+01, 0.1187570436840380E+01, 0.1077679082742636E+01, 0.7925423484101771E+00, 0.6549022645335129E+00, 0.6315653598883190E+00, 0.5184441284206909E+00, 0.3791491409939438E+00, 0.3105722740860607E+00, 0.1128189367670211E+00, 0.7036440937731858E-01, 0.4999153992819697E-01, 0.2730914559941030E-01, 0.7241089204639656E-03, 0.7344040350490801E-18, 0.1828200693350630E-07, 0.2226187377323797E-07, 0.1488691522387158E+01, 0.4586948101010510E-17, 0.3930142187345605E-07, 0.5206893736347286E-07, 0.1290354539321546E+01, 0.6658190007940994E-20, 0.1499933495859733E-06, 0.7910043275590841E-07, 0.1187570436840380E+01, 0.2370536763713858E-16, 0.1192422432592963E-05, 0.6065280015592916E-06, 0.1077679082742636E+01, 0.6803770690793804E-23, 0.5360141282897325E-04, 0.3254990522417721E-04, 0.7925423484101771E+00, 0.8404284270509473E-23, 0.2030073020187486E+02, 0.2030073020187486E+02, 0.9700000000000000E+02, 0.2975056689342404E+01, 0.1030927835051546E+01, 0.1762395614510388E-04, 0.6315653598883190E+00, 0.2034005362457094E-16, 0.3178492515415974E-08, 0.1141868824523976E-08, 0.5184441284206909E+00, 0.1631704231140345E-20, 0.1154759308961600E-04, 0.3555504775624820E-05, 0.3791491409939438E+00, 0.9251916923707874E-19, 0.1302644751785016E-04, 0.1874642271188771E-04, 0.3105722740860607E+00, 0.1235671721938193E-25, 0.8697586673438179E-05, 0.7595546859022038E-05, 0.1128189367670211E+00, 0.1175733067685735E-18, 0.2174688695641498E-03, 0.1411064498403114E-03, 0.7036440937731858E-01, 0.5916456789157589E-30, 0.4997004849851516E-03, 0.7625846015345374E-03, 0.4999153992819697E-01, 0.3710108611279200E-20, 0.2898431160817185E-04, 0.2329024376647231E-03, 0.2730914559941030E-01, 0.1593079290931123E-17, 0.5731904499848677E-04, 0.7071520517918782E-04, 0.7241089204639656E-03, 0.1043820749788443E-25, 0.2096656950463827E-03, 0.4915700720935459E-03}, + info: 0, + }, + { + z: []float64{0.2129092067945103E+00, 0.6174796583507793E+00, 0.2209275310088966E+00, 0.1770681976597738E+00, 0.8468210663920229E+00, 0.7900600194799612E+00, 0.8319584509547915E+00, 0.8077183726155964E+00, 0.7964773509287093E+00, 0.2479492923952727E+00, 0.5169395370002006E-01, 0.6312063121285433E+00, 0.5688486960732374E+00, 0.3049379579822397E+00, 0.3779887662042721E+00, 0.4551165943302187E+00, 0.8807128836121972E+00, 0.1333615670826408E+00, 0.6901278826487529E+00, 0.8360350720177558E+00, 0.4190492004641316E+00, 0.9067077556412378E+00, 0.9762584494767094E+00, 0.9959763915912888E+00, 0.8503724779590973E+00, 0.6671116075685212E+00, 0.8841807167789617E+00, 0.6917331852931945E+00, 0.3414398718690443E+00, 0.2211364241075178E+00, 0.8057250135329493E+00, 0.4405475768508057E+00, 0.9321382353755537E+00, 0.6976358515081519E+00, 0.3254605598548291E+00, 0.1144237265035558E+00, 0.8547099978727912E-01, 0.3131314226614652E+00, 0.6940029038044814E+00, 0.2327469211945017E+00, 0.3523896044562020E+00, 0.6443116162172926E+00, 0.5382708884344491E+00, 0.9378966459649967E+00, 0.7274262519928346E+00, 0.4882092650189528E+00, 0.4497457043638882E+00, 0.8803511251742836E+00, 0.1077837527475992E+00, 0.4760275900323754E+00, 0.9725944612716640E+00, 0.4013370227296387E+00, 0.8188706727711300E+00, 0.7549128555022213E+00, 0.3045373312490215E+00, 0.9776368127163177E+00, 0.5516094182757485E+00, 0.8449472155130459E+00, 0.9309695118211208E+00, 0.6985346927019656E+00, 0.3270836933831586E+00, 0.2305805980953167E+00, 0.9135598850313159E+00, 0.2886818807914165E+00, 0.6607756604738726E+00, 0.7992086772120486E+00, 0.9191714969823802E+00, 0.9956222713515444E+00, 0.1646632133753003E+00, 0.8114783440114911E+00, 0.9650128806412454E+00, 0.1382218488636167E-01, 0.8464890579713791E+00, 0.2866238720970538E+00, 0.4485743907736028E-01, 0.5384705384174762E+00, 0.2996807710312754E-01, 0.7020716858392958E+00, 0.6280049430389886E+00, 0.2750308929159380E+00, 0.1648004007672321E-01, 0.8720570971091830E+00, 0.9962373992422624E+00, 0.8022759164194093E-01}, + n: 21, + zOut: []float64{0.3179557858974794E+01, 0.2694788878259719E+01, 0.2281326093492730E+01, 0.2196001939032204E+01, 0.1828355236773963E+01, 0.1586247682528960E+01, 0.1454772213395289E+01, 0.1286809233158695E+01, 0.1269332746846940E+01, 0.1099355321362049E+01, 0.9971216943768625E+00, 0.8310914612054856E+00, 0.4047131081238095E+00, 0.3869245862172090E+00, 0.3328473924133467E+00, 0.2908704078018756E+00, 0.1880200745280021E+00, 0.5784266149949692E-01, 0.4139216712761701E-01, 0.1651732519409763E-01, 0.3149646326524349E-02, 0.0000000000000000E+00, 0.5227593374295754E-11, 0.1202138413496143E-10, 0.1454772213395289E+01, 0.1393199790273629E-16, 0.1121878363020271E-09, 0.5353121918082171E-10, 0.1286809233158695E+01, 0.8659547037664508E-24, 0.1645814283637519E-08, 0.8601359367531547E-09, 0.1269332746846940E+01, 0.2823844361652584E-22, 0.5929700276768749E-08, 0.1126902625809321E-07, 0.1099355321362049E+01, 0.2358945595467410E-22, 0.2764360194400850E-05, 0.1553001254800959E-05, 0.9971216943768625E+00, 0.4450651748190101E-21, 0.2242703772863968E+02, 0.2242703772863967E+02, 0.1000000000000000E+03, 0.3015873015873016E+01, 0.3000000000000000E+01, 0.2632919892231646E-04, 0.4047131081238095E+00, 0.5820888909768840E-10, 0.2209233784503674E-04, 0.4136287504408153E-04, 0.3869245862172090E+00, 0.6462348535570008E-26, 0.3088379129783557E-03, 0.1528857353804532E-03, 0.3328473924133467E+00, 0.5549599819233453E-15, 0.8893453420684614E-08, 0.8741044673362129E-07, 0.2908704078018756E+00, 0.2289589891313465E-25, 0.5532514209995071E-04, 0.2183152999074702E-03, 0.1880200745280021E+00, 0.6113672015462841E-28, 0.9851023787951559E-03, 0.2769770083415459E-02, 0.5784266149949692E-01, 0.3571962178840741E-24, 0.3360295855593957E-02, 0.3874576703777444E-02, 0.4139216712761701E-01, 0.1555002616371658E-25, 0.3047908004675713E-02, 0.4283880536865950E-02, 0.1651732519409763E-01, 0.1498533807074276E-21, 0.9218134151523294E-06, 0.6993690185531638E-05, 0.3149646326524349E-02, 0.5476587948406352E-25, 0.9434027266146764E-03, 0.1032678112098284E-02}, + info: 0, + }, + { + z: []float64{0.5325973817915391E+00, 0.8075384328404875E+00, 0.2063920576624930E+00, 0.4895050697482526E+00, 0.3224859392283662E+00, 0.4597919629142447E+00, 0.5480240110168966E-01, 0.5228709929272914E+00, 0.9956836568223112E+00, 0.3978480622803672E+00, 0.9124816118920143E-01, 0.3247027355683270E+00, 0.9224658967837341E+00, 0.9984579111484309E+00, 0.8533112174943273E+00, 0.8907006920892125E+00, 0.3659539504394835E+00, 0.5561036191465061E+00, 0.7570794287369270E+00, 0.7781602931894585E+00, 0.8583979385494303E+00, 0.5883490719908564E+00, 0.2958788793535505E+00, 0.8441503484168636E+00, 0.7171074610327245E+00, 0.6324186559935309E+00, 0.6889002812298057E+00, 0.9679449699589238E-01, 0.8071604187540067E+00, 0.5036464295967858E+00, 0.3075050973746345E+00, 0.4354181299061508E+00, 0.5397482510302705E+00, 0.3266316370831254E+00, 0.7127302469392831E+00, 0.7822329043112050E+00, 0.1787867076882754E+00, 0.5059399114486356E+00, 0.1635357104384569E+00, 0.7923616792404551E+00, 0.8527619409672080E+00, 0.6624868870738707E+00, 0.6395827198572863E+00, 0.5045303635733072E+00, 0.5207053335438128E-01, 0.3872927271413512E+00, 0.8590236531191382E+00, 0.8644737695336893E+00, 0.5447620155822054E+00, 0.3420775682173337E+00, 0.1787889858336624E+00, 0.2962040723342502E+00, 0.1197091589896203E+00, 0.2582729465177200E+00, 0.8564224654785235E+00, 0.1003255861450059E+00, 0.5792751794645187E+00, 0.3553877787422808E+00, 0.3515051629979192E+00, 0.7026347035497048E+00, 0.7851727410421285E+00, 0.9451470000488936E+00, 0.1482591966327134E+00, 0.8035088707163867E+00, 0.8018983228501475E-02, 0.5992223740738118E+00, 0.3369698862429809E+00, 0.9971168486495201E+00, 0.7449267587097297E+00, 0.5929357935363798E+00, 0.8575900212486389E+00, 0.8115297023854162E+00, 0.3380359989630263E+00, 0.8328174310878843E+00, 0.8255713836908419E+00, 0.7399149789721748E+00, 0.1725333812438860E+00, 0.6828663265380140E+00, 0.6234367510076171E+00, 0.5628070366267671E+00, 0.8501068267959022E-01, 0.9315797050119701E+00, 0.1842029704669090E+00, 0.9504814303233714E+00}, + n: 21, + zOut: []float64{0.2923425454171414E+01, 0.2535311958925162E+01, 0.2192080092128743E+01, 0.1925146455902099E+01, 0.1841700496719334E+01, 0.1753280727277585E+01, 0.1582442080550360E+01, 0.1581069533140902E+01, 0.1420113611638973E+01, 0.1070153147168429E+01, 0.9980373856163754E+00, 0.9531244298503998E+00, 0.7077665812605668E+00, 0.5659990522281487E+00, 0.3146390113583965E+00, 0.2516605740660456E+00, 0.1663945631562664E+00, 0.1260010860507715E+00, 0.4255237190875141E-01, 0.7100815132372204E-02, 0.1566331927046113E-03, 0.4122332130840440E-22, 0.4572750287882177E-06, 0.8150029788456509E-06, 0.1582442080550360E+01, 0.6246970091107327E-19, 0.1184058245159526E-05, 0.5957129004529113E-06, 0.1581069533140902E+01, 0.2712893915232508E-21, 0.4684400026881307E-05, 0.9374804625040887E-05, 0.1420113611638973E+01, 0.4814409269321697E-22, 0.2425457953812455E-04, 0.3059673263223507E-04, 0.1070153147168429E+01, 0.4457872866361589E-11, 0.2849702090992769E-05, 0.4079444611357521E-05, 0.9980373856163754E+00, 0.2148022614677702E-19, 0.2295815606144379E+02, 0.2295815606144380E+02, 0.9700000000000000E+02, 0.2981859410430839E+01, 0.2061855670103093E+01, 0.4336961109868880E-06, 0.7077665812605668E+00, 0.3355216099479021E-19, 0.2178215603335118E-03, 0.1596478432727446E-03, 0.5659990522281487E+00, 0.3777948407501058E-19, 0.1732350582817826E-03, 0.1687341431970761E-03, 0.3146390113583965E+00, 0.4215672677501087E-24, 0.8708765796225133E-03, 0.5753505295482449E-03, 0.2516605740660456E+00, 0.8872339250080977E-20, 0.2809442395187102E-02, 0.2330568324677941E-02, 0.1663945631562664E+00, 0.1848892746611746E-31, 0.7424955400801435E-06, 0.1353946060853610E-06, 0.1260010860507715E+00, 0.7099748146989106E-27, 0.5320431162642944E-03, 0.1085271179151602E-03, 0.4255237190875141E-01, 0.2808116620904140E-21, 0.1709028753951538E-02, 0.8528114742759547E-03, 0.7100815132372204E-02, 0.4930380657631324E-31, 0.2904056487242609E-02, 0.3026916823887611E-02, 0.1566331927046113E-03, 0.0000000000000000E+00, 0.2549645590833870E-02, 0.2592045976400073E-02}, + info: 0, + }, + { + z: []float64{0.6141085085904113E+00, 0.3421028526671319E+00, 0.2523050636037050E-01, 0.6894939888024587E+00, 0.1106696902059259E+00, 0.3232796216228777E+00, 0.5026462674631121E+00, 0.4061906185674803E+00, 0.2489870821257593E+00, 0.5655528330838598E+00, 0.8215445521378404E+00, 0.6847122058387792E+00, 0.1058838690465073E+00, 0.3150742731806708E+00, 0.6299058795873502E-01, 0.2792122534089967E+00, 0.6156682980944264E+00, 0.6784924553414444E+00, 0.5548029179057333E+00, 0.9875334352131669E+00, 0.7114388615166174E+00, 0.4680838251435693E+00, 0.9939378516921551E+00, 0.9317334719497590E+00, 0.7166727913665860E+00, 0.9133735504519750E+00, 0.6652039093977162E+00, 0.8687642647047388E+00, 0.5616945762819415E+00, 0.3985759546461669E+00, 0.7431799484571856E+00, 0.7126935860242257E+00, 0.1006984098734091E+00, 0.3341210154632034E+00, 0.8752290131259591E+00, 0.9044047683690323E+00, 0.2748574881470656E+00, 0.9153414825361147E+00, 0.1879700367171477E-01, 0.4139829057070108E+00, 0.6163962814716032E+00, 0.4758310984958897E+00, 0.7283265374189019E-01, 0.4293121596195046E+00, 0.1627494487778676E+00, 0.6477819718948226E+00, 0.1769525517070647E-01, 0.8315284238294101E+00, 0.3951374239126071E-01, 0.8607842403091001E+00, 0.4542147501441236E+00, 0.7533183963616871E+00, 0.3860688952521878E+00, 0.7194066659377851E+00, 0.5625319388225433E+00, 0.2666855367146020E+00, 0.1952117588514313E+00, 0.4351982558470283E+00, 0.5735131371596182E+00, 0.6135067797741378E-01, 0.6627925797553079E+00, 0.5958408703801275E+00, 0.1272760770553625E+00, 0.9764806486481753E+00, 0.3738230266231765E+00, 0.8498786384730982E+00, 0.9509621583287799E+00, 0.5442964253426497E+00, 0.1274761736897801E+00, 0.8749459887021185E+00, 0.5319902581507450E+00, 0.4050330112540623E-01, 0.4679445276719574E-01, 0.6398654173496683E+00, 0.1619398995392787E+00, 0.2834692561637309E-01, 0.7369067773846130E+00, 0.2655208002136908E+00, 0.1902643003388997E+00, 0.7054378485643029E+00, 0.8869999325574263E+00, 0.1700725746174213E+00, 0.7638558771240449E+00, 0.3965145662986846E+00}, + n: 21, + zOut: []float64{0.3026266675500349E+01, 0.2485098580281992E+01, 0.2208517136068298E+01, 0.2089817225148914E+01, 0.1987605159106218E+01, 0.1671782272803828E+01, 0.1288709839574181E+01, 0.1226108028801468E+01, 0.1094715872236073E+01, 0.9893293804315401E+00, 0.9470004635866569E+00, 0.8354737908875075E+00, 0.7678170961167213E+00, 0.5139691139127377E+00, 0.3402258729602133E+00, 0.2640682732152568E+00, 0.1814642316568930E+00, 0.9210283120697343E-01, 0.5017295169510767E-01, 0.1311272184039149E-01, 0.2605821149103687E-06, 0.8821141249794507E-26, 0.1703621403540070E-06, 0.1022946688596755E-06, 0.1288709839574181E+01, 0.0000000000000000E+00, 0.7771811135093639E-06, 0.1129025861285597E-05, 0.1226108028801468E+01, 0.8850832554089860E-22, 0.6461044606060110E-07, 0.3214361230688769E-07, 0.1094715872236073E+01, 0.5589172803550431E-19, 0.3128365184192157E-08, 0.1088448901615084E-07, 0.9893293804315401E+00, 0.4249640396990678E-22, 0.2862531707476509E-05, 0.1047704834723032E-05, 0.9470004635866569E+00, 0.2336393132634786E-16, 0.2207335777761344E+02, 0.2207335777761343E+02, 0.1020000000000000E+03, 0.3043083900226757E+01, 0.9803921568627451E+00, 0.1031792375203169E-03, 0.7678170961167213E+00, 0.8633839815190009E-18, 0.1747705279299585E-04, 0.1213546251050483E-04, 0.5139691139127377E+00, 0.2016356967855187E-17, 0.7704963297163309E-04, 0.2063636533685701E-03, 0.3402258729602133E+00, 0.5916456789157589E-30, 0.2417908304509407E-03, 0.2207145059751390E-03, 0.2640682732152568E+00, 0.1479114197289397E-30, 0.1687694376453652E-02, 0.8888286778685235E-03, 0.1814642316568930E+00, 0.1064934658613210E-15, 0.3591290150683059E-02, 0.7604711042910346E-02, 0.9210283120697343E-01, 0.2042102137240287E-23, 0.1463034917919357E-02, 0.1882622569903463E-02, 0.5017295169510767E-01, 0.2551739098626718E-22, 0.3961160948815250E-03, 0.9438210467320612E-03, 0.1311272184039149E-01, 0.1972152263052530E-29, 0.6693623055505279E-03, 0.9046122259092353E-03, 0.2605821149103687E-06, 0.3100321587303656E-14, 0.3978735902689679E-02, 0.4253573989104679E-02}, + info: 0, + }, + { + z: []float64{0.8778106868894964E+00, 0.4777882175260769E+00, 0.1820603962716897E+00, 0.7891460918977841E+00, 0.7131176407472852E+00, 0.2166796106605611E+00, 0.7093860568912320E+00, 0.6747559124413653E+00, 0.1755802732664898E+00, 0.2538529139601842E-01, 0.3839736304139417E+00, 0.4972278527690542E+00, 0.2219918935874782E+00, 0.6587468361459490E+00, 0.6959875726535614E+00, 0.8785259347357933E+00, 0.4385001119617188E+00, 0.2992124106963234E-01, 0.9853525010355352E+00, 0.1842422327604198E-01, 0.7939453301916002E+00, 0.8502867854292200E+00, 0.6683895767567380E+00, 0.8502503508041696E+00, 0.2705991244761674E-02, 0.2273590703395093E+00, 0.1996606140173212E+00, 0.5828845765712893E+00, 0.7928614954547730E+00, 0.1675870051229429E+00, 0.3078809727828886E+00, 0.6073537805183471E-01, 0.3498986727103111E+00, 0.4266607326484094E+00, 0.7790595486765419E+00, 0.6274781693151706E+00, 0.3468808495278470E+00, 0.4002308549977796E+00, 0.8927740819756569E+00, 0.5380209790008849E+00, 0.9944530064668308E+00, 0.8382845348910617E+00, 0.6578833875204938E+00, 0.6784609218227333E-01, 0.9880398702345439E-01, 0.1591591396324092E+00, 0.3625625292925116E-01, 0.7834491156107602E+00, 0.8935128283958205E-01, 0.6534249936105881E+00, 0.9608003610697393E+00, 0.9122649849010867E+00, 0.3064782192618438E+00, 0.6165812021330105E+00, 0.3942978367050161E+00, 0.2389206118855702E+00, 0.4357310309586615E+00, 0.6366539061757281E+00, 0.2487697657706114E+00, 0.3158114775243555E+00, 0.4359459725257834E+00, 0.8521387333399649E+00, 0.7376171834812397E+00, 0.7198918826028659E+00, 0.3787355957929660E+00, 0.5132345781976363E+00, 0.5880413889667653E+00, 0.8394688090887562E+00, 0.3673771632022454E+00, 0.1291928261630060E+00, 0.6552015571219838E+00, 0.7918941075374089E+00, 0.3759434916876330E+00, 0.2131514444401432E+00, 0.5997464643577372E+00, 0.8626895671971565E+00, 0.1962050188754781E+00, 0.6291330853690040E+00, 0.6873926281549517E+00, 0.8949666870308315E-01, 0.1384684788210775E+00, 0.8959871983479050E+00, 0.5967626810459625E+00, 0.6838507108780668E+00}, + n: 21, + zOut: []float64{0.2344484145674817E+01, 0.2205594465347172E+01, 0.2180337141043826E+01, 0.1936893457336740E+01, 0.1819297464222486E+01, 0.1595314798543036E+01, 0.1497965290687764E+01, 0.1192635586559562E+01, 0.1109297670462514E+01, 0.1021894664697417E+01, 0.8474592078637809E+00, 0.7996737801504824E+00, 0.5357931354846659E+00, 0.5077230661246940E+00, 0.4005808269588222E+00, 0.2350964781455809E+00, 0.1732854339186359E+00, 0.5510322151786835E-01, 0.3865442753785928E-01, 0.1308309165665133E-01, 0.1986637888070920E-03, 0.1267902442921281E-19, 0.1632713022477316E-10, 0.9197304681744396E-11, 0.1497965290687764E+01, 0.6540946849634405E-22, 0.1644600422568816E-11, 0.2569557641484267E-11, 0.1192635586559562E+01, 0.1886570321166912E-23, 0.1155544514329289E-09, 0.3178796095468434E-10, 0.1109297670462514E+01, 0.2958228394578794E-30, 0.1814581278982536E-06, 0.5763166468812303E-07, 0.1021894664697417E+01, 0.1648133134119960E-16, 0.5817023408243420E-07, 0.2381874475610022E-07, 0.8474592078637809E+00, 0.5828670879282072E-15, 0.2051036601772319E+02, 0.2051036601772318E+02, 0.1250000000000000E+03, 0.3639455782312925E+01, 0.8800000000000001E+01, 0.1964091724818299E-07, 0.5357931354846659E+00, 0.3518203713570956E-14, 0.1200151291154190E-07, 0.2251426423705210E-07, 0.5077230661246940E+00, 0.6882401190382613E-24, 0.1803872146382089E-06, 0.4763453660743515E-06, 0.4005808269588222E+00, 0.1559915108945621E-18, 0.4978941410546894E-05, 0.5275156660739611E-05, 0.2350964781455809E+00, 0.1004043408045437E-17, 0.5647304839276210E-04, 0.2873291365503010E-04, 0.1732854339186359E+00, 0.2485883728081419E-23, 0.9907264920144563E-04, 0.1293007080503375E-03, 0.5510322151786835E-01, 0.0000000000000000E+00, 0.9623294785827948E-04, 0.7898847596644510E-04, 0.3865442753785928E-01, 0.0000000000000000E+00, 0.2279226510196514E-03, 0.3149968919986460E-03, 0.1308309165665133E-01, 0.4893402802699089E-27, 0.4145854568122489E-03, 0.3196372933697030E-03, 0.1986637888070920E-03, 0.1930680189793120E-17, 0.2183385452652873E-03, 0.3171631588309268E-03}, + info: 0, + }, + { + z: []float64{0.3053504558052776E+00, 0.2234484687205406E+00, 0.6531459952011753E+00, 0.3122060875846019E+00, 0.9991431676363117E+00, 0.2727966396486101E+00, 0.9325466197866266E+00, 0.9368849148298319E+00, 0.8561644447997885E+00, 0.1054815122266185E+00, 0.4923718332155202E-01, 0.9268095624277023E+00, 0.1888864280722891E+00, 0.7655148720572605E+00, 0.1232767826602820E+00, 0.5903563091717590E+00, 0.9248190356569348E+00, 0.5395288290327440E+00, 0.9028402566412551E+00, 0.9500520891471187E-01, 0.8953008781613688E+00, 0.2933361506740548E+00, 0.8453264440546789E+00, 0.5481580781657376E+00, 0.3587646761786403E+00, 0.5176903549368316E+00, 0.7562422108585272E+00, 0.9675296263022207E+00, 0.8986594456301542E+00, 0.5421338625853966E-01, 0.1201688601088308E+00, 0.6190380352364769E+00, 0.5038255434020116E+00, 0.6721007162690862E+00, 0.5702376374225947E+00, 0.9284095682432886E+00, 0.3695163217482177E+00, 0.6039359484498441E-01, 0.4652604684312921E+00, 0.8651698808632446E-01, 0.7546245127264203E+00, 0.7397909213681499E+00, 0.1212064081570199E+00, 0.3507242515197573E+00, 0.1903823153835104E+00, 0.7217789084869874E-01, 0.4631739813227773E+00, 0.4692891642215747E+00, 0.4583968848602870E+00, 0.1862358222844885E+00, 0.2939086301666586E+00, 0.5739509914073745E+00, 0.2602639918141684E+00, 0.7265362515535626E+00, 0.2180031380994948E+00, 0.1132710387386646E+00, 0.7997129355612416E+00, 0.7503609043894605E+00, 0.7921549516519859E+00, 0.2820213454373731E+00, 0.3757885220124352E+00, 0.7700990985029622E+00, 0.7233316318551536E+00, 0.1305854233773539E+00, 0.7245124401476205E+00, 0.5999815977622437E+00, 0.3886468370487757E+00, 0.5608149286383455E+00, 0.4298380566755162E+00, 0.6436590616913128E+00, 0.3743035898091585E-01, 0.4516061963302198E-01, 0.3504820364503235E+00, 0.4814816352089226E+00, 0.5678245050510763E+00, 0.5711961955150159E+00, 0.9549329198325482E+00, 0.8527165734568565E-01, 0.4185783350739758E-01, 0.5702414021975877E-01, 0.2302271730247050E+00, 0.7442529870754924E+00, 0.5366636699040384E+00, 0.8085683101567075E+00}, + n: 21, + zOut: []float64{0.2590499366480712E+01, 0.2541239603587953E+01, 0.2259909426243320E+01, 0.2181782566945434E+01, 0.1886341857097904E+01, 0.1651483296972034E+01, 0.1427705031981996E+01, 0.1248256205386413E+01, 0.1112814709657656E+01, 0.9343995210628773E+00, 0.8379224813887226E+00, 0.8181328249547786E+00, 0.6165308413237942E+00, 0.4939038343854810E+00, 0.4603621358717260E+00, 0.3639045182225083E+00, 0.3137819362841643E+00, 0.1577326270698492E+00, 0.8198100142281199E-01, 0.9578206270736807E-02, 0.4942793252781514E-03, 0.1292469707114106E-22, 0.1980335658106781E-04, 0.1681298419390782E-04, 0.1427705031981996E+01, 0.2584939414228211E-25, 0.8200031816835676E-05, 0.9102296987148495E-05, 0.1248256205386413E+01, 0.4930380657631324E-30, 0.4104488055426074E-09, 0.2576051753309951E-09, 0.1112814709657656E+01, 0.6452508963690269E-19, 0.2339325112754308E-08, 0.4010758969857423E-08, 0.9343995210628773E+00, 0.2041003537989240E-20, 0.4754834042401540E-06, 0.1343807701186157E-06, 0.8379224813887226E+00, 0.2942145729531872E-22, 0.2198875627193616E+02, 0.2198875627193615E+02, 0.1030000000000000E+03, 0.3158730158730159E+01, 0.5825242718446602E+01, 0.2325395492704734E-05, 0.6165308413237942E+00, 0.1475671084242936E-18, 0.4982404846255511E-06, 0.2497087821784679E-06, 0.4939038343854810E+00, 0.1295808538938520E-16, 0.6559194735079054E-05, 0.3408173383041987E-05, 0.4603621358717260E+00, 0.5811344985782108E-17, 0.9559725090946887E-05, 0.1189458663431952E-04, 0.3639045182225083E+00, 0.2913839059670682E-18, 0.4863259217476146E-04, 0.7411068946771063E-04, 0.3137819362841643E+00, 0.2338183723075079E-26, 0.4219303942492233E-03, 0.5983359002845232E-03, 0.1577326270698492E+00, 0.3451266460341927E-30, 0.4370512454739224E-03, 0.2953761682364422E-03, 0.8198100142281199E-01, 0.2482356093574565E-20, 0.7632038538424591E-04, 0.1389505478745866E-03, 0.9578206270736807E-02, 0.1680537859656637E-20, 0.1168521819007177E-01, 0.1200804951998557E-01, 0.4942793252781514E-03, 0.1967697241141140E-19, 0.1184783913560175E-01, 0.1590443390723593E-01}, + info: 0, + }, + { + z: []float64{0.9721612501531746E+00, 0.9226086145236946E+00, 0.6294635256706198E+00, 0.3023176111891041E+00, 0.6049371291087220E+00, 0.2862933293136216E+00, 0.8819078559307578E+00, 0.5258944749310531E+00, 0.1024274135843443E+00, 0.4745865163816484E+00, 0.3569366663070145E+00, 0.5081536020377282E+00, 0.6994675492692721E+00, 0.3184330055525583E+00, 0.4062572718658636E+00, 0.8497577069296732E+00, 0.7686323719242980E+00, 0.8873781649289114E+00, 0.5445815352331720E+00, 0.5465168091072755E+00, 0.2655612328242208E+00, 0.7149116271405493E+00, 0.2779393895548951E+00, 0.1344927254674255E-01, 0.4544708454847078E+00, 0.5332505496545747E-01, 0.3223583007255554E+00, 0.4314145703973596E+00, 0.6194759383350579E+00, 0.9673744275195654E+00, 0.5445933229599376E-01, 0.2359803760372408E+00, 0.4349989237395262E+00, 0.3983243124260842E+00, 0.1549760127081995E+00, 0.6483062457720113E+00, 0.9796384288763583E+00, 0.2088098624466561E-01, 0.7266086220595113E+00, 0.7787182393455840E+00, 0.2714545750078465E+00, 0.3281766266219532E-01, 0.4443206765749519E+00, 0.7385116967559627E+00, 0.4742748966298079E+00, 0.2719801119596308E+00, 0.5535252469642412E+00, 0.6819653774052530E+00, 0.5802197659205470E+00, 0.8706014802153047E+00, 0.7899732601913489E-01, 0.6149130585720997E+00, 0.1184080138409910E+00, 0.7335155686110397E+00, 0.3161056790243246E+00, 0.4751009230144272E+00, 0.6074228340613933E+00, 0.1834459697241099E+00, 0.5602196728537751E+00, 0.6036792416269905E+00, 0.4996379576165632E+00, 0.5762117563802562E+00, 0.4313302593954876E+00, 0.2357090997139660E+00, 0.5266696040444221E+00, 0.4943568418910921E+00, 0.5194970579745682E+00, 0.8729901711287622E+00, 0.1253423978225398E+00, 0.3249303186427334E+00, 0.1476841747547597E+00, 0.8115004890141919E+00, 0.3358761522855614E+00, 0.6267425544884889E+00, 0.8684373664078195E+00, 0.3410509649937432E+00, 0.1223171934609151E+00, 0.6692100819077175E+00, 0.8714060240466885E+00, 0.8435328911476530E+00, 0.3613173587051273E+00, 0.5970888673100956E+00, 0.4814113673780336E+00, 0.9518076426657822E+00}, + n: 21, + zOut: []float64{0.2554276088974017E+01, 0.2353122577016648E+01, 0.1866240795386955E+01, 0.1792222013488891E+01, 0.1776522631286352E+01, 0.1671843747376224E+01, 0.1608565757744856E+01, 0.1413448668253747E+01, 0.9978397039940720E+00, 0.9776727877490632E+00, 0.8701050228770406E+00, 0.6522479060818760E+00, 0.6295532782699175E+00, 0.4076513128864766E+00, 0.3045303763029391E+00, 0.2026925943270836E+00, 0.1597713759311400E+00, 0.1149331809326307E+00, 0.5501161781795570E-01, 0.3472328989596482E-02, 0.1615352262160075E-02, 0.2261810287929078E-15, 0.1434223756681676E-21, 0.1189989751754647E-20, 0.1608565757744856E+01, 0.1068494074045434E-17, 0.1018285523195584E-14, 0.1812446834981097E-15, 0.1413448668253747E+01, 0.8361925595342725E-26, 0.5806129122189708E-11, 0.1848580748818003E-11, 0.9978397039940720E+00, 0.5222833230866609E-21, 0.9842396145073251E-07, 0.4923018478143697E-07, 0.9776727877490632E+00, 0.9540591325261466E-21, 0.1504532523487471E-05, 0.7619936176069947E-06, 0.8701050228770406E+00, 0.2405710216561998E-25, 0.2041333911794964E+02, 0.2041333911794964E+02, 0.1050000000000000E+03, 0.3108843537414966E+01, 0.6666666666666667E+01, 0.1010063659896995E-05, 0.6295532782699175E+00, 0.2958228394578794E-30, 0.7231781167780556E-06, 0.8027785243996724E-06, 0.4076513128864766E+00, 0.2327139670401985E-28, 0.4311361064418766E-06, 0.4365718303993244E-06, 0.3045303763029391E+00, 0.3511198893363720E-17, 0.5813968676396444E-06, 0.4990623034093460E-06, 0.2026925943270836E+00, 0.5787194672316798E-22, 0.1414410322798341E-05, 0.1084116171450400E-05, 0.1597713759311400E+00, 0.3368436065293720E-27, 0.4438807230072854E-05, 0.3295442179394680E-05, 0.1149331809326307E+00, 0.3973698114522315E-22, 0.1450590122472916E-04, 0.1074561246336364E-04, 0.5501161781795570E-01, 0.1153335343143272E-20, 0.9954779132989017E-07, 0.6305695341872095E-07, 0.3472328989596482E-02, 0.7183968878891587E-15, 0.2465868832870137E-03, 0.3524118878925340E-03, 0.1615352262160075E-02, 0.1517768381645227E-26, 0.5410549418889337E-03, 0.6396403869804795E-03}, + info: 0, + }, + { + z: []float64{0.9945523629868341E+00, 0.6311483525653909E+00, 0.7029190400645571E+00, 0.6452581068575963E+00, 0.9353553331334358E+00, 0.1547193049011500E+00, 0.5087511216875095E+00, 0.8821879483245458E+00, 0.5873463835171173E+00, 0.3391476900726194E+00, 0.3121839954924539E+00, 0.2777103145160921E+00, 0.2404463284577694E+00, 0.9114535183484027E+00, 0.4707329974301702E+00, 0.8965398451252625E+00, 0.6082343132413309E+00, 0.6509204493235183E+00, 0.1573499033176421E+00, 0.7416865701488552E+00, 0.1617007503826062E-01, 0.9896605969885931E+00, 0.3427350027671039E+00, 0.9677837053324486E+00, 0.1744936477417883E+00, 0.1063275349300943E+00, 0.7956875801511568E+00, 0.8998967378241718E-01, 0.9957418429488507E-01, 0.2587083053394715E+00, 0.3753593926504107E+00, 0.7537263520315082E+00, 0.1726167393116790E+00, 0.1420490749456633E+00, 0.1475360304745418E+00, 0.3281044300775052E+00, 0.4011897283558843E+00, 0.5039659382748809E+00, 0.8444659776686902E-01, 0.6685320205580927E+00, 0.8425776598223370E+00, 0.6334616337862548E+00, 0.6754035119469365E+00, 0.3594856315188868E+00, 0.4308279252773916E+00, 0.2170629535054914E+00, 0.5040120070238915E+00, 0.3780998968579012E+00, 0.9176188652711103E+00, 0.1603892455353655E+00, 0.2475008720560291E+00, 0.4414989878913728E+00, 0.3466658552370731E+00, 0.3098329951977107E+00, 0.8940921934240968E+00, 0.6686136942966417E+00, 0.4049936818549904E-01, 0.1308695446239941E+00, 0.8770734618597430E+00, 0.7917220872288512E+00, 0.5736823795257117E+00, 0.5474219864141461E+00, 0.3320663514826834E+00, 0.5824816531032581E+00, 0.6748067573570548E+00, 0.8139348519761679E+00, 0.1984641509226878E+00, 0.5557729841117627E+00, 0.1101812804319026E+00, 0.2169710965518002E+00, 0.5846617154920911E+00, 0.9784843983810533E+00, 0.8650267562586114E+00, 0.4041298540058539E+00, 0.9548165813531374E+00, 0.3839697059508718E+00, 0.4296171922210591E+00, 0.9617664542372570E+00, 0.2102779850721345E+00, 0.6135130181658475E+00, 0.3331715196673474E+00, 0.3177082868916457E+00, 0.2836520073686416E+00, 0.4452894940247868E+00}, + n: 21, + zOut: []float64{0.2413112525759640E+01, 0.2309698811549223E+01, 0.1971065496840386E+01, 0.1839093033734385E+01, 0.1586321309986888E+01, 0.1384287501933647E+01, 0.1357349915568794E+01, 0.1342137050614370E+01, 0.1098398899504136E+01, 0.1013688381736709E+01, 0.8838922773071145E+00, 0.7023193003094995E+00, 0.6083268670387161E+00, 0.3967105732701523E+00, 0.3295901758335739E+00, 0.2610566591740404E+00, 0.2254040681461952E+00, 0.1107925081061023E+00, 0.7084089717166595E-01, 0.5790734022898784E-02, 0.1162539701808497E-05, 0.2217532248565769E-17, 0.1400266087055540E-09, 0.1806586784837133E-09, 0.1357349915568794E+01, 0.1160047396826257E-18, 0.1994113072724655E-16, 0.4228494360227003E-16, 0.1342137050614370E+01, 0.1172187884313513E-15, 0.1255075745859590E-14, 0.2503873040081153E-15, 0.1098398899504136E+01, 0.3711182370878063E-20, 0.5744299067797088E-08, 0.4873476684669810E-08, 0.1013688381736709E+01, 0.1283916659070448E-18, 0.9737119066622311E-08, 0.8382615528986061E-08, 0.8838922773071145E+00, 0.3385457556489824E-15, 0.1990987815014785E+02, 0.1990987815014784E+02, 0.1050000000000000E+03, 0.3324263038548753E+01, 0.5714285714285714E+01, 0.5531678096648157E-07, 0.6083268670387161E+00, 0.9327491343333244E-26, 0.3094358165149238E-06, 0.4992693882721107E-06, 0.3967105732701523E+00, 0.1615587133892632E-26, 0.5013465632663534E-06, 0.4474558637993164E-06, 0.3295901758335739E+00, 0.7527343574232552E-22, 0.6917755140723670E-06, 0.9191878134168280E-06, 0.2610566591740404E+00, 0.8992644540970212E-27, 0.3283328599477859E-08, 0.8980185396558612E-09, 0.2254040681461952E+00, 0.2761013168273541E-29, 0.1566859737304233E-05, 0.9651044230345755E-05, 0.1107925081061023E+00, 0.7853700447084989E-18, 0.2494389596499284E-03, 0.3103855763358142E-03, 0.7084089717166595E-01, 0.7910121402691465E-20, 0.9848486231185840E-03, 0.1285663115805527E-02, 0.5790734022898784E-02, 0.1925929944387236E-33, 0.1531134660067926E-02, 0.1103959511478054E-02, 0.1162539701808497E-05, 0.0000000000000000E+00, 0.3553926119432854E-02, 0.1161337136649311E-01}, + info: 0, + }, + { + z: []float64{0.6912525216559012E+00, 0.7535513505900934E+00, 0.9471932644608124E+00, 0.3186447229836621E+00, 0.5324891284853083E+00, 0.8568362673509099E+00, 0.7683599820389093E+00, 0.5584553004793524E+00, 0.5571013534938567E+00, 0.9300192917069305E-01, 0.8580829209571639E+00, 0.7019126526839274E+00, 0.6637712341629651E+00, 0.1211000088170944E+00, 0.6340253546080570E+00, 0.8089912896293909E+00, 0.9056005723453709E+00, 0.8259750504337368E+00, 0.7787230128973186E+00, 0.5552567089885843E+00, 0.1575217143336131E+00, 0.6258385609742768E+00, 0.3943745586872103E+00, 0.2414131111537543E-02, 0.1491577729788018E-01, 0.3231570165180105E+00, 0.6629837458829935E+00, 0.3692715436026686E+00, 0.4217957028148089E+00, 0.9587355452830710E+00, 0.2048474370070816E+00, 0.9514275263988156E+00, 0.6824099372375696E+00, 0.4368303647429550E-01, 0.1779948598152153E+00, 0.8894462775192779E+00, 0.5101271266317630E+00, 0.9448652224292025E+00, 0.2265718177112338E+00, 0.3995811139403516E+00, 0.8380789267629041E+00, 0.6621441253102893E+00, 0.1548712624835822E+00, 0.6028850196944033E+00, 0.6938032609628844E+00, 0.6847684356722229E+00, 0.5160938472467536E+00, 0.2489894297094153E+00, 0.1603949345362032E-01, 0.8469682453172568E+00, 0.1332301650751776E+00, 0.4964641576870391E+00, 0.8955382322295532E+00, 0.8913224930710517E-01, 0.1632933980261509E+00, 0.7671629642421702E+00, 0.1918190416387825E+00, 0.4660642407804531E+00, 0.3421851388276426E+00, 0.6793284417353496E-03, 0.4856583571413033E+00, 0.6596584184483706E+00, 0.3999565195667565E-01, 0.4265147212719423E+00, 0.1721559491949431E-01, 0.4779030554385033E-01, 0.9628058707102425E+00, 0.4575395386200597E+00, 0.3526890078762277E+00, 0.7271726865364773E+00, 0.1741804541232641E+00, 0.3524640041347155E+00, 0.2143698389021181E+00, 0.9553499123803968E+00, 0.7803670081719427E+00, 0.7906509834069840E+00, 0.5939624443460740E+00, 0.5439294231719827E+00, 0.4026522884432556E+00, 0.2400403086558794E+00, 0.1695045416332096E+00, 0.8774151073165960E+00, 0.9528799076371641E-01, 0.6357307125994049E-01}, + n: 21, + zOut: []float64{0.2768602537214622E+01, 0.2449987435840808E+01, 0.2103617452638331E+01, 0.2091492233971247E+01, 0.2040261542124423E+01, 0.1984511273424848E+01, 0.1507960384149227E+01, 0.1491386484166052E+01, 0.1283295633334833E+01, 0.1065640575633715E+01, 0.9760063516861833E+00, 0.9535053549649605E+00, 0.6117733318422185E+00, 0.5156356643703764E+00, 0.4217391763517565E+00, 0.2514332616796913E+00, 0.1056943786041289E+00, 0.6556299181229375E-01, 0.2554189252987301E-01, 0.1599343544217954E-01, 0.7248128851221257E-03, 0.1757582096832414E-26, 0.8938568486456872E-12, 0.7801064326234513E-12, 0.1507960384149227E+01, 0.1792073872399063E-19, 0.2167105506392983E-08, 0.2566615495401212E-08, 0.1491386484166052E+01, 0.2939740300877914E-17, 0.1513553473151668E-08, 0.1292098164447321E-08, 0.1283295633334833E+01, 0.5002192774679673E-18, 0.3422853236655498E-09, 0.3087733884567774E-09, 0.1065640575633715E+01, 0.2649562899583917E-24, 0.1824851422869684E-09, 0.1969539993879423E-09, 0.9760063516861833E+00, 0.4849588587138365E-15, 0.2273036620466689E+02, 0.2273036620466689E+02, 0.1110000000000000E+03, 0.3401360544217687E+01, 0.6306306306306307E+01, 0.7012703734578152E-09, 0.6117733318422185E+00, 0.2636779683484747E-15, 0.8832037497597917E-08, 0.1377654767646391E-07, 0.5156356643703764E+00, 0.0000000000000000E+00, 0.4403364729024244E-07, 0.2921450058151117E-07, 0.4217391763517565E+00, 0.5116160632510206E-16, 0.4627032593211780E-06, 0.6780935482482274E-06, 0.2514332616796913E+00, 0.3477119313860159E-18, 0.8396751469149006E-05, 0.1191099168408868E-04, 0.1056943786041289E+00, 0.3125614770312806E-14, 0.3873238345753621E-04, 0.1564927337192913E-03, 0.6556299181229375E-01, 0.2145521217817673E-17, 0.9476510350371504E-03, 0.9104754488359111E-03, 0.2554189252987301E-01, 0.1508279173816323E-23, 0.1093077353977330E-02, 0.3191708039391989E-03, 0.1599343544217954E-01, 0.1319576415787468E-18, 0.1003863779460019E-02, 0.1271197433268307E-02, 0.7248128851221257E-03, 0.5169135658374832E-21, 0.1128681157512944E-02, 0.4574374031799749E-02}, + info: 0, + }, + { + z: []float64{0.8514967554120231E+00, 0.1903564904561825E+00, 0.9315134585755248E+00, 0.6865565499502658E+00, 0.9874780893034819E+00, 0.4243732836164926E-01, 0.4493254789963134E+00, 0.1218497220886967E+00, 0.3032420422448456E-01, 0.4472006833337416E+00, 0.7764061193501844E+00, 0.2765680149425037E+00, 0.1540380964603436E+00, 0.8227084597523057E+00, 0.1281873340097673E+00, 0.2797045229662546E+00, 0.1723485697940061E+00, 0.5407468670158238E+00, 0.3703892253237170E+00, 0.3275545813562609E+00, 0.1384768695152372E+00, 0.8683661690082241E+00, 0.2417038393999236E+00, 0.1573965961648072E+00, 0.7549703050710239E+00, 0.4197135409081310E+00, 0.5565257749798536E-01, 0.7494783707245707E+00, 0.8342833407960080E+00, 0.7207413539297494E+00, 0.3936911272324267E+00, 0.8307872407436112E-01, 0.5696677800088412E-01, 0.2580569153061851E-01, 0.3976149332803511E+00, 0.4082340292723502E+00, 0.3620800929220623E+00, 0.2078006460748600E+00, 0.6810562489816266E+00, 0.8414616295760738E+00, 0.2053319202340824E+00, 0.7745582586901971E+00, 0.8243869237197288E-01, 0.7513634029365589E+00, 0.8658814490552211E+00, 0.7014202441287165E-01, 0.8786892218281559E+00, 0.2415414918645031E-01, 0.1648367770784782E+00, 0.5852629690413500E+00, 0.6558826026732849E+00, 0.3505171007322015E+00, 0.5959744796861849E+00, 0.6000199298251039E+00, 0.5156931460104713E+00, 0.1010243586499049E-01, 0.2804608587164645E+00, 0.7088599878489240E+00, 0.3159377781412633E+00, 0.1196632783263437E+00, 0.8053993759743566E+00, 0.9537751230670044E+00, 0.6890540876884894E+00, 0.7327967809533995E+00, 0.1752177926983489E-01, 0.1176294169286665E+00, 0.1417165464977135E+00, 0.1128117051181837E+00, 0.4431718138373526E+00, 0.6383761487884151E+00, 0.4394388749172047E+00, 0.4496324720961747E+00, 0.2336818223819791E+00, 0.8283237197456694E+00, 0.5968446077081969E+00, 0.2123688346867825E-03, 0.2316409292069651E+00, 0.4041203764036865E+00, 0.5989557684304492E-01, 0.1751475090786662E+00, 0.3300532749209990E+00, 0.5257653351639615E+00, 0.9423173850128755E+00, 0.5110067889308013E+00}, + n: 21, + zOut: []float64{0.2298367449128524E+01, 0.2183508003369306E+01, 0.1768578955898148E+01, 0.1497740650820804E+01, 0.1451044171656134E+01, 0.1248562072819587E+01, 0.1096241131844911E+01, 0.1047761158237631E+01, 0.1036921434023463E+01, 0.1001878203872264E+01, 0.6028997776208512E+00, 0.5966927468392602E+00, 0.3787547972649039E+00, 0.3164597916816877E+00, 0.2770907680746649E+00, 0.1378928396715414E+00, 0.1008983167754413E+00, 0.7523836829300481E-01, 0.4549396861483578E-01, 0.2905908538794771E-01, 0.1164397397714791E-04, 0.2593449025859535E-11, 0.4028878361793870E-19, 0.4523833078775027E-19, 0.1096241131844911E+01, 0.2254118867995285E-20, 0.6781252758190456E-19, 0.6132859990189332E-19, 0.1047761158237631E+01, 0.2208810534618833E-28, 0.7941399228881527E-19, 0.8755467647203911E-19, 0.1036921434023463E+01, 0.2697904295855860E-27, 0.1193508568348155E-18, 0.1375302458176128E-18, 0.1001878203872264E+01, 0.1808754486438286E-19, 0.1585460437287443E-17, 0.7110442921296878E-18, 0.6028997776208512E+00, 0.1121217470921487E-23, 0.1719109533586889E+02, 0.1719109533586889E+02, 0.1020000000000000E+03, 0.3002267573696145E+01, 0.7843137254901960E+01, 0.6126841018734423E-14, 0.3787547972649039E+00, 0.2514494135391975E-29, 0.3694268515215640E-12, 0.2142184401680204E-12, 0.3164597916816877E+00, 0.2495880173472380E-22, 0.1052194788283320E-11, 0.1801542652052392E-11, 0.2770907680746649E+00, 0.2042405059827892E-23, 0.3416315088185822E-10, 0.1784450556067769E-10, 0.1378928396715414E+00, 0.2231720057459842E-17, 0.5936850868223322E-09, 0.2792901329469146E-09, 0.1008983167754413E+00, 0.4009937753419447E-25, 0.1438568455567306E-07, 0.6376284135652434E-08, 0.7523836829300481E-01, 0.1673899732006569E-23, 0.3811420638095229E-06, 0.1677978014843256E-06, 0.4549396861483578E-01, 0.4108428387966160E-20, 0.9969899927958168E-05, 0.2238705130236833E-04, 0.2905908538794771E-01, 0.5621738354967019E-25, 0.1622697124847995E-03, 0.1340889241809050E-03, 0.1164397397714791E-04, 0.4733165431326071E-29, 0.2205086015306072E-02, 0.1109731617446849E-02}, + info: 0, + }, + { + z: []float64{0.9566341326420642E+00, 0.1368890791339401E+00, 0.1041033686995702E+00, 0.1843288381431366E+00, 0.9983016155690853E+00, 0.1786866722264480E+00, 0.3401743522788719E+00, 0.3857333052582377E+00, 0.5001620282112933E+00, 0.9013417473823726E+00, 0.9483009872337210E+00, 0.8066933876879568E+00, 0.5299205541713562E+00, 0.1746250429119467E-01, 0.9676426134678857E+00, 0.9451210738656991E+00, 0.4964770237154315E+00, 0.7837324008636358E+00, 0.9355959680316486E+00, 0.6160646886859618E+00, 0.3400424465599898E+00, 0.5332164761252830E+00, 0.3086260018745091E+00, 0.7161810741898500E+00, 0.9586563909920308E+00, 0.5072089025298385E+00, 0.5345428289191819E+00, 0.3564033548208417E+00, 0.5073508962435702E-01, 0.5457190349920044E+00, 0.5924351087865416E+00, 0.4551284321479383E+00, 0.1212070325395470E+00, 0.4136992969230449E+00, 0.9668715153070689E+00, 0.5158905905227948E+00, 0.3815356588296225E+00, 0.9643666102790432E+00, 0.2243124357596349E-01, 0.1865949320717719E+00, 0.7081123336136068E+00, 0.8847286955309422E+00, 0.8075237017566694E+00, 0.7058935338718864E+00, 0.8930194548226011E-01, 0.5968683124630468E+00, 0.6423123320238798E+00, 0.4264046421741549E+00, 0.6535060636263267E+00, 0.8848885990305457E+00, 0.1727496532173951E+00, 0.2233116713730792E+00, 0.5179656160482806E+00, 0.8833427955005373E+00, 0.5463392573098168E+00, 0.2339495215057854E+00, 0.2531599269911875E+00, 0.8693933445310196E+00, 0.9904673923253784E+00, 0.5001765262594373E+00, 0.8475066901059425E+00, 0.7747140538451288E+00, 0.8097617518836179E+00, 0.6177833422496881E+00, 0.4294196301939426E+00, 0.8754149021622922E+00, 0.1154777972031917E+00, 0.4002319777705416E+00, 0.8948519482752643E+00, 0.2680092666078437E-01, 0.4982362166797213E+00, 0.8946688039099321E+00, 0.6004540842339657E+00, 0.7864972660235388E+00, 0.5343742612900907E+00, 0.6804570163829448E+00, 0.8534533212497195E+00, 0.6588190749186591E+00, 0.3987256626502571E+00, 0.9641448737959348E+00, 0.8049200655531427E+00, 0.8429466638354991E+00, 0.3173537092974966E+00, 0.2969758130071765E+00}, + n: 21, + zOut: []float64{0.2691092090580979E+01, 0.2651656165852700E+01, 0.2273892452779949E+01, 0.2046491657483657E+01, 0.1856589708219707E+01, 0.1474606896148613E+01, 0.1449970763396692E+01, 0.1157826920722246E+01, 0.1131422765724169E+01, 0.1103316690199991E+01, 0.1081571209422854E+01, 0.8863514547656711E+00, 0.7487688552248520E+00, 0.4946957959671176E+00, 0.3261665336572834E+00, 0.2704116388140369E+00, 0.1035778920187539E+00, 0.8274904671505576E-01, 0.4712842456001845E-01, 0.3463118683574901E-01, 0.5254769424391846E-04, 0.2373014771939845E-22, 0.2238209824420786E-09, 0.1516830937674482E-09, 0.1449970763396692E+01, 0.6496080927593321E-18, 0.4705401432274776E-09, 0.6877602609145650E-09, 0.1157826920722246E+01, 0.9485735114056482E-11, 0.6765447972194981E-08, 0.9075269590011981E-08, 0.1131422765724169E+01, 0.0000000000000000E+00, 0.2115471642425146E-07, 0.1586124232313620E-07, 0.1103316690199991E+01, 0.1685550134725853E-21, 0.9651672077875321E-13, 0.7184159896265294E-12, 0.1081571209422854E+01, 0.5505416081326749E-23, 0.2191297069678434E+02, 0.2191297069678434E+02, 0.1080000000000000E+03, 0.3308390022675737E+01, 0.4629629629629630E+01, 0.3615019372146533E-05, 0.7487688552248520E+00, 0.2711157159063573E-25, 0.1185348717221526E-04, 0.1538970705040117E-04, 0.4946957959671176E+00, 0.7711572887860419E-23, 0.5228762878644057E-04, 0.2140066476035995E-04, 0.3261665336572834E+00, 0.1027012207743053E-16, 0.1058102716324823E-03, 0.1097923206605328E-03, 0.2704116388140369E+00, 0.1419949629397821E-27, 0.3075139383959133E-03, 0.2041016121130936E-03, 0.1035778920187539E+00, 0.1569288801032274E-18, 0.2245437021601444E-03, 0.2161294383881767E-03, 0.8274904671505576E-01, 0.1322963914266329E-22, 0.4098429023844965E-03, 0.2685224923308173E-03, 0.4712842456001845E-01, 0.1972152263052530E-27, 0.1445743106447529E-03, 0.3591079434142046E-04, 0.3463118683574901E-01, 0.1109335647967048E-30, 0.1752604588321185E-04, 0.1168961103966469E-04, 0.5254769424391846E-04, 0.0000000000000000E+00, 0.7596773881065606E-02, 0.6101958366533248E-02}, + info: 0, + }, + { + z: []float64{0.8353120998595153E+00, 0.2762691216596785E+00, 0.4005263075088337E+00, 0.2013066591993183E+00, 0.7159087664363259E+00, 0.6826958051178053E+00, 0.3940626911632166E+00, 0.4990834556070268E+00, 0.6760530863202496E-02, 0.5490926358579395E-01, 0.1673564807759778E+00, 0.6884305772394704E+00, 0.3902830106720901E+00, 0.9394502319309270E+00, 0.1453732258871473E+00, 0.6913382271536774E+00, 0.4797608951630542E+00, 0.8813081041297155E+00, 0.7179153476502249E+00, 0.8684015860527726E+00, 0.4912919359735076E+00, 0.2734537604788182E+00, 0.6687443482830383E+00, 0.1554406884207427E+00, 0.2919860915775756E+00, 0.2642733542167044E+00, 0.8429147529046822E+00, 0.2888320698097314E+00, 0.8826173246454528E+00, 0.8977386905269689E+00, 0.7688524109189127E+00, 0.9833521147086286E+00, 0.9216258197795713E-01, 0.4886212819310254E-01, 0.2266462269156035E+00, 0.3411440109054314E+00, 0.3008601997419669E-01, 0.6174499545648404E+00, 0.5004878789063633E+00, 0.6820549240543587E+00, 0.2697209119346977E-01, 0.5561910637447186E+00, 0.5496066776611622E+00, 0.5185759009159874E+00, 0.1533641991284778E+00, 0.9896294286837857E+00, 0.3752499036369343E+00, 0.6748924776803822E-01, 0.2328081038279309E+00, 0.6721552304404512E+00, 0.5472950056303504E+00, 0.9949773164461492E+00, 0.5646629720515278E+00, 0.4280389734679516E+00, 0.4488723317267336E+00, 0.7263390986042261E+00, 0.2371171913738990E-01, 0.2980895305269504E-01, 0.2561842200752050E+00, 0.2554059142478259E+00, 0.5952758446711104E-01, 0.7921877816291150E+00, 0.2045719212105177E+00, 0.9215889426626128E+00, 0.7130733301970400E+00, 0.1420514661017834E+00, 0.8292002693849506E+00, 0.5327095640926792E+00, 0.9857821333545339E+00, 0.6686900428841760E+00, 0.1963263366455671E+00, 0.2881353528210300E+00, 0.7077457532403378E+00, 0.9075905470440924E+00, 0.1600253949359417E+00, 0.1037543259304946E+00, 0.3343707004174388E+00, 0.7287034220491817E-01, 0.8402900560224008E+00, 0.1343632243665364E+00, 0.8746515522185468E+00, 0.4102434537961821E+00, 0.1922774302984470E+00, 0.7386986269659255E+00}, + n: 21, + zOut: []float64{0.2705701250380865E+01, 0.2517516394575531E+01, 0.1823532784589120E+01, 0.1787562059778101E+01, 0.1543666662169401E+01, 0.1517718677289282E+01, 0.1380407836894782E+01, 0.1248997815711926E+01, 0.1005808190406691E+01, 0.8278526045363968E+00, 0.6708485238929687E+00, 0.6082664705845506E+00, 0.5949155529076431E+00, 0.3419285270749396E+00, 0.2930861537880754E+00, 0.2677590880174420E+00, 0.1897681878114907E+00, 0.4498262444281959E-01, 0.4027859329477797E-01, 0.1212960387301111E-02, 0.4788271754899720E-05, 0.2113479533223326E-17, 0.1072835726919963E-07, 0.2769573896400322E-08, 0.1380407836894782E+01, 0.2075077381359190E-19, 0.2509615479685493E-12, 0.8472237738633739E-13, 0.1248997815711926E+01, 0.8862433277732312E-18, 0.5565142852935547E-10, 0.1115246324111066E-09, 0.1005808190406691E+01, 0.1508363342119467E-20, 0.4766364300104371E-06, 0.1686414207934524E-06, 0.8278526045363968E+00, 0.2958228394578794E-30, 0.1339811587116281E-04, 0.9618739022097639E-05, 0.6708485238929687E+00, 0.5096041447727736E-27, 0.1941181574680586E+02, 0.1941181574680586E+02, 0.1100000000000000E+03, 0.3301587301587301E+01, 0.6363636363636363E+01, 0.2769598741382734E-05, 0.5949155529076431E+00, 0.1660823573641619E-23, 0.5008194680845295E-05, 0.3644576454263968E-05, 0.3419285270749396E+00, 0.8597611808520244E-19, 0.8197192371775147E-05, 0.1495511835801176E-04, 0.2930861537880754E+00, 0.6452008777913547E-22, 0.7613853051650506E-05, 0.9176969716117157E-05, 0.2677590880174420E+00, 0.1626694295438144E-23, 0.2172962611604878E-06, 0.9910144268854854E-06, 0.1897681878114907E+00, 0.5698278443334010E-17, 0.3051734820342141E-03, 0.3112883552318466E-03, 0.4498262444281959E-01, 0.6022708464481807E-24, 0.1205042765713422E-04, 0.1759326252954196E-04, 0.4027859329477797E-01, 0.1150776253123047E-20, 0.1426316484726719E-04, 0.9508927802446297E-05, 0.1212960387301111E-02, 0.3136662420452545E-23, 0.9384394253406367E-03, 0.4268700521479601E-03, 0.4788271754899720E-05, 0.0000000000000000E+00, 0.1227549320701017E-01, 0.5132215250850077E-02}, + info: 0, + }, + { + z: []float64{0.6118263281058917E+00, 0.9095172470423057E+00, 0.3600259528878788E+00, 0.2816648927398081E+00, 0.1399164597780194E+00, 0.8570391268113827E+00, 0.6056165732881742E+00, 0.8852338629006543E+00, 0.5421670517489531E+00, 0.6780884449288360E+00, 0.8758212925230515E+00, 0.8288674605669587E+00, 0.6440226363310471E+00, 0.5894956271378661E+00, 0.5783475018163303E+00, 0.3156005123186516E+00, 0.8703974350876685E+00, 0.2617715240366199E+00, 0.8370578409687427E+00, 0.5560169751702698E+00, 0.7455275952513329E-01, 0.7082615127868872E+00, 0.1297707357428401E-02, 0.3064709066297203E+00, 0.8391571848933236E+00, 0.9253805128965463E+00, 0.1130984054668048E+00, 0.8319072101853607E+00, 0.7799276064931965E+00, 0.8579163369971375E+00, 0.5543120979067712E+00, 0.1549966158329672E+00, 0.2643029344048516E+00, 0.8314141615883028E+00, 0.5782452249644381E+00, 0.6319732449892587E+00, 0.4892864093075822E+00, 0.1584418066385224E+00, 0.1120577745932696E+00, 0.6617954786615949E+00, 0.1159882395495345E+00, 0.2876505945591634E+00, 0.7061058070010036E+00, 0.7252986915993946E+00, 0.6775944839786487E+00, 0.7230010551819884E+00, 0.6571938557215073E+00, 0.7482251296401533E+00, 0.9684494841571512E-01, 0.1940071502680237E+00, 0.8896785746779762E+00, 0.9170179284973872E+00, 0.8053995841969270E+00, 0.9321965525342302E+00, 0.7288973738137661E-01, 0.3849028957514653E+00, 0.4410947536600551E+00, 0.4770808300783691E-01, 0.3690162722923055E+00, 0.1908498348358704E+00, 0.8094133574022262E+00, 0.4809437445509840E+00, 0.1405808283203624E+00, 0.4482801388864215E+00, 0.7023724161235537E+00, 0.5041894616412674E+00, 0.2984594028552712E+00, 0.8510121345026274E+00, 0.7612412832182369E-01, 0.8890771840141870E+00, 0.8611357776125709E+00, 0.7702458212424681E+00, 0.8813091992976040E+00, 0.3838156614335277E+00, 0.1536911508311884E+00, 0.2763378258408019E+00, 0.7613349010649187E+00, 0.4228084592762277E+00, 0.5894002697827440E+00, 0.5744691724607953E-01, 0.3014767112059925E+00, 0.7221203248495245E-01, 0.7619553096876313E+00, 0.5154237548276358E+00}, + n: 21, + zOut: []float64{0.2723457737035386E+01, 0.2426437846006860E+01, 0.2169822787916940E+01, 0.1997417054976096E+01, 0.1928996526776896E+01, 0.1891356815602834E+01, 0.1803418741268920E+01, 0.1442378108645599E+01, 0.1026854281138765E+01, 0.9766368850685674E+00, 0.8449303421617025E+00, 0.7575761304896602E+00, 0.7013909577306906E+00, 0.6362631409338654E+00, 0.3605885444762012E+00, 0.1912852882240109E+00, 0.1837209447646653E+00, 0.1221129878112117E+00, 0.2486838916706533E-01, 0.9765050532318768E-02, 0.3171294864219318E-06, 0.1371236688474761E-19, 0.2987011438498780E-15, 0.8087574764480620E-15, 0.1803418741268920E+01, 0.5451390847569379E-21, 0.7270236634641202E-11, 0.2896404140496822E-11, 0.1442378108645599E+01, 0.6954964380428437E-14, 0.4131395561099005E-08, 0.7275670618661885E-08, 0.1026854281138765E+01, 0.1292469707114106E-25, 0.1838064307199299E-06, 0.1238204560933622E-06, 0.9766368850685674E+00, 0.3388131789017201E-20, 0.3880169268725981E-06, 0.5681289313967714E-06, 0.8449303421617025E+00, 0.6785686819474261E-17, 0.2221927887785774E+02, 0.2221927887785774E+02, 0.1080000000000000E+03, 0.3244897959183673E+01, 0.4629629629629630E+01, 0.3025393053677348E-08, 0.7013909577306906E+00, 0.1341063538875720E-28, 0.3767849368753714E-07, 0.3184959175038880E-07, 0.6362631409338654E+00, 0.8874685183736383E-29, 0.5999352088776256E-07, 0.7114794232343430E-07, 0.3605885444762012E+00, 0.1582265649256097E-24, 0.2391907791779699E-03, 0.3344095791507466E-03, 0.1912852882240109E+00, 0.1130832107634320E-25, 0.4040482702647743E-03, 0.3567248396804949E-03, 0.1837209447646653E+00, 0.4930380657631324E-31, 0.1016317982961682E-02, 0.8970313840717793E-03, 0.1221129878112117E+00, 0.2076836816009399E-16, 0.1892596629513954E-02, 0.2329446640559320E-02, 0.2486838916706533E-01, 0.1713835026472478E-23, 0.3568672048225553E-04, 0.1599561599209249E-03, 0.9765050532318768E-02, 0.0000000000000000E+00, 0.3650779499194616E-03, 0.5712243726145556E-03, 0.3171294864219318E-06, 0.8599783076848839E-19, 0.2181668718924628E-02, 0.9598847336904798E-03}, + info: 0, + }, + { + z: []float64{0.1133237741366075E+00, 0.6519297783748091E+00, 0.1419059404596466E+00, 0.6942573823108688E+00, 0.4899507169502382E-03, 0.4408585439270172E+00, 0.4089484333544855E+00, 0.8087151633238087E+00, 0.7299241994604067E-01, 0.7772039339909241E+00, 0.6160100823712519E+00, 0.1679565169487562E+00, 0.3276744683398485E+00, 0.8481565553508272E+00, 0.5614085421003249E+00, 0.5889702994117808E+00, 0.9865181317193454E+00, 0.5686958983255483E+00, 0.2173616127956169E+00, 0.6617740807852496E+00, 0.1324295788322836E+00, 0.5932751564887147E+00, 0.4417023572495267E+00, 0.8308006832392040E+00, 0.6963900525231828E+00, 0.7023649910778577E+00, 0.2540087053190563E+00, 0.5116605124111596E+00, 0.4580501208371790E+00, 0.9900881058795367E+00, 0.6233054379975522E+00, 0.5093215893644945E+00, 0.8805051397371310E+00, 0.5918749676473295E+00, 0.8024628157090720E+00, 0.1089848141144264E+00, 0.9385822032209372E+00, 0.9676954608704463E+00, 0.7567544231269694E+00, 0.7763472508927070E+00, 0.7544500156824916E+00, 0.7080578938468585E-02, 0.8622695184492650E+00, 0.1268681530179145E+00, 0.2408963669487220E+00, 0.1909503620360825E+00, 0.9251648557888137E-01, 0.4447315055648083E+00, 0.1504005134322962E+00, 0.6245252202415555E+00, 0.8432800589533600E+00, 0.1408178180805120E+00, 0.8538656063298837E+00, 0.6959250082173740E-01, 0.7452290984944354E-01, 0.8186895700534982E+00, 0.4817344889163616E+00, 0.8941802149688474E+00, 0.8277272846279742E+00, 0.3122760515919010E+00, 0.4631046821883726E+00, 0.9939521405533804E+00, 0.5067334594578294E+00, 0.3251044449945518E+00, 0.4514296322650755E+00, 0.9520015267726308E+00, 0.3811787795610073E+00, 0.6466473208499942E+00, 0.1035647165455822E-01, 0.3768739780085785E+00, 0.7301131130949717E+00, 0.6341150979687762E+00, 0.2006486990564113E+00, 0.7995641372737874E+00, 0.3501522989293299E+00, 0.7212117404145123E+00, 0.3724384783514179E+00, 0.2704745802524587E+00, 0.5954948132025037E+00, 0.8796174543237598E+00, 0.2533217117523398E+00, 0.2406431629179949E+00, 0.4238947154458014E+00, 0.1002294321190256E+00}, + n: 21, + zOut: []float64{0.2763722715135843E+01, 0.2473753815483350E+01, 0.2367461218794171E+01, 0.2245079256722998E+01, 0.1833576927640889E+01, 0.1670289128561736E+01, 0.1457654822263786E+01, 0.1350493275779479E+01, 0.1277854548609735E+01, 0.1156481310792204E+01, 0.1106963375568883E+01, 0.8704957369830484E+00, 0.6845380809859644E+00, 0.4950109522946930E+00, 0.4198272059610658E+00, 0.2867476262636770E+00, 0.2180239597616727E+00, 0.1578141753335409E+00, 0.1153511714179556E+00, 0.2506658150747594E-01, 0.5048803894682267E-08, 0.8470329472540474E-20, 0.3080709680328647E-07, 0.2263725078605666E-07, 0.1457654822263786E+01, 0.6882142696441190E-21, 0.4511645736903135E-07, 0.5799182381327367E-07, 0.1350493275779479E+01, 0.3225542408567476E-17, 0.3673248914261325E-08, 0.2431637013515395E-08, 0.1277854548609735E+01, 0.1479114197289397E-30, 0.1457855695816495E-07, 0.1029378003116242E-07, 0.1156481310792204E+01, 0.9441087313685069E-24, 0.4178859307872738E-07, 0.3166226192774972E-07, 0.1106963375568883E+01, 0.1745440919131533E-19, 0.2297620589091097E+02, 0.2297620589091097E+02, 0.9600000000000000E+02, 0.3092970521541950E+01, 0.3125000000000000E+01, 0.2193086683474567E-06, 0.6845380809859644E+00, 0.6815668447404457E-13, 0.1173742870849872E-05, 0.2415236474615244E-05, 0.4950109522946930E+00, 0.4604423331594002E-25, 0.1089056660110428E-04, 0.1249035785040860E-04, 0.4198272059610658E+00, 0.2034864306780130E-21, 0.1807219455044531E-04, 0.1582973453084106E-04, 0.2867476262636770E+00, 0.1157544870450433E-16, 0.1788428346885188E-06, 0.1048647571833164E-05, 0.2180239597616727E+00, 0.2820966597070338E-26, 0.2675556367648033E-04, 0.1965631735302374E-04, 0.1578141753335409E+00, 0.4632909363938796E-19, 0.6657143729168815E-04, 0.2311126907684945E-04, 0.1153511714179556E+00, 0.7089566920435294E-17, 0.2519028315687161E-03, 0.1126597449160621E-03, 0.2506658150747594E-01, 0.1511791266627385E-18, 0.1819059120658101E-02, 0.1223404988252185E-02, 0.5048803894682267E-08, 0.5048803894682267E-08, 0.1176483960189416E-01, 0.7561758166988619E-02}, + info: 0, + }, + { + z: []float64{0.6007483099411913E+00, 0.8757604992442719E+00, 0.3498665716095440E+00, 0.4974125174432915E+00, 0.3942177430818359E+00, 0.4655097178512825E+00, 0.7062255099400584E+00, 0.5955461614709365E+00, 0.5705117921786074E+00, 0.2580859610386106E+00, 0.5213970441770472E+00, 0.3227485215512098E+00, 0.8200431655548257E-01, 0.9521784777464899E+00, 0.9768302381970198E+00, 0.5401259459761943E+00, 0.2876249345369413E+00, 0.9928912621382637E+00, 0.9068004769556834E+00, 0.8136746797372185E+00, 0.6557906174128045E+00, 0.7593059043472016E+00, 0.7306718357524993E+00, 0.7872142480398446E+00, 0.2169453387448870E+00, 0.1236189910537125E+00, 0.4376414329540577E+00, 0.2475974410903709E+00, 0.5743712937757064E+00, 0.8451940172770922E+00, 0.2954362279165403E+00, 0.9333330371592371E+00, 0.7261884685452219E+00, 0.2905925760133674E+00, 0.3022535752338255E+00, 0.6907049310391071E+00, 0.2616870809800952E+00, 0.3758121789769751E+00, 0.7112612645989228E+00, 0.9602233026485287E+00, 0.7212734445945013E+00, 0.9266335266312882E+00, 0.7829804394259932E-01, 0.6683939253194693E+00, 0.3539007443404153E+00, 0.1629995906155713E+00, 0.2470024645126471E+00, 0.7250237828800384E+00, 0.9725422312806663E+00, 0.1983270881451602E+00, 0.2167236969811593E+00, 0.2406674239058443E+00, 0.3811046126380717E+00, 0.6358718370494476E-01, 0.6038903598347725E+00, 0.2622945348536884E+00, 0.4871669697876424E+00, 0.1853788955105938E+00, 0.3471794920367192E+00, 0.9520318129455714E+00, 0.9596274379126818E+00, 0.5893179749928269E+00, 0.8560240909608330E-01, 0.9435308110759013E+00, 0.2058424446004554E+00, 0.2877465111691004E+00, 0.6254635389850627E+00, 0.5518846905281638E-01, 0.1132608874973561E+00, 0.8191427866511807E+00, 0.1031178242713734E+00, 0.1909407653284053E+00, 0.5428362177906626E+00, 0.2973328401307228E+00, 0.6079142025065691E+00, 0.1448090006401505E+00, 0.5807148716343321E+00, 0.2207276122221573E+00, 0.4617526470734991E+00, 0.2133930631010816E-01, 0.8719991154365724E+00, 0.4224743304865443E+00, 0.7012315055540164E+00, 0.9970966526798359E+00}, + n: 21, + zOut: []float64{0.2875734378878489E+01, 0.2344615299508293E+01, 0.2292398069608056E+01, 0.2200897502376554E+01, 0.2016889876654445E+01, 0.1997885510503641E+01, 0.1786196162676624E+01, 0.1505330793574375E+01, 0.1193246823746953E+01, 0.1153847743209180E+01, 0.9864509519829328E+00, 0.8076407462080507E+00, 0.6427729668463894E+00, 0.4808392927305387E+00, 0.3994667257867982E+00, 0.3273321022655395E+00, 0.1654363687174887E+00, 0.1176242694536732E+00, 0.4639514928819789E-01, 0.1592499252046327E-01, 0.3521629889976334E-03, 0.1784216669875992E-16, 0.7121431862167897E-10, 0.2812798494121821E-10, 0.1786196162676624E+01, 0.4108568523994154E-17, 0.4438281217193102E-07, 0.2274689950145052E-07, 0.1505330793574375E+01, 0.7499168293791558E-11, 0.5226296435976747E-05, 0.8641809444662033E-05, 0.1193246823746953E+01, 0.0000000000000000E+00, 0.2628223783350490E-04, 0.3987870710471355E-04, 0.1153847743209180E+01, 0.5865702946789929E-16, 0.1241308452869419E-07, 0.3894882997253744E-08, 0.9864509519829328E+00, 0.7673863643253590E-18, 0.2335727788952568E+02, 0.2335727788952568E+02, 0.1040000000000000E+03, 0.3058956916099773E+01, 0.2884615384615385E+01, 0.3948721236408985E-04, 0.6427729668463894E+00, 0.1028674620408199E-26, 0.2391232675375281E-03, 0.2086678697444007E-03, 0.4808392927305387E+00, 0.3130051437900657E-19, 0.1426864276581422E-03, 0.1522473256880454E-03, 0.3994667257867982E+00, 0.2101777886998446E-24, 0.1526280399103512E-05, 0.7002070790936748E-06, 0.3273321022655395E+00, 0.1242239255406691E-15, 0.1253374424171423E-04, 0.2848254240665514E-04, 0.1654363687174887E+00, 0.2455402723507254E-17, 0.1659752591164777E-02, 0.8476830847116842E-03, 0.1176242694536732E+00, 0.1344218982496604E-26, 0.1195138829435961E-02, 0.1583065192028977E-02, 0.4639514928819789E-01, 0.2205655090997949E-26, 0.2795062437264197E-03, 0.9604240981222648E-03, 0.1592499252046327E-01, 0.6574583373762050E-21, 0.7008887495297913E-02, 0.4078689360266482E-02, 0.3521629889976334E-03, 0.2981894221735425E-26, 0.7785429009218255E-02, 0.8697865294154498E-02}, + info: 0, + }, + { + z: []float64{0.3565428176835072E+00, 0.1947118362244993E+00, 0.7741156920152520E+00, 0.2422304602782238E+00, 0.6344560478781652E+00, 0.6454994272905118E+00, 0.1782236022643452E+00, 0.1761708296759242E+00, 0.4902923959906477E+00, 0.3501715044277058E+00, 0.8606282659620700E+00, 0.4671519599404039E-03, 0.9177061631942818E+00, 0.9869535184930249E+00, 0.9615604930014852E+00, 0.2283553018405985E+00, 0.2470322441623238E+00, 0.5789642646481346E+00, 0.9797717987449011E+00, 0.2628090453859127E+00, 0.1063995753795172E+00, 0.9446865880365994E+00, 0.8109285339456792E+00, 0.4534650679402863E-01, 0.9560542860825706E+00, 0.7338084401822241E+00, 0.4719995459594307E+00, 0.8981162685661518E+00, 0.6088366551058919E+00, 0.4061662134958367E+00, 0.6141507801286759E+00, 0.7683300427463863E+00, 0.2030033710532269E+00, 0.5109903203799075E+00, 0.1295039929316932E-01, 0.1313823831505738E+00, 0.4600541675974348E+00, 0.8052912479215125E+00, 0.7315674921483241E+00, 0.1311059905375703E+00, 0.9372521946935908E-01, 0.2804058432106148E+00, 0.1426401168120447E+00, 0.1302494454623315E-01, 0.9936953989155247E+00, 0.7109841901452127E+00, 0.8438933393801377E+00, 0.5599779486257196E+00, 0.6224094357036947E-01, 0.3722277721927331E+00, 0.2128496963914419E+00, 0.2132595627624145E+00, 0.1761474673379855E+00, 0.5003566260610350E+00, 0.5448249098276142E+00, 0.5701738373290982E+00, 0.5196161461339291E+00, 0.4684002904633344E-01, 0.3091316721875115E+00, 0.9311143262655500E+00, 0.5165589926587729E+00, 0.4230658512580241E+00, 0.1580095970610971E+00, 0.9213403630754643E+00, 0.8395102804227733E+00, 0.6279936637330286E-01, 0.2118369865058433E+00, 0.5654902136914255E+00, 0.8603345552081203E+00, 0.6355651085391135E+00, 0.9504788095745560E+00, 0.4928822316317183E+00, 0.8546738890428598E+00, 0.1506739079739667E+00, 0.7955004699434830E+00, 0.8623803468730415E+00, 0.3328976137523824E+00, 0.6282681071703561E+00, 0.5253150183233042E+00, 0.5508861108006231E+00, 0.8482246434328706E+00, 0.3438184421622726E+00, 0.4546750663905129E+00, 0.2702842147468514E+00}, + n: 21, + zOut: []float64{0.2599043716461175E+01, 0.2392272222815941E+01, 0.1945154273268249E+01, 0.1882117601080557E+01, 0.1808214125087810E+01, 0.1701027479657859E+01, 0.1674631474676720E+01, 0.1432830957842129E+01, 0.1245386641860508E+01, 0.1003047986420639E+01, 0.5925499318269597E+00, 0.5737323778075372E+00, 0.4619197085153934E+00, 0.3795861721644865E+00, 0.2896752472940557E+00, 0.2024598813435771E+00, 0.1753335138277014E+00, 0.8865983947068434E-01, 0.4088280438555415E-01, 0.2271023207656241E-01, 0.3207012114254504E-03, 0.1328658858913301E-22, 0.6931093261583948E-12, 0.1962539051213948E-11, 0.1674631474676720E+01, 0.1972152263052530E-30, 0.1003060686577864E-09, 0.7786971971568132E-10, 0.1432830957842129E+01, 0.3552283923653146E-20, 0.1335875663368593E-08, 0.1098996752778210E-08, 0.1245386641860508E+01, 0.6078417508770261E-16, 0.6005521677860925E-08, 0.4565873133117504E-08, 0.1003047986420639E+01, 0.4907378230941548E-20, 0.6042756667162823E-07, 0.1337733817342293E-06, 0.5925499318269597E+00, 0.7849166006949067E-28, 0.2051155688909552E+02, 0.2051155688909552E+02, 0.1190000000000000E+03, 0.3632653061224490E+01, 0.6722689075630252E+01, 0.9823469248695270E-04, 0.4619197085153934E+00, 0.3582825487703231E-19, 0.4408755124729528E-13, 0.6425665938157879E-14, 0.3795861721644865E+00, 0.3049769924381334E-19, 0.2649002399507504E-08, 0.1284693180187630E-07, 0.2896752472940557E+00, 0.2730342256278547E-24, 0.3857186710932351E-04, 0.7729247272182434E-05, 0.2024598813435771E+00, 0.2411244474478362E-13, 0.9974443273860175E-04, 0.7715885583051736E-04, 0.1753335138277014E+00, 0.1003583340528496E-19, 0.1275804036051463E-05, 0.1384195629265487E-05, 0.8865983947068434E-01, 0.1976477763343393E-17, 0.9250271469637329E-05, 0.1838436200742544E-04, 0.4088280438555415E-01, 0.1570480975080192E-18, 0.1665813744256122E-03, 0.9368787794988337E-04, 0.2271023207656241E-01, 0.1120555887990158E-19, 0.1174000031728850E-02, 0.1217958466428532E-03, 0.3207012114254504E-03, 0.0000000000000000E+00, 0.1126152474028795E-01, 0.4219515300090987E-02}, + info: 0, + }, + { + z: []float64{0.1431540885741494E+00, 0.8417471667062104E+00, 0.3721480902981644E-01, 0.9023772086815021E+00, 0.7374866167630612E-01, 0.8092071841305744E+00, 0.8019394206305236E+00, 0.4350675566733520E+00, 0.8704440278245326E+00, 0.8549104680538234E+00, 0.1422025173760633E+00, 0.8968456705882693E+00, 0.1647179447265090E-01, 0.8994077105608889E-01, 0.8596481603583839E-02, 0.3900328616396558E+00, 0.4012630844305533E+00, 0.8262908556770313E+00, 0.9026062467432411E+00, 0.6485345137550630E+00, 0.5598932241080331E+00, 0.6084992568220661E+00, 0.5039450314115669E+00, 0.3490854750626526E+00, 0.9921372250281116E+00, 0.1522469068827847E-01, 0.9395473455386270E+00, 0.3928498832803473E-01, 0.1672951108814763E+00, 0.9480670302336689E+00, 0.8743929741539138E+00, 0.9201765927311700E-01, 0.8641536356563365E+00, 0.8867562289118487E+00, 0.7156446870854873E+00, 0.5025184567500440E-01, 0.4878799838415181E+00, 0.5568327059782646E+00, 0.4596548235310455E+00, 0.6857902774944131E+00, 0.4795565553491499E-01, 0.4752906527216701E+00, 0.9288351773531449E+00, 0.7419018575576386E+00, 0.9987802353476521E+00, 0.8896105755435116E+00, 0.3190450046252536E+00, 0.9685806853440787E+00, 0.3396383774694021E+00, 0.9164401886915974E+00, 0.1269879571285023E+00, 0.7912318128907188E+00, 0.9987805345221650E+00, 0.4107567957671243E+00, 0.4798441760727139E+00, 0.2357309197085595E+00, 0.3404494185276096E+00, 0.7067865773496134E+00, 0.2931542927088892E+00, 0.6654441577727066E+00, 0.9279529535770864E+00, 0.9667208022109988E+00, 0.5518920376663735E+00, 0.1657487215954807E+00, 0.3897636058410684E+00, 0.9489706352102197E+00, 0.9626390247015670E+00, 0.1020775856599213E+00, 0.3545784768064359E+00, 0.3098089336816090E+00, 0.3791089991258285E+00, 0.6519489570740321E+00, 0.4763523952410913E+00, 0.3754524631080590E+00, 0.9792813089520809E+00, 0.1998301915332230E+00, 0.7618060057813935E+00, 0.1923436350325713E+00, 0.2507012719817848E+00, 0.9704520069999245E-01, 0.2277384851702763E+00, 0.7790727508043876E+00, 0.9105177383528497E+00, 0.9714469561729607E+00}, + n: 21, + zOut: []float64{0.2499720115178021E+01, 0.2371028651009860E+01, 0.2298220416774619E+01, 0.1883765650093571E+01, 0.1735426237683963E+01, 0.1616050162695453E+01, 0.1545275083087796E+01, 0.1187762610175739E+01, 0.1136805332133151E+01, 0.9576839460725933E+00, 0.9184986446054146E+00, 0.7702442640767845E+00, 0.6433137908930019E+00, 0.6160049176831036E+00, 0.3208789970551323E+00, 0.1900871628722621E+00, 0.9670499780074775E-01, 0.7460708611062000E-01, 0.6486083888512703E-01, 0.9966295048259487E-02, 0.4462615269650136E-07, 0.2765885173224186E-23, 0.3446029508568731E-11, 0.2660256849760007E-11, 0.1545275083087796E+01, 0.1351675564459578E-15, 0.5238898174323723E-11, 0.6640890994279970E-11, 0.1187762610175739E+01, 0.1020402561847179E-21, 0.5048392892414130E-10, 0.4263729817754413E-10, 0.1136805332133151E+01, 0.1429794613494979E-24, 0.1140378416083416E-09, 0.8548580688939750E-10, 0.9576839460725933E+00, 0.1302866745903472E-12, 0.1207358062805810E-07, 0.1106598026337004E-07, 0.9184986446054146E+00, 0.3538135823224864E-23, 0.2093690524456137E+02, 0.2093690524456137E+02, 0.1130000000000000E+03, 0.3331065759637188E+01, 0.7964601769911504E+01, 0.4249897555997367E-08, 0.6433137908930019E+00, 0.4627357327667341E-16, 0.5702383148705814E-08, 0.8656383665454304E-08, 0.6160049176831036E+00, 0.0000000000000000E+00, 0.4551987331271016E-07, 0.8434005257711676E-07, 0.3208789970551323E+00, 0.2939872200043623E-13, 0.4894684795516590E-05, 0.8200734504818474E-05, 0.1900871628722621E+00, 0.9080407486043539E-23, 0.2659953011765320E-05, 0.2713538128245964E-05, 0.9670499780074775E-01, 0.1949336478520425E-16, 0.1287973346598181E-04, 0.3266830247798530E-04, 0.7460708611062000E-01, 0.0000000000000000E+00, 0.5588793940970657E-03, 0.8233963212342685E-03, 0.6486083888512703E-01, 0.1680331387617770E-17, 0.5510428852120968E-02, 0.6166917183278490E-02, 0.9966295048259487E-02, 0.9229672591085838E-28, 0.3019065027713110E-04, 0.7674568090533565E-04, 0.4462615269650136E-07, 0.1609276246650864E-27, 0.6212935138424260E-03, 0.6196304337665942E-02}, + info: 0, + }, + { + z: []float64{0.2117689827794353E+00, 0.3469390325266096E+00, 0.8556157513093896E+00, 0.4757820823688597E-01, 0.8174618541686680E+00, 0.7502623797079592E+00, 0.3473865910309967E+00, 0.1102061280439136E+00, 0.3838366632541155E+00, 0.4335750892772081E+00, 0.8350483733926333E+00, 0.8472841724322083E+00, 0.7001411292294977E+00, 0.1602971622162627E+00, 0.8475208106005836E+00, 0.1606731136869689E+00, 0.1282020202063155E+00, 0.7021142414638628E+00, 0.6509542291315448E+00, 0.3403267711628978E+00, 0.2783715946342622E+00, 0.2391807909006515E+00, 0.9326061845277929E+00, 0.8200594229325990E+00, 0.5326312099842309E+00, 0.4390518762985745E+00, 0.9087332134146432E+00, 0.8586305843825174E+00, 0.5289458618923581E+00, 0.6098713986238019E+00, 0.4124733909450122E+00, 0.2730411694523917E+00, 0.8437528550291284E+00, 0.6776322145297138E+00, 0.6772761566308538E+00, 0.6457716484911746E+00, 0.4290441069454122E+00, 0.9486890113840626E+00, 0.1145429178800543E+00, 0.8512453512490206E+00, 0.6435458910126746E+00, 0.6571563420730420E-01, 0.6473933144723745E+00, 0.2355560081089225E+00, 0.1262112692360912E+00, 0.6892345322103945E+00, 0.9088034154559810E-01, 0.5725023743105110E+00, 0.8924086653580375E+00, 0.6645221244511262E+00, 0.7287357579298158E+00, 0.6462379994906295E+00, 0.8254375000545862E+00, 0.2402799002378904E+00, 0.2312499677892260E+00, 0.7164295349077132E-01, 0.1216505240532725E+00, 0.5279275209153104E+00, 0.2010432640871422E+00, 0.2335833224032272E+00, 0.7053869472451330E+00, 0.1271428628255256E-01, 0.5920854820119847E-01, 0.1973220586788875E+00, 0.9024202349843203E+00, 0.2696040474399301E+00, 0.2399100427530529E+00, 0.4936945945994136E+00, 0.7377918193661529E+00, 0.4454167008139350E+00, 0.6822934143143184E+00, 0.1980205964978332E+00, 0.9382259163150929E+00, 0.7952650736079295E+00, 0.2147267423149601E+00, 0.2160850567828982E+00, 0.2063316967709339E-02, 0.4613555480251579E+00, 0.2983741464914229E+00, 0.7653433710630531E+00, 0.9319255930520460E+00, 0.9624604653562387E+00, 0.7921958309630666E+00, 0.3349247737517954E+00}, + n: 21, + zOut: []float64{0.2554012710728313E+01, 0.2350385283314499E+01, 0.2336543487584985E+01, 0.2078331003959482E+01, 0.1819938506810449E+01, 0.1751888604422140E+01, 0.1642765030717598E+01, 0.1391850148176030E+01, 0.1265614265169072E+01, 0.1192296172100378E+01, 0.1118290194286764E+01, 0.7471001949454404E+00, 0.6602310515087256E+00, 0.5223373748122110E+00, 0.3101567956620342E+00, 0.2634177676934227E+00, 0.1468471914237014E+00, 0.9669691105737251E-01, 0.6862527639473751E-01, 0.2251868425683227E-01, 0.2442899974694956E-02, 0.0000000000000000E+00, 0.3247526756203984E-07, 0.3301672636248404E-07, 0.1642765030717598E+01, 0.2849742554922193E-13, 0.2093860354423170E-09, 0.9504157619668633E-09, 0.1391850148176030E+01, 0.5471978423050590E-17, 0.2765846142955850E-06, 0.3763175370346248E-06, 0.1265614265169072E+01, 0.7099748146989106E-29, 0.8629250150360319E-06, 0.7218261937815504E-06, 0.1192296172100378E+01, 0.0000000000000000E+00, 0.1792585742344500E-05, 0.1391262462240339E-05, 0.1118290194286764E+01, 0.2158808112824856E-22, 0.2234228955499889E+02, 0.2234228955499888E+02, 0.1130000000000000E+03, 0.3253968253968254E+01, 0.7079646017699115E+01, 0.1273852622682608E-03, 0.6602310515087256E+00, 0.1370219837932689E-23, 0.6841106514156665E-04, 0.6915431692027581E-04, 0.5223373748122110E+00, 0.8086955524743426E-16, 0.3151324787101243E-03, 0.4936870820060986E-03, 0.3101567956620342E+00, 0.1690864291947714E-17, 0.5342613094053112E-03, 0.4525307423692253E-03, 0.2634177676934227E+00, 0.1569544193046020E-19, 0.8085628512848309E-03, 0.5320256570924908E-03, 0.1468471914237014E+00, 0.1725633230170963E-30, 0.2171574910172427E-04, 0.7393923467130197E-05, 0.9669691105737251E-01, 0.8185725058097063E-19, 0.6259416979424432E-04, 0.7993629240914341E-04, 0.6862527639473751E-01, 0.1144304443709360E-17, 0.8363460972147480E-05, 0.2145990923718838E-04, 0.2251868425683227E-01, 0.3423656328659191E-26, 0.4258124540743150E-02, 0.4456054742147899E-02, 0.2442899974694956E-02, 0.7553929676107889E-20, 0.1657093833399320E-01, 0.2123214045479585E-01}, + info: 0, + }, + { + z: []float64{0.5143465832338334E-01, 0.9671338481452775E+00, 0.2594126021369855E+00, 0.4887933538896223E+00, 0.4809357095031462E+00, 0.1648852435705869E+00, 0.5382296047886386E+00, 0.2404093745709619E+00, 0.5749849863516346E+00, 0.8755417117410101E+00, 0.6479432781744229E+00, 0.8462387170859478E+00, 0.1030360983310576E+00, 0.2790419505795448E+00, 0.2643216914883461E+00, 0.5072751399665939E+00, 0.9813013168637370E+00, 0.5270325239254721E+00, 0.1341185443667956E+00, 0.1666757001787883E+00, 0.8421762037577841E+00, 0.6333707418037352E+00, 0.9714076539879462E+00, 0.8133030640726957E-01, 0.5961674478430062E+00, 0.9962348063653491E+00, 0.9690228851917282E-02, 0.4933763527820312E-01, 0.1005560439675963E+00, 0.9794838233988775E+00, 0.8412211319105695E+00, 0.4530689238841823E+00, 0.9824397821984348E+00, 0.9435184376619912E+00, 0.5899369853858024E+00, 0.3347062982138894E+00, 0.6634688706474758E+00, 0.7781534216536603E+00, 0.5213269680559092E+00, 0.2415498257414400E+00, 0.4153017903771141E+00, 0.6142268391585892E-01, 0.1582256219487426E+00, 0.5180630943028907E+00, 0.2531248086553088E+00, 0.4588063905612799E+00, 0.9850645955475579E-01, 0.4386688206276981E+00, 0.6723312445641013E+00, 0.2417358982121058E+00, 0.9102202020018957E+00, 0.4790528316718639E+00, 0.8645283277006380E+00, 0.5896385561561974E+00, 0.3547186358320912E+00, 0.2570702739547999E+00, 0.8872414069371877E+00, 0.7977277358714381E+00, 0.2283476919840042E+00, 0.5481349489617042E+00, 0.9565429487676439E+00, 0.3941453871538936E-01, 0.2005355998230810E+00, 0.6815820255993522E+00, 0.8827641753074383E+00, 0.3721138471690448E+00, 0.3473678385941080E+00, 0.5958558861949184E+00, 0.5289126915593071E+00, 0.7848410946975201E+00, 0.9380898148044153E+00, 0.4238368524709774E+00, 0.9095202310640094E-01, 0.5205916750079600E+00, 0.3388678441932766E+00, 0.9218715971576251E+00, 0.2785357832665022E+00, 0.7353529037048490E+00, 0.3430576699659011E+00, 0.1583386336396764E-03, 0.1574217518812531E+00, 0.2808549182652627E+00, 0.9165809855463820E+00, 0.2729923295285186E-01}, + n: 21, + zOut: []float64{0.2740279952468604E+01, 0.2296796691149573E+01, 0.2162929780566866E+01, 0.2022438316208162E+01, 0.1971555203048247E+01, 0.1712998698314224E+01, 0.1596820997274643E+01, 0.1536702996895977E+01, 0.1112897445143912E+01, 0.8259900943746278E+00, 0.7751147071242228E+00, 0.6231241133597348E+00, 0.5263220334234422E+00, 0.4481765711163059E+00, 0.4215577615769598E+00, 0.1440581718410880E+00, 0.1296344814538628E+00, 0.5340807481344281E-01, 0.1871489185523312E-01, 0.3434703213692513E-02, 0.2376961512853157E-03, 0.2255238469879073E-22, 0.1711146112720571E-14, 0.5183409008081618E-15, 0.1596820997274643E+01, 0.0000000000000000E+00, 0.1075504130778587E-11, 0.4005497363076952E-12, 0.1536702996895977E+01, 0.1981618593915182E-26, 0.4700742807330894E-10, 0.1164621641126979E-09, 0.1112897445143912E+01, 0.4726602108594632E-24, 0.9459556816770867E-09, 0.1692486098434743E-08, 0.8259900943746278E+00, 0.0000000000000000E+00, 0.4245107391668450E-08, 0.4612248550244559E-08, 0.7751147071242228E+00, 0.8284213834597216E-21, 0.2112319338137411E+02, 0.2112319338137411E+02, 0.1000000000000000E+03, 0.2931972789115646E+01, 0.2000000000000000E+01, 0.1818678155237499E-07, 0.5263220334234422E+00, 0.4246772729828520E-23, 0.1119198730079850E-06, 0.4602199017952358E-06, 0.4481765711163059E+00, 0.1035379938102578E-29, 0.2940687130487931E-04, 0.4282452030972280E-04, 0.4215577615769598E+00, 0.5276311108751726E-20, 0.8277389737129399E-05, 0.6004055084531256E-05, 0.1440581718410880E+00, 0.0000000000000000E+00, 0.8355340113184283E-05, 0.1023986211128489E-04, 0.1296344814538628E+00, 0.1552281967638183E-19, 0.6343521312985942E-05, 0.6697527987420460E-05, 0.5340807481344281E-01, 0.6040133837432384E-17, 0.1556990792688111E-03, 0.3593183434334682E-03, 0.1871489185523312E-01, 0.1153562559317783E-18, 0.8237486079760113E-03, 0.4973426416094711E-03, 0.3434703213692513E-02, 0.0000000000000000E+00, 0.1008741049678482E-02, 0.1888495698860201E-02, 0.2376961512853157E-03, 0.2773339119917620E-31, 0.6098206042824776E-05, 0.1474144332182451E-03}, + info: 0, + }, + { + z: []float64{0.1099031735712288E+00, 0.5724174842808358E+00, 0.3122550743498126E+00, 0.7231231021981217E+00, 0.6175771623314344E+00, 0.5814310193624382E+00, 0.6423493353686718E+00, 0.8309609356975209E+00, 0.6400193102877816E-01, 0.8728840273137624E+00, 0.8682274216885312E+00, 0.7829529646382269E+00, 0.4658588928084396E+00, 0.4997300418007194E+00, 0.5750522308672811E+00, 0.5282811502940782E+00, 0.7877382060309071E+00, 0.2242905591148447E-01, 0.9672168595892823E+00, 0.9229185948074735E+00, 0.7120977511666169E+00, 0.9513613307832994E+00, 0.6495350224590044E+00, 0.1796094611119584E+00, 0.6238202085518583E+00, 0.4056553414984787E-01, 0.2863733551163383E-01, 0.7740758620163646E-01, 0.1652368945937387E+00, 0.5017774327613052E+00, 0.6445125305703996E+00, 0.5670374114090049E-01, 0.1147723121006077E+00, 0.5126855432858525E+00, 0.9526888308153642E+00, 0.1724272641761350E+00, 0.9682495468226523E+00, 0.2579549866163475E+00, 0.5365442422680400E+00, 0.7055455249537391E+00, 0.6510869341601188E+00, 0.6910931676909811E+00, 0.8245356137796966E+00, 0.2467134555988069E+00, 0.2932965007679977E-01, 0.3174819406165880E+00, 0.1008447548759832E+00, 0.7998426243165985E+00, 0.6780870841109060E+00, 0.2896057920811994E+00, 0.9303619290394473E+00, 0.3607716194531815E+00, 0.5211419140438559E+00, 0.1046120770241560E+00, 0.7683871590101677E+00, 0.2147990043395044E+00, 0.6702055898403114E+00, 0.2446830800671760E+00, 0.1275992810549672E+00, 0.9234458715873217E+00, 0.6974016894347440E+00, 0.2461420250226486E+00, 0.2448954779360711E+00, 0.1956976010946661E+00, 0.8608131397075515E+00, 0.7387865940798233E-01, 0.5053692911917109E+00, 0.3354069180988316E+00, 0.4024076719528004E+00, 0.5167351886997615E+00, 0.7829885112810930E-01, 0.3735275576161866E+00, 0.9546718920527260E+00, 0.5321377922787256E+00, 0.6121034951800618E+00, 0.8028222695558183E+00, 0.3295254582685344E+00, 0.5907471536091985E+00, 0.8247143229089846E+00, 0.1329486496858557E+00, 0.9484305946158008E+00, 0.4510190965747323E+00, 0.1159598040227069E+00, 0.7290524870797256E+00}, + n: 21, + zOut: []float64{0.2759844065448739E+01, 0.2469029941309663E+01, 0.2170232676307031E+01, 0.1960369893365743E+01, 0.1773994559660628E+01, 0.1654180064160601E+01, 0.1454572475268221E+01, 0.1398795476174613E+01, 0.1260788731803824E+01, 0.1011169812035994E+01, 0.9032283997666860E+00, 0.7344998632955592E+00, 0.6915613254033124E+00, 0.3097922830021908E+00, 0.2074097203460417E+00, 0.1750683611049406E+00, 0.1335859329381489E+00, 0.1070304609992355E+00, 0.6466361262660925E-01, 0.1024517112836532E-01, 0.4658519939343828E-03, 0.5916456789157589E-30, 0.2414839775472174E-07, 0.1563475838564645E-07, 0.1454572475268221E+01, 0.5710570490785520E-12, 0.1598956453701674E-05, 0.9938094799470723E-06, 0.1398795476174613E+01, 0.7078291130367095E-25, 0.1301105456376455E-06, 0.7650088290739393E-07, 0.1260788731803824E+01, 0.6660939091008025E-19, 0.3865722666202593E-07, 0.5454440035759107E-07, 0.1011169812035994E+01, 0.5414223942436753E-17, 0.3344051754361652E-04, 0.2635566037358100E-04, 0.9032283997666860E+00, 0.5272968833424410E-16, 0.2125052867814009E+02, 0.2125052867814008E+02, 0.1090000000000000E+03, 0.3179138321995465E+01, 0.2752293577981651E+01, 0.8667028517906969E-06, 0.6915613254033124E+00, 0.6016648435007899E-23, 0.2921486269254270E-05, 0.9773987035049091E-05, 0.3097922830021908E+00, 0.6500213859021137E-26, 0.6786203908623285E-05, 0.1231548092049969E-04, 0.2074097203460417E+00, 0.0000000000000000E+00, 0.7819652657144090E-06, 0.1217347772587842E-05, 0.1750683611049406E+00, 0.6582255393164123E-26, 0.1458540666485106E-06, 0.3789967922095048E-07, 0.1335859329381489E+00, 0.1232595164407831E-31, 0.4615373247666497E-05, 0.3177332815969559E-05, 0.1070304609992355E+00, 0.5947376905467984E-20, 0.9914288367235413E-05, 0.1492808588608919E-04, 0.6466361262660925E-01, 0.5865227530883812E-22, 0.3814164765172745E-05, 0.1095283410948310E-05, 0.1024517112836532E-01, 0.3761300629007363E-24, 0.3159730783704485E-04, 0.5907442037524074E-05, 0.4658519939343828E-03, 0.2094421310984266E-20, 0.1426408794386696E-02, 0.1350744215392459E-02}, + info: 0, + }, + { + z: []float64{0.1337238926382778E+00, 0.3106335653974364E+00, 0.8951406789337562E+00, 0.2282076226383426E+00, 0.3559900270036094E+00, 0.1333708564991680E+00, 0.9225357561814306E+00, 0.6383337981459615E+00, 0.7455817572577521E+00, 0.9604635037498299E-01, 0.1362822625756884E+00, 0.7894982141438661E+00, 0.5371956247017955E+00, 0.2757551089818502E+00, 0.9298698100988576E+00, 0.8755382224220718E+00, 0.2542040210765101E+00, 0.1287904754285962E+00, 0.6810846780454294E+00, 0.6526638813043742E+00, 0.5955845877046446E+00, 0.4670096896697419E+00, 0.5475207984291373E+00, 0.6684162034597571E+00, 0.5235410539200527E+00, 0.7337617639827179E+00, 0.8903194008545992E+00, 0.8072217495300122E+00, 0.3881183186356038E+00, 0.9675156751063907E+00, 0.4869149855955625E+00, 0.4861129300486463E+00, 0.5200718178308463E+00, 0.7592798686765068E+00, 0.7809192005748844E+00, 0.9939952535261979E+00, 0.4314053553650160E+00, 0.3880099380329156E+00, 0.9349849386467751E+00, 0.5291872418075704E+00, 0.7655812944336832E+00, 0.7077741471317599E+00, 0.5275519688342463E+00, 0.1415092279196126E+00, 0.1904335663118598E+00, 0.3699272115054363E+00, 0.7445484920377089E+00, 0.8400049615316296E+00, 0.8734700661006028E+00, 0.8683217518669656E+00, 0.8515176384024258E+00, 0.6202080985416659E+00, 0.3604998919630682E+00, 0.2403115969743893E+00, 0.9554672796937618E+00, 0.1693873282831592E+00, 0.5994144523705257E+00, 0.1384422941659869E-01, 0.6596251817370012E+00, 0.5636231004812753E+00, 0.5389166856740800E+00, 0.2607457441602791E+00, 0.5920539595206202E+00, 0.2966504229935458E+00, 0.5816050348468149E+00, 0.9328164339475690E+00, 0.5805507576670368E+00, 0.6771712743677023E+00, 0.9823651336988842E+00, 0.9793282488782439E+00, 0.4667245203343464E+00, 0.7134684364121646E+00, 0.4880671978756712E-01, 0.8383078993270572E+00, 0.7936419849408084E+00, 0.5385800856643647E+00, 0.4634644976924968E+00, 0.3931501879746360E+00, 0.1248524879525928E+00, 0.3152310060096000E+00, 0.9363438862709352E+00, 0.3520470715344234E+00, 0.1429338846554544E+00, 0.1326946626315275E+00}, + n: 21, + zOut: []float64{0.2657315323020249E+01, 0.2572905823883155E+01, 0.2192663626292596E+01, 0.2071095653426940E+01, 0.2044494413445205E+01, 0.1999166174223334E+01, 0.1788414821296782E+01, 0.1468335212647637E+01, 0.1398203839606685E+01, 0.1347197234417596E+01, 0.1032902470665773E+01, 0.6608948302945201E+00, 0.5911878145202527E+00, 0.5378924504889658E+00, 0.3142273934265400E+00, 0.2842363451796606E+00, 0.2019484989227465E+00, 0.1206949829709270E+00, 0.7426269792367300E-01, 0.2567909008435554E-01, 0.2199972943425967E-02, 0.1467781105980630E-22, 0.1166962122444304E-12, 0.3923264640094201E-13, 0.1788414821296782E+01, 0.4047127357551305E-19, 0.1945479305169457E-09, 0.9334440121571419E-10, 0.1468335212647637E+01, 0.0000000000000000E+00, 0.9722951216797492E-08, 0.1689489155058893E-07, 0.1398203839606685E+01, 0.0000000000000000E+00, 0.7669133926546234E-07, 0.4506074380002258E-07, 0.1347197234417596E+01, 0.5319335283638860E-18, 0.5446647026201709E-11, 0.3163064243829271E-10, 0.1032902470665773E+01, 0.4430813007685208E-16, 0.2338591866968101E+02, 0.2338591866968102E+02, 0.1020000000000000E+03, 0.3054421768707483E+01, 0.2941176470588236E+01, 0.1546723845733498E-03, 0.5911878145202527E+00, 0.3652829585034170E-19, 0.1702044288822486E-03, 0.2177596193354961E-03, 0.5378924504889658E+00, 0.1350864780951217E-19, 0.2554902108144373E-06, 0.3466691719880105E-07, 0.3142273934265400E+00, 0.2387932220615686E-11, 0.6740109938598231E-04, 0.1019437079103270E-03, 0.2842363451796606E+00, 0.4338734978715565E-28, 0.4438729696644533E-03, 0.6983868198931385E-03, 0.2019484989227465E+00, 0.2612058427213185E-17, 0.1559412966194519E-03, 0.4467949014161081E-04, 0.1206949829709270E+00, 0.7367960854764250E-27, 0.5572085070843593E-03, 0.6756387538188178E-03, 0.7426269792367300E-01, 0.4936220984925504E-18, 0.5280924471496804E-02, 0.4881438130898638E-02, 0.2567909008435554E-01, 0.4675428386128583E-22, 0.7885638578366546E-02, 0.6344653647355715E-02, 0.2199972943425967E-02, 0.1043187069080892E-15, 0.1144606019330652E-02, 0.5299576363060843E-02}, + info: 0, + }, + { + z: []float64{0.2890643798273074E-01, 0.8912209063965303E+00, 0.7091793456137876E+00, 0.8245039023218966E+00, 0.5191833323605244E+00, 0.9894484508239253E+00, 0.5658659268235589E-01, 0.1289734762146678E+00, 0.3341027001588562E+00, 0.6587235353882195E+00, 0.7097532970603662E+00, 0.5025058684824796E+00, 0.5130835936402325E+00, 0.6692657853529054E+00, 0.2879265169895939E+00, 0.8181258306911487E-01, 0.2380388408780171E+00, 0.1056636973917433E+00, 0.4227669640232596E+00, 0.8862610364887391E+00, 0.3174262171725216E+00, 0.4110634725577023E+00, 0.6279625314936111E+00, 0.2325114979496041E+00, 0.5638889949786475E+00, 0.7596856267416864E+00, 0.8240081240110467E+00, 0.9973320050910897E+00, 0.5587421997876323E+00, 0.4288334013103122E+00, 0.8314043340979348E+00, 0.5650188659610876E+00, 0.2964679109455457E+00, 0.8407175605087841E+00, 0.1058970658656445E+00, 0.6883026296612506E+00, 0.9166830669002658E+00, 0.7992763288082885E+00, 0.5373538962118501E+00, 0.8167960120885054E-01, 0.9998997916538879E+00, 0.1975674901149639E+00, 0.7582212604798201E+00, 0.2860808530483561E+00, 0.5862675745609662E+00, 0.4334284293442484E+00, 0.9545191575190999E+00, 0.5542276060509370E+00, 0.9135493345204525E+00, 0.9597250519108470E+00, 0.4020434518393716E+00, 0.2147209304773570E+00, 0.8396072187357826E+00, 0.5371494282057584E+00, 0.9930506172699961E+00, 0.3818967451326610E+00, 0.8312670748053316E+00, 0.7518558266385443E+00, 0.7897281313428761E+00, 0.4898691976861856E+00, 0.9259118998644267E+00, 0.2411762039549979E+00, 0.3003769542607895E+00, 0.9868194969589331E+00, 0.1841003538786936E+00, 0.1211293694641126E+00, 0.7968556025054743E+00, 0.5500013093928259E+00, 0.1705581246551358E-01, 0.5695318221187962E-02, 0.1626907733376057E+00, 0.3178865594423397E-01, 0.6489383021126400E+00, 0.3661200730578906E-01, 0.9937238435410299E+00, 0.8693948290233534E+00, 0.8108974262339508E-01, 0.4858895290851201E+00, 0.5417752479164495E+00, 0.3742432440371155E+00, 0.4593696265617863E+00, 0.7058043658513553E+00, 0.3505553117224474E+00, 0.9647100571711842E+00}, + n: 21, + zOut: []float64{0.2698643664756728E+01, 0.2430046536911446E+01, 0.2385739474636754E+01, 0.2028138720182182E+01, 0.1901894919230603E+01, 0.1736372633374239E+01, 0.1325608228839813E+01, 0.1300504895564844E+01, 0.1261345481029282E+01, 0.1136052475360616E+01, 0.1031365869480280E+01, 0.7689316276636458E+00, 0.5233321832080760E+00, 0.4817169321317593E+00, 0.3418348106633131E+00, 0.2652183763191593E+00, 0.1871042345023881E+00, 0.9160826173360032E-01, 0.4317601760647842E-01, 0.3303497213448481E-02, 0.1231458285303120E-03, 0.9226440439387837E-18, 0.2555628409159789E-14, 0.2440793084913596E-14, 0.1325608228839813E+01, 0.0000000000000000E+00, 0.5589422112493051E-13, 0.3085898188945034E-13, 0.1300504895564844E+01, 0.7444625512849138E-23, 0.1759654299048522E-12, 0.9781103208866350E-13, 0.1261345481029282E+01, 0.6802337789204302E-18, 0.3650786119252150E-16, 0.3306223266172732E-17, 0.1136052475360616E+01, 0.9063201483067583E-22, 0.4434055300668524E-09, 0.2614666143660316E-09, 0.1031365869480280E+01, 0.2213258132402469E-23, 0.2194206198623719E+02, 0.2194206198623719E+02, 0.1100000000000000E+03, 0.3090702947845805E+01, 0.2727272727272727E+01, 0.1493749053307339E-05, 0.5233321832080760E+00, 0.6795157417200880E-17, 0.4382394072074649E-04, 0.6871024518289093E-04, 0.4817169321317593E+00, 0.6227468015696590E-20, 0.2332676874935389E-03, 0.1644354889791431E-03, 0.3418348106633131E+00, 0.8455074291031222E-24, 0.5211421342985135E-03, 0.2133578004049512E-03, 0.2652183763191593E+00, 0.4572942646937810E-19, 0.1472671843690071E-04, 0.1084821769416695E-04, 0.1871042345023881E+00, 0.4930380657631324E-31, 0.2208706795255935E-03, 0.1179477310012027E-03, 0.9160826173360032E-01, 0.2210123199165121E-23, 0.1806566548732391E-03, 0.1927419907906541E-03, 0.4317601760647842E-01, 0.5416053917983313E-23, 0.1030445327331746E-02, 0.1902956416897231E-02, 0.3303497213448481E-02, 0.8065145389241560E-19, 0.2031248978330205E-02, 0.9946626682395031E-03, 0.1231458285303120E-03, 0.1613264727387662E-23, 0.1026826157383968E-01, 0.7685291223570192E-02}, + info: 0, + }, + { + z: []float64{0.9180725347208115E+00, 0.2301506372544524E+00, 0.2276838071944142E+00, 0.3342400207211600E+00, 0.9639463843013925E+00, 0.5437724527901152E+00, 0.1580993234156807E+00, 0.7877490287014776E+00, 0.3507533849023979E+00, 0.8833112450245699E+00, 0.3185731691946991E-01, 0.4118134066759526E+00, 0.8069686780110494E+00, 0.8681061806796153E-01, 0.6859948674552803E+00, 0.3663178920382139E+00, 0.3720291416615038E+00, 0.8903287156706564E+00, 0.1324429304812152E+00, 0.1008541223140741E+00, 0.8373883396136816E-01, 0.6715628313581425E+00, 0.1594467086953334E+00, 0.5413131938455139E+00, 0.1818140526389971E+00, 0.8685248287187100E+00, 0.5132298455242696E+00, 0.6886095101515632E+00, 0.4005049001067575E+00, 0.6084237383755163E+00, 0.7877676299774720E+00, 0.7102138904901485E+00, 0.6423372229000449E+00, 0.5613660527307726E+00, 0.9158966894941798E+00, 0.4933711427035579E+00, 0.7338439214039514E+00, 0.9908978412238557E+00, 0.5798575644928616E-01, 0.8977291910051136E+00, 0.9253772304099678E+00, 0.3904911857418987E+00, 0.4422593302764081E+00, 0.8489177311215401E+00, 0.7212670509555793E+00, 0.9615617648004515E+00, 0.8226716687395509E+00, 0.9612871412036802E+00, 0.1291974168797438E-01, 0.4488531482063538E+00, 0.2469769340642032E+00, 0.3614360453900619E+00, 0.2074351009622584E+00, 0.7016685284881871E+00, 0.1548060648394445E-01, 0.7311687113133817E+00, 0.9296728393442250E+00, 0.9396166536686752E+00, 0.8501954423645642E+00, 0.4336964896981472E+00, 0.6496017727538979E+00, 0.4464862127725214E+00, 0.4878335970157573E+00, 0.3486784051750773E+00, 0.7455411052079824E+00, 0.5444043691163374E+00, 0.3832092245164885E+00, 0.2030848069834680E+00, 0.9785068556455849E+00, 0.4981273340936699E+00, 0.2968547769748885E+00, 0.8139137104995479E+00, 0.5979876314385963E+00, 0.7890959952347512E+00, 0.1396638856742113E+00, 0.6423356747667288E+00, 0.4204101650717844E+00, 0.3861511203891811E+00, 0.5255853602620404E+00, 0.8105960955427686E+00, 0.1919308380441287E-01, 0.5308532240470543E-01, 0.3836913823972644E+00, 0.5510156269652182E+00}, + n: 21, + zOut: []float64{0.2573005090179951E+01, 0.2214810120454235E+01, 0.1922733254389488E+01, 0.1915272191491466E+01, 0.1796031325760082E+01, 0.1645710570695390E+01, 0.1570469265391087E+01, 0.1354841927194508E+01, 0.1294466452193999E+01, 0.1181212352080131E+01, 0.1084541549607215E+01, 0.7996017680870424E+00, 0.7671322760534200E+00, 0.5413194973828868E+00, 0.4525283650095193E+00, 0.2478901170080125E+00, 0.2160828479985811E+00, 0.1019188530491480E+00, 0.3154199687907010E-01, 0.6039114283538317E-02, 0.2585297601905087E-05, 0.1842779074596284E-25, 0.3846373205279405E-07, 0.1879918241657939E-07, 0.1570469265391087E+01, 0.5301607341005493E-20, 0.5291292043249480E-06, 0.9680604951014117E-06, 0.1354841927194508E+01, 0.4298088920574052E-25, 0.7835178780587823E-04, 0.5534134534297650E-04, 0.1294466452193999E+01, 0.1009741958682895E-27, 0.1198198722705974E-04, 0.2465537083987539E-04, 0.1181212352080131E+01, 0.6309019138365174E-17, 0.1614759348306573E-06, 0.9017894254302745E-07, 0.1084541549607215E+01, 0.2228464273087314E-11, 0.2171715152048637E+02, 0.2171715152048638E+02, 0.1110000000000000E+03, 0.3170068027210884E+01, 0.4504504504504505E+01, 0.2430910851731611E-05, 0.7671322760534200E+00, 0.2706512346053632E-23, 0.6377722122869933E-05, 0.4589261521941547E-05, 0.5413194973828868E+00, 0.6745076284001739E-23, 0.1892848367477632E-04, 0.2486261833151780E-04, 0.4525283650095193E+00, 0.4943696629711454E-24, 0.8902582280300076E-04, 0.6878116767917398E-04, 0.2478901170080125E+00, 0.2843433355651033E-22, 0.3448699135776589E-03, 0.2736188045956721E-03, 0.2160828479985811E+00, 0.6002787666751380E-18, 0.2577148216451160E-04, 0.6049628369117275E-04, 0.1019188530491480E+00, 0.1341063538875720E-28, 0.1448550797531803E-02, 0.1280708514177034E-02, 0.3154199687907010E-01, 0.6162975822039155E-32, 0.1183522807025889E-02, 0.1098677799367788E-02, 0.6039114283538317E-02, 0.2067951531379678E-24, 0.3575820084217755E-02, 0.2195872556012757E-02, 0.2585297601905087E-05, 0.1137373342260413E-23, 0.1063898509008824E-02, 0.9861644892506420E-03}, + info: 0, + }, + { + z: []float64{0.9985296910189717E+00, 0.8831740589213332E+00, 0.2324113848518039E+00, 0.7533238559688371E+00, 0.3064992106368385E+00, 0.3932363212439300E+00, 0.5064743635322475E+00, 0.2720810167440399E+00, 0.1759478514683438E+00, 0.1390889491193166E+00, 0.1132483424706631E+00, 0.7690628781223635E+00, 0.9618570638759271E+00, 0.5440138404508711E+00, 0.4137500693527351E+00, 0.1092888165750733E+00, 0.3873107100859553E+00, 0.6511277223354393E+00, 0.2155123791160785E-02, 0.9398729888067584E+00, 0.6720352720616287E+00, 0.1535603342192503E+00, 0.1531061200685264E+00, 0.7545904619621174E+00, 0.7663253741916968E+00, 0.9523625338296001E+00, 0.7564452546028717E+00, 0.3871338859213032E+00, 0.8414924166180344E+00, 0.9656526120147547E+00, 0.8983142486291256E+00, 0.4931225086134777E+00, 0.2402429523967143E+00, 0.2566457485714786E+00, 0.6291482026295649E+00, 0.3102713820139572E+00, 0.8907835976003569E+00, 0.7576089622962475E+00, 0.4268794706004859E+00, 0.9679759265393412E+00, 0.8761096912299335E+00, 0.8367482459498927E+00, 0.6924039391525048E+00, 0.1390797616032549E+00, 0.4788493402292462E+00, 0.4619292003991998E+00, 0.6108276748986761E+00, 0.4236594210420574E-01, 0.1642264441572165E+00, 0.3019681501044491E+00, 0.6872347566608095E-01, 0.4797791709329366E+00, 0.3191437336153862E+00, 0.4231397520665843E+00, 0.9123119461602809E+00, 0.4032629658718287E+00, 0.3761450089120290E+00, 0.1152232563042578E+00, 0.9954630682646954E+00, 0.5373824202779058E+00, 0.6106178691724040E-01, 0.8364420731639322E-01, 0.8933845816890847E+00, 0.5581653322395922E+00, 0.2899731736068278E-01, 0.1770979452363362E+00, 0.5004901441174880E-01, 0.7090935149513330E+00, 0.6196074778714252E+00, 0.7620558730426811E+00, 0.3663579087238161E+00, 0.7799033559850937E+00, 0.5196335588513137E+00, 0.2674625162438964E+00, 0.2943854187199277E+00, 0.7770221064689762E+00, 0.1654873860303906E+00, 0.1664508117665333E+00, 0.4846990191351895E+00, 0.8900931539882498E+00, 0.1193560423223905E-01, 0.7974122776570580E+00, 0.1940680748090599E+00, 0.6554519288132757E+00}, + n: 21, + zOut: []float64{0.2834962035267250E+01, 0.2457739633394971E+01, 0.2412615740112653E+01, 0.2205350258735166E+01, 0.2102070731548960E+01, 0.1691268502125131E+01, 0.1682341944223941E+01, 0.1365229052855181E+01, 0.1159748452086257E+01, 0.1104152264055237E+01, 0.9082896055849982E+00, 0.8350561719565637E+00, 0.6006322679527780E+00, 0.5944104151258589E+00, 0.3054714512857917E+00, 0.1934898777304675E+00, 0.1070106456037005E+00, 0.7977404013852835E-01, 0.4467492857453391E-01, 0.1796045849894196E-01, 0.1273912617121224E-04, 0.5392013224803094E-11, 0.7047397633000775E-04, 0.4975950204285101E-04, 0.1682341944223941E+01, 0.0000000000000000E+00, 0.1776257168565356E-04, 0.2478687660984077E-04, 0.1365229052855181E+01, 0.2904595710528663E-17, 0.2723859519581362E-08, 0.9106491605280572E-08, 0.1159748452086257E+01, 0.1011100673149366E-15, 0.1332628661445848E-04, 0.5871026575773219E-05, 0.1104152264055237E+01, 0.8308334390451641E-18, 0.8332699889408906E-05, 0.9212653513444334E-05, 0.9082896055849982E+00, 0.3518078502828044E-18, 0.2270226121598308E+02, 0.2270226121598308E+02, 0.1240000000000000E+03, 0.3505668934240363E+01, 0.5645161290322581E+01, 0.2479678732743906E-05, 0.6006322679527780E+00, 0.0000000000000000E+00, 0.7879659138115500E-06, 0.7199236433698600E-06, 0.5944104151258589E+00, 0.3024585909035025E-20, 0.8203337497349541E-06, 0.8765068833865939E-06, 0.3054714512857917E+00, 0.4733165431326071E-26, 0.3737214231038995E-06, 0.3923468144379782E-06, 0.1934898777304675E+00, 0.4260044778133448E-20, 0.3232147542049518E-06, 0.3376352641996194E-06, 0.1070106456037005E+00, 0.3308722450212072E-23, 0.5070207875063323E-06, 0.4107488228647395E-06, 0.7977404013852835E-01, 0.6162975822039155E-32, 0.1529214528521930E-08, 0.6332986682625979E-08, 0.4467492857453391E-01, 0.1074272623509048E-20, 0.2583088473438835E-04, 0.1663016813733052E-04, 0.1796045849894196E-01, 0.7053209140113412E-22, 0.1477449551257491E-03, 0.9547349784916723E-04, 0.1273912617121224E-04, 0.0000000000000000E+00, 0.2066074227952428E-02, 0.2903362394245088E-02}, + info: 0, + }, + { + z: []float64{0.9711900205601530E+00, 0.1638861523026915E+00, 0.1833187318057834E+00, 0.9072755753374127E+00, 0.2283578849017619E+00, 0.7520216236020175E+00, 0.3999380553956507E+00, 0.2624503967963340E+00, 0.4831766333071612E+00, 0.5439216550253211E+00, 0.6414566703448968E+00, 0.4958417903972772E+00, 0.6484413600580574E+00, 0.7544273119845675E+00, 0.7061059155531373E+00, 0.9606326194792012E+00, 0.5067069535242709E+00, 0.3029510615023524E+00, 0.6987030441702768E+00, 0.9783205951302908E+00, 0.1548952654742521E+00, 0.9315036439248046E+00, 0.5516706717897903E+00, 0.5168328579759034E+00, 0.3596295330063849E+00, 0.4476574932894306E-01, 0.9741728325615778E+00, 0.2804678894509116E-01, 0.3902916772468864E+00, 0.8530466945184888E+00, 0.2969904800916723E-01, 0.1860020491995459E+00, 0.7523094177753908E-01, 0.1049676044274535E+00, 0.9260152605248726E+00, 0.4316992548719201E+00, 0.7469073285915341E+00, 0.9833774639100495E+00, 0.4974597252506658E+00, 0.4177634673241238E+00, 0.2822911131407428E+00, 0.8441017127353869E+00, 0.3634452570924520E+00, 0.3139202807660985E+00, 0.3006600055674361E+00, 0.3009046530704764E+00, 0.5749841775931973E+00, 0.8312625997674838E+00, 0.7353697939061690E+00, 0.5347208541042444E+00, 0.3745659295783104E+00, 0.2530774659476339E+00, 0.4186076940004666E+00, 0.9926397860987635E+00, 0.9744627902125954E+00, 0.5156862870399348E-01, 0.9609885826474012E+00, 0.1340044668459911E+00, 0.4269295726396694E+00, 0.1323606439861225E+00, 0.9547002490565327E+00, 0.3235500895339022E+00, 0.9408694232081565E+00, 0.5256315334453321E-01, 0.5435043012268493E+00, 0.8290694048290136E+00, 0.3690485876123201E+00, 0.1315626820984572E+00, 0.7782838224801890E+00, 0.4824080201008953E+00, 0.4904940544366522E+00, 0.7125669967024466E+00, 0.2079010288312985E+00, 0.3154779356788950E+00, 0.8039212621301359E+00, 0.1606576564727077E+00, 0.9470564071979923E+00, 0.9189825217362574E+00, 0.4332760074849629E+00, 0.2823180730446854E+00, 0.8869162317432342E+00, 0.9632623909785668E+00, 0.5010388463829042E+00, 0.4287967421178640E+00}, + n: 21, + zOut: []float64{0.2578695081979337E+01, 0.2397185171350384E+01, 0.2122428254475021E+01, 0.1845603260474165E+01, 0.1680081614592041E+01, 0.1588339204725779E+01, 0.1309467974766432E+01, 0.1299839243529426E+01, 0.1209324813016549E+01, 0.1078225499420584E+01, 0.1021574489264402E+01, 0.8212075951361281E+00, 0.6252200086865959E+00, 0.5691142568406321E+00, 0.4167987738801949E+00, 0.2624912719101158E+00, 0.1530089161378868E+00, 0.6867147881453296E-01, 0.2505166907249862E-01, 0.2349256929716605E-02, 0.7151879759250424E-03, 0.1577721810442024E-29, 0.4511324342265551E-10, 0.2432911773654117E-10, 0.1309467974766432E+01, 0.0000000000000000E+00, 0.2950215161815511E-09, 0.4606013118502744E-09, 0.1299839243529426E+01, 0.0000000000000000E+00, 0.1717787641934460E-08, 0.1104907179077728E-08, 0.1209324813016549E+01, 0.2227112107619961E-25, 0.8047601721100021E-14, 0.3064349892439287E-13, 0.1078225499420584E+01, 0.1519533811285116E-12, 0.1082897652895214E-09, 0.2849698526408556E-09, 0.1021574489264402E+01, 0.9160719227198137E-18, 0.2107539302297835E+02, 0.2107539302297835E+02, 0.1110000000000000E+03, 0.3317460317460318E+01, 0.3603603603603604E+01, 0.1689224645784323E-04, 0.6252200086865959E+00, 0.1615587133892632E-26, 0.8276137867398754E-04, 0.1155304449854771E-03, 0.5691142568406321E+00, 0.1852884571782062E-20, 0.2098842504693311E-03, 0.1630830816462844E-03, 0.4167987738801949E+00, 0.7013543182763534E-16, 0.5750632050789642E-07, 0.3137720527277731E-06, 0.2624912719101158E+00, 0.1295300917428640E-14, 0.8049639874935534E-04, 0.1584688939577041E-03, 0.1530089161378868E+00, 0.3636550670570672E-17, 0.1206768167404478E-03, 0.2128462525136164E-03, 0.6867147881453296E-01, 0.4176548246217679E-19, 0.3626791442965051E-04, 0.6269592722343766E-04, 0.2505166907249862E-01, 0.8628166150854817E-31, 0.1144078296038157E-02, 0.1062123559861287E-02, 0.2349256929716605E-02, 0.1853343815383365E-22, 0.1348818609641394E-03, 0.1209095310981735E-04, 0.7151879759250424E-03, 0.2331746618088476E-23, 0.3639492207606013E-03, 0.1002254703741813E-03}, + info: 0, + }, + { + z: []float64{0.5145122753774686E+00, 0.7453791781450037E+00, 0.4937919697078275E-01, 0.9600912461125237E+00, 0.5558575009096904E+00, 0.9202496102671529E+00, 0.1803962777705234E+00, 0.6732582413383450E+00, 0.3646300420523177E+00, 0.4351523227625338E+00, 0.5258615952095320E+00, 0.2618724553334706E-01, 0.6600255279090639E+00, 0.4323183918305084E+00, 0.2184526174816337E+00, 0.7758998738943313E+00, 0.3700044944947983E+00, 0.9075309916724112E+00, 0.7873590137849384E-02, 0.6422780210226944E+00, 0.7012374235504933E+00, 0.3225317189575561E-01, 0.9626413579028830E+00, 0.2957325301869758E+00, 0.9393912496594896E+00, 0.3122772343061888E+00, 0.3372582329155205E-01, 0.6694758703662361E+00, 0.5160501222108982E-03, 0.9689575293997177E-01, 0.3780626069308365E+00, 0.1243877469635841E+00, 0.3753610862140089E+00, 0.7686454249086220E+00, 0.8958999262270639E+00, 0.9484254659678725E+00, 0.7229120985603210E-01, 0.7282046499931183E+00, 0.1602916509824523E+00, 0.3708722215113680E+00, 0.5328491413896952E+00, 0.7547173918812869E+00, 0.4313535833192655E+00, 0.5849601017371611E+00, 0.5030126650939655E+00, 0.3345267020968724E+00, 0.8264894134567216E+00, 0.3997968176112487E+00, 0.7977852660508306E+00, 0.3214021056175872E+00, 0.4636510192825659E+00, 0.6796405156053968E+00, 0.6279823358542748E+00, 0.1573806073104234E-01, 0.6382889890358745E-01, 0.5417145287154319E+00, 0.2343304174607242E+00, 0.7662339681589646E+00, 0.6291880658725347E+00, 0.5139706179483768E+00, 0.1583956600060378E+00, 0.9391868842090931E+00, 0.2645051239078070E+00, 0.7814123021217941E+00, 0.8945112708258808E+00, 0.7464898217422987E+00, 0.3770460515219444E+00, 0.3622886345531428E+00, 0.2208273216958112E-01, 0.7102940678247979E+00, 0.2735151315490909E+00, 0.4039400600381490E+00, 0.9317363313474538E+00, 0.5754441557390587E+00, 0.5886999087747160E+00, 0.3030246870939485E+00, 0.8507721951782303E+00, 0.3043440840669203E+00, 0.6021496993262363E+00, 0.4505272689007913E+00, 0.3874595231430722E+00, 0.2566155965014733E+00, 0.2521494866083717E+00, 0.7091848125152684E+00}, + n: 21, + zOut: []float64{0.2432728498446405E+01, 0.2127807422546525E+01, 0.1810603620342434E+01, 0.1754551066335428E+01, 0.1442239744319712E+01, 0.1358471286041730E+01, 0.1268104094970585E+01, 0.1166598518949770E+01, 0.1142749842956014E+01, 0.8038795081997708E+00, 0.7842646316799070E+00, 0.7340488722153766E+00, 0.6406325830516326E+00, 0.6326463399427553E+00, 0.4829120798428922E+00, 0.4021501496449236E+00, 0.3628067219099092E+00, 0.1315077965186685E-01, 0.3447035773652165E-02, 0.9829838131645125E-03, 0.5542446906743292E-07, 0.3726944967513355E-18, 0.7775649827661083E-15, 0.4707679240410040E-15, 0.1268104094970585E+01, 0.4204313080465905E-25, 0.2081271826241763E-14, 0.3549560565109884E-14, 0.1166598518949770E+01, 0.0000000000000000E+00, 0.3900682806423283E-13, 0.2423637210496787E-13, 0.1142749842956014E+01, 0.1408856084028437E-16, 0.9605918786201080E-13, 0.6043593726409546E-13, 0.8038795081997708E+00, 0.8160364745046778E-12, 0.9063031760991450E-12, 0.1255592191298957E-11, 0.7842646316799070E+00, 0.2274746684496083E-23, 0.1936477583605892E+02, 0.1936477583605892E+02, 0.1150000000000000E+03, 0.3673469387755102E+01, 0.7826086956521739E+01, 0.1055105767279683E-11, 0.6406325830516326E+00, 0.7534418653829021E-12, 0.2026915084594321E-10, 0.1938443898507311E-10, 0.6326463399427553E+00, 0.7428954317778491E-22, 0.1822158222411987E-10, 0.2310105649781206E-10, 0.4829120798428922E+00, 0.6818472407494482E-21, 0.4806621018591031E-08, 0.3430760494577760E-08, 0.4021501496449236E+00, 0.9407638730741502E-13, 0.4934881466368944E-07, 0.7682525823543034E-07, 0.3628067219099092E+00, 0.4641733924717305E-17, 0.3006332568302334E-06, 0.4841414710438772E-06, 0.1315077965186685E-01, 0.0000000000000000E+00, 0.4649166787994157E-03, 0.6126205080519521E-03, 0.3447035773652165E-02, 0.0000000000000000E+00, 0.8654037114492079E-03, 0.1518309118546661E-02, 0.9829838131645125E-03, 0.2948446519354054E-25, 0.2136365904689920E-10, 0.9493111427282873E-09, 0.5542446906743292E-07, 0.0000000000000000E+00, 0.8210503952597113E-02, 0.1866280792966489E-03}, + info: 0, + }, + { + z: []float64{0.1382149566425072E+00, 0.6575474867299980E+00, 0.6348472674088155E+00, 0.2171300387013793E+00, 0.8255967246227341E+00, 0.3006539504418347E+00, 0.2997341048143420E+00, 0.8472159875058289E+00, 0.6738978429295159E+00, 0.5424646868297128E+00, 0.4120014569672862E+00, 0.8343380028244362E+00, 0.3003911043596160E+00, 0.4710045367840567E+00, 0.4862652198104067E-01, 0.7471894777046170E+00, 0.1793049886163456E+00, 0.7023511329140396E+00, 0.7338019696975340E-02, 0.6396982308318109E+00, 0.9907774162255600E-01, 0.9295761484947797E+00, 0.9648060362942152E+00, 0.9280158186031068E+00, 0.2707915909911263E-01, 0.3838735516497237E+00, 0.1682677327524866E+00, 0.2113105759433432E+00, 0.9045861188128749E+00, 0.7471063495001966E+00, 0.8342180430544732E-01, 0.1412979915701199E+00, 0.8279925714974835E+00, 0.1155895711297670E+00, 0.9231783969041454E+00, 0.3728782651185074E+00, 0.6830046202574890E+00, 0.9069008465878121E+00, 0.9754648591267837E+00, 0.8893150707687680E-01, 0.6771275111272185E+00, 0.9913978119103384E+00, 0.7253101374756428E+00, 0.9967636737323063E+00, 0.8627812047783159E+00, 0.3179382291892185E-01, 0.3971194218951257E+00, 0.1929798662828303E+00, 0.8983406738830656E+00, 0.8696986427722838E+00, 0.1626550211323166E+00, 0.5446758738044107E+00, 0.7791897500950196E+00, 0.5495589328822522E+00, 0.2598162756138545E+00, 0.4878822167962611E+00, 0.1063554708684851E+00, 0.9205986422545666E+00, 0.2525019548845375E+00, 0.6202404757545382E+00, 0.4398012123976176E+00, 0.3367811528280380E+00, 0.2846930465290612E+00, 0.3637854092863660E+00, 0.2816012898088578E+00, 0.8253973364224151E+00, 0.1068693035499244E+00, 0.6335234891165292E+00, 0.4457012705011152E+00, 0.3822128202770037E-01, 0.8044679788500431E-02, 0.1644333417433916E+00, 0.8243501026702226E+00, 0.3724822902257573E+00, 0.3284619434713851E+00, 0.8284230195063381E+00, 0.9834160248288059E+00, 0.5390643127606534E+00, 0.4874602694948874E+00, 0.3393327340444893E+00, 0.9478697182248690E+00, 0.9005921446100461E+00, 0.6870582101064761E+00, 0.8753727823211164E+00}, + n: 21, + zOut: []float64{0.2520205603715150E+01, 0.2467591671122728E+01, 0.2156156465592955E+01, 0.1830603796963098E+01, 0.1688980285573207E+01, 0.1475729352347043E+01, 0.1457403847234258E+01, 0.1216096979409916E+01, 0.1020221539309743E+01, 0.9109792709218910E+00, 0.7786685137433046E+00, 0.6943983149907305E+00, 0.5952732619368740E+00, 0.5747064141061984E+00, 0.4193783470766816E+00, 0.2849493660130012E+00, 0.2000335007304226E+00, 0.1879518797669419E+00, 0.9250201866750386E-01, 0.6720326503698931E-01, 0.2522304426258675E-08, 0.0000000000000000E+00, 0.6146929522129176E-12, 0.1808448588630822E-11, 0.1457403847234258E+01, 0.4890937612370273E-28, 0.1829381779873047E-10, 0.6063479072736104E-11, 0.1216096979409916E+01, 0.3707772472283591E-24, 0.7129364201262979E-09, 0.6841733798178873E-09, 0.1020221539309743E+01, 0.2138261883449577E-21, 0.5257033338238628E-09, 0.5072654023074907E-09, 0.9109792709218910E+00, 0.7953858577580093E-22, 0.4258628064439383E-09, 0.4402488234184115E-09, 0.7786685137433046E+00, 0.2050608176139579E-11, 0.2063903369678094E+02, 0.2063903369678095E+02, 0.1070000000000000E+03, 0.3256235827664399E+01, 0.7476635514018692E+01, 0.2680505535092421E-09, 0.5952732619368740E+00, 0.3490920289236852E-22, 0.2767075275933556E-09, 0.2579359628684292E-09, 0.5747064141061984E+00, 0.6550779105727953E-17, 0.5565909614599560E-09, 0.4340922452181151E-09, 0.4193783470766816E+00, 0.3307688474446419E-20, 0.4344481061547019E-08, 0.2950068756973984E-08, 0.2849493660130012E+00, 0.2114500635677851E-23, 0.2105683914952377E-07, 0.1386409244069912E-07, 0.2000335007304226E+00, 0.2552627671550359E-24, 0.1231406445198996E-06, 0.7724199195397155E-07, 0.1879518797669419E+00, 0.2762617809804602E-19, 0.3259696859933768E-06, 0.5428848805276070E-06, 0.9250201866750386E-01, 0.2465190328815662E-31, 0.5308529636258477E-04, 0.3674504775836459E-04, 0.6720326503698931E-01, 0.4910144116114772E-20, 0.8312610965835068E-03, 0.3682729181838852E-03, 0.2522304426258675E-08, 0.0000000000000000E+00, 0.2850162708346282E-01, 0.1272924532804709E-01}, + info: 0, + }, + { + z: []float64{0.8107097465650837E+00, 0.6284212325752714E-02, 0.8801609468679439E-01, 0.1317925189426976E+00, 0.7816238529622888E+00, 0.5138440552812117E+00, 0.8491910920486024E+00, 0.5354109734403600E-01, 0.9922209940223927E+00, 0.5302203883752287E+00, 0.7634020308181488E-01, 0.1679415943232965E+00, 0.2329711998757648E+00, 0.1414305919938111E+00, 0.1841480420952157E-01, 0.3417588803467335E+00, 0.2555749764808386E+00, 0.5793635436480560E-01, 0.5867939998055902E+00, 0.9699556000711096E+00, 0.2545002439558014E+00, 0.6318762794888357E+00, 0.3917398730545906E+00, 0.5624711052874073E+00, 0.4151753215255505E-01, 0.2323556867603191E+00, 0.8346423132579881E+00, 0.4193569213002444E+00, 0.5070048505400149E+00, 0.9880568155195324E-01, 0.6350898210108906E+00, 0.2370382383359541E+00, 0.3299228061150288E+00, 0.4349239764921071E+00, 0.5262500692361848E+00, 0.5263549923651836E+00, 0.8161052184432745E+00, 0.5568267671289201E+00, 0.7852669932205985E+00, 0.4481607592551184E-01, 0.6290146498792036E+00, 0.9736787804665343E+00, 0.5369941621471508E+00, 0.6750777504837204E+00, 0.9452511173220645E+00, 0.3252402467696922E+00, 0.8149000487070703E+00, 0.8087485664240622E+00, 0.8643101435258340E+00, 0.4683483752594740E+00, 0.5054760923588362E+00, 0.9646412930917844E+00, 0.1611953384510251E+00, 0.6426851941066625E-01, 0.3732266796993424E+00, 0.6384029126799168E+00, 0.3844644469584264E+00, 0.6635273633462982E+00, 0.2553934870916856E+00, 0.7037835913610216E+00, 0.7783327991001192E+00, 0.7381327592761330E+00, 0.2765915485450557E+00, 0.9846188872724937E-01, 0.1992562101416243E+00, 0.2440052895970430E+00, 0.3301477999473963E+00, 0.5338134839029927E+00, 0.5498293871712301E+00, 0.1974401363114953E+00, 0.7407533997655510E+00, 0.6821638940995054E+00, 0.9814777780110351E+00, 0.4891456709117443E+00, 0.6868139367703679E+00, 0.4181531426430654E+00, 0.6623070699739451E+00, 0.9202771282456093E+00, 0.2973080397025486E+00, 0.4403051603022431E+00, 0.1603780540263299E+00, 0.4910562348998989E+00, 0.7838834745165658E+00, 0.1931809149066596E+00}, + n: 21, + zOut: []float64{0.2163023058341640E+01, 0.1906105992609667E+01, 0.1885682431608721E+01, 0.1629672232824707E+01, 0.1530256904983391E+01, 0.1307296833197682E+01, 0.1220997281181084E+01, 0.9674288853031870E+00, 0.8179252376135864E+00, 0.6735586841320580E+00, 0.6320597056120635E+00, 0.5126868322939253E+00, 0.4828683228163860E+00, 0.4745823594217251E+00, 0.3685025909289511E+00, 0.2947763441663148E+00, 0.8912041525268403E-01, 0.6456597576955210E-01, 0.6259461554584676E-01, 0.1853533814873023E-01, 0.2023108580404890E-03, 0.8671199725506423E-13, 0.1722304485286045E-09, 0.1666294529992108E-09, 0.1220997281181084E+01, 0.1774302413926244E-21, 0.1370178691819834E-09, 0.1399340123848638E-09, 0.9674288853031870E+00, 0.4276620702127187E-22, 0.3173068333548179E-09, 0.2274343348931791E-09, 0.8179252376135864E+00, 0.7888609052210118E-30, 0.5644994943584269E-09, 0.8117631577107350E-09, 0.6735586841320580E+00, 0.2962158340816585E-16, 0.9564613436107998E-08, 0.6775718950029066E-08, 0.6320597056120635E+00, 0.4964115825120276E-16, 0.1710244235260994E+02, 0.1710244235260994E+02, 0.1120000000000000E+03, 0.3265306122448980E+01, 0.6250000000000000E+01, 0.5299633299932952E-07, 0.4828683228163860E+00, 0.2680954403830288E-19, 0.1311205982337445E-05, 0.9790063018353157E-06, 0.4745823594217251E+00, 0.5160286279848935E-24, 0.1890785247579508E-05, 0.1394729630636152E-05, 0.3685025909289511E+00, 0.4693722386065020E-28, 0.6031882082954460E-05, 0.2415384446316590E-05, 0.2947763441663148E+00, 0.1882813323774143E-21, 0.7814092950831008E-04, 0.8799876387761915E-04, 0.8912041525268403E-01, 0.1005797654156790E-28, 0.3017726164846613E-06, 0.1278833151586840E-06, 0.6456597576955210E-01, 0.4635851024992188E-19, 0.2982580055136947E-07, 0.4759731822531787E-07, 0.6259461554584676E-01, 0.4490807166402986E-22, 0.9170799331172770E-06, 0.3025792024297308E-06, 0.1853533814873023E-01, 0.4985600920996795E-27, 0.9814614537388964E-04, 0.3116488226164178E-03, 0.2023108580404890E-03, 0.0000000000000000E+00, 0.9878507322060364E-03, 0.9125548412055403E-03}, + info: 0, + }, + { + z: []float64{0.4943635351465083E+00, 0.1295760812930432E+00, 0.7491711827268356E+00, 0.8583007697336751E+00, 0.8597988452333791E+00, 0.9020619105716389E+00, 0.2915077046929524E+00, 0.2667690273281318E+00, 0.2640508133196529E-01, 0.6592981688042527E+00, 0.5004017812459820E+00, 0.7056211227388411E+00, 0.2254860841977465E+00, 0.8570117342825790E+00, 0.6863131135194549E+00, 0.6029337708611949E+00, 0.6631267757314846E+00, 0.5332167960220966E+00, 0.3047497072553197E+00, 0.3019927731659721E+00, 0.6244714872283929E+00, 0.3204566006732108E+00, 0.9437738905138152E+00, 0.4462876020196550E+00, 0.6693016494515551E+00, 0.5687239407477801E+00, 0.5130358959101252E+00, 0.1634623710980615E+00, 0.6356065394794165E+00, 0.9187737904031696E+00, 0.8612817405760382E+00, 0.1602125514297330E+00, 0.5297426144233635E+00, 0.3699984812614213E+00, 0.3455622529703073E+00, 0.9962779456692529E+00, 0.3564481259772661E+00, 0.2073475342531472E-01, 0.5839325153640170E+00, 0.6856088547326490E+00, 0.1606020836922776E+00, 0.2475573692197572E+00, 0.8169030104559274E+00, 0.1727021335202554E+00, 0.8794153095346040E+00, 0.1052546999951709E-01, 0.4332903851899277E+00, 0.4302943891085251E+00, 0.6360909664440160E+00, 0.1924830187263967E+00, 0.6792019925733094E+00, 0.7328300669715262E+00, 0.8282900281692296E+00, 0.1586820387506954E+00, 0.5999731076117462E+00, 0.4873494502000296E+00, 0.4446262392098149E+00, 0.6430807880043099E-01, 0.4949024386471711E+00, 0.7324156973660632E+00, 0.4547667791304575E+00, 0.7542985454738853E+00, 0.3755946849636591E+00, 0.7135765429513076E+00, 0.7888131931751277E+00, 0.6384460726826821E+00, 0.4685063200928931E+00, 0.1343379262734882E+00, 0.8857603211032115E+00, 0.5798608180272281E+00, 0.8765662925729737E+00, 0.2107645345329755E+00, 0.7032612644639602E-01, 0.2672549085142431E+00, 0.5322118352980683E+00, 0.4697779217142906E-01, 0.1959612687762308E+00, 0.7346288295330818E+00, 0.4373432557584073E+00, 0.2514178299506654E+00, 0.7845430350805238E+00, 0.7823648156079857E+00, 0.6098686444303012E+00, 0.2687771415020881E+00}, + n: 21, + zOut: []float64{0.2638973127799410E+01, 0.2299941431214051E+01, 0.2280019421450360E+01, 0.2103910562764817E+01, 0.1753406216295798E+01, 0.1675269066003242E+01, 0.1419658234290438E+01, 0.1365959224584141E+01, 0.1187696680558471E+01, 0.1126073702945326E+01, 0.8926412592525027E+00, 0.7715773240739381E+00, 0.5428647577479762E+00, 0.4329885186763779E+00, 0.3589145864992100E+00, 0.2461266947628802E+00, 0.1802035742271595E+00, 0.1083562693061272E+00, 0.7909884021715781E-01, 0.2853616071040153E-01, 0.1859995500862765E-03, 0.5169878828456423E-25, 0.7099412452593561E-13, 0.1129160994681896E-12, 0.1419658234290438E+01, 0.7523863534922662E-17, 0.1645873945742296E-11, 0.1162641799741134E-11, 0.1365959224584141E+01, 0.3171195595439500E-23, 0.6168272840237550E-11, 0.8582511762369885E-11, 0.1187696680558471E+01, 0.8519789992808060E-16, 0.1934844654065141E-10, 0.2568816579510325E-10, 0.1126073702945326E+01, 0.8564308176121538E-22, 0.5690968370753065E-10, 0.7456610067231580E-10, 0.8926412592525027E+00, 0.4500097668303756E-13, 0.2149240165292988E+02, 0.2149240165292987E+02, 0.1030000000000000E+03, 0.2950113378684807E+01, 0.4854368932038835E+01, 0.1146501122497315E-08, 0.5428647577479762E+00, 0.2966117003631004E-27, 0.2887486457338918E-08, 0.3484100742696835E-08, 0.4329885186763779E+00, 0.9478952637135678E-26, 0.8311221870318503E-08, 0.6953572191921854E-08, 0.3589145864992100E+00, 0.2375820297137957E-16, 0.1629548458200623E-07, 0.1368379043565619E-07, 0.2461266947628802E+00, 0.1012567897168591E-16, 0.3168042687452701E-07, 0.3807114536183845E-07, 0.1802035742271595E+00, 0.8688408444571280E-16, 0.7017919615597339E-07, 0.9241973720004823E-07, 0.1083562693061272E+00, 0.3747089299799806E-28, 0.3320058009883818E-06, 0.6266972429387508E-06, 0.7909884021715781E-01, 0.9269115636346889E-29, 0.6452918276099027E-05, 0.1508443954686445E-04, 0.2853616071040153E-01, 0.2499111347740165E-24, 0.3360677328899296E-03, 0.1546059694047028E-03, 0.1859995500862765E-03, 0.1972152263052530E-28, 0.5448826922428762E-03, 0.1724316467181159E-02}, + info: 0, + }, + { + z: []float64{0.5641760158025995E+00, 0.2227931624220032E+00, 0.1040729150876691E+00, 0.7228520011975436E+00, 0.2490915552877161E+00, 0.4463107957028827E+00, 0.6882435259034004E+00, 0.2173580561342540E+00, 0.8146865135594571E+00, 0.3630549548424193E+00, 0.2813912484076728E+00, 0.7560034280086618E+00, 0.7800835186160227E-01, 0.9984316063995433E+00, 0.2057310185040729E+00, 0.4428139729521006E+00, 0.1946530136132755E+00, 0.8953866467149748E+00, 0.5910093704925600E+00, 0.9736056943014803E+00, 0.7342559355497796E+00, 0.5630651274913434E+00, 0.3586901690989497E+00, 0.1859950386974873E-01, 0.4012559193852120E+00, 0.5767984160414075E-01, 0.3379735138652440E+00, 0.6337834884220164E+00, 0.8830566914548466E-01, 0.2985048049064926E+00, 0.9820684138520455E+00, 0.1144932752938616E+00, 0.5905532956519596E+00, 0.4757653978696945E+00, 0.1997612463043563E-01, 0.6356348606671800E+00, 0.8478495728965164E+00, 0.4997410778119411E+00, 0.6861774168985810E+00, 0.6912919871514965E+00, 0.1276032443467088E+00, 0.2695430969348002E+00, 0.9446688115451145E+00, 0.5104603739010690E+00, 0.8863068797328323E+00, 0.3347723354379355E+00, 0.2977917172311930E+00, 0.9464871506253476E+00, 0.4279639349386329E+00, 0.6378279454376028E+00, 0.2778621310060349E+00, 0.6971058794896068E-01, 0.6309805553452471E+00, 0.3447281367207256E-01, 0.8480855191050544E+00, 0.6700112511333863E+00, 0.1616260465745026E+00, 0.7744510887458210E+00, 0.8408544531170117E+00, 0.8444763755373497E-01, 0.3286971575766536E+00, 0.8244867044222992E+00, 0.8036107174439190E+00, 0.4654902702844697E+00, 0.8300602115903392E+00, 0.5911511948645825E+00, 0.5734805041784674E+00, 0.6046912223886362E+00, 0.4400460907177143E+00, 0.4069795298963303E+00, 0.2413714645456244E+00, 0.7838758775665940E+00, 0.1371288591293247E+00, 0.8435169936355635E-01, 0.4867567406491472E+00, 0.2914527168883616E+00, 0.7540094160758792E+00, 0.6792178828893637E+00, 0.8924641252729165E+00, 0.2188072300242774E+00, 0.1899571860965691E+00, 0.7806965639263314E+00, 0.8706240780095753E-01, 0.7170634647198669E+00}, + n: 21, + zOut: []float64{0.2553381332090116E+01, 0.2166390759033473E+01, 0.1737362408504838E+01, 0.1528419999405254E+01, 0.1507484707859341E+01, 0.1334735890703865E+01, 0.1222641790395049E+01, 0.1186722126839839E+01, 0.1073660052771764E+01, 0.9488489095119069E+00, 0.9141860725715962E+00, 0.7726247731371300E+00, 0.6075856291402457E+00, 0.5409244297850613E+00, 0.4230641503671385E+00, 0.2356839373494127E+00, 0.1583434617720056E+00, 0.3187519618749328E-01, 0.2747107248999187E-01, 0.1480095837386152E-02, 0.5569185181399456E-04, 0.3215260779752862E-17, 0.2284971140234050E-13, 0.6915955898032105E-13, 0.1222641790395049E+01, 0.9860761315262648E-31, 0.9831000121605633E-10, 0.3802561298586086E-10, 0.1186722126839839E+01, 0.2066815571679051E-27, 0.6142487424703478E-09, 0.1524532000885779E-08, 0.1073660052771764E+01, 0.3155443620884047E-29, 0.1933670198753400E-07, 0.4311109498288097E-07, 0.9488489095119069E+00, 0.6613963504021090E-17, 0.7125410558010122E-07, 0.6137903750393884E-07, 0.9141860725715962E+00, 0.2713620929442760E-22, 0.1897294248760472E+02, 0.1897294248760472E+02, 0.1070000000000000E+03, 0.3233560090702948E+01, 0.4672897196261682E+01, 0.2313496546014482E-05, 0.6075856291402457E+00, 0.2008094738046662E-26, 0.6354651604911740E-04, 0.4633045629030685E-04, 0.5409244297850613E+00, 0.2465190328815662E-30, 0.8082164119218066E-03, 0.5151838483992701E-03, 0.4230641503671385E+00, 0.3299331849996360E-25, 0.9881103085087938E-03, 0.1036550305023510E-02, 0.2356839373494127E+00, 0.2111622871095604E-25, 0.1203513003711909E-02, 0.1300398061184096E-02, 0.1583434617720056E+00, 0.1737664936697394E-23, 0.8260928074113359E-03, 0.9484297179228856E-03, 0.3187519618749328E-01, 0.0000000000000000E+00, 0.1785275423606748E-03, 0.4485462762371783E-03, 0.2747107248999187E-01, 0.8804949879714635E-25, 0.5200632154389635E-08, 0.3234666977722410E-08, 0.1480095837386152E-02, 0.5399595124056782E-24, 0.5661901580915454E-02, 0.5860254353052324E-02, 0.5569185181399456E-04, 0.0000000000000000E+00, 0.1190560893471898E-01, 0.9131404251707014E-02}, + info: 0, + }, + { + z: []float64{0.7290518158132969E+00, 0.5196659176766039E-03, 0.6083923160589086E+00, 0.3459319602615154E+00, 0.3277021139736517E+00, 0.6020592719504614E-01, 0.4608784204502808E+00, 0.8430478676154098E+00, 0.3856212930081542E+00, 0.6602823264317716E+00, 0.4451601253283373E+00, 0.4130313322309198E-01, 0.7414750648249350E+00, 0.1630235543068703E-01, 0.6004925370465983E+00, 0.6953287054569501E+00, 0.7809046354974044E+00, 0.7892746585788727E+00, 0.8348704064067982E+00, 0.5999411739898802E+00, 0.5502575606089829E+00, 0.4392206918044746E+00, 0.7984758158185817E+00, 0.9084185319619590E+00, 0.1786837110145214E+00, 0.2414921532322530E+00, 0.5630913108462098E+00, 0.7820323704275389E+00, 0.5523326888742272E+00, 0.9015512185421630E+00, 0.6659841765947113E+00, 0.2845604319423287E+00, 0.3491764093356571E+00, 0.9628247275953050E-01, 0.6976897044251388E+00, 0.2960314575787897E+00, 0.5554565606281359E-01, 0.3558757052257084E+00, 0.9341850945519581E+00, 0.6665938574616496E+00, 0.9614102712845256E+00, 0.8607214960584614E+00, 0.4038740733880183E+00, 0.8195623831081322E+00, 0.6129183541897144E+00, 0.7215327066311872E-01, 0.5031970254369666E-01, 0.1396452298202989E+00, 0.9662061833347503E+00, 0.1270920838674061E+00, 0.4311106155362532E+00, 0.8052749852152479E+00, 0.4015794631208873E+00, 0.9090852867289334E-01, 0.6606775367976888E+00, 0.1481179966505828E+00, 0.9638580924515038E+00, 0.9709844996525795E+00, 0.1150673643193312E-01, 0.1429293205078334E+00, 0.2900042758147406E+00, 0.9072348766684573E+00, 0.5781273728635536E+00, 0.5436950045999074E+00, 0.1857622262967125E+00, 0.9164714647876027E+00, 0.1370982861482903E+00, 0.4992756875010576E+00, 0.1554652709586491E+00, 0.3126479857720679E+00, 0.4107075699045055E+00, 0.2895846225773548E+00, 0.6273125726015746E+00, 0.2838905730735005E+00, 0.5809021463377108E+00, 0.7647718231557297E+00, 0.2069816461533343E+00, 0.3140055757156704E+00, 0.1235726138058405E+00, 0.4368723232060789E-01, 0.7675622822273089E+00, 0.9898297711455730E+00, 0.5845844813092991E+00, 0.3724928805727834E+00}, + n: 21, + zOut: []float64{0.2656606156715505E+01, 0.2361088067613179E+01, 0.2270460825471249E+01, 0.2122871466419806E+01, 0.1864972075992565E+01, 0.1483766917780093E+01, 0.1313593002893207E+01, 0.1121546276208008E+01, 0.1100149868182268E+01, 0.9659264313206680E+00, 0.7624972132947719E+00, 0.7289080649182198E+00, 0.6752163576811447E+00, 0.6611764720975886E+00, 0.5004340625462813E+00, 0.2440674815088013E+00, 0.2171809202435314E+00, 0.1235497606154792E+00, 0.3737121186344041E-01, 0.2834840406904476E-01, 0.5846755428136478E-02, 0.7443896006885402E-16, 0.5016677150024004E-07, 0.3707799983650212E-07, 0.1313593002893207E+01, 0.2958228394578794E-29, 0.1581957950672119E-06, 0.2298083114979900E-06, 0.1121546276208008E+01, 0.1915993820645148E-16, 0.4749045639556273E-06, 0.4145613346073258E-06, 0.1100149868182268E+01, 0.9026685982667287E-18, 0.2821283116535875E-06, 0.3158894087015811E-06, 0.9659264313206680E+00, 0.2037048580685469E-20, 0.2246093425341190E-06, 0.2076005360058006E-06, 0.7624972132947719E+00, 0.1234566306928925E-21, 0.2124557779286299E+02, 0.2124557779286298E+02, 0.1010000000000000E+03, 0.3002267573696145E+01, 0.2970297029702970E+01, 0.4897987464996691E-04, 0.6752163576811447E+00, 0.7461812581271996E-18, 0.7761124913531668E-04, 0.7483244468930916E-04, 0.6611764720975886E+00, 0.1038114253693458E-19, 0.1582094808245393E-03, 0.1235322388201987E-03, 0.5004340625462813E+00, 0.1010613662291919E-16, 0.2610534203903574E-03, 0.4450812691210283E-03, 0.2440674815088013E+00, 0.1110435042389887E-20, 0.5668320309921573E-04, 0.5311544381771655E-04, 0.2171809202435314E+00, 0.4733165431326071E-27, 0.6599010146996593E-04, 0.7896621041843452E-04, 0.1235497606154792E+00, 0.3155385912111625E-18, 0.1746230697391169E-01, 0.1331928313395539E-01, 0.3737121186344041E-01, 0.7395570986446986E-31, 0.1364698415102933E-02, 0.9400709901879650E-03, 0.2834840406904476E-01, 0.1581043861486090E-22, 0.9826835453665868E-03, 0.1307033404080312E-02, 0.5846755428136478E-02, 0.5593364605928029E-23, 0.6675960788692170E-02, 0.6853670175678725E-02}, + info: 0, + }, + { + z: []float64{0.4059771234161322E+00, 0.9607215623246773E+00, 0.2458768097786967E-01, 0.2349999394464353E-01, 0.5195584553698999E+00, 0.4267565401751807E+00, 0.5653505726897825E+00, 0.1993982232067181E+00, 0.7123509462851438E+00, 0.7322091078130321E+00, 0.6397865818692764E+00, 0.7795245712118530E+00, 0.9924677795119503E+00, 0.9446777193650685E+00, 0.9161440637569995E+00, 0.4356325057978820E+00, 0.6968317286853016E+00, 0.8623411680463823E+00, 0.8789901991689911E+00, 0.3964880116495537E+00, 0.3452640838632506E+00, 0.2457053330236874E+00, 0.3088650440709877E+00, 0.3819576657222301E+00, 0.3428589632713919E-01, 0.5108638376023356E-01, 0.1646491337519898E+00, 0.4402398340108123E+00, 0.6741907107293844E+00, 0.8399512836956711E+00, 0.5689849385173426E+00, 0.5208530271268840E+00, 0.1800472375386978E+00, 0.7659410457647264E+00, 0.2320702606914905E+00, 0.1105800266048680E+00, 0.9555355666039600E-02, 0.1859192596152662E+00, 0.7825627400019242E-02, 0.5286418396370182E+00, 0.2569279638014341E+00, 0.5549104171411018E+00, 0.7406835450501670E+00, 0.8319568443444482E+00, 0.1523286720686696E+00, 0.6741822248281739E+00, 0.7686049385045001E+00, 0.7046090895325479E+00, 0.5187887151753254E+00, 0.1082987708911324E+00, 0.1267838014025160E+00, 0.1115865001832446E+00, 0.9799554493413084E+00, 0.2112830058825086E+00, 0.1414836977037485E+00, 0.6416690587599562E+00, 0.7257743058080667E+00, 0.5941533679852271E+00, 0.2889670048515264E+00, 0.2352763591376699E+00, 0.4250778140801711E+00, 0.1017573282390372E-01, 0.7592168685641336E+00, 0.1236630021486789E+00, 0.3794258137484455E+00, 0.3894249799986492E+00, 0.3467719607731882E+00, 0.5651244918121399E+00, 0.7941305753999619E+00, 0.7160004674307343E+00, 0.6194397297375442E+00, 0.1453439098617406E+00, 0.3817157280391337E-03, 0.9381666563671931E+00, 0.8543357988390619E+00, 0.4675645670082479E+00, 0.8133557631373793E+00, 0.1160066189475003E+00, 0.6551894700973839E+00, 0.6157191087148942E+00, 0.4651705119652626E+00, 0.2935400080400429E+00, 0.4317648586994048E+00, 0.8522331953027451E-01}, + n: 21, + zOut: []float64{0.3090946182879871E+01, 0.2427731098824810E+01, 0.2178358732328273E+01, 0.1944657148720347E+01, 0.1388313875420951E+01, 0.1366009016577358E+01, 0.1254539813854158E+01, 0.1096743376160052E+01, 0.8976114875705017E+00, 0.7925182471468240E+00, 0.7633415317747125E+00, 0.5940562138773567E+00, 0.3406702196684873E+00, 0.2541261981011808E+00, 0.2081990106830526E+00, 0.1967266434974441E+00, 0.8212572008660911E-01, 0.6231598248219099E-01, 0.2121611392818772E-01, 0.6627852439078377E-02, 0.2020564063973749E-05, 0.5156511541642804E-17, 0.3563959083802911E-09, 0.2193664839500192E-09, 0.1254539813854158E+01, 0.5107396913706617E-17, 0.2245013704648247E-08, 0.3514139913607919E-08, 0.1096743376160052E+01, 0.1770166510860316E-21, 0.1137128600534393E-07, 0.7589514151253922E-08, 0.8976114875705017E+00, 0.3631375006656261E-16, 0.1027683956127825E-09, 0.1703981899256795E-09, 0.7925182471468240E+00, 0.0000000000000000E+00, 0.2692111438183261E-08, 0.1491447500870467E-08, 0.7633415317747125E+00, 0.3655079503368504E-18, 0.1896683648658551E+02, 0.1896683648658551E+02, 0.9800000000000000E+02, 0.2941043083900227E+01, 0.3061224489795918E+01, 0.1473194721443778E-07, 0.3406702196684873E+00, 0.8487843002529896E-19, 0.1107295924775035E-05, 0.6897939613884539E-06, 0.2541261981011808E+00, 0.8699892772041781E-19, 0.4010969039165872E-05, 0.5564243023106877E-05, 0.2081990106830526E+00, 0.1258849778182470E-17, 0.2192657884798391E-05, 0.1921286515322920E-05, 0.1967266434974441E+00, 0.1498835719919922E-28, 0.3181611995531238E-06, 0.2328457188758453E-05, 0.8212572008660911E-01, 0.9162137014768053E-16, 0.4655593170815260E-04, 0.2906458517213153E-04, 0.6231598248219099E-01, 0.7111877894410489E-19, 0.1084455050840344E-03, 0.4940544045928809E-04, 0.2121611392818772E-01, 0.1296887328183343E-24, 0.1059468102013224E-02, 0.9250155264543548E-03, 0.6627852439078377E-02, 0.2014616961124939E-22, 0.1082171160654875E-03, 0.1415095048461561E-03, 0.2020564063973749E-05, 0.0000000000000000E+00, 0.6572087989553770E-04, 0.6490933881766271E-04}, + info: 0, + }, + { + z: []float64{0.3515867373170093E+00, 0.6900024519663606E-01, 0.2562617636787797E+00, 0.4448144612254716E+00, 0.1882829208975508E+00, 0.5473764707914393E+00, 0.2385465140832452E+00, 0.1069888484826550E+00, 0.6650479699038470E+00, 0.5577458834974632E+00, 0.3827016483759793E-01, 0.2430476485682098E-01, 0.4730689827049095E-01, 0.7028807845337007E+00, 0.2183345614483843E+00, 0.4504620631941809E+00, 0.4989666416356805E+00, 0.3524179690092576E+00, 0.2245980971932510E+00, 0.4235501615333767E+00, 0.5262756658101302E+00, 0.9543218824354944E+00, 0.7932768470961233E+00, 0.6115989702914060E-01, 0.5090745247561921E+00, 0.6231416396947956E+00, 0.5848645563028462E+00, 0.4261243979220120E-01, 0.7488050001299923E+00, 0.1371419590365067E+00, 0.2276573560104874E+00, 0.3333510148295767E+00, 0.8801005866377587E+00, 0.1783788042757909E+00, 0.7167665061134074E+00, 0.8328416386285911E+00, 0.3239179761297745E+00, 0.3396256067647054E+00, 0.3124818554244235E-01, 0.3558253686357221E+00, 0.3434895378785284E+00, 0.5623459587025392E-01, 0.2638452014850361E+00, 0.8291744484791080E+00, 0.1974847584119865E+00, 0.7319795333910079E+00, 0.2610606436005336E+00, 0.5710127034520260E+00, 0.1439281438102160E+00, 0.9086761346521347E+00, 0.8079247890865698E+00, 0.9018578929430654E+00, 0.4900454364738460E+00, 0.8138610668520670E+00, 0.6711229676830790E+00, 0.5055629692453131E+00, 0.7743169767236130E+00, 0.4534345901632091E+00, 0.9064089158232752E+00, 0.4827899713942460E+00, 0.7358703780808750E+00, 0.9369729458478693E-02, 0.8597279323370060E+00, 0.7253136203352766E+00, 0.9571052925069841E+00, 0.2164676786228616E+00, 0.5574107740713430E-05, 0.7154716238932374E+00, 0.1141135068223202E+00, 0.6209438587853456E+00, 0.7851847140042024E+00, 0.4215540797089058E+00, 0.9132020640887749E+00, 0.1510454496157759E+00, 0.4172986352579149E+00, 0.5037450189692434E+00, 0.4485087403424131E+00, 0.5740668076879305E+00, 0.2978796610784261E+00, 0.6581099078338648E-01, 0.8930273171304047E+00, 0.8152477689300778E+00, 0.1069556485483132E+00, 0.6932157626522990E+00}, + n: 21, + zOut: []float64{0.2205969711876647E+01, 0.1949821527895322E+01, 0.1555841877124327E+01, 0.1396030697440207E+01, 0.1339074151471965E+01, 0.1304928492707023E+01, 0.1082549957806062E+01, 0.9163938874206132E+00, 0.8887122139609793E+00, 0.7285328536138327E+00, 0.6136134334950112E+00, 0.5962413214799335E+00, 0.4250735423840991E+00, 0.3604939377250871E+00, 0.2295486599338548E+00, 0.1443459206161604E+00, 0.1184188267216090E+00, 0.7075746168152415E-01, 0.2006576919306350E-01, 0.3756273174580983E-02, 0.4503973951446061E-03, 0.2214970142320351E-19, 0.1258326061053631E-10, 0.9003557400980630E-11, 0.1082549957806062E+01, 0.1308878013942703E-25, 0.3368372626791194E-10, 0.2572022209508410E-10, 0.9163938874206132E+00, 0.7614331624527915E-16, 0.1049500061330476E-08, 0.2928487158224854E-08, 0.8887122139609793E+00, 0.1203547791264655E-21, 0.7079518778653070E-07, 0.2057204985301009E-06, 0.7285328536138327E+00, 0.1084769825180869E-21, 0.6504687546036223E-07, 0.2011551828019932E-07, 0.6136134334950112E+00, 0.1678480469223895E-16, 0.1595062091511705E+02, 0.1595062091511705E+02, 0.1020000000000000E+03, 0.3156462585034014E+01, 0.2941176470588236E+01, 0.1336032003974816E-08, 0.4250735423840991E+00, 0.1033222323690773E-11, 0.1230907576002882E-05, 0.1377773980605759E-05, 0.3604939377250871E+00, 0.5435093612356237E-21, 0.5904438579725169E-05, 0.1247176535660427E-04, 0.2295486599338548E+00, 0.3794809073678436E-22, 0.8654598111714590E-03, 0.7607233838455693E-03, 0.1443459206161604E+00, 0.2335329392584174E-18, 0.9486551585203510E-04, 0.5848864829043123E-04, 0.1184188267216090E+00, 0.2421802979028506E-27, 0.4440929582264130E-04, 0.3669242548994226E-04, 0.7075746168152415E-01, 0.1891688450719986E-26, 0.5237855019006247E-04, 0.2468105637453731E-04, 0.2006576919306350E-01, 0.1180787648903814E-27, 0.8134126440113327E-03, 0.8865157422262554E-03, 0.3756273174580983E-02, 0.2581152881883151E-26, 0.5819544721666204E-02, 0.3152501351079271E-02, 0.4503973951446061E-03, 0.0000000000000000E+00, 0.5880303886253363E-04, 0.1585743718762697E-03}, + info: 0, + }, + { + z: []float64{0.5610544265871693E+00, 0.3865731523333528E+00, 0.8792353035941016E+00, 0.8523516652694250E+00, 0.1444314813898040E-01, 0.8826603847895033E+00, 0.6868176286586357E+00, 0.1885799699020001E+00, 0.8756021324147915E+00, 0.9000748303342890E+00, 0.6057362077051875E+00, 0.7116572505145777E+00, 0.4651180401287146E+00, 0.2732222796277717E-01, 0.4226433912686857E+00, 0.2137613193249559E+00, 0.8364980217841237E+00, 0.7760779616422476E+00, 0.4204777290352190E+00, 0.6224635225380051E+00, 0.2764474942580449E+00, 0.3783169947455127E+00, 0.5180995217194659E+00, 0.3065081068358929E+00, 0.7865831746887696E+00, 0.1478697978858728E+00, 0.9439830303880672E+00, 0.8253272390565236E-01, 0.3067445628749279E+00, 0.7129198739696287E+00, 0.1655397340526111E+00, 0.1744497852178990E+00, 0.8123176080018479E-01, 0.7468152661528306E+00, 0.8702942511684653E-01, 0.2665897748347560E+00, 0.9213749341388631E+00, 0.1523897006311256E+00, 0.9645030292913545E+00, 0.9612618327522493E-01, 0.4802656873918926E+00, 0.9400504426452867E+00, 0.4625574582408437E+00, 0.7387695442245192E+00, 0.7695082904503155E+00, 0.1394488941705607E+00, 0.4086909510206329E+00, 0.8420266381115991E+00, 0.9564685490270811E+00, 0.7091850518571272E+00, 0.5799173993611073E+00, 0.1780919033120022E+00, 0.4196947685163247E+00, 0.9892865772966106E+00, 0.5502405891255741E+00, 0.7805747931381838E+00, 0.8443114386354278E-01, 0.3818004737775779E+00, 0.5006744900666209E+00, 0.8330036981446504E+00, 0.6972526215524509E+00, 0.5997317354738497E+00, 0.6745658299087246E+00, 0.2369187863883299E+00, 0.4162907871251388E+00, 0.3987550165661536E+00, 0.3127240434721901E+00, 0.9587921004875174E+00, 0.9734600215022703E+00, 0.9507333301136496E+00, 0.3445022862066339E+00, 0.6240012410156072E+00, 0.3036264632031094E-01, 0.6999839547669153E+00, 0.4672138296892350E+00, 0.4669965382645248E+00, 0.7561275857160221E-01, 0.9250454776547237E+00, 0.8620177110728862E+00, 0.5266728805873626E+00, 0.6377535363121675E+00, 0.6098026285363055E+00, 0.8075088997828720E+00, 0.8486821693163010E+00}, + n: 21, + zOut: []float64{0.2468092632282687E+01, 0.2093427673862981E+01, 0.2055392019191517E+01, 0.1647867143267642E+01, 0.1615849876515927E+01, 0.1589328968238607E+01, 0.1271214388518367E+01, 0.1121382381594411E+01, 0.1069461264755295E+01, 0.1002295596318809E+01, 0.8815764834354939E+00, 0.8051252546404786E+00, 0.6374343329196452E+00, 0.5469723867709347E+00, 0.4015178604185544E+00, 0.3707602923265790E+00, 0.1795105850679969E+00, 0.1400595531050117E+00, 0.2548349514639473E-01, 0.1561366451013735E-02, 0.1155321273825210E-02, 0.3137752941767923E-22, 0.1448569525610494E-09, 0.1682297708320945E-10, 0.1271214388518367E+01, 0.3747089299799806E-29, 0.3127891707973917E-07, 0.1432924100618686E-07, 0.1121382381594411E+01, 0.1829309924661015E-19, 0.1414348814679943E-06, 0.1338467241717145E-06, 0.1069461264755295E+01, 0.2814655709828570E-26, 0.1421706541245010E-06, 0.1494636997707923E-06, 0.1002295596318809E+01, 0.2555408239179452E-16, 0.1745096068338993E-06, 0.1639215185470380E-06, 0.8815764834354939E+00, 0.5195421261043265E-21, 0.1992546887610216E+02, 0.1992546887610217E+02, 0.1040000000000000E+03, 0.3263038548752835E+01, 0.3846153846153846E+01, 0.5490557769901970E-06, 0.6374343329196452E+00, 0.1696050946225175E-28, 0.4391959465127471E-06, 0.4441570425561870E-06, 0.5469723867709347E+00, 0.4122920742224575E-16, 0.4792107785920969E-06, 0.5244422797027597E-06, 0.4015178604185544E+00, 0.4437342591868191E-30, 0.1189624719598388E-05, 0.1545254324980458E-05, 0.3707602923265790E+00, 0.0000000000000000E+00, 0.3830671301160838E-05, 0.5436396467135237E-05, 0.1795105850679969E+00, 0.1558228073167050E-14, 0.5423210427919237E-04, 0.1228583690085413E-03, 0.1400595531050117E+00, 0.8832743148296122E-19, 0.1395228897382397E-04, 0.1537585917376726E-04, 0.2548349514639473E-01, 0.0000000000000000E+00, 0.8277350694369951E-03, 0.9528953717632958E-03, 0.1561366451013735E-02, 0.2465190328815662E-31, 0.7095009159403311E-03, 0.6952609237045969E-03, 0.1155321273825210E-02, 0.1309509102666880E-27, 0.9046555260897671E-03, 0.1226313636978587E-02}, + info: 0, + }, + { + z: []float64{0.1242522906682814E+00, 0.6390609620209767E+00, 0.4481822861180138E+00, 0.4850355616354706E+00, 0.4018997557884576E+00, 0.7075817751574985E+00, 0.3076496509717662E+00, 0.9845619472128853E+00, 0.4421050939804582E+00, 0.3472138710835164E+00, 0.7694977672753175E+00, 0.4786944038481857E+00, 0.6974278852457209E+00, 0.5004517708240744E+00, 0.7658513494839985E+00, 0.7508522623862479E-01, 0.8645614962374704E-02, 0.2513671118506070E+00, 0.9355687048630774E+00, 0.2836435232395548E+00, 0.8653687008315966E+00, 0.3043727382738487E+00, 0.8973655399535756E+00, 0.7135517870607274E+00, 0.4956863425678929E+00, 0.8362506849216409E+00, 0.9829450079482006E+00, 0.9413718361369072E+00, 0.2542921002853715E-01, 0.5951158954104814E+00, 0.9317747763384295E+00, 0.9085271053958202E+00, 0.9993466426511500E+00, 0.2497009223772528E-01, 0.8726460080387569E+00, 0.3868463012727243E+00, 0.5820757557404177E-01, 0.7974577837432384E-01, 0.8242609714155934E+00, 0.1887913799920241E+00, 0.3268225406700475E+00, 0.2264596835393817E+00, 0.4020160264981738E+00, 0.8597685353848280E+00, 0.5429598215579996E+00, 0.4134507486351844E+00, 0.8781720494573462E+00, 0.3655827200857601E+00, 0.2876763179222336E+00, 0.9193112804533413E+00, 0.3958413207165046E-01, 0.7980401670837647E+00, 0.5101422689515223E-01, 0.2194050847732673E+00, 0.6115669547384739E-02, 0.9036470382476453E+00, 0.6696681747677364E+00, 0.1689100553906829E+00, 0.9284887836539969E+00, 0.8748192507086142E+00, 0.7181738874264668E+00, 0.8990747837549429E-01, 0.7166811698029575E+00, 0.8712804839027968E+00, 0.2571898936326318E+00, 0.2264160460654618E+00, 0.6364724288557849E+00, 0.9550337894922362E+00, 0.8995892333665090E+00, 0.3728949594240628E+00, 0.6496276036419958E+00, 0.7218580021816370E+00, 0.2620053580399828E+00, 0.8492826434932900E+00, 0.1090756692624820E+00, 0.1230806328807070E+00, 0.5326342483791896E+00, 0.3425391815117244E+00, 0.4714474424671373E+00, 0.9044440560476328E+00, 0.2298320061743346E+00, 0.7771450381369926E+00, 0.4623588499686800E+00, 0.8996441805847293E+00}, + n: 21, + zOut: []float64{0.2749036998648791E+01, 0.2657147938200912E+01, 0.2156780738808330E+01, 0.2057290308234013E+01, 0.1910481192038085E+01, 0.1550197528741744E+01, 0.1531663815430223E+01, 0.1307411568456853E+01, 0.1180055477995477E+01, 0.1145160315453326E+01, 0.8462599780670359E+00, 0.8196023258344234E+00, 0.7505058481318937E+00, 0.3802378569170251E+00, 0.3493658644293456E+00, 0.2733852715996189E+00, 0.1920071438579977E+00, 0.3602127141457542E-01, 0.1503353393017178E-01, 0.5047074669949666E-02, 0.4814167031169938E-03, 0.1615587133892632E-26, 0.3701495167228324E-14, 0.8166164251788096E-14, 0.1531663815430223E+01, 0.5400326177233737E-21, 0.8345943934662111E-13, 0.3845954584916692E-13, 0.1307411568456853E+01, 0.2270604060615577E-17, 0.1098158814550649E-11, 0.6011774632275279E-12, 0.1180055477995477E+01, 0.6617444900424221E-23, 0.1039362721731823E-10, 0.1780733867152956E-10, 0.1145160315453326E+01, 0.3193234771665464E-17, 0.8582967920523009E-10, 0.1451582492090454E-09, 0.8462599780670359E+00, 0.4268426102972081E-16, 0.2191317346756291E+02, 0.2191317346756291E+02, 0.1100000000000000E+03, 0.3303854875283447E+01, 0.6363636363636363E+01, 0.9730504757902699E-07, 0.7505058481318937E+00, 0.1718125187449148E-14, 0.1758342086676891E-05, 0.2642640058729254E-05, 0.3802378569170251E+00, 0.9047523974206004E-14, 0.3754566725544834E-04, 0.5673943129185001E-04, 0.3493658644293456E+00, 0.2726303288443817E-26, 0.2006689219611138E-03, 0.1777791597062721E-03, 0.2733852715996189E+00, 0.1852245405458936E-26, 0.4273484804153724E-06, 0.2289494629295668E-05, 0.1920071438579977E+00, 0.7673537210642012E-17, 0.3631464818839244E-02, 0.3052322482564877E-02, 0.3602127141457542E-01, 0.1402889840288648E-17, 0.2065820498676818E-02, 0.7907462477517949E-03, 0.1503353393017178E-01, 0.3588277137446075E-19, 0.9842420036565967E-03, 0.4295497278130008E-03, 0.5047074669949666E-02, 0.1100487290795119E-18, 0.2169791314757801E-02, 0.2746294001732303E-02, 0.4814167031169938E-03, 0.9926167349879280E-23, 0.2524480967032520E-02, 0.1685323473608901E-02}, + info: 0, + }, + { + z: []float64{0.4452569544189223E+00, 0.3712416527218666E+00, 0.4540009468556715E+00, 0.9149505778015055E-01, 0.9825460881415958E+00, 0.8144387623295611E+00, 0.4257438310114644E+00, 0.4055209729019219E+00, 0.1358301754544711E-01, 0.6660365069195171E+00, 0.4791028777450690E-01, 0.3657122138300755E+00, 0.9244230955293443E+00, 0.2570776992045346E+00, 0.5718524872194095E+00, 0.6959027703199671E+00, 0.8022093165313721E+00, 0.4495167304148069E+00, 0.4533829141769831E+00, 0.4399857636092745E+00, 0.8343772053001745E+00, 0.5841091089133705E+00, 0.9225724116024000E+00, 0.3646730358635919E+00, 0.4342402996301750E+00, 0.1979669913465428E+00, 0.2710080252534286E+00, 0.4064878156937679E+00, 0.1329017000110605E+00, 0.3577863781516848E+00, 0.7737638611946227E+00, 0.3628629851888825E+00, 0.6191378950237536E+00, 0.9181610808896479E-01, 0.3164967052049129E+00, 0.1800354212961807E+00, 0.5261304159866632E+00, 0.2095779664090124E+00, 0.4734470785970568E+00, 0.8233700542774806E+00, 0.1405149000531442E+00, 0.5739228235076023E+00, 0.4484023224779539E+00, 0.7953415183519565E+00, 0.5683020712105596E+00, 0.3828815589637512E+00, 0.9478512018818865E+00, 0.9398576744287683E+00, 0.6799918835962694E+00, 0.9795978835389229E+00, 0.9415167003494995E+00, 0.9804631144197878E+00, 0.4529282233852833E+00, 0.6987441800620822E+00, 0.1071819561656476E+00, 0.6287695276127018E+00, 0.2573913359217608E+00, 0.5283299892256954E-01, 0.1312057002484920E+00, 0.2566822109082798E+00, 0.5022596747022927E+00, 0.3755634037822867E+00, 0.7687685406410046E+00, 0.9286257388850563E+00, 0.2460950353669618E+00, 0.4615682752011302E+00, 0.2668978314403934E+00, 0.9526334220011422E+00, 0.7113266960956600E+00, 0.8033610237680390E+00, 0.2049912091857929E+00, 0.9104136201043411E+00, 0.9905140155095393E+00, 0.5284892163797259E+00, 0.4617116226676921E-01, 0.7638541825257228E+00, 0.8058860223281950E-01, 0.6562405799504624E+00, 0.4217948031372573E+00, 0.8444441663937204E+00, 0.4135300708069887E+00, 0.3992676961789670E+00, 0.9443059736340937E+00, 0.4697907769676380E+00}, + n: 21, + zOut: []float64{0.2339652518244840E+01, 0.2127240999798084E+01, 0.2122097736373912E+01, 0.1640409192349226E+01, 0.1522936721900112E+01, 0.1513900850773956E+01, 0.1190428480890818E+01, 0.1098839257111754E+01, 0.9060499827420537E+00, 0.8483833633939547E+00, 0.7423625631343986E+00, 0.6441873762582893E+00, 0.5561064852023264E+00, 0.5332801819376103E+00, 0.3323799891685881E+00, 0.2356658160961767E+00, 0.1910001776595044E+00, 0.1052937995306845E+00, 0.3493206724380617E-01, 0.1582963148293342E-01, 0.1362410302334481E-03, 0.2902907641693595E-19, 0.1235088787739235E-18, 0.5938156039510254E-18, 0.1190428480890818E+01, 0.2366582715663035E-29, 0.1736669751992271E-12, 0.4479686287025860E-12, 0.1098839257111754E+01, 0.4930380657631324E-31, 0.6845104399398104E-11, 0.1631652613834293E-10, 0.9060499827420537E+00, 0.3623410171350593E-13, 0.4397239464622790E-08, 0.8783797026819435E-08, 0.8483833633939547E+00, 0.1680831004707752E-20, 0.6292544501750849E-07, 0.1207646260809090E-06, 0.7423625631343986E+00, 0.1044536639065691E-17, 0.1870111343232326E+02, 0.1870111343232326E+02, 0.1030000000000000E+03, 0.3002267573696145E+01, 0.3883495145631068E+01, 0.8796985420666049E-06, 0.5561064852023264E+00, 0.6232001151245993E-28, 0.4765675419124029E-06, 0.5281771988202168E-06, 0.5332801819376103E+00, 0.5995342879679690E-28, 0.3211676631039122E-06, 0.3513325837054497E-06, 0.3323799891685881E+00, 0.2177256098409993E-25, 0.1826919937583927E-06, 0.1747056528730059E-06, 0.2356658160961767E+00, 0.1311326116357865E-17, 0.1784537561302489E-06, 0.2175474607275274E-06, 0.1910001776595044E+00, 0.3862262991962074E-24, 0.9127544222909640E-06, 0.4962248419758332E-06, 0.1052937995306845E+00, 0.1072850831100576E-26, 0.2872845137271569E-03, 0.1413151427897814E-03, 0.3493206724380617E-01, 0.8028654523313936E-17, 0.5779626756191757E-04, 0.4784930511330926E-04, 0.1582963148293342E-01, 0.9359045779542084E-26, 0.9339546012110267E-04, 0.6206712854083305E-04, 0.1362410302334481E-03, 0.4535950205020818E-29, 0.1799327870469576E-03, 0.1621654177500190E-02}, + info: 0, + }, + { + z: []float64{0.6327743759434090E-01, 0.8874473183212240E+00, 0.1587228549487630E+00, 0.1869853022948459E+00, 0.1852952724381735E+00, 0.2190328352455733E+00, 0.7936705141328082E+00, 0.1573124860628259E+00, 0.2446308768539528E+00, 0.2441044501798444E+00, 0.4435884001235265E+00, 0.1783624365771731E+00, 0.6874700271616803E+00, 0.4796486989431838E+00, 0.2471425348644392E+00, 0.4391077480264999E+00, 0.9973269002312380E+00, 0.4770343529783838E+00, 0.3451566405930041E+00, 0.5011834710046675E+00, 0.8072188861666797E+00, 0.5748577907200507E+00, 0.2986003422862493E+00, 0.4760318526964945E+00, 0.5838957192070238E-01, 0.1760621214885278E+00, 0.7926085978219721E+00, 0.3379849703418611E+00, 0.6012719579585296E+00, 0.1130783704430351E+00, 0.5590675745254436E-01, 0.8616930340961984E+00, 0.9917564091315376E+00, 0.4219575368674273E+00, 0.1044382974319413E+00, 0.1886528536659160E-01, 0.9337085742573710E+00, 0.6447952074628677E+00, 0.7158824182577913E+00, 0.3883216757352448E+00, 0.2116568255149501E+00, 0.9819105316462939E+00, 0.8471687522868032E-01, 0.2785996362910685E+00, 0.8775405646426044E+00, 0.5671584270354416E+00, 0.4912868754910720E+00, 0.5767395813214109E+00, 0.7327323379759062E+00, 0.8184048812627022E+00, 0.3325270745990432E+00, 0.3026500963479654E+00, 0.7228591188664935E+00, 0.1094677581261434E+00, 0.5280482398171430E+00, 0.9974727380694979E+00, 0.5087630734843742E+00, 0.6953603638889684E+00, 0.9103967979863506E+00, 0.2584730811693510E+00, 0.5498750728524477E+00, 0.9758543899455846E+00, 0.8309066632970131E+00, 0.4311646442586020E+00, 0.4732818688792167E+00, 0.4096051739313099E+00, 0.7479697576436509E+00, 0.9369473766445329E+00, 0.7380538090811954E+00, 0.1199951604231148E+00, 0.5672128274092054E+00, 0.7150763241893471E+00, 0.6134240647991112E+00, 0.7095501841622953E-01, 0.1510080432732774E-01, 0.2912426074708729E+00, 0.1611746025295486E+00, 0.3946903662654964E+00, 0.7408818971566200E-01, 0.3978128748254128E+00, 0.3580504147215868E+00, 0.2603799996304434E-01, 0.8990784999913340E+00, 0.1985602490013758E+00}, + n: 21, + zOut: []float64{0.2139906798692060E+01, 0.2104052265745164E+01, 0.2080474521860817E+01, 0.1784368581097839E+01, 0.1501145759273247E+01, 0.1395549430074518E+01, 0.1236063891814824E+01, 0.1123736402991315E+01, 0.8211474325690415E+00, 0.7411912844479571E+00, 0.7336682913123216E+00, 0.5274366057326734E+00, 0.3715621485686555E+00, 0.3171624722931449E+00, 0.2809062056956198E+00, 0.1668884413843382E+00, 0.9744092162322979E-01, 0.7613224124753509E-01, 0.1665106039654164E-01, 0.4700366860927376E-02, 0.1401918312945850E-02, 0.1084683744678891E-29, 0.4021673570416241E-08, 0.3931910860092540E-08, 0.1236063891814824E+01, 0.1439956010332256E-19, 0.3626387646080745E-08, 0.3543555828237728E-08, 0.1123736402991315E+01, 0.3006506681978320E-24, 0.3371387381785702E-08, 0.3448854867663729E-08, 0.8211474325690415E+00, 0.6197291271416269E-26, 0.2831422041774839E-08, 0.2886341750444270E-08, 0.7411912844479571E+00, 0.0000000000000000E+00, 0.2880306038760265E-08, 0.2936321908308739E-08, 0.7336682913123216E+00, 0.2406371799476454E-20, 0.1752158704199472E+02, 0.1752158704199472E+02, 0.1050000000000000E+03, 0.3111111111111111E+01, 0.7619047619047619E+01, 0.3652487989473621E-08, 0.3715621485686555E+00, 0.1451701975030564E-21, 0.4296538801302010E-08, 0.3992227758256396E-08, 0.3171624722931449E+00, 0.6162975822039155E-31, 0.5151357395533313E-08, 0.5974032086218965E-08, 0.2809062056956198E+00, 0.2039658356197591E-16, 0.1134165265363298E-07, 0.1513934018844884E-07, 0.1668884413843382E+00, 0.2400943524542200E-24, 0.1781584505522029E-06, 0.1218300442987205E-06, 0.9744092162322979E-01, 0.6162975822039155E-31, 0.9557876398738343E-06, 0.5872690889712619E-06, 0.7613224124753509E-01, 0.5074727415413836E-17, 0.2309052370169074E-04, 0.5924498773169641E-04, 0.1665106039654164E-01, 0.1400228106767296E-28, 0.5116509326795711E-04, 0.5154480234673206E-04, 0.4700366860927376E-02, 0.1956855682120442E-20, 0.1061141342429108E-03, 0.9755516139369119E-04, 0.1401918312945850E-02, 0.0000000000000000E+00, 0.1229085807195224E-02, 0.8009097549502667E-02}, + info: 0, + }, + { + z: []float64{0.7225493913848618E+00, 0.3268825038779278E+00, 0.2580957584922012E+00, 0.4222896610254372E+00, 0.8243187922209068E+00, 0.3973391932422579E+00, 0.3700698452657641E+00, 0.2073422474585492E+00, 0.3071746797249822E+00, 0.2370168833330754E+00, 0.7779583030993944E+00, 0.4350651843345934E+00, 0.7867543754352369E+00, 0.3439673345654075E+00, 0.3736479358698906E+00, 0.8450641599616520E+00, 0.3880138308747846E+00, 0.2479782080134303E+00, 0.3220864609073060E+00, 0.8460149388339712E+00, 0.6082870752479030E+00, 0.3396261004129498E+00, 0.1231305479976765E+00, 0.6514493424347317E+00, 0.4987273421671501E-01, 0.2199653339283912E+00, 0.5626339029868159E+00, 0.6755574738917364E+00, 0.7016850168758351E+00, 0.7957347983005405E+00, 0.3394687111682781E-01, 0.1490794513934588E+00, 0.9837873705641814E+00, 0.5038299137267350E+00, 0.8394265886439850E+00, 0.1438624872728633E-01, 0.4444190467253504E+00, 0.1489248400425094E+00, 0.6410535698206483E+00, 0.2739267916732867E+00, 0.6522097474411971E+00, 0.9086492388715542E+00, 0.1949071722314141E+00, 0.7176724675018002E+00, 0.9247176136838016E+00, 0.4929580602677628E+00, 0.3824418236647242E+00, 0.2425574232540663E+00, 0.7085287909144397E+00, 0.2574302555167504E+00, 0.6093160252921369E+00, 0.2417561032032995E+00, 0.4795262420397247E+00, 0.4658200993830509E+00, 0.9033699918994937E+00, 0.1295021719769064E+00, 0.6219991535812029E+00, 0.7040800557612208E+00, 0.8644629036591867E-01, 0.5129394685202899E+00, 0.7988983132437487E+00, 0.8322467913624354E+00, 0.9905487172695071E-01, 0.7093832076693246E+00, 0.1992462440538834E-01, 0.6378263512182120E+00, 0.5823949252324323E-02, 0.7826279628890456E+00, 0.5919828344466795E+00, 0.3815528510244244E+00, 0.6537355893096064E-01, 0.6459825623191251E-01, 0.4466210788758083E+00, 0.6620124961190184E+00, 0.6318809895815939E+00, 0.8145861476435108E+00, 0.5938169865214039E+00, 0.8092284578140500E+00, 0.5378701643349270E+00, 0.1648044346935199E+00, 0.9874291179811017E+00, 0.3210667070512012E+00, 0.6809988920516613E+00, 0.6410080963943865E+00}, + n: 21, + zOut: []float64{0.2108032684782400E+01, 0.1971253922847928E+01, 0.1952878543820764E+01, 0.1839982524288513E+01, 0.1730503177731785E+01, 0.1509287569836986E+01, 0.1316544049683026E+01, 0.1117715356834192E+01, 0.9058841126016787E+00, 0.8452427684353671E+00, 0.7582219581243467E+00, 0.6392786878439012E+00, 0.5749674919024932E+00, 0.5111167278611346E+00, 0.3859485208834002E+00, 0.2295319067023061E+00, 0.2262113890497363E+00, 0.1122658486667464E+00, 0.7234153262002044E-01, 0.4527048542558528E-01, 0.8319414807792288E-04, 0.2547288901631409E-13, 0.9052716547280089E-04, 0.7818093042872877E-04, 0.1316544049683026E+01, 0.0000000000000000E+00, 0.2537869832861900E-04, 0.2058109204222074E-04, 0.1117715356834192E+01, 0.0000000000000000E+00, 0.1154377886785102E-04, 0.1215574110748570E-04, 0.9058841126016787E+00, 0.8843729980912407E-17, 0.1391102994778336E-08, 0.5248885105740662E-08, 0.8452427684353671E+00, 0.2445468806185137E-28, 0.2192473584471834E-06, 0.3792344586441173E-06, 0.7582219581243467E+00, 0.6480317173221865E-17, 0.1885256245409039E+02, 0.1885256245409039E+02, 0.1090000000000000E+03, 0.3303854875283447E+01, 0.3669724770642202E+01, 0.3715603111278862E-08, 0.5749674919024932E+00, 0.4928548884551519E-18, 0.2515491583997865E-07, 0.9138389520203617E-08, 0.5111167278611346E+00, 0.6587911462745685E-21, 0.7857712130631377E-05, 0.2298529163657988E-05, 0.3859485208834002E+00, 0.6162975822039155E-32, 0.1022329296046741E-03, 0.8680151473672892E-04, 0.2295319067023061E+00, 0.0000000000000000E+00, 0.4616464530663241E-04, 0.3877924919889212E-04, 0.2262113890497363E+00, 0.5522026336547083E-29, 0.2365660345682357E-03, 0.1990352708186489E-03, 0.1122658486667464E+00, 0.9015102222917331E-20, 0.6825572508936817E-03, 0.6443371781720532E-03, 0.7234153262002044E-01, 0.1168271446196110E-24, 0.1518594231951364E-05, 0.3554999772664582E-05, 0.4527048542558528E-01, 0.1023373475125114E-24, 0.5037539097182833E-02, 0.4761613742874584E-02, 0.8319414807792288E-04, 0.1479114197289397E-30, 0.9105689905446296E-02, 0.4825995872157137E-02}, + info: 0, + }, + { + z: []float64{0.3256696334281521E+00, 0.7530856859911462E+00, 0.8853989127988440E+00, 0.4058112879440673E+00, 0.4296659748141172E+00, 0.5414662225246791E-01, 0.7727106089758434E+00, 0.8219533891865206E+00, 0.8804898818241804E+00, 0.2701661776792790E+00, 0.3062100113053869E+00, 0.7616550925245322E+00, 0.7441861437457686E+00, 0.1208643477044503E+00, 0.1894387751691341E+00, 0.5502297763300060E+00, 0.7033314588214317E+00, 0.9049640752657374E+00, 0.7642474001418834E+00, 0.6461873559439021E+00, 0.7323555348666727E+00, 0.6137344390498661E+00, 0.4469041036073067E+00, 0.6120974783290001E+00, 0.3695185251601272E+00, 0.9332999793731735E+00, 0.3981597952563400E+00, 0.5926926060619504E+00, 0.2218776156238759E+00, 0.5556127447847847E-01, 0.2642041684868913E+00, 0.3100431241269808E-01, 0.7617158805289858E+00, 0.5576464290832684E+00, 0.1499291988028689E+00, 0.6071627267784354E+00, 0.2903444085740193E+00, 0.8982141027722228E+00, 0.3437740722392461E+00, 0.5257340992985249E-02, 0.9772197173932363E+00, 0.2743313505008338E-01, 0.5939995532981283E+00, 0.8125099455585232E+00, 0.8394050677385213E+00, 0.2410326841076476E+00, 0.6066214991817382E+00, 0.1828025638429278E+00, 0.5406675263078469E+00, 0.1108622672142920E+00, 0.2412280709874803E+00, 0.5713495470758625E+00, 0.6315445401927943E+00, 0.2035563756883153E+00, 0.8696814083183412E+00, 0.2313134367709406E+00, 0.4474447231170641E+00, 0.6238312383525342E+00, 0.4961806049996582E+00, 0.8121574484576765E+00, 0.8702938949430352E+00, 0.4187164629520156E+00, 0.9204090241956668E+00, 0.8587176140225750E-02, 0.5171057705188283E+00, 0.5195595031109387E+00, 0.1704600468811621E+00, 0.3205951022793651E+00, 0.5643494948239225E-01, 0.9895063272544601E+00, 0.5554681247022339E+00, 0.6098243547887802E+00, 0.4730289261335907E+00, 0.1850396134174421E+00, 0.9997475966289492E+00, 0.6812817712215841E+00, 0.8515433432907883E+00, 0.7377047940023331E+00, 0.2280516830782600E+00, 0.7204549837953970E+00, 0.6096260713045146E+00, 0.9381128478076188E+00, 0.8446173293023428E+00, 0.6255387686605924E+00}, + n: 21, + zOut: []float64{0.2655567567233002E+01, 0.2307219644143945E+01, 0.2068899090176533E+01, 0.2040332602619700E+01, 0.1742115921396612E+01, 0.1681856112031183E+01, 0.1680515965675234E+01, 0.1379580829731510E+01, 0.1074312270120212E+01, 0.9816962393879983E+00, 0.7217300335876665E+00, 0.6931029681515243E+00, 0.5680300928567689E+00, 0.5098239945058581E+00, 0.4280073603039590E+00, 0.2868581986899945E+00, 0.1650069923584772E+00, 0.9685136354131559E-01, 0.5953175886938158E-01, 0.1010639579838301E-01, 0.1940920539235378E-02, 0.0000000000000000E+00, 0.6683246174917478E-10, 0.4267275295503314E-10, 0.1680515965675234E+01, 0.3510431028233503E-28, 0.1660414363340253E-09, 0.1048896312812690E-09, 0.1379580829731510E+01, 0.1462018530271286E-15, 0.3421106985799154E-06, 0.1788748688597153E-06, 0.1074312270120212E+01, 0.6708481546523056E-14, 0.2133146148219686E-04, 0.4629406838917969E-04, 0.9816962393879983E+00, 0.1747667198202037E-19, 0.5113942524303023E-03, 0.6287577911928029E-03, 0.7217300335876665E+00, 0.3213860550383917E-17, 0.2115308632171850E+02, 0.2115308632171849E+02, 0.1090000000000000E+03, 0.3217687074829932E+01, 0.4587155963302752E+01, 0.4202140396420195E-04, 0.5680300928567689E+00, 0.4489765112701642E-21, 0.3523329095202763E-09, 0.1167512512099963E-08, 0.5098239945058581E+00, 0.1652551767516096E-21, 0.2872281528375301E-06, 0.1040291448945555E-06, 0.4280073603039590E+00, 0.3262461795428160E-16, 0.6249760558326680E-04, 0.5475920486023645E-04, 0.2868581986899945E+00, 0.1568256893218114E-20, 0.1414968677825121E-03, 0.1814031293335571E-03, 0.1650069923584772E+00, 0.8677469957431130E-28, 0.6720068122740940E-03, 0.4975589868187537E-03, 0.9685136354131559E-01, 0.5127595883936577E-29, 0.9260272777115331E-03, 0.1730290225790419E-02, 0.5953175886938158E-01, 0.7227833914448031E-23, 0.5968169418548035E-04, 0.1670361992731526E-04, 0.1010639579838301E-01, 0.1295106991551472E-19, 0.1213518994781533E-03, 0.2534883535393275E-03, 0.1940920539235378E-02, 0.0000000000000000E+00, 0.1005634135102979E-02, 0.2318000467665894E-02}, + info: 0, + }, + { + z: []float64{0.1944566011999833E+00, 0.2181910996636003E+00, 0.3150099357031281E+00, 0.2091722274105127E+00, 0.6593858021341683E+00, 0.9426815336068497E+00, 0.5288011644568881E+00, 0.7784091503839152E+00, 0.1751638954124558E+00, 0.6164772800195180E+00, 0.6225196859922683E+00, 0.2786175486675760E+00, 0.1945914328217568E+00, 0.5779085626077999E+00, 0.5568218939451671E+00, 0.5170566254269496E+00, 0.5742861029155353E+00, 0.6923056150383281E+00, 0.5876692361605969E+00, 0.4295639666640205E+00, 0.8612105519992207E+00, 0.9963836880013683E+00, 0.2692934182903581E+00, 0.6181020857251435E+00, 0.1251902537663725E+00, 0.2838625146280274E+00, 0.2999174442521634E+00, 0.7258439193048929E+00, 0.2048904835805728E+00, 0.1174987481558037E+00, 0.6887427109309550E+00, 0.7409107864964065E+00, 0.5306892441542433E+00, 0.6214581212205206E-01, 0.1234501953117273E-01, 0.2038789370511589E+00, 0.6180963044354376E+00, 0.2820746320472540E+00, 0.4643004781082601E+00, 0.2642696366861867E+00, 0.4102198269957935E-01, 0.1495900075045802E+00, 0.2060405615637534E+00, 0.3399183002928583E+00, 0.7918555051917199E+00, 0.9699614514519834E+00, 0.2922678000248715E+00, 0.1376674512222148E+00, 0.2496993200590716E+00, 0.3432539555227123E+00, 0.5835005548357151E+00, 0.4094205671447549E+00, 0.4876670000237163E+00, 0.7973523995663028E+00, 0.8851386592921134E+00, 0.1523554028450115E+00, 0.7049520832902729E+00, 0.4689643982524618E+00, 0.4347705823917429E+00, 0.8152140283905303E+00, 0.9259201525760803E+00, 0.3175789772106010E+00, 0.3950010049586650E+00, 0.7107346574834400E+00, 0.8109922991383097E+00, 0.6889072760433030E+00, 0.7861311781839575E-02, 0.7751963519893628E+00, 0.7382950156197396E+00, 0.9729693586970557E+00, 0.7283826758396350E+00, 0.1269651196972527E+00, 0.3530947260257147E+00, 0.2061448083515627E-01, 0.5931058475369740E+00, 0.9689379021952851E+00, 0.3254887771415839E+00, 0.2808523639662175E-01, 0.6211468186653845E+00, 0.6037463613076512E+00, 0.8746435454108382E+00, 0.5300695323546331E+00, 0.5276801989236730E+00, 0.2128951663669798E-01}, + n: 21, + zOut: []float64{0.2424279264689105E+01, 0.2270324150901105E+01, 0.1935128898096250E+01, 0.1814500336114905E+01, 0.1538233405195664E+01, 0.1297421320254112E+01, 0.1267282488999314E+01, 0.1249158514677014E+01, 0.9155076211264116E+00, 0.8242950831432680E+00, 0.5949232544739386E+00, 0.5630079212779312E+00, 0.4530053256303904E+00, 0.3458193312768856E+00, 0.2146623096050983E+00, 0.1686454472303586E+00, 0.1155214217797334E+00, 0.5180948935108346E-01, 0.2789744048901975E-01, 0.8268186305777192E-02, 0.6680158028153346E-04, 0.0000000000000000E+00, 0.3986945646893946E-08, 0.7023072825762287E-08, 0.1267282488999314E+01, 0.0000000000000000E+00, 0.2355158572444734E-07, 0.1877711213087836E-07, 0.1249158514677014E+01, 0.3384506411488746E-20, 0.2648360770785381E-11, 0.1741394977127960E-10, 0.9155076211264116E+00, 0.3299177303725225E-12, 0.2487861145673591E-05, 0.4028407591944186E-05, 0.8242950831432680E+00, 0.2441420600100056E-16, 0.1869515956083083E-05, 0.1842279235203962E-05, 0.5949232544739386E+00, 0.2024938139529812E-20, 0.1807975801219765E+02, 0.1807975801219765E+02, 0.9300000000000000E+02, 0.2836734693877551E+01, 0.1075268817204301E+01, 0.9521662195121400E-05, 0.4530053256303904E+00, 0.1259501632163109E-23, 0.1468124594065504E-05, 0.4670591953230941E-05, 0.3458193312768856E+00, 0.7975064420889996E-22, 0.1308295990671250E-06, 0.6690001990389955E-07, 0.2146623096050983E+00, 0.1927976052360153E-26, 0.3812574759844485E-05, 0.3580340604691736E-05, 0.1686454472303586E+00, 0.3739200690747596E-27, 0.6844384387279355E-05, 0.5557405125771409E-05, 0.1155214217797334E+00, 0.7506098603421864E-21, 0.2139339757899294E-04, 0.3026575107963825E-04, 0.5180948935108346E-01, 0.3886068668379982E-20, 0.1983680974127293E-03, 0.1336830557694390E-03, 0.2789744048901975E-01, 0.1991084924777834E-26, 0.4443273484877918E-03, 0.6821022035819646E-03, 0.8268186305777192E-02, 0.1921747358113822E-20, 0.1778955160858100E-05, 0.3048292256883238E-06, 0.6680158028153346E-04, 0.7915528772828604E-21, 0.4499131616906370E-02, 0.1547765737453591E-02}, + info: 0, + }, + { + z: []float64{0.3849545441014558E+00, 0.9201984078647510E+00, 0.4611893507512446E+00, 0.9426704990067624E+00, 0.4513996483425642E+00, 0.3546824995764211E+00, 0.2673932938327498E+00, 0.2250322436282782E+00, 0.3003875396759296E+00, 0.8637078150569484E+00, 0.2463125523040188E-01, 0.6381498516846796E+00, 0.9054059378226459E+00, 0.9211368359293561E+00, 0.6899055937753183E+00, 0.6469675067081565E+00, 0.2524386712411693E+00, 0.4816130873217878E+00, 0.8437265349008123E+00, 0.8843672501609817E+00, 0.3917808232071412E+00, 0.4109107468556734E+00, 0.6294664210780233E+00, 0.5231064834871043E+00, 0.6006449315760222E+00, 0.2321330919598237E+00, 0.9857216391074231E-01, 0.5246894901632879E+00, 0.2429723268334654E+00, 0.3385437000243748E+00, 0.1784805178646218E+00, 0.8008314854810928E+00, 0.3388059467143087E+00, 0.4957241256656372E+00, 0.6108069077503485E+00, 0.8350989375447051E+00, 0.1087391555565628E+00, 0.5847974581188020E+00, 0.8316850716702742E+00, 0.8921011586703487E+00, 0.1947070853010260E+00, 0.1394928972102342E+00, 0.7929088249487071E+00, 0.4078510186300481E+00, 0.6849316610029904E+00, 0.1436003498260631E+00, 0.5673845335495399E+00, 0.7998164012861997E-01, 0.6667892725157643E+00, 0.7612117828169483E+00, 0.8195812739875934E+00, 0.1507277483884870E+00, 0.6683936863561600E+00, 0.1889659251016290E+00, 0.7979363461805246E+00, 0.9481151487908223E+00, 0.3017570036067704E+00, 0.2677628114499495E+00, 0.4479716416042271E+00, 0.3773062273227097E+00, 0.1756267436681674E+00, 0.6251009447636316E+00, 0.3010990216120933E+00, 0.6044916624270988E+00, 0.3012752666004853E+00, 0.7113839134297870E+00, 0.7355680503868338E+00, 0.1830572310895536E+00, 0.2065116792960049E+00, 0.2432895898830973E+00, 0.9615089470298006E+00, 0.3137165160357294E+00, 0.5335631824040450E+00, 0.8324142824771229E+00, 0.9749825715503555E+00, 0.3108065469391890E+00, 0.2584483510692804E+00, 0.5679665509067858E+00, 0.9084113884935793E+00, 0.3061643504016712E+00, 0.1856860631474661E+00, 0.4086356189591027E+00, 0.2761517708925276E+00, 0.9203155374121844E+00}, + n: 21, + zOut: []float64{0.2651616639993538E+01, 0.2278042999629812E+01, 0.2198077975076974E+01, 0.2185608493228643E+01, 0.1866238785250178E+01, 0.1694317687161655E+01, 0.1314780820581521E+01, 0.1267230115137409E+01, 0.1165102366599241E+01, 0.1094106513205574E+01, 0.9375639320451692E+00, 0.7228525903025090E+00, 0.5063995930233953E+00, 0.4433597755655621E+00, 0.3782868675227946E+00, 0.2710178897462153E+00, 0.1447594933682902E+00, 0.1060101050946834E+00, 0.8449698031014202E-01, 0.1468593250969371E-01, 0.8406928034951682E-06, 0.3591986573571771E-20, 0.3864386735331416E-10, 0.3252595492372177E-10, 0.1314780820581521E+01, 0.1447952803137974E-21, 0.5374081097788385E-10, 0.4849713226733927E-10, 0.1267230115137409E+01, 0.2958228394578794E-29, 0.8017357434413146E-10, 0.7063808972759981E-10, 0.1165102366599241E+01, 0.1139115147139141E-26, 0.1961041727821929E-09, 0.1374026522849091E-09, 0.1094106513205574E+01, 0.3915388343685865E-19, 0.1756082891845291E-08, 0.3338672481507716E-08, 0.9375639320451692E+00, 0.4870203640784043E-16, 0.2132455639604580E+02, 0.2132455639604580E+02, 0.9900000000000000E+02, 0.2972789115646258E+01, 0.5050505050505050E+01, 0.1300256830939750E-04, 0.5063995930233953E+00, 0.4338734978715565E-29, 0.3205424704587136E-04, 0.3879495859639124E-04, 0.4433597755655621E+00, 0.9466330862652142E-25, 0.6653798840082298E-04, 0.6266988927201412E-04, 0.3782868675227946E+00, 0.2274100449667269E-22, 0.3059080514749475E-04, 0.2450157710629126E-04, 0.2710178897462153E+00, 0.2739429933906694E-24, 0.4451877567018950E-05, 0.2739439060253447E-05, 0.1447594933682902E+00, 0.1897052704875489E-25, 0.3311215248867682E-05, 0.2822048496282046E-05, 0.1060101050946834E+00, 0.7924889161564951E-19, 0.2588042287900903E-05, 0.3305698843095029E-05, 0.8449698031014202E-01, 0.2523395625690618E-18, 0.1425730854724969E-04, 0.2612802087529877E-04, 0.1468593250969371E-01, 0.7520086356827106E-20, 0.6278930605158724E-03, 0.1193309863751681E-02, 0.8406928034951682E-06, 0.0000000000000000E+00, 0.8769018979884540E-02, 0.6748334476252631E-02}, + info: 0, + }, + { + z: []float64{0.5539290016733247E+00, 0.6936589108803458E+00, 0.1862325586311042E-01, 0.3903593359823143E+00, 0.1387446022374186E+00, 0.9230050933369500E+00, 0.1655735508788293E+00, 0.5464594833562775E+00, 0.4407574799078734E+00, 0.7597516703282015E+00, 0.3240675365298944E+00, 0.8527429657828770E+00, 0.6134024974884296E+00, 0.1359668624923763E+00, 0.8589771621484943E+00, 0.8334002673394481E+00, 0.3811010712979018E+00, 0.4518439634289880E+00, 0.4121953913957921E-01, 0.1499929777106017E+00, 0.7537932319194001E+00, 0.1137770685080763E+00, 0.9362285670837264E+00, 0.2284833451474525E+00, 0.4661006612092690E+00, 0.3461611111488332E+00, 0.1608705680575839E-01, 0.9250298701911358E+00, 0.5983544857783111E+00, 0.9400090024445320E+00, 0.6595514287179831E+00, 0.2725099566160494E+00, 0.6509556024164401E+00, 0.8851211780351773E+00, 0.5925872091724521E+00, 0.5318402341230010E+00, 0.3225952236300995E+00, 0.6233031538827258E+00, 0.1806586091116282E+00, 0.9476369741031940E+00, 0.6784219735316235E+00, 0.6934023884718178E+00, 0.5000312772557033E+00, 0.6725383579734943E+00, 0.6771923299216058E+00, 0.9125469473100194E+00, 0.9862018367238429E+00, 0.7259311136907298E+00, 0.9021849324334038E+00, 0.6032549715715884E+00, 0.9017706724408630E+00, 0.8975979926873651E+00, 0.5949035726420406E+00, 0.6903449880442312E+00, 0.7574844360343417E+00, 0.2889632382233942E-01, 0.9428474184445177E+00, 0.5555118914598791E+00, 0.8663544108664935E+00, 0.6853450780608091E+00, 0.1464483859238053E+00, 0.6491672315887742E+00, 0.2994712877436206E+00, 0.3101752077576794E+00, 0.4920466664329196E+00, 0.2135103260181662E+00, 0.3809190441316870E+00, 0.8437350743416491E+00, 0.5443983884818225E+00, 0.7426189539459086E+00, 0.1055227287563778E+00, 0.3059118205598027E+00, 0.8189910523272392E+00, 0.9773505795713493E+00, 0.7305661438576656E+00, 0.6062516615534109E+00, 0.4660033490547544E+00, 0.5413353206637471E+00, 0.2388208915142312E+00, 0.6428463909118429E+00, 0.2982699820336984E+00, 0.2856298024316706E-01, 0.5487207914459959E+00, 0.4464180688275057E+00}, + n: 21, + zOut: []float64{0.2448593467642387E+01, 0.2141330855004301E+01, 0.2126430153924173E+01, 0.1907639051889359E+01, 0.1812500110390200E+01, 0.1510069013602020E+01, 0.1441897976798092E+01, 0.1263171337642769E+01, 0.1138107892295268E+01, 0.1088450894719558E+01, 0.9398511957468885E+00, 0.8468227425873083E+00, 0.6124964740092524E+00, 0.5436278175488470E+00, 0.4066256939946141E+00, 0.3972422051503922E+00, 0.2390787026361968E+00, 0.4848296808782174E-01, 0.2905803980602126E-01, 0.1302961362478940E-02, 0.3616542154739030E-05, 0.3187755557432356E-18, 0.8836722322771784E-05, 0.6065531139006927E-05, 0.1441897976798092E+01, 0.7730421460348975E-16, 0.3574427637238573E-07, 0.1935178018527985E-07, 0.1263171337642769E+01, 0.8058524406205312E-18, 0.1418632976070110E-05, 0.4069026170914173E-05, 0.1138107892295268E+01, 0.1371633476674845E-23, 0.4721385684453755E-04, 0.3623692584267971E-04, 0.1088450894719558E+01, 0.1790018845564752E-20, 0.4055026077404345E-04, 0.2446096735206838E-04, 0.9398511957468885E+00, 0.3178330447896772E-25, 0.2094278317138010E+02, 0.2094278317138010E+02, 0.1040000000000000E+03, 0.3031746031746032E+01, 0.4807692307692307E+01, 0.8138465546053722E-05, 0.6124964740092524E+00, 0.1019617235038814E-22, 0.4736809894069740E-03, 0.1915264360566004E-03, 0.5436278175488470E+00, 0.2004410489406572E-21, 0.1259085689345719E-03, 0.2338760337361548E-03, 0.4066256939946141E+00, 0.1231392444306089E-15, 0.6226403214695822E-04, 0.7644683470656998E-04, 0.3972422051503922E+00, 0.5914962592392188E-17, 0.1887068321547840E-03, 0.1345267246510674E-03, 0.2390787026361968E+00, 0.1936824017247308E-20, 0.7333182971373067E-03, 0.1062997506116107E-02, 0.4848296808782174E-01, 0.3799154119544393E-26, 0.1269933545612727E-03, 0.1297822869175177E-03, 0.2905803980602126E-01, 0.8465676581597317E-24, 0.5642309440908588E-03, 0.2732446225021143E-03, 0.1302961362478940E-02, 0.2467375723434259E-18, 0.9177892725485271E-03, 0.8034707353774361E-03, 0.3616542154739030E-05, 0.2761013168273541E-28, 0.6531167933367503E-03, 0.6727959129527735E-03}, + info: 0, + }, + { + z: []float64{0.7455810318731756E+00, 0.1881309445499726E+00, 0.6290241532486281E+00, 0.9426231091333456E+00, 0.1402641401457146E+00, 0.5545071521563689E+00, 0.3467970399972181E+00, 0.6378935846273492E-01, 0.8187242451993508E+00, 0.8444039716090014E+00, 0.8807815832461214E+00, 0.6871811349512845E+00, 0.6041217734774926E+00, 0.2285364565760638E+00, 0.6287288909172152E+00, 0.5441550558534458E+00, 0.6062929607453951E+00, 0.1528830611582420E+00, 0.7289323622783690E+00, 0.8693274251763169E+00, 0.1210720262902459E+00, 0.4752572018677603E+00, 0.8160358228459934E+00, 0.5003926181135285E+00, 0.2800920281530351E+00, 0.3817159580569316E+00, 0.1419563352692587E+00, 0.9738793587569783E+00, 0.2402077997739175E+00, 0.5021080238100061E+00, 0.5325521311583831E+00, 0.7002793445871702E+00, 0.2004913666518293E-01, 0.6858750037076770E+00, 0.5705320248969311E+00, 0.6000416876176061E+00, 0.9254592880635680E+00, 0.2987366812581649E+00, 0.8838368946481180E+00, 0.7495294261248863E+00, 0.2516401660161148E+00, 0.5770724542103510E+00, 0.8689432882806168E+00, 0.3108844333247283E+00, 0.7611598373381380E+00, 0.9533545884676758E+00, 0.6146629999183371E+00, 0.7337933880625785E+00, 0.1335018938357140E+00, 0.4054745880121539E+00, 0.9816031767048012E+00, 0.5190257866591561E+00, 0.9457220484783406E+00, 0.2563725588490263E+00, 0.8953616129834293E+00, 0.1343673038869742E+00, 0.1198867110907023E+00, 0.7765966504091196E+00, 0.1685346783514826E+00, 0.9322265874533907E+00, 0.4968937019786546E+00, 0.3933065437909874E+00, 0.7046190939244956E-01, 0.5772052710604483E+00, 0.1220174671595003E+00, 0.3586914192309758E+00, 0.4743117898783903E+00, 0.1205436116155321E+00, 0.2068106627971966E-01, 0.5035688415619853E+00, 0.2656792568844590E-01, 0.4951625786650252E+00, 0.1600264513881963E+00, 0.4218870487180432E+00, 0.4847863747130776E-01, 0.9478135093620923E+00, 0.1811694594266104E+00, 0.5311488460048615E+00, 0.2296061187775216E+00, 0.9932681440344262E+00, 0.2007921586496573E+00, 0.9684478357621775E+00, 0.9322927111902295E+00, 0.6234102172880590E+00}, + n: 21, + zOut: []float64{0.2617080551859897E+01, 0.2305187568066598E+01, 0.1942735806791493E+01, 0.1834812272403632E+01, 0.1760060933961288E+01, 0.1720372963502770E+01, 0.1676173250234917E+01, 0.1530300579122039E+01, 0.1214313538868506E+01, 0.1146550683576815E+01, 0.9555081169996513E+00, 0.8235353939361046E+00, 0.7281321711646775E+00, 0.5964515885643180E+00, 0.4105953672636856E+00, 0.2154672622243388E+00, 0.1469861329023305E+00, 0.1350631498164301E+00, 0.8120368457133148E-01, 0.1548517647968005E-01, 0.1861612641330624E-04, 0.6389970231972139E-21, 0.6259229043737505E-18, 0.1065975851985723E-17, 0.1676173250234917E+01, 0.1398996249446581E-17, 0.1485385179581525E-16, 0.5390878377546583E-16, 0.1530300579122039E+01, 0.1934286939601921E-26, 0.4995235293268131E-13, 0.1480097232724468E-13, 0.1214313538868506E+01, 0.1393981231259665E-11, 0.4031414073293921E-10, 0.9065983401759033E-10, 0.1146550683576815E+01, 0.7754818242684634E-25, 0.9068533370171412E-09, 0.1932480064220526E-08, 0.9555081169996513E+00, 0.5937598997073433E-12, 0.2185603480843691E+02, 0.2185603480843692E+02, 0.1010000000000000E+03, 0.3183673469387755E+01, 0.2970297029702970E+01, 0.4106209724092858E-05, 0.7281321711646775E+00, 0.2221432309102369E-26, 0.2012416535197213E-04, 0.1179395510019159E-04, 0.5964515885643180E+00, 0.6492360922940637E-17, 0.6055695087058826E-05, 0.1676327789285107E-04, 0.4105953672636856E+00, 0.1174834768927548E-24, 0.8526024871833974E-05, 0.9608606324255413E-05, 0.2154672622243388E+00, 0.1186446801452402E-26, 0.9887524717240814E-05, 0.1072842889916555E-04, 0.1469861329023305E+00, 0.0000000000000000E+00, 0.1666923382276663E-04, 0.2139923074663986E-04, 0.1350631498164301E+00, 0.4860988391194038E-18, 0.4968094868839375E-08, 0.1325007303324406E-08, 0.8120368457133148E-01, 0.5476819983069490E-18, 0.5501364953991437E-04, 0.1068949633822309E-04, 0.1548517647968005E-01, 0.6621786174648700E-13, 0.4934492558904634E-03, 0.7815729865935395E-03, 0.1861612641330624E-04, 0.0000000000000000E+00, 0.2047621357235247E-01, 0.1218736604744046E-01}, + info: 0, + }, + { + z: []float64{0.1913768959569714E+00, 0.7347223265181069E+00, 0.9087350122086006E+00, 0.8876448886267929E-02, 0.1794058368310475E+00, 0.3375830657319635E+00, 0.4153249303964603E+00, 0.3079259326141542E+00, 0.5095638682609168E+00, 0.6300946130469818E+00, 0.5367870439046851E-02, 0.6082577193589970E+00, 0.6096872650047096E+00, 0.8098482943683755E+00, 0.4018780482667224E+00, 0.1612961166583111E+00, 0.4165836183710623E+00, 0.6711774659609234E+00, 0.1871437048914691E+00, 0.2043648411447756E+00, 0.4603921058522200E+00, 0.5138380788557162E-01, 0.3299651081607302E+00, 0.5178779891127856E+00, 0.8488474652006981E+00, 0.4000528745818374E+00, 0.7038372186752184E-01, 0.1091866126814279E+00, 0.4601541814804277E-01, 0.2814862519917873E+00, 0.5969661695911915E+00, 0.1111325580672384E+00, 0.1377964900539917E+00, 0.4488655138014651E+00, 0.5793089439934721E+00, 0.4068390675279384E+00, 0.3141858292757815E-01, 0.3803058398371814E+00, 0.6865263808463873E-01, 0.6565571596516916E+00, 0.4227763797508006E+00, 0.9281332433572439E+00, 0.2549706813172651E+00, 0.1472316879439791E+00, 0.8389980826186394E+00, 0.4949206978487660E+00, 0.8778524239605636E+00, 0.8125876339222501E+00, 0.6384442407604712E+00, 0.6297206683503800E+00, 0.1074594814776241E+00, 0.4635106216187717E+00, 0.2149027083261391E+00, 0.2926633791426133E+00, 0.8718806127632718E+00, 0.9358351753143842E+00, 0.5812389276262170E+00, 0.8361764419241092E+00, 0.1334582685582402E+00, 0.6700349085889619E+00, 0.1370175035793201E+00, 0.2605729802823288E+00, 0.7055670307426516E+00, 0.1974656950667419E-01, 0.9516894704106690E+00, 0.7509460514650641E+00, 0.9770872584819335E-01, 0.1679929405438133E+00, 0.2605432695744189E+00, 0.7255281751885829E+00, 0.2060091110826470E+00, 0.5123028703888126E+00, 0.5392241233948379E+00, 0.3215743887975069E+00, 0.4306560982435532E+00, 0.9326432909148183E+00, 0.1891146429259456E+00, 0.5585690444839775E+00, 0.8103752159402208E+00, 0.3850798219907741E+00, 0.6027394925107610E-01, 0.6960376568363590E+00, 0.6132631218829975E+00, 0.5859904896405407E+00}, + n: 21, + zOut: []float64{0.1948845699194504E+01, 0.1757754653408917E+01, 0.1739740003489702E+01, 0.1427189755042558E+01, 0.1354312190162734E+01, 0.1300861212306309E+01, 0.1144086431430055E+01, 0.9728683413380136E+00, 0.7924660843958955E+00, 0.7190108168957414E+00, 0.5334843173898538E+00, 0.4234595469843583E+00, 0.3840099969172215E+00, 0.2310167712576353E+00, 0.1706582281146164E+00, 0.1481114719972525E+00, 0.9844570800522298E-01, 0.8643465546688130E-01, 0.2116850399857309E-01, 0.1490679637756442E-02, 0.9506251872618699E-05, 0.0000000000000000E+00, 0.3139247800552953E-11, 0.1114956279480716E-10, 0.1144086431430055E+01, 0.2611946364919696E-16, 0.1910542599593587E-05, 0.1867627468366115E-05, 0.9728683413380136E+00, 0.3548331964791209E-13, 0.9422609200466975E-06, 0.3861796048985941E-05, 0.7924660843958955E+00, 0.4543838814073028E-27, 0.1545075054473009E-06, 0.2314398440634665E-06, 0.7190108168957414E+00, 0.1033975765689929E-24, 0.9239329035775786E-07, 0.1002180390059042E-06, 0.5334843173898538E+00, 0.0000000000000000E+00, 0.1525542457368567E+02, 0.1525542457368567E+02, 0.1120000000000000E+03, 0.3308390022675737E+01, 0.5357142857142857E+01, 0.1175851227353848E-05, 0.3840099969172215E+00, 0.1009741958682895E-27, 0.6285056589702800E-05, 0.7777675415159152E-05, 0.2310167712576353E+00, 0.4642054879586336E-19, 0.2707022647265855E-04, 0.1462219920606713E-04, 0.1706582281146164E+00, 0.0000000000000000E+00, 0.1442808298792521E-03, 0.1499267314065209E-03, 0.1481114719972525E+00, 0.1784642171583157E-21, 0.9060208842449760E-06, 0.2604899516157433E-05, 0.9844570800522298E-01, 0.3285517707584525E-17, 0.4009882974094740E-08, 0.9813054658490708E-08, 0.8643465546688130E-01, 0.1441804758967627E-17, 0.1005867330167897E-05, 0.3548177460196556E-06, 0.2116850399857309E-01, 0.1161145423573808E-16, 0.4264476922944564E-04, 0.6523019800084465E-04, 0.1490679637756442E-02, 0.5282426871388410E-23, 0.4120097727637851E-03, 0.5256559484655862E-03, 0.9506251872618699E-05, 0.7858215819253763E-23, 0.4122429400478702E-03, 0.4195795458123320E-03}, + info: 0, + }, + { + z: []float64{0.8707866955342474E+00, 0.7817747598907121E-01, 0.3395074897480099E-01, 0.4299950297507704E+00, 0.8088090483755312E+00, 0.8059665333356031E+00, 0.8715468955879169E-01, 0.7726332912417854E+00, 0.8113440783694211E+00, 0.3884398998833286E+00, 0.2376236729669906E+00, 0.1163685212573567E+00, 0.9165435854442110E+00, 0.6267984817484763E+00, 0.9624876615834328E+00, 0.3034180669232360E+00, 0.2061796047621195E+00, 0.5768621491208505E+00, 0.9925917678590149E+00, 0.6443157924817072E+00, 0.5967958277754652E+00, 0.6529032825080359E+00, 0.2463148548215904E+00, 0.3434579503978075E+00, 0.9563439871443443E+00, 0.2121028540747388E+00, 0.7195547303990343E+00, 0.2508441805243417E+00, 0.1006260142041168E+00, 0.8893309100691102E+00, 0.5028754540045453E+00, 0.8271029410166070E+00, 0.1744058577319449E+00, 0.1497291367846938E+00, 0.9760674104574272E+00, 0.1217237467828105E+00, 0.5182991497218187E+00, 0.9638099804000833E-01, 0.3920754919448237E+00, 0.5405769677178972E+00, 0.2099631365577761E+00, 0.7305783624173950E+00, 0.5230361650507421E+00, 0.3249231142539155E+00, 0.6943021078034506E+00, 0.8039502137729849E+00, 0.5430939865698426E+00, 0.5802454813209417E+00, 0.4521353811622019E+00, 0.6022646695138674E+00, 0.5085578584349214E+00, 0.2084880202460930E+00, 0.7893764544854661E+00, 0.8499187425465698E+00, 0.6507732600828079E+00, 0.6030189256946239E+00, 0.2748834677816949E+00, 0.7991444375081345E+00, 0.3953548021356785E+00, 0.8063610109500122E+00, 0.9322494176165492E+00, 0.2295756744488692E+00, 0.9380170922026533E+00, 0.6349173046266506E+00, 0.8138238710526029E+00, 0.1723717901392456E+00, 0.7436778507578146E+00, 0.9748296910217159E+00, 0.9719004334667378E+00, 0.1097372829332979E+00, 0.6782829454939702E+00, 0.5097404868982898E+00, 0.9485025358778609E+00, 0.7313319469015522E-01, 0.6156780373408383E+00, 0.8764490831370680E+00, 0.2737186188000360E+00, 0.3500606337779347E+00, 0.7029831161979777E+00, 0.1747477098480691E+00, 0.8887436470613648E+00, 0.8441051781034927E+00, 0.3534934185139980E+00, 0.9278581973721739E+00}, + n: 21, + zOut: []float64{0.2399590582568773E+01, 0.2223029747781157E+01, 0.2028465681071774E+01, 0.1928601105940012E+01, 0.1734632538043284E+01, 0.1705587556623443E+01, 0.1335586809119933E+01, 0.1201248979220471E+01, 0.1103973785860777E+01, 0.9516762968928613E+00, 0.8501027578146555E+00, 0.7334218559333251E+00, 0.5694462065979470E+00, 0.4616704914677346E+00, 0.3869349008726894E+00, 0.2370229392379994E+00, 0.1895639186923105E+00, 0.6837204156138489E-01, 0.3336561258733767E-01, 0.4796873010443177E-02, 0.8309969413683648E-03, 0.1974829088984998E-20, 0.1178494024155901E-08, 0.8095343015842228E-09, 0.1335586809119933E+01, 0.2220446049250313E-15, 0.1020576889344504E-06, 0.1802026823995536E-06, 0.1201248979220471E+01, 0.0000000000000000E+00, 0.6243063866214613E-06, 0.3862955415798747E-06, 0.1103973785860777E+01, 0.6981113564263453E-22, 0.3544097463307990E-10, 0.1357364267827356E-10, 0.9516762968928613E+00, 0.9072531498765813E-25, 0.7979152396248553E-09, 0.3946058728874109E-09, 0.8501027578146555E+00, 0.3130538746543124E-14, 0.2014792167783968E+02, 0.2014792167783968E+02, 0.1020000000000000E+03, 0.3129251700680272E+01, 0.5882352941176471E+01, 0.5818593578868780E-05, 0.5694462065979470E+00, 0.1588643710672175E-16, 0.4031382989989102E-05, 0.4054337523014161E-05, 0.4616704914677346E+00, 0.4437342591868191E-30, 0.3922192530785082E-05, 0.4209867122852495E-05, 0.3869349008726894E+00, 0.1490631566505624E-25, 0.4185837521330395E-06, 0.8450171931154743E-06, 0.2370229392379994E+00, 0.9509832565716118E-20, 0.2486232683772935E-03, 0.1020105306066691E-03, 0.1895639186923105E+00, 0.4152563805083406E-26, 0.4122104994398350E-03, 0.2603466333914367E-03, 0.6837204156138489E-01, 0.2482703040911568E-24, 0.1451022916339763E-02, 0.8718585538326752E-03, 0.3336561258733767E-01, 0.7888609052210118E-30, 0.3124612722893384E-02, 0.2800832977531187E-02, 0.4796873010443177E-02, 0.5945360652724886E-23, 0.1330631700030230E-06, 0.1700369028500688E-07, 0.8309969413683648E-03, 0.0000000000000000E+00, 0.1665788949608015E-02, 0.1927727749653244E-02}, + info: 0, + }, + { + z: []float64{0.5557143146495949E+00, 0.5989968816903124E+00, 0.2940668070493605E+00, 0.6865591553636113E+00, 0.2538362881116337E+00, 0.8562930572057048E-01, 0.8935270452331215E+00, 0.2427258280604294E-01, 0.8872146530392093E+00, 0.8383596820641517E+00, 0.7298494135137694E+00, 0.5456106579379609E+00, 0.5284508278981448E+00, 0.4551015440756836E+00, 0.8310297436868961E+00, 0.2533050402685522E+00, 0.8204820449217906E+00, 0.3961557150240700E+00, 0.9768702237400030E+00, 0.2370292739142171E+00, 0.2559318188841475E-02, 0.9750517337670606E-01, 0.4332045279801727E+00, 0.9393777930670477E+00, 0.1401411199977110E-01, 0.6412771440674316E+00, 0.3992540155849937E+00, 0.6710909099058460E+00, 0.7286319488310415E+00, 0.2796269361967505E+00, 0.7441899058930037E+00, 0.6626826587793098E+00, 0.9214594500725222E+00, 0.3161807402236700E+00, 0.5522479249937589E+00, 0.8328895958825197E+00, 0.3188368475648113E+00, 0.7495883496609020E+00, 0.7525354981370723E+00, 0.4819658709067065E-01, 0.8655147680740739E+00, 0.9438778396406793E+00, 0.2488475915004000E+00, 0.6823535213934872E+00, 0.1937525404626215E+00, 0.5005903164733780E+00, 0.8863816362271992E-01, 0.8279647895785316E+00, 0.7576076924432378E+00, 0.7026499641621615E+00, 0.4430381204856144E+00, 0.7250369983032848E+00, 0.6848785243425647E+00, 0.4460397323983623E+00, 0.4708648248777212E+00, 0.2715064773162834E+00, 0.3027887490966231E+00, 0.7428389405348396E+00, 0.4450045451144832E+00, 0.4683793136386452E+00, 0.2207684946192057E+00, 0.2427030064074031E+00, 0.9554840783351275E+00, 0.4627007756736100E+00, 0.2498171419709001E+00, 0.6457883819068694E+00, 0.9852852516910280E+00, 0.1549706320399313E-01, 0.5863698153730145E+00, 0.8639664213849532E+00, 0.3535803218615043E+00, 0.5300900503312423E+00, 0.6390014357018353E+00, 0.7961857807391770E+00, 0.2691637990251612E+00, 0.5302467438659471E+00, 0.3050412123368091E+00, 0.6256487701731338E+00, 0.3334512397543001E+00, 0.4160884062357342E+00, 0.1255438899512573E+00, 0.1645317210625844E+00, 0.3238197294562333E+00, 0.8765325383521217E+00}, + n: 21, + zOut: []float64{0.2427342887003738E+01, 0.2350720031505609E+01, 0.2023223336640000E+01, 0.1998000565720247E+01, 0.1766392007527096E+01, 0.1571733737439641E+01, 0.1560415852981921E+01, 0.1417948678305651E+01, 0.1258973312710257E+01, 0.1056655934390461E+01, 0.8835393928887348E+00, 0.8723851974669989E+00, 0.7820423442972025E+00, 0.7419840433476598E+00, 0.4998280519834369E+00, 0.4045332331022956E+00, 0.9795545665796999E-01, 0.6816976350034422E-01, 0.5040003524610775E-01, 0.3066447317814986E-01, 0.1707038609221110E-04, 0.0000000000000000E+00, 0.7788285758834551E-10, 0.4967814553062384E-10, 0.1560415852981921E+01, 0.2584939414223288E-25, 0.2197123097785426E-09, 0.1273532664170934E-09, 0.1417948678305651E+01, 0.1666074231826777E-26, 0.1275101209751314E-13, 0.3690153580151478E-13, 0.1258973312710257E+01, 0.3205217501722064E-17, 0.9823174457391989E-10, 0.2521354047663225E-09, 0.1056655934390461E+01, 0.7258232531419596E-14, 0.3712131332588551E-06, 0.9470624651125662E-06, 0.8835393928887348E+00, 0.1013078509970455E-14, 0.2186292540627962E+02, 0.2186292540627962E+02, 0.1200000000000000E+03, 0.3639455782312925E+01, 0.8333333333333334E+01, 0.8044662327724623E-11, 0.7820423442972025E+00, 0.1609007833004439E-16, 0.1435272653873044E-05, 0.2709954877521105E-06, 0.7419840433476598E+00, 0.7040565915227063E-17, 0.3841536774665796E-05, 0.2871402006582635E-05, 0.4998280519834369E+00, 0.2100142105025380E-22, 0.2079096157763567E-04, 0.3245111531694086E-04, 0.4045332331022956E+00, 0.1391829401523057E-17, 0.6737785910120600E-04, 0.9764140649613147E-04, 0.9795545665796999E-01, 0.0000000000000000E+00, 0.6779864796214124E-03, 0.3130513090482015E-03, 0.6816976350034422E-01, 0.2326445472805242E-24, 0.3547436816484852E-02, 0.2240007954218211E-02, 0.5040003524610775E-01, 0.1487168151587342E-22, 0.3710761871988309E-06, 0.2590766399899962E-07, 0.3066447317814986E-01, 0.7395570986446986E-31, 0.2806228106658499E-03, 0.1300265719680322E-02, 0.1707038609221110E-04, 0.5107323294632100E-21, 0.5584126334680110E-02, 0.2863707539154273E-03}, + info: 0, + }, + { + z: []float64{0.8091224458140820E+00, 0.8008972278830493E+00, 0.2578176398184776E+00, 0.1256248089219657E+00, 0.6581359192692769E+00, 0.2304361454551056E+00, 0.7582551898966047E+00, 0.1757884371165862E+00, 0.3186400696162690E+00, 0.7479165768101737E+00, 0.3726824047207358E+00, 0.8797387692666324E+00, 0.5750380180879821E+00, 0.5660816893967801E+00, 0.4438713938433396E+00, 0.1758644078670230E+00, 0.5631776732547016E+00, 0.3584358301396408E+00, 0.9436101806256550E+00, 0.5626737326978751E+00, 0.6424649400467324E+00, 0.8481112336470399E+00, 0.5655978701315552E+00, 0.8705727446437589E+00, 0.2336253154027212E-01, 0.5296192722406249E+00, 0.2416414888807097E+00, 0.8901032371078870E+00, 0.6213866196646989E+00, 0.7130035148592161E+00, 0.7957781913464947E+00, 0.8476792055481847E+00, 0.9456821938668590E+00, 0.9119251640705257E+00, 0.6793496748825844E+00, 0.1959111178023272E+00, 0.1712010119398182E+00, 0.1826738976471362E+00, 0.2526159624017289E+00, 0.1636253698204285E+00, 0.5186411299293459E+00, 0.9760895321955887E-01, 0.6893646610477002E+00, 0.9919227436537437E-01, 0.3790249398464486E+00, 0.9060767708258410E+00, 0.1329141344440885E+00, 0.8748053076614649E+00, 0.3613991427617499E+00, 0.1317424493721138E+00, 0.1676759484196766E-01, 0.7195688942861501E+00, 0.7508197149131951E+00, 0.1084062966598669E+00, 0.7799888885196686E+00, 0.8731271868042269E+00, 0.7281667421703623E+00, 0.5506096404209293E+00, 0.2344365678709384E+00, 0.8253982006984435E+00, 0.6925029659724733E+00, 0.2137159289768908E+00, 0.6304949708624844E+00, 0.2263541700174215E+00, 0.3731966957484361E+00, 0.4056710443895672E-01, 0.1518575777839423E+00, 0.7000182640684851E+00, 0.5207195688041865E+00, 0.3546513077756396E+00, 0.5223091585165126E+00, 0.1312526670646489E+00, 0.6075518716591177E+00, 0.7815133160786110E+00, 0.1466092133856621E+00, 0.6908403097208041E+00, 0.5289383481177163E+00, 0.3060973141340825E+00, 0.2719751878023001E+00, 0.4367099092855503E+00, 0.1678669773704986E+00, 0.2384522838837465E+00, 0.7578135131488263E+00, 0.2260651503779529E+00}, + n: 21, + zOut: []float64{0.3001718609114466E+01, 0.2461580649918252E+01, 0.2139800724137603E+01, 0.2110198913058292E+01, 0.1773285881581521E+01, 0.1731854037718996E+01, 0.1434868444776101E+01, 0.1292334845681036E+01, 0.1202898865215905E+01, 0.9074690574580867E+00, 0.8145281637318031E+00, 0.6833997197084192E+00, 0.6303801796404412E+00, 0.5115989792032534E+00, 0.4365028215455523E+00, 0.3347059637856380E+00, 0.2704761845997483E+00, 0.1007567293499011E+00, 0.7404356572986662E-01, 0.2225224658576705E-01, 0.1003499792335912E-03, 0.1163915500165708E-19, 0.5702083577853931E-06, 0.6235005324467382E-06, 0.1434868444776101E+01, 0.7352183636659830E-27, 0.3221030091629643E-04, 0.6932009635225803E-04, 0.1292334845681036E+01, 0.1547654926086715E-20, 0.2859096049606110E-03, 0.1689403705904475E-03, 0.1202898865215905E+01, 0.5187952724823741E-19, 0.3457740509453089E-04, 0.1548723988845099E-04, 0.9074690574580867E+00, 0.1883346903736854E-18, 0.4924250006037621E-06, 0.3064183963004930E-06, 0.8145281637318031E+00, 0.7436271633171000E-16, 0.2193475493251988E+02, 0.2193475493251988E+02, 0.9400000000000000E+02, 0.2913832199546485E+01, 0.3191489361702128E+01, 0.6928384721316203E-06, 0.6303801796404412E+00, 0.4344707644406440E-17, 0.8243004381261832E-06, 0.1242944619712133E-05, 0.5115989792032534E+00, 0.1321342016245195E-28, 0.6830327722875946E-05, 0.4610227507804771E-05, 0.4365028215455523E+00, 0.7922538128148438E-16, 0.5185315150043044E-04, 0.9574812800552337E-04, 0.3347059637856380E+00, 0.4042912139257686E-29, 0.6190562688247171E-03, 0.1111720505727282E-02, 0.2704761845997483E+00, 0.1659171176970474E-17, 0.3895087988050344E-03, 0.1929449868539905E-03, 0.1007567293499011E+00, 0.2919870821923328E-23, 0.2088900906409071E-03, 0.1786849109209585E-03, 0.7404356572986662E-01, 0.6310887241768094E-28, 0.1266951898160773E-03, 0.1217799054154213E-03, 0.2225224658576705E-01, 0.3697785493223493E-31, 0.1828672832615040E-03, 0.2196698921083079E-03, 0.1003499792335912E-03, 0.0000000000000000E+00, 0.1256202468809242E-02, 0.9158129895566399E-03}, + info: 0, + }, + { + z: []float64{0.7473165994595915E+00, 0.9383144044637891E+00, 0.9705766820209645E+00, 0.3093136353727625E+00, 0.7158638842786125E+00, 0.8927477442087851E+00, 0.5846837014009232E-02, 0.2823227977987499E+00, 0.4656399961948744E+00, 0.1783480145929806E-01, 0.8517241739910267E+00, 0.2968236367983081E+00, 0.3828703962512207E+00, 0.1618551942929359E+00, 0.8422815023410849E+00, 0.9667213467147939E+00, 0.1872774458350456E+00, 0.9673785609387944E+00, 0.1668393270938346E+00, 0.1793363294699661E+00, 0.3882509817575230E+00, 0.9322497724034516E+00, 0.1678634979113953E+00, 0.4000730353927472E+00, 0.1370854040387474E+00, 0.1383728853360747E+00, 0.8728086099072359E+00, 0.7142605368034651E+00, 0.1298497843576266E+00, 0.4890695005398649E+00, 0.6561831309305255E+00, 0.2551502145039813E+00, 0.3137603328050955E+00, 0.4725573834392259E+00, 0.1864194559915778E+00, 0.2476903242862807E+00, 0.3016682498100809E-01, 0.6028908129301045E+00, 0.9699532639034771E+00, 0.6804787742392342E+00, 0.5085224418131328E+00, 0.8160312832212636E+00, 0.4537844508149779E+00, 0.7698002058576117E+00, 0.9102837491884663E-01, 0.7957963901796614E+00, 0.4129806172970929E+00, 0.1183929303892000E+00, 0.7231979382284242E+00, 0.6908050716155305E+00, 0.9129211251463741E+00, 0.8407226028232299E+00, 0.7511043357392063E+00, 0.6614037096770188E+00, 0.5816383867961591E+00, 0.9508597818692400E+00, 0.6671834981267941E+00, 0.5353731249555691E+00, 0.8270836995328532E+00, 0.4748649574057349E+00, 0.7310961648034807E+00, 0.5329698192925740E+00, 0.5537463638220994E+00, 0.8202244086458278E+00, 0.3089778794417031E-01, 0.8347421543151022E+00, 0.7341688304615497E+00, 0.6293051268804178E+00, 0.9685330131023850E-01, 0.2218306173097127E+00, 0.4005982063157664E+00, 0.8004209862846372E+00, 0.9322471342744776E-02, 0.5252230232113276E+00, 0.8078446044346348E+00, 0.8663675770089085E-02, 0.4174348230921995E+00, 0.5316704871571061E+00, 0.8080873214304936E+00, 0.3191328650837369E+00, 0.2265528787275422E+00, 0.1299687059183835E+00, 0.5606006275148095E+00, 0.2716326223111132E+00}, + n: 21, + zOut: []float64{0.2557856639061994E+01, 0.2221569823028635E+01, 0.2113175506056959E+01, 0.1791034203034858E+01, 0.1626866366713385E+01, 0.1553853827140545E+01, 0.1378038738404736E+01, 0.1313711478279983E+01, 0.1103021858691488E+01, 0.8924372074434684E+00, 0.7465727975101516E+00, 0.5658880123536838E+00, 0.5427616116084486E+00, 0.3934406603234193E+00, 0.3139076008306549E+00, 0.2922956394268174E+00, 0.1324157743308766E+00, 0.8492495339426936E-01, 0.1726019296564064E-01, 0.1478900502211735E-02, 0.3047316799617542E-04, 0.0000000000000000E+00, 0.2209423397088722E-18, 0.1230851536694111E-18, 0.1378038738404736E+01, 0.4653537180464338E-22, 0.4724643033910209E-17, 0.2943893377745906E-17, 0.1313711478279983E+01, 0.2193156221990361E-16, 0.1119006893822957E-16, 0.1741431705208298E-16, 0.1103021858691488E+01, 0.2831227495869906E-12, 0.2860829853751284E-15, 0.4129571258389818E-15, 0.8924372074434684E+00, 0.1711229892219076E-22, 0.2249832739645017E-14, 0.3254005212313171E-14, 0.7465727975101516E+00, 0.5231751935973153E-19, 0.1964254226427022E+02, 0.1964254226427022E+02, 0.1110000000000000E+03, 0.3285714285714286E+01, 0.8108108108108109E+01, 0.1373504512438542E-12, 0.5427616116084486E+00, 0.0000000000000000E+00, 0.2663664432452481E-11, 0.1451131289962852E-11, 0.3934406603234193E+00, 0.3021704178298789E-14, 0.8991877456137337E-10, 0.1576401145017008E-09, 0.3139076008306549E+00, 0.2274554202459952E-24, 0.7202855721215940E-08, 0.4214854283718170E-08, 0.2922956394268174E+00, 0.3975858962313899E-27, 0.6024353396932969E-07, 0.1022672043122323E-06, 0.1324157743308766E+00, 0.6969933701296916E-21, 0.1098572510799548E-05, 0.1404105143401733E-05, 0.8492495339426936E-01, 0.6511321020566649E-24, 0.5604469692434887E-06, 0.6104659421650381E-06, 0.1726019296564064E-01, 0.9860761315262648E-31, 0.7747760678878360E-06, 0.1026260244983655E-05, 0.1478900502211735E-02, 0.1334496117765360E-28, 0.5102973157105362E-05, 0.1258609455819239E-04, 0.3047316799617542E-04, 0.0000000000000000E+00, 0.4753862314998056E-03, 0.1863315015192667E-02}, + info: 0, + }, + { + z: []float64{0.2548672807470598E-01, 0.1495421137012933E+00, 0.6637277283391485E-01, 0.6233200993667132E-01, 0.4958061473131723E+00, 0.9804571594196556E+00, 0.5741929121502225E+00, 0.9319350517768583E+00, 0.5154498317218548E-01, 0.4165283024496188E+00, 0.9821854184367015E+00, 0.7510033276340442E+00, 0.2648151368970406E+00, 0.9698327797382789E-01, 0.1433813304773114E+00, 0.1687421369042604E+00, 0.6230509959313209E+00, 0.8106153730403777E+00, 0.5719487513699320E+00, 0.5761793262532514E+00, 0.4983158430615118E+00, 0.8860830618783583E+00, 0.7136722399358287E+00, 0.6310350013419201E+00, 0.5509601824732582E+00, 0.5806336147624858E-01, 0.1818648959869262E+00, 0.2346005241916651E+00, 0.5346851174706903E+00, 0.4444466121668155E+00, 0.8418378722202517E+00, 0.6164532479196363E+00, 0.4298553148227666E+00, 0.2296849794057675E+00, 0.3620982682376475E+00, 0.3645096805309075E+00, 0.9980228064491022E+00, 0.7106112428543574E+00, 0.6651697421094976E+00, 0.9830151455980368E+00, 0.3483046917749841E+00, 0.3668589729383628E+00, 0.5655614401040915E+00, 0.8891526728148491E+00, 0.9164649086142118E+00, 0.4065736846475075E+00, 0.1470436468080603E+00, 0.5802557267939668E+00, 0.8272597245263099E+00, 0.7163617706554632E+00, 0.3488790096540706E+00, 0.6404227109073246E+00, 0.1472796557920839E+00, 0.8764536863696604E-02, 0.5020645462548778E-01, 0.6906675094909457E+00, 0.4668434450047272E+00, 0.7886435616506033E+00, 0.8775817704321313E+00, 0.4246952359284411E+00, 0.1646609549881360E+00, 0.6697681588293083E+00, 0.7914692739599321E+00, 0.1396674072195736E-01, 0.5167232939537366E+00, 0.9374340964740459E+00, 0.4228531365925756E+00, 0.9727064517088465E+00, 0.5765501520393458E+00, 0.5648508784605104E+00, 0.3049637657479770E+00, 0.3063190445223624E+00, 0.5204528216889723E+00, 0.8180178920731451E+00, 0.4938773599630263E+00, 0.8975563911549045E-01, 0.5983688838646251E+00, 0.3698925131813697E+00, 0.2992530973981942E+00, 0.7463539101278609E+00, 0.8005980511688328E+00, 0.7944834752945218E-01, 0.3132925544163919E+00, 0.8866951016419623E+00}, + n: 21, + zOut: []float64{0.2548744028948828E+01, 0.2439584200134194E+01, 0.2276898263864132E+01, 0.2083856178014486E+01, 0.2039342663979975E+01, 0.1949418505713503E+01, 0.1425638870874207E+01, 0.1087729835971203E+01, 0.9667696375323971E+00, 0.8022433247488755E+00, 0.5846254874613492E+00, 0.5355025899480791E+00, 0.3940805795947064E+00, 0.2663780336330241E+00, 0.2413081251593111E+00, 0.1817740817404329E+00, 0.1073144197241267E+00, 0.4327520903789019E-01, 0.3141654146246065E-01, 0.2017433957164045E-01, 0.3181705377209195E-03, 0.2778526523712400E-12, 0.1839247883012458E-10, 0.2248848580297948E-10, 0.1425638870874207E+01, 0.4660214926831417E-16, 0.5684400877302917E-10, 0.6387162891082867E-10, 0.1087729835971203E+01, 0.6729715978266918E-13, 0.1741585337702246E-09, 0.2256709509706825E-09, 0.9667696375323971E+00, 0.8583633357857125E-17, 0.5122248377584688E-09, 0.7095864943104643E-09, 0.8022433247488755E+00, 0.1479114197289397E-30, 0.3545102092401686E-08, 0.2547082836533246E-08, 0.5846254874613492E+00, 0.1684748530176799E-17, 0.2002639308765254E+02, 0.2002639308765254E+02, 0.9900000000000000E+02, 0.2829931972789116E+01, 0.2020202020202020E+01, 0.1450844904575395E-08, 0.3940805795947064E+00, 0.8431345355002174E-26, 0.2834737824482197E-07, 0.1323731756234205E-07, 0.2663780336330241E+00, 0.1205202152489745E-19, 0.2553256673132341E-06, 0.1983391491151363E-06, 0.2413081251593111E+00, 0.5052150994009667E-21, 0.4174664103103917E-06, 0.5361294231508838E-06, 0.1817740817404329E+00, 0.4777592300362271E-19, 0.1103166278762495E-05, 0.1411552925870387E-05, 0.1073144197241267E+00, 0.1369462531463676E-25, 0.4868310689385493E-05, 0.3749559753873054E-05, 0.4327520903789019E-01, 0.6517810995642209E-18, 0.3308901711413922E-04, 0.5021439046381042E-04, 0.3141654146246065E-01, 0.3980258690751375E-19, 0.2091355707842741E-03, 0.1263714817696205E-03, 0.2017433957164045E-01, 0.9608259223012324E-19, 0.2907989762339014E-03, 0.3270695437261140E-04, 0.3181705377209195E-03, 0.2078018254813854E-20, 0.5046681645946245E-02, 0.5971971384809690E-02}, + info: 0, + }, + { + z: []float64{0.7556699778432414E+00, 0.9264145479756024E+00, 0.2732571748073197E+00, 0.6411921070422063E+00, 0.9885815056247259E+00, 0.3723918099656685E+00, 0.8347397513753253E+00, 0.1449609854320509E+00, 0.7237973270068254E+00, 0.7937879503069174E+00, 0.1580314367294657E+00, 0.6183123759968190E-01, 0.8526562423479169E+00, 0.4515796037285547E+00, 0.4273610709781387E+00, 0.9916977661043136E-01, 0.6106106148524300E+00, 0.8331371477897991E+00, 0.3226596180395027E+00, 0.9411873968460633E+00, 0.4713107215814810E+00, 0.2408559451890391E-01, 0.8159283865403915E+00, 0.2484819964854622E+00, 0.9053457264816500E-01, 0.7765873412573800E+00, 0.6903393919382517E-01, 0.4737861094943234E+00, 0.2953181034757211E+00, 0.1455852388723616E+00, 0.3595484224812872E+00, 0.7546693773577520E+00, 0.2176499262400425E+00, 0.2180463762362660E+00, 0.4619066216292487E+00, 0.9195384505328125E+00, 0.7817199663072332E+00, 0.7252058550809327E+00, 0.7231496659924924E+00, 0.4997135548263443E+00, 0.7857040551775740E-01, 0.9096915224111880E+00, 0.5048166916632318E+00, 0.9737715836828489E+00, 0.6597329703373522E+00, 0.1262659377119990E-01, 0.3525536903406803E+00, 0.6167857219758321E+00, 0.7408468432196044E+00, 0.7867196986400673E+00, 0.2313289425583596E+00, 0.8524506859175643E+00, 0.1392061690435467E+00, 0.4799927308227143E+00, 0.5988201473645773E+00, 0.8148615971957359E+00, 0.9991849415795491E+00, 0.4062458282025133E+00, 0.8021012361110058E-01, 0.7041715844729369E+00, 0.9319571339573152E-01, 0.9303801779957639E+00, 0.6825635414858495E+00, 0.2651022334979941E+00, 0.2966022780498856E-01, 0.2756350604456157E+00, 0.3996117016882065E+00, 0.4084803031952775E+00, 0.7693093419592285E+00, 0.5425247266459055E+00, 0.7317803042615013E+00, 0.9398853135227920E+00, 0.5923013015298344E+00, 0.6749323490534131E-01, 0.2677632908794654E+00, 0.1468441510303787E+00, 0.1088650133568649E+00, 0.2179701521651023E+00, 0.8673093102161434E+00, 0.5667697713082290E+00, 0.5061732946886482E+00, 0.4707781162637231E+00, 0.4572852405093119E+00, 0.2817384205908577E+00}, + n: 21, + zOut: []float64{0.2549866140639053E+01, 0.2289692363298807E+01, 0.2042824675422646E+01, 0.1807091836494319E+01, 0.1608583829794490E+01, 0.1518595775727545E+01, 0.1431682400757094E+01, 0.1278141352537376E+01, 0.1218077200015686E+01, 0.1115746594519385E+01, 0.9489661418934578E+00, 0.7950491688285616E+00, 0.6705557578092293E+00, 0.4223587911677574E+00, 0.3211641543143434E+00, 0.1395786344205778E+00, 0.9463219952875908E-01, 0.4563841563552573E-01, 0.3718976888616738E-01, 0.2766660139323238E-01, 0.2861060880329385E-03, 0.1489369389057270E-25, 0.4009456273839574E-11, 0.5913965075566282E-11, 0.1431682400757094E+01, 0.9808641529204798E-18, 0.1658075466067222E-10, 0.2375182467377229E-10, 0.1278141352537376E+01, 0.1561716996498461E-20, 0.5563872147228742E-10, 0.4003249215027731E-10, 0.1218077200015686E+01, 0.8198555146385643E-18, 0.1047304739332037E-09, 0.1509388346471184E-09, 0.1115746594519385E+01, 0.6804594514014344E-21, 0.1132515351796206E-08, 0.7305070647547987E-09, 0.9489661418934578E+00, 0.6324297261214257E-19, 0.2036338790917205E+02, 0.2036338790917205E+02, 0.1050000000000000E+03, 0.3147392290249433E+01, 0.2857142857142857E+01, 0.1188392639382130E-06, 0.6705557578092293E+00, 0.2287929633195320E-19, 0.1283168907741916E-05, 0.1048613283787068E-05, 0.4223587911677574E+00, 0.1189072130544977E-23, 0.1798535669474704E-05, 0.2477367923932174E-05, 0.3211641543143434E+00, 0.8187795594567816E-23, 0.5813187502570164E-05, 0.4274698539216166E-05, 0.1395786344205778E+00, 0.4387796946624011E-14, 0.1512969274311187E-04, 0.4383088766938462E-04, 0.9463219952875908E-01, 0.2802074325023381E-22, 0.1713816584845726E-03, 0.1715892923902221E-03, 0.4563841563552573E-01, 0.8331483361628599E-18, 0.1806157324013782E-06, 0.1193242630586832E-05, 0.3718976888616738E-01, 0.1396316416906445E-20, 0.3480495660704905E-03, 0.4402048010276426E-03, 0.2766660139323238E-01, 0.1504073756330590E-24, 0.6353091961964474E-03, 0.1317363577877200E-03, 0.2861060880329385E-03, 0.4589883047388968E-23, 0.3883745848947868E-02, 0.5358907697572753E-02}, + info: 0, + }, + { + z: []float64{0.8456683250225028E-01, 0.3058015837199188E+00, 0.4317902183064470E-01, 0.3671979469896071E+00, 0.3595487854233631E+00, 0.8791524368561765E+00, 0.1256853689373587E+00, 0.3494000337993621E+00, 0.2131672180923028E+00, 0.4488324680055523E+00, 0.9452502344450827E+00, 0.7197446096567599E+00, 0.8918071015747069E+00, 0.5551949519753436E+00, 0.5627883747367335E+00, 0.6930858113379974E+00, 0.7026202611250518E+00, 0.3856840921343180E+00, 0.4453224782611998E+00, 0.9627551339340559E+00, 0.6255469039377685E+00, 0.6093210861157965E+00, 0.1297243619022892E-01, 0.2745425059216151E+00, 0.5902573930769862E+00, 0.3658719785914519E+00, 0.8179101736936932E+00, 0.4251816548465440E+00, 0.3319568042078717E+00, 0.8294675656951641E+00, 0.1906193594777114E+00, 0.6862699206380130E+00, 0.6832362040809048E+00, 0.8968537122850908E+00, 0.3753636108676777E+00, 0.9926770667520373E+00, 0.7473790867948205E-01, 0.3653635034012445E+00, 0.6553100464759598E-01, 0.1045856631958887E+00, 0.2265961870023414E+00, 0.3205967446655300E-01, 0.1845082884370131E+00, 0.2250092498055734E+00, 0.5876866067653603E+00, 0.2146512915654570E+00, 0.3937206506545190E+00, 0.4110924225795073E+00, 0.3228836105384403E+00, 0.3531543308069818E-01, 0.9472843614842231E+00, 0.2348052564069324E+00, 0.1315455878409307E+00, 0.2246729768637089E+00, 0.8445861542610614E+00, 0.9528962673528295E+00, 0.4907499555456967E+00, 0.9420172239501383E+00, 0.4896535244350841E-01, 0.5088622551995382E+00, 0.1789066474661110E+00, 0.3566730680524121E+00, 0.4279936896698711E-01, 0.5241586506933626E-02, 0.9191361995860731E+00, 0.7666474814508011E+00, 0.8302596584023555E+00, 0.4738482866502817E+00, 0.2085735695866969E+00, 0.3976808123484415E+00, 0.4364253757027529E+00, 0.2407360056333678E+00, 0.4002772343201099E+00, 0.7717338386755229E+00, 0.5023514841326452E+00, 0.8988902694804358E+00, 0.4259852339101408E+00, 0.2067093317010162E+00, 0.8456128611542781E+00, 0.1290027044731792E+00, 0.2598901078235174E+00, 0.5836006873243835E+00, 0.9777637054617091E+00, 0.4896357840832322E+00}, + n: 21, + zOut: []float64{0.2625813250937807E+01, 0.2316814186652984E+01, 0.2239421861777163E+01, 0.1853308891402210E+01, 0.1827033391537137E+01, 0.1481398580531558E+01, 0.1385699025778513E+01, 0.1101045596651604E+01, 0.1077490875294086E+01, 0.6790358065311344E+00, 0.6361857378195889E+00, 0.5095707085100130E+00, 0.4739579905788711E+00, 0.4209497658895578E+00, 0.3012142858983374E+00, 0.2432742659092710E+00, 0.2088674538811938E+00, 0.1664409530858738E+00, 0.2606656040091844E-01, 0.1205810631995507E-01, 0.9325512290661112E-07, 0.1292469707114106E-24, 0.1719039818430849E-04, 0.1845080438772963E-04, 0.1385699025778513E+01, 0.2224123229986848E-19, 0.6819642419856913E-05, 0.9079053758699490E-05, 0.1101045596651604E+01, 0.6054420446023063E-14, 0.5392861994521241E-06, 0.8422816920290823E-06, 0.1077490875294086E+01, 0.7330726620037819E-25, 0.4290042344637304E-06, 0.3471234449409943E-06, 0.6790358065311344E+00, 0.1969273319091676E-18, 0.8635424232755040E-07, 0.8294124288205587E-07, 0.6361857378195889E+00, 0.4466775307674635E-22, 0.1958564738864290E+02, 0.1958564738864290E+02, 0.9700000000000000E+02, 0.2927437641723356E+01, 0.2061855670103093E+01, 0.4284285350948107E-09, 0.4739579905788711E+00, 0.4844247598072386E-17, 0.1501956526577450E-07, 0.4599310764980267E-07, 0.4209497658895578E+00, 0.5697556379758414E-13, 0.1468884761079027E-05, 0.1935721204206928E-05, 0.3012142858983374E+00, 0.3414189997796539E-26, 0.7129394687116921E-05, 0.9262068822983554E-05, 0.2432742659092710E+00, 0.2465190328815662E-31, 0.3320148255009530E-04, 0.2563439348523979E-04, 0.2088674538811938E+00, 0.8874685183736383E-29, 0.9377671959730327E-04, 0.7166613903737452E-04, 0.1664409530858738E+00, 0.1175218723307338E-19, 0.5883141447281398E-03, 0.4140832085136277E-03, 0.2606656040091844E-01, 0.2634795423438179E-27, 0.4797918408258123E-02, 0.4833036765864798E-02, 0.1205810631995507E-01, 0.6530371216255944E-19, 0.7811358433513861E-02, 0.1392611548870054E-01, 0.9325512290661112E-07, 0.1190420191421466E-12, 0.6274023555637595E-01, 0.1241063086176471E-01}, + info: 0, + }, + { + z: []float64{0.6345014789904082E+00, 0.9828013844807603E+00, 0.5292373213190880E+00, 0.3345627500234365E+00, 0.9345959669050260E+00, 0.5873733336147081E+00, 0.8888462128293518E+00, 0.1044020545901757E+00, 0.9375280272458696E+00, 0.1233411973951652E+00, 0.3330283913003940E+00, 0.2432208394685875E-01, 0.6106490172620382E+00, 0.9136489477065954E+00, 0.8250850334045809E+00, 0.7866479843500775E+00, 0.1629924039124250E+00, 0.2349971551206693E+00, 0.1024684774133804E+00, 0.7852727749024598E+00, 0.1427984573527686E+00, 0.4315181982028241E+00, 0.6564047419338838E+00, 0.5555590030741936E+00, 0.8205569452257172E+00, 0.4368031922318115E+00, 0.2897575605849890E+00, 0.6163386054890784E+00, 0.7016794584968877E+00, 0.7265422079630662E+00, 0.6393115149906525E+00, 0.7552597718778955E+00, 0.5029129969011173E+00, 0.4874732646810529E+00, 0.5094624150009296E+00, 0.4766369914172104E+00, 0.9003818070855094E+00, 0.6813014247956244E+00, 0.2988296447575162E+00, 0.6597790416796705E+00, 0.5646192150605487E+00, 0.3275024686793908E+00, 0.2725061169408716E-01, 0.8098076662320616E+00, 0.3345276190659139E+00, 0.1812780354242056E+00, 0.1997802571871318E+00, 0.5440765633504190E+00, 0.9774510594766147E+00, 0.1863483792916641E+00, 0.5910097330685633E+00, 0.2734489448477760E+00, 0.4395818444416557E+00, 0.9022786559097939E+00, 0.1029995124123335E+00, 0.9437933734967648E+00, 0.1226746192846208E+00, 0.1122541771291640E+00, 0.1756516455268763E+00, 0.9109529416432673E+00, 0.3050345572159197E-01, 0.1746678233544180E+00, 0.3750993781268622E+00, 0.4476224977918100E+00, 0.5437446694835568E+00, 0.3729575052852190E+00, 0.3542378566336749E+00, 0.7449948633772266E+00, 0.3157555204945224E+00, 0.7753984984296890E+00, 0.3284038993889418E+00, 0.5159361949232710E-01, 0.4529339074400007E-01, 0.5693581512511349E+00, 0.2213156237057901E+00, 0.9395831428155459E+00, 0.3843047271617620E+00, 0.2968653921042081E+00, 0.6156090467550724E+00, 0.3170556612853570E-01, 0.8265655132088339E+00, 0.3165750369023552E+00, 0.7055602587055542E+00, 0.8365600455841105E+00}, + n: 21, + zOut: []float64{0.2473859321883559E+01, 0.2422834159796051E+01, 0.2342770718537345E+01, 0.2190393245355733E+01, 0.2048748874742353E+01, 0.1880327408972340E+01, 0.1569014269461521E+01, 0.1302496773444914E+01, 0.1193514796722045E+01, 0.1150651682141956E+01, 0.8969794111087930E+00, 0.8226581338194529E+00, 0.6917042463755413E+00, 0.5972139808466055E+00, 0.3480375932216391E+00, 0.2932789944580818E+00, 0.2090971942801221E+00, 0.1221616224423389E+00, 0.1000478595340333E+00, 0.3412207557320287E-01, 0.3160927987836547E-03, 0.2386777554836693E-25, 0.1787847554062023E-08, 0.1930667016131883E-08, 0.1569014269461521E+01, 0.5039432348921582E-18, 0.3047636948536222E-07, 0.1223330280849913E-07, 0.1302496773444914E+01, 0.0000000000000000E+00, 0.7408697490815375E-06, 0.1498788057488595E-05, 0.1193514796722045E+01, 0.6273021918317486E-26, 0.8867922405978688E-08, 0.3710956866722375E-08, 0.1150651682141956E+01, 0.1462883977034466E-17, 0.2681277488017278E-06, 0.6188429230273071E-06, 0.8969794111087930E+00, 0.4930380657631324E-31, 0.2269022845551642E+02, 0.2269022845551641E+02, 0.1110000000000000E+03, 0.3215419501133787E+01, 0.4504504504504505E+01, 0.4606971433208740E-07, 0.6917042463755413E+00, 0.7123549154360197E-18, 0.1197511514786163E-07, 0.1386949181837661E-07, 0.5972139808466055E+00, 0.4652335183636722E-20, 0.1082703076660205E-07, 0.1003906263016573E-07, 0.3480375932216391E+00, 0.3573127201018094E-16, 0.2388210318135170E-06, 0.5694782222336181E-06, 0.2932789944580818E+00, 0.7601337464964823E-24, 0.7791755144624492E-05, 0.3242296896441773E-05, 0.2090971942801221E+00, 0.1663630656286764E-22, 0.9916420504550920E-06, 0.3916254919710180E-05, 0.1221616224423389E+00, 0.1406614427791829E-18, 0.1356917845842480E-04, 0.1379449187478977E-04, 0.1000478595340333E+00, 0.2800456213534592E-28, 0.3213444959426999E-04, 0.2790230345312924E-04, 0.3412207557320287E-01, 0.1075846717720530E-17, 0.8531299184272352E-03, 0.1419520770966347E-02, 0.3160927987836547E-03, 0.1848892746611746E-31, 0.7376316906583622E-02, 0.6546496744187779E-02}, + info: 0, + }, + { + z: []float64{0.7781991870339823E+00, 0.3799726947828087E+00, 0.8225406656461727E+00, 0.4322410258771066E+00, 0.4965834581857734E+00, 0.1642548945285990E+00, 0.4773703559733889E+00, 0.7580746486223987E+00, 0.9220155673403277E+00, 0.1624062232083541E+00, 0.5664470130564820E+00, 0.7367013127895712E+00, 0.4720756942873998E+00, 0.8695958825780965E+00, 0.6045812450089678E+00, 0.8503421320137978E+00, 0.7291568033584502E+00, 0.9563602214514951E+00, 0.1245752972610169E+00, 0.2621011209284912E+00, 0.8642265339858576E+00, 0.9528021036615359E+00, 0.9515862784178062E+00, 0.2632504807072628E+00, 0.8585529108378003E+00, 0.3025834513231899E+00, 0.7125877353473579E+00, 0.9221275053156179E+00, 0.9787992369955746E+00, 0.8789465750552752E+00, 0.9318675804398889E+00, 0.8827440896392771E+00, 0.3124337393280541E+00, 0.3124656972853590E-01, 0.5860766227864144E+00, 0.9812515177915087E+00, 0.4480000254042209E+00, 0.5121903109069345E+00, 0.1837298514334742E+00, 0.2680410429176278E+00, 0.5529294510898309E+00, 0.3627557909974974E+00, 0.9282219359125773E+00, 0.2173723036967439E+00, 0.7593665130145739E+00, 0.6245533364325671E+00, 0.1767680905493787E+00, 0.3823356866170564E+00, 0.5171578058722374E+00, 0.5376155024979712E+00, 0.5280269975706942E-01, 0.7947058949878518E+00, 0.1214716509814368E+00, 0.6840110600217510E+00, 0.7041243787921371E+00, 0.6945194787199669E+00, 0.8184844284849127E+00, 0.3440855810599863E+00, 0.1619958520504678E+00, 0.6990470088709023E+00, 0.3532225659848430E+00, 0.8229090368317697E+00, 0.8349696782028652E+00, 0.6932180266797183E-01, 0.6880274120498576E+00, 0.7566065163897195E+00, 0.2981422921509080E-01, 0.8636153925759227E-02, 0.7928093803058089E-01, 0.3096144259285381E+00, 0.6829886066202427E+00, 0.8246144682759358E+00, 0.2007259621364732E+00, 0.8710862365466575E+00, 0.6898755422119236E+00, 0.9105030198433044E+00, 0.8974818523094739E+00, 0.8909991694059211E+00, 0.8084341913662618E-01, 0.6072211485624930E+00, 0.9680950749726419E+00, 0.3932275197607872E+00, 0.8781208296025552E+00, 0.5527043030768199E+00}, + n: 21, + zOut: []float64{0.3158195987040060E+01, 0.2674397094280163E+01, 0.2611167345511754E+01, 0.2117792657212280E+01, 0.2026395303611904E+01, 0.1943316400161173E+01, 0.1877195462180231E+01, 0.1801757023901512E+01, 0.1273111869927408E+01, 0.1088705127135854E+01, 0.9559661931705944E+00, 0.9013607966201198E+00, 0.6445742634037150E+00, 0.5446175180211763E+00, 0.4486902226406620E+00, 0.3854842198344371E+00, 0.2741584921777233E+00, 0.1210105287753585E+00, 0.6940868812740908E-01, 0.2059029850850508E-01, 0.3673564803695461E-02, 0.8077935669463161E-25, 0.2195808487174199E-10, 0.8449955132778232E-10, 0.1877195462180231E+01, 0.1633831636278255E-19, 0.3497961877980620E-08, 0.7650955873935623E-08, 0.1801757023901512E+01, 0.4072241987713803E-24, 0.2126842707416970E-06, 0.1130018646589442E-06, 0.1273111869927408E+01, 0.1740941751301712E-20, 0.3388039768888790E-03, 0.2863573324805332E-03, 0.1088705127135854E+01, 0.2858227958137079E-16, 0.2905468688553340E-03, 0.2787380120464217E-03, 0.9559661931705944E+00, 0.1315475667900737E-21, 0.2494156905704573E+02, 0.2494156905704573E+02, 0.1010000000000000E+03, 0.3074829931972789E+01, 0.1980198019801980E+01, 0.2647338938369395E-05, 0.6445742634037150E+00, 0.2341846562030201E-22, 0.2667503836084351E-03, 0.1510510164587073E-03, 0.5446175180211763E+00, 0.2242636890234710E-24, 0.5495840118850513E-05, 0.4810476319752364E-05, 0.4486902226406620E+00, 0.3552400222016096E-16, 0.2740332708518062E-05, 0.2562621073339741E-05, 0.3854842198344371E+00, 0.1036641484462207E-22, 0.2248949759797675E-05, 0.2492010005917310E-05, 0.2741584921777233E+00, 0.6071156729318302E-20, 0.4130294607665845E-03, 0.1141603094124651E-03, 0.1210105287753585E+00, 0.2468629837810345E-16, 0.7230132634032991E-02, 0.6618694284253705E-02, 0.6940868812740908E-01, 0.5487745597049798E-23, 0.4151017130761703E-02, 0.4525758324635968E-02, 0.2059029850850508E-01, 0.6083695301064443E-26, 0.3095027772299370E-02, 0.3218440937246976E-02, 0.3673564803695461E-02, 0.6106717417722413E-22, 0.6443405665983428E-02, 0.1622720765285148E-02}, + info: 0, + }, + { + z: []float64{0.1985414918961074E+00, 0.4386372064833388E-01, 0.9272679997999695E+00, 0.9276564660006267E+00, 0.9509373652834754E+00, 0.6247274629358034E+00, 0.4838472987754385E+00, 0.6222976111124274E+00, 0.4248800474043221E+00, 0.9755567793536163E+00, 0.8912410754920851E+00, 0.2313492132656925E-01, 0.1563015923526294E+00, 0.7905214363406186E+00, 0.4927898149840948E+00, 0.5370919594301193E+00, 0.4644799081842790E+00, 0.9960946978984735E+00, 0.2493095982292803E+00, 0.3814725574373231E+00, 0.2940816225707878E+00, 0.6535898793246008E+00, 0.2084037192546966E+00, 0.5132959253232522E+00, 0.4251209694264122E+00, 0.9378579353373483E+00, 0.9786807729708236E+00, 0.7781441628535176E+00, 0.3951333405907657E+00, 0.3920742203259495E+00, 0.1500883321285087E+00, 0.9121803806188729E+00, 0.8516361075320147E+00, 0.6824417668614835E-01, 0.1390781730568696E+00, 0.3112124735573820E+00, 0.2535919561468232E+00, 0.7644352497405866E+00, 0.9218252733114815E+00, 0.9901458352558505E+00, 0.3279511469507669E+00, 0.8365860218696105E+00, 0.3198677553816687E+00, 0.6133665370063144E+00, 0.2580491557527305E+00, 0.6586714927743139E+00, 0.3933698458458805E+00, 0.7194383869235133E-01, 0.2213903901048253E-02, 0.1496106697134404E+00, 0.6766438239122079E+00, 0.7197724372602395E+00, 0.4797148651858846E+00, 0.5998154083597278E+00, 0.5590962662612089E+00, 0.6336887670809047E+00, 0.1072453740736307E+00, 0.7505878626477551E+00, 0.1427362910235584E+00, 0.6016163404777434E+00, 0.9488238354107547E+00, 0.4206748665323531E+00, 0.4473756257202280E+00, 0.2658295729210566E+00, 0.2340075619597504E+00, 0.9617320234413022E+00, 0.5962761690405762E+00, 0.8519099982463364E+00, 0.5571747680961063E+00, 0.1982921114470393E-01, 0.2779304562486129E-01, 0.7924439389736488E+00, 0.9672136382383878E-01, 0.8417095886148459E+00, 0.7473598542298929E+00, 0.9746159458640847E+00, 0.5038819873190444E+00, 0.9169242656654556E+00, 0.5252626769192049E+00, 0.5100979601115528E+00, 0.2790149607164115E+00, 0.4554892778467722E+00, 0.9762420639370454E+00, 0.9832519154713986E+00}, + n: 21, + zOut: []float64{0.2773247209998878E+01, 0.2684570079202721E+01, 0.2535407140485478E+01, 0.2251849067745984E+01, 0.2036533658934636E+01, 0.1904369707782458E+01, 0.1446171755624304E+01, 0.1299751831669502E+01, 0.1269533063987320E+01, 0.1007664938847636E+01, 0.8251797533661941E+00, 0.5818474246453018E+00, 0.5486201168977923E+00, 0.3772420051451134E+00, 0.3380340897724159E+00, 0.2023767003460897E+00, 0.1840234711841343E+00, 0.9225167203340243E-01, 0.4232592978815707E-01, 0.2771262583534443E-01, 0.7321455618534900E-04, 0.2977163580658995E-22, 0.3752078887401622E-10, 0.4179376226086309E-10, 0.1446171755624304E+01, 0.2236367039610280E-12, 0.1299965948722022E-10, 0.1595321259646779E-10, 0.1299751831669502E+01, 0.9926167350636332E-23, 0.8604643146515003E-10, 0.1864418628665438E-09, 0.1269533063987320E+01, 0.1306353659045996E-24, 0.1991121186029356E-08, 0.8983175437487846E-09, 0.1007664938847636E+01, 0.1213184768518325E-22, 0.3444432736029153E-07, 0.6437805745712839E-07, 0.8251797533661941E+00, 0.7772022937681214E-16, 0.2242878545784906E+02, 0.2242878545784905E+02, 0.1000000000000000E+03, 0.3024943310657596E+01, 0.3000000000000000E+01, 0.1709907812443784E-06, 0.5486201168977923E+00, 0.2972680326362443E-23, 0.1350081364219064E-06, 0.1255933647347444E-06, 0.3772420051451134E+00, 0.8046381233254320E-28, 0.7022416754922569E-08, 0.2768431074740138E-07, 0.3380340897724159E+00, 0.1719716773381806E-27, 0.7079953450794871E-07, 0.6648251035830866E-07, 0.2023767003460897E+00, 0.1940724044588524E-24, 0.4764709677102475E-07, 0.4597049352360845E-07, 0.1840234711841343E+00, 0.3459682911934042E-21, 0.4438757837191216E-07, 0.4402069254647340E-07, 0.9225167203340243E-01, 0.2596900924099520E-17, 0.8125925620122143E-07, 0.6770863964779914E-07, 0.4232592978815707E-01, 0.1280067631025782E-15, 0.3584234088053806E-06, 0.4822962810861105E-06, 0.2771262583534443E-01, 0.1012934875847350E-18, 0.1556396151524861E-05, 0.2916279508701459E-05, 0.7321455618534900E-04, 0.1540743955509789E-32, 0.4190434742116713E-02, 0.1362677535010021E-02}, + info: 0, + }, + { + z: []float64{0.6703344952482478E+00, 0.3577116069291627E+00, 0.8432263018920840E+00, 0.9584130033491455E+00, 0.2861685401430958E+00, 0.9668570623620085E+00, 0.6957796127156375E+00, 0.7603022900919236E+00, 0.7677099838587329E+00, 0.2702658617954818E+00, 0.9607212720070546E-01, 0.3973573502375266E+00, 0.8455511814548733E+00, 0.6862903202354254E-01, 0.1789860417278408E+00, 0.1112926642215833E+00, 0.8320621955974556E+00, 0.2637090148175287E+00, 0.7109403389502641E+00, 0.6494529820495407E+00, 0.8828985636942858E+00, 0.9098303542318168E+00, 0.1777489928582532E+00, 0.8977650882542143E-01, 0.7154356412046237E-01, 0.2693107133832517E-01, 0.7956794415059365E-02, 0.8852594037406200E+00, 0.2162284138438216E+00, 0.9216829080200467E+00, 0.9874282279096652E+00, 0.6087745498247736E+00, 0.7694028142872190E+00, 0.5918349824988693E+00, 0.1915561020798640E+00, 0.1135335598824661E-01, 0.6670902390154858E+00, 0.6601113994758983E+00, 0.7779237148990382E+00, 0.9023999203058302E+00, 0.1848842750705929E+00, 0.6120355291150891E+00, 0.7209828136916797E+00, 0.3124354740483853E+00, 0.9520753904353354E+00, 0.9694533109968584E+00, 0.6869212426966154E+00, 0.3510392134251344E+00, 0.7696249856763533E+00, 0.9203915575905880E+00, 0.4616165896255233E+00, 0.6796681592119477E+00, 0.9261196886552191E+00, 0.4511929507295228E+00, 0.5162093776469306E+00, 0.3093101029632945E+00, 0.1162653262260159E+00, 0.1951366360676013E+00, 0.7945099687545387E+00, 0.9707806531485516E+00, 0.4161172559602336E+00, 0.5813461713597171E+00, 0.8442974147064882E+00, 0.9135490286183924E+00, 0.3261094875410662E+00, 0.7080588637364270E+00, 0.3833080381406134E+00, 0.9095051028453779E+00, 0.6909172438403831E+00, 0.5187928284332267E+00, 0.5783778059525303E+00, 0.9615928062069277E+00, 0.2127624116065856E+00, 0.7254035177440832E+00, 0.2587362009618467E+00, 0.7570212065831576E+00, 0.2401238007004233E+00, 0.2744934873404078E+00, 0.9420426561890750E+00, 0.7098059460475599E+00, 0.2691363643891775E+00, 0.4536316870833661E+00, 0.6839445343274818E+00, 0.9336823543434762E+00}, + n: 21, + zOut: []float64{0.2634467575625416E+01, 0.2594635276829839E+01, 0.2463070407655619E+01, 0.2293127065694029E+01, 0.2072673505384417E+01, 0.1459936798288049E+01, 0.1378497856793854E+01, 0.1333239471494390E+01, 0.1102542278566289E+01, 0.8930469384549427E+00, 0.8520787727779708E+00, 0.6953298055150813E+00, 0.6847648677749263E+00, 0.2185116940651705E+00, 0.2008337976176149E+00, 0.1757551361146239E+00, 0.1271484717317025E+00, 0.5049064582277562E-01, 0.3515271339576785E-01, 0.7966224551514293E-02, 0.1685389559757755E-03, 0.1635721388548769E-22, 0.3551032227485648E-11, 0.3089325791958004E-11, 0.1378497856793854E+01, 0.6463020148652660E-17, 0.4439365591922079E-11, 0.5247211770454983E-11, 0.1333239471494390E+01, 0.8616343098037817E-25, 0.4343651596456738E-10, 0.2452653826174233E-10, 0.1102542278566289E+01, 0.9876517884224792E-16, 0.1549700306365952E-08, 0.1012434062383302E-08, 0.8930469384549427E+00, 0.4606319384654338E-19, 0.1115188986357716E-08, 0.1237013304894199E-08, 0.8520787727779708E+00, 0.1447566071967798E-23, 0.2127343784310997E+02, 0.2127343784310997E+02, 0.1270000000000000E+03, 0.3675736961451247E+01, 0.9448818897637794E+01, 0.2782364756724027E-11, 0.6847648677749263E+00, 0.6100457017578579E-23, 0.1535488071926541E-09, 0.5733950833190260E-09, 0.2185116940651705E+00, 0.6436934318898579E-12, 0.5207333190112868E-06, 0.4302907440331721E-06, 0.2008337976176149E+00, 0.1972152263052530E-30, 0.2421587237749379E-06, 0.2920528765870267E-06, 0.1757551361146239E+00, 0.8101601496619791E-27, 0.1434500575863456E-11, 0.9045851929625007E-13, 0.1271484717317025E+00, 0.1560107593833772E-17, 0.1620731838764033E-06, 0.1206839073349329E-06, 0.5049064582277562E-01, 0.3155443620884047E-29, 0.7221494757183839E-05, 0.4279630756550309E-05, 0.3515271339576785E-01, 0.0000000000000000E+00, 0.2092539651031481E-04, 0.3641666945464839E-04, 0.7966224551514293E-02, 0.1018583906139065E-23, 0.4276808715243643E-05, 0.6380573645111411E-06, 0.1685389559757755E-03, 0.0000000000000000E+00, 0.2828744147621957E-02, 0.2649548441232189E-02}, + info: 0, + }, + { + z: []float64{0.7647749557731113E+00, 0.1439440544256733E+00, 0.7500486933916728E+00, 0.6414832886183546E+00, 0.8122572937542115E+00, 0.9529234674941257E+00, 0.3352470221802866E+00, 0.6936226545338587E+00, 0.9931729574752579E-01, 0.3187856199297912E-01, 0.1671537284832858E+00, 0.6799274061730229E+00, 0.8177446911383146E+00, 0.5321042755342652E+00, 0.1611635863708949E+00, 0.1556305029012977E+00, 0.8064987994430675E+00, 0.6086425937675999E-01, 0.9539387771768112E+00, 0.5483826791143146E+00, 0.1624656726546599E+00, 0.8604262189788422E+00, 0.3348601405085260E+00, 0.6512790728986305E+00, 0.3357978279833680E+00, 0.7104789129438286E+00, 0.4161092786312924E+00, 0.8790797243791704E+00, 0.1469866181354552E+00, 0.7277776395098579E-01, 0.4317417806367096E-01, 0.8731968970940820E+00, 0.4856440529809196E+00, 0.2315660100703048E+00, 0.2955911335168215E+00, 0.4119299294790694E+00, 0.4565975215473586E+00, 0.8915397570999283E+00, 0.1639735129501203E+00, 0.5055946074157277E+00, 0.9530743160791620E+00, 0.9836351183281582E+00, 0.2913429799811792E+00, 0.9289008959282562E+00, 0.5996674664338365E+00, 0.6609996028219567E+00, 0.7317528474660470E+00, 0.9903648665746729E+00, 0.3982305249886617E+00, 0.3563571411857538E+00, 0.8851540908639802E+00, 0.8253410045707608E+00, 0.8085297859672740E+00, 0.3918185712378985E+00, 0.7922842941861202E+00, 0.7487878715845681E+00, 0.3117744132747395E+00, 0.7135433852632408E+00, 0.8969220948763633E+00, 0.5840741001028926E+00, 0.3261515465187765E+00, 0.5368137772779212E+00, 0.6371156779602756E+00, 0.5575308178040213E+00, 0.1319054467962255E+00, 0.6274305773732142E+00, 0.9230553933157697E+00, 0.3589158151867838E+00, 0.1429059780004028E+00, 0.6433214640390554E+00, 0.9159704795536289E+00, 0.8998439182451070E+00, 0.5665265465351250E+00, 0.4290736239553739E+00, 0.4923118412965143E+00, 0.3733795042755129E+00, 0.4008465132226234E+00, 0.8630963810875470E+00, 0.2835407905147469E+00, 0.8431337072866282E+00, 0.7450545748778526E+00, 0.2948369760127234E+00, 0.6896108484670013E+00, 0.1073791710993542E+00}, + n: 21, + zOut: []float64{0.2492440020550355E+01, 0.1951232214041701E+01, 0.1924880150346451E+01, 0.1800337146913507E+01, 0.1731259644349016E+01, 0.1515025732591961E+01, 0.1392131403063820E+01, 0.1337121843604905E+01, 0.1335944341051471E+01, 0.9695979508906304E+00, 0.8602855628657217E+00, 0.7598736716193354E+00, 0.5663438341779535E+00, 0.4991982558529897E+00, 0.3900147250500268E+00, 0.2612685334229408E+00, 0.1040703325016068E+00, 0.5095987426708586E-01, 0.4270469018444285E-01, 0.6313950453962554E-02, 0.4526318588114864E-04, 0.1623810366421630E-16, 0.5786287269352850E-19, 0.2440824886543042E-19, 0.1392131403063820E+01, 0.1972152263052530E-30, 0.1305662432930495E-17, 0.2687054746502436E-17, 0.1337121843604905E+01, 0.6807276388656606E-23, 0.2125450465832215E-16, 0.4166517172824519E-16, 0.1335944341051471E+01, 0.3971441341244662E-25, 0.3131313418539388E-15, 0.1598422579069803E-15, 0.9695979508906304E+00, 0.2612707318091991E-24, 0.3703169268599905E-13, 0.5897085302084673E-13, 0.8602855628657217E+00, 0.3944304526105059E-30, 0.1999104914098575E+02, 0.1999104914098576E+02, 0.1050000000000000E+03, 0.3185941043083900E+01, 0.4761904761904762E+01, 0.3815530651290367E-11, 0.5663438341779535E+00, 0.4442864618204738E-26, 0.2314135864505331E-10, 0.3280099800133426E-10, 0.4991982558529897E+00, 0.2524354896707238E-28, 0.8792792965154248E-10, 0.6284153656438893E-10, 0.3900147250500268E+00, 0.2716911819042188E-17, 0.6371083763388994E-09, 0.9063994743331422E-09, 0.2612685334229408E+00, 0.7682295356186976E-14, 0.2615630848198228E-07, 0.4934681155229334E-07, 0.1040703325016068E+00, 0.3134368286722418E-21, 0.1338644268367565E-05, 0.2571041054206291E-05, 0.5095987426708586E-01, 0.6829203137199389E-20, 0.1734538060272007E-04, 0.9160403953625247E-05, 0.4270469018444285E-01, 0.5620633949699709E-29, 0.1970936154220316E-07, 0.7875060113736862E-07, 0.6313950453962554E-02, 0.1074365444038600E-22, 0.1950342748319920E-02, 0.1960570817697857E-02, 0.4526318588114864E-04, 0.5045801736573469E-22, 0.2719687288170513E-02, 0.7229547441545878E-02}, + info: 0, + }, + { + z: []float64{0.6830594937182136E+00, 0.2806903427821971E+00, 0.3842580501524426E+00, 0.7113293946876786E+00, 0.6120481717427926E+00, 0.4087522624125913E+00, 0.2683959794755927E+00, 0.1982680719912362E+00, 0.5503761648124630E+00, 0.9947639519912582E+00, 0.4817851020535202E-01, 0.1841410650783141E+00, 0.7364485595361944E+00, 0.2204876163244174E+00, 0.8785531172976315E+00, 0.3900984044089164E+00, 0.9898399332392419E+00, 0.4652324815840650E+00, 0.6574114801218780E+00, 0.6641201888165797E+00, 0.5371222655177923E+00, 0.2241732155112269E+00, 0.6726821610374456E-01, 0.2361953456198683E+00, 0.5602287124209401E+00, 0.7836687903368798E+00, 0.2633616918428828E+00, 0.9669553142730151E+00, 0.3692579170869618E+00, 0.5395054150347700E-01, 0.4776047537674022E-01, 0.5691410116455676E+00, 0.1304181940038973E+00, 0.2107738642513712E+00, 0.5434523182333528E-01, 0.4019375962886824E+00, 0.7125153526157032E+00, 0.5305712841430671E+00, 0.1164846974244694E+00, 0.2037577925839799E+00, 0.2045617511271008E+00, 0.6122054957321945E+00, 0.5114531146106966E+00, 0.2882478115017332E+00, 0.5304873168821023E+00, 0.1796380649103803E+00, 0.9949092378946756E-01, 0.5448372048900864E+00, 0.1971761401002603E+00, 0.9487011110186927E+00, 0.8526405089060669E+00, 0.4533764477818548E+00, 0.8410819408489681E+00, 0.7592016862970913E+00, 0.8131142938762341E+00, 0.1445496351282255E+00, 0.6614974180377753E+00, 0.3394841721225367E+00, 0.4878107636737276E+00, 0.5499609605641745E+00, 0.1789798083030991E+00, 0.2008397619575961E+00, 0.5247567247775218E+00, 0.7394478154071386E+00, 0.6713478520024037E+00, 0.3894295843862983E+00, 0.9099978858741096E+00, 0.9872931573704680E-01, 0.5370559804237263E+00, 0.8492599321050560E+00, 0.4671993983916084E+00, 0.6397070306147701E+00, 0.2884512208824136E+00, 0.5002881141083532E+00, 0.3356213102526899E+00, 0.4102730364689955E+00, 0.8172446941984062E+00, 0.1463391840674726E+00, 0.6374760821459636E+00, 0.2986995049911381E+00, 0.6932950085590186E+00, 0.8475246239619540E+00, 0.3550038162879430E+00, 0.9747731646460122E+00}, + n: 21, + zOut: []float64{0.2302037253547019E+01, 0.1904432769194928E+01, 0.1838629010091233E+01, 0.1679631021950300E+01, 0.1638588328999231E+01, 0.1556939208705248E+01, 0.1154775776884602E+01, 0.1123025367728587E+01, 0.1005963210310813E+01, 0.7892040895461047E+00, 0.6171474041407791E+00, 0.5107385873854940E+00, 0.4745466376069911E+00, 0.2987072329916590E+00, 0.2518976395749056E+00, 0.1562926917018191E+00, 0.1208002043434920E+00, 0.1117929648180551E+00, 0.3025264937486962E-01, 0.5461437067005637E-02, 0.3901591662109151E-04, 0.2028008633963607E-17, 0.1197298285059118E-05, 0.1163352934520667E-05, 0.1154775776884602E+01, 0.2502221352972909E-22, 0.7438201518083012E-06, 0.8784873727121712E-06, 0.1123025367728587E+01, 0.2368236188315088E-19, 0.3676741199329849E-11, 0.3039307086935086E-11, 0.1005963210310813E+01, 0.2065553394230697E-24, 0.6686270095375819E-11, 0.8550052948388210E-11, 0.7892040895461047E+00, 0.1239058396467615E-20, 0.2067843352216928E-06, 0.6687212675645054E-07, 0.6171474041407791E+00, 0.2620094590259913E-21, 0.1757090250187976E+02, 0.1757090250187975E+02, 0.9500000000000000E+02, 0.2798185941043084E+01, 0.1052631578947368E+01, 0.6997553999213272E-08, 0.4745466376069911E+00, 0.5994838008700348E-24, 0.1052996378646298E-04, 0.6312169743031761E-04, 0.2987072329916590E+00, 0.9860761315262648E-30, 0.1466875513591431E-03, 0.1024839055944592E-03, 0.2518976395749056E+00, 0.7516632826070909E-17, 0.5524256710713082E-08, 0.1151290676113078E-07, 0.1562926917018191E+00, 0.1348952147927930E-27, 0.1222984298841777E-06, 0.3042067118561864E-06, 0.1208002043434920E+00, 0.4760428464210509E-23, 0.9492582004636672E-05, 0.3402727365723720E-04, 0.1117929648180551E+00, 0.7018716354804804E-22, 0.2431231599464108E-03, 0.1315672135071063E-03, 0.3025264937486962E-01, 0.4377821080194221E-21, 0.1333575496853992E-02, 0.6988231628130009E-03, 0.5461437067005637E-02, 0.2193916840728260E-24, 0.1845211740639344E-02, 0.8881725247692956E-03, 0.3901591662109151E-04, 0.2067951531382569E-23, 0.6469870796864946E-02, 0.1027022788337614E-01}, + info: 0, + }, + { + z: []float64{0.3270384527330652E+00, 0.4068565573647237E+00, 0.5445258191923925E+00, 0.9571802305689175E+00, 0.1840747434207346E-01, 0.8759261930487382E+00, 0.3018283835341639E+00, 0.4754674889513868E+00, 0.9620709342523251E+00, 0.3596342978433105E+00, 0.1820397917245298E+00, 0.9562190617892271E+00, 0.8004073710305811E+00, 0.9503584926946729E+00, 0.1634422399578277E+00, 0.3053134184266467E+00, 0.3871438286377282E+00, 0.1225252880124038E+00, 0.5955538022158587E+00, 0.9831372787057571E+00, 0.2130378801829313E+00, 0.1502296787149880E+00, 0.5120891507658710E+00, 0.2769158347903287E+00, 0.6740978559159013E+00, 0.6671510755324899E+00, 0.5252429573239310E+00, 0.7312875683466940E+00, 0.6359518339326128E+00, 0.3635213813950466E-01, 0.7509704695539338E+00, 0.2796455326190517E+00, 0.3929933998036216E+00, 0.2441550702438192E+00, 0.5181887041338979E+00, 0.2149631476903890E-01, 0.1922157358558590E+00, 0.8352708839021310E+00, 0.2143118694803675E+00, 0.8099207585987700E+00, 0.4013415573783083E+00, 0.8990854368069680E+00, 0.2274365144039603E-01, 0.1574221848735892E+00, 0.5021896402707141E+00, 0.6811320055313477E+00, 0.4008235511220088E+00, 0.2607115591315068E+00, 0.8396807341169598E+00, 0.3393611517447541E+00, 0.3095200315094494E+00, 0.8849677836408325E+00, 0.3309280721041051E+00, 0.2177939175852258E+00, 0.7396054658394657E-02, 0.5387313739545944E+00, 0.5592732178453728E+00, 0.4422242955757759E+00, 0.6010599951901635E+00, 0.2729214395073326E+00, 0.8861412244709392E+00, 0.3303460134234409E+00, 0.3230906405176623E+00, 0.5979281304041633E+00, 0.1747480524852378E+00, 0.5019201598522602E+00, 0.3041629115671023E+00, 0.7344252813174572E+00, 0.5145018596354390E+00, 0.7032668540687012E+00, 0.4542245378490408E+00, 0.6883469599293311E+00, 0.7365046871633816E+00, 0.6892200550994384E+00, 0.9612097768268251E+00, 0.3687306903044788E+00, 0.4902139977664450E+00, 0.4004732628576805E+00, 0.2121831569752699E+00, 0.3483027732062219E+00, 0.4140454821962284E+00, 0.5590476647584736E+00, 0.1191647727722587E+00, 0.7126611758207085E+00}, + n: 21, + zOut: []float64{0.2451808019367049E+01, 0.2128252216129400E+01, 0.1884015768998821E+01, 0.1793403527862625E+01, 0.1731698897481475E+01, 0.1605979322764491E+01, 0.1346135733575790E+01, 0.1222183737737495E+01, 0.1054517637460965E+01, 0.8541696661721662E+00, 0.8335553929836017E+00, 0.7643627371640215E+00, 0.6493538020248019E+00, 0.5117674171078171E+00, 0.4801902398267136E+00, 0.1830481952424627E+00, 0.1336751260833609E+00, 0.7548204386515513E-01, 0.4276641694583261E-01, 0.1152852330305948E-01, 0.4825291327526518E-04, 0.1046558665109411E-21, 0.5148060409033168E-10, 0.1742874021361670E-10, 0.1346135733575790E+01, 0.3944304526105059E-30, 0.1177385120842054E-08, 0.5739784145251797E-09, 0.1222183737737495E+01, 0.5228352308675503E-16, 0.2817945521555932E-11, 0.1891433639936970E-11, 0.1054517637460965E+01, 0.1775328283321620E-16, 0.9506244555381454E-11, 0.6780149876052939E-11, 0.8541696661721662E+00, 0.4289572169691169E-11, 0.3560204585171959E-10, 0.5552509181949502E-10, 0.8335553929836017E+00, 0.8925278809447169E-21, 0.1975794267501038E+02, 0.1975794267501038E+02, 0.9900000000000000E+02, 0.3029478458049887E+01, 0.2020202020202020E+01, 0.4057773458399609E-09, 0.6493538020248019E+00, 0.3196600703119960E-17, 0.4936238682205707E-06, 0.2172173957444601E-06, 0.5117674171078171E+00, 0.2475160268480207E-20, 0.1127880382626992E-04, 0.1031817493791828E-04, 0.4801902398267136E+00, 0.2327139670401985E-28, 0.8359957951383868E-05, 0.8045173068477057E-05, 0.1830481952424627E+00, 0.2763487036072314E-23, 0.1049648761427048E-04, 0.8607871065540926E-05, 0.1336751260833609E+00, 0.6392286336815055E-18, 0.5478798785309189E-04, 0.3178071334079827E-04, 0.7548204386515513E-01, 0.1886324196564483E-25, 0.4604839715747456E-05, 0.3206078546562559E-04, 0.4276641694583261E-01, 0.2130807968310579E-24, 0.2160396768988393E-02, 0.2401524776593251E-02, 0.1152852330305948E-01, 0.4597153189491485E-23, 0.1577121702032026E-02, 0.1548884890976950E-02, 0.4825291327526518E-04, 0.0000000000000000E+00, 0.1144436370534878E-01, 0.4805213857273134E-02}, + info: 0, + }, + { + z: []float64{0.1204296195656108E+00, 0.2644532009534747E+00, 0.2981945708465356E+00, 0.3379851046426219E-01, 0.5872157683391875E+00, 0.3661495849020495E+00, 0.2783310889774259E+00, 0.8471009797765506E+00, 0.6087926721027869E+00, 0.7227374835926721E+00, 0.1157491272838733E+00, 0.5565144099551486E+00, 0.8949691253636921E+00, 0.4271566773654165E+00, 0.6387841251831913E+00, 0.3125047228733280E-01, 0.2092736013478247E-01, 0.9188324418961444E+00, 0.2275180796997284E+00, 0.4519662960462961E+00, 0.1155877493866434E+00, 0.3574940735178409E+00, 0.1489772525039219E+00, 0.3847908470095970E+00, 0.4780110568180811E+00, 0.3489586723075616E+00, 0.2559758537216194E+00, 0.7015930720521131E+00, 0.6512181083044030E+00, 0.1619173394771481E+00, 0.5094142654629881E+00, 0.9037662631759247E+00, 0.8829671919577533E+00, 0.5739200804260277E+00, 0.6584413366512047E+00, 0.7174965427568090E+00, 0.2705911606916550E+00, 0.6519148889036277E+00, 0.8284421625450799E+00, 0.1417109678591228E+00, 0.8472265674806589E-01, 0.3638971914001953E+00, 0.8802661885427909E-01, 0.5730596475071164E+00, 0.6156880168413905E+00, 0.3769532609458294E+00, 0.6302840487845919E+00, 0.8652028697564479E+00, 0.5886269364510055E-01, 0.9901772381773877E-01, 0.9679961670969370E+00, 0.9025028618130532E+00, 0.2858592550914936E+00, 0.4523960301168739E-01, 0.9961073801516410E+00, 0.5404176614913075E+00, 0.2161216977420954E+00, 0.6517643909270738E+00, 0.1408193879882935E-01, 0.2323315528058443E+00, 0.4040647670376405E+00, 0.5063393857452272E+00, 0.2149141182072994E+00, 0.8405813011731451E+00, 0.8044826512704509E+00, 0.5364711289689184E+00, 0.2922476360373625E+00, 0.9518940562302493E+00, 0.1980063292193738E+00, 0.6243757640305569E-01, 0.3641799792979717E+00, 0.4781083740929701E+00, 0.3488268687432241E+00, 0.8284107864073382E+00, 0.5855039308834178E+00, 0.2593007284605915E+00, 0.9998845891621441E+00, 0.5048349794999019E+00, 0.5828201446782487E+00, 0.8921301000231074E+00, 0.2672402237051515E+00, 0.3352853759971494E+00, 0.5977528180071631E+00, 0.1151194604047919E+00}, + n: 21, + zOut: []float64{0.2557315455353142E+01, 0.2083235685800309E+01, 0.1875944452104717E+01, 0.1852714062580819E+01, 0.1643995946812320E+01, 0.1314218355716144E+01, 0.1293789198407225E+01, 0.1108624029644386E+01, 0.1060866236520538E+01, 0.6893140608436983E+00, 0.6265017468006577E+00, 0.6169803536834606E+00, 0.4472638275156540E+00, 0.3909824987049766E+00, 0.2990543016857948E+00, 0.1644755201813542E+00, 0.1145158516686298E+00, 0.6240413476421734E-01, 0.2540980528285533E-01, 0.1114684260186565E-01, 0.3077034058364147E-04, 0.1514612938024343E-27, 0.1068838715614041E-10, 0.1816953714834036E-10, 0.1293789198407225E+01, 0.1634858280249726E-16, 0.1546152805249061E-09, 0.7139985980503436E-10, 0.1108624029644386E+01, 0.1852295205932338E-17, 0.2931760870340471E-08, 0.5717158524063146E-08, 0.1060866236520538E+01, 0.1656986554198631E-24, 0.3897819821179759E-07, 0.2050786216968739E-07, 0.6893140608436983E+00, 0.1054613376713825E-21, 0.1114796130440952E-06, 0.1754727955273104E-06, 0.6265017468006577E+00, 0.0000000000000000E+00, 0.1823878313701335E+02, 0.1823878313701335E+02, 0.1020000000000000E+03, 0.3172335600907029E+01, 0.3921568627450980E+01, 0.4944285541926277E-08, 0.4472638275156540E+00, 0.7188113412291574E-19, 0.5360570179815202E-09, 0.5055207828345367E-09, 0.3909824987049766E+00, 0.7011182861561962E-17, 0.5424596001050196E-08, 0.1149191082508281E-07, 0.2990543016857948E+00, 0.1397964075969312E-24, 0.2148922978775398E-05, 0.1039924072201963E-05, 0.1644755201813542E+00, 0.1424715207546021E-19, 0.1286356681922344E-03, 0.6709371685087021E-04, 0.1145158516686298E+00, 0.1923558431290915E-24, 0.1040681698574874E-03, 0.9690504707177204E-04, 0.6240413476421734E-01, 0.3021337266996475E-27, 0.3740811812377314E-06, 0.8725750691496404E-06, 0.2540980528285533E-01, 0.6622271595176623E-28, 0.2937391640354928E-03, 0.1148070460566611E-03, 0.1114684260186565E-01, 0.3845696912952433E-29, 0.9582588059437623E-03, 0.1284334386264186E-02, 0.3077034058364147E-04, 0.1610185014413679E-23, 0.1713355521956925E-01, 0.1560043716021792E-01}, + info: 0, + }, + { + z: []float64{0.6550531738065145E+00, 0.9006303757888976E+00, 0.9204609778380736E+00, 0.4658341923257867E+00, 0.5436644687290008E+00, 0.2908556755036122E+00, 0.1209811495723523E+00, 0.6227378829506942E+00, 0.3843019792679099E+00, 0.4431829610151485E+00, 0.4903210952175132E+00, 0.4210264133022774E+00, 0.3200750839632230E+00, 0.2252794777033682E+00, 0.5128630958928748E-01, 0.5136099492114639E+00, 0.4906286803922755E+00, 0.1747340137845675E+00, 0.6367238354860758E+00, 0.7515407582129341E+00, 0.4275500565044866E+00, 0.2014278558825494E+00, 0.7137603260056157E+00, 0.8686875192977085E+00, 0.7169591605793454E+00, 0.9050302202813415E+00, 0.9899533400874350E-01, 0.9969046692447475E+00, 0.6121260436585757E+00, 0.6518683331715626E+00, 0.5607404970528083E+00, 0.4000687152662108E-03, 0.1221862374388689E+00, 0.4484923714483016E+00, 0.4074629631039243E+00, 0.2322333097032281E-01, 0.4732551077558298E+00, 0.7342979327909982E+00, 0.3458749207719752E+00, 0.7729568887054280E+00, 0.2047858477824707E+00, 0.7991048365911296E+00, 0.5370237056253078E+00, 0.2233168849800682E-01, 0.5135288197983614E+00, 0.9129664417816657E+00, 0.9407166870649586E+00, 0.4321958081203685E+00, 0.5563774896630214E-01, 0.9494906037764664E+00, 0.9674063566885983E+00, 0.2302624676329315E+00, 0.1506811640032519E+00, 0.4445855507514112E+00, 0.6038782945102905E-01, 0.4499742519338505E+00, 0.1940991655604004E+00, 0.6493052482066142E-01, 0.2902929850901331E+00, 0.2876163569026815E+00, 0.9140475482126542E+00, 0.7006705577674063E+00, 0.2819386709216735E+00, 0.9125816873773608E+00, 0.9433170896498744E-01, 0.1632821600392161E+00, 0.3150556796654537E+00, 0.4051206017420083E+00, 0.2687493393481850E+00, 0.5768057516945001E+00, 0.4306858988251338E+00, 0.3827211690774009E+00, 0.3593520435650671E+00, 0.5610694397953092E+00, 0.7151178950427733E+00, 0.7138830385076256E-01, 0.5281951083990266E-01, 0.4880677722651299E+00, 0.9334247489037772E+00, 0.6764242544288053E+00, 0.8551178347453967E+00, 0.1876923010834376E+00, 0.7408118952029578E+00, 0.7967219280126981E+00}, + n: 21, + zOut: []float64{0.2493394334366539E+01, 0.2460477172068809E+01, 0.2083159145455880E+01, 0.1779228959307519E+01, 0.1724095029781113E+01, 0.1560812668654360E+01, 0.1120482054552078E+01, 0.1088744749350826E+01, 0.9613598859526896E+00, 0.9456175481954929E+00, 0.9119552728538921E+00, 0.7767939725863090E+00, 0.6893167116879397E+00, 0.4408717103973492E+00, 0.2706330695081346E+00, 0.2343515836463984E+00, 0.6795401725828518E-01, 0.6600498464192311E-01, 0.2004873521291848E-01, 0.1421097732958122E-01, 0.4015560238058376E-03, 0.2226481018895784E-25, 0.2564499425740104E-12, 0.2658329977886514E-12, 0.1120482054552078E+01, 0.4315813836253463E-23, 0.1335501643346940E-12, 0.1368307862991113E-12, 0.1088744749350826E+01, 0.3926080427856238E-18, 0.1185565636052547E-12, 0.1214013431095007E-12, 0.9613598859526896E+00, 0.2719992401202049E-26, 0.9906513980413714E-13, 0.1012398200894782E-12, 0.9456175481954929E+00, 0.3937993638863291E-26, 0.9389079133840153E-13, 0.9189527811944332E-13, 0.9119552728538921E+00, 0.1580250204306566E-21, 0.1970991413883184E+02, 0.1970991413883184E+02, 0.1080000000000000E+03, 0.3401360544217687E+01, 0.8333333333333334E+01, 0.6496201881821226E-13, 0.6893167116879397E+00, 0.2040319821514109E-19, 0.6886568712781699E-13, 0.6342531805840532E-13, 0.4408717103973492E+00, 0.9116462109840799E-16, 0.6575726430673280E-12, 0.1146915438924438E-11, 0.2706330695081346E+00, 0.6100742213737356E-14, 0.5548784478521690E-10, 0.9411844035493366E-10, 0.2343515836463984E+00, 0.2464780121144947E-24, 0.1267470050081896E-08, 0.7549586177318002E-09, 0.6795401725828518E-01, 0.6058451752097371E-27, 0.2494439518946058E-07, 0.4030144639288306E-07, 0.6600498464192311E-01, 0.1931466728993349E-20, 0.1742718098912744E-06, 0.1063050845015484E-06, 0.2004873521291848E-01, 0.2078695185822955E-22, 0.1365398583912438E-05, 0.6056776980192580E-06, 0.1421097732958122E-01, 0.3944304526105059E-30, 0.8436693551699617E-06, 0.8772483974218289E-06, 0.4015560238058376E-03, 0.5424456586666688E-20, 0.1372662528173007E-02, 0.2323379424199439E-03}, + info: 0, + }, + { + z: []float64{0.5955158028190186E+00, 0.9601282390728449E-01, 0.2944266054820921E+00, 0.3924250378682403E+00, 0.4462256781176310E-01, 0.5690757232665151E+00, 0.7855339329019884E-01, 0.8681545225840360E+00, 0.7288006955920397E+00, 0.2963229749240101E+00, 0.2728029241156386E+00, 0.4237536504971896E+00, 0.9003368942847588E+00, 0.7357957067011865E+00, 0.4901129309073038E-01, 0.4716171621744532E+00, 0.4890099406800087E+00, 0.3570165784460172E+00, 0.7160897857565474E-01, 0.6109824519907316E+00, 0.1221913259189585E+00, 0.1847302629402909E+00, 0.4009366884871202E-01, 0.9703472440233364E+00, 0.6369052870991366E+00, 0.5580400433416689E+00, 0.9024815855223057E+00, 0.1227045689636573E+00, 0.9668897094172768E+00, 0.5989409973498315E+00, 0.9709139844325040E+00, 0.9532564522700616E+00, 0.6239574483953332E+00, 0.7056703505253071E+00, 0.9506691238320553E-01, 0.7998586962365666E+00, 0.6556519136464994E+00, 0.4181856697120553E+00, 0.9478314170226607E+00, 0.3832663309972284E-01, 0.4257218688507075E+00, 0.2049443327129853E+00, 0.9168853967010917E+00, 0.5423988966788751E-02, 0.3002879152136316E+00, 0.7743151012217909E+00, 0.5154350917338609E+00, 0.9658560730800175E+00, 0.6314599250676610E+00, 0.5584937104443134E+00, 0.4741445335250092E+00, 0.3157508358915576E+00, 0.4349529093465575E+00, 0.7860003715032308E+00, 0.8695087804152180E-02, 0.3920445280700808E+00, 0.3765485221235618E+00, 0.4334604109656897E+00, 0.1636117026415890E+00, 0.3006093728066712E+00, 0.2129148932459900E+00, 0.3092975700919495E+00, 0.1986761620686717E-01, 0.9075541031649185E+00, 0.9781911433730479E+00, 0.6945955075731600E+00, 0.9959584477684137E+00, 0.7505944883792014E+00, 0.7627854018352902E+00, 0.1267035334952504E+00, 0.8056780234474171E+00, 0.4507060196586773E+00, 0.1799397964631048E+00, 0.7554691089798000E+00, 0.3012534688386570E+00, 0.9612172487804931E+00, 0.4056708256608614E+00, 0.6648221051068217E+00, 0.1966051207552482E+00, 0.6661008672469584E+00, 0.6875730168317549E+00, 0.9591133633640367E+00, 0.8995318056907078E+00, 0.1435403265941513E+00}, + n: 21, + zOut: []float64{0.2826953331143077E+01, 0.2184946373215138E+01, 0.2011432985807930E+01, 0.1983939371799505E+01, 0.1783403572375380E+01, 0.1527291743334771E+01, 0.1218359458122959E+01, 0.1031625203087357E+01, 0.9141017580644314E+00, 0.8935891545682184E+00, 0.7995009441187808E+00, 0.6760292370761557E+00, 0.5375939998175604E+00, 0.5031272745805969E+00, 0.4136950654384539E+00, 0.4077555149266558E+00, 0.1977184484214556E+00, 0.1172157517521918E+00, 0.4197144528461013E-01, 0.1336078057720851E-01, 0.3545889291755145E-06, 0.2544082546855865E-16, 0.2583036406189355E-05, 0.3206950450307273E-05, 0.1218359458122959E+01, 0.6512835633504673E-25, 0.5241867641497365E-06, 0.5644106780290774E-06, 0.1031625203087357E+01, 0.0000000000000000E+00, 0.4305359229680111E-07, 0.8271940560154021E-07, 0.9141017580644314E+00, 0.0000000000000000E+00, 0.3911233321019150E-06, 0.2241550799736728E-06, 0.8935891545682184E+00, 0.2385737520619250E-22, 0.4206034452718400E-11, 0.9899461762377114E-11, 0.7995009441187808E+00, 0.9331359083488707E-16, 0.2008361176810137E+02, 0.2008361176810137E+02, 0.1130000000000000E+03, 0.3444444444444445E+01, 0.6194690265486726E+01, 0.1651034509856568E-04, 0.5375939998175604E+00, 0.1421716677825516E-23, 0.1528222338287967E-04, 0.2433829126418849E-04, 0.5031272745805969E+00, 0.6632003279205155E-19, 0.4757657931696731E-05, 0.2751276356124619E-05, 0.4136950654384539E+00, 0.1680371209901916E-16, 0.1318069984220972E-06, 0.1659409431372840E-06, 0.4077555149266558E+00, 0.2554525986432683E-22, 0.5944173486813264E-06, 0.1429245864393051E-05, 0.1977184484214556E+00, 0.1494891415393817E-27, 0.8465737022131437E-03, 0.4160790916597339E-03, 0.1172157517521918E+00, 0.6780166836549887E-20, 0.3655496023749206E-04, 0.5562211290196199E-04, 0.4197144528461013E-01, 0.1803076020780872E-22, 0.2337686132102848E-02, 0.5241185550833300E-02, 0.1336078057720851E-01, 0.3234329711406148E-27, 0.6369386968947829E-02, 0.2727172056719641E-02, 0.3545889291755145E-06, 0.0000000000000000E+00, 0.6135698199493001E-02, 0.4453215245051444E-02}, + info: 0, + }, + { + z: []float64{0.5256994769563229E+00, 0.4751970954150097E+00, 0.5550798296722601E+00, 0.3565746805143110E+00, 0.3971523551134015E-01, 0.7088262788771817E+00, 0.6369448567868402E+00, 0.6372974860231623E+00, 0.5963599363854956E+00, 0.7996832763398349E+00, 0.7266271077857295E+00, 0.3813393981851099E+00, 0.8884393254050771E-01, 0.8685934834267716E+00, 0.3797066359545181E+00, 0.4541910736411658E+00, 0.6285354031372432E+00, 0.5295256159852654E+00, 0.8908170817260027E+00, 0.5793264969983637E+00, 0.6056871126785802E+00, 0.6045507124525907E+00, 0.9734230310286895E-01, 0.9482358811543057E+00, 0.8804820874856442E+00, 0.4472263119108183E+00, 0.5843860139759072E+00, 0.5372922689923049E+00, 0.5799351791336661E+00, 0.5116182356749631E+00, 0.3816355069915517E+00, 0.6475808331559241E+00, 0.8746013736579017E-02, 0.8411650861050215E+00, 0.2992737481736951E-01, 0.6246901010621124E+00, 0.3123078564554325E+00, 0.7411164234121632E+00, 0.5960432842954070E+00, 0.8102594121204127E+00, 0.3552957522458323E+00, 0.6235337320803771E+00, 0.5962195242077326E+00, 0.4845790335098474E+00, 0.4045953379382708E+00, 0.2452522545656534E+00, 0.2743318280596185E+00, 0.2023077390748810E+00, 0.4206973723636350E+00, 0.4039949452544738E+00, 0.9114680949622015E+00, 0.7779482986378454E+00, 0.6812819304160683E+00, 0.5580962104642140E-01, 0.4287711156774094E+00, 0.9817581515129085E+00, 0.4431516884275333E+00, 0.6237912221093689E-01, 0.8364254576520689E+00, 0.8759899245723605E+00, 0.8787473635901457E+00, 0.4702211826699049E+00, 0.8284521047414805E+00, 0.2041855966018515E+00, 0.8060130309143703E+00, 0.5501723689038956E+00, 0.2188842792675016E-01, 0.5672241818001204E+00, 0.6450459353754012E+00, 0.2431902854401001E+00, 0.5193698672717711E+00, 0.1962120228423043E+00, 0.6361488000943472E-01, 0.5342761659162559E+00, 0.1758994081846166E-01, 0.7459187699999678E+00, 0.5953394313659540E+00, 0.9379918174958790E+00, 0.4032831592210619E+00, 0.7704238877222783E+00, 0.9410981148731864E+00, 0.8355998775704846E+00, 0.7904637124553195E+00, 0.4324126135288506E+00}, + n: 21, + zOut: []float64{0.2360605380677641E+01, 0.2349812365456326E+01, 0.2259072978559188E+01, 0.2074669549844899E+01, 0.1734529465065066E+01, 0.1635336277856887E+01, 0.1535245292061319E+01, 0.1453596007978833E+01, 0.1156130097482147E+01, 0.1084746900314168E+01, 0.1034520391904089E+01, 0.8201881896309742E+00, 0.6191782955028541E+00, 0.5267433243518804E+00, 0.4355086546946592E+00, 0.4155619327338856E+00, 0.3396295360604018E+00, 0.9317218785919168E-01, 0.5773665727788814E-01, 0.1842462732727454E-01, 0.2018232369069597E-07, 0.4517585523147273E-24, 0.2167663685989129E-10, 0.1523023581682742E-10, 0.1535245292061319E+01, 0.1340432450151543E-25, 0.8069500146896454E-10, 0.1279555645700667E-09, 0.1453596007978833E+01, 0.6673291668607916E-16, 0.1337219714947293E-07, 0.4537550993048733E-08, 0.1156130097482147E+01, 0.2388039732285047E-25, 0.6170125127971897E-05, 0.1353762614268721E-04, 0.1084746900314168E+01, 0.3862470231561244E-18, 0.2338329578753200E-04, 0.2318969913953679E-04, 0.1034520391904089E+01, 0.6409494854920721E-30, 0.2200440813282189E+02, 0.2200440813282190E+02, 0.9400000000000000E+02, 0.2857142857142857E+01, 0.0000000000000000E+00, 0.2156912239043876E-04, 0.6191782955028541E+00, 0.4311940021813490E-19, 0.2098085305628239E-04, 0.2047701462113856E-04, 0.5267433243518804E+00, 0.7292491488692259E-18, 0.2483658471590867E-04, 0.2278231239253353E-04, 0.4355086546946592E+00, 0.6335396825622830E-16, 0.5560492899787359E-04, 0.8068766398366361E-04, 0.4155619327338856E+00, 0.7336406418555410E-28, 0.3220618566867426E-03, 0.1956958209756436E-03, 0.3396295360604018E+00, 0.1297676189088564E-27, 0.4121897802138222E-02, 0.2587205720417875E-02, 0.9317218785919168E-01, 0.7651950780643815E-28, 0.2826512581544380E-02, 0.2814359488753958E-02, 0.5773665727788814E-01, 0.4923437167052441E-21, 0.1821079370679042E-04, 0.2969056479875054E-04, 0.1842462732727454E-01, 0.4842851680813876E-21, 0.4217326450522519E-02, 0.5738852897157041E-02, 0.2018232369069597E-07, 0.2018232369069597E-07, 0.3702854219118327E-02, 0.7091388009151286E-02}, + info: 0, + }, + { + z: []float64{0.5196081465664333E+00, 0.1450873999446859E+00, 0.1902498073897446E+00, 0.9459083122514356E-01, 0.6971960507146802E-01, 0.2126447963850432E+00, 0.1693138701795316E-01, 0.6615449591751588E-01, 0.6671851537110856E+00, 0.7116922416084167E+00, 0.7735840319989629E+00, 0.8593705742984634E+00, 0.6060015557980403E+00, 0.1071620560007485E+00, 0.6056582690297291E+00, 0.2064801115284116E+00, 0.4992099275808294E+00, 0.9056413330105546E+00, 0.6051575714193578E+00, 0.1395071235858423E+00, 0.3386142237730057E+00, 0.2065895571122717E+00, 0.2774285740015214E-01, 0.4649920904615868E+00, 0.9062834189437683E+00, 0.3022801499192989E+00, 0.2125071125007829E+00, 0.2366624610094756E+00, 0.3232052419625674E+00, 0.5879745505340277E+00, 0.3212955913685801E+00, 0.9110441809347004E+00, 0.2144184579231917E+00, 0.5617161155671668E-01, 0.9725855527757206E+00, 0.9798782363582490E+00, 0.9666637418953663E+00, 0.1842420381101751E+00, 0.9810363127661145E+00, 0.4061071205983764E+00, 0.4929437214282740E+00, 0.3087398230344144E+00, 0.8692083335886002E+00, 0.7401065606674918E+00, 0.6829833274325647E+00, 0.9797795404622264E+00, 0.6101846761247042E+00, 0.7796537878703258E+00, 0.4568641605073986E-01, 0.1752946998854403E+00, 0.7558659638245062E+00, 0.4081915619381170E+00, 0.5344465439920063E+00, 0.3199118710728778E+00, 0.3613720388280138E+00, 0.1409062127217534E+00, 0.2811520826338662E+00, 0.9462348779627723E+00, 0.4911007415294493E+00, 0.2488061765237712E+00, 0.1661818317483100E+00, 0.1203910774987040E+00, 0.4544163143251944E+00, 0.8767242907488393E+00, 0.6688224142601292E+00, 0.2497550267789769E+00, 0.2658845545571695E+00, 0.4072601097670568E+00, 0.5517137496493807E+00, 0.4206663434956901E+00, 0.3655154771809294E+00, 0.6509199815744504E-01, 0.6480911975614350E+00, 0.1271267318339999E+00, 0.8874102966539428E+00, 0.9607257650026479E+00, 0.8902777005093224E+00, 0.7074702462790970E+00, 0.5045879991550398E+00, 0.3357826713243962E+00, 0.9303671751018463E+00, 0.3667268693834904E+00, 0.7709773173263057E+00, 0.1274123220614284E+00}, + n: 21, + zOut: []float64{0.2669666350125788E+01, 0.2458073928301015E+01, 0.1960648799383531E+01, 0.1674511937828339E+01, 0.1629444569956276E+01, 0.1605168511500282E+01, 0.1169506153633164E+01, 0.8378899015114316E+00, 0.8214470290652885E+00, 0.7290022816300561E+00, 0.5956393798847858E+00, 0.5147057006185641E+00, 0.3415078453317431E+00, 0.3316800239182673E+00, 0.2245847640277715E+00, 0.1981086483360383E+00, 0.1729134064527326E+00, 0.1081292683666610E+00, 0.4856623040087921E-01, 0.2705373732739987E-02, 0.9745444154776346E-03, 0.7298616502634276E-19, 0.4601636530183765E-14, 0.3001385089664378E-13, 0.1169506153633164E+01, 0.5522026336547083E-28, 0.9439817212889541E-12, 0.1534086358433234E-11, 0.8378899015114316E+00, 0.7174347921301560E-11, 0.1095021852663145E-10, 0.1580074435702411E-10, 0.8214470290652885E+00, 0.3131705799125763E-20, 0.2247124942125492E-10, 0.3228253356903498E-10, 0.7290022816300561E+00, 0.6063934311659721E-18, 0.3794147471177530E-13, 0.3318524623173314E-12, 0.5956393798847858E+00, 0.3765687391680646E-13, 0.1809487464842083E+02, 0.1809487464842083E+02, 0.1050000000000000E+03, 0.3215419501133787E+01, 0.3809523809523809E+01, 0.2077325438490571E-07, 0.3415078453317431E+00, 0.1645262238367970E-20, 0.7912752069326401E-07, 0.6053132028546428E-07, 0.3316800239182673E+00, 0.4184118241292247E-26, 0.1343987419983520E-06, 0.1754397466154310E-06, 0.2245847640277715E+00, 0.3340387958036406E-22, 0.6150231447604006E-06, 0.4780001259056422E-06, 0.1981086483360383E+00, 0.1070733604161610E-20, 0.1003229473607176E-05, 0.1287291281183416E-05, 0.1729134064527326E+00, 0.1298955481663118E-20, 0.1611116216931278E-05, 0.3807035614938680E-06, 0.1081292683666610E+00, 0.4901279578837721E-23, 0.3565927169328702E-03, 0.2312261838015572E-03, 0.4856623040087921E-01, 0.3325573155747123E-13, 0.4389787505319806E-03, 0.9715248586459800E-03, 0.2705373732739987E-02, 0.1348432029845013E-20, 0.7371401467208961E-04, 0.2975668602269332E-04, 0.9745444154776346E-03, 0.4135903062570168E-24, 0.7273370201297700E-04, 0.3602244970122637E-04}, + info: 0, + }, + { + z: []float64{0.3441168249350421E+00, 0.7064572711980356E+00, 0.6589781374655990E+00, 0.8687841598825752E+00, 0.7811747459515918E+00, 0.7470750719206745E+00, 0.7591454338662803E+00, 0.7956934079357347E-01, 0.3416983743372617E+00, 0.3365394610260509E+00, 0.8635365040683821E+00, 0.4793906833418223E+00, 0.9394584418725971E+00, 0.7354375226759881E+00, 0.3959912256877245E+00, 0.4088558388864650E+00, 0.6899389113237457E+00, 0.6329180251180861E+00, 0.6760812245614891E+00, 0.1743991444245150E+00, 0.3881927716152306E+00, 0.2103848624556167E+00, 0.5309784956583943E+00, 0.5758384660199964E+00, 0.6542468116269122E+00, 0.2141275453071043E+00, 0.4917208240158387E+00, 0.6996271491850585E+00, 0.7074081025976766E+00, 0.1896811377589238E+00, 0.4872676647104760E+00, 0.8987347035581787E+00, 0.1651654313203957E+00, 0.7969431328829826E+00, 0.8979672856778195E+00, 0.2621352236509209E+00, 0.2994430908669790E+00, 0.8412000921937168E+00, 0.6910228781616401E-01, 0.9849719192333963E+00, 0.2835195798153757E+00, 0.6126955834278749E+00, 0.9957514180764350E+00, 0.4133859474205875E+00, 0.2126790023013077E+00, 0.9230696247878700E-01, 0.5165813646587417E+00, 0.9232126059423650E+00, 0.6160486127374017E+00, 0.5529065454633691E+00, 0.6862175458708878E+00, 0.2677675454795836E-01, 0.6729513992144193E+00, 0.8612993184178528E+00, 0.5455358966165057E+00, 0.2518716982253303E+00, 0.5312849864208884E+00, 0.7551228210749875E+00, 0.1095520838657484E+00, 0.8767983608629261E+00, 0.9578119141004069E+00, 0.6878921114137557E+00, 0.2890574974795965E+00, 0.9851780344062913E+00, 0.9392886821673129E+00, 0.4125982690623264E+00, 0.6817912182549608E+00, 0.7805388095263401E+00, 0.1567802887930034E+00, 0.1901362770322003E+00, 0.5155717108920093E+00, 0.5470641908290981E+00, 0.9496522047623522E+00, 0.4367251554723609E+00, 0.7016249991347693E+00, 0.6652534390290816E+00, 0.3892590437090979E+00, 0.1464591367640408E+00, 0.9179795596761495E+00, 0.1527313083317114E+00, 0.8661173016992874E+00, 0.8044520995141484E+00, 0.4399581275677011E+00, 0.6590078920726725E+00}, + n: 21, + zOut: []float64{0.2654671686308588E+01, 0.2409077903364995E+01, 0.2090082174851482E+01, 0.1940605709090538E+01, 0.1909776782011245E+01, 0.1629990303184568E+01, 0.1566043989638403E+01, 0.1473218419964192E+01, 0.1321200673977518E+01, 0.1275771383585936E+01, 0.9826159405158056E+00, 0.8184731809209335E+00, 0.6715230178331039E+00, 0.5669018352800101E+00, 0.3641671875118937E+00, 0.2699135892930649E+00, 0.1446269090001342E+00, 0.8937359624216266E-01, 0.5860931848549461E-01, 0.3094108728329079E-01, 0.6182329613034853E-03, 0.9233403587623171E-22, 0.2552413399194827E-12, 0.1309204970235786E-12, 0.1566043989638403E+01, 0.2003762315848454E-18, 0.9222125989396634E-12, 0.1831545934750265E-11, 0.1473218419964192E+01, 0.1899959664962892E-11, 0.5682525570474145E-10, 0.1113952503246639E-09, 0.1321200673977518E+01, 0.5311918312726658E-16, 0.2115322762070563E-08, 0.1208354514490733E-08, 0.1275771383585936E+01, 0.1424261829852281E-16, 0.6059411460508015E-08, 0.1032477558436010E-07, 0.9826159405158056E+00, 0.5397353496908506E-22, 0.2226820292130466E+02, 0.2226820292130466E+02, 0.9500000000000000E+02, 0.2927437641723356E+01, 0.1052631578947368E+01, 0.2555943178691847E-06, 0.6715230178331039E+00, 0.1218922493912602E-18, 0.4789189736721279E-06, 0.5466231772857101E-06, 0.5669018352800101E+00, 0.1893266172530428E-27, 0.9952011217509916E-06, 0.1128113648538554E-05, 0.3641671875118937E+00, 0.1993230626440035E-24, 0.2427606592544749E-05, 0.2156829827516489E-05, 0.2699135892930649E+00, 0.2761013168273541E-29, 0.3900010091178873E-05, 0.3393761026267541E-05, 0.1446269090001342E+00, 0.2150416673893778E-15, 0.8242388755752233E-05, 0.1105863902029246E-04, 0.8937359624216266E-01, 0.2934562567422164E-27, 0.3455780897358792E-04, 0.2250328346305790E-04, 0.5860931848549461E-01, 0.8147325136863849E-21, 0.2346512312055719E-04, 0.8962661529405173E-05, 0.3094108728329079E-01, 0.2460979885389816E-17, 0.5238375287742530E-03, 0.1080192509223090E-02, 0.6182329613034853E-03, 0.8383483586160605E-23, 0.7400552677463828E-02, 0.1581674273722876E-01}, + info: 0, + }, + { + z: []float64{0.7940281584071446E+00, 0.8540600349699839E+00, 0.8158431165852809E-01, 0.5431841788581357E+00, 0.3696613346727944E+00, 0.2343742079469738E+00, 0.4891909888056500E-01, 0.6769876984160987E+00, 0.4777767465052760E+00, 0.1867381312399053E+00, 0.2018744873845245E+00, 0.5511201479607295E+00, 0.6938788283912793E+00, 0.8167542438070282E+00, 0.7904606414789531E+00, 0.9443564310071292E+00, 0.7287247677237652E-01, 0.8645122013586991E+00, 0.1884651475116826E+00, 0.3844755283611681E+00, 0.9959264361467982E+00, 0.6424370932833342E+00, 0.1972122925077952E+00, 0.2842024247377670E+00, 0.9819646913482807E+00, 0.9118347224008859E+00, 0.8184691845197246E+00, 0.7051587281589254E+00, 0.7604703230109544E+00, 0.6312964755149379E+00, 0.5240863862347888E+00, 0.3442050916384676E-01, 0.2415614308212055E+00, 0.2814868323669945E+00, 0.6529284673126197E+00, 0.3727305084153835E+00, 0.5033733868757848E+00, 0.2317122058804952E+00, 0.7555584130128312E+00, 0.5854566742645219E+00, 0.5481204696337160E+00, 0.8479425268049923E+00, 0.2310874615764000E+00, 0.1250993726775007E-01, 0.6243285982203539E-01, 0.8533587246073391E+00, 0.9203815588639257E+00, 0.9256849509751471E+00, 0.6691405057262187E+00, 0.8847091531299658E+00, 0.6783572983386376E+00, 0.4701257141291857E+00, 0.8976078424378102E+00, 0.8575018884445876E+00, 0.4119363561363949E+00, 0.2824477027676924E+00, 0.2787507690368071E+00, 0.7994878185780909E+00, 0.6141832897278305E+00, 0.6772728066124333E+00, 0.1568652581579784E+00, 0.8025492691231176E+00, 0.2609459151100056E+00, 0.4956700691019098E+00, 0.1008839464621498E+00, 0.6129709499983976E+00, 0.4551038858718992E-02, 0.8382785474023564E+00, 0.9327452694814308E+00, 0.9710431593941808E+00, 0.3785578217695214E+00, 0.9620839159000718E+00, 0.3183561960196257E-01, 0.9167635157854341E+00, 0.8989971039988554E+00, 0.2723769512210017E-01, 0.4176537489735596E+00, 0.9619881273217982E+00, 0.8761769579995293E+00, 0.6385245520487358E+00, 0.6821739872929905E+00, 0.3927943300877799E+00, 0.3299501391296433E-01, 0.6026481165267817E+00}, + n: 21, + zOut: []float64{0.2841529467847260E+01, 0.2556740368064117E+01, 0.2029069210305357E+01, 0.1816492749229813E+01, 0.1807397947918166E+01, 0.1724050761249482E+01, 0.1394683696862690E+01, 0.1363282300837870E+01, 0.1235317529564993E+01, 0.1007821728138393E+01, 0.9728972767837659E+00, 0.8110838192609224E+00, 0.6190683239156912E+00, 0.3314348466978195E+00, 0.2969816495631171E+00, 0.2506421226611442E+00, 0.1551624233480766E+00, 0.1141049603637759E+00, 0.6806098279643324E-01, 0.4065442795375918E-01, 0.1509783792061944E-04, 0.2745446733802996E-19, 0.2334033424405603E-14, 0.7232047343832039E-15, 0.1394683696862690E+01, 0.7652022750203868E-17, 0.1502464319787860E-09, 0.5990324067027169E-10, 0.1363282300837870E+01, 0.5511008105786353E-19, 0.1215529748555577E-07, 0.3576186028975079E-08, 0.1235317529564993E+01, 0.6271335389136957E-17, 0.2589527811059762E-05, 0.3563684464760320E-05, 0.1007821728138393E+01, 0.6928731028484552E-15, 0.2286607739649456E-04, 0.2916328836696281E-04, 0.9728972767837659E+00, 0.4013724285764508E-25, 0.2143649169120057E+02, 0.2143649169120056E+02, 0.1080000000000000E+03, 0.3174603174603174E+01, 0.5555555555555555E+01, 0.5006788488237952E-04, 0.6190683239156912E+00, 0.1272779738919789E-24, 0.5392273695714327E-05, 0.6586751690782050E-05, 0.3314348466978195E+00, 0.9952016744778614E-24, 0.4588114650322476E-05, 0.4104030919118472E-05, 0.2969816495631171E+00, 0.1254277227268884E-20, 0.1579210272170037E-05, 0.2523508055026877E-05, 0.2506421226611442E+00, 0.1514835081255253E-22, 0.9117975197333799E-05, 0.1415311657319248E-04, 0.1551624233480766E+00, 0.3272195034856757E-26, 0.3128414626489953E-04, 0.4770966856082524E-04, 0.1141049603637759E+00, 0.7575261888623807E-20, 0.6277758538102519E-05, 0.4644422903178713E-05, 0.6806098279643324E-01, 0.3715389965619895E-21, 0.5956965112658162E-05, 0.4447744978930882E-05, 0.4065442795375918E-01, 0.1972152263052530E-30, 0.2965586553650948E-04, 0.1900611263569203E-04, 0.1509783792061944E-04, 0.1009741958682895E-26, 0.1608958133772104E-02, 0.9583670521235791E-03}, + info: 0, + }, + } { + z := make([]float64, len(test.z)) + copy(z, test.z) + + info := impl.Dlasq2(test.n, z) + if !floats.EqualApprox(test.zOut, z, dTol) { + diff := make([]float64, len(z)) + floats.SubTo(diff, z, test.zOut) + for i := range diff { + diff[i] = math.Abs(diff[i]) + } + t.Errorf("Case %v, Z Mismatch", c) + } + if test.info != info { + t.Errorf("Info mismatch. Want %v, got %v", test.info, info) + } + } + + rnd := rand.New(rand.NewSource(1)) + // Perform a bunch of random tests to check for access out of bounds or + // infinite loops. + // TODO(btracey): Implement direct tests. + // bi := blas64.Implementation() + for _, n := range []int{5, 8, 20, 25} { + for k := 0; k < 10; k++ { + z := make([]float64, 4*n) + for i := range z { + z[i] = rnd.Float64() + } + zCopy := make([]float64, len(z)) + copy(zCopy, z) + + // Compute the eigenvalues + impl.Dlasq2(n, z) + + // Below is the code to test the eigenvalues. Eventually implement + // real tests. + // The code below is missing the transformation from L and U into + // the symmetric tridiagonal matrix. + // See discussion http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=5&t=4839 + // for format. + + /* + ldl := n + ldu := n + u := make([]float64, n*n) + for i := 0; i < n; i++ { + u[i*ldu+i] = zCopy[2*i] + if i != n-1 { + u[i*ldu+i+1] = 1 + } + } + l := make([]float64, n*n) + for i := 0; i < n; i++ { + l[i*ldl+i] = 1 + if i != n-1 { + l[(i+1)*ldl+i] = zCopy[2*i+1] + } + } + + ldTriDi := n + triDi := make([]float64, n*n) + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, l, ldl, u, ldu, 0, triDi, ldTriDi) + + tridi2 := make([]float64, n*n) + bi.Dgemm(blas.Trans, blas.NoTrans, n, n, n, 1, triDi, n, triDi, n, 0, tridi2, n) + + // Eigenvalues have the property that det(A - lambda I ) = 0 + triDiCopy := make([]float64, len(triDi)) + copy(triDiCopy, triDi) + for _, lambda := range z[1:n] { + copy(triDi, triDiCopy) + for i := 0; i < n; i++ { + triDi[i*n+i] -= lambda + } + + // Compute LU + //ipiv := make([]int, n) + //impl.Dgetrf(n, n, triDi, n, ipiv) + ok := impl.Dpotrf(blas.Upper, n, triDi, n) + fmt.Println(ok) + + var det float64 + for i := 0; i < n; i++ { + det += math.Log(math.Abs(triDi[i*n+i])) + } + fmt.Println("det = ", math.Exp(det)) + } + */ + } + } +} diff --git a/lapack/testlapack/dlasq3.go b/lapack/testlapack/dlasq3.go new file mode 100644 index 00000000..ff99624f --- /dev/null +++ b/lapack/testlapack/dlasq3.go @@ -0,0 +1,2728 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "testing" + + "github.com/gonum/floats" +) + +type Dlasq3er interface { + Dlasq3(i0, n0 int, z []float64, pp int, dmin, sigma, desig, qmax float64, nFail, iter, nDiv int, ttype int, dmin1, dmin2, dn, dn1, dn2, g, tau float64) ( + i0Out, n0Out, ppOut int, dminOut, sigmaOut, desigOut, qmaxOut float64, nFailOut, iterOut, nDivOut, ttypeOut int, dmin1Out, dmin2Out, dnOut, dn1Out, dn2Out, gOut, tauOut float64) +} + +func printDlasq3FortranInput(d dlasq3teststruct) { + z := d.z + printFortranArray(z, "z") + fmt.Println("i0 =", d.i0) + fmt.Println("n0 =", d.n0) + fmt.Println("pp =", d.pp) + + fmt.Println("dmin =", fortran64(d.dmin)) + fmt.Println("sigma =", fortran64(d.sigma)) + fmt.Println("desig =", fortran64(d.desig)) + fmt.Println("qmax =", fortran64(d.qmax)) + fmt.Println("nFail =", d.nFail) + fmt.Println("iter =", d.iter) + fmt.Println("nDiv =", d.nDiv) + fmt.Println("ttype =", d.ttype) + fmt.Println("dmin1 =", fortran64(d.dmin1)) + fmt.Println("dmin2 =", fortran64(d.dmin2)) + fmt.Println("dn =", fortran64(d.dn)) + fmt.Println("dn1 =", fortran64(d.dn1)) + fmt.Println("dn2 =", fortran64(d.dn2)) + fmt.Println("g =", fortran64(d.g)) + fmt.Println("tau =", fortran64(d.tau)) +} + +type dlasq3teststruct struct { + z []float64 + i0, n0, pp int + dmin, desig, sigma, qmax float64 + nFail, iter, nDiv, ttype int + dmin1, dmin2, dn, dn1, dn2, g, tau float64 + + zOut []float64 + i0Out, n0Out, ppOut int + dminOut, desigOut, sigmaOut, qmaxOut float64 + nFailOut, iterOut, nDivOut, ttypeOut int + dmin1Out, dmin2Out, dnOut, dn1Out, dn2Out, gOut, tauOut float64 +} + +func Dlasq3Test(t *testing.T, impl Dlasq3er) { + dTol := 1e-14 + // Tests computed from calling the netlib Dlasq + for _, test := range []dlasq3teststruct{ + { + i0: 1, + n0: 21, + z: []float64{0.1914365246180821E+01, 0.1564384297703890E+01, 0.2493389162143899E+00, 0.3499809484769305E+00, 0.1315996513131545E+01, 0.1363862112490627E+01, 0.9898466611970759E-01, 0.2014733168553078E+00, 0.6023973979587287E+00, 0.6465544792741794E+00, 0.2210033410638781E-02, 0.5482758480425683E-01, 0.9861857233678967E-01, 0.2428190810745492E-01, 0.4756321484454819E+00, 0.7654669763997353E-01, 0.2588748143677115E+00, 0.6127784069508770E+00, 0.1078611376690004E+00, 0.1217285558623164E+00, 0.6442896492255246E+00, 0.2293835804898155E+00, 0.6203230486639705E+00, 0.5227672064047094E+00, 0.3695660678607585E+00, 0.7645233184745865E+00, 0.5378838054252265E+00, 0.2253657980501426E+00, 0.3562533181264623E+00, 0.8820486722335483E+00, 0.2222132496436145E-01, 0.1208845131814035E-01, 0.1275094303021685E+01, 0.6548746852163357E+00, 0.1647324354821218E+00, 0.6424409427697111E+00, 0.1007530576543866E+01, 0.3269551736546701E+00, 0.3453881601783118E+00, 0.8453078383713172E+00, 0.2679391719153404E+00, 0.4116714838778281E+00, 0.7328677736683723E+00, 0.2016558482158241E+00, 0.8360828138307410E+00, 0.9737579452195326E+00, 0.4813660709592822E+00, 0.5951926422795808E+00, 0.6495370513676459E+00, 0.6761876248148171E+00, 0.2325475880222648E+00, 0.4547154975121112E+00, 0.1993624802893807E+00, 0.3321819367342255E+00, 0.3782318916911257E+00, 0.9972813157741996E-01, 0.9830449403503746E+00, 0.7561080996844842E+00, 0.4429733864040367E+00, 0.6051687323570161E+00, 0.1173279550602403E+01, 0.7195724480316686E+00, 0.5035524069144587E+00, 0.8966804889747714E+00, 0.3058980395058521E+00, 0.6588832353928662E+00, 0.3014634433415453E+00, 0.1505672110274446E+00, 0.1289422237567578E+01, 0.6124645310993601E+00, 0.7583364305799440E+00, 0.9784211498097629E+00, 0.4977814779461571E+00, 0.9993813577491869E+00, 0.2841468847862598E+00, 0.2567365507769143E+00, 0.9257539794205765E+00, 0.5509268385614666E+00, 0.5231355605450990E-04, 0.6589740256453697E+00, 0.2117869221381033E-04, 0.7349224826832024E-04, 0.0000000000000000E+00, 0.0000000000000000E+00}, + pp: 0, + dmin: -0.0000000000000000, + desig: 0.0000000000000000, + qmax: 2.1637041623952107, + ttype: 0, + dmin1: 0.0000000000000000, + dmin2: 0.0000000000000000, + dn: 0.0000000000000000, + dn1: 0.0000000000000000, + dn2: 0.0000000000000000, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 2, + sigma: 0.0000000000000000, + nDiv: 40, + zOut: []float64{0.1914365246180821E+01, 0.2163704162395211E+01, 0.2493389162143899E+00, 0.1516515751224039E+00, 0.1315996513131545E+01, 0.1263329604128848E+01, 0.9898466611970759E-01, 0.4719916727467415E-01, 0.6023973979587287E+00, 0.5574082640946934E+00, 0.2210033410638781E-02, 0.3910066531356214E-03, 0.9861857233678967E-01, 0.5738597141291359E+00, 0.4756321484454819E+00, 0.2145632131068746E+00, 0.2588748143677115E+00, 0.1521727389298373E+00, 0.1078611376690004E+00, 0.4566771620366771E+00, 0.6442896492255246E+00, 0.8079355358528180E+00, 0.6203230486639705E+00, 0.2837483186776231E+00, 0.3695660678607585E+00, 0.6237015546083620E+00, 0.5378838054252265E+00, 0.3072349091217998E+00, 0.3562533181264623E+00, 0.7123973396902394E-01, 0.2222132496436145E-01, 0.3977314805803597E+00, 0.1275094303021685E+01, 0.1042095257923447E+01, 0.1647324354821218E+00, 0.1592685164190333E+00, 0.1007530576543866E+01, 0.1193650220303144E+01, 0.3453881601783118E+00, 0.7752942700755104E-01, 0.2679391719153404E+00, 0.9232775185761617E+00, 0.7328677736683723E+00, 0.6636554427529671E+00, 0.8360828138307410E+00, 0.6537934420370561E+00, 0.4813660709592822E+00, 0.4782322339990674E+00, 0.6495370513676459E+00, 0.4038524053908432E+00, 0.2325475880222648E+00, 0.1147975431483785E+00, 0.1993624802893807E+00, 0.4627968288321279E+00, 0.3782318916911257E+00, 0.8034172324482011E+00, 0.9830449403503746E+00, 0.6226010943062101E+00, 0.4429733864040367E+00, 0.8347746582554776E+00, 0.1173279550602403E+01, 0.8420572992613844E+00, 0.5035524069144587E+00, 0.1829278057427913E+00, 0.3058980395058521E+00, 0.4244336771046062E+00, 0.3014634433415453E+00, 0.9158407747236312E+00, 0.1289422237567578E+01, 0.1131917893423890E+01, 0.7583364305799440E+00, 0.3334922359541972E+00, 0.4977814779461571E+00, 0.4484361267782198E+00, 0.2841468847862598E+00, 0.5865943745895725E+00, 0.9257539794205765E+00, 0.3392119183870583E+00, 0.5231355605450990E-04, 0.3266196269153995E-08, 0.2117869221381033E-04, 0.2117542601754118E-04, 0.0000000000000000E+00, 0.3910066531356214E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 2.1175426017541180E-005, + desigOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + qmaxOut: 2.1637041623952107, + nFailOut: 0, + iterOut: 3, + nDivOut: 62, + ttypeOut: -1, + dmin1Out: 4.4311601260836921E-002, + dmin2Out: 4.4311601260836921E-002, + dnOut: 2.1175426017541180E-005, + dn1Out: 0.33915960483100382, + dn2Out: 0.16428924199195991, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.1914365246180821E+01, 0.2163704162395211E+01, 0.2493389162143899E+00, 0.1516515751224039E+00, 0.1315996513131545E+01, 0.1263329604128848E+01, 0.9898466611970759E-01, 0.4719916727467415E-01, 0.6023973979587287E+00, 0.5574082640946934E+00, 0.2210033410638781E-02, 0.3910066531356214E-03, 0.9861857233678967E-01, 0.5738597141291359E+00, 0.4756321484454819E+00, 0.2145632131068746E+00, 0.2588748143677115E+00, 0.1521727389298373E+00, 0.1078611376690004E+00, 0.4566771620366771E+00, 0.6442896492255246E+00, 0.8079355358528180E+00, 0.6203230486639705E+00, 0.2837483186776231E+00, 0.3695660678607585E+00, 0.6237015546083620E+00, 0.5378838054252265E+00, 0.3072349091217998E+00, 0.3562533181264623E+00, 0.7123973396902394E-01, 0.2222132496436145E-01, 0.3977314805803597E+00, 0.1275094303021685E+01, 0.1042095257923447E+01, 0.1647324354821218E+00, 0.1592685164190333E+00, 0.1007530576543866E+01, 0.1193650220303144E+01, 0.3453881601783118E+00, 0.7752942700755104E-01, 0.2679391719153404E+00, 0.9232775185761617E+00, 0.7328677736683723E+00, 0.6636554427529671E+00, 0.8360828138307410E+00, 0.6537934420370561E+00, 0.4813660709592822E+00, 0.4782322339990674E+00, 0.6495370513676459E+00, 0.4038524053908432E+00, 0.2325475880222648E+00, 0.1147975431483785E+00, 0.1993624802893807E+00, 0.4627968288321279E+00, 0.3782318916911257E+00, 0.8034172324482011E+00, 0.9830449403503746E+00, 0.6226010943062101E+00, 0.4429733864040367E+00, 0.8347746582554776E+00, 0.1173279550602403E+01, 0.8420572992613844E+00, 0.5035524069144587E+00, 0.1829278057427913E+00, 0.3058980395058521E+00, 0.4244336771046062E+00, 0.3014634433415453E+00, 0.9158407747236312E+00, 0.1289422237567578E+01, 0.1131917893423890E+01, 0.7583364305799440E+00, 0.3334922359541972E+00, 0.4977814779461571E+00, 0.4484361267782198E+00, 0.2841468847862598E+00, 0.5865943745895725E+00, 0.9257539794205765E+00, 0.3392119183870583E+00, 0.5231355605450990E-04, 0.3266196269153995E-08, 0.2117869221381033E-04, 0.2117542601754118E-04, 0.0000000000000000E+00, 0.3910066531356214E-03}, + pp: 1, + dmin: 2.1175426017541180E-005, + desig: 0.0000000000000000, + qmax: 2.1637041623952107, + ttype: -1, + dmin1: 4.4311601260836921E-002, + dmin2: 4.4311601260836921E-002, + dn: 2.1175426017541180E-005, + dn1: 0.33915960483100382, + dn2: 0.16428924199195991, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 3, + sigma: 0.0000000000000000, + nDiv: 62, + zOut: []float64{0.2315355737517615E+01, 0.2163704162395211E+01, 0.8274578340618610E-01, 0.1516515751224039E+00, 0.1227782987997336E+01, 0.1263329604128848E+01, 0.2142822156235013E-01, 0.4719916727467415E-01, 0.5363710491854788E+00, 0.5574082640946934E+00, 0.4183353417969536E-03, 0.3910066531356214E-03, 0.7880045918942136E+00, 0.5738597141291359E+00, 0.4143462125464707E-01, 0.2145632131068746E+00, 0.5674152797118673E+00, 0.1521727389298373E+00, 0.6502569120260687E+00, 0.4566771620366771E+00, 0.4414269425043723E+00, 0.8079355358528180E+00, 0.4009140594652070E+00, 0.2837483186776231E+00, 0.5300224042649548E+00, 0.6237015546083620E+00, 0.4129510944388858E-01, 0.3072349091217998E+00, 0.4276761051054951E+00, 0.7123973396902394E-01, 0.9691308092544145E+00, 0.3977314805803597E+00, 0.2322329650880660E+00, 0.1042095257923447E+01, 0.8186215063776209E+00, 0.1592685164190333E+00, 0.4525581409330741E+00, 0.1193650220303144E+01, 0.1581701233715052E+00, 0.7752942700755104E-01, 0.1428762837957623E+01, 0.9232775185761617E+00, 0.3036848136842134E+00, 0.6636554427529671E+00, 0.8283408623519102E+00, 0.6537934420370561E+00, 0.2331591338951825E+00, 0.4782322339990674E+00, 0.2854908146440392E+00, 0.4038524053908432E+00, 0.1860933389154074E+00, 0.1147975431483785E+00, 0.1080120722364922E+01, 0.4627968288321279E+00, 0.4631042046962229E+00, 0.8034172324482011E+00, 0.9942715478654648E+00, 0.6226010943062101E+00, 0.7069779837626068E+00, 0.8347746582554776E+00, 0.3180071212415688E+00, 0.8420572992613844E+00, 0.2441477440283845E+00, 0.1829278057427913E+00, 0.1096126707799853E+01, 0.4244336771046062E+00, 0.9457451890006905E+00, 0.9158407747236312E+00, 0.5196649403773971E+00, 0.1131917893423890E+01, 0.2877815203259632E+00, 0.3334922359541972E+00, 0.7472489810418290E+00, 0.4484361267782198E+00, 0.2662831374385604E+00, 0.5865943745895725E+00, 0.7292878421469419E-01, 0.3392119183870583E+00, 0.9483648767903632E-12, 0.3266196269153995E-08, 0.2117542506917630E-04, 0.2117542601754118E-04, 0.4183353417969536E-03, 0.3910066531356214E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 1, + dminOut: 2.1175425069176302E-005, + desigOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + qmaxOut: 2.1637041623952107, + nFailOut: 0, + iterOut: 4, + nDivOut: 84, + ttypeOut: -4, + dmin1Out: 2.9944624525135358E-002, + dmin2Out: 2.9944624525135358E-002, + dnOut: 2.1175425069176302E-005, + dn1Out: 7.2928780948497918E-002, + dn2Out: 0.16065460645225654, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2315355737517615E+01, 0.2163704162395211E+01, 0.8274578340618610E-01, 0.1516515751224039E+00, 0.1227782987997336E+01, 0.1263329604128848E+01, 0.2142822156235013E-01, 0.4719916727467415E-01, 0.5363710491854788E+00, 0.5574082640946934E+00, 0.4183353417969536E-03, 0.3910066531356214E-03, 0.7880045918942136E+00, 0.5738597141291359E+00, 0.4143462125464707E-01, 0.2145632131068746E+00, 0.5674152797118673E+00, 0.1521727389298373E+00, 0.6502569120260687E+00, 0.4566771620366771E+00, 0.4414269425043723E+00, 0.8079355358528180E+00, 0.4009140594652070E+00, 0.2837483186776231E+00, 0.5300224042649548E+00, 0.6237015546083620E+00, 0.4129510944388858E-01, 0.3072349091217998E+00, 0.4276761051054951E+00, 0.7123973396902394E-01, 0.9691308092544145E+00, 0.3977314805803597E+00, 0.2322329650880660E+00, 0.1042095257923447E+01, 0.8186215063776209E+00, 0.1592685164190333E+00, 0.4525581409330741E+00, 0.1193650220303144E+01, 0.1581701233715052E+00, 0.7752942700755104E-01, 0.1428762837957623E+01, 0.9232775185761617E+00, 0.3036848136842134E+00, 0.6636554427529671E+00, 0.8283408623519102E+00, 0.6537934420370561E+00, 0.2331591338951825E+00, 0.4782322339990674E+00, 0.2854908146440392E+00, 0.4038524053908432E+00, 0.1860933389154074E+00, 0.1147975431483785E+00, 0.1080120722364922E+01, 0.4627968288321279E+00, 0.4631042046962229E+00, 0.8034172324482011E+00, 0.9942715478654648E+00, 0.6226010943062101E+00, 0.7069779837626068E+00, 0.8347746582554776E+00, 0.3180071212415688E+00, 0.8420572992613844E+00, 0.2441477440283845E+00, 0.1829278057427913E+00, 0.1096126707799853E+01, 0.4244336771046062E+00, 0.9457451890006905E+00, 0.9158407747236312E+00, 0.5196649403773971E+00, 0.1131917893423890E+01, 0.2877815203259632E+00, 0.3334922359541972E+00, 0.7472489810418290E+00, 0.4484361267782198E+00, 0.2662831374385604E+00, 0.5865943745895725E+00, 0.7292878421469419E-01, 0.3392119183870583E+00, 0.9483648767903632E-12, 0.3266196269153995E-08, 0.2117542506917630E-04, 0.2117542601754118E-04, 0.4183353417969536E-03, 0.3910066531356214E-03}, + pp: 0, + dmin: 2.1175425069176302E-005, + desig: 0.0000000000000000, + qmax: 2.1637041623952107, + ttype: -4, + dmin1: 2.9944624525135358E-002, + dmin2: 2.9944624525135358E-002, + dn: 2.1175425069176302E-005, + dn1: 7.2928780948497918E-002, + dn2: 0.16065460645225654, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 4, + sigma: 0.0000000000000000, + nDiv: 84, + zOut: []float64{0.2315355737517615E+01, 0.2398080345610006E+01, 0.8274578340618610E-01, 0.4236466279397526E-01, 0.1227782987997336E+01, 0.1206825371451915E+01, 0.2142822156235013E-01, 0.9523728911788614E-02, 0.5363710491854788E+00, 0.5272444803016919E+00, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.7880045918942136E+00, 0.8287928057414093E+00, 0.4143462125464707E-01, 0.2836732781232222E-01, 0.5674152797118673E+00, 0.1189283688611819E+01, 0.6502569120260687E+00, 0.2413561400585997E+00, 0.4414269425043723E+00, 0.6009636865971842E+00, 0.4009140594652070E+00, 0.3535878097802652E+00, 0.5300224042649548E+00, 0.2177085286147829E+00, 0.4129510944388858E-01, 0.8112190955144877E-01, 0.4276761051054951E+00, 0.1315663829494665E+01, 0.9691308092544145E+00, 0.1710650671895379E+00, 0.2322329650880660E+00, 0.8797682289623537E+00, 0.8186215063776209E+00, 0.4211038940233675E+00, 0.4525581409330741E+00, 0.1896031949674164E+00, 0.1581701233715052E+00, 0.1191897606932286E+01, 0.1428762837957623E+01, 0.5405288693957555E+00, 0.3036848136842134E+00, 0.4653859482687157E+00, 0.8283408623519102E+00, 0.5960928726645816E+00, 0.2331591338951825E+00, 0.1116684901463164E+00, 0.2854908146440392E+00, 0.3598944880993349E+00, 0.1860933389154074E+00, 0.5585061130503639E+00, 0.1080120722364922E+01, 0.9846976386969850E+00, 0.4631042046962229E+00, 0.4676068229793028E+00, 0.9942715478654648E+00, 0.1233621533334973E+01, 0.7069779837626068E+00, 0.1822471700779458E+00, 0.3180071212415688E+00, 0.3798865198782122E+00, 0.2441477440283845E+00, 0.7044652781161848E+00, 0.1096126707799853E+01, 0.1337385443370563E+01, 0.9457451890006905E+00, 0.3674861422265960E+00, 0.5196649403773971E+00, 0.4399391431629689E+00, 0.2877815203259632E+00, 0.4888049885267526E+00, 0.7472489810418290E+00, 0.5247059546398414E+00, 0.2662831374385604E+00, 0.3701064434002514E-01, 0.7292878421469419E-01, 0.3589696456182207E-01, 0.9483648767903632E-12, 0.5594353069081231E-15, 0.2117542506917630E-04, 0.1112732565966979E-09, 0.4183353417969536E-03, 0.6252320936560726E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 1.1127325659669794E-010, + desigOut: 0.0000000000000000, + sigmaOut: 2.1175313795360271E-005, + qmaxOut: 2.1637041623952107, + nFailOut: 0, + iterOut: 5, + nDivOut: 106, + ttypeOut: -4, + dmin1Out: 3.1433071595911154E-002, + dmin2Out: 3.1433071595911154E-002, + dnOut: 1.1127325659669794E-010, + dn1Out: 3.5896964560873705E-002, + dn2Out: 0.25842281720128102, + gOut: 0.0000000000000000, + tauOut: 2.1175313795360271E-005, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2315355737517615E+01, 0.2398080345610006E+01, 0.8274578340618610E-01, 0.4236466279397526E-01, 0.1227782987997336E+01, 0.1206825371451915E+01, 0.2142822156235013E-01, 0.9523728911788614E-02, 0.5363710491854788E+00, 0.5272444803016919E+00, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.7880045918942136E+00, 0.8287928057414093E+00, 0.4143462125464707E-01, 0.2836732781232222E-01, 0.5674152797118673E+00, 0.1189283688611819E+01, 0.6502569120260687E+00, 0.2413561400585997E+00, 0.4414269425043723E+00, 0.6009636865971842E+00, 0.4009140594652070E+00, 0.3535878097802652E+00, 0.5300224042649548E+00, 0.2177085286147829E+00, 0.4129510944388858E-01, 0.8112190955144877E-01, 0.4276761051054951E+00, 0.1315663829494665E+01, 0.9691308092544145E+00, 0.1710650671895379E+00, 0.2322329650880660E+00, 0.8797682289623537E+00, 0.8186215063776209E+00, 0.4211038940233675E+00, 0.4525581409330741E+00, 0.1896031949674164E+00, 0.1581701233715052E+00, 0.1191897606932286E+01, 0.1428762837957623E+01, 0.5405288693957555E+00, 0.3036848136842134E+00, 0.4653859482687157E+00, 0.8283408623519102E+00, 0.5960928726645816E+00, 0.2331591338951825E+00, 0.1116684901463164E+00, 0.2854908146440392E+00, 0.3598944880993349E+00, 0.1860933389154074E+00, 0.5585061130503639E+00, 0.1080120722364922E+01, 0.9846976386969850E+00, 0.4631042046962229E+00, 0.4676068229793028E+00, 0.9942715478654648E+00, 0.1233621533334973E+01, 0.7069779837626068E+00, 0.1822471700779458E+00, 0.3180071212415688E+00, 0.3798865198782122E+00, 0.2441477440283845E+00, 0.7044652781161848E+00, 0.1096126707799853E+01, 0.1337385443370563E+01, 0.9457451890006905E+00, 0.3674861422265960E+00, 0.5196649403773971E+00, 0.4399391431629689E+00, 0.2877815203259632E+00, 0.4888049885267526E+00, 0.7472489810418290E+00, 0.5247059546398414E+00, 0.2662831374385604E+00, 0.3701064434002514E-01, 0.7292878421469419E-01, 0.3589696456182207E-01, 0.9483648767903632E-12, 0.5594353069081231E-15, 0.2117542506917630E-04, 0.1112732565966979E-09, 0.4183353417969536E-03, 0.6252320936560726E-03}, + pp: 1, + dmin: 1.1127325659669794E-010, + desig: 0.0000000000000000, + qmax: 2.1637041623952107, + ttype: -4, + dmin1: 3.1433071595911154E-002, + dmin2: 3.1433071595911154E-002, + dn: 1.1127325659669794E-010, + dn1: 3.5896964560873705E-002, + dn2: 0.25842281720128102, + g: 0.0000000000000000, + tau: 2.1175313795360271E-005, + nFail: 0, + iter: 5, + sigma: 2.1175313795360271E-005, + nDiv: 106, + zOut: []float64{0.2440445008292708E+01, 0.2398080345610006E+01, 0.2094976520226600E-01, 0.4236466279397526E-01, 0.1195399335050165E+01, 0.1206825371451915E+01, 0.4200549016048655E-02, 0.9523728911788614E-02, 0.5236691632680260E+00, 0.5272444803016919E+00, 0.9895328911616120E-03, 0.6252320936560726E-03, 0.8561706005512968E+00, 0.8287928057414093E+00, 0.3940429656773515E-01, 0.2836732781232222E-01, 0.1391235531991410E+01, 0.1189283688611819E+01, 0.1042571673718422E+00, 0.2413561400585997E+00, 0.8502943288943339E+00, 0.6009636865971842E+00, 0.9053227710395735E-01, 0.3535878097802652E+00, 0.2082981609510011E+00, 0.2177085286147829E+00, 0.5123864833424303E+00, 0.8112190955144877E-01, 0.9743424132304999E+00, 0.1315663829494665E+01, 0.1544607000116935E+00, 0.1710650671895379E+00, 0.1146411422862754E+01, 0.8797682289623537E+00, 0.6964571542795012E-01, 0.4211038940233675E+00, 0.1311855086360479E+01, 0.1896031949674164E+00, 0.4911023119923957E+00, 0.1191897606932286E+01, 0.5148125055608023E+00, 0.5405288693957555E+00, 0.5388626806938843E+00, 0.4653859482687157E+00, 0.1688986820057405E+00, 0.5960928726645816E+00, 0.2379466412690434E+00, 0.1116684901463164E+00, 0.6804539597693821E+00, 0.3598944880993349E+00, 0.8082246312519304E+00, 0.5585061130503639E+00, 0.6440798303130841E+00, 0.9846976386969850E+00, 0.8956185534970393E+00, 0.4676068229793028E+00, 0.5202501498046066E+00, 0.1233621533334973E+01, 0.1330768347199243E+00, 0.1822471700779458E+00, 0.9512749631631994E+00, 0.3798865198782122E+00, 0.9903988276741268E+00, 0.7044652781161848E+00, 0.7144727578117591E+00, 0.1337385443370563E+01, 0.2262808998212762E+00, 0.3674861422265960E+00, 0.7024632317571722E+00, 0.4399391431629689E+00, 0.3651136124179467E+00, 0.4888049885267526E+00, 0.1966029864506465E+00, 0.5247059546398414E+00, 0.6757627705811050E-02, 0.3701064434002514E-01, 0.2913933674473832E-01, 0.3589696456182207E-01, 0.2136293938333395E-23, 0.5594353069081231E-15, 0.0000000000000000E+00, 0.1112732565966979E-09, 0.9895328911616120E-03, 0.6252320936560726E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 1, + dminOut: 0.0000000000000000, + desigOut: -5.1698788284564230E-026, + sigmaOut: 2.1175425068616867E-005, + qmaxOut: 2.1637041623952107, + nFailOut: 1, + iterOut: 7, + nDivOut: 150, + ttypeOut: -15, + dmin1Out: 2.9139336744737766E-002, + dmin2Out: 4.9426557292086552E-002, + dnOut: -2.0808762284537102E-024, + dn1Out: 2.9139336744737766E-002, + dn2Out: 0.15959234211062134, + gOut: 0.0000000000000000, + tauOut: 1.1127325659669789E-010, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2440445008292708E+01, 0.2398080345610006E+01, 0.2094976520226600E-01, 0.4236466279397526E-01, 0.1195399335050165E+01, 0.1206825371451915E+01, 0.4200549016048655E-02, 0.9523728911788614E-02, 0.5236691632680260E+00, 0.5272444803016919E+00, 0.9895328911616120E-03, 0.6252320936560726E-03, 0.8561706005512968E+00, 0.8287928057414093E+00, 0.3940429656773515E-01, 0.2836732781232222E-01, 0.1391235531991410E+01, 0.1189283688611819E+01, 0.1042571673718422E+00, 0.2413561400585997E+00, 0.8502943288943339E+00, 0.6009636865971842E+00, 0.9053227710395735E-01, 0.3535878097802652E+00, 0.2082981609510011E+00, 0.2177085286147829E+00, 0.5123864833424303E+00, 0.8112190955144877E-01, 0.9743424132304999E+00, 0.1315663829494665E+01, 0.1544607000116935E+00, 0.1710650671895379E+00, 0.1146411422862754E+01, 0.8797682289623537E+00, 0.6964571542795012E-01, 0.4211038940233675E+00, 0.1311855086360479E+01, 0.1896031949674164E+00, 0.4911023119923957E+00, 0.1191897606932286E+01, 0.5148125055608023E+00, 0.5405288693957555E+00, 0.5388626806938843E+00, 0.4653859482687157E+00, 0.1688986820057405E+00, 0.5960928726645816E+00, 0.2379466412690434E+00, 0.1116684901463164E+00, 0.6804539597693821E+00, 0.3598944880993349E+00, 0.8082246312519304E+00, 0.5585061130503639E+00, 0.6440798303130841E+00, 0.9846976386969850E+00, 0.8956185534970393E+00, 0.4676068229793028E+00, 0.5202501498046066E+00, 0.1233621533334973E+01, 0.1330768347199243E+00, 0.1822471700779458E+00, 0.9512749631631994E+00, 0.3798865198782122E+00, 0.9903988276741268E+00, 0.7044652781161848E+00, 0.7144727578117591E+00, 0.1337385443370563E+01, 0.2262808998212762E+00, 0.3674861422265960E+00, 0.7024632317571722E+00, 0.4399391431629689E+00, 0.3651136124179467E+00, 0.4888049885267526E+00, 0.1966029864506465E+00, 0.5247059546398414E+00, 0.6757627705811050E-02, 0.3701064434002514E-01, 0.2913933674473832E-01, 0.3589696456182207E-01, 0.2136293938333395E-23, 0.5594353069081231E-15, 0.0000000000000000E+00, 0.1112732565966979E-09, 0.9895328911616120E-03, 0.6252320936560726E-03}, + pp: 0, + dmin: 0.0000000000000000, + desig: -5.1698788284564230E-026, + qmax: 2.1637041623952107, + ttype: -15, + dmin1: 2.9139336744737766E-002, + dmin2: 4.9426557292086552E-002, + dn: -2.0808762284537102E-024, + dn1: 2.9139336744737766E-002, + dn2: 0.15959234211062134, + g: 0.0000000000000000, + tau: 1.1127325659669789E-010, + nFail: 1, + iter: 7, + sigma: 2.1175425068616867E-005, + nDiv: 150, + zOut: []float64{0.2440445008292708E+01, 0.2461394773494974E+01, 0.2094976520226600E-01, 0.1017444891892999E-01, 0.1195399335050165E+01, 0.1189425435147283E+01, 0.4200549016048655E-02, 0.1849378635683999E-02, 0.5236691632680260E+00, 0.5228093175235037E+00, 0.9895328911616120E-03, 0.1620493249248586E-02, 0.8561706005512968E+00, 0.8939544038697832E+00, 0.3940429656773515E-01, 0.6132377362967349E-01, 0.1391235531991410E+01, 0.1434168925733579E+01, 0.1042571673718422E+00, 0.6181229879703373E-01, 0.8502943288943339E+00, 0.8790143072012576E+00, 0.9053227710395735E-01, 0.2145324219750511E-01, 0.2082981609510011E+00, 0.6992314020959263E+00, 0.5123864833424303E+00, 0.7139837844669097E+00, 0.9743424132304999E+00, 0.4148193287752837E+00, 0.1544607000116935E+00, 0.4268738185358478E+00, 0.1146411422862754E+01, 0.7891833197548568E+00, 0.6964571542795012E-01, 0.1157716892137957E+00, 0.1311855086360479E+01, 0.1687185709139079E+01, 0.4911023119923957E+00, 0.1498504938454686E+00, 0.5148125055608023E+00, 0.9038246924092180E+00, 0.5388626806938843E+00, 0.1006978425303630E+00, 0.1688986820057405E+00, 0.3061474807444209E+00, 0.2379466412690434E+00, 0.5288684194677825E+00, 0.6804539597693821E+00, 0.9598101715535300E+00, 0.8082246312519304E+00, 0.5423584775195998E+00, 0.6440798303130841E+00, 0.9973399062905237E+00, 0.8956185534970393E+00, 0.4671884516860899E+00, 0.5202501498046066E+00, 0.1861385328384410E+00, 0.1330768347199243E+00, 0.6800991665489665E+00, 0.9512749631631994E+00, 0.1261574624288360E+01, 0.9903988276741268E+00, 0.5608966509936130E+00, 0.7144727578117591E+00, 0.3798570066394223E+00, 0.2262808998212762E+00, 0.4184574968871406E+00, 0.7024632317571722E+00, 0.6491193472879784E+00, 0.3651136124179467E+00, 0.1105843276664904E+00, 0.1966029864506465E+00, 0.9277628648996712E-01, 0.6757627705811050E-02, 0.2122447413720272E-02, 0.2913933674473832E-01, 0.2701688933101806E-01, 0.2136293938333395E-23, 0.0000000000000000E+00, 0.0000000000000000E+00, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 0.0000000000000000, + desigOut: -5.1698788284564230E-026, + sigmaOut: 2.1175425068616867E-005, + qmaxOut: 2.1637041623952107, + nFailOut: 1, + iterOut: 8, + nDivOut: 172, + ttypeOut: -1, + dmin1Out: 2.7016889331018056E-002, + dmin2Out: 5.3061698118516694E-002, + dnOut: 0.0000000000000000, + dn1Out: 2.7016889331018056E-002, + dn2Out: 8.6018658784156071E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2440445008292708E+01, 0.2461394773494974E+01, 0.2094976520226600E-01, 0.1017444891892999E-01, 0.1195399335050165E+01, 0.1189425435147283E+01, 0.4200549016048655E-02, 0.1849378635683999E-02, 0.5236691632680260E+00, 0.5228093175235037E+00, 0.9895328911616120E-03, 0.1620493249248586E-02, 0.8561706005512968E+00, 0.8939544038697832E+00, 0.3940429656773515E-01, 0.6132377362967349E-01, 0.1391235531991410E+01, 0.1434168925733579E+01, 0.1042571673718422E+00, 0.6181229879703373E-01, 0.8502943288943339E+00, 0.8790143072012576E+00, 0.9053227710395735E-01, 0.2145324219750511E-01, 0.2082981609510011E+00, 0.6992314020959263E+00, 0.5123864833424303E+00, 0.7139837844669097E+00, 0.9743424132304999E+00, 0.4148193287752837E+00, 0.1544607000116935E+00, 0.4268738185358478E+00, 0.1146411422862754E+01, 0.7891833197548568E+00, 0.6964571542795012E-01, 0.1157716892137957E+00, 0.1311855086360479E+01, 0.1687185709139079E+01, 0.4911023119923957E+00, 0.1498504938454686E+00, 0.5148125055608023E+00, 0.9038246924092180E+00, 0.5388626806938843E+00, 0.1006978425303630E+00, 0.1688986820057405E+00, 0.3061474807444209E+00, 0.2379466412690434E+00, 0.5288684194677825E+00, 0.6804539597693821E+00, 0.9598101715535300E+00, 0.8082246312519304E+00, 0.5423584775195998E+00, 0.6440798303130841E+00, 0.9973399062905237E+00, 0.8956185534970393E+00, 0.4671884516860899E+00, 0.5202501498046066E+00, 0.1861385328384410E+00, 0.1330768347199243E+00, 0.6800991665489665E+00, 0.9512749631631994E+00, 0.1261574624288360E+01, 0.9903988276741268E+00, 0.5608966509936130E+00, 0.7144727578117591E+00, 0.3798570066394223E+00, 0.2262808998212762E+00, 0.4184574968871406E+00, 0.7024632317571722E+00, 0.6491193472879784E+00, 0.3651136124179467E+00, 0.1105843276664904E+00, 0.1966029864506465E+00, 0.9277628648996712E-01, 0.6757627705811050E-02, 0.2122447413720272E-02, 0.2913933674473832E-01, 0.2701688933101806E-01, 0.2136293938333395E-23, 0.0000000000000000E+00, 0.0000000000000000E+00, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 0.0000000000000000, + desig: -5.1698788284564230E-026, + qmax: 2.1637041623952107, + ttype: -1, + dmin1: 2.7016889331018056E-002, + dmin2: 5.3061698118516694E-002, + dn: 0.0000000000000000, + dn1: 2.7016889331018056E-002, + dn2: 8.6018658784156071E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 1, + iter: 8, + sigma: 2.1175425068616867E-005, + nDiv: 172, + zOut: []float64{0.2471569222413904E+01, 0.2461394773494974E+01, 0.4896382518051712E-02, 0.1017444891892999E-01, 0.1186378431264915E+01, 0.1189425435147283E+01, 0.8149780515932184E-03, 0.1849378635683999E-02, 0.5236148327211592E+00, 0.5228093175235037E+00, 0.2766627272719901E-02, 0.1620493249248586E-02, 0.9525115502267366E+00, 0.8939544038697832E+00, 0.9233342160256496E-01, 0.6132377362967349E-01, 0.1403647802928048E+01, 0.1434168925733579E+01, 0.3870906568602875E-01, 0.6181229879703373E-01, 0.8617584837127339E+00, 0.8790143072012576E+00, 0.1740717486950262E-01, 0.2145324219750511E-01, 0.1395808011693333E+01, 0.6992314020959263E+00, 0.2121884039551361E+00, 0.7139837844669097E+00, 0.6295047433559955E+00, 0.4148193287752837E+00, 0.5351535485381410E+00, 0.4268738185358478E+00, 0.3698014604305115E+00, 0.7891833197548568E+00, 0.5281978587564573E+00, 0.1157716892137957E+00, 0.1308838344228090E+01, 0.1687185709139079E+01, 0.1034799882693896E+00, 0.1498504938454686E+00, 0.9010425466701916E+00, 0.9038246924092180E+00, 0.3421413441684364E-01, 0.1006978425303630E+00, 0.8008017657953598E+00, 0.3061474807444209E+00, 0.6338813300623194E+00, 0.5288684194677825E+00, 0.8682873190108105E+00, 0.9598101715535300E+00, 0.6229686202966810E+00, 0.5423584775195998E+00, 0.8415597376799326E+00, 0.9973399062905237E+00, 0.1033340463692495E+00, 0.4671884516860899E+00, 0.7629036530181579E+00, 0.1861385328384410E+00, 0.1124645093942705E+01, 0.6800991665489665E+00, 0.6978261813392677E+00, 0.1261574624288360E+01, 0.3053203341720497E+00, 0.5608966509936130E+00, 0.4929941693545132E+00, 0.3798570066394223E+00, 0.5509778292160957E+00, 0.4184574968871406E+00, 0.2087258457383731E+00, 0.6491193472879784E+00, 0.4915348757406203E-01, 0.1105843276664904E+00, 0.4574524632962537E-01, 0.9277628648996712E-01, 0.1253505697055357E-02, 0.2122447413720272E-02, 0.2576338363396270E-01, 0.2701688933101806E-01, 0.8149780515932184E-03, 0.0000000000000000E+00, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 2.5763383633962696E-002, + desigOut: -5.1698788284564230E-026, + sigmaOut: 2.1175425068616867E-005, + qmaxOut: 2.1637041623952107, + nFailOut: 1, + iterOut: 9, + nDivOut: 193, + ttypeOut: -1, + dmin1Out: 4.3622798915905092E-002, + dmin2Out: 7.4536672467372611E-002, + dnOut: 2.5763383633962696E-002, + dn1Out: 4.3622798915905092E-002, + dn2Out: 9.8141518071882677E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2471569222413904E+01, 0.2461394773494974E+01, 0.4896382518051712E-02, 0.1017444891892999E-01, 0.1186378431264915E+01, 0.1189425435147283E+01, 0.8149780515932184E-03, 0.1849378635683999E-02, 0.5236148327211592E+00, 0.5228093175235037E+00, 0.2766627272719901E-02, 0.1620493249248586E-02, 0.9525115502267366E+00, 0.8939544038697832E+00, 0.9233342160256496E-01, 0.6132377362967349E-01, 0.1403647802928048E+01, 0.1434168925733579E+01, 0.3870906568602875E-01, 0.6181229879703373E-01, 0.8617584837127339E+00, 0.8790143072012576E+00, 0.1740717486950262E-01, 0.2145324219750511E-01, 0.1395808011693333E+01, 0.6992314020959263E+00, 0.2121884039551361E+00, 0.7139837844669097E+00, 0.6295047433559955E+00, 0.4148193287752837E+00, 0.5351535485381410E+00, 0.4268738185358478E+00, 0.3698014604305115E+00, 0.7891833197548568E+00, 0.5281978587564573E+00, 0.1157716892137957E+00, 0.1308838344228090E+01, 0.1687185709139079E+01, 0.1034799882693896E+00, 0.1498504938454686E+00, 0.9010425466701916E+00, 0.9038246924092180E+00, 0.3421413441684364E-01, 0.1006978425303630E+00, 0.8008017657953598E+00, 0.3061474807444209E+00, 0.6338813300623194E+00, 0.5288684194677825E+00, 0.8682873190108105E+00, 0.9598101715535300E+00, 0.6229686202966810E+00, 0.5423584775195998E+00, 0.8415597376799326E+00, 0.9973399062905237E+00, 0.1033340463692495E+00, 0.4671884516860899E+00, 0.7629036530181579E+00, 0.1861385328384410E+00, 0.1124645093942705E+01, 0.6800991665489665E+00, 0.6978261813392677E+00, 0.1261574624288360E+01, 0.3053203341720497E+00, 0.5608966509936130E+00, 0.4929941693545132E+00, 0.3798570066394223E+00, 0.5509778292160957E+00, 0.4184574968871406E+00, 0.2087258457383731E+00, 0.6491193472879784E+00, 0.4915348757406203E-01, 0.1105843276664904E+00, 0.4574524632962537E-01, 0.9277628648996712E-01, 0.1253505697055357E-02, 0.2122447413720272E-02, 0.2576338363396270E-01, 0.2701688933101806E-01, 0.8149780515932184E-03, 0.1620493249248586E-02, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 2.5763383633962696E-002, + desig: -5.1698788284564230E-026, + qmax: 2.4715692224139039, + ttype: -1, + dmin1: 4.3622798915905092E-002, + dmin2: 7.4536672467372611E-002, + dn: 2.5763383633962696E-002, + dn1: 4.3622798915905092E-002, + dn2: 9.8141518071882677E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 1, + iter: 9, + sigma: 2.1175425068616867E-005, + nDiv: 193, + zOut: []float64{0.2471569222413904E+01, 0.2471445466333236E+01, 0.4896382518051712E-02, 0.2350431231346416E-02, 0.1186378431264915E+01, 0.1179822839486443E+01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.5236148327211592E+00, 0.5209996276036221E+00, 0.2766627272719901E-02, 0.5058054349403302E-02, 0.9525115502267366E+00, 0.1034766778881179E+01, 0.9233342160256496E-01, 0.1252490967185870E+00, 0.1403647802928048E+01, 0.1312087633296770E+01, 0.3870906568602875E-01, 0.2542350442532051E-01, 0.8617584837127339E+00, 0.8487220155581966E+00, 0.1740717486950262E-01, 0.2862783537884150E-01, 0.1395808011693333E+01, 0.1574348441670908E+01, 0.2121884039551361E+00, 0.8484373804386666E-01, 0.6295047433559955E+00, 0.1074794415251550E+01, 0.5351535485381410E+00, 0.1841287608083240E+00, 0.3698014604305115E+00, 0.7088504197799252E+00, 0.5281978587564573E+00, 0.9752771411128711E+00, 0.1308838344228090E+01, 0.4320210527858890E+00, 0.1034799882693896E+00, 0.2158225196628609E+00, 0.9010425466701916E+00, 0.7144140228254550E+00, 0.3421413441684364E-01, 0.3835134583138245E-01, 0.8008017657953598E+00, 0.1391311611427577E+01, 0.6338813300623194E+00, 0.3955915526975877E+00, 0.8682873190108105E+00, 0.1090644248011184E+01, 0.6229686202966810E+00, 0.4806932321292802E+00, 0.8415597376799326E+00, 0.4591804133211825E+00, 0.1033340463692495E+00, 0.1716839812178710E+00, 0.7629036530181579E+00, 0.1710844627144272E+01, 0.1124645093942705E+01, 0.4587247601659613E+00, 0.6978261813392677E+00, 0.5394016167466366E+00, 0.3053203341720497E+00, 0.2790520826393697E+00, 0.4929941693545132E+00, 0.7598997773325197E+00, 0.5509778292160957E+00, 0.1513401067044909E+00, 0.2087258457383731E+00, 0.1015190880092246E+00, 0.4915348757406203E-01, 0.2214892234681356E-01, 0.4574524632962537E-01, 0.1982969108114764E-01, 0.1253505697055357E-02, 0.1628595626045726E-02, 0.2576338363396270E-01, 0.1911464940919745E-01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 1.8576185384092288E-002, + desigOut: 2.6427422784455342E-019, + sigmaOut: 5.0413140237881371E-003, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 11, + nDivOut: 235, + ttypeOut: -15, + dmin1Out: 1.8576185384092288E-002, + dmin2Out: 5.2365600435162571E-002, + dnOut: 1.9114649409197451E-002, + dn1Out: 1.8576185384092288E-002, + dn2Out: 5.2365600435162571E-002, + gOut: 0.0000000000000000, + tauOut: 5.0201385987195205E-003, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2471569222413904E+01, 0.2471445466333236E+01, 0.4896382518051712E-02, 0.2350431231346416E-02, 0.1186378431264915E+01, 0.1179822839486443E+01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.5236148327211592E+00, 0.5209996276036221E+00, 0.2766627272719901E-02, 0.5058054349403302E-02, 0.9525115502267366E+00, 0.1034766778881179E+01, 0.9233342160256496E-01, 0.1252490967185870E+00, 0.1403647802928048E+01, 0.1312087633296770E+01, 0.3870906568602875E-01, 0.2542350442532051E-01, 0.8617584837127339E+00, 0.8487220155581966E+00, 0.1740717486950262E-01, 0.2862783537884150E-01, 0.1395808011693333E+01, 0.1574348441670908E+01, 0.2121884039551361E+00, 0.8484373804386666E-01, 0.6295047433559955E+00, 0.1074794415251550E+01, 0.5351535485381410E+00, 0.1841287608083240E+00, 0.3698014604305115E+00, 0.7088504197799252E+00, 0.5281978587564573E+00, 0.9752771411128711E+00, 0.1308838344228090E+01, 0.4320210527858890E+00, 0.1034799882693896E+00, 0.2158225196628609E+00, 0.9010425466701916E+00, 0.7144140228254550E+00, 0.3421413441684364E-01, 0.3835134583138245E-01, 0.8008017657953598E+00, 0.1391311611427577E+01, 0.6338813300623194E+00, 0.3955915526975877E+00, 0.8682873190108105E+00, 0.1090644248011184E+01, 0.6229686202966810E+00, 0.4806932321292802E+00, 0.8415597376799326E+00, 0.4591804133211825E+00, 0.1033340463692495E+00, 0.1716839812178710E+00, 0.7629036530181579E+00, 0.1710844627144272E+01, 0.1124645093942705E+01, 0.4587247601659613E+00, 0.6978261813392677E+00, 0.5394016167466366E+00, 0.3053203341720497E+00, 0.2790520826393697E+00, 0.4929941693545132E+00, 0.7598997773325197E+00, 0.5509778292160957E+00, 0.1513401067044909E+00, 0.2087258457383731E+00, 0.1015190880092246E+00, 0.4915348757406203E-01, 0.2214892234681356E-01, 0.4574524632962537E-01, 0.1982969108114764E-01, 0.1253505697055357E-02, 0.1628595626045726E-02, 0.2576338363396270E-01, 0.1911464940919745E-01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 1.8576185384092288E-002, + desig: 2.6427422784455342E-019, + qmax: 2.4715692224139039, + ttype: -15, + dmin1: 1.8576185384092288E-002, + dmin2: 5.2365600435162571E-002, + dn: 1.9114649409197451E-002, + dn1: 1.8576185384092288E-002, + dn2: 5.2365600435162571E-002, + g: 0.0000000000000000, + tau: 5.0201385987195205E-003, + nFail: 2, + iter: 11, + sigma: 5.0413140237881371E-003, + nDiv: 235, + zOut: []float64{0.2468318984233055E+01, 0.2471445466333236E+01, 0.1123474100024551E-02, 0.2350431231346416E-02, 0.1173584145846428E+01, 0.1179822839486443E+01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.5204201986859162E+00, 0.5209996276036221E+00, 0.1005707814522541E-01, 0.5058054349403302E-02, 0.1144481884123012E+01, 0.1034766778881179E+01, 0.1435914304680996E+00, 0.1252490967185870E+00, 0.1188442793922463E+01, 0.1312087633296770E+01, 0.1815610143690141E-01, 0.2542350442532051E-01, 0.8537168361686087E+00, 0.8487220155581966E+00, 0.5279290053521807E-01, 0.2862783537884150E-01, 0.1600922365848029E+01, 0.1574348441670908E+01, 0.5696064828871891E-01, 0.8484373804386666E-01, 0.1196485614439627E+01, 0.1074794415251550E+01, 0.1090859328498209E+00, 0.1841287608083240E+00, 0.1569564714711448E+01, 0.7088504197799252E+00, 0.2684440171930437E+00, 0.9752771411128711E+00, 0.3739226419241781E+00, 0.4320210527858890E+00, 0.4123490187575627E+00, 0.2158225196628609E+00, 0.3349394365677468E+00, 0.7144140228254550E+00, 0.1593084209965356E+00, 0.3835134583138245E-01, 0.1622117829797102E+01, 0.1391311611427577E+01, 0.2659792301064862E+00, 0.3955915526975877E+00, 0.1299881336702450E+01, 0.1090644248011184E+01, 0.1698038973078534E+00, 0.4806932321292802E+00, 0.4555835838996722E+00, 0.4591804133211825E+00, 0.6447216871142054E+00, 0.1716839812178710E+00, 0.1519370786864500E+01, 0.1710844627144272E+01, 0.1628548339973444E+00, 0.4587247601659613E+00, 0.6501219520571339E+00, 0.5394016167466366E+00, 0.3261720586281595E+00, 0.2790520826393697E+00, 0.5795909120773233E+00, 0.7598997773325197E+00, 0.2650819619788820E-01, 0.1513401067044909E+00, 0.9168290082662192E-01, 0.1015190880092246E+00, 0.4790492926791300E-02, 0.2214892234681356E-01, 0.1119088044887405E-01, 0.1982969108114764E-01, 0.2781732372482683E-02, 0.1628595626045726E-02, 0.1085600370518675E-01, 0.1911464940919745E-01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 9.5622848228283271E-003, + desigOut: -6.0308751014385013E-019, + sigmaOut: 1.0518227355316156E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 12, + nDivOut: 256, + ttypeOut: -4, + dmin1Out: 9.5622848228283271E-003, + dmin2Out: 6.9533978479808370E-002, + dnOut: 1.0856003705186750E-002, + dn1Out: 9.5622848228283271E-003, + dn2Out: 6.9533978479808370E-002, + gOut: 0.0000000000000000, + tauOut: 5.4769133315280185E-003, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2468318984233055E+01, 0.2471445466333236E+01, 0.1123474100024551E-02, 0.2350431231346416E-02, 0.1173584145846428E+01, 0.1179822839486443E+01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.5204201986859162E+00, 0.5209996276036221E+00, 0.1005707814522541E-01, 0.5058054349403302E-02, 0.1144481884123012E+01, 0.1034766778881179E+01, 0.1435914304680996E+00, 0.1252490967185870E+00, 0.1188442793922463E+01, 0.1312087633296770E+01, 0.1815610143690141E-01, 0.2542350442532051E-01, 0.8537168361686087E+00, 0.8487220155581966E+00, 0.5279290053521807E-01, 0.2862783537884150E-01, 0.1600922365848029E+01, 0.1574348441670908E+01, 0.5696064828871891E-01, 0.8484373804386666E-01, 0.1196485614439627E+01, 0.1074794415251550E+01, 0.1090859328498209E+00, 0.1841287608083240E+00, 0.1569564714711448E+01, 0.7088504197799252E+00, 0.2684440171930437E+00, 0.9752771411128711E+00, 0.3739226419241781E+00, 0.4320210527858890E+00, 0.4123490187575627E+00, 0.2158225196628609E+00, 0.3349394365677468E+00, 0.7144140228254550E+00, 0.1593084209965356E+00, 0.3835134583138245E-01, 0.1622117829797102E+01, 0.1391311611427577E+01, 0.2659792301064862E+00, 0.3955915526975877E+00, 0.1299881336702450E+01, 0.1090644248011184E+01, 0.1698038973078534E+00, 0.4806932321292802E+00, 0.4555835838996722E+00, 0.4591804133211825E+00, 0.6447216871142054E+00, 0.1716839812178710E+00, 0.1519370786864500E+01, 0.1710844627144272E+01, 0.1628548339973444E+00, 0.4587247601659613E+00, 0.6501219520571339E+00, 0.5394016167466366E+00, 0.3261720586281595E+00, 0.2790520826393697E+00, 0.5795909120773233E+00, 0.7598997773325197E+00, 0.2650819619788820E-01, 0.1513401067044909E+00, 0.9168290082662192E-01, 0.1015190880092246E+00, 0.4790492926791300E-02, 0.2214892234681356E-01, 0.1119088044887405E-01, 0.1982969108114764E-01, 0.2781732372482683E-02, 0.1628595626045726E-02, 0.1085600370518675E-01, 0.1911464940919745E-01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 9.5622848228283271E-003, + desig: -6.0308751014385013E-019, + qmax: 2.4715692224139039, + ttype: -4, + dmin1: 9.5622848228283271E-003, + dmin2: 6.9533978479808370E-002, + dn: 1.0856003705186750E-002, + dn1: 9.5622848228283271E-003, + dn2: 6.9533978479808370E-002, + g: 0.0000000000000000, + tau: 5.4769133315280185E-003, + nFail: 2, + iter: 12, + sigma: 1.0518227355316156E-002, + nDiv: 256, + zOut: []float64{0.2468318984233055E+01, 0.2464320851971913E+01, 0.1123474100024551E-02, 0.5350323562789559E-03, 0.1173584145846428E+01, 0.1168088077064565E+01, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.5204201986859162E+00, 0.5252841314829605E+00, 0.1005707814522541E-01, 0.2191222436498315E-01, 0.1144481884123012E+01, 0.1261039483864963E+01, 0.1435914304680996E+00, 0.1353250258951489E+00, 0.1188442793922463E+01, 0.1066152263103050E+01, 0.1815610143690141E-01, 0.1453842008528346E-01, 0.8537168361686087E+00, 0.8868497102573779E+00, 0.5279290053521807E-01, 0.9530062900995111E-01, 0.1600922365848029E+01, 0.1557460778765631E+01, 0.5696064828871891E-01, 0.4375878814786067E-01, 0.1196485614439627E+01, 0.1256691152780422E+01, 0.1090859328498209E+00, 0.1362446379077657E+00, 0.1569564714711448E+01, 0.1696642487635560E+01, 0.2684440171930437E+00, 0.5916231430550117E-01, 0.3739226419241781E+00, 0.7219877400150740E+00, 0.4123490187575627E+00, 0.1912940350054112E+00, 0.3349394365677468E+00, 0.2978322161977056E+00, 0.1593084209965356E+00, 0.8676597630518320E+00, 0.1622117829797102E+01, 0.1015315690490590E+01, 0.2659792301064862E+00, 0.3405260456467969E+00, 0.1299881336702450E+01, 0.1124037582002341E+01, 0.1698038973078534E+00, 0.6882320425428856E-01, 0.4555835838996722E+00, 0.1026360460398424E+01, 0.6447216871142054E+00, 0.9544125430154021E+00, 0.1519370786864500E+01, 0.7226914714852769E+00, 0.1628548339973444E+00, 0.1465016632377001E+00, 0.6501219520571339E+00, 0.8246707410864278E+00, 0.3261720586281595E+00, 0.2292385937027206E+00, 0.5795909120773233E+00, 0.3717389082113253E+00, 0.2650819619788820E-01, 0.6537783023029759E-02, 0.9168290082662192E-01, 0.8481400436921797E-01, 0.4790492926791300E-02, 0.6320870478125323E-03, 0.1119088044887405E-01, 0.8218919412378699E-02, 0.2781732372482683E-02, 0.3674266095981827E-02, 0.1085600370518675E-01, 0.2060131248039419E-02, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 2.0601312480394186E-003, + desigOut: 0.0000000000000000, + sigmaOut: 1.5639833716481661E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 13, + nDivOut: 277, + ttypeOut: -4, + dmin1Out: 5.4371870398960158E-003, + dmin2Out: 8.0023511442426670E-002, + dnOut: 2.0601312480394186E-003, + dn1Out: 5.4371870398960158E-003, + dn2Out: 8.0023511442426670E-002, + gOut: 0.0000000000000000, + tauOut: 5.1216063611655054E-003, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2468318984233055E+01, 0.2464320851971913E+01, 0.1123474100024551E-02, 0.5350323562789559E-03, 0.1173584145846428E+01, 0.1168088077064565E+01, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.5204201986859162E+00, 0.5252841314829605E+00, 0.1005707814522541E-01, 0.2191222436498315E-01, 0.1144481884123012E+01, 0.1261039483864963E+01, 0.1435914304680996E+00, 0.1353250258951489E+00, 0.1188442793922463E+01, 0.1066152263103050E+01, 0.1815610143690141E-01, 0.1453842008528346E-01, 0.8537168361686087E+00, 0.8868497102573779E+00, 0.5279290053521807E-01, 0.9530062900995111E-01, 0.1600922365848029E+01, 0.1557460778765631E+01, 0.5696064828871891E-01, 0.4375878814786067E-01, 0.1196485614439627E+01, 0.1256691152780422E+01, 0.1090859328498209E+00, 0.1362446379077657E+00, 0.1569564714711448E+01, 0.1696642487635560E+01, 0.2684440171930437E+00, 0.5916231430550117E-01, 0.3739226419241781E+00, 0.7219877400150740E+00, 0.4123490187575627E+00, 0.1912940350054112E+00, 0.3349394365677468E+00, 0.2978322161977056E+00, 0.1593084209965356E+00, 0.8676597630518320E+00, 0.1622117829797102E+01, 0.1015315690490590E+01, 0.2659792301064862E+00, 0.3405260456467969E+00, 0.1299881336702450E+01, 0.1124037582002341E+01, 0.1698038973078534E+00, 0.6882320425428856E-01, 0.4555835838996722E+00, 0.1026360460398424E+01, 0.6447216871142054E+00, 0.9544125430154021E+00, 0.1519370786864500E+01, 0.7226914714852769E+00, 0.1628548339973444E+00, 0.1465016632377001E+00, 0.6501219520571339E+00, 0.8246707410864278E+00, 0.3261720586281595E+00, 0.2292385937027206E+00, 0.5795909120773233E+00, 0.3717389082113253E+00, 0.2650819619788820E-01, 0.6537783023029759E-02, 0.9168290082662192E-01, 0.8481400436921797E-01, 0.4790492926791300E-02, 0.6320870478125323E-03, 0.1119088044887405E-01, 0.8218919412378699E-02, 0.2781732372482683E-02, 0.3674266095981827E-02, 0.1085600370518675E-01, 0.2060131248039419E-02, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 2.0601312480394186E-003, + desig: 0.0000000000000000, + qmax: 2.4715692224139039, + ttype: -4, + dmin1: 5.4371870398960158E-003, + dmin2: 8.0023511442426670E-002, + dn: 2.0601312480394186E-003, + dn1: 5.4371870398960158E-003, + dn2: 8.0023511442426670E-002, + g: 0.0000000000000000, + tau: 5.1216063611655054E-003, + nFail: 2, + iter: 13, + sigma: 1.5639833716481661E-002, + nDiv: 277, + zOut: []float64{0.2463574096511276E+01, 0.2464320851971913E+01, 0.2536822079344948E-03, 0.5350323562789559E-03, 0.1166624146026729E+01, 0.1168088077064565E+01, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.5458823568901986E+00, 0.5252841314829605E+00, 0.5061929508212644E-01, 0.2191222436498315E-01, 0.1344463426861069E+01, 0.1261039483864963E+01, 0.1073120173669855E+00, 0.1353250258951489E+00, 0.9720968780044319E+00, 0.1066152263103050E+01, 0.1326348631702415E-01, 0.1453842008528346E-01, 0.9676050651333883E+00, 0.8868497102573779E+00, 0.1533962535161303E+00, 0.9530062900995111E-01, 0.1446541525580445E+01, 0.1557460778765631E+01, 0.3801569533217738E-01, 0.4375878814786067E-01, 0.1353638307539094E+01, 0.1256691152780422E+01, 0.1707682473962209E+00, 0.1362446379077657E+00, 0.1583754766727924E+01, 0.1696642487635560E+01, 0.2697037855661164E-01, 0.5916231430550117E-01, 0.8850296086469572E+00, 0.7219877400150740E+00, 0.6437471225190403E-01, 0.1912940350054112E+00, 0.1099835479180717E+01, 0.2978322161977056E+00, 0.8009821360646626E+00, 0.8676597630518320E+00, 0.5535778122558079E+00, 0.1015315690490590E+01, 0.6914368034330997E+00, 0.3405260456467969E+00, 0.5001421950066134E+00, 0.1124037582002341E+01, 0.1412346654806686E+00, 0.6882320425428856E-01, 0.1838256550116241E+01, 0.1026360460398424E+01, 0.3752173792456719E+00, 0.9544125430154021E+00, 0.4926939676603885E+00, 0.7226914714852769E+00, 0.2452143584512202E+00, 0.1465016632377001E+00, 0.8074131885210117E+00, 0.8246707410864278E+00, 0.1055431169003394E+00, 0.2292385937027206E+00, 0.2714517865170992E+00, 0.3717389082113253E+00, 0.2042703660177667E-02, 0.6537783023029759E-02, 0.8212159993993635E-01, 0.8481400436921797E-01, 0.6326073178529442E-04, 0.6320870478125323E-03, 0.1054813695965874E-01, 0.8218919412378699E-02, 0.7176120699696391E-03, 0.3674266095981827E-02, 0.6073136115328898E-04, 0.2060131248039419E-02, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 6.0731361153288982E-005, + desigOut: 1.7347234759768071E-018, + sigmaOut: 1.6921621533398150E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 14, + nDivOut: 298, + ttypeOut: -2, + dmin1Out: 6.8738708636769136E-003, + dmin2Out: 8.1489512892123819E-002, + dnOut: 6.0731361153288982E-005, + dn1Out: 6.8738708636769136E-003, + dn2Out: 8.1489512892123819E-002, + gOut: 0.0000000000000000, + tauOut: 1.2817878169164906E-003, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2463574096511276E+01, 0.2464320851971913E+01, 0.2536822079344948E-03, 0.5350323562789559E-03, 0.1166624146026729E+01, 0.1168088077064565E+01, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.5458823568901986E+00, 0.5252841314829605E+00, 0.5061929508212644E-01, 0.2191222436498315E-01, 0.1344463426861069E+01, 0.1261039483864963E+01, 0.1073120173669855E+00, 0.1353250258951489E+00, 0.9720968780044319E+00, 0.1066152263103050E+01, 0.1326348631702415E-01, 0.1453842008528346E-01, 0.9676050651333883E+00, 0.8868497102573779E+00, 0.1533962535161303E+00, 0.9530062900995111E-01, 0.1446541525580445E+01, 0.1557460778765631E+01, 0.3801569533217738E-01, 0.4375878814786067E-01, 0.1353638307539094E+01, 0.1256691152780422E+01, 0.1707682473962209E+00, 0.1362446379077657E+00, 0.1583754766727924E+01, 0.1696642487635560E+01, 0.2697037855661164E-01, 0.5916231430550117E-01, 0.8850296086469572E+00, 0.7219877400150740E+00, 0.6437471225190403E-01, 0.1912940350054112E+00, 0.1099835479180717E+01, 0.2978322161977056E+00, 0.8009821360646626E+00, 0.8676597630518320E+00, 0.5535778122558079E+00, 0.1015315690490590E+01, 0.6914368034330997E+00, 0.3405260456467969E+00, 0.5001421950066134E+00, 0.1124037582002341E+01, 0.1412346654806686E+00, 0.6882320425428856E-01, 0.1838256550116241E+01, 0.1026360460398424E+01, 0.3752173792456719E+00, 0.9544125430154021E+00, 0.4926939676603885E+00, 0.7226914714852769E+00, 0.2452143584512202E+00, 0.1465016632377001E+00, 0.8074131885210117E+00, 0.8246707410864278E+00, 0.1055431169003394E+00, 0.2292385937027206E+00, 0.2714517865170992E+00, 0.3717389082113253E+00, 0.2042703660177667E-02, 0.6537783023029759E-02, 0.8212159993993635E-01, 0.8481400436921797E-01, 0.6326073178529442E-04, 0.6320870478125323E-03, 0.1054813695965874E-01, 0.8218919412378699E-02, 0.7176120699696391E-03, 0.3674266095981827E-02, 0.6073136115328898E-04, 0.2060131248039419E-02, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 6.0731361153288982E-005, + desig: 1.7347234759768071E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 6.8738708636769136E-003, + dmin2: 8.1489512892123819E-002, + dn: 6.0731361153288982E-005, + dn1: 6.8738708636769136E-003, + dn2: 8.1489512892123819E-002, + g: 0.0000000000000000, + tau: 1.2817878169164906E-003, + nFail: 2, + iter: 14, + sigma: 1.6921621533398150E-002, + nDiv: 298, + zOut: []float64{0.2463574096511276E+01, 0.2463770941477959E+01, 0.2536822079344948E-03, 0.1201214707955848E-03, 0.1166624146026729E+01, 0.1166479398455512E+01, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.5458823568901986E+00, 0.5964297407456295E+00, 0.5061929508212644E-01, 0.1141052940222717E+00, 0.1344463426861069E+01, 0.1337613312964532E+01, 0.1073120173669855E+00, 0.7798791776646297E-01, 0.9720968780044319E+00, 0.9073156093137420E+00, 0.1326348631702415E-01, 0.1414482062243694E-01, 0.9676050651333883E+00, 0.1106799660785830E+01, 0.1533962535161303E+00, 0.2004825791345134E+00, 0.1446541525580445E+01, 0.1284017804536858E+01, 0.3801569533217738E-01, 0.4007693764646178E-01, 0.1353638307539094E+01, 0.1484272780047602E+01, 0.1707682473962209E+00, 0.1822138285193538E+00, 0.1583754766727924E+01, 0.1428454479523931E+01, 0.2697037855661164E-01, 0.1671007646458111E-01, 0.8850296086469572E+00, 0.9326374071930291E+00, 0.6437471225190403E-01, 0.7591545433480534E-01, 0.1099835479180717E+01, 0.1824845323669324E+01, 0.8009821360646626E+00, 0.2429827519008994E+00, 0.5535778122558079E+00, 0.1001975026546757E+01, 0.6914368034330997E+00, 0.3451350696526060E+00, 0.5001421950066134E+00, 0.2961849535934249E+00, 0.1412346654806686E+00, 0.8765656248686587E+00, 0.1838256550116241E+01, 0.1336851467252003E+01, 0.3752173792456719E+00, 0.1382856239786244E+00, 0.4926939676603885E+00, 0.5995658648917332E+00, 0.2452143584512202E+00, 0.3302211126778973E+00, 0.8074131885210117E+00, 0.5826783555022028E+00, 0.1055431169003394E+00, 0.4916926700063749E-01, 0.2714517865170992E+00, 0.2242683859353883E+00, 0.2042703660177667E-02, 0.7479881396448043E-03, 0.8212159993993635E-01, 0.8138003529082581E-01, 0.6326073178529442E-04, 0.8199589256196194E-05, 0.1054813695965874E-01, 0.1120071219912114E-01, 0.7176120699696391E-03, 0.3890963093641941E-05, 0.6073136115328898E-04, 0.3156808608191942E-08, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 3.1568086081919418E-009, + desigOut: 4.7433845046240819E-020, + sigmaOut: 1.6978458774649190E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 15, + nDivOut: 319, + ttypeOut: -2, + dmin1Out: 1.0483100129151506E-002, + dmin2Out: 8.1316774559040517E-002, + dnOut: 3.1568086081919418E-009, + dn1Out: 1.0483100129151506E-002, + dn2Out: 8.1316774559040517E-002, + gOut: 0.0000000000000000, + tauOut: 5.6837241251038845E-005, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2463574096511276E+01, 0.2463770941477959E+01, 0.2536822079344948E-03, 0.1201214707955848E-03, 0.1166624146026729E+01, 0.1166479398455512E+01, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.5458823568901986E+00, 0.5964297407456295E+00, 0.5061929508212644E-01, 0.1141052940222717E+00, 0.1344463426861069E+01, 0.1337613312964532E+01, 0.1073120173669855E+00, 0.7798791776646297E-01, 0.9720968780044319E+00, 0.9073156093137420E+00, 0.1326348631702415E-01, 0.1414482062243694E-01, 0.9676050651333883E+00, 0.1106799660785830E+01, 0.1533962535161303E+00, 0.2004825791345134E+00, 0.1446541525580445E+01, 0.1284017804536858E+01, 0.3801569533217738E-01, 0.4007693764646178E-01, 0.1353638307539094E+01, 0.1484272780047602E+01, 0.1707682473962209E+00, 0.1822138285193538E+00, 0.1583754766727924E+01, 0.1428454479523931E+01, 0.2697037855661164E-01, 0.1671007646458111E-01, 0.8850296086469572E+00, 0.9326374071930291E+00, 0.6437471225190403E-01, 0.7591545433480534E-01, 0.1099835479180717E+01, 0.1824845323669324E+01, 0.8009821360646626E+00, 0.2429827519008994E+00, 0.5535778122558079E+00, 0.1001975026546757E+01, 0.6914368034330997E+00, 0.3451350696526060E+00, 0.5001421950066134E+00, 0.2961849535934249E+00, 0.1412346654806686E+00, 0.8765656248686587E+00, 0.1838256550116241E+01, 0.1336851467252003E+01, 0.3752173792456719E+00, 0.1382856239786244E+00, 0.4926939676603885E+00, 0.5995658648917332E+00, 0.2452143584512202E+00, 0.3302211126778973E+00, 0.8074131885210117E+00, 0.5826783555022028E+00, 0.1055431169003394E+00, 0.4916926700063749E-01, 0.2714517865170992E+00, 0.2242683859353883E+00, 0.2042703660177667E-02, 0.7479881396448043E-03, 0.8212159993993635E-01, 0.8138003529082581E-01, 0.6326073178529442E-04, 0.8199589256196194E-05, 0.1054813695965874E-01, 0.1120071219912114E-01, 0.7176120699696391E-03, 0.3890963093641941E-05, 0.6073136115328898E-04, 0.3156808608191942E-08, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 3.1568086081919418E-009, + desig: 4.7433845046240819E-020, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 1.0483100129151506E-002, + dmin2: 8.1316774559040517E-002, + dn: 3.1568086081919418E-009, + dn1: 1.0483100129151506E-002, + dn2: 8.1316774559040517E-002, + g: 0.0000000000000000, + tau: 5.6837241251038845E-005, + nFail: 2, + iter: 15, + sigma: 1.6978458774649190E-002, + nDiv: 319, + zOut: []float64{0.2463891059793043E+01, 0.2463770941477959E+01, 0.5686908130061341E-04, 0.1201214707955848E-03, 0.1166437600203943E+01, 0.1166479398455512E+01, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.7105273238932086E+00, 0.5964297407456295E+00, 0.2148105431436762E+00, 0.1141052940222717E+00, 0.1200790684431606E+01, 0.1337613312964532E+01, 0.5892755169139442E-01, 0.7798791776646297E-01, 0.8625328750890724E+00, 0.9073156093137420E+00, 0.1815059242254727E-01, 0.1414482062243694E-01, 0.1289131644342084E+01, 0.1106799660785830E+01, 0.1996872873596725E+00, 0.2004825791345134E+00, 0.1124407451667935E+01, 0.1284017804536858E+01, 0.5290351604133232E-01, 0.4007693764646178E-01, 0.1613583089369911E+01, 0.1484272780047602E+01, 0.1613081850537457E+00, 0.1822138285193538E+00, 0.1283856367779054E+01, 0.1428454479523931E+01, 0.1213877407087503E-01, 0.1671007646458111E-01, 0.9964140843012472E+00, 0.9326374071930291E+00, 0.1390325207358455E+00, 0.7591545433480534E-01, 0.1928795551678665E+01, 0.1824845323669324E+01, 0.1262252233392066E+00, 0.2429827519008994E+00, 0.1220884869704444E+01, 0.1001975026546757E+01, 0.8372928285471114E-01, 0.3451350696526060E+00, 0.1089021292451660E+01, 0.2961849535934249E+00, 0.1076046951396362E+01, 0.8765656248686587E+00, 0.3990901366785531E+00, 0.1336851467252003E+01, 0.2077509116934600E+00, 0.1382856239786244E+00, 0.7220360627204584E+00, 0.5995658648917332E+00, 0.2664862668525171E+00, 0.3302211126778973E+00, 0.3653613524946110E+00, 0.5826783555022028E+00, 0.3018138637972599E-01, 0.4916926700063749E-01, 0.1948349845395949E+00, 0.2242683859353883E+00, 0.3124249032854923E-03, 0.7479881396448043E-03, 0.8107580682108434E-01, 0.8138003529082581E-01, 0.1132782305976083E-05, 0.8199589256196194E-05, 0.1120346722419663E-01, 0.1120071219912114E-01, 0.1096359327194516E-11, 0.3890963093641941E-05, 0.6968497581336674E-16, 0.3156808608191942E-08, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 6.9684975813366743E-017, + desigOut: 1.5445815365207740E-018, + sigmaOut: 1.6978461930361368E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 16, + nDivOut: 340, + ttypeOut: -2, + dmin1Out: 1.1199576261102989E-002, + dmin2Out: 8.1067607231828140E-002, + dnOut: 6.9684975813366743E-017, + dn1Out: 1.1199576261102989E-002, + dn2Out: 8.1067607231828140E-002, + gOut: 0.0000000000000000, + tauOut: 3.1557121791797713E-009, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2463891059793043E+01, 0.2463770941477959E+01, 0.5686908130061341E-04, 0.1201214707955848E-03, 0.1166437600203943E+01, 0.1166479398455512E+01, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.7105273238932086E+00, 0.5964297407456295E+00, 0.2148105431436762E+00, 0.1141052940222717E+00, 0.1200790684431606E+01, 0.1337613312964532E+01, 0.5892755169139442E-01, 0.7798791776646297E-01, 0.8625328750890724E+00, 0.9073156093137420E+00, 0.1815059242254727E-01, 0.1414482062243694E-01, 0.1289131644342084E+01, 0.1106799660785830E+01, 0.1996872873596725E+00, 0.2004825791345134E+00, 0.1124407451667935E+01, 0.1284017804536858E+01, 0.5290351604133232E-01, 0.4007693764646178E-01, 0.1613583089369911E+01, 0.1484272780047602E+01, 0.1613081850537457E+00, 0.1822138285193538E+00, 0.1283856367779054E+01, 0.1428454479523931E+01, 0.1213877407087503E-01, 0.1671007646458111E-01, 0.9964140843012472E+00, 0.9326374071930291E+00, 0.1390325207358455E+00, 0.7591545433480534E-01, 0.1928795551678665E+01, 0.1824845323669324E+01, 0.1262252233392066E+00, 0.2429827519008994E+00, 0.1220884869704444E+01, 0.1001975026546757E+01, 0.8372928285471114E-01, 0.3451350696526060E+00, 0.1089021292451660E+01, 0.2961849535934249E+00, 0.1076046951396362E+01, 0.8765656248686587E+00, 0.3990901366785531E+00, 0.1336851467252003E+01, 0.2077509116934600E+00, 0.1382856239786244E+00, 0.7220360627204584E+00, 0.5995658648917332E+00, 0.2664862668525171E+00, 0.3302211126778973E+00, 0.3653613524946110E+00, 0.5826783555022028E+00, 0.3018138637972599E-01, 0.4916926700063749E-01, 0.1948349845395949E+00, 0.2242683859353883E+00, 0.3124249032854923E-03, 0.7479881396448043E-03, 0.8107580682108434E-01, 0.8138003529082581E-01, 0.1132782305976083E-05, 0.8199589256196194E-05, 0.1120346722419663E-01, 0.1120071219912114E-01, 0.1096359327194516E-11, 0.3890963093641941E-05, 0.6968497581336674E-16, 0.3156808608191942E-08, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 6.9684975813366743E-017, + desig: 1.5445815365207740E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 1.1199576261102989E-002, + dmin2: 8.1067607231828140E-002, + dn: 6.9684975813366743E-017, + dn1: 1.1199576261102989E-002, + dn2: 8.1067607231828140E-002, + g: 0.0000000000000000, + tau: 3.1557121791797713E-009, + nFail: 2, + iter: 16, + sigma: 1.6978461930361368E-002, + nDiv: 340, + zOut: []float64{0.2463891059793043E+01, 0.2463947928874343E+01, 0.5686908130061341E-04, 0.2692193042748079E-04, 0.1166437600203943E+01, 0.1166418385992496E+01, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.7105273238932086E+00, 0.9253331718563164E+00, 0.2148105431436762E+00, 0.2787563517334627E+00, 0.1200790684431606E+01, 0.9809618843895378E+00, 0.5892755169139442E-01, 0.5181337969514327E-01, 0.8625328750890724E+00, 0.8288700878164763E+00, 0.1815059242254727E-01, 0.2822939734392020E-01, 0.1289131644342084E+01, 0.1460589534357837E+01, 0.1996872873596725E+00, 0.1537255119449346E+00, 0.1124407451667935E+01, 0.1023585455764333E+01, 0.5290351604133232E-01, 0.8339725654733963E-01, 0.1613583089369911E+01, 0.1691494017876317E+01, 0.1613081850537457E+00, 0.1224340957564512E+00, 0.1283856367779054E+01, 0.1173561046093478E+01, 0.1213877407087503E-01, 0.1030644761994533E-01, 0.9964140843012472E+00, 0.1125140157417147E+01, 0.1390325207358455E+00, 0.2383394688796517E+00, 0.1928795551678665E+01, 0.1816681306138221E+01, 0.1262252233392066E+00, 0.8482856339700598E-01, 0.1220884869704444E+01, 0.1219785589162149E+01, 0.8372928285471114E-01, 0.7475327847832687E-01, 0.1089021292451660E+01, 0.2090314965369696E+01, 0.1076046951396362E+01, 0.2054425921547012E+00, 0.3990901366785531E+00, 0.4013984562173118E+00, 0.2077509116934600E+00, 0.3737026089221466E+00, 0.7220360627204584E+00, 0.6148197206508288E+00, 0.2664862668525171E+00, 0.1583615157552351E+00, 0.3653613524946110E+00, 0.2371812231191019E+00, 0.3018138637972599E-01, 0.2479281399828426E-01, 0.1948349845395949E+00, 0.1703545954445960E+00, 0.3124249032854923E-03, 0.1486904479375115E-03, 0.8107580682108434E-01, 0.8092824915545274E-01, 0.1132782305976083E-05, 0.1568190288260776E-06, 0.1120346722419663E-01, 0.1120331040626409E-01, 0.1096359327194516E-11, 0.6819392699821255E-26, 0.6968497581336674E-16, 0.6162975822039155E-31, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 6.1629758220391547E-032, + desigOut: -1.6288286479578371E-018, + sigmaOut: 1.6978461930361441E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 17, + nDivOut: 361, + ttypeOut: -2, + dmin1Out: 1.1203310405167735E-002, + dmin2Out: 8.0927116373146771E-002, + dnOut: 6.1629758220391547E-032, + dn1Out: 1.1203310405167735E-002, + dn2Out: 8.0927116373146771E-002, + gOut: 0.0000000000000000, + tauOut: 6.9684975806547287E-017, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2463891059793043E+01, 0.2463947928874343E+01, 0.5686908130061341E-04, 0.2692193042748079E-04, 0.1166437600203943E+01, 0.1166418385992496E+01, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.7105273238932086E+00, 0.9253331718563164E+00, 0.2148105431436762E+00, 0.2787563517334627E+00, 0.1200790684431606E+01, 0.9809618843895378E+00, 0.5892755169139442E-01, 0.5181337969514327E-01, 0.8625328750890724E+00, 0.8288700878164763E+00, 0.1815059242254727E-01, 0.2822939734392020E-01, 0.1289131644342084E+01, 0.1460589534357837E+01, 0.1996872873596725E+00, 0.1537255119449346E+00, 0.1124407451667935E+01, 0.1023585455764333E+01, 0.5290351604133232E-01, 0.8339725654733963E-01, 0.1613583089369911E+01, 0.1691494017876317E+01, 0.1613081850537457E+00, 0.1224340957564512E+00, 0.1283856367779054E+01, 0.1173561046093478E+01, 0.1213877407087503E-01, 0.1030644761994533E-01, 0.9964140843012472E+00, 0.1125140157417147E+01, 0.1390325207358455E+00, 0.2383394688796517E+00, 0.1928795551678665E+01, 0.1816681306138221E+01, 0.1262252233392066E+00, 0.8482856339700598E-01, 0.1220884869704444E+01, 0.1219785589162149E+01, 0.8372928285471114E-01, 0.7475327847832687E-01, 0.1089021292451660E+01, 0.2090314965369696E+01, 0.1076046951396362E+01, 0.2054425921547012E+00, 0.3990901366785531E+00, 0.4013984562173118E+00, 0.2077509116934600E+00, 0.3737026089221466E+00, 0.7220360627204584E+00, 0.6148197206508288E+00, 0.2664862668525171E+00, 0.1583615157552351E+00, 0.3653613524946110E+00, 0.2371812231191019E+00, 0.3018138637972599E-01, 0.2479281399828426E-01, 0.1948349845395949E+00, 0.1703545954445960E+00, 0.3124249032854923E-03, 0.1486904479375115E-03, 0.8107580682108434E-01, 0.8092824915545274E-01, 0.1132782305976083E-05, 0.1568190288260776E-06, 0.1120346722419663E-01, 0.1120331040626409E-01, 0.1096359327194516E-11, 0.6819392699821255E-26, 0.6968497581336674E-16, 0.6162975822039155E-31, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 6.1629758220391547E-032, + desig: -1.6288286479578371E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 1.1203310405167735E-002, + dmin2: 8.0927116373146771E-002, + dn: 6.1629758220391547E-032, + dn1: 1.1203310405167735E-002, + dn2: 8.0927116373146771E-002, + g: 0.0000000000000000, + tau: 6.9684975806547287E-017, + nFail: 2, + iter: 17, + sigma: 1.6978461930361441E-002, + nDiv: 361, + zOut: []float64{0.2463974850804771E+01, 0.2463947928874343E+01, 0.1274454348702788E-04, 0.2692193042748079E-04, 0.1166410336629578E+01, 0.1166418385992496E+01, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.1204085798823124E+01, 0.9253331718563164E+00, 0.2271012218143261E+00, 0.2787563517334627E+00, 0.8056740422703550E+00, 0.9809618843895378E+00, 0.5330513126246473E-01, 0.5181337969514327E-01, 0.8037943538979316E+00, 0.8288700878164763E+00, 0.5129615818002433E-01, 0.2822939734392020E-01, 0.1563018888122747E+01, 0.1460589534357837E+01, 0.1006713350698832E+00, 0.1537255119449346E+00, 0.1006311377241790E+01, 0.1023585455764333E+01, 0.1401812239704283E+00, 0.8339725654733963E-01, 0.1673746889662340E+01, 0.1691494017876317E+01, 0.8584564749956700E-01, 0.1224340957564512E+00, 0.1098021846213856E+01, 0.1173561046093478E+01, 0.1056099032774466E-01, 0.1030644761994533E-01, 0.1352918635969054E+01, 0.1125140157417147E+01, 0.3200390963041470E+00, 0.2383394688796517E+00, 0.1581470773231080E+01, 0.1816681306138221E+01, 0.6542811978092533E-01, 0.8482856339700598E-01, 0.1229110747859551E+01, 0.1219785589162149E+01, 0.1271308521106110E+00, 0.7475327847832687E-01, 0.2168626705413786E+01, 0.2090314965369696E+01, 0.3802606466401751E-01, 0.2054425921547012E+00, 0.7370750004754409E+00, 0.4013984562173118E+00, 0.3117182559112661E+00, 0.3737026089221466E+00, 0.4614629804947978E+00, 0.6148197206508288E+00, 0.8139413038408401E-01, 0.1583615157552351E+00, 0.1805799067333021E+00, 0.2371812231191019E+00, 0.2338892446571373E-01, 0.2479281399828426E-01, 0.1471143614268198E+00, 0.1703545954445960E+00, 0.8179526119010886E-04, 0.1486904479375115E-03, 0.8084661071329148E-01, 0.8092824915545274E-01, 0.2173118009582292E-07, 0.1568190288260776E-06, 0.1120328867508400E-01, 0.1120331040626409E-01, 0.3751376363572422E-55, 0.6819392699821255E-26, 0.6162975822039155E-31, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 6.1629758220391547E-032, + desigOut: -1.6288286479578371E-018, + sigmaOut: 1.6978461930361441E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 18, + nDivOut: 382, + ttypeOut: -2, + dmin1Out: 1.1203288675083998E-002, + dmin2Out: 8.0846453894262649E-002, + dnOut: 6.1629758220391547E-032, + dn1Out: 1.1203288675083998E-002, + dn2Out: 8.0846453894262649E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2463974850804771E+01, 0.2463947928874343E+01, 0.1274454348702788E-04, 0.2692193042748079E-04, 0.1166410336629578E+01, 0.1166418385992496E+01, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.1204085798823124E+01, 0.9253331718563164E+00, 0.2271012218143261E+00, 0.2787563517334627E+00, 0.8056740422703550E+00, 0.9809618843895378E+00, 0.5330513126246473E-01, 0.5181337969514327E-01, 0.8037943538979316E+00, 0.8288700878164763E+00, 0.5129615818002433E-01, 0.2822939734392020E-01, 0.1563018888122747E+01, 0.1460589534357837E+01, 0.1006713350698832E+00, 0.1537255119449346E+00, 0.1006311377241790E+01, 0.1023585455764333E+01, 0.1401812239704283E+00, 0.8339725654733963E-01, 0.1673746889662340E+01, 0.1691494017876317E+01, 0.8584564749956700E-01, 0.1224340957564512E+00, 0.1098021846213856E+01, 0.1173561046093478E+01, 0.1056099032774466E-01, 0.1030644761994533E-01, 0.1352918635969054E+01, 0.1125140157417147E+01, 0.3200390963041470E+00, 0.2383394688796517E+00, 0.1581470773231080E+01, 0.1816681306138221E+01, 0.6542811978092533E-01, 0.8482856339700598E-01, 0.1229110747859551E+01, 0.1219785589162149E+01, 0.1271308521106110E+00, 0.7475327847832687E-01, 0.2168626705413786E+01, 0.2090314965369696E+01, 0.3802606466401751E-01, 0.2054425921547012E+00, 0.7370750004754409E+00, 0.4013984562173118E+00, 0.3117182559112661E+00, 0.3737026089221466E+00, 0.4614629804947978E+00, 0.6148197206508288E+00, 0.8139413038408401E-01, 0.1583615157552351E+00, 0.1805799067333021E+00, 0.2371812231191019E+00, 0.2338892446571373E-01, 0.2479281399828426E-01, 0.1471143614268198E+00, 0.1703545954445960E+00, 0.8179526119010886E-04, 0.1486904479375115E-03, 0.8084661071329148E-01, 0.8092824915545274E-01, 0.2173118009582292E-07, 0.1568190288260776E-06, 0.1120328867508400E-01, 0.1120331040626409E-01, 0.3751376363572422E-55, 0.6819392699821255E-26, 0.6162975822039155E-31, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 6.1629758220391547E-032, + desig: -1.6288286479578371E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 1.1203288675083998E-002, + dmin2: 8.0846453894262649E-002, + dn: 6.1629758220391547E-032, + dn1: 1.1203288675083998E-002, + dn2: 8.0846453894262649E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 18, + sigma: 1.6978461930361441E-002, + nDiv: 382, + zOut: []float64{0.2463974850804771E+01, 0.2452784311062345E+01, 0.1274454348702788E-04, 0.6060609239813679E-05, 0.1166410336629578E+01, 0.1155204716501079E+01, 0.3724766654883956E-05, 0.3882375624867434E-05, 0.1204085798823124E+01, 0.1419979853975912E+01, 0.2271012218143261E+00, 0.1288536304732592E+00, 0.8056740422703550E+00, 0.7189222587736472E+00, 0.5330513126246473E-01, 0.5959804835594534E-01, 0.8037943538979316E+00, 0.7842891794360973E+00, 0.5129615818002433E-01, 0.1022287011292917E+00, 0.1563018888122747E+01, 0.1550258237777425E+01, 0.1006713350698832E+00, 0.6534828028921505E-01, 0.1006311377241790E+01, 0.1069941036637090E+01, 0.1401812239704283E+00, 0.2192904838448094E+00, 0.1673746889662340E+01, 0.1529098769031184E+01, 0.8584564749956700E-01, 0.6164441320989392E-01, 0.1098021846213856E+01, 0.1035735139045794E+01, 0.1056099032774466E-01, 0.1379518767882891E-01, 0.1352918635969054E+01, 0.1647959260308459E+01, 0.3200390963041470E+00, 0.3071268139247320E+00, 0.1581470773231080E+01, 0.1328568794801360E+01, 0.6542811978092533E-01, 0.6053010243026304E-01, 0.1229110747859551E+01, 0.1284508213253985E+01, 0.1271308521106110E+00, 0.2146341752620367E+00, 0.2168626705413786E+01, 0.1980815310529854E+01, 0.3802606466401751E-01, 0.1414976019284330E-01, 0.7370750004754409E+00, 0.1023440211907950E+01, 0.3117182559112661E+00, 0.1405518698344743E+00, 0.4614629804947978E+00, 0.3911019567584944E+00, 0.8139413038408401E-01, 0.3758136265851575E-01, 0.1805799067333021E+00, 0.1551841842545868E+00, 0.2338892446571373E-01, 0.2217266343062855E-01, 0.1471143614268198E+00, 0.1138202089714681E+00, 0.8179526119010886E-04, 0.5809925758690545E-04, 0.8084661071329148E-01, 0.6958524890097138E-01, 0.2173118009582292E-07, 0.3498739858072780E-08, 0.1120328867508400E-01, 0.8904308505808256E-09, 0.3751376363572422E-55, 0.3882375624867434E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 19, + ppOut: 0, + dminOut: 8.9043085058082561E-010, + desigOut: 1.7347234759768071E-018, + sigmaOut: 2.8181746216274728E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 19, + nDivOut: 402, + ttypeOut: -7, + dmin1Out: 6.9585227169791292E-002, + dmin2Out: 0.11373841371027797, + dnOut: 8.9043085058082561E-010, + dn1Out: 6.9585227169791292E-002, + dn2Out: 0.11373841371027797, + gOut: 0.0000000000000000, + tauOut: 1.1203284285913290E-002, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2463974850804771E+01, 0.2452784311062345E+01, 0.1274454348702788E-04, 0.6060609239813679E-05, 0.1166410336629578E+01, 0.1155204716501079E+01, 0.3724766654883956E-05, 0.3882375624867434E-05, 0.1204085798823124E+01, 0.1419979853975912E+01, 0.2271012218143261E+00, 0.1288536304732592E+00, 0.8056740422703550E+00, 0.7189222587736472E+00, 0.5330513126246473E-01, 0.5959804835594534E-01, 0.8037943538979316E+00, 0.7842891794360973E+00, 0.5129615818002433E-01, 0.1022287011292917E+00, 0.1563018888122747E+01, 0.1550258237777425E+01, 0.1006713350698832E+00, 0.6534828028921505E-01, 0.1006311377241790E+01, 0.1069941036637090E+01, 0.1401812239704283E+00, 0.2192904838448094E+00, 0.1673746889662340E+01, 0.1529098769031184E+01, 0.8584564749956700E-01, 0.6164441320989392E-01, 0.1098021846213856E+01, 0.1035735139045794E+01, 0.1056099032774466E-01, 0.1379518767882891E-01, 0.1352918635969054E+01, 0.1647959260308459E+01, 0.3200390963041470E+00, 0.3071268139247320E+00, 0.1581470773231080E+01, 0.1328568794801360E+01, 0.6542811978092533E-01, 0.6053010243026304E-01, 0.1229110747859551E+01, 0.1284508213253985E+01, 0.1271308521106110E+00, 0.2146341752620367E+00, 0.2168626705413786E+01, 0.1980815310529854E+01, 0.3802606466401751E-01, 0.1414976019284330E-01, 0.7370750004754409E+00, 0.1023440211907950E+01, 0.3117182559112661E+00, 0.1405518698344743E+00, 0.4614629804947978E+00, 0.3911019567584944E+00, 0.8139413038408401E-01, 0.3758136265851575E-01, 0.1805799067333021E+00, 0.1551841842545868E+00, 0.2338892446571373E-01, 0.2217266343062855E-01, 0.1471143614268198E+00, 0.1138202089714681E+00, 0.8179526119010886E-04, 0.5809925758690545E-04, 0.8084661071329148E-01, 0.6958524890097138E-01, 0.2173118009582292E-07, 0.3498739858072780E-08, 0.1120328867508400E-01, 0.8904308505808256E-09, 0.3751376363572422E-55, 0.3882375624867434E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 8.9043085058082561E-010, + desig: 1.7347234759768071E-018, + qmax: 2.4715692224139039, + ttype: -7, + dmin1: 6.9585227169791292E-002, + dmin2: 0.11373841371027797, + dn: 8.9043085058082561E-010, + dn1: 6.9585227169791292E-002, + dn2: 0.11373841371027797, + g: 0.0000000000000000, + tau: 1.1203284285913290E-002, + nFail: 2, + iter: 19, + sigma: 2.8181746216274728E-002, + nDiv: 402, + zOut: []float64{0.2452790370781154E+01, 0.2452784311062345E+01, 0.2854399814229969E-05, 0.6060609239813679E-05, 0.1155205743586459E+01, 0.1155204716501079E+01, 0.4772219324121025E-05, 0.3882375624867434E-05, 0.1548828711339416E+01, 0.1419979853975912E+01, 0.5981019230390531E-01, 0.1288536304732592E+00, 0.7187101139352565E+00, 0.7189222587736472E+00, 0.6503610222645050E-01, 0.5959804835594534E-01, 0.8214817774485077E+00, 0.7842891794360973E+00, 0.1929207566298143E+00, 0.1022287011292917E+00, 0.1422685760546395E+01, 0.1550258237777425E+01, 0.4914564318703864E-01, 0.6534828028921505E-01, 0.1240085876404429E+01, 0.1069941036637090E+01, 0.2703980549150243E+00, 0.2192904838448094E+00, 0.1320345126435623E+01, 0.1529098769031184E+01, 0.4835651195207321E-01, 0.6164441320989392E-01, 0.1001173813882118E+01, 0.1035735139045794E+01, 0.2270725319399537E-01, 0.1379518767882891E-01, 0.1932378820148765E+01, 0.1647959260308459E+01, 0.2111589595024383E+00, 0.3071268139247320E+00, 0.1177939936838754E+01, 0.1328568794801360E+01, 0.6600626338337756E-01, 0.6053010243026304E-01, 0.1433136124242214E+01, 0.1284508213253985E+01, 0.2966575563411978E+00, 0.2146341752620367E+00, 0.1698307513491068E+01, 0.1980815310529854E+01, 0.8526979628348903E-02, 0.1414976019284330E-01, 0.1155465101223645E+01, 0.1023440211907950E+01, 0.4757401262929915E-01, 0.1405518698344743E+00, 0.3811093058972801E+00, 0.3911019567584944E+00, 0.1530278326215801E-01, 0.3758136265851575E-01, 0.1620540635326265E+00, 0.1551841842545868E+00, 0.1557318051836492E-01, 0.2217266343062855E-01, 0.9830512682025924E-01, 0.1138202089714681E+00, 0.4112553872737890E-04, 0.5809925758690545E-04, 0.6954412597055305E-01, 0.6958524890097138E-01, 0.4479725446695418E-16, 0.3498739858072780E-08, 0.1396210563637444E-18, 0.8904308505808256E-09, 0.2854399814229969E-05, 0.3882375624867434E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 19, + ppOut: 1, + dminOut: 1.3962105636374437E-019, + desigOut: -1.5687885635568321E-018, + sigmaOut: 2.8181747106705537E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 20, + nDivOut: 422, + ttypeOut: -2, + dmin1Out: 6.9544122471813200E-002, + dmin2Out: 9.8247027562672340E-002, + dnOut: 1.3962105636374437E-019, + dn1Out: 6.9544122471813200E-002, + dn2Out: 9.8247027562672340E-002, + gOut: 0.0000000000000000, + tauOut: 8.9043080564395014E-010, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2452790370781154E+01, 0.2452784311062345E+01, 0.2854399814229969E-05, 0.6060609239813679E-05, 0.1155205743586459E+01, 0.1155204716501079E+01, 0.4772219324121025E-05, 0.3882375624867434E-05, 0.1548828711339416E+01, 0.1419979853975912E+01, 0.5981019230390531E-01, 0.1288536304732592E+00, 0.7187101139352565E+00, 0.7189222587736472E+00, 0.6503610222645050E-01, 0.5959804835594534E-01, 0.8214817774485077E+00, 0.7842891794360973E+00, 0.1929207566298143E+00, 0.1022287011292917E+00, 0.1422685760546395E+01, 0.1550258237777425E+01, 0.4914564318703864E-01, 0.6534828028921505E-01, 0.1240085876404429E+01, 0.1069941036637090E+01, 0.2703980549150243E+00, 0.2192904838448094E+00, 0.1320345126435623E+01, 0.1529098769031184E+01, 0.4835651195207321E-01, 0.6164441320989392E-01, 0.1001173813882118E+01, 0.1035735139045794E+01, 0.2270725319399537E-01, 0.1379518767882891E-01, 0.1932378820148765E+01, 0.1647959260308459E+01, 0.2111589595024383E+00, 0.3071268139247320E+00, 0.1177939936838754E+01, 0.1328568794801360E+01, 0.6600626338337756E-01, 0.6053010243026304E-01, 0.1433136124242214E+01, 0.1284508213253985E+01, 0.2966575563411978E+00, 0.2146341752620367E+00, 0.1698307513491068E+01, 0.1980815310529854E+01, 0.8526979628348903E-02, 0.1414976019284330E-01, 0.1155465101223645E+01, 0.1023440211907950E+01, 0.4757401262929915E-01, 0.1405518698344743E+00, 0.3811093058972801E+00, 0.3911019567584944E+00, 0.1530278326215801E-01, 0.3758136265851575E-01, 0.1620540635326265E+00, 0.1551841842545868E+00, 0.1557318051836492E-01, 0.2217266343062855E-01, 0.9830512682025924E-01, 0.1138202089714681E+00, 0.4112553872737890E-04, 0.5809925758690545E-04, 0.6954412597055305E-01, 0.6958524890097138E-01, 0.4479725446695418E-16, 0.3498739858072780E-08, 0.1396210563637444E-18, 0.8904308505808256E-09, 0.2854399814229969E-05, 0.3882375624867434E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 1.3962105636374437E-019, + desig: -1.5687885635568321E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 6.9544122471813200E-002, + dmin2: 9.8247027562672340E-002, + dn: 1.3962105636374437E-019, + dn1: 6.9544122471813200E-002, + dn2: 9.8247027562672340E-002, + g: 0.0000000000000000, + tau: 8.9043080564395014E-010, + nFail: 2, + iter: 20, + sigma: 2.8181747106705537E-002, + nDiv: 422, + zOut: []float64{0.2452790370781154E+01, 0.2452793225180968E+01, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1155205743586459E+01, 0.1155209171453138E+01, 0.4772219324121025E-05, 0.6398278760815103E-05, 0.1548828711339416E+01, 0.1608632505364561E+01, 0.5981019230390531E-01, 0.2672219415054498E-01, 0.7187101139352565E+00, 0.7570240220111620E+00, 0.6503610222645050E-01, 0.7057368234283014E-01, 0.8214817774485077E+00, 0.9438288517354918E+00, 0.1929207566298143E+00, 0.2908001941945216E+00, 0.1422685760546395E+01, 0.1181031209538913E+01, 0.4914564318703864E-01, 0.5160305461093759E-01, 0.1240085876404429E+01, 0.1458880876708516E+01, 0.2703980549150243E+00, 0.2447209773632920E+00, 0.1320345126435623E+01, 0.1123980661024405E+01, 0.4835651195207321E-01, 0.4307304847484577E-01, 0.1001173813882118E+01, 0.9808080186012680E+00, 0.2270725319399537E-01, 0.4473761868138884E-01, 0.1932378820148765E+01, 0.2098800160969815E+01, 0.2111589595024383E+00, 0.1185117935689049E+00, 0.1177939936838754E+01, 0.1125434406653226E+01, 0.6600626338337756E-01, 0.8405284210411720E-01, 0.1433136124242214E+01, 0.1645740838479294E+01, 0.2966575563411978E+00, 0.3061331074057168E+00, 0.1698307513491068E+01, 0.1400701385713701E+01, 0.8526979628348903E-02, 0.7034066989504621E-02, 0.1155465101223645E+01, 0.1196005046863439E+01, 0.4757401262929915E-01, 0.1515955052150448E-01, 0.3811093058972801E+00, 0.3812525386379337E+00, 0.1530278326215801E-01, 0.6504555274179689E-02, 0.1620540635326265E+00, 0.1711226887768117E+00, 0.1557318051836492E-01, 0.8946350111698947E-02, 0.9830512682025924E-01, 0.8939990224728768E-01, 0.4112553872737890E-04, 0.3199152990069927E-04, 0.6954412597055305E-01, 0.6951213444065239E-01, 0.4479725446695418E-16, 0.8997910999570377E-34, 0.1396210563637444E-18, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 19, + ppOut: 0, + dminOut: 1.3962105636374430E-019, + desigOut: -1.5687885635568321E-018, + sigmaOut: 2.8181747106705537E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 21, + nDivOut: 442, + ttypeOut: -2, + dmin1Out: 6.9512134440652351E-002, + dmin2Out: 8.9358776708560295E-002, + dnOut: 1.3962105636374430E-019, + dn1Out: 6.9512134440652351E-002, + dn2Out: 8.9358776708560295E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2452790370781154E+01, 0.2452793225180968E+01, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1155205743586459E+01, 0.1155209171453138E+01, 0.4772219324121025E-05, 0.6398278760815103E-05, 0.1548828711339416E+01, 0.1608632505364561E+01, 0.5981019230390531E-01, 0.2672219415054498E-01, 0.7187101139352565E+00, 0.7570240220111620E+00, 0.6503610222645050E-01, 0.7057368234283014E-01, 0.8214817774485077E+00, 0.9438288517354918E+00, 0.1929207566298143E+00, 0.2908001941945216E+00, 0.1422685760546395E+01, 0.1181031209538913E+01, 0.4914564318703864E-01, 0.5160305461093759E-01, 0.1240085876404429E+01, 0.1458880876708516E+01, 0.2703980549150243E+00, 0.2447209773632920E+00, 0.1320345126435623E+01, 0.1123980661024405E+01, 0.4835651195207321E-01, 0.4307304847484577E-01, 0.1001173813882118E+01, 0.9808080186012680E+00, 0.2270725319399537E-01, 0.4473761868138884E-01, 0.1932378820148765E+01, 0.2098800160969815E+01, 0.2111589595024383E+00, 0.1185117935689049E+00, 0.1177939936838754E+01, 0.1125434406653226E+01, 0.6600626338337756E-01, 0.8405284210411720E-01, 0.1433136124242214E+01, 0.1645740838479294E+01, 0.2966575563411978E+00, 0.3061331074057168E+00, 0.1698307513491068E+01, 0.1400701385713701E+01, 0.8526979628348903E-02, 0.7034066989504621E-02, 0.1155465101223645E+01, 0.1196005046863439E+01, 0.4757401262929915E-01, 0.1515955052150448E-01, 0.3811093058972801E+00, 0.3812525386379337E+00, 0.1530278326215801E-01, 0.6504555274179689E-02, 0.1620540635326265E+00, 0.1711226887768117E+00, 0.1557318051836492E-01, 0.8946350111698947E-02, 0.9830512682025924E-01, 0.8939990224728768E-01, 0.4112553872737890E-04, 0.3199152990069927E-04, 0.6954412597055305E-01, 0.6951213444065239E-01, 0.4479725446695418E-16, 0.8997910999570377E-34, 0.1396210563637444E-18, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 1.3962105636374430E-019, + desig: -1.5687885635568321E-018, + qmax: 2.4715692224139039, + ttype: -2, + dmin1: 6.9512134440652351E-002, + dmin2: 8.9358776708560295E-002, + dn: 1.3962105636374430E-019, + dn1: 6.9512134440652351E-002, + dn2: 8.9358776708560295E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 21, + sigma: 2.8181747106705537E-002, + nDiv: 442, + zOut: []float64{0.2384705997428018E+01, 0.2452793225180968E+01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.1087126346389419E+01, 0.1155209171453138E+01, 0.9467601652019932E-05, 0.6398278760815103E-05, 0.1567256659807859E+01, 0.1608632505364561E+01, 0.1290748567965171E-01, 0.2672219415054498E-01, 0.7466016465687454E+00, 0.7570240220111620E+00, 0.8921689079377818E-01, 0.7057368234283014E-01, 0.1077323583030640E+01, 0.9438288517354918E+00, 0.3187938243378626E+00, 0.2908001941945216E+00, 0.8457518677063927E+00, 0.1181031209538913E+01, 0.8901276181133644E-01, 0.5160305461093759E-01, 0.1546500520154876E+01, 0.1458880876708516E+01, 0.1778606876095877E+00, 0.2447209773632920E+00, 0.9211044497840675E+00, 0.1123980661024405E+01, 0.4586493023634136E-01, 0.4307304847484577E-01, 0.9115921349407204E+00, 0.9808080186012680E+00, 0.1030014605117353E+00, 0.4473761868138884E-01, 0.2046221921921390E+01, 0.2098800160969815E+01, 0.6518220171905387E-01, 0.1185117935689049E+00, 0.1076216474932694E+01, 0.1125434406653226E+01, 0.1285328723941422E+00, 0.8405284210411720E-01, 0.1755252501385274E+01, 0.1645740838479294E+01, 0.2442959445536252E+00, 0.3061331074057168E+00, 0.1095350936043985E+01, 0.1400701385713701E+01, 0.7680442260639305E-02, 0.7034066989504621E-02, 0.1135395583018709E+01, 0.1196005046863439E+01, 0.5090399511302622E-02, 0.1515955052150448E-01, 0.3145781222952156E+00, 0.3812525386379337E+00, 0.3538316586334169E-02, 0.6504555274179689E-02, 0.1084421501965814E+00, 0.1711226887768117E+00, 0.7375387005938499E-02, 0.8946350111698947E-02, 0.1396793466565477E-01, 0.8939990224728768E-01, 0.1592074691534444E-03, 0.3199152990069927E-04, 0.1264354865903830E-02, 0.6951213444065239E-01, 0.6512368848977837E-06, 0.8997910999570377E-34, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 18, + ppOut: 1, + dminOut: 1.2643548659038301E-003, + desigOut: -5.0382355155104463E-018, + sigmaOut: 9.6270319212300656E-002, + qmaxOut: 2.4715692224139039, + nFailOut: 2, + iterOut: 22, + nDivOut: 461, + ttypeOut: -8, + dmin1Out: 1.3935943135754067E-002, + dmin2Out: 9.9495800084882416E-002, + dnOut: 1.2643548659038301E-003, + dn1Out: 1.3935943135754067E-002, + dn2Out: 9.9495800084882416E-002, + gOut: 0.0000000000000000, + tauOut: 6.8088572105595116E-002, + }, + { + i0: 1, + n0: 18, + z: []float64{0.2384705997428018E+01, 0.2452793225180968E+01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.1087126346389419E+01, 0.1155209171453138E+01, 0.9467601652019932E-05, 0.6398278760815103E-05, 0.1567256659807859E+01, 0.1608632505364561E+01, 0.1290748567965171E-01, 0.2672219415054498E-01, 0.7466016465687454E+00, 0.7570240220111620E+00, 0.8921689079377818E-01, 0.7057368234283014E-01, 0.1077323583030640E+01, 0.9438288517354918E+00, 0.3187938243378626E+00, 0.2908001941945216E+00, 0.8457518677063927E+00, 0.1181031209538913E+01, 0.8901276181133644E-01, 0.5160305461093759E-01, 0.1546500520154876E+01, 0.1458880876708516E+01, 0.1778606876095877E+00, 0.2447209773632920E+00, 0.9211044497840675E+00, 0.1123980661024405E+01, 0.4586493023634136E-01, 0.4307304847484577E-01, 0.9115921349407204E+00, 0.9808080186012680E+00, 0.1030014605117353E+00, 0.4473761868138884E-01, 0.2046221921921390E+01, 0.2098800160969815E+01, 0.6518220171905387E-01, 0.1185117935689049E+00, 0.1076216474932694E+01, 0.1125434406653226E+01, 0.1285328723941422E+00, 0.8405284210411720E-01, 0.1755252501385274E+01, 0.1645740838479294E+01, 0.2442959445536252E+00, 0.3061331074057168E+00, 0.1095350936043985E+01, 0.1400701385713701E+01, 0.7680442260639305E-02, 0.7034066989504621E-02, 0.1135395583018709E+01, 0.1196005046863439E+01, 0.5090399511302622E-02, 0.1515955052150448E-01, 0.3145781222952156E+00, 0.3812525386379337E+00, 0.3538316586334169E-02, 0.6504555274179689E-02, 0.1084421501965814E+00, 0.1711226887768117E+00, 0.7375387005938499E-02, 0.8946350111698947E-02, 0.1396793466565477E-01, 0.8939990224728768E-01, 0.1592074691534444E-03, 0.3199152990069927E-04, 0.1264354865903830E-02, 0.6951213444065239E-01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 1.2643548659038301E-003, + desig: -5.0382355155104463E-018, + qmax: 2.3847059974280183, + ttype: -8, + dmin1: 1.3935943135754067E-002, + dmin2: 9.9495800084882416E-002, + dn: 1.2643548659038301E-003, + dn1: 1.3935943135754067E-002, + dn2: 9.9495800084882416E-002, + g: 0.0000000000000000, + tau: 6.8088572105595116E-002, + nFail: 2, + iter: 22, + sigma: 9.6270319212300656E-002, + nDiv: 461, + zOut: []float64{0.2384705997428018E+01, 0.2383460331210544E+01, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.1087126346389419E+01, 0.1085889199499347E+01, 0.9467601652019932E-05, 0.1366452649899944E-04, 0.1567256659807859E+01, 0.1578904163506652E+01, 0.1290748567965171E-01, 0.6103442048115082E-02, 0.7466016465687454E+00, 0.8284687778600495E+00, 0.8921689079377818E-01, 0.1160157908485996E+00, 0.1077323583030640E+01, 0.1278855299065544E+01, 0.3187938243378626E+00, 0.2108295383723412E+00, 0.8457518677063927E+00, 0.7226887736910288E+00, 0.8901276181133644E-01, 0.1904807262171572E+00, 0.1546500520154876E+01, 0.1532634164092948E+01, 0.1778606876095877E+00, 0.1068932656188067E+00, 0.9211044497840675E+00, 0.8588297969472432E+00, 0.4586493023634136E-01, 0.4868264913684867E-01, 0.9115921349407204E+00, 0.9646646288612479E+00, 0.1030014605117353E+00, 0.2184840619043245E+00, 0.2046221921921390E+01, 0.1891673744281760E+01, 0.6518220171905387E-01, 0.3708364593761750E-01, 0.1076216474932694E+01, 0.1166419383934860E+01, 0.1285328723941422E+00, 0.1934189785315259E+00, 0.1755252501385274E+01, 0.1804883149953014E+01, 0.2442959445536252E+00, 0.1482587897978486E+00, 0.1095350936043985E+01, 0.9535262710524167E+00, 0.7680442260639305E-02, 0.9145359161143373E-02, 0.1135395583018709E+01, 0.1130094305914509E+01, 0.5090399511302622E-02, 0.1416986451145964E-02, 0.3145781222952156E+00, 0.3154531349760448E+00, 0.3538316586334169E-02, 0.1216353924418735E-02, 0.1084421501965814E+00, 0.1133548658237420E+00, 0.7375387005938499E-02, 0.9088178357782586E-03, 0.1396793466565477E-01, 0.1197200684467082E-01, 0.1592074691534444E-03, 0.1681378409852773E-04, 0.1264354865903830E-02, 0.1223627446170173E-05, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 18, + ppOut: 0, + dminOut: 1.2236274461701734E-006, + desigOut: -3.2526065174565133E-018, + sigmaOut: 9.7516636666659787E-002, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 23, + nDivOut: 480, + ttypeOut: -2, + dmin1Out: 1.1812799375517376E-002, + dmin2Out: 0.10597947881780349, + dnOut: 1.2236274461701734E-006, + dn1Out: 1.1812799375517376E-002, + dn2Out: 0.10597947881780349, + gOut: 0.0000000000000000, + tauOut: 1.2463174543591322E-003, + }, + { + i0: 1, + n0: 18, + z: []float64{0.2384705997428018E+01, 0.2383460331210544E+01, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.1087126346389419E+01, 0.1085889199499347E+01, 0.9467601652019932E-05, 0.1366452649899944E-04, 0.1567256659807859E+01, 0.1578904163506652E+01, 0.1290748567965171E-01, 0.6103442048115082E-02, 0.7466016465687454E+00, 0.8284687778600495E+00, 0.8921689079377818E-01, 0.1160157908485996E+00, 0.1077323583030640E+01, 0.1278855299065544E+01, 0.3187938243378626E+00, 0.2108295383723412E+00, 0.8457518677063927E+00, 0.7226887736910288E+00, 0.8901276181133644E-01, 0.1904807262171572E+00, 0.1546500520154876E+01, 0.1532634164092948E+01, 0.1778606876095877E+00, 0.1068932656188067E+00, 0.9211044497840675E+00, 0.8588297969472432E+00, 0.4586493023634136E-01, 0.4868264913684867E-01, 0.9115921349407204E+00, 0.9646646288612479E+00, 0.1030014605117353E+00, 0.2184840619043245E+00, 0.2046221921921390E+01, 0.1891673744281760E+01, 0.6518220171905387E-01, 0.3708364593761750E-01, 0.1076216474932694E+01, 0.1166419383934860E+01, 0.1285328723941422E+00, 0.1934189785315259E+00, 0.1755252501385274E+01, 0.1804883149953014E+01, 0.2442959445536252E+00, 0.1482587897978486E+00, 0.1095350936043985E+01, 0.9535262710524167E+00, 0.7680442260639305E-02, 0.9145359161143373E-02, 0.1135395583018709E+01, 0.1130094305914509E+01, 0.5090399511302622E-02, 0.1416986451145964E-02, 0.3145781222952156E+00, 0.3154531349760448E+00, 0.3538316586334169E-02, 0.1216353924418735E-02, 0.1084421501965814E+00, 0.1133548658237420E+00, 0.7375387005938499E-02, 0.9088178357782586E-03, 0.1396793466565477E-01, 0.1197200684467082E-01, 0.1592074691534444E-03, 0.1681378409852773E-04, 0.1264354865903830E-02, 0.1223627446170173E-05, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 1.2236274461701734E-006, + desig: -3.2526065174565133E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 1.1812799375517376E-002, + dmin2: 0.10597947881780349, + dn: 1.2236274461701734E-006, + dn1: 1.1812799375517376E-002, + dn2: 0.10597947881780349, + g: 0.0000000000000000, + tau: 1.2463174543591322E-003, + nFail: 2, + iter: 23, + sigma: 9.7516636666659787E-002, + nDiv: 480, + zOut: []float64{0.2383459406360114E+01, 0.2383460331210544E+01, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.1085901506809686E+01, 0.1085889199499347E+01, 0.1986826396898849E-04, 0.1366452649899944E-04, 0.1584986515403004E+01, 0.1578904163506652E+01, 0.3190255011763210E-02, 0.6103442048115082E-02, 0.9412930918090910E+00, 0.8284687778600495E+00, 0.1576208411525267E+00, 0.1160157908485996E+00, 0.1332062774397564E+01, 0.1278855299065544E+01, 0.1143821023097510E+00, 0.2108295383723412E+00, 0.7987861757106404E+00, 0.7226887736910288E+00, 0.3654761154847582E+00, 0.1904807262171572E+00, 0.1274050092339202E+01, 0.1532634164092948E+01, 0.7205613198290631E-01, 0.1068932656188067E+00, 0.8354550922133908E+00, 0.8588297969472432E+00, 0.5621179414582513E-01, 0.4868264913684867E-01, 0.1126935674731953E+01, 0.9646646288612479E+00, 0.3667472533840468E+00, 0.2184840619043245E+00, 0.1562008914947536E+01, 0.1891673744281760E+01, 0.2769195683500124E-01, 0.3708364593761750E-01, 0.1332145183743590E+01, 0.1166419383934860E+01, 0.2620575140703801E+00, 0.1934189785315259E+00, 0.1691083203792688E+01, 0.1804883149953014E+01, 0.8359650824372877E-01, 0.1482587897978486E+00, 0.8790739000820365E+00, 0.9535262710524167E+00, 0.1175682535061811E-01, 0.9145359161143373E-02, 0.1119753245127243E+01, 0.1130094305914509E+01, 0.3991886785572840E-03, 0.1416986451145964E-02, 0.3162690783341116E+00, 0.3154531349760448E+00, 0.4359567385560517E-03, 0.1216353924418735E-02, 0.1138265050331695E+00, 0.1133548658237420E+00, 0.9558734450579545E-04, 0.9088178357782586E-03, 0.1189201139646886E-01, 0.1197200684467082E-01, 0.1730052806966466E-08, 0.1681378409852773E-04, 0.9598672791582074E-11, 0.1223627446170173E-05, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 18, + ppOut: 1, + dminOut: 9.5986727915820745E-012, + desigOut: 6.4755668817591261E-018, + sigmaOut: 9.7517858554454467E-002, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 24, + nDivOut: 499, + ttypeOut: -2, + dmin1Out: 1.1875197612370336E-002, + dmin2Out: 0.11291768719739126, + dnOut: 9.5986727915820745E-012, + dn1Out: 1.1875197612370336E-002, + dn2Out: 0.11291768719739126, + gOut: 0.0000000000000000, + tauOut: 1.2218877946904154E-006, + }, + { + i0: 1, + n0: 18, + z: []float64{0.2383459406360114E+01, 0.2383460331210544E+01, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.1085901506809686E+01, 0.1085889199499347E+01, 0.1986826396898849E-04, 0.1366452649899944E-04, 0.1584986515403004E+01, 0.1578904163506652E+01, 0.3190255011763210E-02, 0.6103442048115082E-02, 0.9412930918090910E+00, 0.8284687778600495E+00, 0.1576208411525267E+00, 0.1160157908485996E+00, 0.1332062774397564E+01, 0.1278855299065544E+01, 0.1143821023097510E+00, 0.2108295383723412E+00, 0.7987861757106404E+00, 0.7226887736910288E+00, 0.3654761154847582E+00, 0.1904807262171572E+00, 0.1274050092339202E+01, 0.1532634164092948E+01, 0.7205613198290631E-01, 0.1068932656188067E+00, 0.8354550922133908E+00, 0.8588297969472432E+00, 0.5621179414582513E-01, 0.4868264913684867E-01, 0.1126935674731953E+01, 0.9646646288612479E+00, 0.3667472533840468E+00, 0.2184840619043245E+00, 0.1562008914947536E+01, 0.1891673744281760E+01, 0.2769195683500124E-01, 0.3708364593761750E-01, 0.1332145183743590E+01, 0.1166419383934860E+01, 0.2620575140703801E+00, 0.1934189785315259E+00, 0.1691083203792688E+01, 0.1804883149953014E+01, 0.8359650824372877E-01, 0.1482587897978486E+00, 0.8790739000820365E+00, 0.9535262710524167E+00, 0.1175682535061811E-01, 0.9145359161143373E-02, 0.1119753245127243E+01, 0.1130094305914509E+01, 0.3991886785572840E-03, 0.1416986451145964E-02, 0.3162690783341116E+00, 0.3154531349760448E+00, 0.4359567385560517E-03, 0.1216353924418735E-02, 0.1138265050331695E+00, 0.1133548658237420E+00, 0.9558734450579545E-04, 0.9088178357782586E-03, 0.1189201139646886E-01, 0.1197200684467082E-01, 0.1730052806966466E-08, 0.1681378409852773E-04, 0.9598672791582074E-11, 0.1223627446170173E-05, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 9.5986727915820745E-012, + desig: 6.4755668817591261E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 1.1875197612370336E-002, + dmin2: 0.11291768719739126, + dn: 9.5986727915820745E-012, + dn1: 1.1875197612370336E-002, + dn2: 0.11291768719739126, + g: 0.0000000000000000, + tau: 1.2218877946904154E-006, + nFail: 2, + iter: 24, + sigma: 9.7517858554454467E-002, + nDiv: 499, + zOut: []float64{0.2383459406360114E+01, 0.2383459541678881E+01, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.1085901506809686E+01, 0.1085921313408604E+01, 0.1986826396898849E-04, 0.2899927470478232E-04, 0.1584986515403004E+01, 0.1588147771130463E+01, 0.3190255011763210E-02, 0.1890859942802736E-02, 0.9412930918090910E+00, 0.1097023073009216E+01, 0.1576208411525267E+00, 0.1913914667196325E+00, 0.1332062774397564E+01, 0.1255053409978084E+01, 0.1143821023097510E+00, 0.7279916643176543E-01, 0.7987861757106404E+00, 0.1091463124754034E+01, 0.3654761154847582E+00, 0.4266153094141972E+00, 0.1274050092339202E+01, 0.9194909148983121E+00, 0.7205613198290631E-01, 0.6547064404326042E-01, 0.8354550922133908E+00, 0.8261962423063568E+00, 0.5621179414582513E-01, 0.7667315937770838E-01, 0.1126935674731953E+01, 0.1417009768728692E+01, 0.3667472533840468E+00, 0.4042756034295816E+00, 0.1562008914947536E+01, 0.1185425268343357E+01, 0.2769195683500124E-01, 0.3111938635974581E-01, 0.1332145183743590E+01, 0.1563083311444625E+01, 0.2620575140703801E+00, 0.2835172362390010E+00, 0.1691083203792688E+01, 0.1491162475787817E+01, 0.8359650824372877E-01, 0.4928202642453804E-01, 0.8790739000820365E+00, 0.8415486989985177E+00, 0.1175682535061811E-01, 0.1564347179719430E-01, 0.1119753245127243E+01, 0.1104508961999007E+01, 0.3991886785572840E-03, 0.1143051254380294E-03, 0.3162690783341116E+00, 0.3165907299376309E+00, 0.4359567385560517E-03, 0.1567431614478116E-03, 0.1138265050331695E+00, 0.1137653492066288E+00, 0.9558734450579545E-04, 0.9991845479738400E-05, 0.1189201139646886E-01, 0.1188202127144326E-01, 0.1730052806966466E-08, 0.1397591405272086E-17, 0.9598672791582074E-11, 0.6617412588681544E-21, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 18, + ppOut: 0, + dminOut: 6.6174125886815435E-022, + desigOut: -5.0906815225379586E-018, + sigmaOut: 9.7517858564053150E-002, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 25, + nDivOut: 518, + ttypeOut: -2, + dmin1Out: 1.1882019541390456E-002, + dmin2Out: 0.11366976186212303, + dnOut: 6.6174125886815435E-022, + dn1Out: 1.1882019541390456E-002, + dn2Out: 0.11366976186212303, + gOut: 0.0000000000000000, + tauOut: 9.5986713933289272E-012, + }, + { + i0: 1, + n0: 18, + z: []float64{0.2383459406360114E+01, 0.2383459541678881E+01, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.1085901506809686E+01, 0.1085921313408604E+01, 0.1986826396898849E-04, 0.2899927470478232E-04, 0.1584986515403004E+01, 0.1588147771130463E+01, 0.3190255011763210E-02, 0.1890859942802736E-02, 0.9412930918090910E+00, 0.1097023073009216E+01, 0.1576208411525267E+00, 0.1913914667196325E+00, 0.1332062774397564E+01, 0.1255053409978084E+01, 0.1143821023097510E+00, 0.7279916643176543E-01, 0.7987861757106404E+00, 0.1091463124754034E+01, 0.3654761154847582E+00, 0.4266153094141972E+00, 0.1274050092339202E+01, 0.9194909148983121E+00, 0.7205613198290631E-01, 0.6547064404326042E-01, 0.8354550922133908E+00, 0.8261962423063568E+00, 0.5621179414582513E-01, 0.7667315937770838E-01, 0.1126935674731953E+01, 0.1417009768728692E+01, 0.3667472533840468E+00, 0.4042756034295816E+00, 0.1562008914947536E+01, 0.1185425268343357E+01, 0.2769195683500124E-01, 0.3111938635974581E-01, 0.1332145183743590E+01, 0.1563083311444625E+01, 0.2620575140703801E+00, 0.2835172362390010E+00, 0.1691083203792688E+01, 0.1491162475787817E+01, 0.8359650824372877E-01, 0.4928202642453804E-01, 0.8790739000820365E+00, 0.8415486989985177E+00, 0.1175682535061811E-01, 0.1564347179719430E-01, 0.1119753245127243E+01, 0.1104508961999007E+01, 0.3991886785572840E-03, 0.1143051254380294E-03, 0.3162690783341116E+00, 0.3165907299376309E+00, 0.4359567385560517E-03, 0.1567431614478116E-03, 0.1138265050331695E+00, 0.1137653492066288E+00, 0.9558734450579545E-04, 0.9991845479738400E-05, 0.1189201139646886E-01, 0.1188202127144326E-01, 0.1730052806966466E-08, 0.1397591405272086E-17, 0.9598672791582074E-11, 0.6617412588681544E-21, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 6.6174125886815435E-022, + desig: -5.0906815225379586E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 1.1882019541390456E-002, + dmin2: 0.11366976186212303, + dn: 6.6174125886815435E-022, + dn1: 1.1882019541390456E-002, + dn2: 0.11366976186212303, + g: 0.0000000000000000, + tau: 9.5986713933289272E-012, + nFail: 2, + iter: 25, + sigma: 9.7517858564053150E-002, + nDiv: 518, + zOut: []float64{0.2383459603334333E+01, 0.2383459541678881E+01, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.1085950284592642E+01, 0.1085921313408604E+01, 0.4240998334843304E-04, 0.2899927470478232E-04, 0.1589996221089918E+01, 0.1588147771130463E+01, 0.1304604978030436E-02, 0.1890859942802736E-02, 0.1287109934750819E+01, 0.1097023073009216E+01, 0.1866247058326724E+00, 0.1913914667196325E+00, 0.1141227870577177E+01, 0.1255053409978084E+01, 0.6962466280543776E-01, 0.7279916643176543E-01, 0.1448453771362794E+01, 0.1091463124754034E+01, 0.2708190685256155E+00, 0.4266153094141972E+00, 0.7141424904159570E+00, 0.9194909148983121E+00, 0.7574342769943966E-01, 0.6547064404326042E-01, 0.8271259739846255E+00, 0.8261962423063568E+00, 0.1313543755784947E+00, 0.7667315937770838E-01, 0.1689930996579779E+01, 0.1417009768728692E+01, 0.2835846650840220E+00, 0.4042756034295816E+00, 0.9329599896190804E+00, 0.1185425268343357E+01, 0.5213749144931325E-01, 0.3111938635974581E-01, 0.1794463056234313E+01, 0.1563083311444625E+01, 0.2355970842920850E+00, 0.2835172362390010E+00, 0.1304847417920270E+01, 0.1491162475787817E+01, 0.3178396542921673E-01, 0.4928202642453804E-01, 0.8254082053664953E+00, 0.8415486989985177E+00, 0.2093310277804656E-01, 0.1564347179719430E-01, 0.1083690164346398E+01, 0.1104508961999007E+01, 0.3339325601415243E-04, 0.1143051254380294E-03, 0.3167140798430647E+00, 0.3165907299376309E+00, 0.5630296103885627E-04, 0.1567431614478116E-03, 0.1137190380910697E+00, 0.1137653492066288E+00, 0.1044005669799533E-05, 0.9991845479738400E-05, 0.1188097726577346E-01, 0.1188202127144326E-01, 0.7784240935906335E-37, 0.1397591405272086E-17, 0.6617412588681543E-21, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 18, + ppOut: 1, + dminOut: 6.6174125886815426E-022, + desigOut: -5.0906815225379586E-018, + sigmaOut: 9.7517858564053150E-002, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 26, + nDivOut: 537, + ttypeOut: -2, + dmin1Out: 1.1880977265773463E-002, + dmin2Out: 0.11370904624558997, + dnOut: 6.6174125886815426E-022, + dn1Out: 1.1880977265773463E-002, + dn2Out: 0.11370904624558997, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 18, + z: []float64{0.2383459603334333E+01, 0.2383459541678881E+01, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.1085950284592642E+01, 0.1085921313408604E+01, 0.4240998334843304E-04, 0.2899927470478232E-04, 0.1589996221089918E+01, 0.1588147771130463E+01, 0.1304604978030436E-02, 0.1890859942802736E-02, 0.1287109934750819E+01, 0.1097023073009216E+01, 0.1866247058326724E+00, 0.1913914667196325E+00, 0.1141227870577177E+01, 0.1255053409978084E+01, 0.6962466280543776E-01, 0.7279916643176543E-01, 0.1448453771362794E+01, 0.1091463124754034E+01, 0.2708190685256155E+00, 0.4266153094141972E+00, 0.7141424904159570E+00, 0.9194909148983121E+00, 0.7574342769943966E-01, 0.6547064404326042E-01, 0.8271259739846255E+00, 0.8261962423063568E+00, 0.1313543755784947E+00, 0.7667315937770838E-01, 0.1689930996579779E+01, 0.1417009768728692E+01, 0.2835846650840220E+00, 0.4042756034295816E+00, 0.9329599896190804E+00, 0.1185425268343357E+01, 0.5213749144931325E-01, 0.3111938635974581E-01, 0.1794463056234313E+01, 0.1563083311444625E+01, 0.2355970842920850E+00, 0.2835172362390010E+00, 0.1304847417920270E+01, 0.1491162475787817E+01, 0.3178396542921673E-01, 0.4928202642453804E-01, 0.8254082053664953E+00, 0.8415486989985177E+00, 0.2093310277804656E-01, 0.1564347179719430E-01, 0.1083690164346398E+01, 0.1104508961999007E+01, 0.3339325601415243E-04, 0.1143051254380294E-03, 0.3167140798430647E+00, 0.3165907299376309E+00, 0.5630296103885627E-04, 0.1567431614478116E-03, 0.1137190380910697E+00, 0.1137653492066288E+00, 0.1044005669799533E-05, 0.9991845479738400E-05, 0.1188097726577346E-01, 0.1188202127144326E-01, 0.7784240935906335E-37, 0.1397591405272086E-17, 0.6617412588681543E-21, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 6.6174125886815426E-022, + desig: -5.0906815225379586E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 1.1880977265773463E-002, + dmin2: 0.11370904624558997, + dn: 6.6174125886815426E-022, + dn1: 1.1880977265773463E-002, + dn2: 0.11370904624558997, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 26, + sigma: 9.7517858564053150E-002, + nDiv: 537, + zOut: []float64{0.2383459603334333E+01, 0.2371578799269292E+01, 0.2809066689524106E-07, 0.1286276792433928E-07, 0.1085950284592642E+01, 0.1074111849557515E+01, 0.4240998334843304E-04, 0.6277904232066118E-04, 0.1589996221089918E+01, 0.1579357214869920E+01, 0.1304604978030436E-02, 0.1063198377376995E-02, 0.1287109934750819E+01, 0.1460790610050406E+01, 0.1866247058326724E+00, 0.1457986614708343E+00, 0.1141227870577177E+01, 0.1053173039756072E+01, 0.6962466280543776E-01, 0.9575644420574685E-01, 0.1448453771362794E+01, 0.1611635563526955E+01, 0.2708190685256155E+00, 0.1200044280642223E+00, 0.7141424904159570E+00, 0.6580006578954666E+00, 0.7574342769943966E-01, 0.9521169265880262E-01, 0.8271259739846255E+00, 0.8513878247486099E+00, 0.1313543755784947E+00, 0.2607270439790754E+00, 0.1689930996579779E+01, 0.1700907785529018E+01, 0.2835846650840220E+00, 0.1555482010511415E+00, 0.9329599896190804E+00, 0.8176684478615445E+00, 0.5213749144931325E-01, 0.1144214412274440E+00, 0.1794463056234313E+01, 0.1903757867143247E+01, 0.2355970842920850E+00, 0.1614796988702029E+00, 0.1304847417920270E+01, 0.1163270852323576E+01, 0.3178396542921673E-01, 0.2255256874351997E-01, 0.8254082053664953E+00, 0.8119079072453143E+00, 0.2093310277804656E-01, 0.2794035799797570E-01, 0.1083690164346398E+01, 0.1043902367448729E+01, 0.3339325601415243E-04, 0.1013132519024162E-04, 0.3167140798430647E+00, 0.3048794193232055E+00, 0.5630296103885627E-04, 0.2100082250625822E-04, 0.1137190380910697E+00, 0.1018182491185255E+00, 0.1044005669799533E-05, 0.1218230301111122E-06, 0.1188097726577346E-01, 0.2328703557243073E-07, 0.7784240935906335E-37, 0.1286276792433928E-07, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 17, + ppOut: 0, + dminOut: 2.3287035572430725E-008, + desigOut: 1.7347234759768071E-018, + sigmaOut: 0.10939869071976092, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 27, + nDivOut: 555, + ttypeOut: -7, + dmin1Out: 0.10181720511285566, + dmin2Out: 0.30482311636216664, + dnOut: 2.3287035572430725E-008, + dn1Out: 0.10181720511285566, + dn2Out: 0.30482311636216664, + gOut: 0.0000000000000000, + tauOut: 1.1880832155707781E-002, + }, + { + i0: 1, + n0: 17, + z: []float64{0.2383459603334333E+01, 0.2371578799269292E+01, 0.2809066689524106E-07, 0.1286276792433928E-07, 0.1085950284592642E+01, 0.1074111849557515E+01, 0.4240998334843304E-04, 0.6277904232066118E-04, 0.1589996221089918E+01, 0.1579357214869920E+01, 0.1304604978030436E-02, 0.1063198377376995E-02, 0.1287109934750819E+01, 0.1460790610050406E+01, 0.1866247058326724E+00, 0.1457986614708343E+00, 0.1141227870577177E+01, 0.1053173039756072E+01, 0.6962466280543776E-01, 0.9575644420574685E-01, 0.1448453771362794E+01, 0.1611635563526955E+01, 0.2708190685256155E+00, 0.1200044280642223E+00, 0.7141424904159570E+00, 0.6580006578954666E+00, 0.7574342769943966E-01, 0.9521169265880262E-01, 0.8271259739846255E+00, 0.8513878247486099E+00, 0.1313543755784947E+00, 0.2607270439790754E+00, 0.1689930996579779E+01, 0.1700907785529018E+01, 0.2835846650840220E+00, 0.1555482010511415E+00, 0.9329599896190804E+00, 0.8176684478615445E+00, 0.5213749144931325E-01, 0.1144214412274440E+00, 0.1794463056234313E+01, 0.1903757867143247E+01, 0.2355970842920850E+00, 0.1614796988702029E+00, 0.1304847417920270E+01, 0.1163270852323576E+01, 0.3178396542921673E-01, 0.2255256874351997E-01, 0.8254082053664953E+00, 0.8119079072453143E+00, 0.2093310277804656E-01, 0.2794035799797570E-01, 0.1083690164346398E+01, 0.1043902367448729E+01, 0.3339325601415243E-04, 0.1013132519024162E-04, 0.3167140798430647E+00, 0.3048794193232055E+00, 0.5630296103885627E-04, 0.2100082250625822E-04, 0.1137190380910697E+00, 0.1018182491185255E+00, 0.1044005669799533E-05, 0.1218230301111122E-06, 0.1188097726577346E-01, 0.2328703557243073E-07, 0.7784240935906335E-37, 0.1286276792433928E-07, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 2.3287035572430725E-008, + desig: 1.7347234759768071E-018, + qmax: 2.3847059974280183, + ttype: -7, + dmin1: 0.10181720511285566, + dmin2: 0.30482311636216664, + dn: 2.3287035572430725E-008, + dn1: 0.10181720511285566, + dn2: 0.30482311636216664, + g: 0.0000000000000000, + tau: 1.1880832155707781E-002, + nFail: 2, + iter: 27, + sigma: 0.10939869071976092, + nDiv: 555, + zOut: []float64{0.2371578788845052E+01, 0.2371578799269292E+01, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.1074174599487151E+01, 0.1074111849557515E+01, 0.9230392664199863E-04, 0.6277904232066118E-04, 0.1580328086033647E+01, 0.1579357214869920E+01, 0.9827770701659698E-03, 0.1063198377376995E-02, 0.1605606471164067E+01, 0.1460790610050406E+01, 0.9563440497488795E-01, 0.1457986614708343E+00, 0.1053295055699924E+01, 0.1053173039756072E+01, 0.1465159169633776E+00, 0.9575644420574685E-01, 0.1585124051340792E+01, 0.1611635563526955E+01, 0.4981502397231050E-01, 0.1200044280642223E+00, 0.7033973032949510E+00, 0.6580006578954666E+00, 0.1152436546510613E+00, 0.9521169265880262E-01, 0.9968711907896164E+00, 0.8513878247486099E+00, 0.4448645553200346E+00, 0.2607270439790754E+00, 0.1411591407973117E+01, 0.1700907785529018E+01, 0.9010174998427344E-01, 0.1555482010511415E+00, 0.8419881158177074E+00, 0.8176684478615445E+00, 0.2587099684834221E+00, 0.1144214412274440E+00, 0.1806527574243020E+01, 0.1903757867143247E+01, 0.1039810460775319E+00, 0.1614796988702029E+00, 0.1081842351702556E+01, 0.1163270852323576E+01, 0.1692539477932339E-01, 0.2255256874351997E-01, 0.8229228471769590E+00, 0.8119079072453143E+00, 0.3544318396494814E-01, 0.2794035799797570E-01, 0.1008469291521964E+01, 0.1043902367448729E+01, 0.3062892015595061E-05, 0.1013132519024162E-04, 0.3048973339666884E+00, 0.3048794193232055E+00, 0.7013072071892081E-05, 0.2100082250625822E-04, 0.1018113345824760E+00, 0.1018182491185255E+00, 0.2786425742647189E-13, 0.1218230301111122E-06, 0.2696165428114542E-17, 0.2328703557243073E-07, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 17, + ppOut: 1, + dminOut: 2.6961654281145418E-018, + desigOut: -3.8251180717391650E-018, + sigmaOut: 0.10939871400676864, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 28, + nDivOut: 573, + ttypeOut: -2, + dmin1Out: 0.10181121275944585, + dmin2Out: 0.30487633314418217, + dnOut: 2.6961654281145418E-018, + dn1Out: 0.10181121275944585, + dn2Out: 0.30487633314418217, + gOut: 0.0000000000000000, + tauOut: 2.3287007705477136E-008, + }, + { + i0: 1, + n0: 17, + z: []float64{0.2371578788845052E+01, 0.2371578799269292E+01, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.1074174599487151E+01, 0.1074111849557515E+01, 0.9230392664199863E-04, 0.6277904232066118E-04, 0.1580328086033647E+01, 0.1579357214869920E+01, 0.9827770701659698E-03, 0.1063198377376995E-02, 0.1605606471164067E+01, 0.1460790610050406E+01, 0.9563440497488795E-01, 0.1457986614708343E+00, 0.1053295055699924E+01, 0.1053173039756072E+01, 0.1465159169633776E+00, 0.9575644420574685E-01, 0.1585124051340792E+01, 0.1611635563526955E+01, 0.4981502397231050E-01, 0.1200044280642223E+00, 0.7033973032949510E+00, 0.6580006578954666E+00, 0.1152436546510613E+00, 0.9521169265880262E-01, 0.9968711907896164E+00, 0.8513878247486099E+00, 0.4448645553200346E+00, 0.2607270439790754E+00, 0.1411591407973117E+01, 0.1700907785529018E+01, 0.9010174998427344E-01, 0.1555482010511415E+00, 0.8419881158177074E+00, 0.8176684478615445E+00, 0.2587099684834221E+00, 0.1144214412274440E+00, 0.1806527574243020E+01, 0.1903757867143247E+01, 0.1039810460775319E+00, 0.1614796988702029E+00, 0.1081842351702556E+01, 0.1163270852323576E+01, 0.1692539477932339E-01, 0.2255256874351997E-01, 0.8229228471769590E+00, 0.8119079072453143E+00, 0.3544318396494814E-01, 0.2794035799797570E-01, 0.1008469291521964E+01, 0.1043902367448729E+01, 0.3062892015595061E-05, 0.1013132519024162E-04, 0.3048973339666884E+00, 0.3048794193232055E+00, 0.7013072071892081E-05, 0.2100082250625822E-04, 0.1018113345824760E+00, 0.1018182491185255E+00, 0.2786425742647189E-13, 0.1218230301111122E-06, 0.2696165428114542E-17, 0.2328703557243073E-07, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 2.6961654281145418E-018, + desig: -3.8251180717391650E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 0.10181121275944585, + dmin2: 0.30487633314418217, + dn: 2.6961654281145418E-018, + dn1: 0.10181121275944585, + dn2: 0.30487633314418217, + g: 0.0000000000000000, + tau: 2.3287007705477136E-008, + nFail: 2, + iter: 28, + sigma: 0.10939871400676864, + nDiv: 573, + zOut: []float64{0.2371578788845052E+01, 0.2371578794670729E+01, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.1074174599487151E+01, 0.1074266900775131E+01, 0.9230392664199863E-04, 0.1357860766428602E-03, 0.1580328086033647E+01, 0.1581175077027170E+01, 0.9827770701659698E-03, 0.9979623676695663E-03, 0.1605606471164067E+01, 0.1700242913771285E+01, 0.9563440497488795E-01, 0.5924520849284005E-01, 0.1053295055699924E+01, 0.1140565764170461E+01, 0.1465159169633776E+00, 0.2036234219705987E+00, 0.1585124051340792E+01, 0.1431315653342504E+01, 0.4981502397231050E-01, 0.2448080089382756E-01, 0.7033973032949510E+00, 0.7941601570521848E+00, 0.1152436546510613E+00, 0.1446598374682775E+00, 0.9968711907896164E+00, 0.1297075908641373E+01, 0.4448645553200346E+00, 0.4841405038964208E+00, 0.1411591407973117E+01, 0.1017552654060970E+01, 0.9010174998427344E-01, 0.7455594793877945E-01, 0.8419881158177074E+00, 0.1026142136362350E+01, 0.2587099684834221E+00, 0.4554599945126984E+00, 0.1806527574243020E+01, 0.1455048625807853E+01, 0.1039810460775319E+00, 0.7731088667813635E-01, 0.1081842351702556E+01, 0.1021456859803743E+01, 0.1692539477932339E-01, 0.1363571444815687E-01, 0.8229228471769590E+00, 0.8447303166937503E+00, 0.3544318396494814E-01, 0.4231334180394086E-01, 0.1008469291521964E+01, 0.9661590126100381E+00, 0.3062892015595061E-05, 0.9665775484099522E-06, 0.3048973339666884E+00, 0.3049033804612119E+00, 0.7013072071892081E-05, 0.2341758973227438E-05, 0.1018113345824760E+00, 0.1018089928235306E+00, 0.2786425742647189E-13, 0.7379175991216932E-30, 0.2696165428114542E-17, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 17, + ppOut: 0, + dminOut: 2.6961654281138038E-018, + desigOut: -3.8251180717391650E-018, + sigmaOut: 0.10939871400676864, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 29, + nDivOut: 591, + ttypeOut: -2, + dmin1Out: 0.10180899282350273, + dmin2Out: 0.30489636738914000, + dnOut: 2.6961654281138038E-018, + dn1Out: 0.10180899282350273, + dn2Out: 0.30489636738914000, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 17, + z: []float64{0.2371578788845052E+01, 0.2371578794670729E+01, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.1074174599487151E+01, 0.1074266900775131E+01, 0.9230392664199863E-04, 0.1357860766428602E-03, 0.1580328086033647E+01, 0.1581175077027170E+01, 0.9827770701659698E-03, 0.9979623676695663E-03, 0.1605606471164067E+01, 0.1700242913771285E+01, 0.9563440497488795E-01, 0.5924520849284005E-01, 0.1053295055699924E+01, 0.1140565764170461E+01, 0.1465159169633776E+00, 0.2036234219705987E+00, 0.1585124051340792E+01, 0.1431315653342504E+01, 0.4981502397231050E-01, 0.2448080089382756E-01, 0.7033973032949510E+00, 0.7941601570521848E+00, 0.1152436546510613E+00, 0.1446598374682775E+00, 0.9968711907896164E+00, 0.1297075908641373E+01, 0.4448645553200346E+00, 0.4841405038964208E+00, 0.1411591407973117E+01, 0.1017552654060970E+01, 0.9010174998427344E-01, 0.7455594793877945E-01, 0.8419881158177074E+00, 0.1026142136362350E+01, 0.2587099684834221E+00, 0.4554599945126984E+00, 0.1806527574243020E+01, 0.1455048625807853E+01, 0.1039810460775319E+00, 0.7731088667813635E-01, 0.1081842351702556E+01, 0.1021456859803743E+01, 0.1692539477932339E-01, 0.1363571444815687E-01, 0.8229228471769590E+00, 0.8447303166937503E+00, 0.3544318396494814E-01, 0.4231334180394086E-01, 0.1008469291521964E+01, 0.9661590126100381E+00, 0.3062892015595061E-05, 0.9665775484099522E-06, 0.3048973339666884E+00, 0.3049033804612119E+00, 0.7013072071892081E-05, 0.2341758973227438E-05, 0.1018113345824760E+00, 0.1018089928235306E+00, 0.2786425742647189E-13, 0.7379175991216932E-30, 0.2696165428114542E-17, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 2.6961654281138038E-018, + desig: -3.8251180717391650E-018, + qmax: 2.3847059974280183, + ttype: -2, + dmin1: 0.10180899282350273, + dmin2: 0.30489636738914000, + dn: 2.6961654281138038E-018, + dn1: 0.10180899282350273, + dn2: 0.30489636738914000, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 29, + sigma: 0.10939871400676864, + nDiv: 591, + zOut: []float64{0.2269772292606755E+01, 0.2371578794670729E+01, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.9725961809002787E+00, 0.1074266900775131E+01, 0.2207509801202943E-03, 0.1357860766428602E-03, 0.1480145783712083E+01, 0.1581175077027170E+01, 0.1146359002276934E-02, 0.9979623676695663E-03, 0.1656535258559212E+01, 0.1700242913771285E+01, 0.4079180092843103E-01, 0.5924520849284005E-01, 0.1201590880509993E+01, 0.1140565764170461E+01, 0.2425529321011353E+00, 0.2036234219705987E+00, 0.1111437017432560E+01, 0.1431315653342504E+01, 0.1749237822536809E-01, 0.2448080089382756E-01, 0.8195211115924584E+00, 0.7941601570521848E+00, 0.2289566278084960E+00, 0.1446598374682775E+00, 0.1450453280026662E+01, 0.1297075908641373E+01, 0.3396444831847066E+00, 0.4841405038964208E+00, 0.6506576141124067E+00, 0.1017552654060970E+01, 0.1175810411452473E+00, 0.7455594793877945E-01, 0.1262214585027166E+01, 0.1026142136362350E+01, 0.5250426092262996E+00, 0.4554599945126984E+00, 0.9055103985570538E+00, 0.1455048625807853E+01, 0.8721019179982008E-01, 0.7731088667813635E-01, 0.8460758777494440E+00, 0.1021456859803743E+01, 0.1361402882064932E-01, 0.1363571444815687E-01, 0.7716231249744060E+00, 0.8447303166937503E+00, 0.5298106707064092E-01, 0.4231334180394086E-01, 0.8113724074143097E+00, 0.9661590126100381E+00, 0.3632274887524200E-06, 0.9665775484099522E-06, 0.2030988542900605E+00, 0.3049033804612119E+00, 0.1173872316183806E-05, 0.2341758973227438E-05, 0.1314248578535016E-05, 0.1018089928235306E+00, 0.1248859578385863E-08, 0.7379175991216932E-30, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 16, + ppOut: 1, + dminOut: 1.3142485785350155E-006, + desigOut: 0.0000000000000000, + sigmaOut: 0.21120521870940451, + qmaxOut: 2.3847059974280183, + nFailOut: 2, + iterOut: 30, + nDivOut: 608, + ttypeOut: -7, + dmin1Out: 0.20309651253108729, + dmin2Out: 0.57610166617362735, + dnOut: 1.3142485785350155E-006, + dn1Out: 0.20309651253108729, + dn2Out: 0.81137144083676127, + gOut: 0.0000000000000000, + tauOut: 0.10180650470263587, + }, + { + i0: 1, + n0: 16, + z: []float64{0.2269772292606755E+01, 0.2371578794670729E+01, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.9725961809002787E+00, 0.1074266900775131E+01, 0.2207509801202943E-03, 0.1357860766428602E-03, 0.1480145783712083E+01, 0.1581175077027170E+01, 0.1146359002276934E-02, 0.9979623676695663E-03, 0.1656535258559212E+01, 0.1700242913771285E+01, 0.4079180092843103E-01, 0.5924520849284005E-01, 0.1201590880509993E+01, 0.1140565764170461E+01, 0.2425529321011353E+00, 0.2036234219705987E+00, 0.1111437017432560E+01, 0.1431315653342504E+01, 0.1749237822536809E-01, 0.2448080089382756E-01, 0.8195211115924584E+00, 0.7941601570521848E+00, 0.2289566278084960E+00, 0.1446598374682775E+00, 0.1450453280026662E+01, 0.1297075908641373E+01, 0.3396444831847066E+00, 0.4841405038964208E+00, 0.6506576141124067E+00, 0.1017552654060970E+01, 0.1175810411452473E+00, 0.7455594793877945E-01, 0.1262214585027166E+01, 0.1026142136362350E+01, 0.5250426092262996E+00, 0.4554599945126984E+00, 0.9055103985570538E+00, 0.1455048625807853E+01, 0.8721019179982008E-01, 0.7731088667813635E-01, 0.8460758777494440E+00, 0.1021456859803743E+01, 0.1361402882064932E-01, 0.1363571444815687E-01, 0.7716231249744060E+00, 0.8447303166937503E+00, 0.5298106707064092E-01, 0.4231334180394086E-01, 0.8113724074143097E+00, 0.9661590126100381E+00, 0.3632274887524200E-06, 0.9665775484099522E-06, 0.2030988542900605E+00, 0.3049033804612119E+00, 0.1173872316183806E-05, 0.2341758973227438E-05, 0.1314248578535016E-05, 0.1018089928235306E+00, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 1.3142485785350155E-006, + desig: 0.0000000000000000, + qmax: 2.2697722926067549, + ttype: -7, + dmin1: 0.20309651253108729, + dmin2: 0.57610166617362735, + dn: 1.3142485785350155E-006, + dn1: 0.20309651253108729, + dn2: 0.81137144083676127, + g: 0.0000000000000000, + tau: 0.10180650470263587, + nFail: 2, + iter: 30, + sigma: 0.21120521870940451, + nDiv: 608, + zOut: []float64{0.2269772292606755E+01, 0.2269770979614632E+01, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.9725961809002787E+00, 0.9728156171042807E+00, 0.2207509801202943E-03, 0.3358741643642203E-03, 0.1480145783712083E+01, 0.1480954954309013E+01, 0.1146359002276934E-02, 0.1282269997958535E-02, 0.1656535258559212E+01, 0.1696043475248702E+01, 0.4079180092843103E-01, 0.2889964597634762E-01, 0.1201590880509993E+01, 0.1415242852393798E+01, 0.2425529321011353E+00, 0.1904848393814713E+00, 0.1111437017432560E+01, 0.9384432420354740E+00, 0.1749237822536809E-01, 0.1527569554079381E-01, 0.8195211115924584E+00, 0.1033200729619178E+01, 0.2289566278084960E+00, 0.3214195289148511E+00, 0.1450453280026662E+01, 0.1468676920055535E+01, 0.3396444831847066E+00, 0.1504703083827628E+00, 0.6506576141124067E+00, 0.6177670326339089E+00, 0.1175810411452473E+00, 0.2402402478867145E+00, 0.1262214585027166E+01, 0.1547015632125768E+01, 0.5250426092262996E+00, 0.3073217441808570E+00, 0.9055103985570538E+00, 0.6853975319350345E+00, 0.8721019179982008E-01, 0.1076549537133787E+00, 0.8460758777494440E+00, 0.7520336386157322E+00, 0.1361402882064932E-01, 0.1396865635082151E-01, 0.7716231249744060E+00, 0.8106342214532430E+00, 0.5298106707064092E-01, 0.5302931309687425E-01, 0.8113724074143097E+00, 0.7583421433039418E+00, 0.3632274887524200E-06, 0.9727942389020712E-07, 0.2030988542900605E+00, 0.2030986166419704E+00, 0.1173872316183806E-05, 0.7596112905317353E-11, 0.1314248578535016E-05, 0.8411884199182457E-17, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 16, + ppOut: 0, + dminOut: 8.4118841991824567E-018, + desigOut: 1.0739530738237274E-017, + sigmaOut: 0.21120653295038691, + qmaxOut: 2.2697722926067549, + nFailOut: 2, + iterOut: 31, + nDivOut: 625, + ttypeOut: -2, + dmin1Out: 0.20309744276965425, + dmin2Out: 0.50018599148866161, + dnOut: 8.4118841991824567E-018, + dn1Out: 0.20309744276965425, + dn2Out: 0.75834178007645303, + gOut: 0.0000000000000000, + tauOut: 1.3142409824136984E-006, + }, + { + i0: 1, + n0: 16, + z: []float64{0.2269772292606755E+01, 0.2269770979614632E+01, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.9725961809002787E+00, 0.9728156171042807E+00, 0.2207509801202943E-03, 0.3358741643642203E-03, 0.1480145783712083E+01, 0.1480954954309013E+01, 0.1146359002276934E-02, 0.1282269997958535E-02, 0.1656535258559212E+01, 0.1696043475248702E+01, 0.4079180092843103E-01, 0.2889964597634762E-01, 0.1201590880509993E+01, 0.1415242852393798E+01, 0.2425529321011353E+00, 0.1904848393814713E+00, 0.1111437017432560E+01, 0.9384432420354740E+00, 0.1749237822536809E-01, 0.1527569554079381E-01, 0.8195211115924584E+00, 0.1033200729619178E+01, 0.2289566278084960E+00, 0.3214195289148511E+00, 0.1450453280026662E+01, 0.1468676920055535E+01, 0.3396444831847066E+00, 0.1504703083827628E+00, 0.6506576141124067E+00, 0.6177670326339089E+00, 0.1175810411452473E+00, 0.2402402478867145E+00, 0.1262214585027166E+01, 0.1547015632125768E+01, 0.5250426092262996E+00, 0.3073217441808570E+00, 0.9055103985570538E+00, 0.6853975319350345E+00, 0.8721019179982008E-01, 0.1076549537133787E+00, 0.8460758777494440E+00, 0.7520336386157322E+00, 0.1361402882064932E-01, 0.1396865635082151E-01, 0.7716231249744060E+00, 0.8106342214532430E+00, 0.5298106707064092E-01, 0.5302931309687425E-01, 0.8113724074143097E+00, 0.7583421433039418E+00, 0.3632274887524200E-06, 0.9727942389020712E-07, 0.2030988542900605E+00, 0.2030986166419704E+00, 0.1173872316183806E-05, 0.7596112905317353E-11, 0.1314248578535016E-05, 0.8411884199182457E-17, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 8.4118841991824567E-018, + desig: 1.0739530738237274E-017, + qmax: 2.2697722926067549, + ttype: -2, + dmin1: 0.20309744276965425, + dmin2: 0.50018599148866161, + dn: 8.4118841991824567E-018, + dn1: 0.20309744276965425, + dn2: 0.75834178007645303, + g: 0.0000000000000000, + tau: 1.3142409824136984E-006, + nFail: 2, + iter: 31, + sigma: 0.21120653295038691, + nDiv: 625, + zOut: []float64{0.2269770980149768E+01, 0.2269770979614632E+01, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.9731514910392876E+00, 0.9728156171042807E+00, 0.5111377954200868E-03, 0.3358741643642203E-03, 0.1481726086511552E+01, 0.1480954954309013E+01, 0.1467737987028945E-02, 0.1282269997958535E-02, 0.1723475383238021E+01, 0.1696043475248702E+01, 0.2373112943910766E-01, 0.2889964597634762E-01, 0.1581996562336162E+01, 0.1415242852393798E+01, 0.1129959536471923E+00, 0.1904848393814713E+00, 0.8407229839290754E+00, 0.9384432420354740E+00, 0.1877296098701645E-01, 0.1527569554079381E-01, 0.1335847297547013E+01, 0.1033200729619178E+01, 0.3533797947109679E+00, 0.3214195289148511E+00, 0.1265767433727330E+01, 0.1468676920055535E+01, 0.7343813202351114E-01, 0.1504703083827628E+00, 0.7845691484971122E+00, 0.6177670326339089E+00, 0.4737063898809231E+00, 0.2402402478867145E+00, 0.1380630986425702E+01, 0.1547015632125768E+01, 0.1525661578238559E+00, 0.3073217441808570E+00, 0.6404863278245572E+00, 0.6853975319350345E+00, 0.1264041760751794E+00, 0.1076549537133787E+00, 0.6395981188913744E+00, 0.7520336386157322E+00, 0.1770404028911661E-01, 0.1396865635082151E-01, 0.8459594942610007E+00, 0.8106342214532430E+00, 0.4753698401003136E-01, 0.5302931309687425E-01, 0.7108052565733343E+00, 0.7583421433039418E+00, 0.2779568135873871E-07, 0.9727942389020712E-07, 0.2030985888538852E+00, 0.2030986166419704E+00, 0.3146138162949754E-27, 0.7596112905317353E-11, 0.8411884198867843E-17, 0.8411884199182457E-17, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 16, + ppOut: 1, + dminOut: 8.4118841988678429E-018, + desigOut: 1.0739530738237274E-017, + sigmaOut: 0.21120653295038691, + qmaxOut: 2.2697722926067549, + nFailOut: 2, + iterOut: 32, + nDivOut: 642, + ttypeOut: -2, + dmin1Out: 0.20309858884628909, + dmin2Out: 0.53283137411117854, + dnOut: 8.4118841988678429E-018, + dn1Out: 0.20309858884628909, + dn2Out: 0.71080515929391042, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 16, + z: []float64{0.2269770980149768E+01, 0.2269770979614632E+01, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.9731514910392876E+00, 0.9728156171042807E+00, 0.5111377954200868E-03, 0.3358741643642203E-03, 0.1481726086511552E+01, 0.1480954954309013E+01, 0.1467737987028945E-02, 0.1282269997958535E-02, 0.1723475383238021E+01, 0.1696043475248702E+01, 0.2373112943910766E-01, 0.2889964597634762E-01, 0.1581996562336162E+01, 0.1415242852393798E+01, 0.1129959536471923E+00, 0.1904848393814713E+00, 0.8407229839290754E+00, 0.9384432420354740E+00, 0.1877296098701645E-01, 0.1527569554079381E-01, 0.1335847297547013E+01, 0.1033200729619178E+01, 0.3533797947109679E+00, 0.3214195289148511E+00, 0.1265767433727330E+01, 0.1468676920055535E+01, 0.7343813202351114E-01, 0.1504703083827628E+00, 0.7845691484971122E+00, 0.6177670326339089E+00, 0.4737063898809231E+00, 0.2402402478867145E+00, 0.1380630986425702E+01, 0.1547015632125768E+01, 0.1525661578238559E+00, 0.3073217441808570E+00, 0.6404863278245572E+00, 0.6853975319350345E+00, 0.1264041760751794E+00, 0.1076549537133787E+00, 0.6395981188913744E+00, 0.7520336386157322E+00, 0.1770404028911661E-01, 0.1396865635082151E-01, 0.8459594942610007E+00, 0.8106342214532430E+00, 0.4753698401003136E-01, 0.5302931309687425E-01, 0.7108052565733343E+00, 0.7583421433039418E+00, 0.2779568135873871E-07, 0.9727942389020712E-07, 0.2030985888538852E+00, 0.2030986166419704E+00, 0.3146138162949754E-27, 0.7596112905317353E-11, 0.8411884198867843E-17, 0.8411884199182457E-17, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 8.4118841988678429E-018, + desig: 1.0739530738237274E-017, + qmax: 2.2697722926067549, + ttype: -2, + dmin1: 0.20309858884628909, + dmin2: 0.53283137411117854, + dn: 8.4118841988678429E-018, + dn1: 0.20309858884628909, + dn2: 0.71080515929391042, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 32, + sigma: 0.21120653295038691, + nDiv: 642, + zOut: []float64{0.2269770980149768E+01, 0.2269770980379126E+01, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.9731514910392876E+00, 0.9736626287363720E+00, 0.5111377954200868E-03, 0.7778528033461282E-03, 0.1481726086511552E+01, 0.1482415971695234E+01, 0.1467737987028945E-02, 0.1706410574351102E-02, 0.1723475383238021E+01, 0.1745500102102777E+01, 0.2373112943910766E-01, 0.2150819994097728E-01, 0.1581996562336162E+01, 0.1673484316042377E+01, 0.1129959536471923E+00, 0.5676676764251993E-01, 0.8407229839290754E+00, 0.8027291772735718E+00, 0.1877296098701645E-01, 0.3124068479314146E-01, 0.1335847297547013E+01, 0.1657986407464839E+01, 0.3533797947109679E+00, 0.2697830536296953E+00, 0.1265767433727330E+01, 0.1069422512121146E+01, 0.7343813202351114E-01, 0.5387701498318342E-01, 0.7845691484971122E+00, 0.1204398523394852E+01, 0.4737063898809231E+00, 0.5430210247136315E+00, 0.1380630986425702E+01, 0.9901761195359265E+00, 0.1525661578238559E+00, 0.9868601781741700E-01, 0.6404863278245572E+00, 0.6682044860823195E+00, 0.1264041760751794E+00, 0.1209927124430272E+00, 0.6395981188913744E+00, 0.5363094467374639E+00, 0.1770404028911661E-01, 0.2792585709699239E-01, 0.8459594942610007E+00, 0.8655706211740396E+00, 0.4753698401003136E-01, 0.3903729781186600E-01, 0.7108052565733343E+00, 0.6717679865571495E+00, 0.2779568135873871E-07, 0.8403591378512072E-08, 0.2030985888538852E+00, 0.2030985804502939E+00, 0.3146138162949754E-27, 0.1303059324279677E-43, 0.8411884198867843E-17, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 16, + ppOut: 0, + dminOut: 8.4118841988678429E-018, + desigOut: 1.0739530738237274E-017, + sigmaOut: 0.21120653295038691, + qmaxOut: 2.2697722926067549, + nFailOut: 2, + iterOut: 33, + nDivOut: 659, + ttypeOut: -2, + dmin1Out: 0.20309858045029386, + dmin2Out: 0.51860540644834729, + dnOut: 8.4118841988678429E-018, + dn1Out: 0.20309858045029386, + dn2Out: 0.67176795876146822, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 16, + z: []float64{0.2269770980149768E+01, 0.2269770980379126E+01, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.9731514910392876E+00, 0.9736626287363720E+00, 0.5111377954200868E-03, 0.7778528033461282E-03, 0.1481726086511552E+01, 0.1482415971695234E+01, 0.1467737987028945E-02, 0.1706410574351102E-02, 0.1723475383238021E+01, 0.1745500102102777E+01, 0.2373112943910766E-01, 0.2150819994097728E-01, 0.1581996562336162E+01, 0.1673484316042377E+01, 0.1129959536471923E+00, 0.5676676764251993E-01, 0.8407229839290754E+00, 0.8027291772735718E+00, 0.1877296098701645E-01, 0.3124068479314146E-01, 0.1335847297547013E+01, 0.1657986407464839E+01, 0.3533797947109679E+00, 0.2697830536296953E+00, 0.1265767433727330E+01, 0.1069422512121146E+01, 0.7343813202351114E-01, 0.5387701498318342E-01, 0.7845691484971122E+00, 0.1204398523394852E+01, 0.4737063898809231E+00, 0.5430210247136315E+00, 0.1380630986425702E+01, 0.9901761195359265E+00, 0.1525661578238559E+00, 0.9868601781741700E-01, 0.6404863278245572E+00, 0.6682044860823195E+00, 0.1264041760751794E+00, 0.1209927124430272E+00, 0.6395981188913744E+00, 0.5363094467374639E+00, 0.1770404028911661E-01, 0.2792585709699239E-01, 0.8459594942610007E+00, 0.8655706211740396E+00, 0.4753698401003136E-01, 0.3903729781186600E-01, 0.7108052565733343E+00, 0.6717679865571495E+00, 0.2779568135873871E-07, 0.8403591378512072E-08, 0.2030985888538852E+00, 0.2030985804502939E+00, 0.3146138162949754E-27, 0.1303059324279677E-43, 0.8411884198867843E-17, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 8.4118841988678429E-018, + desig: 1.0739530738237274E-017, + qmax: 2.2697722926067549, + ttype: -2, + dmin1: 0.20309858045029386, + dmin2: 0.51860540644834729, + dn: 8.4118841988678429E-018, + dn1: 0.20309858045029386, + dn2: 0.67176795876146822, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 2, + iter: 33, + sigma: 0.21120653295038691, + nDiv: 659, + zOut: []float64{0.2168221690252314E+01, 0.2269770980379126E+01, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.8728911912704126E+00, 0.9736626287363720E+00, 0.1321013925721922E-02, 0.7778528033461282E-03, 0.1381252078118717E+01, 0.1482415971695234E+01, 0.2156405683614187E-02, 0.1706410574351102E-02, 0.1663302606134993E+01, 0.1745500102102777E+01, 0.2163985983955575E-01, 0.2150819994097728E-01, 0.1607061933620194E+01, 0.1673484316042377E+01, 0.2835506195054301E-01, 0.5676676764251993E-01, 0.7040655098910235E+00, 0.8027291772735718E+00, 0.7356791380810462E-01, 0.3124068479314146E-01, 0.1752652257061283E+01, 0.1657986407464839E+01, 0.1646145547572216E+00, 0.2697830536296953E+00, 0.8571356821219610E+00, 0.1069422512121146E+01, 0.7570493055431493E-01, 0.5387701498318342E-01, 0.1570165327329021E+01, 0.1204398523394852E+01, 0.3424393862982660E+00, 0.5430210247136315E+00, 0.6448734608299306E+00, 0.9901761195359265E+00, 0.1022564019526126E+00, 0.9868601781741700E-01, 0.5853915063475871E+00, 0.6682044860823195E+00, 0.1108480973262629E+00, 0.1209927124430272E+00, 0.3518379162830466E+00, 0.5363094467374639E+00, 0.6870152520689508E-01, 0.2792585709699239E-01, 0.7343571035538636E+00, 0.8655706211740396E+00, 0.3571015630515456E-01, 0.3903729781186600E-01, 0.5345085484304394E+00, 0.6717679865571495E+00, 0.3193134112956561E-08, 0.8403591378512072E-08, 0.1015492870320128E+00, 0.2030985804502939E+00, 0.4415865678637858E-10, 0.1303059324279677E-43, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 15, + ppOut: 1, + dminOut: 0.10154928703201281, + desigOut: 0.0000000000000000, + sigmaOut: 0.31275582317553385, + qmaxOut: 2.2697722926067549, + nFailOut: 2, + iterOut: 34, + nDivOut: 675, + ttypeOut: -9, + dmin1Out: 0.32391205918605420, + dmin2Out: 0.32391205918605420, + dnOut: 0.10154928703201281, + dn1Out: 0.53450854002684800, + dn2Out: 0.69531980574199759, + gOut: 0.0000000000000000, + tauOut: 0.10154929022514693, + }, + { + i0: 1, + n0: 15, + z: []float64{0.2168221690252314E+01, 0.2269770980379126E+01, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.8728911912704126E+00, 0.9736626287363720E+00, 0.1321013925721922E-02, 0.7778528033461282E-03, 0.1381252078118717E+01, 0.1482415971695234E+01, 0.2156405683614187E-02, 0.1706410574351102E-02, 0.1663302606134993E+01, 0.1745500102102777E+01, 0.2163985983955575E-01, 0.2150819994097728E-01, 0.1607061933620194E+01, 0.1673484316042377E+01, 0.2835506195054301E-01, 0.5676676764251993E-01, 0.7040655098910235E+00, 0.8027291772735718E+00, 0.7356791380810462E-01, 0.3124068479314146E-01, 0.1752652257061283E+01, 0.1657986407464839E+01, 0.1646145547572216E+00, 0.2697830536296953E+00, 0.8571356821219610E+00, 0.1069422512121146E+01, 0.7570493055431493E-01, 0.5387701498318342E-01, 0.1570165327329021E+01, 0.1204398523394852E+01, 0.3424393862982660E+00, 0.5430210247136315E+00, 0.6448734608299306E+00, 0.9901761195359265E+00, 0.1022564019526126E+00, 0.9868601781741700E-01, 0.5853915063475871E+00, 0.6682044860823195E+00, 0.1108480973262629E+00, 0.1209927124430272E+00, 0.3518379162830466E+00, 0.5363094467374639E+00, 0.6870152520689508E-01, 0.2792585709699239E-01, 0.7343571035538636E+00, 0.8655706211740396E+00, 0.3571015630515456E-01, 0.3903729781186600E-01, 0.5345085484304394E+00, 0.6717679865571495E+00, 0.3193134112956561E-08, 0.8403591378512072E-08, 0.1015492870320128E+00, 0.2030985804502939E+00, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 0.10154928703201281, + desig: 0.0000000000000000, + qmax: 2.1682216902523144, + ttype: -9, + dmin1: 0.32391205918605420, + dmin2: 0.32391205918605420, + dn: 0.10154928703201281, + dn1: 0.53450854002684800, + dn2: 0.69531980574199759, + g: 0.0000000000000000, + tau: 0.10154929022514693, + nFail: 2, + iter: 34, + sigma: 0.31275582317553385, + nDiv: 675, + zOut: []float64{0.2168221690252314E+01, 0.2066680684115085E+01, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.8728911912704126E+00, 0.7726711989960955E+00, 0.1321013925721922E-02, 0.2361487308570419E-02, 0.1381252078118717E+01, 0.1279505990312372E+01, 0.2156405683614187E-02, 0.2803234389363145E-02, 0.1663302606134993E+01, 0.1580598225403798E+01, 0.2163985983955575E-01, 0.2200217261925751E-01, 0.1607061933620194E+01, 0.1511873816770092E+01, 0.2835506195054301E-01, 0.1320468740761088E-01, 0.7040655098910235E+00, 0.6628877301101292E+00, 0.7356791380810462E-01, 0.1945110224949301E+00, 0.1752652257061283E+01, 0.1621214783142186E+01, 0.1646145547572216E+00, 0.8703165684534678E-01, 0.8571356821219610E+00, 0.7442679496495411E+00, 0.7570493055431493E-01, 0.1597129865933493E+00, 0.1570165327329021E+01, 0.1651350720852550E+01, 0.3424393862982660E+00, 0.1337269360034139E+00, 0.6448734608299306E+00, 0.5118619205977412E+00, 0.1022564019526126E+00, 0.1169456581236225E+00, 0.5853915063475871E+00, 0.4777529393688394E+00, 0.1108480973262629E+00, 0.8163333047984263E-01, 0.3518379162830466E+00, 0.2373651048287110E+00, 0.6870152520689508E-01, 0.2125478936639627E+00, 0.7343571035538636E+00, 0.4559783600136673E+00, 0.3571015630515456E-01, 0.4186028435717903E-01, 0.5345085484304394E+00, 0.3911072610850064E+00, 0.3193134112956561E-08, 0.8290832843879624E-09, 0.1015492870320128E+00, 0.8280021541434701E-05, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 15, + ppOut: 0, + dminOut: 8.2800215414347011E-006, + desigOut: -1.3877787807814457E-017, + sigmaOut: 0.41429682935692197, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 35, + nDivOut: 691, + ttypeOut: -4, + dmin1Out: 0.16866357962181588, + dmin2Out: 0.16866357962181588, + dnOut: 8.2800215414347011E-006, + dn1Out: 0.39110725789187228, + dn2Out: 0.42026820370851276, + gOut: 0.0000000000000000, + tauOut: 0.10154100618138810, + }, + { + i0: 1, + n0: 11, + z: []float64{0.1565539912114361E+01, 0.1565539887559990E+01, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.1185508165627851E+01, 0.1209595044804978E+01, 0.2408690373149840E-01, 0.1773879145177052E-01, 0.8908058287637680E+00, 0.9017845275302323E+00, 0.2871751477260568E-01, 0.4376453959373496E-01, 0.1374289696466428E+01, 0.1388278114489740E+01, 0.5775298217141787E-01, 0.3977262621431848E-01, 0.9560626040960629E+00, 0.9795790109656241E+00, 0.6328905763825028E-01, 0.5927283946360358E-01, 0.9174165586530958E+00, 0.1200347187817445E+01, 0.3422034931823232E+00, 0.1225138368952072E+00, 0.4297417838091302E+00, 0.3072280530227507E+00, 0.1306631986684747E-06, 0.1577236754259593E-06, 0.3708552845063717E+00, 0.3753559465594062E+00, 0.4500844331080801E-02, 0.3315910790466669E-02, 0.2765362989488873E+00, 0.2810497954194954E+00, 0.7829431815445537E-02, 0.5406547261581845E-02, 0.1940765355151052E+00, 0.1886700618399915E+00, 0.9814083907923291E-07, 0.1277249852674422E-13, 0.2455438642568072E-07, 0.2764930279233778E-14, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 2.7649302792337775E-015, + desig: 4.8519526217661568E-017, + qmax: 2.1682216902523144, + ttype: -2, + dmin1: 0.18866996369915248, + dmin2: 0.27322036360404983, + dn: 2.7649302792337775E-015, + dn1: 0.18866996369915248, + dn2: 0.27322036360404983, + g: 0.0000000000000000, + tau: 2.4554370888251911E-008, + nFail: 2, + iter: 57, + sigma: 0.91543762594185796, + nDiv: 1001, + zOut: []float64{0.1565539887559988E+01, 0.1565539887559990E+01, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.1227333836256746E+01, 0.1209595044804978E+01, 0.1303359134714337E-01, 0.1773879145177052E-01, 0.9325154757768211E+00, 0.9017845275302323E+00, 0.6515425651042277E-01, 0.4376453959373496E-01, 0.1362896484193633E+01, 0.1388278114489740E+01, 0.2858649229958118E-01, 0.3977262621431848E-01, 0.1010265358129644E+01, 0.9795790109656241E+00, 0.7042504782685149E-01, 0.5927283946360358E-01, 0.1252435976885798E+01, 0.1200347187817445E+01, 0.3005318297487194E-01, 0.1225138368952072E+00, 0.2771750277715515E+00, 0.3072280530227507E+00, 0.2135925446109612E-06, 0.1577236754259593E-06, 0.3786716437573254E+00, 0.3753559465594062E+00, 0.2461066374135985E-02, 0.3315910790466669E-02, 0.2839952763069384E+00, 0.2810497954194954E+00, 0.3591797791316158E-02, 0.5406547261581845E-02, 0.1850782640486854E+00, 0.1886700618399915E+00, 0.1908115364037247E-27, 0.1277249852674422E-13, 0.3470987982972452E-28, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 11, + ppOut: 1, + dminOut: 3.4709879829724519E-029, + desigOut: 3.7892243888322520E-017, + sigmaOut: 0.91543762594186073, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 58, + nDivOut: 1013, + ttypeOut: -2, + dmin1Out: 0.18507826404867261, + dmin2Out: 0.27717487004787600, + dnOut: 3.4709879829724519E-029, + dn1Out: 0.18507826404867261, + dn2Out: 0.27858872904535659, + gOut: 0.0000000000000000, + tauOut: 2.7649302792335523E-015, + }, + { + i0: 1, + n0: 11, + z: []float64{0.1565539887559988E+01, 0.1565539887559990E+01, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.1227333836256746E+01, 0.1209595044804978E+01, 0.1303359134714337E-01, 0.1773879145177052E-01, 0.9325154757768211E+00, 0.9017845275302323E+00, 0.6515425651042277E-01, 0.4376453959373496E-01, 0.1362896484193633E+01, 0.1388278114489740E+01, 0.2858649229958118E-01, 0.3977262621431848E-01, 0.1010265358129644E+01, 0.9795790109656241E+00, 0.7042504782685149E-01, 0.5927283946360358E-01, 0.1252435976885798E+01, 0.1200347187817445E+01, 0.3005318297487194E-01, 0.1225138368952072E+00, 0.2771750277715515E+00, 0.3072280530227507E+00, 0.2135925446109612E-06, 0.1577236754259593E-06, 0.3786716437573254E+00, 0.3753559465594062E+00, 0.2461066374135985E-02, 0.3315910790466669E-02, 0.2839952763069384E+00, 0.2810497954194954E+00, 0.3591797791316158E-02, 0.5406547261581845E-02, 0.1850782640486854E+00, 0.1886700618399915E+00, 0.1908115364037247E-27, 0.1277249852674422E-13, 0.3470987982972452E-28, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 3.4709879829724519E-029, + desig: 3.7892243888322520E-017, + qmax: 2.1682216902523144, + ttype: -2, + dmin1: 0.18507826404867261, + dmin2: 0.27717487004787600, + dn: 3.4709879829724519E-029, + dn1: 0.18507826404867261, + dn2: 0.27858872904535659, + g: 0.0000000000000000, + tau: 2.7649302792335523E-015, + nFail: 2, + iter: 58, + sigma: 0.91543762594186073, + nDiv: 1013, + zOut: []float64{0.1565539887559988E+01, 0.1473000755535651E+01, 0.5964194309842799E-17, 0.4969486576955697E-17, 0.1227333836256746E+01, 0.1147828295579553E+01, 0.1303359134714337E-01, 0.1058871408116432E-01, 0.9325154757768211E+00, 0.8945418861817434E+00, 0.6515425651042277E-01, 0.9926701980086396E-01, 0.1362896484193633E+01, 0.1199676824668014E+01, 0.2858649229958118E-01, 0.2407310226126826E-01, 0.1010265358129644E+01, 0.9640781716708908E+00, 0.7042504782685149E-01, 0.9148932748822959E-01, 0.1252435976885798E+01, 0.1098460700348104E+01, 0.3005318297487194E-01, 0.7583331677723075E-02, 0.2771750277715515E+00, 0.1770527776620367E+00, 0.2135925446109612E-06, 0.4568210735249311E-06, 0.3786716437573254E+00, 0.2885931212860515E+00, 0.2461066374135985E-02, 0.2421856840585221E-02, 0.2839952763069384E+00, 0.1926260852333330E+00, 0.3591797791316158E-02, 0.3451057520197492E-02, 0.1850782640486854E+00, 0.8908807450415157E-01, 0.1908115364037247E-27, 0.4969486576955697E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 0, + dminOut: 8.9088074504151571E-002, + desigOut: -4.1633363423443370E-017, + sigmaOut: 1.0079767579661971, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 59, + nDivOut: 1024, + ttypeOut: -9, + dmin1Out: 0.17705256406949207, + dmin2Out: 0.17705256406949207, + dnOut: 8.9088074504151571E-002, + dn1Out: 0.18903428744201686, + dn2Out: 0.28613205491191551, + gOut: 0.0000000000000000, + tauOut: 9.2539132024336307E-002, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1565539887559988E+01, 0.1473000755535651E+01, 0.5964194309842799E-17, 0.4969486576955697E-17, 0.1227333836256746E+01, 0.1147828295579553E+01, 0.1303359134714337E-01, 0.1058871408116432E-01, 0.9325154757768211E+00, 0.8945418861817434E+00, 0.6515425651042277E-01, 0.9926701980086396E-01, 0.1362896484193633E+01, 0.1199676824668014E+01, 0.2858649229958118E-01, 0.2407310226126826E-01, 0.1010265358129644E+01, 0.9640781716708908E+00, 0.7042504782685149E-01, 0.9148932748822959E-01, 0.1252435976885798E+01, 0.1098460700348104E+01, 0.3005318297487194E-01, 0.7583331677723075E-02, 0.2771750277715515E+00, 0.1770527776620367E+00, 0.2135925446109612E-06, 0.4568210735249311E-06, 0.3786716437573254E+00, 0.2885931212860515E+00, 0.2461066374135985E-02, 0.2421856840585221E-02, 0.2839952763069384E+00, 0.1926260852333330E+00, 0.3591797791316158E-02, 0.3451057520197492E-02, 0.1850782640486854E+00, 0.8908807450415157E-01, 0.1908115364037247E-27, 0.4969486576955697E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 8.9088074504151571E-002, + desig: -4.1633363423443370E-017, + qmax: 2.1682216902523144, + ttype: -9, + dmin1: 0.17705256406949207, + dmin2: 0.17705256406949207, + dn: 8.9088074504151571E-002, + dn1: 0.18903428744201686, + dn2: 0.28613205491191551, + g: 0.0000000000000000, + tau: 9.2539132024336307E-002, + nFail: 2, + iter: 59, + sigma: 1.0079767579661971, + nDiv: 1024, + zOut: []float64{0.1397612833703614E+01, 0.1473000755535651E+01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.1083029087828680E+01, 0.1147828295579553E+01, 0.8745885380967966E-02, 0.1058871408116432E-01, 0.9096750987696016E+00, 0.8945418861817434E+00, 0.1309130515609722E+00, 0.9926701980086396E-01, 0.1017448953536272E+01, 0.1199676824668014E+01, 0.2281033592282574E-01, 0.2407310226126826E-01, 0.9573692414042568E+00, 0.9640781716708908E+00, 0.1049724875218357E+00, 0.9148932748822959E-01, 0.9256836226719531E+00, 0.1098460700348104E+01, 0.1450441494900679E-02, 0.7583331677723075E-02, 0.1002148711561719E+00, 0.1770527776620367E+00, 0.1315527505616969E-05, 0.4568210735249311E-06, 0.2156257407670935E+00, 0.2885931212860515E+00, 0.2163530200698068E-02, 0.2421856840585221E-02, 0.1185256907207948E+00, 0.1926260852333330E+00, 0.2593936112987583E-02, 0.3451057520197492E-02, 0.1110621655912630E-01, 0.8908807450415157E-01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 1, + dminOut: 1.1106216559126303E-002, + desigOut: -4.1633363423443370E-017, + sigmaOut: 1.0833646797982348, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 60, + nDivOut: 1035, + ttypeOut: -4, + dmin1Out: 0.10021441433509834, + dmin2Out: 0.10021441433509834, + dnOut: 1.1106216559126303E-002, + dn1Out: 0.11507463320059727, + dn2Out: 0.21320388392650824, + gOut: 0.0000000000000000, + tauOut: 7.5387921832037685E-002, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1397612833703614E+01, 0.1473000755535651E+01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.1083029087828680E+01, 0.1147828295579553E+01, 0.8745885380967966E-02, 0.1058871408116432E-01, 0.9096750987696016E+00, 0.8945418861817434E+00, 0.1309130515609722E+00, 0.9926701980086396E-01, 0.1017448953536272E+01, 0.1199676824668014E+01, 0.2281033592282574E-01, 0.2407310226126826E-01, 0.9573692414042568E+00, 0.9640781716708908E+00, 0.1049724875218357E+00, 0.9148932748822959E-01, 0.9256836226719531E+00, 0.1098460700348104E+01, 0.1450441494900679E-02, 0.7583331677723075E-02, 0.1002148711561719E+00, 0.1770527776620367E+00, 0.1315527505616969E-05, 0.4568210735249311E-06, 0.2156257407670935E+00, 0.2885931212860515E+00, 0.2163530200698068E-02, 0.2421856840585221E-02, 0.1185256907207948E+00, 0.1926260852333330E+00, 0.2593936112987583E-02, 0.3451057520197492E-02, 0.1110621655912630E-01, 0.8908807450415157E-01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 1.1106216559126303E-002, + desig: -4.1633363423443370E-017, + qmax: 2.1682216902523144, + ttype: -4, + dmin1: 0.10021441433509834, + dmin2: 0.10021441433509834, + dn: 1.1106216559126303E-002, + dn1: 0.11507463320059727, + dn2: 0.21320388392650824, + g: 0.0000000000000000, + tau: 7.5387921832037685E-002, + nFail: 2, + iter: 60, + sigma: 1.0833646797982348, + nDiv: 1035, + zOut: []float64{0.1397612833703614E+01, 0.1388412169967495E+01, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.1083029087828680E+01, 0.1082574309473529E+01, 0.8745885380967966E-02, 0.7349069784991225E-02, 0.9096750987696016E+00, 0.1024038416809464E+01, 0.1309130515609722E+00, 0.1300706547025319E+00, 0.1017448953536272E+01, 0.9009879710204475E+00, 0.2281033592282574E-01, 0.2423774201322422E-01, 0.9573692414042568E+00, 0.1028903323176749E+01, 0.1049724875218357E+00, 0.9444163542020824E-01, 0.9256836226719531E+00, 0.8234917650105269E+00, 0.1450441494900679E-02, 0.1765115496075164E-03, 0.1002148711561719E+00, 0.9083901139795122E-01, 0.1315527505616969E-05, 0.3122684720284652E-05, 0.2156257407670935E+00, 0.2085854845469525E+00, 0.2163530200698068E-02, 0.1229394806594584E-02, 0.1185256907207948E+00, 0.1106895682910690E+00, 0.2593936112987583E-02, 0.2602667681892373E-03, 0.1110621655912630E-01, 0.1645286054818337E-02, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 0, + dminOut: 1.6452860548183366E-003, + desigOut: 7.9797279894933126E-017, + sigmaOut: 1.0925653435343534, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 61, + nDivOut: 1046, + ttypeOut: -4, + dmin1Out: 9.0837695870445614E-002, + dmin2Out: 9.0837695870445614E-002, + dnOut: 1.6452860548183366E-003, + dn1Out: 0.10809563217808144, + dn2Out: 0.20642195434625446, + gOut: 0.0000000000000000, + tauOut: 9.2006637361187298E-003, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1397612833703614E+01, 0.1388412169967495E+01, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.1083029087828680E+01, 0.1082574309473529E+01, 0.8745885380967966E-02, 0.7349069784991225E-02, 0.9096750987696016E+00, 0.1024038416809464E+01, 0.1309130515609722E+00, 0.1300706547025319E+00, 0.1017448953536272E+01, 0.9009879710204475E+00, 0.2281033592282574E-01, 0.2423774201322422E-01, 0.9573692414042568E+00, 0.1028903323176749E+01, 0.1049724875218357E+00, 0.9444163542020824E-01, 0.9256836226719531E+00, 0.8234917650105269E+00, 0.1450441494900679E-02, 0.1765115496075164E-03, 0.1002148711561719E+00, 0.9083901139795122E-01, 0.1315527505616969E-05, 0.3122684720284652E-05, 0.2156257407670935E+00, 0.2085854845469525E+00, 0.2163530200698068E-02, 0.1229394806594584E-02, 0.1185256907207948E+00, 0.1106895682910690E+00, 0.2593936112987583E-02, 0.2602667681892373E-03, 0.1110621655912630E-01, 0.1645286054818337E-02, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 1.6452860548183366E-003, + desig: 7.9797279894933126E-017, + qmax: 2.1682216902523144, + ttype: -4, + dmin1: 9.0837695870445614E-002, + dmin2: 9.0837695870445614E-002, + dn: 1.6452860548183366E-003, + dn1: 0.10809563217808144, + dn2: 0.20642195434625446, + g: 0.0000000000000000, + tau: 9.2006637361187298E-003, + nFail: 2, + iter: 61, + sigma: 1.0925653435343534, + nDiv: 1046, + zOut: []float64{0.1386852748028120E+01, 0.1388412169967495E+01, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.1088363957319145E+01, 0.1082574309473529E+01, 0.6914717946174950E-02, 0.7349069784991225E-02, 0.1145634931626446E+01, 0.1024038416809464E+01, 0.1022944500333619E+00, 0.1300706547025319E+00, 0.8213718410609353E+00, 0.9009879710204475E+00, 0.3036175828902931E-01, 0.2423774201322422E-01, 0.1091423778368554E+01, 0.1028903323176749E+01, 0.7125729765473905E-01, 0.9444163542020824E-01, 0.7508515569660207E+00, 0.8234917650105269E+00, 0.2135460001102832E-04, 0.1765115496075164E-03, 0.8926135754328580E-01, 0.9083901139795122E-01, 0.7297073710223142E-05, 0.3122684720284652E-05, 0.2082481603404622E+00, 0.2085854845469525E+00, 0.6534568189162364E-03, 0.1229394806594584E-02, 0.1087369563009673E+00, 0.1106895682910690E+00, 0.3938065757966957E-05, 0.2602667681892373E-03, 0.8192604968568760E-04, 0.1645286054818337E-02, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 1, + dminOut: 8.1926049685687600E-005, + desigOut: -9.9312918999672206E-017, + sigmaOut: 1.0941247654737283, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 62, + nDivOut: 1057, + ttypeOut: -4, + dmin1Out: 8.9258234858565516E-002, + dmin2Out: 8.9258234858565516E-002, + dnOut: 8.1926049685687600E-005, + dn1Out: 0.10847668953277810, + dn2Out: 0.20701876553386761, + gOut: 0.0000000000000000, + tauOut: 1.5594219393746818E-003, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1386852748028120E+01, 0.1388412169967495E+01, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.1088363957319145E+01, 0.1082574309473529E+01, 0.6914717946174950E-02, 0.7349069784991225E-02, 0.1145634931626446E+01, 0.1024038416809464E+01, 0.1022944500333619E+00, 0.1300706547025319E+00, 0.8213718410609353E+00, 0.9009879710204475E+00, 0.3036175828902931E-01, 0.2423774201322422E-01, 0.1091423778368554E+01, 0.1028903323176749E+01, 0.7125729765473905E-01, 0.9444163542020824E-01, 0.7508515569660207E+00, 0.8234917650105269E+00, 0.2135460001102832E-04, 0.1765115496075164E-03, 0.8926135754328580E-01, 0.9083901139795122E-01, 0.7297073710223142E-05, 0.3122684720284652E-05, 0.2082481603404622E+00, 0.2085854845469525E+00, 0.6534568189162364E-03, 0.1229394806594584E-02, 0.1087369563009673E+00, 0.1106895682910690E+00, 0.3938065757966957E-05, 0.2602667681892373E-03, 0.8192604968568760E-04, 0.1645286054818337E-02, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 8.1926049685687600E-005, + desig: -9.9312918999672206E-017, + qmax: 2.1682216902523144, + ttype: -4, + dmin1: 8.9258234858565516E-002, + dmin2: 8.9258234858565516E-002, + dn: 8.1926049685687600E-005, + dn1: 0.10847668953277810, + dn2: 0.20701876553386761, + g: 0.0000000000000000, + tau: 1.5594219393746818E-003, + nFail: 2, + iter: 62, + sigma: 1.0941247654737283, + nDiv: 1057, + zOut: []float64{0.1386852748028120E+01, 0.1386771331083530E+01, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.1088363957319145E+01, 0.1095197258320730E+01, 0.6914717946174950E-02, 0.7233164949324962E-02, 0.1145634931626446E+01, 0.1240614799765893E+01, 0.1022944500333619E+00, 0.6772592167212049E-01, 0.8213718410609353E+00, 0.7839262607332537E+00, 0.3036175828902931E-01, 0.4227125255215914E-01, 0.1091423778368554E+01, 0.1120328406526543E+01, 0.7125729765473905E-01, 0.4775711530437247E-01, 0.7508515569660207E+00, 0.7030343793170689E+00, 0.2135460001102832E-04, 0.2711304941630149E-05, 0.8926135754328580E-01, 0.8918452636746399E-01, 0.7297073710223142E-05, 0.1703885458517271E-04, 0.2082481603404622E+00, 0.2088031613602029E+00, 0.6534568189162364E-03, 0.3402961195615630E-03, 0.1087369563009673E+00, 0.1083191813025733E+00, 0.3938065757966957E-05, 0.2978513750500819E-08, 0.8192604968568760E-04, 0.5061265815246250E-06, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 0, + dminOut: 5.0612658152462498E-007, + desigOut: -9.3553094958342964E-017, + sigmaOut: 1.0942061824183187, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 63, + nDivOut: 1068, + ttypeOut: -4, + dmin1Out: 8.9177229293753768E-002, + dmin2Out: 8.9177229293753768E-002, + dnOut: 5.0612658152462498E-007, + dn1Out: 0.10831524323681536, + dn2Out: 0.20814970454128662, + gOut: 0.0000000000000000, + tauOut: 8.1416944590412474E-005, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1386852748028120E+01, 0.1386771331083530E+01, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.1088363957319145E+01, 0.1095197258320730E+01, 0.6914717946174950E-02, 0.7233164949324962E-02, 0.1145634931626446E+01, 0.1240614799765893E+01, 0.1022944500333619E+00, 0.6772592167212049E-01, 0.8213718410609353E+00, 0.7839262607332537E+00, 0.3036175828902931E-01, 0.4227125255215914E-01, 0.1091423778368554E+01, 0.1120328406526543E+01, 0.7125729765473905E-01, 0.4775711530437247E-01, 0.7508515569660207E+00, 0.7030343793170689E+00, 0.2135460001102832E-04, 0.2711304941630149E-05, 0.8926135754328580E-01, 0.8918452636746399E-01, 0.7297073710223142E-05, 0.1703885458517271E-04, 0.2082481603404622E+00, 0.2088031613602029E+00, 0.6534568189162364E-03, 0.3402961195615630E-03, 0.1087369563009673E+00, 0.1083191813025733E+00, 0.3938065757966957E-05, 0.2978513750500819E-08, 0.8192604968568760E-04, 0.5061265815246250E-06, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 5.0612658152462498E-007, + desig: -9.3553094958342964E-017, + qmax: 2.1682216902523144, + ttype: -4, + dmin1: 8.9177229293753768E-002, + dmin2: 8.9177229293753768E-002, + dn: 5.0612658152462498E-007, + dn1: 0.10831524323681536, + dn2: 0.20814970454128662, + g: 0.0000000000000000, + tau: 8.1416944590412474E-005, + nFail: 2, + iter: 63, + sigma: 1.0942061824183187, + nDiv: 1068, + zOut: []float64{0.1386770825043033E+01, 0.1386771331083530E+01, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.1102429917229558E+01, 0.1095197258320730E+01, 0.8139811288713328E-02, 0.7233164949324962E-02, 0.1300200404108803E+01, 0.1240614799765893E+01, 0.4083380405309871E-01, 0.6772592167212049E-01, 0.7853632031918177E+00, 0.7839262607332537E+00, 0.6030036143936175E-01, 0.4227125255215914E-01, 0.1107784654351057E+01, 0.1120328406526543E+01, 0.3030814137396716E-01, 0.4775711530437247E-01, 0.6727284432075471E+00, 0.7030343793170689E+00, 0.3594413905024206E-06, 0.2711304941630149E-05, 0.8920069974016231E-01, 0.8918452636746399E-01, 0.3988496406087022E-04, 0.1703885458517271E-04, 0.2091030664752072E+00, 0.2088031613602029E+00, 0.1762795624794033E-03, 0.3402961195615630E-03, 0.1081423986781113E+00, 0.1083191813025733E+00, 0.1393999949133917E-13, 0.2978513750500819E-08, 0.8607124697139263E-10, 0.5061265815246250E-06, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 1, + dminOut: 8.6071246971392626E-011, + desigOut: 7.0901951641105278E-017, + sigmaOut: 1.0942066884588149, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 64, + nDivOut: 1079, + ttypeOut: -4, + dmin1Out: 8.9183660885577137E-002, + dmin2Out: 8.9183660885577137E-002, + dnOut: 8.6071246971392626E-011, + dn1Out: 0.10814239569959758, + dn2Out: 0.20876277035564564, + gOut: 0.0000000000000000, + tauOut: 5.0604049633765406E-007, + }, + { + i0: 1, + n0: 10, + z: []float64{0.1386770825043033E+01, 0.1386771331083530E+01, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.1102429917229558E+01, 0.1095197258320730E+01, 0.8139811288713328E-02, 0.7233164949324962E-02, 0.1300200404108803E+01, 0.1240614799765893E+01, 0.4083380405309871E-01, 0.6772592167212049E-01, 0.7853632031918177E+00, 0.7839262607332537E+00, 0.6030036143936175E-01, 0.4227125255215914E-01, 0.1107784654351057E+01, 0.1120328406526543E+01, 0.3030814137396716E-01, 0.4775711530437247E-01, 0.6727284432075471E+00, 0.7030343793170689E+00, 0.3594413905024206E-06, 0.2711304941630149E-05, 0.8920069974016231E-01, 0.8918452636746399E-01, 0.3988496406087022E-04, 0.1703885458517271E-04, 0.2091030664752072E+00, 0.2088031613602029E+00, 0.1762795624794033E-03, 0.3402961195615630E-03, 0.1081423986781113E+00, 0.1083191813025733E+00, 0.1393999949133917E-13, 0.2978513750500819E-08, 0.8607124697139263E-10, 0.5061265815246250E-06, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 8.6071246971392626E-011, + desig: 7.0901951641105278E-017, + qmax: 2.1682216902523144, + ttype: -4, + dmin1: 8.9183660885577137E-002, + dmin2: 8.9183660885577137E-002, + dn: 8.6071246971392626E-011, + dn1: 0.10814239569959758, + dn2: 0.20876277035564564, + g: 0.0000000000000000, + tau: 5.0604049633765406E-007, + nFail: 2, + iter: 64, + sigma: 1.0942066884588149, + nDiv: 1079, + zOut: []float64{0.1386770825043033E+01, 0.1386770824956962E+01, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.1102429917229558E+01, 0.1110569728432201E+01, 0.8139811288713328E-02, 0.9529690622753703E-02, 0.1300200404108803E+01, 0.1331504517453077E+01, 0.4083380405309871E-01, 0.2408506071837550E-01, 0.7853632031918177E+00, 0.8215785038267327E+00, 0.6030036143936175E-01, 0.8130667336500198E-01, 0.1107784654351057E+01, 0.1056786122273951E+01, 0.3030814137396716E-01, 0.1929354325655847E-01, 0.6727284432075471E+00, 0.6534352593063080E+00, 0.3594413905024206E-06, 0.4906748310831983E-07, 0.8920069974016231E-01, 0.8924053555066887E-01, 0.3988496406087022E-04, 0.9345605379795243E-04, 0.2091030664752072E+00, 0.2091858898978174E+00, 0.1762795624794033E-03, 0.9113088236382798E-04, 0.1081423986781113E+00, 0.1080512677096902E+00, 0.1393999949133917E-13, 0.1110429488179469E-22, 0.8607124697139263E-10, 0.3167883469916549E-16, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 10, + ppOut: 0, + dminOut: 3.1678834699165494E-017, + desigOut: -8.6057196331979189E-017, + sigmaOut: 1.0942066885448862, + qmaxOut: 2.1682216902523144, + nFailOut: 2, + iterOut: 65, + nDivOut: 1090, + ttypeOut: -4, + dmin1Out: 8.9200650586607991E-002, + dmin2Out: 8.9200650586607991E-002, + dnOut: 3.1678834699165494E-017, + dn1Out: 0.10805126770967630, + dn2Out: 0.20900961033533805, + gOut: 0.0000000000000000, + tauOut: 8.6071215292546838E-011, + }, + { + i0: 1, + n0: 3, + z: []float64{0.1143865217830237E+00, 0.1154808079639322E+00, 0.2932453102768040E-16, 0.1817901582187390E-16, 0.1834406364024603E+00, 0.1845166504084682E+00, 0.1101341475930520E-06, 0.1827217490071947E-04, 0.1127820009512990E-04, 0.1105674515151256E-02, 0.1845166504084682E+00, 0.2816548643828996E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 1.1278200095129901E-005, + desig: 1.1991276027689679E-016, + qmax: 0.41760242607758735, + ttype: -4, + dmin1: 0.11438652178302365, + dmin2: 0.11438652178302365, + dn: 1.1278200095129901E-005, + dn1: 0.18342236422755959, + dn2: 0.11438652178302365, + g: 0.0000000000000000, + tau: 1.0942861809085330E-003, + nFail: 3, + iter: 99, + sigma: 2.3665909917188244, + nDiv: 1347, + zOut: []float64{0.1143865217830237E+00, 0.1143752525446631E+00, 0.2932453102768040E-16, 0.4703212027287794E-16, 0.1834406364024603E+00, 0.1834294772982473E+00, 0.1101341475930520E-06, 0.6771621290952006E-11, 0.1127820009512990E-04, 0.8954962962003413E-08, 0.1845166504084682E+00, 0.1834406364024603E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 3, + ppOut: 0, + dminOut: 8.9549629620034135E-009, + desigOut: -3.3964327119002935E-017, + sigmaOut: 2.3666022609571851, + qmaxOut: 0.41760242607758735, + nFailOut: 3, + iterOut: 100, + nDivOut: 1351, + ttypeOut: -4, + dmin1Out: 0.11437525254466312, + dmin2Out: 0.11437525254466312, + dnOut: 8.9549629620034135E-009, + dn1Out: 0.18342936716409974, + dn2Out: 0.11437525254466312, + gOut: 0.0000000000000000, + tauOut: 1.1269238360546607E-005, + }, + { + i0: 1, + n0: 3, + z: []float64{0.1143865217830237E+00, 0.1143752525446631E+00, 0.2932453102768040E-16, 0.4703212027287794E-16, 0.1834406364024603E+00, 0.1834294772982473E+00, 0.1101341475930520E-06, 0.6771621290952006E-11, 0.1127820009512990E-04, 0.8954962962003413E-08, 0.1845166504084682E+00, 0.1834406364024603E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 8.9549629620034135E-009, + desig: -3.3964327119002935E-017, + qmax: 0.41760242607758735, + ttype: -4, + dmin1: 0.11437525254466312, + dmin2: 0.11437525254466312, + dn: 8.9549629620034135E-009, + dn1: 0.18342936716409974, + dn2: 0.11437525254466312, + g: 0.0000000000000000, + tau: 1.1269238360546607E-005, + nFail: 3, + iter: 100, + sigma: 2.3666022609571851, + nDiv: 1351, + zOut: []float64{0.1143752435897560E+00, 0.1143752525446631E+00, 0.7542783706608855E-16, 0.4703212027287794E-16, 0.1834294683501117E+00, 0.1834294772982473E+00, 0.3305882004599510E-18, 0.6771621290952006E-11, 0.5575326929115112E-13, 0.8954962962003413E-08, 0.1834294772982473E+00, 0.1834406364024603E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 3, + ppOut: 1, + dminOut: 5.5753269291151117E-014, + desigOut: 1.3632246356731358E-016, + sigmaOut: 2.3666022699120921, + qmaxOut: 0.41760242607758735, + nFailOut: 3, + iterOut: 101, + nDivOut: 1355, + ttypeOut: -4, + dmin1Out: 0.11437524358975594, + dmin2Out: 0.11437524358975594, + dnOut: 5.5753269291151117E-014, + dn1Out: 0.18342946834334006, + dn2Out: 0.11437524358975594, + gOut: 0.0000000000000000, + tauOut: 8.9549072084035346E-009, + }, + { + i0: 1, + n0: 3, + z: []float64{0.1143752435897560E+00, 0.1143752525446631E+00, 0.7542783706608855E-16, 0.4703212027287794E-16, 0.1834294683501117E+00, 0.1834294772982473E+00, 0.3305882004599510E-18, 0.6771621290952006E-11, 0.5575326929115112E-13, 0.8954962962003413E-08, 0.1834294772982473E+00, 0.1834406364024603E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 0, + dmin: 5.5753269291151117E-014, + desig: 1.3632246356731358E-016, + qmax: 0.41760242607758735, + ttype: -4, + dmin1: 0.11437524358975594, + dmin2: 0.11437524358975594, + dn: 5.5753269291151117E-014, + dn1: 0.18342946834334006, + dn2: 0.11437524358975594, + g: 0.0000000000000000, + tau: 8.9549072084035346E-009, + nFail: 3, + iter: 101, + sigma: 2.3666022699120921, + nDiv: 1355, + zOut: []float64{0.1143752435897560E+00, 0.1143752435897003E+00, 0.7542783706608855E-16, 0.1209675067575323E-15, 0.1834294683501117E+00, 0.1834294683500558E+00, 0.3305882004599510E-18, 0.1004820715586787E-30, 0.5575326929115112E-13, 0.7669624420364386E-22, 0.1834294772982473E+00, 0.1834294683501117E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 3, + ppOut: 0, + dminOut: 7.6696244203643861E-023, + desigOut: -6.5648763085702813E-017, + sigmaOut: 2.3666022699121481, + qmaxOut: 0.41760242607758735, + nFailOut: 3, + iterOut: 102, + nDivOut: 1359, + ttypeOut: -4, + dmin1Out: 0.11437524358970023, + dmin2Out: 0.11437524358970023, + dnOut: 7.6696244203643861E-023, + dn1Out: 0.18342946835005580, + dn2Out: 0.11437524358970023, + gOut: 0.0000000000000000, + tauOut: 5.5753269214454873E-014, + }, + { + i0: 1, + n0: 3, + z: []float64{0.1143752435897560E+00, 0.1143752435897003E+00, 0.7542783706608855E-16, 0.1209675067575323E-15, 0.1834294683501117E+00, 0.1834294683500558E+00, 0.3305882004599510E-18, 0.1004820715586787E-30, 0.5575326929115112E-13, 0.7669624420364386E-22, 0.1834294772982473E+00, 0.1834294683501117E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + pp: 1, + dmin: 7.6696244203643861E-023, + desig: -6.5648763085702813E-017, + qmax: 0.41760242607758735, + ttype: -4, + dmin1: 0.11437524358970023, + dmin2: 0.11437524358970023, + dn: 7.6696244203643861E-023, + dn1: 0.18342946835005580, + dn2: 0.11437524358970023, + g: 0.0000000000000000, + tau: 5.5753269214454873E-014, + nFail: 3, + iter: 102, + sigma: 2.3666022699121481, + nDiv: 1359, + zOut: []float64{0.2550031738262204E+01, 0.1834294683500561E+00, 0.7542783706608855E-16, 0.1209675067575323E-15, 0.2480977513501848E+01, 0.1143752435897001E+00, 0.3305882004599510E-18, 0.1004820715586787E-30, 0.2366602269912148E+01, 0.7669624420364386E-22, 0.1834294772982473E+00, 0.1834294683501117E+00, 0.2169993432366266E+01, 0.5067642455139780E-26, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.1810817848712033E+01, 0.1972152263052530E-29, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.1681677309759878E+01, 0.5241368559131172E-22, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.1303743375476047E+01, 0.0000000000000000E+00, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1202161769544433E+01, 0.0000000000000000E+00, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1183377192742860E+01, 0.2033579915108999E-22, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1094206688544886E+01, 0.3167883469916549E-16, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.9154376259418607E+00, 0.2764930279233778E-14, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.8241395430971566E+00, 0.2245698748385924E-16, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.7318275341991307E+00, 0.4959852501050381E-23, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.5186198053161721E+00, 0.1503295986001297E-14, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.4143051093784424E+00, 0.1303656847202082E-15, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.2112065329503869E+00, 0.8411884198867843E-17, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.1093987140067686E+00, 0.2696165428113804E-17, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.9751785856405315E-01, 0.6617412588681544E-21, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.2818174710670554E-01, 0.1396210563637443E-18, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1697846193036144E-01, 0.6162975822039155E-31, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.2117542506861687E-04, 0.0000000000000000E+00, 0.9895328911616120E-03, 0.1620493249248586E-02}, + i0Out: 1, + n0Out: 0, + ppOut: 1, + dminOut: 7.6696244203643861E-023, + desigOut: -6.5648763085702813E-017, + sigmaOut: 2.3666022699121481, + qmaxOut: 0.41760242607758735, + nFailOut: 3, + iterOut: 102, + nDivOut: 1359, + ttypeOut: -4, + dmin1Out: 0.11437524358970023, + dmin2Out: 0.11437524358970023, + dnOut: 7.6696244203643861E-023, + dn1Out: 0.18342946835005580, + dn2Out: 0.11437524358970023, + gOut: 0.0000000000000000, + tauOut: 5.5753269214454873E-014, + }, + { + i0: 1, + n0: 21, + z: []float64{0.1648283185136998E+01, 0.1396221235720571E+01, 0.1712714336271993E+00, 0.2520619494164272E+00, 0.1510753432847732E+01, 0.1119977945086946E+01, 0.3792800633372563E+00, 0.5620469213879850E+00, 0.1328441621586708E+01, 0.1019485448443405E+01, 0.1388998759717073E+00, 0.6882362364805590E+00, 0.4466938077796418E+00, 0.2681061628164644E+00, 0.7093206047768255E+00, 0.3174875209348847E+00, 0.6843112870203156E+00, 0.9979892152967577E+00, 0.6490582981441884E+00, 0.3956426765003833E+00, 0.5085572738629487E+00, 0.1122623886995757E+01, 0.9750235054014829E-02, 0.3499168501137979E-01, 0.1364886053450573E+00, 0.1417066070690837E+00, 0.2301225778544498E-01, 0.4532233329988395E-02, 0.1646009972289452E+01, 0.6930161671496210E+00, 0.2362515608142310E+00, 0.9760060629252760E+00, 0.5818602562677768E+00, 0.3984323866837953E+00, 0.1797665269485310E-01, 0.4196794303982125E+00, 0.5600419521166516E+00, 0.2492354636952108E-01, 0.2195137569256029E+00, 0.5530950584419837E+00, 0.4184071984843414E+00, 0.2222708575473020E+00, 0.2727864547293006E+00, 0.4156500978626423E+00, 0.6774373914466536E-01, 0.2745959086613283E+00, 0.1050967099374242E+00, 0.6593428521263771E-01, 0.2040338718098096E+00, 0.1079809097801335E+00, 0.1271971985482246E+00, 0.2011496719671002E+00, 0.4444741998443960E-01, 0.1290210252363728E+00, 0.5776327498150620E+00, 0.4262359329629137E-01, 0.3402556968467140E+00, 0.6023491555328507E+00, 0.1086565805630269E+00, 0.3155392911289253E+00, 0.9382999256694983E+00, 0.1171677238805356E+00, 0.7901625299559836E+00, 0.9297887823519896E+00, 0.6095853796269167E+00, 0.7973955560628040E+00, 0.8018125008387630E+00, 0.6023523535200964E+00, 0.2443177602187348E-01, 0.8114406374558937E+00, 0.2277830378453201E+00, 0.1480363940474286E-01, 0.6969081780841352E+00, 0.3759308106650992E+00, 0.8012406122589412E-01, 0.5487604052643561E+00, 0.9781022865072954E-01, 0.1017549972519246E+00, 0.2961248981181939E-03, 0.7617929262469909E-01, 0.8408398800007548E-04, 0.3802088861182694E-03, 0.0000000000000000E+00, 0.0000000000000000E+00}, + pp: 0, + dmin: -0.0000000000000000, + desig: 0.0000000000000000, + qmax: 1.8900334961849885, + ttype: 0, + dmin1: 0.0000000000000000, + dmin2: 0.0000000000000000, + dn: 0.0000000000000000, + dn1: 0.0000000000000000, + dn2: 0.0000000000000000, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 2, + sigma: 0.0000000000000000, + nDiv: 40, + zOut: []float64{0.1648283185136998E+01, 0.1819554618764197E+01, 0.1712714336271993E+00, 0.1422045283129674E+00, 0.1510753432847732E+01, 0.1747828967872021E+01, 0.3792800633372563E+00, 0.2882727267008810E+00, 0.1328441621586708E+01, 0.1179068770857534E+01, 0.1388998759717073E+00, 0.5262264257308433E-01, 0.4466938077796418E+00, 0.1103391769983383E+01, 0.7093206047768255E+00, 0.4399127392187891E+00, 0.6843112870203156E+00, 0.8934568459457148E+00, 0.6490582981441884E+00, 0.3694451726238032E+00, 0.5085572738629487E+00, 0.1488623362931603E+00, 0.9750235054014829E-02, 0.8939776288934402E-02, 0.1364886053450573E+00, 0.1505610868415679E+00, 0.2301225778544498E-01, 0.2515816443301624E+00, 0.1646009972289452E+01, 0.1630679888773521E+01, 0.2362515608142310E+00, 0.8429943526342391E-01, 0.5818602562677768E+00, 0.5155374736992060E+00, 0.1797665269485310E-01, 0.1952851185677853E-01, 0.5600419521166516E+00, 0.7600271971854760E+00, 0.2195137569256029E+00, 0.1208458544696003E+00, 0.4184071984843414E+00, 0.5703477987440417E+00, 0.2727864547293006E+00, 0.3240053608004366E-01, 0.6774373914466536E-01, 0.1404399130020459E+00, 0.1050967099374242E+00, 0.1526865702536626E+00, 0.2040338718098096E+00, 0.1785445001043715E+00, 0.1271971985482246E+00, 0.3166486394939177E-01, 0.4444741998443960E-01, 0.5904153058501098E+00, 0.5776327498150620E+00, 0.3328891237445398E+00, 0.3402556968467140E+00, 0.1160231536652011E+00, 0.1086565805630269E+00, 0.8787251358464724E+00, 0.9382999256694983E+00, 0.8497373197790092E+00, 0.7901625299559836E+00, 0.5668475593321608E+00, 0.6095853796269167E+00, 0.8445503211335190E+00, 0.8018125008387630E+00, 0.2319542476253924E-01, 0.2443177602187348E-01, 0.2290193891046544E+00, 0.2277830378453201E+00, 0.6931459494493321E+00, 0.6969081780841352E+00, 0.8388628986069724E-01, 0.8012406122589412E-01, 0.9342352322344821E-01, 0.9781022865072954E-01, 0.4682830325399513E-02, 0.2961248981181939E-03, 0.5317160915449039E-05, 0.8408398800007548E-04, 0.7876682708462645E-04, 0.0000000000000000E+00, 0.8939776288934402E-02}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 7.8766827084626452E-005, + desigOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 3, + nDivOut: 62, + ttypeOut: -1, + dmin1Out: 1.2363512593342330E-003, + dmin2Out: 1.2363512593342330E-003, + dnOut: 7.8766827084626452E-005, + dn1Out: 4.3867054272813191E-003, + dn2Out: 3.7622286348031123E-003, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.1648283185136998E+01, 0.1819554618764197E+01, 0.1712714336271993E+00, 0.1422045283129674E+00, 0.1510753432847732E+01, 0.1747828967872021E+01, 0.3792800633372563E+00, 0.2882727267008810E+00, 0.1328441621586708E+01, 0.1179068770857534E+01, 0.1388998759717073E+00, 0.5262264257308433E-01, 0.4466938077796418E+00, 0.1103391769983383E+01, 0.7093206047768255E+00, 0.4399127392187891E+00, 0.6843112870203156E+00, 0.8934568459457148E+00, 0.6490582981441884E+00, 0.3694451726238032E+00, 0.5085572738629487E+00, 0.1488623362931603E+00, 0.9750235054014829E-02, 0.8939776288934402E-02, 0.1364886053450573E+00, 0.1505610868415679E+00, 0.2301225778544498E-01, 0.2515816443301624E+00, 0.1646009972289452E+01, 0.1630679888773521E+01, 0.2362515608142310E+00, 0.8429943526342391E-01, 0.5818602562677768E+00, 0.5155374736992060E+00, 0.1797665269485310E-01, 0.1952851185677853E-01, 0.5600419521166516E+00, 0.7600271971854760E+00, 0.2195137569256029E+00, 0.1208458544696003E+00, 0.4184071984843414E+00, 0.5703477987440417E+00, 0.2727864547293006E+00, 0.3240053608004366E-01, 0.6774373914466536E-01, 0.1404399130020459E+00, 0.1050967099374242E+00, 0.1526865702536626E+00, 0.2040338718098096E+00, 0.1785445001043715E+00, 0.1271971985482246E+00, 0.3166486394939177E-01, 0.4444741998443960E-01, 0.5904153058501098E+00, 0.5776327498150620E+00, 0.3328891237445398E+00, 0.3402556968467140E+00, 0.1160231536652011E+00, 0.1086565805630269E+00, 0.8787251358464724E+00, 0.9382999256694983E+00, 0.8497373197790092E+00, 0.7901625299559836E+00, 0.5668475593321608E+00, 0.6095853796269167E+00, 0.8445503211335190E+00, 0.8018125008387630E+00, 0.2319542476253924E-01, 0.2443177602187348E-01, 0.2290193891046544E+00, 0.2277830378453201E+00, 0.6931459494493321E+00, 0.6969081780841352E+00, 0.8388628986069724E-01, 0.8012406122589412E-01, 0.9342352322344821E-01, 0.9781022865072954E-01, 0.4682830325399513E-02, 0.2961248981181939E-03, 0.5317160915449039E-05, 0.8408398800007548E-04, 0.7876682708462645E-04, 0.0000000000000000E+00, 0.8939776288934402E-02}, + pp: 1, + dmin: 7.8766827084626452E-005, + desig: 0.0000000000000000, + qmax: 1.8900334961849885, + ttype: -1, + dmin1: 1.2363512593342330E-003, + dmin2: 1.2363512593342330E-003, + dn: 7.8766827084626452E-005, + dn1: 4.3867054272813191E-003, + dn2: 3.7622286348031123E-003, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 3, + sigma: 0.0000000000000000, + nDiv: 62, + zOut: []float64{0.1961759147077164E+01, 0.1819554618764197E+01, 0.1266970995487882E+00, 0.1422045283129674E+00, 0.1909404595024114E+01, 0.1747828967872021E+01, 0.1780101349021133E+00, 0.2882727267008810E+00, 0.1053681278528505E+01, 0.1179068770857534E+01, 0.5510526941411123E-01, 0.5262264257308433E-01, 0.1488199239788061E+01, 0.1103391769983383E+01, 0.2641064704009213E+00, 0.4399127392187891E+00, 0.9987955481685968E+00, 0.8934568459457148E+00, 0.5506279200968747E-01, 0.3694451726238032E+00, 0.1027393205724072E+00, 0.1488623362931603E+00, 0.1310094739466220E-01, 0.8939776288934402E-02, 0.3890417837770681E+00, 0.1505610868415679E+00, 0.1054511738587064E+01, 0.2515816443301624E+00, 0.6604675854498806E+00, 0.1630679888773521E+01, 0.6580113672099847E-01, 0.8429943526342391E-01, 0.4692648488349861E+00, 0.5155374736992060E+00, 0.3162862116895929E-01, 0.1952851185677853E-01, 0.8492444304861170E+00, 0.7600271971854760E+00, 0.8115939841327705E-01, 0.1208458544696003E+00, 0.5215889364108083E+00, 0.5703477987440417E+00, 0.8723974284448969E-02, 0.3240053608004366E-01, 0.2844025089712595E+00, 0.1404399130020459E+00, 0.9585480612390133E-01, 0.1526865702536626E+00, 0.1143545579298620E+00, 0.1785445001043715E+00, 0.1634864466429828E+00, 0.3166486394939177E-01, 0.7598179829516669E+00, 0.5904153058501098E+00, 0.5083170815153470E-01, 0.3328891237445398E+00, 0.9439165813601388E+00, 0.1160231536652011E+00, 0.7910503496831139E+00, 0.8787251358464724E+00, 0.6255345294280562E+00, 0.8497373197790092E+00, 0.7653155273545736E+00, 0.5668475593321608E+00, 0.1024302185414846E+00, 0.8445503211335190E+00, 0.5186166821452450E-01, 0.2319542476253924E-01, 0.8703036703394620E+00, 0.2290193891046544E+00, 0.6681052144545734E-01, 0.6931459494493321E+00, 0.1104992916386881E+00, 0.8388628986069724E-01, 0.3959179295799719E-02, 0.9342352322344821E-01, 0.7289681905152429E-03, 0.4682830325399513E-02, 0.5745324691222600E-06, 0.5317160915449039E-05, 0.7819229461550419E-04, 0.7876682708462645E-04, 0.8723974284448969E-02, 0.8939776288934402E-02}, + i0Out: 1, + n0Out: 21, + ppOut: 1, + dminOut: 7.8192294615504193E-005, + desigOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 4, + nDivOut: 84, + ttypeOut: -4, + dmin1Out: 7.2365102959979382E-004, + dmin2Out: 1.7075768415239889E-002, + dnOut: 7.8192294615504193E-005, + dn1Out: 7.2365102959979382E-004, + dn2Out: 1.7075768415239889E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.1961759147077164E+01, 0.1819554618764197E+01, 0.1266970995487882E+00, 0.1422045283129674E+00, 0.1909404595024114E+01, 0.1747828967872021E+01, 0.1780101349021133E+00, 0.2882727267008810E+00, 0.1053681278528505E+01, 0.1179068770857534E+01, 0.5510526941411123E-01, 0.5262264257308433E-01, 0.1488199239788061E+01, 0.1103391769983383E+01, 0.2641064704009213E+00, 0.4399127392187891E+00, 0.9987955481685968E+00, 0.8934568459457148E+00, 0.5506279200968747E-01, 0.3694451726238032E+00, 0.1027393205724072E+00, 0.1488623362931603E+00, 0.1310094739466220E-01, 0.8939776288934402E-02, 0.3890417837770681E+00, 0.1505610868415679E+00, 0.1054511738587064E+01, 0.2515816443301624E+00, 0.6604675854498806E+00, 0.1630679888773521E+01, 0.6580113672099847E-01, 0.8429943526342391E-01, 0.4692648488349861E+00, 0.5155374736992060E+00, 0.3162862116895929E-01, 0.1952851185677853E-01, 0.8492444304861170E+00, 0.7600271971854760E+00, 0.8115939841327705E-01, 0.1208458544696003E+00, 0.5215889364108083E+00, 0.5703477987440417E+00, 0.8723974284448969E-02, 0.3240053608004366E-01, 0.2844025089712595E+00, 0.1404399130020459E+00, 0.9585480612390133E-01, 0.1526865702536626E+00, 0.1143545579298620E+00, 0.1785445001043715E+00, 0.1634864466429828E+00, 0.3166486394939177E-01, 0.7598179829516669E+00, 0.5904153058501098E+00, 0.5083170815153470E-01, 0.3328891237445398E+00, 0.9439165813601388E+00, 0.1160231536652011E+00, 0.7910503496831139E+00, 0.8787251358464724E+00, 0.6255345294280562E+00, 0.8497373197790092E+00, 0.7653155273545736E+00, 0.5668475593321608E+00, 0.1024302185414846E+00, 0.8445503211335190E+00, 0.5186166821452450E-01, 0.2319542476253924E-01, 0.8703036703394620E+00, 0.2290193891046544E+00, 0.6681052144545734E-01, 0.6931459494493321E+00, 0.1104992916386881E+00, 0.8388628986069724E-01, 0.3959179295799719E-02, 0.9342352322344821E-01, 0.7289681905152429E-03, 0.4682830325399513E-02, 0.5745324691222600E-06, 0.5317160915449039E-05, 0.7819229461550419E-04, 0.7876682708462645E-04, 0.8723974284448969E-02, 0.8939776288934402E-02}, + pp: 0, + dmin: 7.8192294615504193E-005, + desig: 0.0000000000000000, + qmax: 1.8900334961849885, + ttype: -4, + dmin1: 7.2365102959979382E-004, + dmin2: 1.7075768415239889E-002, + dn: 7.8192294615504193E-005, + dn1: 7.2365102959979382E-004, + dn2: 1.7075768415239889E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 4, + sigma: 0.0000000000000000, + nDiv: 84, + zOut: []float64{0.1961759147077164E+01, 0.2088378163269771E+01, 0.1266970995487882E+00, 0.1158391848322702E+00, 0.1909404595024114E+01, 0.1971497461737776E+01, 0.1780101349021133E+00, 0.9513882222772962E-01, 0.1053681278528505E+01, 0.1013569642358705E+01, 0.5510526941411123E-01, 0.8090970429970110E-01, 0.1488199239788061E+01, 0.1671317922533099E+01, 0.2641064704009213E+00, 0.1578325483874163E+00, 0.9987955481685968E+00, 0.8959477084346864E+00, 0.5506279200968747E-01, 0.6314111623521673E-02, 0.1027393205724072E+00, 0.1094480729873660E+00, 0.1310094739466220E-01, 0.4656834793406785E-01, 0.3890417837770681E+00, 0.1396907091073883E+01, 0.1054511738587064E+01, 0.4985806330739840E+00, 0.6604675854498806E+00, 0.2276100057407134E+00, 0.6580113672099847E-01, 0.1356625794022653E+00, 0.4692648488349861E+00, 0.3651528072454984E+00, 0.3162862116895929E-01, 0.7355942454424362E-01, 0.8492444304861170E+00, 0.8567663209989688E+00, 0.8115939841327705E-01, 0.4940885660487250E-01, 0.5215889364108083E+00, 0.4808259707342031E+00, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.2844025089712595E+00, 0.3750191107685802E+00, 0.9585480612390133E-01, 0.2922900104287094E-01, 0.1143545579298620E+00, 0.2485339201737921E+00, 0.1634864466429828E+00, 0.4998108187459615E+00, 0.7598179829516669E+00, 0.3107607890010585E+00, 0.5083170815153470E-01, 0.1543981540828483E+00, 0.9439165813601388E+00, 0.1580490693604223E+01, 0.7910503496831139E+00, 0.3130858727896049E+00, 0.6255345294280562E+00, 0.1077686100636843E+01, 0.7653155273545736E+00, 0.7274051012980143E-01, 0.1024302185414846E+00, 0.8147329327002600E-01, 0.5186166821452450E-01, 0.5539901283655780E+00, 0.8703036703394620E+00, 0.3830459800631597E+00, 0.6681052144545734E-01, 0.1927318305890360E-01, 0.1104992916386881E+00, 0.9510720451940254E-01, 0.3959179295799719E-02, 0.3034592154998885E-04, 0.7289681905152429E-03, 0.6211134452527084E-03, 0.5745324691222600E-06, 0.7232819130731082E-07, 0.7819229461550419E-04, 0.3661024252896476E-07, 0.8723974284448969E-02, 0.5160120970399038E-02}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 3.6610242528964756E-008, + desigOut: 0.0000000000000000, + sigmaOut: 7.8083356181667918E-005, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 5, + nDivOut: 106, + ttypeOut: -2, + dmin1Out: 6.2053891278358614E-004, + dmin2Out: 2.9611625055501498E-002, + dnOut: 3.6610242528964756E-008, + dn1Out: 6.2053891278358614E-004, + dn2Out: 9.1148025223602810E-002, + gOut: 0.0000000000000000, + tauOut: 7.8083356181667918E-005, + }, + { + i0: 1, + n0: 21, + z: []float64{0.1961759147077164E+01, 0.2088378163269771E+01, 0.1266970995487882E+00, 0.1158391848322702E+00, 0.1909404595024114E+01, 0.1971497461737776E+01, 0.1780101349021133E+00, 0.9513882222772962E-01, 0.1053681278528505E+01, 0.1013569642358705E+01, 0.5510526941411123E-01, 0.8090970429970110E-01, 0.1488199239788061E+01, 0.1671317922533099E+01, 0.2641064704009213E+00, 0.1578325483874163E+00, 0.9987955481685968E+00, 0.8959477084346864E+00, 0.5506279200968747E-01, 0.6314111623521673E-02, 0.1027393205724072E+00, 0.1094480729873660E+00, 0.1310094739466220E-01, 0.4656834793406785E-01, 0.3890417837770681E+00, 0.1396907091073883E+01, 0.1054511738587064E+01, 0.4985806330739840E+00, 0.6604675854498806E+00, 0.2276100057407134E+00, 0.6580113672099847E-01, 0.1356625794022653E+00, 0.4692648488349861E+00, 0.3651528072454984E+00, 0.3162862116895929E-01, 0.7355942454424362E-01, 0.8492444304861170E+00, 0.8567663209989688E+00, 0.8115939841327705E-01, 0.4940885660487250E-01, 0.5215889364108083E+00, 0.4808259707342031E+00, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.2844025089712595E+00, 0.3750191107685802E+00, 0.9585480612390133E-01, 0.2922900104287094E-01, 0.1143545579298620E+00, 0.2485339201737921E+00, 0.1634864466429828E+00, 0.4998108187459615E+00, 0.7598179829516669E+00, 0.3107607890010585E+00, 0.5083170815153470E-01, 0.1543981540828483E+00, 0.9439165813601388E+00, 0.1580490693604223E+01, 0.7910503496831139E+00, 0.3130858727896049E+00, 0.6255345294280562E+00, 0.1077686100636843E+01, 0.7653155273545736E+00, 0.7274051012980143E-01, 0.1024302185414846E+00, 0.8147329327002600E-01, 0.5186166821452450E-01, 0.5539901283655780E+00, 0.8703036703394620E+00, 0.3830459800631597E+00, 0.6681052144545734E-01, 0.1927318305890360E-01, 0.1104992916386881E+00, 0.9510720451940254E-01, 0.3959179295799719E-02, 0.3034592154998885E-04, 0.7289681905152429E-03, 0.6211134452527084E-03, 0.5745324691222600E-06, 0.7232819130731082E-07, 0.7819229461550419E-04, 0.3661024252896476E-07, 0.8723974284448969E-02, 0.5160120970399038E-02}, + pp: 1, + dmin: 3.6610242528964756E-008, + desig: 0.0000000000000000, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 6.2053891278358614E-004, + dmin2: 2.9611625055501498E-002, + dn: 3.6610242528964756E-008, + dn1: 6.2053891278358614E-004, + dn2: 9.1148025223602810E-002, + g: 0.0000000000000000, + tau: 7.8083356181667918E-005, + nFail: 0, + iter: 5, + sigma: 7.8083356181667918E-005, + nDiv: 106, + zOut: []float64{0.2204217311496068E+01, 0.2088378163269771E+01, 0.1036089580076783E+00, 0.1158391848322702E+00, 0.1963027289351853E+01, 0.1971497461737776E+01, 0.4912301654839819E-01, 0.9513882222772962E-01, 0.1045356293504034E+01, 0.1013569642358705E+01, 0.1293586117415210E+00, 0.8090970429970110E-01, 0.1699791822573021E+01, 0.1671317922533099E+01, 0.8319236989271818E-01, 0.1578325483874163E+00, 0.8190694135595162E+00, 0.8959477084346864E+00, 0.8437225690290790E-03, 0.6314111623521673E-02, 0.1551726617464312E+00, 0.1094480729873660E+00, 0.4192211096758560E+00, 0.4656834793406785E-01, 0.1476266577866037E+01, 0.1396907091073883E+01, 0.7687090018675194E-01, 0.4985806330739840E+00, 0.2864016483502532E+00, 0.2276100057407134E+00, 0.1729653861709652E+00, 0.1356625794022653E+00, 0.2657468090128033E+00, 0.3651528072454984E+00, 0.2371551996266359E+00, 0.7355942454424362E-01, 0.6690199413712319E+00, 0.8567663209989688E+00, 0.3551024412099299E-01, 0.4940885660487250E-01, 0.4504758109776356E+00, 0.4808259707342031E+00, 0.4295777776785939E-02, 0.5160120970399038E-02, 0.3999522974286917E+00, 0.3750191107685802E+00, 0.1816316160365039E-01, 0.2922900104287094E-01, 0.7301815407101296E+00, 0.2485339201737921E+00, 0.2127164214993764E+00, 0.4998108187459615E+00, 0.2524424849785568E+00, 0.3107607890010585E+00, 0.9666552191416621E+00, 0.1543981540828483E+00, 0.9269213106461920E+00, 0.1580490693604223E+01, 0.3640096408786760E+00, 0.3130858727896049E+00, 0.7864169332819952E+00, 0.1077686100636843E+01, 0.7535963003344312E-02, 0.7274051012980143E-01, 0.6279274220262862E+00, 0.8147329327002600E-01, 0.3379430237022286E+00, 0.5539901283655780E+00, 0.6437610281386123E-01, 0.3830459800631597E+00, 0.2847358698029713E-01, 0.1927318305890360E-01, 0.6666392685468185E-01, 0.9510720451940254E-01, 0.2827355178816361E-06, 0.3034592154998885E-04, 0.6208664319525956E-03, 0.6211134452527084E-03, 0.4264931214133004E-11, 0.7232819130731082E-07, 0.4059351646211308E-14, 0.3661024252896476E-07, 0.8437225690290790E-03, 0.5160120970399038E-02}, + i0Out: 1, + n0Out: 21, + ppOut: 1, + dminOut: 4.0593516462113082E-015, + desigOut: 4.3344264097778650E-021, + sigmaOut: 7.8119962155206313E-005, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 6, + nDivOut: 128, + ttypeOut: -2, + dmin1Out: 6.2079410376128833E-004, + dmin2Out: 4.5102919754957636E-002, + dnOut: 4.0593516462113082E-015, + dn1Out: 6.2079410376128833E-004, + dn2Out: 6.6633580933131861E-002, + gOut: 0.0000000000000000, + tauOut: 3.6605973538398975E-008, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2204217311496068E+01, 0.2088378163269771E+01, 0.1036089580076783E+00, 0.1158391848322702E+00, 0.1963027289351853E+01, 0.1971497461737776E+01, 0.4912301654839819E-01, 0.9513882222772962E-01, 0.1045356293504034E+01, 0.1013569642358705E+01, 0.1293586117415210E+00, 0.8090970429970110E-01, 0.1699791822573021E+01, 0.1671317922533099E+01, 0.8319236989271818E-01, 0.1578325483874163E+00, 0.8190694135595162E+00, 0.8959477084346864E+00, 0.8437225690290790E-03, 0.6314111623521673E-02, 0.1551726617464312E+00, 0.1094480729873660E+00, 0.4192211096758560E+00, 0.4656834793406785E-01, 0.1476266577866037E+01, 0.1396907091073883E+01, 0.7687090018675194E-01, 0.4985806330739840E+00, 0.2864016483502532E+00, 0.2276100057407134E+00, 0.1729653861709652E+00, 0.1356625794022653E+00, 0.2657468090128033E+00, 0.3651528072454984E+00, 0.2371551996266359E+00, 0.7355942454424362E-01, 0.6690199413712319E+00, 0.8567663209989688E+00, 0.3551024412099299E-01, 0.4940885660487250E-01, 0.4504758109776356E+00, 0.4808259707342031E+00, 0.4295777776785939E-02, 0.5160120970399038E-02, 0.3999522974286917E+00, 0.3750191107685802E+00, 0.1816316160365039E-01, 0.2922900104287094E-01, 0.7301815407101296E+00, 0.2485339201737921E+00, 0.2127164214993764E+00, 0.4998108187459615E+00, 0.2524424849785568E+00, 0.3107607890010585E+00, 0.9666552191416621E+00, 0.1543981540828483E+00, 0.9269213106461920E+00, 0.1580490693604223E+01, 0.3640096408786760E+00, 0.3130858727896049E+00, 0.7864169332819952E+00, 0.1077686100636843E+01, 0.7535963003344312E-02, 0.7274051012980143E-01, 0.6279274220262862E+00, 0.8147329327002600E-01, 0.3379430237022286E+00, 0.5539901283655780E+00, 0.6437610281386123E-01, 0.3830459800631597E+00, 0.2847358698029713E-01, 0.1927318305890360E-01, 0.6666392685468185E-01, 0.9510720451940254E-01, 0.2827355178816361E-06, 0.3034592154998885E-04, 0.6208664319525956E-03, 0.6211134452527084E-03, 0.4264931214133004E-11, 0.7232819130731082E-07, 0.4059351646211308E-14, 0.3661024252896476E-07, 0.8437225690290790E-03, 0.5160120970399038E-02}, + pp: 0, + dmin: 4.0593516462113082E-015, + desig: 4.3344264097778650E-021, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 6.2079410376128833E-004, + dmin2: 4.5102919754957636E-002, + dn: 4.0593516462113082E-015, + dn1: 6.2079410376128833E-004, + dn2: 6.6633580933131861E-002, + g: 0.0000000000000000, + tau: 3.6605973538398975E-008, + nFail: 0, + iter: 6, + sigma: 7.8119962155206313E-005, + nDiv: 128, + zOut: []float64{0.2204217311496068E+01, 0.2307826269503742E+01, 0.1036089580076783E+00, 0.8812934261040264E-01, 0.1963027289351853E+01, 0.1924020963289845E+01, 0.4912301654839819E-01, 0.2668944646890268E-01, 0.1045356293504034E+01, 0.1148025458776649E+01, 0.1293586117415210E+00, 0.1915312145184878E+00, 0.1699791822573021E+01, 0.1591452977947247E+01, 0.8319236989271818E-01, 0.4281642408847453E-01, 0.8190694135595162E+00, 0.7770967120400667E+00, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1551726617464312E+00, 0.5742252947387723E+00, 0.4192211096758560E+00, 0.1077768810640642E+01, 0.1476266577866037E+01, 0.4753686674121431E+00, 0.7687090018675194E-01, 0.4631342794110950E-01, 0.2864016483502532E+00, 0.4130536065801048E+00, 0.1729653861709652E+00, 0.1112809541240190E+00, 0.2657468090128033E+00, 0.3916210545154161E+00, 0.2371551996266359E+00, 0.4051405202062471E+00, 0.6690199413712319E+00, 0.2993896652859737E+00, 0.3551024412099299E-01, 0.5343038813025977E-01, 0.4504758109776356E+00, 0.4013412006241577E+00, 0.4295777776785939E-02, 0.4280911574482486E-02, 0.3999522974286917E+00, 0.4138345474578556E+00, 0.1816316160365039E-01, 0.3204760309498118E-01, 0.7301815407101296E+00, 0.9108503591145208E+00, 0.2127164214993764E+00, 0.5895442813598011E-01, 0.2524424849785568E+00, 0.1160143275984235E+01, 0.9666552191416621E+00, 0.7723298847804961E+00, 0.9269213106461920E+00, 0.5186010667443678E+00, 0.3640096408786760E+00, 0.5519914319921668E+00, 0.7864169332819952E+00, 0.2419614642931688E+00, 0.7535963003344312E-02, 0.1955698951896722E-01, 0.6279274220262862E+00, 0.9463134562095434E+00, 0.3379430237022286E+00, 0.2298969194226957E-01, 0.6437610281386123E-01, 0.6985999785188474E-01, 0.2847358698029713E-01, 0.2717093011896993E-01, 0.6666392685468185E-01, 0.3949327947122574E-01, 0.2827355178816361E-06, 0.4444831994804014E-08, 0.6208664319525956E-03, 0.6208619913814727E-03, 0.4264931214133004E-11, 0.2788519153273688E-22, 0.4059351646211308E-14, 0.3786532345060857E-28, 0.8437225690290790E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 0, + dminOut: 3.7865323450608567E-029, + desigOut: -5.4012504887129591E-021, + sigmaOut: 7.8119962159265674E-005, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 7, + nDivOut: 150, + ttypeOut: -2, + dmin1Out: 6.2086198711654151E-004, + dmin2Out: 3.9492996735707858E-002, + dnOut: 3.7865323450608567E-029, + dn1Out: 6.2086198711654151E-004, + dn2Out: 3.9492996735707858E-002, + gOut: 0.0000000000000000, + tauOut: 4.0593516183260787E-015, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2204217311496068E+01, 0.2307826269503742E+01, 0.1036089580076783E+00, 0.8812934261040264E-01, 0.1963027289351853E+01, 0.1924020963289845E+01, 0.4912301654839819E-01, 0.2668944646890268E-01, 0.1045356293504034E+01, 0.1148025458776649E+01, 0.1293586117415210E+00, 0.1915312145184878E+00, 0.1699791822573021E+01, 0.1591452977947247E+01, 0.8319236989271818E-01, 0.4281642408847453E-01, 0.8190694135595162E+00, 0.7770967120400667E+00, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1551726617464312E+00, 0.5742252947387723E+00, 0.4192211096758560E+00, 0.1077768810640642E+01, 0.1476266577866037E+01, 0.4753686674121431E+00, 0.7687090018675194E-01, 0.4631342794110950E-01, 0.2864016483502532E+00, 0.4130536065801048E+00, 0.1729653861709652E+00, 0.1112809541240190E+00, 0.2657468090128033E+00, 0.3916210545154161E+00, 0.2371551996266359E+00, 0.4051405202062471E+00, 0.6690199413712319E+00, 0.2993896652859737E+00, 0.3551024412099299E-01, 0.5343038813025977E-01, 0.4504758109776356E+00, 0.4013412006241577E+00, 0.4295777776785939E-02, 0.4280911574482486E-02, 0.3999522974286917E+00, 0.4138345474578556E+00, 0.1816316160365039E-01, 0.3204760309498118E-01, 0.7301815407101296E+00, 0.9108503591145208E+00, 0.2127164214993764E+00, 0.5895442813598011E-01, 0.2524424849785568E+00, 0.1160143275984235E+01, 0.9666552191416621E+00, 0.7723298847804961E+00, 0.9269213106461920E+00, 0.5186010667443678E+00, 0.3640096408786760E+00, 0.5519914319921668E+00, 0.7864169332819952E+00, 0.2419614642931688E+00, 0.7535963003344312E-02, 0.1955698951896722E-01, 0.6279274220262862E+00, 0.9463134562095434E+00, 0.3379430237022286E+00, 0.2298969194226957E-01, 0.6437610281386123E-01, 0.6985999785188474E-01, 0.2847358698029713E-01, 0.2717093011896993E-01, 0.6666392685468185E-01, 0.3949327947122574E-01, 0.2827355178816361E-06, 0.4444831994804014E-08, 0.6208664319525956E-03, 0.6208619913814727E-03, 0.4264931214133004E-11, 0.2788519153273688E-22, 0.4059351646211308E-14, 0.3786532345060857E-28, 0.8437225690290790E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 3.7865323450608567E-029, + desig: -5.4012504887129591E-021, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 6.2086198711654151E-004, + dmin2: 3.9492996735707858E-002, + dn: 3.7865323450608567E-029, + dn1: 6.2086198711654151E-004, + dn2: 3.9492996735707858E-002, + g: 0.0000000000000000, + tau: 4.0593516183260787E-015, + nFail: 0, + iter: 7, + sigma: 7.8119962159265674E-005, + nDiv: 150, + zOut: []float64{0.2395955612114145E+01, 0.2307826269503742E+01, 0.7077038564739886E-01, 0.8812934261040264E-01, 0.1879940024111348E+01, 0.1924020963289845E+01, 0.1629847954401656E-01, 0.2668944646890268E-01, 0.1323258193751120E+01, 0.1148025458776649E+01, 0.2303502998543534E+00, 0.1915312145184878E+00, 0.1403919102181368E+01, 0.1591452977947247E+01, 0.2369972908607684E-01, 0.4281642408847453E-01, 0.7535654596375009E+00, 0.7770967120400667E+00, 0.1283811140869274E-03, 0.1684766835109566E-03, 0.1651865724265327E+01, 0.5742252947387723E+00, 0.3101568824672333E+00, 0.1077768810640642E+01, 0.2115252128860193E+00, 0.4753686674121431E+00, 0.9043805314343908E-01, 0.4631342794110950E-01, 0.4338965075606848E+00, 0.4130536065801048E+00, 0.1004386157577793E+00, 0.1112809541240190E+00, 0.6963229589638840E+00, 0.3916210545154161E+00, 0.1741934301847783E+00, 0.4051405202062471E+00, 0.1786266232314551E+00, 0.2993896652859737E+00, 0.1200482645536405E+00, 0.5343038813025977E-01, 0.2855738476449996E+00, 0.4013412006241577E+00, 0.6203611145567293E-02, 0.4280911574482486E-02, 0.4396785394072695E+00, 0.4138345474578556E+00, 0.6639071087521134E-01, 0.3204760309498118E-01, 0.9034140763752896E+00, 0.9108503591145208E+00, 0.7570790092830114E-01, 0.5895442813598011E-01, 0.1856765259836430E+01, 0.1160143275984235E+01, 0.2157144528657351E+00, 0.7723298847804961E+00, 0.8548780458707995E+00, 0.5186010667443678E+00, 0.1562335771835849E+00, 0.5519914319921668E+00, 0.1052848766285511E+00, 0.2419614642931688E+00, 0.1757806338135458E+00, 0.1955698951896722E-01, 0.7935225143382671E+00, 0.9463134562095434E+00, 0.2023962522401480E-02, 0.2298969194226957E-01, 0.9500696544845319E-01, 0.6985999785188474E-01, 0.1129463646814219E-01, 0.2717093011896993E-01, 0.2819864744791555E-01, 0.3949327947122574E-01, 0.9786381594178541E-10, 0.4444831994804014E-08, 0.6208618935176568E-03, 0.6208619913814727E-03, 0.1700670967075909E-47, 0.2788519153273688E-22, 0.3786532345060857E-28, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 21, + ppOut: 1, + dminOut: 3.7865323450608567E-029, + desigOut: -5.4012504887129591E-021, + sigmaOut: 7.8119962159265674E-005, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 8, + nDivOut: 172, + ttypeOut: -2, + dmin1Out: 6.2086189351765679E-004, + dmin2Out: 2.8198643003083550E-002, + dnOut: 3.7865323450608567E-029, + dn1Out: 6.2086189351765679E-004, + dn2Out: 2.8198643003083550E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 21, + z: []float64{0.2395955612114145E+01, 0.2307826269503742E+01, 0.7077038564739886E-01, 0.8812934261040264E-01, 0.1879940024111348E+01, 0.1924020963289845E+01, 0.1629847954401656E-01, 0.2668944646890268E-01, 0.1323258193751120E+01, 0.1148025458776649E+01, 0.2303502998543534E+00, 0.1915312145184878E+00, 0.1403919102181368E+01, 0.1591452977947247E+01, 0.2369972908607684E-01, 0.4281642408847453E-01, 0.7535654596375009E+00, 0.7770967120400667E+00, 0.1283811140869274E-03, 0.1684766835109566E-03, 0.1651865724265327E+01, 0.5742252947387723E+00, 0.3101568824672333E+00, 0.1077768810640642E+01, 0.2115252128860193E+00, 0.4753686674121431E+00, 0.9043805314343908E-01, 0.4631342794110950E-01, 0.4338965075606848E+00, 0.4130536065801048E+00, 0.1004386157577793E+00, 0.1112809541240190E+00, 0.6963229589638840E+00, 0.3916210545154161E+00, 0.1741934301847783E+00, 0.4051405202062471E+00, 0.1786266232314551E+00, 0.2993896652859737E+00, 0.1200482645536405E+00, 0.5343038813025977E-01, 0.2855738476449996E+00, 0.4013412006241577E+00, 0.6203611145567293E-02, 0.4280911574482486E-02, 0.4396785394072695E+00, 0.4138345474578556E+00, 0.6639071087521134E-01, 0.3204760309498118E-01, 0.9034140763752896E+00, 0.9108503591145208E+00, 0.7570790092830114E-01, 0.5895442813598011E-01, 0.1856765259836430E+01, 0.1160143275984235E+01, 0.2157144528657351E+00, 0.7723298847804961E+00, 0.8548780458707995E+00, 0.5186010667443678E+00, 0.1562335771835849E+00, 0.5519914319921668E+00, 0.1052848766285511E+00, 0.2419614642931688E+00, 0.1757806338135458E+00, 0.1955698951896722E-01, 0.7935225143382671E+00, 0.9463134562095434E+00, 0.2023962522401480E-02, 0.2298969194226957E-01, 0.9500696544845319E-01, 0.6985999785188474E-01, 0.1129463646814219E-01, 0.2717093011896993E-01, 0.2819864744791555E-01, 0.3949327947122574E-01, 0.9786381594178541E-10, 0.4444831994804014E-08, 0.6208618935176568E-03, 0.6208619913814727E-03, 0.1700670967075909E-47, 0.2788519153273688E-22, 0.3786532345060857E-28, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 3.7865323450608567E-029, + desig: -5.4012504887129591E-021, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 6.2086189351765679E-004, + dmin2: 2.8198643003083550E-002, + dn: 3.7865323450608567E-029, + dn1: 6.2086189351765679E-004, + dn2: 2.8198643003083550E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 8, + sigma: 7.8119962159265674E-005, + nDiv: 172, + zOut: []float64{0.2395955612114145E+01, 0.2466725997761544E+01, 0.7077038564739886E-01, 0.5393549207373363E-01, 0.1879940024111348E+01, 0.1842303011581631E+01, 0.1629847954401656E-01, 0.1170659574821484E-01, 0.1323258193751120E+01, 0.1541901897857258E+01, 0.2303502998543534E+00, 0.2097365510789915E+00, 0.1403919102181368E+01, 0.1217882280188454E+01, 0.2369972908607684E-01, 0.1466422291592108E-01, 0.7535654596375009E+00, 0.7390296178356669E+00, 0.1283811140869274E-03, 0.2869551596920546E-03, 0.1651865724265327E+01, 0.1961735651572868E+01, 0.3101568824672333E+00, 0.3344283443049241E-01, 0.2115252128860193E+00, 0.2685204315989660E+00, 0.9043805314343908E-01, 0.1461369444993732E+00, 0.4338965075606848E+00, 0.3881981788190908E+00, 0.1004386157577793E+00, 0.1801598202532681E+00, 0.6963229589638840E+00, 0.6903565688953941E+00, 0.1741934301847783E+00, 0.4507175802324546E-01, 0.1786266232314551E+00, 0.2536031297618502E+00, 0.1200482645536405E+00, 0.1351822623162481E+00, 0.2855738476449996E+00, 0.1565951964743188E+00, 0.6203611145567293E-02, 0.1741812487831326E-01, 0.4396785394072695E+00, 0.4886511254041676E+00, 0.6639071087521134E-01, 0.1227425859208231E+00, 0.9034140763752896E+00, 0.8563793913827676E+00, 0.7570790092830114E-01, 0.1641466407918003E+00, 0.1856765259836430E+01, 0.1908333071910365E+01, 0.2157144528657351E+00, 0.9663383852973971E-01, 0.8548780458707995E+00, 0.9144777845246447E+00, 0.1562335771835849E+00, 0.1798735100772441E-01, 0.1052848766285511E+00, 0.2630781594343725E+00, 0.1757806338135458E+00, 0.5302070335887964E+00, 0.7935225143382671E+00, 0.2653394432718723E+00, 0.2023962522401480E-02, 0.7246963929058098E-03, 0.9500696544845319E-01, 0.1055769055236896E+00, 0.1129463646814219E-01, 0.3016696409481782E-02, 0.2819864744791555E-01, 0.2518195113629758E-01, 0.9786381594178541E-10, 0.2412835834031154E-11, 0.6208618935176568E-03, 0.6208618911048210E-03, 0.1700670967075909E-47, 0.2869551596920546E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 6.2086189110482101E-004, + desigOut: -5.4012504887129591E-021, + sigmaOut: 7.8119962159265674E-005, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 9, + nDivOut: 193, + ttypeOut: -7, + dmin1Out: 2.5181951038433764E-002, + dmin2Out: 8.7297525620826724E-002, + dnOut: 6.2086189110482101E-004, + dn1Out: 2.5181951038433764E-002, + dn2Out: 9.4282269055547374E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2395955612114145E+01, 0.2466725997761544E+01, 0.7077038564739886E-01, 0.5393549207373363E-01, 0.1879940024111348E+01, 0.1842303011581631E+01, 0.1629847954401656E-01, 0.1170659574821484E-01, 0.1323258193751120E+01, 0.1541901897857258E+01, 0.2303502998543534E+00, 0.2097365510789915E+00, 0.1403919102181368E+01, 0.1217882280188454E+01, 0.2369972908607684E-01, 0.1466422291592108E-01, 0.7535654596375009E+00, 0.7390296178356669E+00, 0.1283811140869274E-03, 0.2869551596920546E-03, 0.1651865724265327E+01, 0.1961735651572868E+01, 0.3101568824672333E+00, 0.3344283443049241E-01, 0.2115252128860193E+00, 0.2685204315989660E+00, 0.9043805314343908E-01, 0.1461369444993732E+00, 0.4338965075606848E+00, 0.3881981788190908E+00, 0.1004386157577793E+00, 0.1801598202532681E+00, 0.6963229589638840E+00, 0.6903565688953941E+00, 0.1741934301847783E+00, 0.4507175802324546E-01, 0.1786266232314551E+00, 0.2536031297618502E+00, 0.1200482645536405E+00, 0.1351822623162481E+00, 0.2855738476449996E+00, 0.1565951964743188E+00, 0.6203611145567293E-02, 0.1741812487831326E-01, 0.4396785394072695E+00, 0.4886511254041676E+00, 0.6639071087521134E-01, 0.1227425859208231E+00, 0.9034140763752896E+00, 0.8563793913827676E+00, 0.7570790092830114E-01, 0.1641466407918003E+00, 0.1856765259836430E+01, 0.1908333071910365E+01, 0.2157144528657351E+00, 0.9663383852973971E-01, 0.8548780458707995E+00, 0.9144777845246447E+00, 0.1562335771835849E+00, 0.1798735100772441E-01, 0.1052848766285511E+00, 0.2630781594343725E+00, 0.1757806338135458E+00, 0.5302070335887964E+00, 0.7935225143382671E+00, 0.2653394432718723E+00, 0.2023962522401480E-02, 0.7246963929058098E-03, 0.9500696544845319E-01, 0.1055769055236896E+00, 0.1129463646814219E-01, 0.3016696409481782E-02, 0.2819864744791555E-01, 0.2518195113629758E-01, 0.9786381594178541E-10, 0.2412835834031154E-11, 0.6208618935176568E-03, 0.6208618911048210E-03, 0.1700670967075909E-47, 0.2869551596920546E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 6.2086189110482101E-004, + desig: -5.4012504887129591E-021, + qmax: 1.8900334961849885, + ttype: -7, + dmin1: 2.5181951038433764E-002, + dmin2: 8.7297525620826724E-002, + dn: 6.2086189110482101E-004, + dn1: 2.5181951038433764E-002, + dn2: 9.4282269055547374E-002, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 9, + sigma: 7.8119962159265674E-005, + nDiv: 193, + zOut: []float64{0.2520040627944239E+01, 0.2466725997761544E+01, 0.3943012599746679E-01, 0.5393549207373363E-01, 0.1813958619441340E+01, 0.1842303011581631E+01, 0.9950845630193767E-02, 0.1170659574821484E-01, 0.1741066741415017E+01, 0.1541901897857258E+01, 0.1467114516582776E+00, 0.2097365510789915E+00, 0.1085214189555058E+01, 0.1217882280188454E+01, 0.9986318978978259E-02, 0.1466422291592108E-01, 0.7287093921253419E+00, 0.7390296178356669E+00, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.1993785121145770E+01, 0.1961735651572868E+01, 0.4504038193447841E-02, 0.3344283443049241E-01, 0.4095324760138526E+00, 0.2685204315989660E+00, 0.1385240464077977E+00, 0.1461369444993732E+00, 0.4292130907735224E+00, 0.3881981788190908E+00, 0.2897733504323247E+00, 0.1801598202532681E+00, 0.4450341145952761E+00, 0.6903565688953941E+00, 0.2568418582687495E-01, 0.4507175802324546E-01, 0.3624803443601846E+00, 0.2536031297618502E+00, 0.5840011260368079E-01, 0.1351822623162481E+00, 0.1149923468579125E+00, 0.1565951964743188E+00, 0.7401698075381481E-01, 0.1741812487831326E-01, 0.5367558686801371E+00, 0.4886511254041676E+00, 0.1958324578473516E+00, 0.1227425859208231E+00, 0.8240727124361776E+00, 0.8563793913827676E+00, 0.3801199318200257E+00, 0.1641466407918003E+00, 0.1624226116729040E+01, 0.1908333071910365E+01, 0.5440714051978934E-01, 0.9663383852973971E-01, 0.8774371331215411E+00, 0.9144777845246447E+00, 0.5393069221241477E-02, 0.1798735100772441E-01, 0.7872712619108886E+00, 0.2630781594343725E+00, 0.1786993199393658E+00, 0.5302070335887964E+00, 0.8674395783437358E-01, 0.2653394432718723E+00, 0.8820349511059155E-03, 0.7246963929058098E-03, 0.1070907050910267E+00, 0.1055769055236896E+00, 0.7093640994523618E-03, 0.3016696409481782E-02, 0.2385172514821930E-01, 0.2518195113629758E-01, 0.6280626703238275E-13, 0.2412835834031154E-11, 0.3257377007015450E-14, 0.6208618911048210E-03, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 3.2573770070154495E-015, + desigOut: 2.1703803823424652E-020, + sigmaOut: 6.9898185319802297E-004, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 10, + nDivOut: 214, + ttypeOut: -2, + dmin1Out: 2.3851725145806461E-002, + dmin2Out: 8.6019261441467765E-002, + dnOut: 3.2573770070154495E-015, + dn1Out: 2.3851725145806461E-002, + dn2Out: 0.10407400868154487, + gOut: 0.0000000000000000, + tauOut: 6.2086189103875732E-004, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2520040627944239E+01, 0.2466725997761544E+01, 0.3943012599746679E-01, 0.5393549207373363E-01, 0.1813958619441340E+01, 0.1842303011581631E+01, 0.9950845630193767E-02, 0.1170659574821484E-01, 0.1741066741415017E+01, 0.1541901897857258E+01, 0.1467114516582776E+00, 0.2097365510789915E+00, 0.1085214189555058E+01, 0.1217882280188454E+01, 0.9986318978978259E-02, 0.1466422291592108E-01, 0.7287093921253419E+00, 0.7390296178356669E+00, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.1993785121145770E+01, 0.1961735651572868E+01, 0.4504038193447841E-02, 0.3344283443049241E-01, 0.4095324760138526E+00, 0.2685204315989660E+00, 0.1385240464077977E+00, 0.1461369444993732E+00, 0.4292130907735224E+00, 0.3881981788190908E+00, 0.2897733504323247E+00, 0.1801598202532681E+00, 0.4450341145952761E+00, 0.6903565688953941E+00, 0.2568418582687495E-01, 0.4507175802324546E-01, 0.3624803443601846E+00, 0.2536031297618502E+00, 0.5840011260368079E-01, 0.1351822623162481E+00, 0.1149923468579125E+00, 0.1565951964743188E+00, 0.7401698075381481E-01, 0.1741812487831326E-01, 0.5367558686801371E+00, 0.4886511254041676E+00, 0.1958324578473516E+00, 0.1227425859208231E+00, 0.8240727124361776E+00, 0.8563793913827676E+00, 0.3801199318200257E+00, 0.1641466407918003E+00, 0.1624226116729040E+01, 0.1908333071910365E+01, 0.5440714051978934E-01, 0.9663383852973971E-01, 0.8774371331215411E+00, 0.9144777845246447E+00, 0.5393069221241477E-02, 0.1798735100772441E-01, 0.7872712619108886E+00, 0.2630781594343725E+00, 0.1786993199393658E+00, 0.5302070335887964E+00, 0.8674395783437358E-01, 0.2653394432718723E+00, 0.8820349511059155E-03, 0.7246963929058098E-03, 0.1070907050910267E+00, 0.1055769055236896E+00, 0.7093640994523618E-03, 0.3016696409481782E-02, 0.2385172514821930E-01, 0.2518195113629758E-01, 0.6280626703238275E-13, 0.2412835834031154E-11, 0.3257377007015450E-14, 0.6208618911048210E-03, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 3.2573770070154495E-015, + desig: 2.1703803823424652E-020, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 2.3851725145806461E-002, + dmin2: 8.6019261441467765E-002, + dn: 3.2573770070154495E-015, + dn1: 2.3851725145806461E-002, + dn2: 0.10407400868154487, + g: 0.0000000000000000, + tau: 6.2086189103875732E-004, + nFail: 0, + iter: 10, + sigma: 6.9898185319802297E-004, + nDiv: 214, + zOut: []float64{0.2520040627944239E+01, 0.2559470753941703E+01, 0.3943012599746679E-01, 0.2794508075882943E-01, 0.1813958619441340E+01, 0.1795964384312701E+01, 0.9950845630193767E-02, 0.9646675917972324E-02, 0.1741066741415017E+01, 0.1878131517155319E+01, 0.1467114516582776E+00, 0.8477220453173254E-01, 0.1085214189555058E+01, 0.1010428304002300E+01, 0.9986318978978259E-02, 0.7202019583097946E-02, 0.7287093921253419E+00, 0.7222798755087921E+00, 0.7725029665513934E-03, 0.2132421202606784E-02, 0.1993785121145770E+01, 0.1996156738136608E+01, 0.4504038193447841E-02, 0.9240506410060376E-03, 0.4095324760138526E+00, 0.5471324717806409E+00, 0.1385240464077977E+00, 0.1086689918286978E+00, 0.4292130907735224E+00, 0.6103174493771462E+00, 0.2897733504323247E+00, 0.2112982785836522E+00, 0.4450341145952761E+00, 0.2594200218384955E+00, 0.2568418582687495E-01, 0.3588779484774172E-01, 0.3624803443601846E+00, 0.3849926621161204E+00, 0.5840011260368079E-01, 0.1744336104525046E-01, 0.1149923468579125E+00, 0.1715659665664736E+00, 0.7401698075381481E-01, 0.2315671901408358E+00, 0.5367558686801371E+00, 0.5010211363866497E+00, 0.1958324578473516E+00, 0.3221025481782661E+00, 0.8240727124361776E+00, 0.8820900960779340E+00, 0.3801199318200257E+00, 0.6999293195746292E+00, 0.1624226116729040E+01, 0.9787039376741966E+00, 0.5440714051978934E-01, 0.4877761656142095E-01, 0.8774371331215411E+00, 0.8340525857813585E+00, 0.5393069221241477E-02, 0.5090576402208483E-02, 0.7872712619108886E+00, 0.9608800054480426E+00, 0.1786993199393658E+00, 0.1613217694817542E-01, 0.8674395783437358E-01, 0.7149381583730083E-01, 0.8820349511059155E-03, 0.1321201613351008E-02, 0.1070907050910267E+00, 0.1064788675771248E+00, 0.7093640994523618E-03, 0.1589006148839502E-03, 0.2385172514821930E-01, 0.2369282453339490E-01, 0.6280626703238275E-13, 0.8634837515442557E-26, 0.3257377007015450E-14, 0.9466330862652142E-28, 0.7725029665513934E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 20, + ppOut: 0, + dminOut: 9.4663308626521417E-029, + desigOut: 2.1703795093889875E-020, + sigmaOut: 6.9898185320128035E-004, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 11, + nDivOut: 235, + ttypeOut: -2, + dmin1Out: 2.3692824533332088E-002, + dmin2Out: 7.0611780886194908E-002, + dnOut: 9.4663308626521417E-029, + dn1Out: 2.3692824533332088E-002, + dn2Out: 0.10576950347767239, + gOut: 0.0000000000000000, + tauOut: 3.2573770070067200E-015, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2520040627944239E+01, 0.2559470753941703E+01, 0.3943012599746679E-01, 0.2794508075882943E-01, 0.1813958619441340E+01, 0.1795964384312701E+01, 0.9950845630193767E-02, 0.9646675917972324E-02, 0.1741066741415017E+01, 0.1878131517155319E+01, 0.1467114516582776E+00, 0.8477220453173254E-01, 0.1085214189555058E+01, 0.1010428304002300E+01, 0.9986318978978259E-02, 0.7202019583097946E-02, 0.7287093921253419E+00, 0.7222798755087921E+00, 0.7725029665513934E-03, 0.2132421202606784E-02, 0.1993785121145770E+01, 0.1996156738136608E+01, 0.4504038193447841E-02, 0.9240506410060376E-03, 0.4095324760138526E+00, 0.5471324717806409E+00, 0.1385240464077977E+00, 0.1086689918286978E+00, 0.4292130907735224E+00, 0.6103174493771462E+00, 0.2897733504323247E+00, 0.2112982785836522E+00, 0.4450341145952761E+00, 0.2594200218384955E+00, 0.2568418582687495E-01, 0.3588779484774172E-01, 0.3624803443601846E+00, 0.3849926621161204E+00, 0.5840011260368079E-01, 0.1744336104525046E-01, 0.1149923468579125E+00, 0.1715659665664736E+00, 0.7401698075381481E-01, 0.2315671901408358E+00, 0.5367558686801371E+00, 0.5010211363866497E+00, 0.1958324578473516E+00, 0.3221025481782661E+00, 0.8240727124361776E+00, 0.8820900960779340E+00, 0.3801199318200257E+00, 0.6999293195746292E+00, 0.1624226116729040E+01, 0.9787039376741966E+00, 0.5440714051978934E-01, 0.4877761656142095E-01, 0.8774371331215411E+00, 0.8340525857813585E+00, 0.5393069221241477E-02, 0.5090576402208483E-02, 0.7872712619108886E+00, 0.9608800054480426E+00, 0.1786993199393658E+00, 0.1613217694817542E-01, 0.8674395783437358E-01, 0.7149381583730083E-01, 0.8820349511059155E-03, 0.1321201613351008E-02, 0.1070907050910267E+00, 0.1064788675771248E+00, 0.7093640994523618E-03, 0.1589006148839502E-03, 0.2385172514821930E-01, 0.2369282453339490E-01, 0.6280626703238275E-13, 0.8634837515442557E-26, 0.3257377007015450E-14, 0.9466330862652142E-28, 0.7725029665513934E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 9.4663308626521417E-029, + desig: 2.1703795093889875E-020, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 2.3692824533332088E-002, + dmin2: 7.0611780886194908E-002, + dn: 9.4663308626521417E-029, + dn1: 2.3692824533332088E-002, + dn2: 0.10576950347767239, + g: 0.0000000000000000, + tau: 3.2573770070067200E-015, + nFail: 0, + iter: 11, + sigma: 6.9898185320128035E-004, + nDiv: 235, + zOut: []float64{0.2587415834700532E+01, 0.2559470753941703E+01, 0.1939710234687058E-01, 0.2794508075882943E-01, 0.1786213957883803E+01, 0.1795964384312701E+01, 0.1014308840067055E-01, 0.9646675917972324E-02, 0.1952760633286381E+01, 0.1878131517155319E+01, 0.4386417535844126E-01, 0.8477220453173254E-01, 0.9737661482269571E+00, 0.1010428304002300E+01, 0.5342015449359675E-02, 0.7202019583097946E-02, 0.7190702812620393E+00, 0.7222798755087921E+00, 0.5919653562455767E-02, 0.2132421202606784E-02, 0.1991161135215158E+01, 0.1996156738136608E+01, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.6555475524103290E+00, 0.5471324717806409E+00, 0.1011712753337584E+00, 0.1086689918286978E+00, 0.7204444526270400E+00, 0.6103174493771462E+00, 0.7608498315828412E-01, 0.2112982785836522E+00, 0.2192228335279531E+00, 0.2594200218384955E+00, 0.6302508481237896E-01, 0.3588779484774172E-01, 0.3394109383489919E+00, 0.3849926621161204E+00, 0.8817297145618809E-02, 0.1744336104525046E-01, 0.3943158595616905E+00, 0.1715659665664736E+00, 0.2942312715577539E+00, 0.2315671901408358E+00, 0.5288924130071619E+00, 0.5010211363866497E+00, 0.5372046576619481E+00, 0.3221025481782661E+00, 0.1044814757990615E+01, 0.8820900960779340E+00, 0.6556411803358774E+00, 0.6999293195746292E+00, 0.3718403738997403E+00, 0.9787039376741966E+00, 0.1094101127175453E+00, 0.4877761656142095E-01, 0.7297330494660218E+00, 0.8340525857813585E+00, 0.6703044469024726E-02, 0.5090576402208483E-02, 0.9703091379271934E+00, 0.9608800054480426E+00, 0.1188642714683105E-02, 0.1613217694817542E-01, 0.7162637473596872E-01, 0.7149381583730083E-01, 0.1964081696850700E-02, 0.1321201613351008E-02, 0.1046736864951580E+00, 0.1064788675771248E+00, 0.3596705640885345E-04, 0.1589006148839502E-03, 0.2365685747698604E-01, 0.2369282453339490E-01, 0.3455244592226135E-52, 0.8634837515442557E-26, 0.9466330862652142E-28, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 20, + ppOut: 1, + dminOut: 9.4663308626521417E-029, + desigOut: 2.1703795093889875E-020, + sigmaOut: 6.9898185320128035E-004, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 12, + nDivOut: 256, + ttypeOut: -2, + dmin1Out: 2.3656857476986041E-002, + dmin2Out: 7.0305173122617720E-002, + dnOut: 9.4663308626521417E-029, + dn1Out: 2.3656857476986041E-002, + dn2Out: 0.10451478588027406, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 20, + z: []float64{0.2587415834700532E+01, 0.2559470753941703E+01, 0.1939710234687058E-01, 0.2794508075882943E-01, 0.1786213957883803E+01, 0.1795964384312701E+01, 0.1014308840067055E-01, 0.9646675917972324E-02, 0.1952760633286381E+01, 0.1878131517155319E+01, 0.4386417535844126E-01, 0.8477220453173254E-01, 0.9737661482269571E+00, 0.1010428304002300E+01, 0.5342015449359675E-02, 0.7202019583097946E-02, 0.7190702812620393E+00, 0.7222798755087921E+00, 0.5919653562455767E-02, 0.2132421202606784E-02, 0.1991161135215158E+01, 0.1996156738136608E+01, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.6555475524103290E+00, 0.5471324717806409E+00, 0.1011712753337584E+00, 0.1086689918286978E+00, 0.7204444526270400E+00, 0.6103174493771462E+00, 0.7608498315828412E-01, 0.2112982785836522E+00, 0.2192228335279531E+00, 0.2594200218384955E+00, 0.6302508481237896E-01, 0.3588779484774172E-01, 0.3394109383489919E+00, 0.3849926621161204E+00, 0.8817297145618809E-02, 0.1744336104525046E-01, 0.3943158595616905E+00, 0.1715659665664736E+00, 0.2942312715577539E+00, 0.2315671901408358E+00, 0.5288924130071619E+00, 0.5010211363866497E+00, 0.5372046576619481E+00, 0.3221025481782661E+00, 0.1044814757990615E+01, 0.8820900960779340E+00, 0.6556411803358774E+00, 0.6999293195746292E+00, 0.3718403738997403E+00, 0.9787039376741966E+00, 0.1094101127175453E+00, 0.4877761656142095E-01, 0.7297330494660218E+00, 0.8340525857813585E+00, 0.6703044469024726E-02, 0.5090576402208483E-02, 0.9703091379271934E+00, 0.9608800054480426E+00, 0.1188642714683105E-02, 0.1613217694817542E-01, 0.7162637473596872E-01, 0.7149381583730083E-01, 0.1964081696850700E-02, 0.1321201613351008E-02, 0.1046736864951580E+00, 0.1064788675771248E+00, 0.3596705640885345E-04, 0.1589006148839502E-03, 0.2365685747698604E-01, 0.2369282453339490E-01, 0.3455244592226135E-52, 0.8634837515442557E-26, 0.9466330862652142E-28, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 9.4663308626521417E-029, + desig: 2.1703795093889875E-020, + qmax: 1.8900334961849885, + ttype: -2, + dmin1: 2.3656857476986041E-002, + dmin2: 7.0305173122617720E-002, + dn: 9.4663308626521417E-029, + dn1: 2.3656857476986041E-002, + dn2: 0.10451478588027406, + g: 0.0000000000000000, + tau: 0.0000000000000000, + nFail: 0, + iter: 12, + sigma: 6.9898185320128035E-004, + nDiv: 256, + zOut: []float64{0.2587415834700532E+01, 0.2594984508308910E+01, 0.1939710234687058E-01, 0.1335166928493912E-01, 0.1786213957883803E+01, 0.1771176948261041E+01, 0.1014308840067055E-01, 0.1118297285215907E-01, 0.1952760633286381E+01, 0.1973613407054170E+01, 0.4386417535844126E-01, 0.2164225725832272E-01, 0.9737661482269571E+00, 0.9456374776795010E+00, 0.5342015449359675E-02, 0.4062111160297227E-02, 0.7190702812620393E+00, 0.7090993949257048E+00, 0.5919653562455767E-02, 0.1662247097070905E-01, 0.1991161135215158E+01, 0.1962964146704966E+01, 0.2539111990097616E-03, 0.8479567256479229E-04, 0.6555475524103290E+00, 0.7448056033330296E+00, 0.1011712753337584E+00, 0.9786215859981671E-01, 0.7204444526270400E+00, 0.6868388484470145E+00, 0.7608498315828412E-01, 0.2428454015756268E-01, 0.2192228335279531E+00, 0.2461349494442763E+00, 0.6302508481237896E-01, 0.8690924724014965E-01, 0.3394109383489919E+00, 0.2494905595159681E+00, 0.8817297145618809E-02, 0.1393559784278329E-01, 0.3943158595616905E+00, 0.6627831045381681E+00, 0.2942312715577539E+00, 0.2347927793131975E+00, 0.5288924130071619E+00, 0.8194758626174196E+00, 0.5372046576619481E+00, 0.6849248159595133E+00, 0.1044814757990615E+01, 0.1003702693628486E+01, 0.6556411803358774E+00, 0.2428944977310168E+00, 0.3718403738997403E+00, 0.2265275601477758E+00, 0.1094101127175453E+00, 0.3524523689025369E+00, 0.7297330494660218E+00, 0.3721552962940165E+00, 0.6703044469024726E-02, 0.1747664312451059E-01, 0.9703091379271934E+00, 0.9421927087788731E+00, 0.1188642714683105E-02, 0.9036173567869616E-04, 0.7162637473596872E-01, 0.6167166595864771E-01, 0.1964081696850700E-02, 0.3333583884775863E-02, 0.1046736864951580E+00, 0.8954764092829798E-01, 0.3596705640885345E-04, 0.9501841907954501E-05, 0.2365685747698604E-01, 0.1181892689658507E-01, 0.3455244592226135E-52, 0.8479567256479229E-04, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 19, + ppOut: 0, + dminOut: 1.1818926896585069E-002, + desigOut: 3.4696444683954120E-019, + sigmaOut: 1.2527410591694300E-002, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 13, + nDivOut: 276, + ttypeOut: -9, + dmin1Out: 5.9707584261797009E-002, + dmin2Out: 5.9707584261797009E-002, + dnOut: 1.1818926896585069E-002, + dn1Out: 8.9511673871889130E-002, + dn2Out: 5.9707584261797009E-002, + gOut: 0.0000000000000000, + tauOut: 1.1828428738493020E-002, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2587415834700532E+01, 0.2594984508308910E+01, 0.1939710234687058E-01, 0.1335166928493912E-01, 0.1786213957883803E+01, 0.1771176948261041E+01, 0.1014308840067055E-01, 0.1118297285215907E-01, 0.1952760633286381E+01, 0.1973613407054170E+01, 0.4386417535844126E-01, 0.2164225725832272E-01, 0.9737661482269571E+00, 0.9456374776795010E+00, 0.5342015449359675E-02, 0.4062111160297227E-02, 0.7190702812620393E+00, 0.7090993949257048E+00, 0.5919653562455767E-02, 0.1662247097070905E-01, 0.1991161135215158E+01, 0.1962964146704966E+01, 0.2539111990097616E-03, 0.8479567256479229E-04, 0.6555475524103290E+00, 0.7448056033330296E+00, 0.1011712753337584E+00, 0.9786215859981671E-01, 0.7204444526270400E+00, 0.6868388484470145E+00, 0.7608498315828412E-01, 0.2428454015756268E-01, 0.2192228335279531E+00, 0.2461349494442763E+00, 0.6302508481237896E-01, 0.8690924724014965E-01, 0.3394109383489919E+00, 0.2494905595159681E+00, 0.8817297145618809E-02, 0.1393559784278329E-01, 0.3943158595616905E+00, 0.6627831045381681E+00, 0.2942312715577539E+00, 0.2347927793131975E+00, 0.5288924130071619E+00, 0.8194758626174196E+00, 0.5372046576619481E+00, 0.6849248159595133E+00, 0.1044814757990615E+01, 0.1003702693628486E+01, 0.6556411803358774E+00, 0.2428944977310168E+00, 0.3718403738997403E+00, 0.2265275601477758E+00, 0.1094101127175453E+00, 0.3524523689025369E+00, 0.7297330494660218E+00, 0.3721552962940165E+00, 0.6703044469024726E-02, 0.1747664312451059E-01, 0.9703091379271934E+00, 0.9421927087788731E+00, 0.1188642714683105E-02, 0.9036173567869616E-04, 0.7162637473596872E-01, 0.6167166595864771E-01, 0.1964081696850700E-02, 0.3333583884775863E-02, 0.1046736864951580E+00, 0.8954764092829798E-01, 0.3596705640885345E-04, 0.9501841907954501E-05, 0.2365685747698604E-01, 0.1181892689658507E-01, 0.3455244592226135E-52, 0.8479567256479229E-04, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 1.1818926896585069E-002, + desig: 3.4696444683954120E-019, + qmax: 1.8900334961849885, + ttype: -9, + dmin1: 5.9707584261797009E-002, + dmin2: 5.9707584261797009E-002, + dn: 1.1818926896585069E-002, + dn1: 8.9511673871889130E-002, + dn2: 5.9707584261797009E-002, + g: 0.0000000000000000, + tau: 1.1828428738493020E-002, + nFail: 0, + iter: 13, + sigma: 1.2527410591694300E-002, + nDiv: 276, + zOut: []float64{0.2596646703688871E+01, 0.2594984508308910E+01, 0.9107195378059658E-02, 0.1335166928493912E-01, 0.1761563251830163E+01, 0.1771176948261041E+01, 0.1252913577120413E-01, 0.1118297285215907E-01, 0.1971037054636311E+01, 0.1973613407054170E+01, 0.1038322923301279E-01, 0.2164225725832272E-01, 0.9276268857018078E+00, 0.9456374776795010E+00, 0.3105171497598932E-02, 0.4062111160297227E-02, 0.7109272204938374E+00, 0.7090993949257048E+00, 0.4589684232723624E-01, 0.1662247097070905E-01, 0.1905462626145317E+01, 0.1962964146704966E+01, 0.3314486004504485E-04, 0.8479567256479229E-04, 0.8309451431678238E+00, 0.7448056033330296E+00, 0.8089045693556918E-01, 0.9786215859981671E-01, 0.6185434577640304E+00, 0.6868388484470145E+00, 0.9663466631053550E-02, 0.2428454015756268E-01, 0.3116912561483949E+00, 0.2461349494442763E+00, 0.6956575230565126E-01, 0.8690924724014965E-01, 0.1821709311481225E+00, 0.2494905595159681E+00, 0.5070116699532772E-01, 0.1393559784278329E-01, 0.8351852429510604E+00, 0.6627831045381681E+00, 0.2303764547900405E+00, 0.2347927793131975E+00, 0.1262334749881915E+01, 0.8194758626174196E+00, 0.5445947541061251E+00, 0.6849248159595133E+00, 0.6903129633483998E+00, 0.1003702693628486E+01, 0.7970630839299049E-01, 0.2428944977310168E+00, 0.4875841467523446E+00, 0.2265275601477758E+00, 0.2690141110044630E+00, 0.3524523689025369E+00, 0.1089283545090865E+00, 0.3721552962940165E+00, 0.1511669372043137E+00, 0.1747664312451059E-01, 0.7794266594052606E+00, 0.9421927087788731E+00, 0.7149818024536710E-05, 0.9036173567869616E-04, 0.5330862612042146E-01, 0.6167166595864771E-01, 0.5599742376476567E-02, 0.3333583884775863E-02, 0.7226792648875177E-01, 0.8954764092829798E-01, 0.1553961492315709E-05, 0.9501841907954501E-05, 0.1278990301151681E-03, 0.1181892689658507E-01, 0.7149818024536710E-05, 0.8479567256479229E-04, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 19, + ppOut: 1, + dminOut: 1.2789903011516807E-004, + desigOut: 0.0000000000000000, + sigmaOut: 2.4216884496671885E-002, + qmaxOut: 1.8900334961849885, + nFailOut: 0, + iterOut: 14, + nDivOut: 296, + ttypeOut: -4, + dmin1Out: 4.9975042235645591E-002, + dmin2Out: 4.9975042235645591E-002, + dnOut: 1.2789903011516807E-004, + dn1Out: 7.2258424646843816E-002, + dn2Out: 4.9975042235645591E-002, + gOut: 0.0000000000000000, + tauOut: 1.1689473904977585E-002, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2596646703688871E+01, 0.2594984508308910E+01, 0.9107195378059658E-02, 0.1335166928493912E-01, 0.1761563251830163E+01, 0.1771176948261041E+01, 0.1252913577120413E-01, 0.1118297285215907E-01, 0.1971037054636311E+01, 0.1973613407054170E+01, 0.1038322923301279E-01, 0.2164225725832272E-01, 0.9276268857018078E+00, 0.9456374776795010E+00, 0.3105171497598932E-02, 0.4062111160297227E-02, 0.7109272204938374E+00, 0.7090993949257048E+00, 0.4589684232723624E-01, 0.1662247097070905E-01, 0.1905462626145317E+01, 0.1962964146704966E+01, 0.3314486004504485E-04, 0.8479567256479229E-04, 0.8309451431678238E+00, 0.7448056033330296E+00, 0.8089045693556918E-01, 0.9786215859981671E-01, 0.6185434577640304E+00, 0.6868388484470145E+00, 0.9663466631053550E-02, 0.2428454015756268E-01, 0.3116912561483949E+00, 0.2461349494442763E+00, 0.6956575230565126E-01, 0.8690924724014965E-01, 0.1821709311481225E+00, 0.2494905595159681E+00, 0.5070116699532772E-01, 0.1393559784278329E-01, 0.8351852429510604E+00, 0.6627831045381681E+00, 0.2303764547900405E+00, 0.2347927793131975E+00, 0.1262334749881915E+01, 0.8194758626174196E+00, 0.5445947541061251E+00, 0.6849248159595133E+00, 0.6903129633483998E+00, 0.1003702693628486E+01, 0.7970630839299049E-01, 0.2428944977310168E+00, 0.4875841467523446E+00, 0.2265275601477758E+00, 0.2690141110044630E+00, 0.3524523689025369E+00, 0.1089283545090865E+00, 0.3721552962940165E+00, 0.1511669372043137E+00, 0.1747664312451059E-01, 0.7794266594052606E+00, 0.9421927087788731E+00, 0.7149818024536710E-05, 0.9036173567869616E-04, 0.5330862612042146E-01, 0.6167166595864771E-01, 0.5599742376476567E-02, 0.3333583884775863E-02, 0.7226792648875177E-01, 0.8954764092829798E-01, 0.1553961492315709E-05, 0.9501841907954501E-05, 0.1278990301151681E-03, 0.1181892689658507E-01, 0.7149818024536710E-05, 0.8479567256479229E-04, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 1.2789903011516807E-004, + desig: 0.0000000000000000, + qmax: 1.8900334961849885, + ttype: -4, + dmin1: 4.9975042235645591E-002, + dmin2: 4.9975042235645591E-002, + dn: 1.2789903011516807E-004, + dn1: 7.2258424646843816E-002, + dn2: 4.9975042235645591E-002, + g: 0.0000000000000000, + tau: 1.1689473904977585E-002, + nFail: 0, + iter: 14, + sigma: 2.4216884496671885E-002, + nDiv: 296, + zOut: []float64{0.2596646703688871E+01, 0.2605626003858251E+01, 0.9107195378059658E-02, 0.6157023564192275E-02, 0.1761563251830163E+01, 0.1767807468828494E+01, 0.1252913577120413E-01, 0.1396950250695455E-01, 0.1971037054636311E+01, 0.1967322886153689E+01, 0.1038322923301279E-01, 0.4895872794820515E-02, 0.9276268857018078E+00, 0.9257082891959054E+00, 0.3105171497598932E-02, 0.2384715539127593E-02, 0.7109272204938374E+00, 0.7543114520732653E+00, 0.4589684232723624E-01, 0.1159397984377132E+00, 0.1905462626145317E+01, 0.1789428077358968E+01, 0.3314486004504485E-04, 0.1539126429493388E-04, 0.8309451431678238E+00, 0.9116923136304173E+00, 0.8089045693556918E-01, 0.5488064578914756E-01, 0.6185434577640304E+00, 0.5731983833972557E+00, 0.9663466631053550E-02, 0.5254756712901782E-02, 0.3116912561483949E+00, 0.3758743565324636E+00, 0.6956575230565126E-01, 0.3371567560620648E-01, 0.1821709311481225E+00, 0.1990285273285630E+00, 0.5070116699532772E-01, 0.2127577741907859E+00, 0.8351852429510604E+00, 0.8526760283416343E+00, 0.2303764547900405E+00, 0.3410582621885915E+00, 0.1262334749881915E+01, 0.1465743346590768E+01, 0.5445947541061251E+00, 0.2564847518533230E+00, 0.6903129633483998E+00, 0.5134066246793865E+00, 0.7970630839299049E-01, 0.7569737222001199E-01, 0.4875841467523446E+00, 0.6807729903281149E+00, 0.2690141110044630E+00, 0.4304410555024735E-01, 0.1089283545090865E+00, 0.2169232909544721E+00, 0.1511669372043137E+00, 0.5431576312495270E+00, 0.7794266594052606E+00, 0.2361482827650774E+00, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.5330862612042146E-01, 0.5877885927277143E-01, 0.5599742376476567E-02, 0.6884818375619963E-02, 0.7226792648875177E-01, 0.6525676686594341E-01, 0.1553961492315709E-05, 0.3045663725752605E-08, 0.1278990301151681E-03, 0.7757707209639971E-09, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 19, + ppOut: 0, + dminOut: 7.7577072096399712E-010, + desigOut: -5.4210108624275222E-020, + sigmaOut: 2.4344779705352607E-002, + qmaxOut: 1.8900334961849885, + nFailOut: 1, + iterOut: 16, + nDivOut: 336, + ttypeOut: -15, + dmin1Out: 5.3179116896294863E-002, + dmin2Out: 5.3179116896294863E-002, + dnOut: 7.7577072096399712E-010, + dn1Out: 6.5255212904451090E-002, + dn2Out: 5.3179116896294863E-002, + gOut: 0.0000000000000000, + tauOut: 1.2789520868072135E-004, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2596646703688871E+01, 0.2605626003858251E+01, 0.9107195378059658E-02, 0.6157023564192275E-02, 0.1761563251830163E+01, 0.1767807468828494E+01, 0.1252913577120413E-01, 0.1396950250695455E-01, 0.1971037054636311E+01, 0.1967322886153689E+01, 0.1038322923301279E-01, 0.4895872794820515E-02, 0.9276268857018078E+00, 0.9257082891959054E+00, 0.3105171497598932E-02, 0.2384715539127593E-02, 0.7109272204938374E+00, 0.7543114520732653E+00, 0.4589684232723624E-01, 0.1159397984377132E+00, 0.1905462626145317E+01, 0.1789428077358968E+01, 0.3314486004504485E-04, 0.1539126429493388E-04, 0.8309451431678238E+00, 0.9116923136304173E+00, 0.8089045693556918E-01, 0.5488064578914756E-01, 0.6185434577640304E+00, 0.5731983833972557E+00, 0.9663466631053550E-02, 0.5254756712901782E-02, 0.3116912561483949E+00, 0.3758743565324636E+00, 0.6956575230565126E-01, 0.3371567560620648E-01, 0.1821709311481225E+00, 0.1990285273285630E+00, 0.5070116699532772E-01, 0.2127577741907859E+00, 0.8351852429510604E+00, 0.8526760283416343E+00, 0.2303764547900405E+00, 0.3410582621885915E+00, 0.1262334749881915E+01, 0.1465743346590768E+01, 0.5445947541061251E+00, 0.2564847518533230E+00, 0.6903129633483998E+00, 0.5134066246793865E+00, 0.7970630839299049E-01, 0.7569737222001199E-01, 0.4875841467523446E+00, 0.6807729903281149E+00, 0.2690141110044630E+00, 0.4304410555024735E-01, 0.1089283545090865E+00, 0.2169232909544721E+00, 0.1511669372043137E+00, 0.5431576312495270E+00, 0.7794266594052606E+00, 0.2361482827650774E+00, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.5330862612042146E-01, 0.5877885927277143E-01, 0.5599742376476567E-02, 0.6884818375619963E-02, 0.7226792648875177E-01, 0.6525676686594341E-01, 0.1553961492315709E-05, 0.3045663725752605E-08, 0.1278990301151681E-03, 0.7757707209639971E-09, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 7.7577072096399712E-010, + desig: -5.4210108624275222E-020, + qmax: 1.8900334961849885, + ttype: -15, + dmin1: 5.3179116896294863E-002, + dmin2: 5.3179116896294863E-002, + dn: 7.7577072096399712E-010, + dn1: 6.5255212904451090E-002, + dn2: 5.3179116896294863E-002, + g: 0.0000000000000000, + tau: 1.2789520868072135E-004, + nFail: 1, + iter: 16, + sigma: 2.4344779705352607E-002, + nDiv: 336, + zOut: []float64{0.2611783026646672E+01, 0.2605626003858251E+01, 0.4167433562238479E-02, 0.6157023564192275E-02, 0.1777609536997439E+01, 0.1767807468828494E+01, 0.1546038171944878E-01, 0.1396950250695455E-01, 0.1956758376453290E+01, 0.1967322886153689E+01, 0.2316152103168096E-02, 0.4895872794820515E-02, 0.9257768518560943E+00, 0.9257082891959054E+00, 0.1943036529261404E-02, 0.2384715539127593E-02, 0.8683082132059464E+00, 0.7543114520732653E+00, 0.2389312083572061E+00, 0.1159397984377132E+00, 0.1550512259490286E+01, 0.1789428077358968E+01, 0.9049975109102588E-05, 0.1539126429493388E-04, 0.9665639086686850E+00, 0.9116923136304173E+00, 0.3254569838994440E-01, 0.5488064578914756E-01, 0.5459074409444424E+00, 0.5731983833972557E+00, 0.3618064437406363E-02, 0.5254756712901782E-02, 0.4059719669254931E+00, 0.3758743565324636E+00, 0.1652917395900484E-01, 0.3371567560620648E-01, 0.3952571267845734E+00, 0.1990285273285630E+00, 0.4589757947481138E+00, 0.2127577741907859E+00, 0.7347584950063413E+00, 0.8526760283416343E+00, 0.6803648845168142E+00, 0.3410582621885915E+00, 0.1041863213151506E+01, 0.1465743346590768E+01, 0.1263898840735783E+00, 0.2564847518533230E+00, 0.4627141120500496E+00, 0.5134066246793865E+00, 0.1113705527974558E+00, 0.7569737222001199E-01, 0.6124465423051357E+00, 0.6807729903281149E+00, 0.1524585149425051E-01, 0.4304410555024735E-01, 0.7448350699339780E+00, 0.2169232909544721E+00, 0.1722069046798406E+00, 0.5431576312495270E+00, 0.6394299132491200E-01, 0.2361482827650774E+00, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6566219320748727E-01, 0.5877885927277143E-01, 0.6842308575232983E-02, 0.6884818375619963E-02, 0.5841446056060346E-01, 0.6525676686594341E-01, 0.4044780558898965E-16, 0.3045663725752605E-08, 0.1013559914197710E-18, 0.7757707209639971E-09, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 19, + ppOut: 1, + dminOut: 1.0135599141977102E-019, + desigOut: 2.7104744119407903E-020, + sigmaOut: 2.4344780481123287E-002, + qmaxOut: 1.8900334961849885, + nFailOut: 2, + iterOut: 18, + nDivOut: 376, + ttypeOut: -15, + dmin1Out: 5.8414457514939733E-002, + dmin2Out: 5.8777374831867304E-002, + dnOut: 1.0135599141977102E-019, + dn1Out: 5.8414457514939733E-002, + dn2Out: 5.8777374831867304E-002, + gOut: 0.0000000000000000, + tauOut: 7.7577068041483555E-010, + }, + { + i0: 1, + n0: 19, + z: []float64{0.2611783026646672E+01, 0.2605626003858251E+01, 0.4167433562238479E-02, 0.6157023564192275E-02, 0.1777609536997439E+01, 0.1767807468828494E+01, 0.1546038171944878E-01, 0.1396950250695455E-01, 0.1956758376453290E+01, 0.1967322886153689E+01, 0.2316152103168096E-02, 0.4895872794820515E-02, 0.9257768518560943E+00, 0.9257082891959054E+00, 0.1943036529261404E-02, 0.2384715539127593E-02, 0.8683082132059464E+00, 0.7543114520732653E+00, 0.2389312083572061E+00, 0.1159397984377132E+00, 0.1550512259490286E+01, 0.1789428077358968E+01, 0.9049975109102588E-05, 0.1539126429493388E-04, 0.9665639086686850E+00, 0.9116923136304173E+00, 0.3254569838994440E-01, 0.5488064578914756E-01, 0.5459074409444424E+00, 0.5731983833972557E+00, 0.3618064437406363E-02, 0.5254756712901782E-02, 0.4059719669254931E+00, 0.3758743565324636E+00, 0.1652917395900484E-01, 0.3371567560620648E-01, 0.3952571267845734E+00, 0.1990285273285630E+00, 0.4589757947481138E+00, 0.2127577741907859E+00, 0.7347584950063413E+00, 0.8526760283416343E+00, 0.6803648845168142E+00, 0.3410582621885915E+00, 0.1041863213151506E+01, 0.1465743346590768E+01, 0.1263898840735783E+00, 0.2564847518533230E+00, 0.4627141120500496E+00, 0.5134066246793865E+00, 0.1113705527974558E+00, 0.7569737222001199E-01, 0.6124465423051357E+00, 0.6807729903281149E+00, 0.1524585149425051E-01, 0.4304410555024735E-01, 0.7448350699339780E+00, 0.2169232909544721E+00, 0.1722069046798406E+00, 0.5431576312495270E+00, 0.6394299132491200E-01, 0.2361482827650774E+00, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6566219320748727E-01, 0.5877885927277143E-01, 0.6842308575232983E-02, 0.6884818375619963E-02, 0.5841446056060346E-01, 0.6525676686594341E-01, 0.4044780558898965E-16, 0.3045663725752605E-08, 0.1013559914197710E-18, 0.7757707209639971E-09, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 1.0135599141977102E-019, + desig: 2.7104744119407903E-020, + qmax: 1.8900334961849885, + ttype: -15, + dmin1: 5.8414457514939733E-002, + dmin2: 5.8777374831867304E-002, + dn: 1.0135599141977102E-019, + dn1: 5.8414457514939733E-002, + dn2: 5.8777374831867304E-002, + g: 0.0000000000000000, + tau: 7.7577068041483555E-010, + nFail: 2, + iter: 18, + sigma: 2.4344780481123287E-002, + nDiv: 376, + zOut: []float64{0.2611783026646672E+01, 0.2615950460208911E+01, 0.4167433562238479E-02, 0.2831884532112553E-02, 0.1777609536997439E+01, 0.1790238034184775E+01, 0.1546038171944878E-01, 0.1689844079671380E-01, 0.1956758376453290E+01, 0.1942176087759744E+01, 0.2316152103168096E-02, 0.1104039956008399E-02, 0.9257768518560943E+00, 0.9266158484293474E+00, 0.1943036529261404E-02, 0.1820770257466081E-02, 0.8683082132059464E+00, 0.1105418651305687E+01, 0.2389312083572061E+00, 0.3351361651941490E+00, 0.1550512259490286E+01, 0.1215385144271246E+01, 0.9049975109102588E-05, 0.7197207696703830E-05, 0.9665639086686850E+00, 0.9991024098509327E+00, 0.3254569838994440E-01, 0.1778290067827487E-01, 0.5459074409444424E+00, 0.5317426047035739E+00, 0.3618064437406363E-02, 0.2762300261676148E-02, 0.4059719669254931E+00, 0.4197388406228219E+00, 0.1652917395900484E-01, 0.1556509232613395E-01, 0.3952571267845734E+00, 0.8386678292065533E+00, 0.4589757947481138E+00, 0.4021095747913879E+00, 0.7347584950063413E+00, 0.1013013804731768E+01, 0.6803648845168142E+00, 0.6997408538631263E+00, 0.1041863213151506E+01, 0.4685122433619579E+00, 0.1263898840735783E+00, 0.1248257304047288E+00, 0.4627141120500496E+00, 0.4492589344427766E+00, 0.1113705527974558E+00, 0.1518244930621437E+00, 0.6124465423051357E+00, 0.4758679007372426E+00, 0.1524585149425051E-01, 0.2386301922514691E-01, 0.7448350699339780E+00, 0.8931789553886716E+00, 0.1722069046798406E+00, 0.1232835205710967E-01, 0.6394299132491200E-01, 0.5161612293293578E-01, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6566219320748727E-01, 0.7250261437426894E-01, 0.6842308575232983E-02, 0.5512763475647510E-02, 0.5841446056060346E-01, 0.5290169708495600E-01, 0.4044780558898965E-16, 0.7749519698096867E-34, 0.1013559914197710E-18, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 19, + ppOut: 0, + dminOut: 1.0135599141977093E-019, + desigOut: 2.7104744119407903E-020, + sigmaOut: 2.4344780481123287E-002, + qmaxOut: 1.8900334961849885, + nFailOut: 2, + iterOut: 19, + nDivOut: 396, + ttypeOut: -2, + dmin1Out: 5.1614639267802333E-002, + dmin2Out: 5.1614639267802333E-002, + dnOut: 1.0135599141977093E-019, + dn1Out: 5.2901697084955956E-002, + dn2Out: 6.5660305799035965E-002, + gOut: 0.0000000000000000, + tauOut: 0.0000000000000000, + }, + { + i0: 1, + n0: 4, + z: []float64{0.6482015258643838E+00, 0.6481999396438409E+00, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.8927011497345719E-01, 0.8926852875357447E-01, 0.6601400172354812E-12, 0.2332164496627946E-11, 0.3153708122363886E+00, 0.3200537757344777E+00, 0.4684549720964035E-02, 0.2356209328895529E-07, 0.1609789066298190E-05, 0.6430148075154844E-11, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 6.4301480751548441E-012, + desig: -2.0633404957759536E-016, + qmax: 1.6602870234255678, + ttype: -2, + dmin1: 8.9268528752914328E-002, + dmin2: 8.9268528752914328E-002, + dn: 6.4301480751548441E-012, + dn1: 0.31536922601351364, + dn2: 8.9268528752914328E-002, + g: 0.49975000000000003, + tau: 1.5862205428611591E-006, + nFail: 5, + iter: 102, + sigma: 2.0015106747272648, + nDiv: 1395, + zOut: []float64{0.6481999396374125E+00, 0.6481999396438409E+00, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.8926852874947827E-01, 0.8926852875357447E-01, 0.8361491594360282E-11, 0.2332164496627946E-11, 0.3200537992817811E+00, 0.3200537757344777E+00, 0.4733821287189426E-18, 0.2356209328895529E-07, 0.1787791211067534E-14, 0.6430148075154844E-11, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 4, + ppOut: 1, + dminOut: 1.7877912110675335E-015, + desigOut: -3.7836067586147711E-017, + sigmaOut: 2.0015106747336930, + qmaxOut: 1.6602870234255678, + nFailOut: 5, + iterOut: 103, + nDivOut: 1400, + ttypeOut: -4, + dmin1Out: 8.9268528747146109E-002, + dmin2Out: 8.9268528747146109E-002, + dnOut: 1.7877912110675335E-015, + dn1Out: 0.32005377571968785, + dn2Out: 8.9268528747146109E-002, + gOut: 0.49975000000000003, + tauOut: 6.4283598105616478E-012, + }, + { + i0: 1, + n0: 4, + z: []float64{0.6481999396374125E+00, 0.6481999396438409E+00, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.8926852874947827E-01, 0.8926852875357447E-01, 0.8361491594360282E-11, 0.2332164496627946E-11, 0.3200537992817811E+00, 0.3200537757344777E+00, 0.4733821287189426E-18, 0.2356209328895529E-07, 0.1787791211067534E-14, 0.6430148075154844E-11, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 1.7877912110675335E-015, + desig: -3.7836067586147711E-017, + qmax: 1.6602870234255678, + ttype: -4, + dmin1: 8.9268528747146109E-002, + dmin2: 8.9268528747146109E-002, + dn: 1.7877912110675335E-015, + dn1: 0.32005377571968785, + dn2: 8.9268528747146109E-002, + g: 0.49975000000000003, + tau: 6.4283598105616478E-012, + nFail: 5, + iter: 103, + sigma: 2.0015106747336930, + nDiv: 1400, + zOut: []float64{0.6481999396374125E+00, 0.6481999396374107E+00, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.8926852874947827E-01, 0.8926852875783797E-01, 0.8361491594360282E-11, 0.2997839428604580E-10, 0.3200537992817811E+00, 0.3200537992518009E+00, 0.4733821287189426E-18, 0.2644269217171004E-32, 0.1787791211067534E-14, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 4, + ppOut: 0, + dminOut: 2.2279522444840209E-024, + desigOut: -2.6401698146816920E-017, + sigmaOut: 2.0015106747336948, + qmaxOut: 1.6602870234255678, + nFailOut: 5, + iterOut: 104, + nDivOut: 1405, + ttypeOut: -4, + dmin1Out: 8.9268528749476481E-002, + dmin2Out: 8.9268528749476481E-002, + dnOut: 2.2279522444840209E-024, + dn1Out: 0.32005379925180094, + dn2Out: 8.9268528749476481E-002, + gOut: 0.49975000000000003, + tauOut: 1.7877912088395813E-015, + }, + { + i0: 1, + n0: 4, + z: []float64{0.6481999396374125E+00, 0.6481999396374107E+00, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.8926852874947827E-01, 0.8926852875783797E-01, 0.8361491594360282E-11, 0.2997839428604580E-10, 0.3200537992817811E+00, 0.3200537992518009E+00, 0.4733821287189426E-18, 0.2644269217171004E-32, 0.1787791211067534E-14, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 2.2279522444840209E-024, + desig: -2.6401698146816920E-017, + qmax: 1.6602870234255678, + ttype: -4, + dmin1: 8.9268528749476481E-002, + dmin2: 8.9268528749476481E-002, + dn: 2.2279522444840209E-024, + dn1: 0.32005379925180094, + dn2: 8.9268528749476481E-002, + g: 0.49975000000000003, + tau: 1.7877912088395813E-015, + nFail: 5, + iter: 104, + sigma: 2.0015106747336948, + nDiv: 1405, + zOut: []float64{0.6258828074500417E+00, 0.6481999396374107E+00, 0.7879513719234823E-20, 0.5524513774965514E-19, 0.6695139660044724E-01, 0.8926852875783797E-01, 0.1433084218388560E-09, 0.2997839428604580E-10, 0.2977366669211234E+00, 0.3200537992518009E+00, 0.8926852875783797E-01, 0.2644269217171004E-32, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 3, + ppOut: 1, + dminOut: 6.6951396570468849E-002, + desigOut: -1.0061396160665481E-016, + sigmaOut: 2.0238278069210640, + qmaxOut: 1.6602870234255678, + nFailOut: 5, + iterOut: 105, + nDivOut: 1409, + ttypeOut: -9, + dmin1Out: 6.6951396570468849E-002, + dmin2Out: 0.62588280745004166, + dnOut: 0.29773666692112338, + dn1Out: 6.6951396570468849E-002, + dn2Out: 0.62588280745004166, + gOut: 0.49975000000000003, + tauOut: 2.2317132187369120E-002, + }, + { + i0: 1, + n0: 3, + z: []float64{0.6258828074500417E+00, 0.6481999396374107E+00, 0.7879513719234823E-20, 0.5524513774965514E-19, 0.6695139660044724E-01, 0.8926852875783797E-01, 0.1433084218388560E-09, 0.2997839428604580E-10, 0.2977366669211234E+00, 0.3200537992518009E+00, 0.8926852875783797E-01, 0.2644269217171004E-32, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 6.6951396570468849E-002, + desig: -1.0061396160665481E-016, + qmax: 1.6602870234255678, + ttype: -9, + dmin1: 6.6951396570468849E-002, + dmin2: 0.62588280745004166, + dn: 0.29773666692112338, + dn1: 6.6951396570468849E-002, + dn2: 0.62588280745004166, + g: 0.49975000000000003, + tau: 2.2317132187369120E-002, + nFail: 5, + iter: 105, + sigma: 2.0238278069210640, + nDiv: 1409, + zOut: []float64{0.6258828074500417E+00, 0.5589320748538995E+00, 0.7879513719234823E-20, 0.9438435755776795E-21, 0.6695139660044724E-01, 0.6641476135588615E-06, 0.1433084218388560E-09, 0.6424501268835132E-04, 0.2977366669211234E+00, 0.2307216893122929E+00, 0.8926852875783797E-01, 0.6695139660044724E-01, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 3, + ppOut: 0, + dminOut: 6.6400430513702258E-007, + desigOut: 1.9428902930940239E-016, + sigmaOut: 2.0907785395172058, + qmaxOut: 1.6602870234255678, + nFailOut: 5, + iterOut: 106, + nDivOut: 1413, + ttypeOut: -4, + dmin1Out: 6.6400430513702258E-007, + dmin2Out: 0.55893207485389951, + dnOut: 0.23072168931229292, + dn1Out: 6.6400430513702258E-007, + dn2Out: 0.55893207485389951, + gOut: 0.49975000000000003, + tauOut: 6.6950732596142107E-002, + }, + { + i0: 1, + n0: 3, + z: []float64{0.6258828074500417E+00, 0.5589320748538995E+00, 0.7879513719234823E-20, 0.9438435755776795E-21, 0.6695139660044724E-01, 0.6641476135588615E-06, 0.1433084218388560E-09, 0.6424501268835132E-04, 0.2977366669211234E+00, 0.2307216893122929E+00, 0.8926852875783797E-01, 0.6695139660044724E-01, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 6.6400430513702258E-007, + desig: 1.9428902930940239E-016, + qmax: 1.6602870234255678, + ttype: -4, + dmin1: 6.6400430513702258E-007, + dmin2: 0.55893207485389951, + dn: 0.23072168931229292, + dn1: 6.6400430513702258E-007, + dn2: 0.55893207485389951, + g: 0.49975000000000003, + tau: 6.6950732596142107E-002, + nFail: 5, + iter: 106, + sigma: 2.0907785395172058, + nDiv: 1413, + zOut: []float64{0.5589315065851642E+00, 0.5589320748538995E+00, 0.1121517486324177E-26, 0.9438435755776795E-21, 0.6434089156657428E-04, 0.6641476135588615E-06, 0.2303778747300831E+00, 0.6424501268835132E-04, 0.3432463134744483E-03, 0.2307216893122929E+00, 0.6641476135588615E-06, 0.6695139660044724E-01, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 3, + ppOut: 1, + dminOut: 9.5878878222950548E-008, + desigOut: -9.3233975295464906E-017, + sigmaOut: 2.0907791077859414, + qmaxOut: 1.6602870234255678, + nFailOut: 6, + iterOut: 108, + nDivOut: 1421, + ttypeOut: -15, + dmin1Out: 9.5878878222950548E-008, + dmin2Out: 0.55893150658516422, + dnOut: 3.4324631347444829E-004, + dn1Out: 9.5878878222950548E-008, + dn2Out: 0.55893150658516422, + gOut: 0.49975000000000003, + tauOut: 5.6826873533591094E-007, + }, + { + i0: 1, + n0: 3, + z: []float64{0.5589315065851642E+00, 0.5589320748538995E+00, 0.1121517486324177E-26, 0.9438435755776795E-21, 0.6434089156657428E-04, 0.6641476135588615E-06, 0.2303778747300831E+00, 0.6424501268835132E-04, 0.3432463134744483E-03, 0.2307216893122929E+00, 0.6641476135588615E-06, 0.6695139660044724E-01, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 0, + dmin: 9.5878878222950548E-008, + desig: -9.3233975295464906E-017, + qmax: 1.6602870234255678, + ttype: -15, + dmin1: 9.5878878222950548E-008, + dmin2: 0.55893150658516422, + dn: 3.4324631347444829E-004, + dn1: 9.5878878222950548E-008, + dn2: 0.55893150658516422, + g: 0.49975000000000003, + tau: 5.6826873533591094E-007, + nFail: 6, + iter: 108, + sigma: 2.0907791077859414, + nDiv: 1421, + zOut: []float64{0.5589315065851642E+00, 0.5589314123732620E+00, 0.1121517486324177E-26, 0.1291024862446124E-30, 0.6434089156657428E-04, 0.2304421214097475E+00, 0.2303778747300831E+00, 0.3431506172718059E-03, 0.3432463134744483E-03, 0.1484300435548105E-08, 0.6641476135588615E-06, 0.6434089156657428E-04, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 3, + ppOut: 0, + dminOut: 1.4843004355481051E-009, + desigOut: -1.6593817482031092E-016, + sigmaOut: 2.0907792019978437, + qmaxOut: 1.6602870234255678, + nFailOut: 6, + iterOut: 109, + nDivOut: 1425, + ttypeOut: -4, + dmin1Out: 6.4246679664367451E-005, + dmin2Out: 0.55893141237326205, + dnOut: 1.4843004355481051E-009, + dn1Out: 6.4246679664367451E-005, + dn2Out: 0.55893141237326205, + gOut: 0.49975000000000003, + tauOut: 9.4211902206835373E-008, + }, + { + i0: 1, + n0: 3, + z: []float64{0.5589315065851642E+00, 0.5589314123732620E+00, 0.1121517486324177E-26, 0.1291024862446124E-30, 0.6434089156657428E-04, 0.2304421214097475E+00, 0.2303778747300831E+00, 0.3431506172718059E-03, 0.3432463134744483E-03, 0.1484300435548105E-08, 0.6641476135588615E-06, 0.6434089156657428E-04, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + pp: 1, + dmin: 1.4843004355481051E-009, + desig: -1.6593817482031092E-016, + qmax: 1.6602870234255678, + ttype: -4, + dmin1: 6.4246679664367451E-005, + dmin2: 0.55893141237326205, + dn: 1.4843004355481051E-009, + dn1: 6.4246679664367451E-005, + dn2: 0.55893141237326205, + g: 0.49975000000000003, + tau: 9.4211902206835373E-008, + nFail: 6, + iter: 109, + sigma: 2.0907792019978437, + nDiv: 1425, + zOut: []float64{0.2649710614371106E+01, 0.5589314123732620E+00, 0.1121517486324177E-26, 0.1291024862446124E-30, 0.2321564474027070E+01, 0.2307852720292263E+00, 0.2303778747300831E+00, 0.3431506172718059E-03, 0.2090779203479937E+01, 0.1482093454966231E-08, 0.6641476135588615E-06, 0.6434089156657428E-04, 0.2001510674733695E+01, 0.2227952244484021E-23, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.1702794694134603E+01, 0.2545269924803487E-17, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.1077066053646038E+01, 0.7156177943897596E-01, 0.2292199980814605E-03, 0.1899018778701386E-03, 0.1060140274732043E+01, 0.8660746506696473E-01, 0.1357005210961402E-39, 0.1331360138522907E-23, 0.9894235909971354E+00, 0.8804208964992894E-17, 0.8660746506696473E-01, 0.8679736700028205E-01, 0.9539342071687115E+00, 0.2761013168273541E-29, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.8046649468928653E+00, 0.5098326619997980E-22, 0.1416795225784663E-10, 0.1216165317638265E-10, 0.7009142227469247E+00, 0.1183291357831518E-29, 0.4806926318247711E-11, 0.3824647564366386E-11, 0.5502651835254770E+00, 0.1368072596837427E-11, 0.1169503544861386E-10, 0.4068037876491279E-10, 0.4423863025187732E+00, 0.2477754901417239E-20, 0.1737857614720001E-07, 0.5295826057530262E-07, 0.3697086796938907E+00, 0.5143373102040997E-26, 0.1312431380925897E-05, 0.1614374370413396E-05, 0.1446051340026323E+00, 0.9928287808749566E-25, 0.3777515963415321E-05, 0.2773141909621761E-05, 0.1110032523123295E+00, 0.0000000000000000E+00, 0.2532463507333992E-05, 0.2934028940292093E-05, 0.7513603923341917E-01, 0.5394210206791908E-19, 0.6032617175984252E-07, 0.2575740214720034E-06, 0.6860214953971246E-01, 0.7542232825258426E-19, 0.3784397549471832E-09, 0.1131370986389306E-09, 0.2434478048112329E-01, 0.1013559914197709E-18, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6989818532012803E-03, 0.9466330862652142E-28, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.7811996215926567E-04, 0.3786532345060857E-28, 0.1283811140869274E-03, 0.1684766835109566E-03}, + i0Out: 1, + n0Out: 0, + ppOut: 1, + dminOut: 1.4843004355481051E-009, + desigOut: -1.6593817482031092E-016, + sigmaOut: 2.0907792019978437, + qmaxOut: 1.6602870234255678, + nFailOut: 6, + iterOut: 109, + nDivOut: 1425, + ttypeOut: -4, + dmin1Out: 6.4246679664367451E-005, + dmin2Out: 0.55893141237326205, + dnOut: 1.4843004355481051E-009, + dn1Out: 6.4246679664367451E-005, + dn2Out: 0.55893141237326205, + gOut: 0.49975000000000003, + tauOut: 9.4211902206835373E-008, + }, + } { + z := make([]float64, len(test.z)) + copy(z, test.z) + i0 := test.i0 - 1 // zero index + n0 := test.n0 - 1 // zero index + + i0Out, n0Out, ppOut, dminOut, sigmaOut, desigOut, qmaxOut, nFailOut, iterOut, nDivOut, ttypeOut, dmin1Out, dmin2Out, dnOut, dn1Out, dn2Out, gOut, tauOut := + impl.Dlasq3(i0, n0, z, test.pp, test.dmin, test.sigma, test.desig, test.qmax, test.nFail, test.iter, test.nDiv, test.ttype, test.dmin1, test.dmin2, test.dn, test.dn1, test.dn2, test.g, test.tau) + + if !floats.EqualApprox(z, test.zOut, dTol) { + t.Error("Z mismatch") + } + if i0Out != test.i0Out-1 { + t.Errorf("i0 mismatch. Want %v, got %v", test.n0Out, n0Out) + } + if n0Out != test.n0Out-1 { + t.Errorf("n0 mismatch. Want %v, got %v", test.n0Out, n0Out) + } + if ppOut != test.ppOut { + t.Errorf("pp mismatch. Want %v, got %v", test.ppOut, ppOut) + } + if !floats.EqualWithinAbsOrRel(dminOut, test.dminOut, dTol, dTol) { + t.Errorf("dmin mismatch. Want %v, got %v", test.dminOut, dminOut) + } + if !floats.EqualWithinAbsOrRel(desigOut, test.desigOut, dTol, dTol) { + t.Errorf("desig mismatch. Want %v, got %v", test.desigOut, desigOut) + } + if !floats.EqualWithinAbsOrRel(sigmaOut, test.sigmaOut, dTol, dTol) { + t.Errorf("sigma mismatch. Want %v, got %v", test.sigmaOut, sigmaOut) + } + if !floats.EqualWithinAbsOrRel(qmaxOut, test.qmaxOut, dTol, dTol) { + t.Errorf("qmax mismatch. Want %v, got %v", test.qmaxOut, qmaxOut) + } + if nFailOut != test.nFailOut { + t.Errorf("nFail mismatch. Want %v, got %v", test.nFailOut, nFailOut) + } + if iterOut != test.iterOut { + t.Errorf("iter mismatch. Want %v, got %v", test.iterOut, iterOut) + } + if nDivOut != test.nDivOut { + t.Errorf("nFail mismatch. Want %v, got %v", test.nDivOut, nDivOut) + } + if ttypeOut != test.ttypeOut { + t.Errorf("ttype mismatch. Want %v, got %v", test.ttypeOut, ttypeOut) + } + if !floats.EqualWithinAbsOrRel(dmin1Out, test.dmin1Out, dTol, dTol) { + t.Errorf("dmin1 mismatch. Want %v, got %v", test.dmin1Out, dmin1Out) + } + if !floats.EqualWithinAbsOrRel(dmin2Out, test.dmin2Out, dTol, dTol) { + t.Errorf("dmin2 mismatch. Want %v, got %v", test.dmin2Out, dmin2Out) + } + if !floats.EqualWithinAbsOrRel(dnOut, test.dnOut, dTol, dTol) { + t.Errorf("dn mismatch. Want %v, got %v", test.dnOut, dnOut) + } + if !floats.EqualWithinAbsOrRel(dn1Out, test.dn1Out, dTol, dTol) { + t.Errorf("dn1 mismatch. Want %v, got %v", test.dn1Out, dn1Out) + } + if !floats.EqualWithinAbsOrRel(dn2Out, test.dn2Out, dTol, dTol) { + t.Errorf("dn2 mismatch. Want %v, got %v", test.dn2Out, dn2Out) + } + if !floats.EqualWithinAbsOrRel(gOut, test.gOut, dTol, dTol) { + t.Errorf("g mismatch. Want %v, got %v", test.gOut, gOut) + } + if !floats.EqualWithinAbsOrRel(tauOut, test.tauOut, dTol, dTol) { + t.Errorf("tau mismatch. Want %v, got %v", test.tauOut, tauOut) + } + } +} diff --git a/lapack/testlapack/dlasq4.go b/lapack/testlapack/dlasq4.go new file mode 100644 index 00000000..099ea322 --- /dev/null +++ b/lapack/testlapack/dlasq4.go @@ -0,0 +1,3121 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "testing" + + "github.com/gonum/floats" +) + +type dlasq4teststruct struct { + z []float64 + i0, n0, pp, n0in int + dmin, dmin1, dmin2, dn, dn1, dn2, tau float64 + ttype int + g float64 + + zOut []float64 + tauOut float64 + ttypeOut int + gOut float64 +} + +func printDlasq4FortranInput(d dlasq4teststruct) { + z := d.z + printFortranArray(z, "z") + fmt.Println("i0 =", d.i0) + fmt.Println("n0 =", d.n0) + fmt.Println("pp =", d.pp) + fmt.Println("n0in =", d.n0in) + + fmt.Println("dmin =", fortran64(d.dmin)) + fmt.Println("dmin1 =", fortran64(d.dmin1)) + fmt.Println("dmin2 =", fortran64(d.dmin2)) + fmt.Println("dn =", fortran64(d.dn)) + fmt.Println("dn1 =", fortran64(d.dn1)) + fmt.Println("dn2 =", fortran64(d.dn2)) + fmt.Println("g =", fortran64(d.g)) + fmt.Println("tau =", fortran64(d.tau)) + fmt.Println("ttype =", d.ttype) +} + +type Dlasq4er interface { + Dlasq4(i0, n0 int, z []float64, pp int, n0in int, dmin, dmin1, dmin2, dn, dn1, dn2, tau float64, ttype int, g float64) (tauOut float64, ttypeOut int, gOut float64) +} + +func Dlasq4Test(t *testing.T, impl Dlasq4er) { + dTol := 1e-14 + // Tests computed from calling the netlib Dlasq + for cas, test := range []dlasq4teststruct{ + { + z: []float64{0.1914365246180821E+01, 0.1564384297703890E+01, 0.2493389162143899E+00, 0.3499809484769305E+00, 0.1315996513131545E+01, 0.1363862112490627E+01, 0.9898466611970759E-01, 0.2014733168553078E+00, 0.6023973979587287E+00, 0.6465544792741794E+00, 0.2210033410638781E-02, 0.5482758480425683E-01, 0.9861857233678967E-01, 0.2428190810745492E-01, 0.4756321484454819E+00, 0.7654669763997353E-01, 0.2588748143677115E+00, 0.6127784069508770E+00, 0.1078611376690004E+00, 0.1217285558623164E+00, 0.6442896492255246E+00, 0.2293835804898155E+00, 0.6203230486639705E+00, 0.5227672064047094E+00, 0.3695660678607585E+00, 0.7645233184745865E+00, 0.5378838054252265E+00, 0.2253657980501426E+00, 0.3562533181264623E+00, 0.8820486722335483E+00, 0.2222132496436145E-01, 0.1208845131814035E-01, 0.1275094303021685E+01, 0.6548746852163357E+00, 0.1647324354821218E+00, 0.6424409427697111E+00, 0.1007530576543866E+01, 0.3269551736546701E+00, 0.3453881601783118E+00, 0.8453078383713172E+00, 0.2679391719153404E+00, 0.4116714838778281E+00, 0.7328677736683723E+00, 0.2016558482158241E+00, 0.8360828138307410E+00, 0.9737579452195326E+00, 0.4813660709592822E+00, 0.5951926422795808E+00, 0.6495370513676459E+00, 0.6761876248148171E+00, 0.2325475880222648E+00, 0.4547154975121112E+00, 0.1993624802893807E+00, 0.3321819367342255E+00, 0.3782318916911257E+00, 0.9972813157741996E-01, 0.9830449403503746E+00, 0.7561080996844842E+00, 0.4429733864040367E+00, 0.6051687323570161E+00, 0.1173279550602403E+01, 0.7195724480316686E+00, 0.5035524069144587E+00, 0.8966804889747714E+00, 0.3058980395058521E+00, 0.6588832353928662E+00, 0.3014634433415453E+00, 0.1505672110274446E+00, 0.1289422237567578E+01, 0.6124645310993601E+00, 0.7583364305799440E+00, 0.9784211498097629E+00, 0.4977814779461571E+00, 0.9993813577491869E+00, 0.2841468847862598E+00, 0.2567365507769143E+00, 0.9257539794205765E+00, 0.5509268385614666E+00, 0.5231355605450990E-04, 0.6589740256453697E+00, 0.2117869221381033E-04, 0.7349224826832024E-04, 0.0000000000000000E+00, 0.0000000000000000E+00}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: -0.0000000000000000, + dmin1: 0.0000000000000000, + dmin2: 0.0000000000000000, + dn: 0.0000000000000000, + dn1: 0.0000000000000000, + dn2: 0.0000000000000000, + tau: 0.0000000000000000, + ttype: 0, + g: 0.0000000000000000, + zOut: []float64{0.1914365246180821E+01, 0.1564384297703890E+01, 0.2493389162143899E+00, 0.3499809484769305E+00, 0.1315996513131545E+01, 0.1363862112490627E+01, 0.9898466611970759E-01, 0.2014733168553078E+00, 0.6023973979587287E+00, 0.6465544792741794E+00, 0.2210033410638781E-02, 0.5482758480425683E-01, 0.9861857233678967E-01, 0.2428190810745492E-01, 0.4756321484454819E+00, 0.7654669763997353E-01, 0.2588748143677115E+00, 0.6127784069508770E+00, 0.1078611376690004E+00, 0.1217285558623164E+00, 0.6442896492255246E+00, 0.2293835804898155E+00, 0.6203230486639705E+00, 0.5227672064047094E+00, 0.3695660678607585E+00, 0.7645233184745865E+00, 0.5378838054252265E+00, 0.2253657980501426E+00, 0.3562533181264623E+00, 0.8820486722335483E+00, 0.2222132496436145E-01, 0.1208845131814035E-01, 0.1275094303021685E+01, 0.6548746852163357E+00, 0.1647324354821218E+00, 0.6424409427697111E+00, 0.1007530576543866E+01, 0.3269551736546701E+00, 0.3453881601783118E+00, 0.8453078383713172E+00, 0.2679391719153404E+00, 0.4116714838778281E+00, 0.7328677736683723E+00, 0.2016558482158241E+00, 0.8360828138307410E+00, 0.9737579452195326E+00, 0.4813660709592822E+00, 0.5951926422795808E+00, 0.6495370513676459E+00, 0.6761876248148171E+00, 0.2325475880222648E+00, 0.4547154975121112E+00, 0.1993624802893807E+00, 0.3321819367342255E+00, 0.3782318916911257E+00, 0.9972813157741996E-01, 0.9830449403503746E+00, 0.7561080996844842E+00, 0.4429733864040367E+00, 0.6051687323570161E+00, 0.1173279550602403E+01, 0.7195724480316686E+00, 0.5035524069144587E+00, 0.8966804889747714E+00, 0.3058980395058521E+00, 0.6588832353928662E+00, 0.3014634433415453E+00, 0.1505672110274446E+00, 0.1289422237567578E+01, 0.6124645310993601E+00, 0.7583364305799440E+00, 0.9784211498097629E+00, 0.4977814779461571E+00, 0.9993813577491869E+00, 0.2841468847862598E+00, 0.2567365507769143E+00, 0.9257539794205765E+00, 0.5509268385614666E+00, 0.5231355605450990E-04, 0.6589740256453697E+00, 0.2117869221381033E-04, 0.7349224826832024E-04, 0.0000000000000000E+00, 0.0000000000000000E+00}, + tauOut: 0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1914365246180821E+01, 0.2163704162395211E+01, 0.2493389162143899E+00, 0.1516515751224039E+00, 0.1315996513131545E+01, 0.1263329604128848E+01, 0.9898466611970759E-01, 0.4719916727467415E-01, 0.6023973979587287E+00, 0.5574082640946934E+00, 0.2210033410638781E-02, 0.3910066531356214E-03, 0.9861857233678967E-01, 0.5738597141291359E+00, 0.4756321484454819E+00, 0.2145632131068746E+00, 0.2588748143677115E+00, 0.1521727389298373E+00, 0.1078611376690004E+00, 0.4566771620366771E+00, 0.6442896492255246E+00, 0.8079355358528180E+00, 0.6203230486639705E+00, 0.2837483186776231E+00, 0.3695660678607585E+00, 0.6237015546083620E+00, 0.5378838054252265E+00, 0.3072349091217998E+00, 0.3562533181264623E+00, 0.7123973396902394E-01, 0.2222132496436145E-01, 0.3977314805803597E+00, 0.1275094303021685E+01, 0.1042095257923447E+01, 0.1647324354821218E+00, 0.1592685164190333E+00, 0.1007530576543866E+01, 0.1193650220303144E+01, 0.3453881601783118E+00, 0.7752942700755104E-01, 0.2679391719153404E+00, 0.9232775185761617E+00, 0.7328677736683723E+00, 0.6636554427529671E+00, 0.8360828138307410E+00, 0.6537934420370561E+00, 0.4813660709592822E+00, 0.4782322339990674E+00, 0.6495370513676459E+00, 0.4038524053908432E+00, 0.2325475880222648E+00, 0.1147975431483785E+00, 0.1993624802893807E+00, 0.4627968288321279E+00, 0.3782318916911257E+00, 0.8034172324482011E+00, 0.9830449403503746E+00, 0.6226010943062101E+00, 0.4429733864040367E+00, 0.8347746582554776E+00, 0.1173279550602403E+01, 0.8420572992613844E+00, 0.5035524069144587E+00, 0.1829278057427913E+00, 0.3058980395058521E+00, 0.4244336771046062E+00, 0.3014634433415453E+00, 0.9158407747236312E+00, 0.1289422237567578E+01, 0.1131917893423890E+01, 0.7583364305799440E+00, 0.3334922359541972E+00, 0.4977814779461571E+00, 0.4484361267782198E+00, 0.2841468847862598E+00, 0.5865943745895725E+00, 0.9257539794205765E+00, 0.3392119183870583E+00, 0.5231355605450990E-04, 0.3266196269153995E-08, 0.2117869221381033E-04, 0.2117542601754118E-04, 0.0000000000000000E+00, 0.3910066531356214E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + n0in: 21, + dmin: 2.1175426017541180E-005, + dmin1: 4.4311601260836921E-002, + dmin2: 4.4311601260836921E-002, + dn: 2.1175426017541180E-005, + dn1: 0.33915960483100382, + dn2: 0.16428924199195991, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1914365246180821E+01, 0.2163704162395211E+01, 0.2493389162143899E+00, 0.1516515751224039E+00, 0.1315996513131545E+01, 0.1263329604128848E+01, 0.9898466611970759E-01, 0.4719916727467415E-01, 0.6023973979587287E+00, 0.5574082640946934E+00, 0.2210033410638781E-02, 0.3910066531356214E-03, 0.9861857233678967E-01, 0.5738597141291359E+00, 0.4756321484454819E+00, 0.2145632131068746E+00, 0.2588748143677115E+00, 0.1521727389298373E+00, 0.1078611376690004E+00, 0.4566771620366771E+00, 0.6442896492255246E+00, 0.8079355358528180E+00, 0.6203230486639705E+00, 0.2837483186776231E+00, 0.3695660678607585E+00, 0.6237015546083620E+00, 0.5378838054252265E+00, 0.3072349091217998E+00, 0.3562533181264623E+00, 0.7123973396902394E-01, 0.2222132496436145E-01, 0.3977314805803597E+00, 0.1275094303021685E+01, 0.1042095257923447E+01, 0.1647324354821218E+00, 0.1592685164190333E+00, 0.1007530576543866E+01, 0.1193650220303144E+01, 0.3453881601783118E+00, 0.7752942700755104E-01, 0.2679391719153404E+00, 0.9232775185761617E+00, 0.7328677736683723E+00, 0.6636554427529671E+00, 0.8360828138307410E+00, 0.6537934420370561E+00, 0.4813660709592822E+00, 0.4782322339990674E+00, 0.6495370513676459E+00, 0.4038524053908432E+00, 0.2325475880222648E+00, 0.1147975431483785E+00, 0.1993624802893807E+00, 0.4627968288321279E+00, 0.3782318916911257E+00, 0.8034172324482011E+00, 0.9830449403503746E+00, 0.6226010943062101E+00, 0.4429733864040367E+00, 0.8347746582554776E+00, 0.1173279550602403E+01, 0.8420572992613844E+00, 0.5035524069144587E+00, 0.1829278057427913E+00, 0.3058980395058521E+00, 0.4244336771046062E+00, 0.3014634433415453E+00, 0.9158407747236312E+00, 0.1289422237567578E+01, 0.1131917893423890E+01, 0.7583364305799440E+00, 0.3334922359541972E+00, 0.4977814779461571E+00, 0.4484361267782198E+00, 0.2841468847862598E+00, 0.5865943745895725E+00, 0.9257539794205765E+00, 0.3392119183870583E+00, 0.5231355605450990E-04, 0.3266196269153995E-08, 0.2117869221381033E-04, 0.2117542601754118E-04, 0.0000000000000000E+00, 0.3910066531356214E-03, 0.1037537856266618 - 321}, + tauOut: 0.0000000000000000, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2315355737517615E+01, 0.2163704162395211E+01, 0.8274578340618610E-01, 0.1516515751224039E+00, 0.1227782987997336E+01, 0.1263329604128848E+01, 0.2142822156235013E-01, 0.4719916727467415E-01, 0.5363710491854788E+00, 0.5574082640946934E+00, 0.4183353417969536E-03, 0.3910066531356214E-03, 0.7880045918942136E+00, 0.5738597141291359E+00, 0.4143462125464707E-01, 0.2145632131068746E+00, 0.5674152797118673E+00, 0.1521727389298373E+00, 0.6502569120260687E+00, 0.4566771620366771E+00, 0.4414269425043723E+00, 0.8079355358528180E+00, 0.4009140594652070E+00, 0.2837483186776231E+00, 0.5300224042649548E+00, 0.6237015546083620E+00, 0.4129510944388858E-01, 0.3072349091217998E+00, 0.4276761051054951E+00, 0.7123973396902394E-01, 0.9691308092544145E+00, 0.3977314805803597E+00, 0.2322329650880660E+00, 0.1042095257923447E+01, 0.8186215063776209E+00, 0.1592685164190333E+00, 0.4525581409330741E+00, 0.1193650220303144E+01, 0.1581701233715052E+00, 0.7752942700755104E-01, 0.1428762837957623E+01, 0.9232775185761617E+00, 0.3036848136842134E+00, 0.6636554427529671E+00, 0.8283408623519102E+00, 0.6537934420370561E+00, 0.2331591338951825E+00, 0.4782322339990674E+00, 0.2854908146440392E+00, 0.4038524053908432E+00, 0.1860933389154074E+00, 0.1147975431483785E+00, 0.1080120722364922E+01, 0.4627968288321279E+00, 0.4631042046962229E+00, 0.8034172324482011E+00, 0.9942715478654648E+00, 0.6226010943062101E+00, 0.7069779837626068E+00, 0.8347746582554776E+00, 0.3180071212415688E+00, 0.8420572992613844E+00, 0.2441477440283845E+00, 0.1829278057427913E+00, 0.1096126707799853E+01, 0.4244336771046062E+00, 0.9457451890006905E+00, 0.9158407747236312E+00, 0.5196649403773971E+00, 0.1131917893423890E+01, 0.2877815203259632E+00, 0.3334922359541972E+00, 0.7472489810418290E+00, 0.4484361267782198E+00, 0.2662831374385604E+00, 0.5865943745895725E+00, 0.7292878421469419E-01, 0.3392119183870583E+00, 0.9483648767903632E-12, 0.3266196269153995E-08, 0.2117542506917630E-04, 0.2117542601754118E-04, 0.4183353417969536E-03, 0.3910066531356214E-03}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: 2.1175425069176302E-005, + dmin1: 2.9944624525135358E-002, + dmin2: 2.9944624525135358E-002, + dn: 2.1175425069176302E-005, + dn1: 7.2928780948497918E-002, + dn2: 0.16065460645225654, + tau: 0.0000000000000000, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2315355737517615E+01, 0.2163704162395211E+01, 0.8274578340618610E-01, 0.1516515751224039E+00, 0.1227782987997336E+01, 0.1263329604128848E+01, 0.2142822156235013E-01, 0.4719916727467415E-01, 0.5363710491854788E+00, 0.5574082640946934E+00, 0.4183353417969536E-03, 0.3910066531356214E-03, 0.7880045918942136E+00, 0.5738597141291359E+00, 0.4143462125464707E-01, 0.2145632131068746E+00, 0.5674152797118673E+00, 0.1521727389298373E+00, 0.6502569120260687E+00, 0.4566771620366771E+00, 0.4414269425043723E+00, 0.8079355358528180E+00, 0.4009140594652070E+00, 0.2837483186776231E+00, 0.5300224042649548E+00, 0.6237015546083620E+00, 0.4129510944388858E-01, 0.3072349091217998E+00, 0.4276761051054951E+00, 0.7123973396902394E-01, 0.9691308092544145E+00, 0.3977314805803597E+00, 0.2322329650880660E+00, 0.1042095257923447E+01, 0.8186215063776209E+00, 0.1592685164190333E+00, 0.4525581409330741E+00, 0.1193650220303144E+01, 0.1581701233715052E+00, 0.7752942700755104E-01, 0.1428762837957623E+01, 0.9232775185761617E+00, 0.3036848136842134E+00, 0.6636554427529671E+00, 0.8283408623519102E+00, 0.6537934420370561E+00, 0.2331591338951825E+00, 0.4782322339990674E+00, 0.2854908146440392E+00, 0.4038524053908432E+00, 0.1860933389154074E+00, 0.1147975431483785E+00, 0.1080120722364922E+01, 0.4627968288321279E+00, 0.4631042046962229E+00, 0.8034172324482011E+00, 0.9942715478654648E+00, 0.6226010943062101E+00, 0.7069779837626068E+00, 0.8347746582554776E+00, 0.3180071212415688E+00, 0.8420572992613844E+00, 0.2441477440283845E+00, 0.1829278057427913E+00, 0.1096126707799853E+01, 0.4244336771046062E+00, 0.9457451890006905E+00, 0.9158407747236312E+00, 0.5196649403773971E+00, 0.1131917893423890E+01, 0.2877815203259632E+00, 0.3334922359541972E+00, 0.7472489810418290E+00, 0.4484361267782198E+00, 0.2662831374385604E+00, 0.5865943745895725E+00, 0.7292878421469419E-01, 0.3392119183870583E+00, 0.9483648767903632E-12, 0.3266196269153995E-08, 0.2117542506917630E-04, 0.2117542601754118E-04, 0.4183353417969536E-03, 0.3910066531356214E-03}, + tauOut: 2.1175313795360271E-005, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2315355737517615E+01, 0.2398080345610006E+01, 0.8274578340618610E-01, 0.4236466279397526E-01, 0.1227782987997336E+01, 0.1206825371451915E+01, 0.2142822156235013E-01, 0.9523728911788614E-02, 0.5363710491854788E+00, 0.5272444803016919E+00, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.7880045918942136E+00, 0.8287928057414093E+00, 0.4143462125464707E-01, 0.2836732781232222E-01, 0.5674152797118673E+00, 0.1189283688611819E+01, 0.6502569120260687E+00, 0.2413561400585997E+00, 0.4414269425043723E+00, 0.6009636865971842E+00, 0.4009140594652070E+00, 0.3535878097802652E+00, 0.5300224042649548E+00, 0.2177085286147829E+00, 0.4129510944388858E-01, 0.8112190955144877E-01, 0.4276761051054951E+00, 0.1315663829494665E+01, 0.9691308092544145E+00, 0.1710650671895379E+00, 0.2322329650880660E+00, 0.8797682289623537E+00, 0.8186215063776209E+00, 0.4211038940233675E+00, 0.4525581409330741E+00, 0.1896031949674164E+00, 0.1581701233715052E+00, 0.1191897606932286E+01, 0.1428762837957623E+01, 0.5405288693957555E+00, 0.3036848136842134E+00, 0.4653859482687157E+00, 0.8283408623519102E+00, 0.5960928726645816E+00, 0.2331591338951825E+00, 0.1116684901463164E+00, 0.2854908146440392E+00, 0.3598944880993349E+00, 0.1860933389154074E+00, 0.5585061130503639E+00, 0.1080120722364922E+01, 0.9846976386969850E+00, 0.4631042046962229E+00, 0.4676068229793028E+00, 0.9942715478654648E+00, 0.1233621533334973E+01, 0.7069779837626068E+00, 0.1822471700779458E+00, 0.3180071212415688E+00, 0.3798865198782122E+00, 0.2441477440283845E+00, 0.7044652781161848E+00, 0.1096126707799853E+01, 0.1337385443370563E+01, 0.9457451890006905E+00, 0.3674861422265960E+00, 0.5196649403773971E+00, 0.4399391431629689E+00, 0.2877815203259632E+00, 0.4888049885267526E+00, 0.7472489810418290E+00, 0.5247059546398414E+00, 0.2662831374385604E+00, 0.3701064434002514E-01, 0.7292878421469419E-01, 0.3589696456182207E-01, 0.9483648767903632E-12, 0.5594353069081231E-15, 0.2117542506917630E-04, 0.1112732565966979E-09, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + n0in: 21, + dmin: 1.1127325659669794E-010, + dmin1: 3.1433071595911154E-002, + dmin2: 3.1433071595911154E-002, + dn: 1.1127325659669794E-010, + dn1: 3.5896964560873705E-002, + dn2: 0.25842281720128102, + tau: 2.1175313795360271E-005, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2315355737517615E+01, 0.2398080345610006E+01, 0.8274578340618610E-01, 0.4236466279397526E-01, 0.1227782987997336E+01, 0.1206825371451915E+01, 0.2142822156235013E-01, 0.9523728911788614E-02, 0.5363710491854788E+00, 0.5272444803016919E+00, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.7880045918942136E+00, 0.8287928057414093E+00, 0.4143462125464707E-01, 0.2836732781232222E-01, 0.5674152797118673E+00, 0.1189283688611819E+01, 0.6502569120260687E+00, 0.2413561400585997E+00, 0.4414269425043723E+00, 0.6009636865971842E+00, 0.4009140594652070E+00, 0.3535878097802652E+00, 0.5300224042649548E+00, 0.2177085286147829E+00, 0.4129510944388858E-01, 0.8112190955144877E-01, 0.4276761051054951E+00, 0.1315663829494665E+01, 0.9691308092544145E+00, 0.1710650671895379E+00, 0.2322329650880660E+00, 0.8797682289623537E+00, 0.8186215063776209E+00, 0.4211038940233675E+00, 0.4525581409330741E+00, 0.1896031949674164E+00, 0.1581701233715052E+00, 0.1191897606932286E+01, 0.1428762837957623E+01, 0.5405288693957555E+00, 0.3036848136842134E+00, 0.4653859482687157E+00, 0.8283408623519102E+00, 0.5960928726645816E+00, 0.2331591338951825E+00, 0.1116684901463164E+00, 0.2854908146440392E+00, 0.3598944880993349E+00, 0.1860933389154074E+00, 0.5585061130503639E+00, 0.1080120722364922E+01, 0.9846976386969850E+00, 0.4631042046962229E+00, 0.4676068229793028E+00, 0.9942715478654648E+00, 0.1233621533334973E+01, 0.7069779837626068E+00, 0.1822471700779458E+00, 0.3180071212415688E+00, 0.3798865198782122E+00, 0.2441477440283845E+00, 0.7044652781161848E+00, 0.1096126707799853E+01, 0.1337385443370563E+01, 0.9457451890006905E+00, 0.3674861422265960E+00, 0.5196649403773971E+00, 0.4399391431629689E+00, 0.2877815203259632E+00, 0.4888049885267526E+00, 0.7472489810418290E+00, 0.5247059546398414E+00, 0.2662831374385604E+00, 0.3701064434002514E-01, 0.7292878421469419E-01, 0.3589696456182207E-01, 0.9483648767903632E-12, 0.5594353069081231E-15, 0.2117542506917630E-04, 0.1112732565966979E-09, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.1037537856266618 - 321}, + tauOut: 2.1175313795360271E-005, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2440445008292708E+01, 0.2398080345610006E+01, 0.2094976520226600E-01, 0.4236466279397526E-01, 0.1195399335050165E+01, 0.1206825371451915E+01, 0.4200549016048655E-02, 0.9523728911788614E-02, 0.5236691632680260E+00, 0.5272444803016919E+00, 0.9895328911616120E-03, 0.6252320936560726E-03, 0.8561706005512968E+00, 0.8287928057414093E+00, 0.3940429656773515E-01, 0.2836732781232222E-01, 0.1391235531991410E+01, 0.1189283688611819E+01, 0.1042571673718422E+00, 0.2413561400585997E+00, 0.8502943288943339E+00, 0.6009636865971842E+00, 0.9053227710395735E-01, 0.3535878097802652E+00, 0.2082981609510011E+00, 0.2177085286147829E+00, 0.5123864833424303E+00, 0.8112190955144877E-01, 0.9743424132304999E+00, 0.1315663829494665E+01, 0.1544607000116935E+00, 0.1710650671895379E+00, 0.1146411422862754E+01, 0.8797682289623537E+00, 0.6964571542795012E-01, 0.4211038940233675E+00, 0.1311855086360479E+01, 0.1896031949674164E+00, 0.4911023119923957E+00, 0.1191897606932286E+01, 0.5148125055608023E+00, 0.5405288693957555E+00, 0.5388626806938843E+00, 0.4653859482687157E+00, 0.1688986820057405E+00, 0.5960928726645816E+00, 0.2379466412690434E+00, 0.1116684901463164E+00, 0.6804539597693821E+00, 0.3598944880993349E+00, 0.8082246312519304E+00, 0.5585061130503639E+00, 0.6440798303130841E+00, 0.9846976386969850E+00, 0.8956185534970393E+00, 0.4676068229793028E+00, 0.5202501498046066E+00, 0.1233621533334973E+01, 0.1330768347199243E+00, 0.1822471700779458E+00, 0.9512749631631994E+00, 0.3798865198782122E+00, 0.9903988276741268E+00, 0.7044652781161848E+00, 0.7144727578117591E+00, 0.1337385443370563E+01, 0.2262808998212762E+00, 0.3674861422265960E+00, 0.7024632317571722E+00, 0.4399391431629689E+00, 0.3651136124179467E+00, 0.4888049885267526E+00, 0.1966029864506465E+00, 0.5247059546398414E+00, 0.6757627705811050E-02, 0.3701064434002514E-01, 0.2913933674473832E-01, 0.3589696456182207E-01, 0.2136293938333395E-23, 0.5594353069081231E-15, 0.0000000000000000E+00, 0.1112732565966979E-09, 0.9895328911616120E-03, 0.6252320936560726E-03}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: 0.0000000000000000, + dmin1: 2.9139336744737766E-002, + dmin2: 4.9426557292086552E-002, + dn: -2.0808762284537102E-024, + dn1: 2.9139336744737766E-002, + dn2: 0.15959234211062134, + tau: 1.1127325659669789E-010, + ttype: -15, + g: 0.0000000000000000, + zOut: []float64{0.2440445008292708E+01, 0.2398080345610006E+01, 0.2094976520226600E-01, 0.4236466279397526E-01, 0.1195399335050165E+01, 0.1206825371451915E+01, 0.4200549016048655E-02, 0.9523728911788614E-02, 0.5236691632680260E+00, 0.5272444803016919E+00, 0.9895328911616120E-03, 0.6252320936560726E-03, 0.8561706005512968E+00, 0.8287928057414093E+00, 0.3940429656773515E-01, 0.2836732781232222E-01, 0.1391235531991410E+01, 0.1189283688611819E+01, 0.1042571673718422E+00, 0.2413561400585997E+00, 0.8502943288943339E+00, 0.6009636865971842E+00, 0.9053227710395735E-01, 0.3535878097802652E+00, 0.2082981609510011E+00, 0.2177085286147829E+00, 0.5123864833424303E+00, 0.8112190955144877E-01, 0.9743424132304999E+00, 0.1315663829494665E+01, 0.1544607000116935E+00, 0.1710650671895379E+00, 0.1146411422862754E+01, 0.8797682289623537E+00, 0.6964571542795012E-01, 0.4211038940233675E+00, 0.1311855086360479E+01, 0.1896031949674164E+00, 0.4911023119923957E+00, 0.1191897606932286E+01, 0.5148125055608023E+00, 0.5405288693957555E+00, 0.5388626806938843E+00, 0.4653859482687157E+00, 0.1688986820057405E+00, 0.5960928726645816E+00, 0.2379466412690434E+00, 0.1116684901463164E+00, 0.6804539597693821E+00, 0.3598944880993349E+00, 0.8082246312519304E+00, 0.5585061130503639E+00, 0.6440798303130841E+00, 0.9846976386969850E+00, 0.8956185534970393E+00, 0.4676068229793028E+00, 0.5202501498046066E+00, 0.1233621533334973E+01, 0.1330768347199243E+00, 0.1822471700779458E+00, 0.9512749631631994E+00, 0.3798865198782122E+00, 0.9903988276741268E+00, 0.7044652781161848E+00, 0.7144727578117591E+00, 0.1337385443370563E+01, 0.2262808998212762E+00, 0.3674861422265960E+00, 0.7024632317571722E+00, 0.4399391431629689E+00, 0.3651136124179467E+00, 0.4888049885267526E+00, 0.1966029864506465E+00, 0.5247059546398414E+00, 0.6757627705811050E-02, 0.3701064434002514E-01, 0.2913933674473832E-01, 0.3589696456182207E-01, 0.2136293938333395E-23, 0.5594353069081231E-15, 0.0000000000000000E+00, 0.1112732565966979E-09, 0.9895328911616120E-03, 0.6252320936560726E-03}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2440445008292708E+01, 0.2461394773494974E+01, 0.2094976520226600E-01, 0.1017444891892999E-01, 0.1195399335050165E+01, 0.1189425435147283E+01, 0.4200549016048655E-02, 0.1849378635683999E-02, 0.5236691632680260E+00, 0.5228093175235037E+00, 0.9895328911616120E-03, 0.1620493249248586E-02, 0.8561706005512968E+00, 0.8939544038697832E+00, 0.3940429656773515E-01, 0.6132377362967349E-01, 0.1391235531991410E+01, 0.1434168925733579E+01, 0.1042571673718422E+00, 0.6181229879703373E-01, 0.8502943288943339E+00, 0.8790143072012576E+00, 0.9053227710395735E-01, 0.2145324219750511E-01, 0.2082981609510011E+00, 0.6992314020959263E+00, 0.5123864833424303E+00, 0.7139837844669097E+00, 0.9743424132304999E+00, 0.4148193287752837E+00, 0.1544607000116935E+00, 0.4268738185358478E+00, 0.1146411422862754E+01, 0.7891833197548568E+00, 0.6964571542795012E-01, 0.1157716892137957E+00, 0.1311855086360479E+01, 0.1687185709139079E+01, 0.4911023119923957E+00, 0.1498504938454686E+00, 0.5148125055608023E+00, 0.9038246924092180E+00, 0.5388626806938843E+00, 0.1006978425303630E+00, 0.1688986820057405E+00, 0.3061474807444209E+00, 0.2379466412690434E+00, 0.5288684194677825E+00, 0.6804539597693821E+00, 0.9598101715535300E+00, 0.8082246312519304E+00, 0.5423584775195998E+00, 0.6440798303130841E+00, 0.9973399062905237E+00, 0.8956185534970393E+00, 0.4671884516860899E+00, 0.5202501498046066E+00, 0.1861385328384410E+00, 0.1330768347199243E+00, 0.6800991665489665E+00, 0.9512749631631994E+00, 0.1261574624288360E+01, 0.9903988276741268E+00, 0.5608966509936130E+00, 0.7144727578117591E+00, 0.3798570066394223E+00, 0.2262808998212762E+00, 0.4184574968871406E+00, 0.7024632317571722E+00, 0.6491193472879784E+00, 0.3651136124179467E+00, 0.1105843276664904E+00, 0.1966029864506465E+00, 0.9277628648996712E-01, 0.6757627705811050E-02, 0.2122447413720272E-02, 0.2913933674473832E-01, 0.2701688933101806E-01, 0.2136293938333395E-23, 0.0000000000000000E+00, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 21, + dmin: 0.0000000000000000, + dmin1: 2.7016889331018056E-002, + dmin2: 5.3061698118516694E-002, + dn: 0.0000000000000000, + dn1: 2.7016889331018056E-002, + dn2: 8.6018658784156071E-002, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.2440445008292708E+01, 0.2461394773494974E+01, 0.2094976520226600E-01, 0.1017444891892999E-01, 0.1195399335050165E+01, 0.1189425435147283E+01, 0.4200549016048655E-02, 0.1849378635683999E-02, 0.5236691632680260E+00, 0.5228093175235037E+00, 0.9895328911616120E-03, 0.1620493249248586E-02, 0.8561706005512968E+00, 0.8939544038697832E+00, 0.3940429656773515E-01, 0.6132377362967349E-01, 0.1391235531991410E+01, 0.1434168925733579E+01, 0.1042571673718422E+00, 0.6181229879703373E-01, 0.8502943288943339E+00, 0.8790143072012576E+00, 0.9053227710395735E-01, 0.2145324219750511E-01, 0.2082981609510011E+00, 0.6992314020959263E+00, 0.5123864833424303E+00, 0.7139837844669097E+00, 0.9743424132304999E+00, 0.4148193287752837E+00, 0.1544607000116935E+00, 0.4268738185358478E+00, 0.1146411422862754E+01, 0.7891833197548568E+00, 0.6964571542795012E-01, 0.1157716892137957E+00, 0.1311855086360479E+01, 0.1687185709139079E+01, 0.4911023119923957E+00, 0.1498504938454686E+00, 0.5148125055608023E+00, 0.9038246924092180E+00, 0.5388626806938843E+00, 0.1006978425303630E+00, 0.1688986820057405E+00, 0.3061474807444209E+00, 0.2379466412690434E+00, 0.5288684194677825E+00, 0.6804539597693821E+00, 0.9598101715535300E+00, 0.8082246312519304E+00, 0.5423584775195998E+00, 0.6440798303130841E+00, 0.9973399062905237E+00, 0.8956185534970393E+00, 0.4671884516860899E+00, 0.5202501498046066E+00, 0.1861385328384410E+00, 0.1330768347199243E+00, 0.6800991665489665E+00, 0.9512749631631994E+00, 0.1261574624288360E+01, 0.9903988276741268E+00, 0.5608966509936130E+00, 0.7144727578117591E+00, 0.3798570066394223E+00, 0.2262808998212762E+00, 0.4184574968871406E+00, 0.7024632317571722E+00, 0.6491193472879784E+00, 0.3651136124179467E+00, 0.1105843276664904E+00, 0.1966029864506465E+00, 0.9277628648996712E-01, 0.6757627705811050E-02, 0.2122447413720272E-02, 0.2913933674473832E-01, 0.2701688933101806E-01, 0.2136293938333395E-23, 0.0000000000000000E+00, 0.2117542506861687E-04}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2471569222413904E+01, 0.2461394773494974E+01, 0.4896382518051712E-02, 0.1017444891892999E-01, 0.1186378431264915E+01, 0.1189425435147283E+01, 0.8149780515932184E-03, 0.1849378635683999E-02, 0.5236148327211592E+00, 0.5228093175235037E+00, 0.2766627272719901E-02, 0.1620493249248586E-02, 0.9525115502267366E+00, 0.8939544038697832E+00, 0.9233342160256496E-01, 0.6132377362967349E-01, 0.1403647802928048E+01, 0.1434168925733579E+01, 0.3870906568602875E-01, 0.6181229879703373E-01, 0.8617584837127339E+00, 0.8790143072012576E+00, 0.1740717486950262E-01, 0.2145324219750511E-01, 0.1395808011693333E+01, 0.6992314020959263E+00, 0.2121884039551361E+00, 0.7139837844669097E+00, 0.6295047433559955E+00, 0.4148193287752837E+00, 0.5351535485381410E+00, 0.4268738185358478E+00, 0.3698014604305115E+00, 0.7891833197548568E+00, 0.5281978587564573E+00, 0.1157716892137957E+00, 0.1308838344228090E+01, 0.1687185709139079E+01, 0.1034799882693896E+00, 0.1498504938454686E+00, 0.9010425466701916E+00, 0.9038246924092180E+00, 0.3421413441684364E-01, 0.1006978425303630E+00, 0.8008017657953598E+00, 0.3061474807444209E+00, 0.6338813300623194E+00, 0.5288684194677825E+00, 0.8682873190108105E+00, 0.9598101715535300E+00, 0.6229686202966810E+00, 0.5423584775195998E+00, 0.8415597376799326E+00, 0.9973399062905237E+00, 0.1033340463692495E+00, 0.4671884516860899E+00, 0.7629036530181579E+00, 0.1861385328384410E+00, 0.1124645093942705E+01, 0.6800991665489665E+00, 0.6978261813392677E+00, 0.1261574624288360E+01, 0.3053203341720497E+00, 0.5608966509936130E+00, 0.4929941693545132E+00, 0.3798570066394223E+00, 0.5509778292160957E+00, 0.4184574968871406E+00, 0.2087258457383731E+00, 0.6491193472879784E+00, 0.4915348757406203E-01, 0.1105843276664904E+00, 0.4574524632962537E-01, 0.9277628648996712E-01, 0.1253505697055357E-02, 0.2122447413720272E-02, 0.2576338363396270E-01, 0.2701688933101806E-01, 0.8149780515932184E-03, 0.1620493249248586E-02}, + i0: 1, + n0: 20, + pp: 0, + n0in: 20, + dmin: 2.5763383633962696E-002, + dmin1: 4.3622798915905092E-002, + dmin2: 7.4536672467372611E-002, + dn: 2.5763383633962696E-002, + dn1: 4.3622798915905092E-002, + dn2: 9.8141518071882677E-002, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.2471569222413904E+01, 0.2461394773494974E+01, 0.4896382518051712E-02, 0.1017444891892999E-01, 0.1186378431264915E+01, 0.1189425435147283E+01, 0.8149780515932184E-03, 0.1849378635683999E-02, 0.5236148327211592E+00, 0.5228093175235037E+00, 0.2766627272719901E-02, 0.1620493249248586E-02, 0.9525115502267366E+00, 0.8939544038697832E+00, 0.9233342160256496E-01, 0.6132377362967349E-01, 0.1403647802928048E+01, 0.1434168925733579E+01, 0.3870906568602875E-01, 0.6181229879703373E-01, 0.8617584837127339E+00, 0.8790143072012576E+00, 0.1740717486950262E-01, 0.2145324219750511E-01, 0.1395808011693333E+01, 0.6992314020959263E+00, 0.2121884039551361E+00, 0.7139837844669097E+00, 0.6295047433559955E+00, 0.4148193287752837E+00, 0.5351535485381410E+00, 0.4268738185358478E+00, 0.3698014604305115E+00, 0.7891833197548568E+00, 0.5281978587564573E+00, 0.1157716892137957E+00, 0.1308838344228090E+01, 0.1687185709139079E+01, 0.1034799882693896E+00, 0.1498504938454686E+00, 0.9010425466701916E+00, 0.9038246924092180E+00, 0.3421413441684364E-01, 0.1006978425303630E+00, 0.8008017657953598E+00, 0.3061474807444209E+00, 0.6338813300623194E+00, 0.5288684194677825E+00, 0.8682873190108105E+00, 0.9598101715535300E+00, 0.6229686202966810E+00, 0.5423584775195998E+00, 0.8415597376799326E+00, 0.9973399062905237E+00, 0.1033340463692495E+00, 0.4671884516860899E+00, 0.7629036530181579E+00, 0.1861385328384410E+00, 0.1124645093942705E+01, 0.6800991665489665E+00, 0.6978261813392677E+00, 0.1261574624288360E+01, 0.3053203341720497E+00, 0.5608966509936130E+00, 0.4929941693545132E+00, 0.3798570066394223E+00, 0.5509778292160957E+00, 0.4184574968871406E+00, 0.2087258457383731E+00, 0.6491193472879784E+00, 0.4915348757406203E-01, 0.1105843276664904E+00, 0.4574524632962537E-01, 0.9277628648996712E-01, 0.1253505697055357E-02, 0.2122447413720272E-02, 0.2576338363396270E-01, 0.2701688933101806E-01, 0.8149780515932184E-03, 0.1620493249248586E-02}, + tauOut: 2.0080554394878082E-002, + ttypeOut: -3, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2471569222413904E+01, 0.2471445466333236E+01, 0.4896382518051712E-02, 0.2350431231346416E-02, 0.1186378431264915E+01, 0.1179822839486443E+01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.5236148327211592E+00, 0.5209996276036221E+00, 0.2766627272719901E-02, 0.5058054349403302E-02, 0.9525115502267366E+00, 0.1034766778881179E+01, 0.9233342160256496E-01, 0.1252490967185870E+00, 0.1403647802928048E+01, 0.1312087633296770E+01, 0.3870906568602875E-01, 0.2542350442532051E-01, 0.8617584837127339E+00, 0.8487220155581966E+00, 0.1740717486950262E-01, 0.2862783537884150E-01, 0.1395808011693333E+01, 0.1574348441670908E+01, 0.2121884039551361E+00, 0.8484373804386666E-01, 0.6295047433559955E+00, 0.1074794415251550E+01, 0.5351535485381410E+00, 0.1841287608083240E+00, 0.3698014604305115E+00, 0.7088504197799252E+00, 0.5281978587564573E+00, 0.9752771411128711E+00, 0.1308838344228090E+01, 0.4320210527858890E+00, 0.1034799882693896E+00, 0.2158225196628609E+00, 0.9010425466701916E+00, 0.7144140228254550E+00, 0.3421413441684364E-01, 0.3835134583138245E-01, 0.8008017657953598E+00, 0.1391311611427577E+01, 0.6338813300623194E+00, 0.3955915526975877E+00, 0.8682873190108105E+00, 0.1090644248011184E+01, 0.6229686202966810E+00, 0.4806932321292802E+00, 0.8415597376799326E+00, 0.4591804133211825E+00, 0.1033340463692495E+00, 0.1716839812178710E+00, 0.7629036530181579E+00, 0.1710844627144272E+01, 0.1124645093942705E+01, 0.4587247601659613E+00, 0.6978261813392677E+00, 0.5394016167466366E+00, 0.3053203341720497E+00, 0.2790520826393697E+00, 0.4929941693545132E+00, 0.7598997773325197E+00, 0.5509778292160957E+00, 0.1513401067044909E+00, 0.2087258457383731E+00, 0.1015190880092246E+00, 0.4915348757406203E-01, 0.2214892234681356E-01, 0.4574524632962537E-01, 0.1982969108114764E-01, 0.1253505697055357E-02, 0.1628595626045726E-02, 0.2576338363396270E-01, 0.1911464940919745E-01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 1.8576185384092288E-002, + dmin1: 1.8576185384092288E-002, + dmin2: 5.2365600435162571E-002, + dn: 1.9114649409197451E-002, + dn1: 1.8576185384092288E-002, + dn2: 5.2365600435162571E-002, + tau: 5.0201385987195205E-003, + ttype: -15, + g: 0.0000000000000000, + zOut: []float64{0.2471569222413904E+01, 0.2471445466333236E+01, 0.4896382518051712E-02, 0.2350431231346416E-02, 0.1186378431264915E+01, 0.1179822839486443E+01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.5236148327211592E+00, 0.5209996276036221E+00, 0.2766627272719901E-02, 0.5058054349403302E-02, 0.9525115502267366E+00, 0.1034766778881179E+01, 0.9233342160256496E-01, 0.1252490967185870E+00, 0.1403647802928048E+01, 0.1312087633296770E+01, 0.3870906568602875E-01, 0.2542350442532051E-01, 0.8617584837127339E+00, 0.8487220155581966E+00, 0.1740717486950262E-01, 0.2862783537884150E-01, 0.1395808011693333E+01, 0.1574348441670908E+01, 0.2121884039551361E+00, 0.8484373804386666E-01, 0.6295047433559955E+00, 0.1074794415251550E+01, 0.5351535485381410E+00, 0.1841287608083240E+00, 0.3698014604305115E+00, 0.7088504197799252E+00, 0.5281978587564573E+00, 0.9752771411128711E+00, 0.1308838344228090E+01, 0.4320210527858890E+00, 0.1034799882693896E+00, 0.2158225196628609E+00, 0.9010425466701916E+00, 0.7144140228254550E+00, 0.3421413441684364E-01, 0.3835134583138245E-01, 0.8008017657953598E+00, 0.1391311611427577E+01, 0.6338813300623194E+00, 0.3955915526975877E+00, 0.8682873190108105E+00, 0.1090644248011184E+01, 0.6229686202966810E+00, 0.4806932321292802E+00, 0.8415597376799326E+00, 0.4591804133211825E+00, 0.1033340463692495E+00, 0.1716839812178710E+00, 0.7629036530181579E+00, 0.1710844627144272E+01, 0.1124645093942705E+01, 0.4587247601659613E+00, 0.6978261813392677E+00, 0.5394016167466366E+00, 0.3053203341720497E+00, 0.2790520826393697E+00, 0.4929941693545132E+00, 0.7598997773325197E+00, 0.5509778292160957E+00, 0.1513401067044909E+00, 0.2087258457383731E+00, 0.1015190880092246E+00, 0.4915348757406203E-01, 0.2214892234681356E-01, 0.4574524632962537E-01, 0.1982969108114764E-01, 0.1253505697055357E-02, 0.1628595626045726E-02, 0.2576338363396270E-01, 0.1911464940919745E-01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.2117542506861687E-04}, + tauOut: 5.4769133315280185E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2468318984233055E+01, 0.2471445466333236E+01, 0.1123474100024551E-02, 0.2350431231346416E-02, 0.1173584145846428E+01, 0.1179822839486443E+01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.5204201986859162E+00, 0.5209996276036221E+00, 0.1005707814522541E-01, 0.5058054349403302E-02, 0.1144481884123012E+01, 0.1034766778881179E+01, 0.1435914304680996E+00, 0.1252490967185870E+00, 0.1188442793922463E+01, 0.1312087633296770E+01, 0.1815610143690141E-01, 0.2542350442532051E-01, 0.8537168361686087E+00, 0.8487220155581966E+00, 0.5279290053521807E-01, 0.2862783537884150E-01, 0.1600922365848029E+01, 0.1574348441670908E+01, 0.5696064828871891E-01, 0.8484373804386666E-01, 0.1196485614439627E+01, 0.1074794415251550E+01, 0.1090859328498209E+00, 0.1841287608083240E+00, 0.1569564714711448E+01, 0.7088504197799252E+00, 0.2684440171930437E+00, 0.9752771411128711E+00, 0.3739226419241781E+00, 0.4320210527858890E+00, 0.4123490187575627E+00, 0.2158225196628609E+00, 0.3349394365677468E+00, 0.7144140228254550E+00, 0.1593084209965356E+00, 0.3835134583138245E-01, 0.1622117829797102E+01, 0.1391311611427577E+01, 0.2659792301064862E+00, 0.3955915526975877E+00, 0.1299881336702450E+01, 0.1090644248011184E+01, 0.1698038973078534E+00, 0.4806932321292802E+00, 0.4555835838996722E+00, 0.4591804133211825E+00, 0.6447216871142054E+00, 0.1716839812178710E+00, 0.1519370786864500E+01, 0.1710844627144272E+01, 0.1628548339973444E+00, 0.4587247601659613E+00, 0.6501219520571339E+00, 0.5394016167466366E+00, 0.3261720586281595E+00, 0.2790520826393697E+00, 0.5795909120773233E+00, 0.7598997773325197E+00, 0.2650819619788820E-01, 0.1513401067044909E+00, 0.9168290082662192E-01, 0.1015190880092246E+00, 0.4790492926791300E-02, 0.2214892234681356E-01, 0.1119088044887405E-01, 0.1982969108114764E-01, 0.2781732372482683E-02, 0.1628595626045726E-02, 0.1085600370518675E-01, 0.1911464940919745E-01, 0.1605699355811189E-03, 0.3616937915375072E-03}, + i0: 1, + n0: 20, + pp: 0, + n0in: 20, + dmin: 9.5622848228283271E-003, + dmin1: 9.5622848228283271E-003, + dmin2: 6.9533978479808370E-002, + dn: 1.0856003705186750E-002, + dn1: 9.5622848228283271E-003, + dn2: 6.9533978479808370E-002, + tau: 5.4769133315280185E-003, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2468318984233055E+01, 0.2471445466333236E+01, 0.1123474100024551E-02, 0.2350431231346416E-02, 0.1173584145846428E+01, 0.1179822839486443E+01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.5204201986859162E+00, 0.5209996276036221E+00, 0.1005707814522541E-01, 0.5058054349403302E-02, 0.1144481884123012E+01, 0.1034766778881179E+01, 0.1435914304680996E+00, 0.1252490967185870E+00, 0.1188442793922463E+01, 0.1312087633296770E+01, 0.1815610143690141E-01, 0.2542350442532051E-01, 0.8537168361686087E+00, 0.8487220155581966E+00, 0.5279290053521807E-01, 0.2862783537884150E-01, 0.1600922365848029E+01, 0.1574348441670908E+01, 0.5696064828871891E-01, 0.8484373804386666E-01, 0.1196485614439627E+01, 0.1074794415251550E+01, 0.1090859328498209E+00, 0.1841287608083240E+00, 0.1569564714711448E+01, 0.7088504197799252E+00, 0.2684440171930437E+00, 0.9752771411128711E+00, 0.3739226419241781E+00, 0.4320210527858890E+00, 0.4123490187575627E+00, 0.2158225196628609E+00, 0.3349394365677468E+00, 0.7144140228254550E+00, 0.1593084209965356E+00, 0.3835134583138245E-01, 0.1622117829797102E+01, 0.1391311611427577E+01, 0.2659792301064862E+00, 0.3955915526975877E+00, 0.1299881336702450E+01, 0.1090644248011184E+01, 0.1698038973078534E+00, 0.4806932321292802E+00, 0.4555835838996722E+00, 0.4591804133211825E+00, 0.6447216871142054E+00, 0.1716839812178710E+00, 0.1519370786864500E+01, 0.1710844627144272E+01, 0.1628548339973444E+00, 0.4587247601659613E+00, 0.6501219520571339E+00, 0.5394016167466366E+00, 0.3261720586281595E+00, 0.2790520826393697E+00, 0.5795909120773233E+00, 0.7598997773325197E+00, 0.2650819619788820E-01, 0.1513401067044909E+00, 0.9168290082662192E-01, 0.1015190880092246E+00, 0.4790492926791300E-02, 0.2214892234681356E-01, 0.1119088044887405E-01, 0.1982969108114764E-01, 0.2781732372482683E-02, 0.1628595626045726E-02, 0.1085600370518675E-01, 0.1911464940919745E-01, 0.1605699355811189E-03, 0.3616937915375072E-03}, + tauOut: 5.1216063611655054E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2468318984233055E+01, 0.2464320851971913E+01, 0.1123474100024551E-02, 0.5350323562789559E-03, 0.1173584145846428E+01, 0.1168088077064565E+01, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.5204201986859162E+00, 0.5252841314829605E+00, 0.1005707814522541E-01, 0.2191222436498315E-01, 0.1144481884123012E+01, 0.1261039483864963E+01, 0.1435914304680996E+00, 0.1353250258951489E+00, 0.1188442793922463E+01, 0.1066152263103050E+01, 0.1815610143690141E-01, 0.1453842008528346E-01, 0.8537168361686087E+00, 0.8868497102573779E+00, 0.5279290053521807E-01, 0.9530062900995111E-01, 0.1600922365848029E+01, 0.1557460778765631E+01, 0.5696064828871891E-01, 0.4375878814786067E-01, 0.1196485614439627E+01, 0.1256691152780422E+01, 0.1090859328498209E+00, 0.1362446379077657E+00, 0.1569564714711448E+01, 0.1696642487635560E+01, 0.2684440171930437E+00, 0.5916231430550117E-01, 0.3739226419241781E+00, 0.7219877400150740E+00, 0.4123490187575627E+00, 0.1912940350054112E+00, 0.3349394365677468E+00, 0.2978322161977056E+00, 0.1593084209965356E+00, 0.8676597630518320E+00, 0.1622117829797102E+01, 0.1015315690490590E+01, 0.2659792301064862E+00, 0.3405260456467969E+00, 0.1299881336702450E+01, 0.1124037582002341E+01, 0.1698038973078534E+00, 0.6882320425428856E-01, 0.4555835838996722E+00, 0.1026360460398424E+01, 0.6447216871142054E+00, 0.9544125430154021E+00, 0.1519370786864500E+01, 0.7226914714852769E+00, 0.1628548339973444E+00, 0.1465016632377001E+00, 0.6501219520571339E+00, 0.8246707410864278E+00, 0.3261720586281595E+00, 0.2292385937027206E+00, 0.5795909120773233E+00, 0.3717389082113253E+00, 0.2650819619788820E-01, 0.6537783023029759E-02, 0.9168290082662192E-01, 0.8481400436921797E-01, 0.4790492926791300E-02, 0.6320870478125323E-03, 0.1119088044887405E-01, 0.8218919412378699E-02, 0.2781732372482683E-02, 0.3674266095981827E-02, 0.1085600370518675E-01, 0.2060131248039419E-02, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 2.0601312480394186E-003, + dmin1: 5.4371870398960158E-003, + dmin2: 8.0023511442426670E-002, + dn: 2.0601312480394186E-003, + dn1: 5.4371870398960158E-003, + dn2: 8.0023511442426670E-002, + tau: 5.1216063611655054E-003, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2468318984233055E+01, 0.2464320851971913E+01, 0.1123474100024551E-02, 0.5350323562789559E-03, 0.1173584145846428E+01, 0.1168088077064565E+01, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.5204201986859162E+00, 0.5252841314829605E+00, 0.1005707814522541E-01, 0.2191222436498315E-01, 0.1144481884123012E+01, 0.1261039483864963E+01, 0.1435914304680996E+00, 0.1353250258951489E+00, 0.1188442793922463E+01, 0.1066152263103050E+01, 0.1815610143690141E-01, 0.1453842008528346E-01, 0.8537168361686087E+00, 0.8868497102573779E+00, 0.5279290053521807E-01, 0.9530062900995111E-01, 0.1600922365848029E+01, 0.1557460778765631E+01, 0.5696064828871891E-01, 0.4375878814786067E-01, 0.1196485614439627E+01, 0.1256691152780422E+01, 0.1090859328498209E+00, 0.1362446379077657E+00, 0.1569564714711448E+01, 0.1696642487635560E+01, 0.2684440171930437E+00, 0.5916231430550117E-01, 0.3739226419241781E+00, 0.7219877400150740E+00, 0.4123490187575627E+00, 0.1912940350054112E+00, 0.3349394365677468E+00, 0.2978322161977056E+00, 0.1593084209965356E+00, 0.8676597630518320E+00, 0.1622117829797102E+01, 0.1015315690490590E+01, 0.2659792301064862E+00, 0.3405260456467969E+00, 0.1299881336702450E+01, 0.1124037582002341E+01, 0.1698038973078534E+00, 0.6882320425428856E-01, 0.4555835838996722E+00, 0.1026360460398424E+01, 0.6447216871142054E+00, 0.9544125430154021E+00, 0.1519370786864500E+01, 0.7226914714852769E+00, 0.1628548339973444E+00, 0.1465016632377001E+00, 0.6501219520571339E+00, 0.8246707410864278E+00, 0.3261720586281595E+00, 0.2292385937027206E+00, 0.5795909120773233E+00, 0.3717389082113253E+00, 0.2650819619788820E-01, 0.6537783023029759E-02, 0.9168290082662192E-01, 0.8481400436921797E-01, 0.4790492926791300E-02, 0.6320870478125323E-03, 0.1119088044887405E-01, 0.8218919412378699E-02, 0.2781732372482683E-02, 0.3674266095981827E-02, 0.1085600370518675E-01, 0.2060131248039419E-02, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.2117542506861687E-04}, + tauOut: 1.2817878169164906E-003, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463574096511276E+01, 0.2464320851971913E+01, 0.2536822079344948E-03, 0.5350323562789559E-03, 0.1166624146026729E+01, 0.1168088077064565E+01, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.5458823568901986E+00, 0.5252841314829605E+00, 0.5061929508212644E-01, 0.2191222436498315E-01, 0.1344463426861069E+01, 0.1261039483864963E+01, 0.1073120173669855E+00, 0.1353250258951489E+00, 0.9720968780044319E+00, 0.1066152263103050E+01, 0.1326348631702415E-01, 0.1453842008528346E-01, 0.9676050651333883E+00, 0.8868497102573779E+00, 0.1533962535161303E+00, 0.9530062900995111E-01, 0.1446541525580445E+01, 0.1557460778765631E+01, 0.3801569533217738E-01, 0.4375878814786067E-01, 0.1353638307539094E+01, 0.1256691152780422E+01, 0.1707682473962209E+00, 0.1362446379077657E+00, 0.1583754766727924E+01, 0.1696642487635560E+01, 0.2697037855661164E-01, 0.5916231430550117E-01, 0.8850296086469572E+00, 0.7219877400150740E+00, 0.6437471225190403E-01, 0.1912940350054112E+00, 0.1099835479180717E+01, 0.2978322161977056E+00, 0.8009821360646626E+00, 0.8676597630518320E+00, 0.5535778122558079E+00, 0.1015315690490590E+01, 0.6914368034330997E+00, 0.3405260456467969E+00, 0.5001421950066134E+00, 0.1124037582002341E+01, 0.1412346654806686E+00, 0.6882320425428856E-01, 0.1838256550116241E+01, 0.1026360460398424E+01, 0.3752173792456719E+00, 0.9544125430154021E+00, 0.4926939676603885E+00, 0.7226914714852769E+00, 0.2452143584512202E+00, 0.1465016632377001E+00, 0.8074131885210117E+00, 0.8246707410864278E+00, 0.1055431169003394E+00, 0.2292385937027206E+00, 0.2714517865170992E+00, 0.3717389082113253E+00, 0.2042703660177667E-02, 0.6537783023029759E-02, 0.8212159993993635E-01, 0.8481400436921797E-01, 0.6326073178529442E-04, 0.6320870478125323E-03, 0.1054813695965874E-01, 0.8218919412378699E-02, 0.7176120699696391E-03, 0.3674266095981827E-02, 0.6073136115328898E-04, 0.2060131248039419E-02, 0.3221114082852138E-04, 0.7153898701552432E-04}, + i0: 1, + n0: 20, + pp: 0, + n0in: 20, + dmin: 6.0731361153288982E-005, + dmin1: 6.8738708636769136E-003, + dmin2: 8.1489512892123819E-002, + dn: 6.0731361153288982E-005, + dn1: 6.8738708636769136E-003, + dn2: 8.1489512892123819E-002, + tau: 1.2817878169164906E-003, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2463574096511276E+01, 0.2464320851971913E+01, 0.2536822079344948E-03, 0.5350323562789559E-03, 0.1166624146026729E+01, 0.1168088077064565E+01, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.5458823568901986E+00, 0.5252841314829605E+00, 0.5061929508212644E-01, 0.2191222436498315E-01, 0.1344463426861069E+01, 0.1261039483864963E+01, 0.1073120173669855E+00, 0.1353250258951489E+00, 0.9720968780044319E+00, 0.1066152263103050E+01, 0.1326348631702415E-01, 0.1453842008528346E-01, 0.9676050651333883E+00, 0.8868497102573779E+00, 0.1533962535161303E+00, 0.9530062900995111E-01, 0.1446541525580445E+01, 0.1557460778765631E+01, 0.3801569533217738E-01, 0.4375878814786067E-01, 0.1353638307539094E+01, 0.1256691152780422E+01, 0.1707682473962209E+00, 0.1362446379077657E+00, 0.1583754766727924E+01, 0.1696642487635560E+01, 0.2697037855661164E-01, 0.5916231430550117E-01, 0.8850296086469572E+00, 0.7219877400150740E+00, 0.6437471225190403E-01, 0.1912940350054112E+00, 0.1099835479180717E+01, 0.2978322161977056E+00, 0.8009821360646626E+00, 0.8676597630518320E+00, 0.5535778122558079E+00, 0.1015315690490590E+01, 0.6914368034330997E+00, 0.3405260456467969E+00, 0.5001421950066134E+00, 0.1124037582002341E+01, 0.1412346654806686E+00, 0.6882320425428856E-01, 0.1838256550116241E+01, 0.1026360460398424E+01, 0.3752173792456719E+00, 0.9544125430154021E+00, 0.4926939676603885E+00, 0.7226914714852769E+00, 0.2452143584512202E+00, 0.1465016632377001E+00, 0.8074131885210117E+00, 0.8246707410864278E+00, 0.1055431169003394E+00, 0.2292385937027206E+00, 0.2714517865170992E+00, 0.3717389082113253E+00, 0.2042703660177667E-02, 0.6537783023029759E-02, 0.8212159993993635E-01, 0.8481400436921797E-01, 0.6326073178529442E-04, 0.6320870478125323E-03, 0.1054813695965874E-01, 0.8218919412378699E-02, 0.7176120699696391E-03, 0.3674266095981827E-02, 0.6073136115328898E-04, 0.2060131248039419E-02, 0.3221114082852138E-04, 0.7153898701552432E-04}, + tauOut: 5.6837241251038845E-005, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463574096511276E+01, 0.2463770941477959E+01, 0.2536822079344948E-03, 0.1201214707955848E-03, 0.1166624146026729E+01, 0.1166479398455512E+01, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.5458823568901986E+00, 0.5964297407456295E+00, 0.5061929508212644E-01, 0.1141052940222717E+00, 0.1344463426861069E+01, 0.1337613312964532E+01, 0.1073120173669855E+00, 0.7798791776646297E-01, 0.9720968780044319E+00, 0.9073156093137420E+00, 0.1326348631702415E-01, 0.1414482062243694E-01, 0.9676050651333883E+00, 0.1106799660785830E+01, 0.1533962535161303E+00, 0.2004825791345134E+00, 0.1446541525580445E+01, 0.1284017804536858E+01, 0.3801569533217738E-01, 0.4007693764646178E-01, 0.1353638307539094E+01, 0.1484272780047602E+01, 0.1707682473962209E+00, 0.1822138285193538E+00, 0.1583754766727924E+01, 0.1428454479523931E+01, 0.2697037855661164E-01, 0.1671007646458111E-01, 0.8850296086469572E+00, 0.9326374071930291E+00, 0.6437471225190403E-01, 0.7591545433480534E-01, 0.1099835479180717E+01, 0.1824845323669324E+01, 0.8009821360646626E+00, 0.2429827519008994E+00, 0.5535778122558079E+00, 0.1001975026546757E+01, 0.6914368034330997E+00, 0.3451350696526060E+00, 0.5001421950066134E+00, 0.2961849535934249E+00, 0.1412346654806686E+00, 0.8765656248686587E+00, 0.1838256550116241E+01, 0.1336851467252003E+01, 0.3752173792456719E+00, 0.1382856239786244E+00, 0.4926939676603885E+00, 0.5995658648917332E+00, 0.2452143584512202E+00, 0.3302211126778973E+00, 0.8074131885210117E+00, 0.5826783555022028E+00, 0.1055431169003394E+00, 0.4916926700063749E-01, 0.2714517865170992E+00, 0.2242683859353883E+00, 0.2042703660177667E-02, 0.7479881396448043E-03, 0.8212159993993635E-01, 0.8138003529082581E-01, 0.6326073178529442E-04, 0.8199589256196194E-05, 0.1054813695965874E-01, 0.1120071219912114E-01, 0.7176120699696391E-03, 0.3890963093641941E-05, 0.6073136115328898E-04, 0.3156808608191942E-08, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 3.1568086081919418E-009, + dmin1: 1.0483100129151506E-002, + dmin2: 8.1316774559040517E-002, + dn: 3.1568086081919418E-009, + dn1: 1.0483100129151506E-002, + dn2: 8.1316774559040517E-002, + tau: 5.6837241251038845E-005, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2463574096511276E+01, 0.2463770941477959E+01, 0.2536822079344948E-03, 0.1201214707955848E-03, 0.1166624146026729E+01, 0.1166479398455512E+01, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.5458823568901986E+00, 0.5964297407456295E+00, 0.5061929508212644E-01, 0.1141052940222717E+00, 0.1344463426861069E+01, 0.1337613312964532E+01, 0.1073120173669855E+00, 0.7798791776646297E-01, 0.9720968780044319E+00, 0.9073156093137420E+00, 0.1326348631702415E-01, 0.1414482062243694E-01, 0.9676050651333883E+00, 0.1106799660785830E+01, 0.1533962535161303E+00, 0.2004825791345134E+00, 0.1446541525580445E+01, 0.1284017804536858E+01, 0.3801569533217738E-01, 0.4007693764646178E-01, 0.1353638307539094E+01, 0.1484272780047602E+01, 0.1707682473962209E+00, 0.1822138285193538E+00, 0.1583754766727924E+01, 0.1428454479523931E+01, 0.2697037855661164E-01, 0.1671007646458111E-01, 0.8850296086469572E+00, 0.9326374071930291E+00, 0.6437471225190403E-01, 0.7591545433480534E-01, 0.1099835479180717E+01, 0.1824845323669324E+01, 0.8009821360646626E+00, 0.2429827519008994E+00, 0.5535778122558079E+00, 0.1001975026546757E+01, 0.6914368034330997E+00, 0.3451350696526060E+00, 0.5001421950066134E+00, 0.2961849535934249E+00, 0.1412346654806686E+00, 0.8765656248686587E+00, 0.1838256550116241E+01, 0.1336851467252003E+01, 0.3752173792456719E+00, 0.1382856239786244E+00, 0.4926939676603885E+00, 0.5995658648917332E+00, 0.2452143584512202E+00, 0.3302211126778973E+00, 0.8074131885210117E+00, 0.5826783555022028E+00, 0.1055431169003394E+00, 0.4916926700063749E-01, 0.2714517865170992E+00, 0.2242683859353883E+00, 0.2042703660177667E-02, 0.7479881396448043E-03, 0.8212159993993635E-01, 0.8138003529082581E-01, 0.6326073178529442E-04, 0.8199589256196194E-05, 0.1054813695965874E-01, 0.1120071219912114E-01, 0.7176120699696391E-03, 0.3890963093641941E-05, 0.6073136115328898E-04, 0.3156808608191942E-08, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.2117542506861687E-04}, + tauOut: 3.1557121791797713E-009, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463891059793043E+01, 0.2463770941477959E+01, 0.5686908130061341E-04, 0.1201214707955848E-03, 0.1166437600203943E+01, 0.1166479398455512E+01, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.7105273238932086E+00, 0.5964297407456295E+00, 0.2148105431436762E+00, 0.1141052940222717E+00, 0.1200790684431606E+01, 0.1337613312964532E+01, 0.5892755169139442E-01, 0.7798791776646297E-01, 0.8625328750890724E+00, 0.9073156093137420E+00, 0.1815059242254727E-01, 0.1414482062243694E-01, 0.1289131644342084E+01, 0.1106799660785830E+01, 0.1996872873596725E+00, 0.2004825791345134E+00, 0.1124407451667935E+01, 0.1284017804536858E+01, 0.5290351604133232E-01, 0.4007693764646178E-01, 0.1613583089369911E+01, 0.1484272780047602E+01, 0.1613081850537457E+00, 0.1822138285193538E+00, 0.1283856367779054E+01, 0.1428454479523931E+01, 0.1213877407087503E-01, 0.1671007646458111E-01, 0.9964140843012472E+00, 0.9326374071930291E+00, 0.1390325207358455E+00, 0.7591545433480534E-01, 0.1928795551678665E+01, 0.1824845323669324E+01, 0.1262252233392066E+00, 0.2429827519008994E+00, 0.1220884869704444E+01, 0.1001975026546757E+01, 0.8372928285471114E-01, 0.3451350696526060E+00, 0.1089021292451660E+01, 0.2961849535934249E+00, 0.1076046951396362E+01, 0.8765656248686587E+00, 0.3990901366785531E+00, 0.1336851467252003E+01, 0.2077509116934600E+00, 0.1382856239786244E+00, 0.7220360627204584E+00, 0.5995658648917332E+00, 0.2664862668525171E+00, 0.3302211126778973E+00, 0.3653613524946110E+00, 0.5826783555022028E+00, 0.3018138637972599E-01, 0.4916926700063749E-01, 0.1948349845395949E+00, 0.2242683859353883E+00, 0.3124249032854923E-03, 0.7479881396448043E-03, 0.8107580682108434E-01, 0.8138003529082581E-01, 0.1132782305976083E-05, 0.8199589256196194E-05, 0.1120346722419663E-01, 0.1120071219912114E-01, 0.1096359327194516E-11, 0.3890963093641941E-05, 0.6968497581336674E-16, 0.3156808608191942E-08, 0.7707718980490818E-05, 0.1507398544447245E-04}, + i0: 1, + n0: 20, + pp: 0, + n0in: 20, + dmin: 6.9684975813366743E-017, + dmin1: 1.1199576261102989E-002, + dmin2: 8.1067607231828140E-002, + dn: 6.9684975813366743E-017, + dn1: 1.1199576261102989E-002, + dn2: 8.1067607231828140E-002, + tau: 3.1557121791797713E-009, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2463891059793043E+01, 0.2463770941477959E+01, 0.5686908130061341E-04, 0.1201214707955848E-03, 0.1166437600203943E+01, 0.1166479398455512E+01, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.7105273238932086E+00, 0.5964297407456295E+00, 0.2148105431436762E+00, 0.1141052940222717E+00, 0.1200790684431606E+01, 0.1337613312964532E+01, 0.5892755169139442E-01, 0.7798791776646297E-01, 0.8625328750890724E+00, 0.9073156093137420E+00, 0.1815059242254727E-01, 0.1414482062243694E-01, 0.1289131644342084E+01, 0.1106799660785830E+01, 0.1996872873596725E+00, 0.2004825791345134E+00, 0.1124407451667935E+01, 0.1284017804536858E+01, 0.5290351604133232E-01, 0.4007693764646178E-01, 0.1613583089369911E+01, 0.1484272780047602E+01, 0.1613081850537457E+00, 0.1822138285193538E+00, 0.1283856367779054E+01, 0.1428454479523931E+01, 0.1213877407087503E-01, 0.1671007646458111E-01, 0.9964140843012472E+00, 0.9326374071930291E+00, 0.1390325207358455E+00, 0.7591545433480534E-01, 0.1928795551678665E+01, 0.1824845323669324E+01, 0.1262252233392066E+00, 0.2429827519008994E+00, 0.1220884869704444E+01, 0.1001975026546757E+01, 0.8372928285471114E-01, 0.3451350696526060E+00, 0.1089021292451660E+01, 0.2961849535934249E+00, 0.1076046951396362E+01, 0.8765656248686587E+00, 0.3990901366785531E+00, 0.1336851467252003E+01, 0.2077509116934600E+00, 0.1382856239786244E+00, 0.7220360627204584E+00, 0.5995658648917332E+00, 0.2664862668525171E+00, 0.3302211126778973E+00, 0.3653613524946110E+00, 0.5826783555022028E+00, 0.3018138637972599E-01, 0.4916926700063749E-01, 0.1948349845395949E+00, 0.2242683859353883E+00, 0.3124249032854923E-03, 0.7479881396448043E-03, 0.8107580682108434E-01, 0.8138003529082581E-01, 0.1132782305976083E-05, 0.8199589256196194E-05, 0.1120346722419663E-01, 0.1120071219912114E-01, 0.1096359327194516E-11, 0.3890963093641941E-05, 0.6968497581336674E-16, 0.3156808608191942E-08, 0.7707718980490818E-05, 0.1507398544447245E-04}, + tauOut: 6.9684975806547287E-017, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463891059793043E+01, 0.2463947928874343E+01, 0.5686908130061341E-04, 0.2692193042748079E-04, 0.1166437600203943E+01, 0.1166418385992496E+01, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.7105273238932086E+00, 0.9253331718563164E+00, 0.2148105431436762E+00, 0.2787563517334627E+00, 0.1200790684431606E+01, 0.9809618843895378E+00, 0.5892755169139442E-01, 0.5181337969514327E-01, 0.8625328750890724E+00, 0.8288700878164763E+00, 0.1815059242254727E-01, 0.2822939734392020E-01, 0.1289131644342084E+01, 0.1460589534357837E+01, 0.1996872873596725E+00, 0.1537255119449346E+00, 0.1124407451667935E+01, 0.1023585455764333E+01, 0.5290351604133232E-01, 0.8339725654733963E-01, 0.1613583089369911E+01, 0.1691494017876317E+01, 0.1613081850537457E+00, 0.1224340957564512E+00, 0.1283856367779054E+01, 0.1173561046093478E+01, 0.1213877407087503E-01, 0.1030644761994533E-01, 0.9964140843012472E+00, 0.1125140157417147E+01, 0.1390325207358455E+00, 0.2383394688796517E+00, 0.1928795551678665E+01, 0.1816681306138221E+01, 0.1262252233392066E+00, 0.8482856339700598E-01, 0.1220884869704444E+01, 0.1219785589162149E+01, 0.8372928285471114E-01, 0.7475327847832687E-01, 0.1089021292451660E+01, 0.2090314965369696E+01, 0.1076046951396362E+01, 0.2054425921547012E+00, 0.3990901366785531E+00, 0.4013984562173118E+00, 0.2077509116934600E+00, 0.3737026089221466E+00, 0.7220360627204584E+00, 0.6148197206508288E+00, 0.2664862668525171E+00, 0.1583615157552351E+00, 0.3653613524946110E+00, 0.2371812231191019E+00, 0.3018138637972599E-01, 0.2479281399828426E-01, 0.1948349845395949E+00, 0.1703545954445960E+00, 0.3124249032854923E-03, 0.1486904479375115E-03, 0.8107580682108434E-01, 0.8092824915545274E-01, 0.1132782305976083E-05, 0.1568190288260776E-06, 0.1120346722419663E-01, 0.1120331040626409E-01, 0.1096359327194516E-11, 0.6819392699821255E-26, 0.6968497581336674E-16, 0.6162975822039155E-31, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 6.1629758220391547E-032, + dmin1: 1.1203310405167735E-002, + dmin2: 8.0927116373146771E-002, + dn: 6.1629758220391547E-032, + dn1: 1.1203310405167735E-002, + dn2: 8.0927116373146771E-002, + tau: 6.9684975806547287E-017, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2463891059793043E+01, 0.2463947928874343E+01, 0.5686908130061341E-04, 0.2692193042748079E-04, 0.1166437600203943E+01, 0.1166418385992496E+01, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.7105273238932086E+00, 0.9253331718563164E+00, 0.2148105431436762E+00, 0.2787563517334627E+00, 0.1200790684431606E+01, 0.9809618843895378E+00, 0.5892755169139442E-01, 0.5181337969514327E-01, 0.8625328750890724E+00, 0.8288700878164763E+00, 0.1815059242254727E-01, 0.2822939734392020E-01, 0.1289131644342084E+01, 0.1460589534357837E+01, 0.1996872873596725E+00, 0.1537255119449346E+00, 0.1124407451667935E+01, 0.1023585455764333E+01, 0.5290351604133232E-01, 0.8339725654733963E-01, 0.1613583089369911E+01, 0.1691494017876317E+01, 0.1613081850537457E+00, 0.1224340957564512E+00, 0.1283856367779054E+01, 0.1173561046093478E+01, 0.1213877407087503E-01, 0.1030644761994533E-01, 0.9964140843012472E+00, 0.1125140157417147E+01, 0.1390325207358455E+00, 0.2383394688796517E+00, 0.1928795551678665E+01, 0.1816681306138221E+01, 0.1262252233392066E+00, 0.8482856339700598E-01, 0.1220884869704444E+01, 0.1219785589162149E+01, 0.8372928285471114E-01, 0.7475327847832687E-01, 0.1089021292451660E+01, 0.2090314965369696E+01, 0.1076046951396362E+01, 0.2054425921547012E+00, 0.3990901366785531E+00, 0.4013984562173118E+00, 0.2077509116934600E+00, 0.3737026089221466E+00, 0.7220360627204584E+00, 0.6148197206508288E+00, 0.2664862668525171E+00, 0.1583615157552351E+00, 0.3653613524946110E+00, 0.2371812231191019E+00, 0.3018138637972599E-01, 0.2479281399828426E-01, 0.1948349845395949E+00, 0.1703545954445960E+00, 0.3124249032854923E-03, 0.1486904479375115E-03, 0.8107580682108434E-01, 0.8092824915545274E-01, 0.1132782305976083E-05, 0.1568190288260776E-06, 0.1120346722419663E-01, 0.1120331040626409E-01, 0.1096359327194516E-11, 0.6819392699821255E-26, 0.6968497581336674E-16, 0.6162975822039155E-31, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.2117542506861687E-04}, + tauOut: 6.1629758220391547E-032, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463974850804771E+01, 0.2463947928874343E+01, 0.1274454348702788E-04, 0.2692193042748079E-04, 0.1166410336629578E+01, 0.1166418385992496E+01, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.1204085798823124E+01, 0.9253331718563164E+00, 0.2271012218143261E+00, 0.2787563517334627E+00, 0.8056740422703550E+00, 0.9809618843895378E+00, 0.5330513126246473E-01, 0.5181337969514327E-01, 0.8037943538979316E+00, 0.8288700878164763E+00, 0.5129615818002433E-01, 0.2822939734392020E-01, 0.1563018888122747E+01, 0.1460589534357837E+01, 0.1006713350698832E+00, 0.1537255119449346E+00, 0.1006311377241790E+01, 0.1023585455764333E+01, 0.1401812239704283E+00, 0.8339725654733963E-01, 0.1673746889662340E+01, 0.1691494017876317E+01, 0.8584564749956700E-01, 0.1224340957564512E+00, 0.1098021846213856E+01, 0.1173561046093478E+01, 0.1056099032774466E-01, 0.1030644761994533E-01, 0.1352918635969054E+01, 0.1125140157417147E+01, 0.3200390963041470E+00, 0.2383394688796517E+00, 0.1581470773231080E+01, 0.1816681306138221E+01, 0.6542811978092533E-01, 0.8482856339700598E-01, 0.1229110747859551E+01, 0.1219785589162149E+01, 0.1271308521106110E+00, 0.7475327847832687E-01, 0.2168626705413786E+01, 0.2090314965369696E+01, 0.3802606466401751E-01, 0.2054425921547012E+00, 0.7370750004754409E+00, 0.4013984562173118E+00, 0.3117182559112661E+00, 0.3737026089221466E+00, 0.4614629804947978E+00, 0.6148197206508288E+00, 0.8139413038408401E-01, 0.1583615157552351E+00, 0.1805799067333021E+00, 0.2371812231191019E+00, 0.2338892446571373E-01, 0.2479281399828426E-01, 0.1471143614268198E+00, 0.1703545954445960E+00, 0.8179526119010886E-04, 0.1486904479375115E-03, 0.8084661071329148E-01, 0.8092824915545274E-01, 0.2173118009582292E-07, 0.1568190288260776E-06, 0.1120328867508400E-01, 0.1120331040626409E-01, 0.3751376363572422E-55, 0.6819392699821255E-26}, + i0: 1, + n0: 19, + pp: 0, + n0in: 20, + dmin: 6.1629758220391547E-032, + dmin1: 1.1203288675083998E-002, + dmin2: 8.0846453894262649E-002, + dn: 6.1629758220391547E-032, + dn1: 1.1203288675083998E-002, + dn2: 8.0846453894262649E-002, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2463974850804771E+01, 0.2463947928874343E+01, 0.1274454348702788E-04, 0.2692193042748079E-04, 0.1166410336629578E+01, 0.1166418385992496E+01, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.1204085798823124E+01, 0.9253331718563164E+00, 0.2271012218143261E+00, 0.2787563517334627E+00, 0.8056740422703550E+00, 0.9809618843895378E+00, 0.5330513126246473E-01, 0.5181337969514327E-01, 0.8037943538979316E+00, 0.8288700878164763E+00, 0.5129615818002433E-01, 0.2822939734392020E-01, 0.1563018888122747E+01, 0.1460589534357837E+01, 0.1006713350698832E+00, 0.1537255119449346E+00, 0.1006311377241790E+01, 0.1023585455764333E+01, 0.1401812239704283E+00, 0.8339725654733963E-01, 0.1673746889662340E+01, 0.1691494017876317E+01, 0.8584564749956700E-01, 0.1224340957564512E+00, 0.1098021846213856E+01, 0.1173561046093478E+01, 0.1056099032774466E-01, 0.1030644761994533E-01, 0.1352918635969054E+01, 0.1125140157417147E+01, 0.3200390963041470E+00, 0.2383394688796517E+00, 0.1581470773231080E+01, 0.1816681306138221E+01, 0.6542811978092533E-01, 0.8482856339700598E-01, 0.1229110747859551E+01, 0.1219785589162149E+01, 0.1271308521106110E+00, 0.7475327847832687E-01, 0.2168626705413786E+01, 0.2090314965369696E+01, 0.3802606466401751E-01, 0.2054425921547012E+00, 0.7370750004754409E+00, 0.4013984562173118E+00, 0.3117182559112661E+00, 0.3737026089221466E+00, 0.4614629804947978E+00, 0.6148197206508288E+00, 0.8139413038408401E-01, 0.1583615157552351E+00, 0.1805799067333021E+00, 0.2371812231191019E+00, 0.2338892446571373E-01, 0.2479281399828426E-01, 0.1471143614268198E+00, 0.1703545954445960E+00, 0.8179526119010886E-04, 0.1486904479375115E-03, 0.8084661071329148E-01, 0.8092824915545274E-01, 0.2173118009582292E-07, 0.1568190288260776E-06, 0.1120328867508400E-01, 0.1120331040626409E-01, 0.3751376363572422E-55, 0.6819392699821255E-26}, + tauOut: 1.1203284285913290E-002, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2463974850804771E+01, 0.2452784311062345E+01, 0.1274454348702788E-04, 0.6060609239813679E-05, 0.1166410336629578E+01, 0.1155204716501079E+01, 0.3724766654883956E-05, 0.3882375624867434E-05, 0.1204085798823124E+01, 0.1419979853975912E+01, 0.2271012218143261E+00, 0.1288536304732592E+00, 0.8056740422703550E+00, 0.7189222587736472E+00, 0.5330513126246473E-01, 0.5959804835594534E-01, 0.8037943538979316E+00, 0.7842891794360973E+00, 0.5129615818002433E-01, 0.1022287011292917E+00, 0.1563018888122747E+01, 0.1550258237777425E+01, 0.1006713350698832E+00, 0.6534828028921505E-01, 0.1006311377241790E+01, 0.1069941036637090E+01, 0.1401812239704283E+00, 0.2192904838448094E+00, 0.1673746889662340E+01, 0.1529098769031184E+01, 0.8584564749956700E-01, 0.6164441320989392E-01, 0.1098021846213856E+01, 0.1035735139045794E+01, 0.1056099032774466E-01, 0.1379518767882891E-01, 0.1352918635969054E+01, 0.1647959260308459E+01, 0.3200390963041470E+00, 0.3071268139247320E+00, 0.1581470773231080E+01, 0.1328568794801360E+01, 0.6542811978092533E-01, 0.6053010243026304E-01, 0.1229110747859551E+01, 0.1284508213253985E+01, 0.1271308521106110E+00, 0.2146341752620367E+00, 0.2168626705413786E+01, 0.1980815310529854E+01, 0.3802606466401751E-01, 0.1414976019284330E-01, 0.7370750004754409E+00, 0.1023440211907950E+01, 0.3117182559112661E+00, 0.1405518698344743E+00, 0.4614629804947978E+00, 0.3911019567584944E+00, 0.8139413038408401E-01, 0.3758136265851575E-01, 0.1805799067333021E+00, 0.1551841842545868E+00, 0.2338892446571373E-01, 0.2217266343062855E-01, 0.1471143614268198E+00, 0.1138202089714681E+00, 0.8179526119010886E-04, 0.5809925758690545E-04, 0.8084661071329148E-01, 0.6958524890097138E-01, 0.2173118009582292E-07, 0.3498739858072780E-08, 0.1120328867508400E-01, 0.8904308505808256E-09, 0.3751376363572422E-55, 0.3882375624867434E-05, 0.1697846193036144E-01}, + i0: 1, + n0: 19, + pp: 1, + n0in: 19, + dmin: 8.9043085058082561E-010, + dmin1: 6.9585227169791292E-002, + dmin2: 0.11373841371027797, + dn: 8.9043085058082561E-010, + dn1: 6.9585227169791292E-002, + dn2: 0.11373841371027797, + tau: 1.1203284285913290E-002, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.2463974850804771E+01, 0.2452784311062345E+01, 0.1274454348702788E-04, 0.6060609239813679E-05, 0.1166410336629578E+01, 0.1155204716501079E+01, 0.3724766654883956E-05, 0.3882375624867434E-05, 0.1204085798823124E+01, 0.1419979853975912E+01, 0.2271012218143261E+00, 0.1288536304732592E+00, 0.8056740422703550E+00, 0.7189222587736472E+00, 0.5330513126246473E-01, 0.5959804835594534E-01, 0.8037943538979316E+00, 0.7842891794360973E+00, 0.5129615818002433E-01, 0.1022287011292917E+00, 0.1563018888122747E+01, 0.1550258237777425E+01, 0.1006713350698832E+00, 0.6534828028921505E-01, 0.1006311377241790E+01, 0.1069941036637090E+01, 0.1401812239704283E+00, 0.2192904838448094E+00, 0.1673746889662340E+01, 0.1529098769031184E+01, 0.8584564749956700E-01, 0.6164441320989392E-01, 0.1098021846213856E+01, 0.1035735139045794E+01, 0.1056099032774466E-01, 0.1379518767882891E-01, 0.1352918635969054E+01, 0.1647959260308459E+01, 0.3200390963041470E+00, 0.3071268139247320E+00, 0.1581470773231080E+01, 0.1328568794801360E+01, 0.6542811978092533E-01, 0.6053010243026304E-01, 0.1229110747859551E+01, 0.1284508213253985E+01, 0.1271308521106110E+00, 0.2146341752620367E+00, 0.2168626705413786E+01, 0.1980815310529854E+01, 0.3802606466401751E-01, 0.1414976019284330E-01, 0.7370750004754409E+00, 0.1023440211907950E+01, 0.3117182559112661E+00, 0.1405518698344743E+00, 0.4614629804947978E+00, 0.3911019567584944E+00, 0.8139413038408401E-01, 0.3758136265851575E-01, 0.1805799067333021E+00, 0.1551841842545868E+00, 0.2338892446571373E-01, 0.2217266343062855E-01, 0.1471143614268198E+00, 0.1138202089714681E+00, 0.8179526119010886E-04, 0.5809925758690545E-04, 0.8084661071329148E-01, 0.6958524890097138E-01, 0.2173118009582292E-07, 0.3498739858072780E-08, 0.1120328867508400E-01, 0.8904308505808256E-09, 0.3751376363572422E-55, 0.3882375624867434E-05, 0.1697846193036144E-01}, + tauOut: 8.9043080564395014E-010, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2452790370781154E+01, 0.2452784311062345E+01, 0.2854399814229969E-05, 0.6060609239813679E-05, 0.1155205743586459E+01, 0.1155204716501079E+01, 0.4772219324121025E-05, 0.3882375624867434E-05, 0.1548828711339416E+01, 0.1419979853975912E+01, 0.5981019230390531E-01, 0.1288536304732592E+00, 0.7187101139352565E+00, 0.7189222587736472E+00, 0.6503610222645050E-01, 0.5959804835594534E-01, 0.8214817774485077E+00, 0.7842891794360973E+00, 0.1929207566298143E+00, 0.1022287011292917E+00, 0.1422685760546395E+01, 0.1550258237777425E+01, 0.4914564318703864E-01, 0.6534828028921505E-01, 0.1240085876404429E+01, 0.1069941036637090E+01, 0.2703980549150243E+00, 0.2192904838448094E+00, 0.1320345126435623E+01, 0.1529098769031184E+01, 0.4835651195207321E-01, 0.6164441320989392E-01, 0.1001173813882118E+01, 0.1035735139045794E+01, 0.2270725319399537E-01, 0.1379518767882891E-01, 0.1932378820148765E+01, 0.1647959260308459E+01, 0.2111589595024383E+00, 0.3071268139247320E+00, 0.1177939936838754E+01, 0.1328568794801360E+01, 0.6600626338337756E-01, 0.6053010243026304E-01, 0.1433136124242214E+01, 0.1284508213253985E+01, 0.2966575563411978E+00, 0.2146341752620367E+00, 0.1698307513491068E+01, 0.1980815310529854E+01, 0.8526979628348903E-02, 0.1414976019284330E-01, 0.1155465101223645E+01, 0.1023440211907950E+01, 0.4757401262929915E-01, 0.1405518698344743E+00, 0.3811093058972801E+00, 0.3911019567584944E+00, 0.1530278326215801E-01, 0.3758136265851575E-01, 0.1620540635326265E+00, 0.1551841842545868E+00, 0.1557318051836492E-01, 0.2217266343062855E-01, 0.9830512682025924E-01, 0.1138202089714681E+00, 0.4112553872737890E-04, 0.5809925758690545E-04, 0.6954412597055305E-01, 0.6958524890097138E-01, 0.4479725446695418E-16, 0.3498739858072780E-08, 0.1396210563637444E-18, 0.8904308505808256E-09, 0.2854399814229969E-05, 0.3882375624867434E-05}, + i0: 1, + n0: 19, + pp: 0, + n0in: 19, + dmin: 1.3962105636374437E-019, + dmin1: 6.9544122471813200E-002, + dmin2: 9.8247027562672340E-002, + dn: 1.3962105636374437E-019, + dn1: 6.9544122471813200E-002, + dn2: 9.8247027562672340E-002, + tau: 8.9043080564395014E-010, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2452790370781154E+01, 0.2452784311062345E+01, 0.2854399814229969E-05, 0.6060609239813679E-05, 0.1155205743586459E+01, 0.1155204716501079E+01, 0.4772219324121025E-05, 0.3882375624867434E-05, 0.1548828711339416E+01, 0.1419979853975912E+01, 0.5981019230390531E-01, 0.1288536304732592E+00, 0.7187101139352565E+00, 0.7189222587736472E+00, 0.6503610222645050E-01, 0.5959804835594534E-01, 0.8214817774485077E+00, 0.7842891794360973E+00, 0.1929207566298143E+00, 0.1022287011292917E+00, 0.1422685760546395E+01, 0.1550258237777425E+01, 0.4914564318703864E-01, 0.6534828028921505E-01, 0.1240085876404429E+01, 0.1069941036637090E+01, 0.2703980549150243E+00, 0.2192904838448094E+00, 0.1320345126435623E+01, 0.1529098769031184E+01, 0.4835651195207321E-01, 0.6164441320989392E-01, 0.1001173813882118E+01, 0.1035735139045794E+01, 0.2270725319399537E-01, 0.1379518767882891E-01, 0.1932378820148765E+01, 0.1647959260308459E+01, 0.2111589595024383E+00, 0.3071268139247320E+00, 0.1177939936838754E+01, 0.1328568794801360E+01, 0.6600626338337756E-01, 0.6053010243026304E-01, 0.1433136124242214E+01, 0.1284508213253985E+01, 0.2966575563411978E+00, 0.2146341752620367E+00, 0.1698307513491068E+01, 0.1980815310529854E+01, 0.8526979628348903E-02, 0.1414976019284330E-01, 0.1155465101223645E+01, 0.1023440211907950E+01, 0.4757401262929915E-01, 0.1405518698344743E+00, 0.3811093058972801E+00, 0.3911019567584944E+00, 0.1530278326215801E-01, 0.3758136265851575E-01, 0.1620540635326265E+00, 0.1551841842545868E+00, 0.1557318051836492E-01, 0.2217266343062855E-01, 0.9830512682025924E-01, 0.1138202089714681E+00, 0.4112553872737890E-04, 0.5809925758690545E-04, 0.6954412597055305E-01, 0.6958524890097138E-01, 0.4479725446695418E-16, 0.3498739858072780E-08, 0.1396210563637444E-18, 0.8904308505808256E-09, 0.2854399814229969E-05, 0.3882375624867434E-05}, + tauOut: 1.3962105636374427E-019, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2452790370781154E+01, 0.2452793225180968E+01, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1155205743586459E+01, 0.1155209171453138E+01, 0.4772219324121025E-05, 0.6398278760815103E-05, 0.1548828711339416E+01, 0.1608632505364561E+01, 0.5981019230390531E-01, 0.2672219415054498E-01, 0.7187101139352565E+00, 0.7570240220111620E+00, 0.6503610222645050E-01, 0.7057368234283014E-01, 0.8214817774485077E+00, 0.9438288517354918E+00, 0.1929207566298143E+00, 0.2908001941945216E+00, 0.1422685760546395E+01, 0.1181031209538913E+01, 0.4914564318703864E-01, 0.5160305461093759E-01, 0.1240085876404429E+01, 0.1458880876708516E+01, 0.2703980549150243E+00, 0.2447209773632920E+00, 0.1320345126435623E+01, 0.1123980661024405E+01, 0.4835651195207321E-01, 0.4307304847484577E-01, 0.1001173813882118E+01, 0.9808080186012680E+00, 0.2270725319399537E-01, 0.4473761868138884E-01, 0.1932378820148765E+01, 0.2098800160969815E+01, 0.2111589595024383E+00, 0.1185117935689049E+00, 0.1177939936838754E+01, 0.1125434406653226E+01, 0.6600626338337756E-01, 0.8405284210411720E-01, 0.1433136124242214E+01, 0.1645740838479294E+01, 0.2966575563411978E+00, 0.3061331074057168E+00, 0.1698307513491068E+01, 0.1400701385713701E+01, 0.8526979628348903E-02, 0.7034066989504621E-02, 0.1155465101223645E+01, 0.1196005046863439E+01, 0.4757401262929915E-01, 0.1515955052150448E-01, 0.3811093058972801E+00, 0.3812525386379337E+00, 0.1530278326215801E-01, 0.6504555274179689E-02, 0.1620540635326265E+00, 0.1711226887768117E+00, 0.1557318051836492E-01, 0.8946350111698947E-02, 0.9830512682025924E-01, 0.8939990224728768E-01, 0.4112553872737890E-04, 0.3199152990069927E-04, 0.6954412597055305E-01, 0.6951213444065239E-01, 0.4479725446695418E-16, 0.8997910999570377E-34, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + n0in: 19, + dmin: 1.3962105636374430E-019, + dmin1: 6.9512134440652351E-002, + dmin2: 8.9358776708560295E-002, + dn: 1.3962105636374430E-019, + dn1: 6.9512134440652351E-002, + dn2: 8.9358776708560295E-002, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2452790370781154E+01, 0.2452793225180968E+01, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1155205743586459E+01, 0.1155209171453138E+01, 0.4772219324121025E-05, 0.6398278760815103E-05, 0.1548828711339416E+01, 0.1608632505364561E+01, 0.5981019230390531E-01, 0.2672219415054498E-01, 0.7187101139352565E+00, 0.7570240220111620E+00, 0.6503610222645050E-01, 0.7057368234283014E-01, 0.8214817774485077E+00, 0.9438288517354918E+00, 0.1929207566298143E+00, 0.2908001941945216E+00, 0.1422685760546395E+01, 0.1181031209538913E+01, 0.4914564318703864E-01, 0.5160305461093759E-01, 0.1240085876404429E+01, 0.1458880876708516E+01, 0.2703980549150243E+00, 0.2447209773632920E+00, 0.1320345126435623E+01, 0.1123980661024405E+01, 0.4835651195207321E-01, 0.4307304847484577E-01, 0.1001173813882118E+01, 0.9808080186012680E+00, 0.2270725319399537E-01, 0.4473761868138884E-01, 0.1932378820148765E+01, 0.2098800160969815E+01, 0.2111589595024383E+00, 0.1185117935689049E+00, 0.1177939936838754E+01, 0.1125434406653226E+01, 0.6600626338337756E-01, 0.8405284210411720E-01, 0.1433136124242214E+01, 0.1645740838479294E+01, 0.2966575563411978E+00, 0.3061331074057168E+00, 0.1698307513491068E+01, 0.1400701385713701E+01, 0.8526979628348903E-02, 0.7034066989504621E-02, 0.1155465101223645E+01, 0.1196005046863439E+01, 0.4757401262929915E-01, 0.1515955052150448E-01, 0.3811093058972801E+00, 0.3812525386379337E+00, 0.1530278326215801E-01, 0.6504555274179689E-02, 0.1620540635326265E+00, 0.1711226887768117E+00, 0.1557318051836492E-01, 0.8946350111698947E-02, 0.9830512682025924E-01, 0.8939990224728768E-01, 0.4112553872737890E-04, 0.3199152990069927E-04, 0.6954412597055305E-01, 0.6951213444065239E-01, 0.4479725446695418E-16, 0.8997910999570377E-34, 0.2818174710670554E-01}, + tauOut: 6.8088572105595116E-002, + ttypeOut: -8, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2384705997428018E+01, 0.2452793225180968E+01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.1087126346389419E+01, 0.1155209171453138E+01, 0.9467601652019932E-05, 0.6398278760815103E-05, 0.1567256659807859E+01, 0.1608632505364561E+01, 0.1290748567965171E-01, 0.2672219415054498E-01, 0.7466016465687454E+00, 0.7570240220111620E+00, 0.8921689079377818E-01, 0.7057368234283014E-01, 0.1077323583030640E+01, 0.9438288517354918E+00, 0.3187938243378626E+00, 0.2908001941945216E+00, 0.8457518677063927E+00, 0.1181031209538913E+01, 0.8901276181133644E-01, 0.5160305461093759E-01, 0.1546500520154876E+01, 0.1458880876708516E+01, 0.1778606876095877E+00, 0.2447209773632920E+00, 0.9211044497840675E+00, 0.1123980661024405E+01, 0.4586493023634136E-01, 0.4307304847484577E-01, 0.9115921349407204E+00, 0.9808080186012680E+00, 0.1030014605117353E+00, 0.4473761868138884E-01, 0.2046221921921390E+01, 0.2098800160969815E+01, 0.6518220171905387E-01, 0.1185117935689049E+00, 0.1076216474932694E+01, 0.1125434406653226E+01, 0.1285328723941422E+00, 0.8405284210411720E-01, 0.1755252501385274E+01, 0.1645740838479294E+01, 0.2442959445536252E+00, 0.3061331074057168E+00, 0.1095350936043985E+01, 0.1400701385713701E+01, 0.7680442260639305E-02, 0.7034066989504621E-02, 0.1135395583018709E+01, 0.1196005046863439E+01, 0.5090399511302622E-02, 0.1515955052150448E-01, 0.3145781222952156E+00, 0.3812525386379337E+00, 0.3538316586334169E-02, 0.6504555274179689E-02, 0.1084421501965814E+00, 0.1711226887768117E+00, 0.7375387005938499E-02, 0.8946350111698947E-02, 0.1396793466565477E-01, 0.8939990224728768E-01, 0.1592074691534444E-03, 0.3199152990069927E-04, 0.1264354865903830E-02, 0.6951213444065239E-01, 0.6512368848977837E-06, 0.1344352644992036E-05}, + i0: 1, + n0: 18, + pp: 0, + n0in: 18, + dmin: 1.2643548659038301E-003, + dmin1: 1.3935943135754067E-002, + dmin2: 9.9495800084882416E-002, + dn: 1.2643548659038301E-003, + dn1: 1.3935943135754067E-002, + dn2: 9.9495800084882416E-002, + tau: 6.8088572105595116E-002, + ttype: -8, + g: 0.0000000000000000, + zOut: []float64{0.2384705997428018E+01, 0.2452793225180968E+01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.1087126346389419E+01, 0.1155209171453138E+01, 0.9467601652019932E-05, 0.6398278760815103E-05, 0.1567256659807859E+01, 0.1608632505364561E+01, 0.1290748567965171E-01, 0.2672219415054498E-01, 0.7466016465687454E+00, 0.7570240220111620E+00, 0.8921689079377818E-01, 0.7057368234283014E-01, 0.1077323583030640E+01, 0.9438288517354918E+00, 0.3187938243378626E+00, 0.2908001941945216E+00, 0.8457518677063927E+00, 0.1181031209538913E+01, 0.8901276181133644E-01, 0.5160305461093759E-01, 0.1546500520154876E+01, 0.1458880876708516E+01, 0.1778606876095877E+00, 0.2447209773632920E+00, 0.9211044497840675E+00, 0.1123980661024405E+01, 0.4586493023634136E-01, 0.4307304847484577E-01, 0.9115921349407204E+00, 0.9808080186012680E+00, 0.1030014605117353E+00, 0.4473761868138884E-01, 0.2046221921921390E+01, 0.2098800160969815E+01, 0.6518220171905387E-01, 0.1185117935689049E+00, 0.1076216474932694E+01, 0.1125434406653226E+01, 0.1285328723941422E+00, 0.8405284210411720E-01, 0.1755252501385274E+01, 0.1645740838479294E+01, 0.2442959445536252E+00, 0.3061331074057168E+00, 0.1095350936043985E+01, 0.1400701385713701E+01, 0.7680442260639305E-02, 0.7034066989504621E-02, 0.1135395583018709E+01, 0.1196005046863439E+01, 0.5090399511302622E-02, 0.1515955052150448E-01, 0.3145781222952156E+00, 0.3812525386379337E+00, 0.3538316586334169E-02, 0.6504555274179689E-02, 0.1084421501965814E+00, 0.1711226887768117E+00, 0.7375387005938499E-02, 0.8946350111698947E-02, 0.1396793466565477E-01, 0.8939990224728768E-01, 0.1592074691534444E-03, 0.3199152990069927E-04, 0.1264354865903830E-02, 0.6951213444065239E-01, 0.6512368848977837E-06, 0.1344352644992036E-05}, + tauOut: 1.2463174543591322E-003, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2384705997428018E+01, 0.2383460331210544E+01, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.1087126346389419E+01, 0.1085889199499347E+01, 0.9467601652019932E-05, 0.1366452649899944E-04, 0.1567256659807859E+01, 0.1578904163506652E+01, 0.1290748567965171E-01, 0.6103442048115082E-02, 0.7466016465687454E+00, 0.8284687778600495E+00, 0.8921689079377818E-01, 0.1160157908485996E+00, 0.1077323583030640E+01, 0.1278855299065544E+01, 0.3187938243378626E+00, 0.2108295383723412E+00, 0.8457518677063927E+00, 0.7226887736910288E+00, 0.8901276181133644E-01, 0.1904807262171572E+00, 0.1546500520154876E+01, 0.1532634164092948E+01, 0.1778606876095877E+00, 0.1068932656188067E+00, 0.9211044497840675E+00, 0.8588297969472432E+00, 0.4586493023634136E-01, 0.4868264913684867E-01, 0.9115921349407204E+00, 0.9646646288612479E+00, 0.1030014605117353E+00, 0.2184840619043245E+00, 0.2046221921921390E+01, 0.1891673744281760E+01, 0.6518220171905387E-01, 0.3708364593761750E-01, 0.1076216474932694E+01, 0.1166419383934860E+01, 0.1285328723941422E+00, 0.1934189785315259E+00, 0.1755252501385274E+01, 0.1804883149953014E+01, 0.2442959445536252E+00, 0.1482587897978486E+00, 0.1095350936043985E+01, 0.9535262710524167E+00, 0.7680442260639305E-02, 0.9145359161143373E-02, 0.1135395583018709E+01, 0.1130094305914509E+01, 0.5090399511302622E-02, 0.1416986451145964E-02, 0.3145781222952156E+00, 0.3154531349760448E+00, 0.3538316586334169E-02, 0.1216353924418735E-02, 0.1084421501965814E+00, 0.1133548658237420E+00, 0.7375387005938499E-02, 0.9088178357782586E-03, 0.1396793466565477E-01, 0.1197200684467082E-01, 0.1592074691534444E-03, 0.1681378409852773E-04, 0.1264354865903830E-02, 0.1223627446170173E-05, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + n0in: 18, + dmin: 1.2236274461701734E-006, + dmin1: 1.1812799375517376E-002, + dmin2: 0.10597947881780349, + dn: 1.2236274461701734E-006, + dn1: 1.1812799375517376E-002, + dn2: 0.10597947881780349, + tau: 1.2463174543591322E-003, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2384705997428018E+01, 0.2383460331210544E+01, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.1087126346389419E+01, 0.1085889199499347E+01, 0.9467601652019932E-05, 0.1366452649899944E-04, 0.1567256659807859E+01, 0.1578904163506652E+01, 0.1290748567965171E-01, 0.6103442048115082E-02, 0.7466016465687454E+00, 0.8284687778600495E+00, 0.8921689079377818E-01, 0.1160157908485996E+00, 0.1077323583030640E+01, 0.1278855299065544E+01, 0.3187938243378626E+00, 0.2108295383723412E+00, 0.8457518677063927E+00, 0.7226887736910288E+00, 0.8901276181133644E-01, 0.1904807262171572E+00, 0.1546500520154876E+01, 0.1532634164092948E+01, 0.1778606876095877E+00, 0.1068932656188067E+00, 0.9211044497840675E+00, 0.8588297969472432E+00, 0.4586493023634136E-01, 0.4868264913684867E-01, 0.9115921349407204E+00, 0.9646646288612479E+00, 0.1030014605117353E+00, 0.2184840619043245E+00, 0.2046221921921390E+01, 0.1891673744281760E+01, 0.6518220171905387E-01, 0.3708364593761750E-01, 0.1076216474932694E+01, 0.1166419383934860E+01, 0.1285328723941422E+00, 0.1934189785315259E+00, 0.1755252501385274E+01, 0.1804883149953014E+01, 0.2442959445536252E+00, 0.1482587897978486E+00, 0.1095350936043985E+01, 0.9535262710524167E+00, 0.7680442260639305E-02, 0.9145359161143373E-02, 0.1135395583018709E+01, 0.1130094305914509E+01, 0.5090399511302622E-02, 0.1416986451145964E-02, 0.3145781222952156E+00, 0.3154531349760448E+00, 0.3538316586334169E-02, 0.1216353924418735E-02, 0.1084421501965814E+00, 0.1133548658237420E+00, 0.7375387005938499E-02, 0.9088178357782586E-03, 0.1396793466565477E-01, 0.1197200684467082E-01, 0.1592074691534444E-03, 0.1681378409852773E-04, 0.1264354865903830E-02, 0.1223627446170173E-05, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.2818174710670554E-01}, + tauOut: 1.2218877946904154E-006, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2383459406360114E+01, 0.2383460331210544E+01, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.1085901506809686E+01, 0.1085889199499347E+01, 0.1986826396898849E-04, 0.1366452649899944E-04, 0.1584986515403004E+01, 0.1578904163506652E+01, 0.3190255011763210E-02, 0.6103442048115082E-02, 0.9412930918090910E+00, 0.8284687778600495E+00, 0.1576208411525267E+00, 0.1160157908485996E+00, 0.1332062774397564E+01, 0.1278855299065544E+01, 0.1143821023097510E+00, 0.2108295383723412E+00, 0.7987861757106404E+00, 0.7226887736910288E+00, 0.3654761154847582E+00, 0.1904807262171572E+00, 0.1274050092339202E+01, 0.1532634164092948E+01, 0.7205613198290631E-01, 0.1068932656188067E+00, 0.8354550922133908E+00, 0.8588297969472432E+00, 0.5621179414582513E-01, 0.4868264913684867E-01, 0.1126935674731953E+01, 0.9646646288612479E+00, 0.3667472533840468E+00, 0.2184840619043245E+00, 0.1562008914947536E+01, 0.1891673744281760E+01, 0.2769195683500124E-01, 0.3708364593761750E-01, 0.1332145183743590E+01, 0.1166419383934860E+01, 0.2620575140703801E+00, 0.1934189785315259E+00, 0.1691083203792688E+01, 0.1804883149953014E+01, 0.8359650824372877E-01, 0.1482587897978486E+00, 0.8790739000820365E+00, 0.9535262710524167E+00, 0.1175682535061811E-01, 0.9145359161143373E-02, 0.1119753245127243E+01, 0.1130094305914509E+01, 0.3991886785572840E-03, 0.1416986451145964E-02, 0.3162690783341116E+00, 0.3154531349760448E+00, 0.4359567385560517E-03, 0.1216353924418735E-02, 0.1138265050331695E+00, 0.1133548658237420E+00, 0.9558734450579545E-04, 0.9088178357782586E-03, 0.1189201139646886E-01, 0.1197200684467082E-01, 0.1730052806966466E-08, 0.1681378409852773E-04, 0.9598672791582074E-11, 0.1223627446170173E-05, 0.1353283656358167E-06, 0.2970373645586866E-06}, + i0: 1, + n0: 18, + pp: 0, + n0in: 18, + dmin: 9.5986727915820745E-012, + dmin1: 1.1875197612370336E-002, + dmin2: 0.11291768719739126, + dn: 9.5986727915820745E-012, + dn1: 1.1875197612370336E-002, + dn2: 0.11291768719739126, + tau: 1.2218877946904154E-006, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2383459406360114E+01, 0.2383460331210544E+01, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.1085901506809686E+01, 0.1085889199499347E+01, 0.1986826396898849E-04, 0.1366452649899944E-04, 0.1584986515403004E+01, 0.1578904163506652E+01, 0.3190255011763210E-02, 0.6103442048115082E-02, 0.9412930918090910E+00, 0.8284687778600495E+00, 0.1576208411525267E+00, 0.1160157908485996E+00, 0.1332062774397564E+01, 0.1278855299065544E+01, 0.1143821023097510E+00, 0.2108295383723412E+00, 0.7987861757106404E+00, 0.7226887736910288E+00, 0.3654761154847582E+00, 0.1904807262171572E+00, 0.1274050092339202E+01, 0.1532634164092948E+01, 0.7205613198290631E-01, 0.1068932656188067E+00, 0.8354550922133908E+00, 0.8588297969472432E+00, 0.5621179414582513E-01, 0.4868264913684867E-01, 0.1126935674731953E+01, 0.9646646288612479E+00, 0.3667472533840468E+00, 0.2184840619043245E+00, 0.1562008914947536E+01, 0.1891673744281760E+01, 0.2769195683500124E-01, 0.3708364593761750E-01, 0.1332145183743590E+01, 0.1166419383934860E+01, 0.2620575140703801E+00, 0.1934189785315259E+00, 0.1691083203792688E+01, 0.1804883149953014E+01, 0.8359650824372877E-01, 0.1482587897978486E+00, 0.8790739000820365E+00, 0.9535262710524167E+00, 0.1175682535061811E-01, 0.9145359161143373E-02, 0.1119753245127243E+01, 0.1130094305914509E+01, 0.3991886785572840E-03, 0.1416986451145964E-02, 0.3162690783341116E+00, 0.3154531349760448E+00, 0.4359567385560517E-03, 0.1216353924418735E-02, 0.1138265050331695E+00, 0.1133548658237420E+00, 0.9558734450579545E-04, 0.9088178357782586E-03, 0.1189201139646886E-01, 0.1197200684467082E-01, 0.1730052806966466E-08, 0.1681378409852773E-04, 0.9598672791582074E-11, 0.1223627446170173E-05, 0.1353283656358167E-06, 0.2970373645586866E-06}, + tauOut: 9.5986713933289272E-012, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2383459406360114E+01, 0.2383459541678881E+01, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.1085901506809686E+01, 0.1085921313408604E+01, 0.1986826396898849E-04, 0.2899927470478232E-04, 0.1584986515403004E+01, 0.1588147771130463E+01, 0.3190255011763210E-02, 0.1890859942802736E-02, 0.9412930918090910E+00, 0.1097023073009216E+01, 0.1576208411525267E+00, 0.1913914667196325E+00, 0.1332062774397564E+01, 0.1255053409978084E+01, 0.1143821023097510E+00, 0.7279916643176543E-01, 0.7987861757106404E+00, 0.1091463124754034E+01, 0.3654761154847582E+00, 0.4266153094141972E+00, 0.1274050092339202E+01, 0.9194909148983121E+00, 0.7205613198290631E-01, 0.6547064404326042E-01, 0.8354550922133908E+00, 0.8261962423063568E+00, 0.5621179414582513E-01, 0.7667315937770838E-01, 0.1126935674731953E+01, 0.1417009768728692E+01, 0.3667472533840468E+00, 0.4042756034295816E+00, 0.1562008914947536E+01, 0.1185425268343357E+01, 0.2769195683500124E-01, 0.3111938635974581E-01, 0.1332145183743590E+01, 0.1563083311444625E+01, 0.2620575140703801E+00, 0.2835172362390010E+00, 0.1691083203792688E+01, 0.1491162475787817E+01, 0.8359650824372877E-01, 0.4928202642453804E-01, 0.8790739000820365E+00, 0.8415486989985177E+00, 0.1175682535061811E-01, 0.1564347179719430E-01, 0.1119753245127243E+01, 0.1104508961999007E+01, 0.3991886785572840E-03, 0.1143051254380294E-03, 0.3162690783341116E+00, 0.3165907299376309E+00, 0.4359567385560517E-03, 0.1567431614478116E-03, 0.1138265050331695E+00, 0.1137653492066288E+00, 0.9558734450579545E-04, 0.9991845479738400E-05, 0.1189201139646886E-01, 0.1188202127144326E-01, 0.1730052806966466E-08, 0.1397591405272086E-17, 0.9598672791582074E-11, 0.6617412588681544E-21, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + n0in: 18, + dmin: 6.6174125886815435E-022, + dmin1: 1.1882019541390456E-002, + dmin2: 0.11366976186212303, + dn: 6.6174125886815435E-022, + dn1: 1.1882019541390456E-002, + dn2: 0.11366976186212303, + tau: 9.5986713933289272E-012, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2383459406360114E+01, 0.2383459541678881E+01, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.1085901506809686E+01, 0.1085921313408604E+01, 0.1986826396898849E-04, 0.2899927470478232E-04, 0.1584986515403004E+01, 0.1588147771130463E+01, 0.3190255011763210E-02, 0.1890859942802736E-02, 0.9412930918090910E+00, 0.1097023073009216E+01, 0.1576208411525267E+00, 0.1913914667196325E+00, 0.1332062774397564E+01, 0.1255053409978084E+01, 0.1143821023097510E+00, 0.7279916643176543E-01, 0.7987861757106404E+00, 0.1091463124754034E+01, 0.3654761154847582E+00, 0.4266153094141972E+00, 0.1274050092339202E+01, 0.9194909148983121E+00, 0.7205613198290631E-01, 0.6547064404326042E-01, 0.8354550922133908E+00, 0.8261962423063568E+00, 0.5621179414582513E-01, 0.7667315937770838E-01, 0.1126935674731953E+01, 0.1417009768728692E+01, 0.3667472533840468E+00, 0.4042756034295816E+00, 0.1562008914947536E+01, 0.1185425268343357E+01, 0.2769195683500124E-01, 0.3111938635974581E-01, 0.1332145183743590E+01, 0.1563083311444625E+01, 0.2620575140703801E+00, 0.2835172362390010E+00, 0.1691083203792688E+01, 0.1491162475787817E+01, 0.8359650824372877E-01, 0.4928202642453804E-01, 0.8790739000820365E+00, 0.8415486989985177E+00, 0.1175682535061811E-01, 0.1564347179719430E-01, 0.1119753245127243E+01, 0.1104508961999007E+01, 0.3991886785572840E-03, 0.1143051254380294E-03, 0.3162690783341116E+00, 0.3165907299376309E+00, 0.4359567385560517E-03, 0.1567431614478116E-03, 0.1138265050331695E+00, 0.1137653492066288E+00, 0.9558734450579545E-04, 0.9991845479738400E-05, 0.1189201139646886E-01, 0.1188202127144326E-01, 0.1730052806966466E-08, 0.1397591405272086E-17, 0.9598672791582074E-11, 0.6617412588681544E-21, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.2818174710670554E-01}, + tauOut: 6.6174125886815426E-022, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2383459603334333E+01, 0.2383459541678881E+01, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.1085950284592642E+01, 0.1085921313408604E+01, 0.4240998334843304E-04, 0.2899927470478232E-04, 0.1589996221089918E+01, 0.1588147771130463E+01, 0.1304604978030436E-02, 0.1890859942802736E-02, 0.1287109934750819E+01, 0.1097023073009216E+01, 0.1866247058326724E+00, 0.1913914667196325E+00, 0.1141227870577177E+01, 0.1255053409978084E+01, 0.6962466280543776E-01, 0.7279916643176543E-01, 0.1448453771362794E+01, 0.1091463124754034E+01, 0.2708190685256155E+00, 0.4266153094141972E+00, 0.7141424904159570E+00, 0.9194909148983121E+00, 0.7574342769943966E-01, 0.6547064404326042E-01, 0.8271259739846255E+00, 0.8261962423063568E+00, 0.1313543755784947E+00, 0.7667315937770838E-01, 0.1689930996579779E+01, 0.1417009768728692E+01, 0.2835846650840220E+00, 0.4042756034295816E+00, 0.9329599896190804E+00, 0.1185425268343357E+01, 0.5213749144931325E-01, 0.3111938635974581E-01, 0.1794463056234313E+01, 0.1563083311444625E+01, 0.2355970842920850E+00, 0.2835172362390010E+00, 0.1304847417920270E+01, 0.1491162475787817E+01, 0.3178396542921673E-01, 0.4928202642453804E-01, 0.8254082053664953E+00, 0.8415486989985177E+00, 0.2093310277804656E-01, 0.1564347179719430E-01, 0.1083690164346398E+01, 0.1104508961999007E+01, 0.3339325601415243E-04, 0.1143051254380294E-03, 0.3167140798430647E+00, 0.3165907299376309E+00, 0.5630296103885627E-04, 0.1567431614478116E-03, 0.1137190380910697E+00, 0.1137653492066288E+00, 0.1044005669799533E-05, 0.9991845479738400E-05, 0.1188097726577346E-01, 0.1188202127144326E-01, 0.7784240935906335E-37, 0.1397591405272086E-17}, + i0: 1, + n0: 17, + pp: 0, + n0in: 18, + dmin: 6.6174125886815426E-022, + dmin1: 1.1880977265773463E-002, + dmin2: 0.11370904624558997, + dn: 6.6174125886815426E-022, + dn1: 1.1880977265773463E-002, + dn2: 0.11370904624558997, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2383459603334333E+01, 0.2383459541678881E+01, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.1085950284592642E+01, 0.1085921313408604E+01, 0.4240998334843304E-04, 0.2899927470478232E-04, 0.1589996221089918E+01, 0.1588147771130463E+01, 0.1304604978030436E-02, 0.1890859942802736E-02, 0.1287109934750819E+01, 0.1097023073009216E+01, 0.1866247058326724E+00, 0.1913914667196325E+00, 0.1141227870577177E+01, 0.1255053409978084E+01, 0.6962466280543776E-01, 0.7279916643176543E-01, 0.1448453771362794E+01, 0.1091463124754034E+01, 0.2708190685256155E+00, 0.4266153094141972E+00, 0.7141424904159570E+00, 0.9194909148983121E+00, 0.7574342769943966E-01, 0.6547064404326042E-01, 0.8271259739846255E+00, 0.8261962423063568E+00, 0.1313543755784947E+00, 0.7667315937770838E-01, 0.1689930996579779E+01, 0.1417009768728692E+01, 0.2835846650840220E+00, 0.4042756034295816E+00, 0.9329599896190804E+00, 0.1185425268343357E+01, 0.5213749144931325E-01, 0.3111938635974581E-01, 0.1794463056234313E+01, 0.1563083311444625E+01, 0.2355970842920850E+00, 0.2835172362390010E+00, 0.1304847417920270E+01, 0.1491162475787817E+01, 0.3178396542921673E-01, 0.4928202642453804E-01, 0.8254082053664953E+00, 0.8415486989985177E+00, 0.2093310277804656E-01, 0.1564347179719430E-01, 0.1083690164346398E+01, 0.1104508961999007E+01, 0.3339325601415243E-04, 0.1143051254380294E-03, 0.3167140798430647E+00, 0.3165907299376309E+00, 0.5630296103885627E-04, 0.1567431614478116E-03, 0.1137190380910697E+00, 0.1137653492066288E+00, 0.1044005669799533E-05, 0.9991845479738400E-05, 0.1188097726577346E-01, 0.1188202127144326E-01, 0.7784240935906335E-37, 0.1397591405272086E-17}, + tauOut: 1.1880832155707781E-002, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2383459603334333E+01, 0.2371578799269292E+01, 0.2809066689524106E-07, 0.1286276792433928E-07, 0.1085950284592642E+01, 0.1074111849557515E+01, 0.4240998334843304E-04, 0.6277904232066118E-04, 0.1589996221089918E+01, 0.1579357214869920E+01, 0.1304604978030436E-02, 0.1063198377376995E-02, 0.1287109934750819E+01, 0.1460790610050406E+01, 0.1866247058326724E+00, 0.1457986614708343E+00, 0.1141227870577177E+01, 0.1053173039756072E+01, 0.6962466280543776E-01, 0.9575644420574685E-01, 0.1448453771362794E+01, 0.1611635563526955E+01, 0.2708190685256155E+00, 0.1200044280642223E+00, 0.7141424904159570E+00, 0.6580006578954666E+00, 0.7574342769943966E-01, 0.9521169265880262E-01, 0.8271259739846255E+00, 0.8513878247486099E+00, 0.1313543755784947E+00, 0.2607270439790754E+00, 0.1689930996579779E+01, 0.1700907785529018E+01, 0.2835846650840220E+00, 0.1555482010511415E+00, 0.9329599896190804E+00, 0.8176684478615445E+00, 0.5213749144931325E-01, 0.1144214412274440E+00, 0.1794463056234313E+01, 0.1903757867143247E+01, 0.2355970842920850E+00, 0.1614796988702029E+00, 0.1304847417920270E+01, 0.1163270852323576E+01, 0.3178396542921673E-01, 0.2255256874351997E-01, 0.8254082053664953E+00, 0.8119079072453143E+00, 0.2093310277804656E-01, 0.2794035799797570E-01, 0.1083690164346398E+01, 0.1043902367448729E+01, 0.3339325601415243E-04, 0.1013132519024162E-04, 0.3167140798430647E+00, 0.3048794193232055E+00, 0.5630296103885627E-04, 0.2100082250625822E-04, 0.1137190380910697E+00, 0.1018182491185255E+00, 0.1044005669799533E-05, 0.1218230301111122E-06, 0.1188097726577346E-01, 0.2328703557243073E-07, 0.7784240935906335E-37, 0.1286276792433928E-07, 0.9751785856405315E-01}, + i0: 1, + n0: 17, + pp: 1, + n0in: 17, + dmin: 2.3287035572430725E-008, + dmin1: 0.10181720511285566, + dmin2: 0.30482311636216664, + dn: 2.3287035572430725E-008, + dn1: 0.10181720511285566, + dn2: 0.30482311636216664, + tau: 1.1880832155707781E-002, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.2383459603334333E+01, 0.2371578799269292E+01, 0.2809066689524106E-07, 0.1286276792433928E-07, 0.1085950284592642E+01, 0.1074111849557515E+01, 0.4240998334843304E-04, 0.6277904232066118E-04, 0.1589996221089918E+01, 0.1579357214869920E+01, 0.1304604978030436E-02, 0.1063198377376995E-02, 0.1287109934750819E+01, 0.1460790610050406E+01, 0.1866247058326724E+00, 0.1457986614708343E+00, 0.1141227870577177E+01, 0.1053173039756072E+01, 0.6962466280543776E-01, 0.9575644420574685E-01, 0.1448453771362794E+01, 0.1611635563526955E+01, 0.2708190685256155E+00, 0.1200044280642223E+00, 0.7141424904159570E+00, 0.6580006578954666E+00, 0.7574342769943966E-01, 0.9521169265880262E-01, 0.8271259739846255E+00, 0.8513878247486099E+00, 0.1313543755784947E+00, 0.2607270439790754E+00, 0.1689930996579779E+01, 0.1700907785529018E+01, 0.2835846650840220E+00, 0.1555482010511415E+00, 0.9329599896190804E+00, 0.8176684478615445E+00, 0.5213749144931325E-01, 0.1144214412274440E+00, 0.1794463056234313E+01, 0.1903757867143247E+01, 0.2355970842920850E+00, 0.1614796988702029E+00, 0.1304847417920270E+01, 0.1163270852323576E+01, 0.3178396542921673E-01, 0.2255256874351997E-01, 0.8254082053664953E+00, 0.8119079072453143E+00, 0.2093310277804656E-01, 0.2794035799797570E-01, 0.1083690164346398E+01, 0.1043902367448729E+01, 0.3339325601415243E-04, 0.1013132519024162E-04, 0.3167140798430647E+00, 0.3048794193232055E+00, 0.5630296103885627E-04, 0.2100082250625822E-04, 0.1137190380910697E+00, 0.1018182491185255E+00, 0.1044005669799533E-05, 0.1218230301111122E-06, 0.1188097726577346E-01, 0.2328703557243073E-07, 0.7784240935906335E-37, 0.1286276792433928E-07, 0.9751785856405315E-01}, + tauOut: 2.3287007705477136E-008, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2371578788845052E+01, 0.2371578799269292E+01, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.1074174599487151E+01, 0.1074111849557515E+01, 0.9230392664199863E-04, 0.6277904232066118E-04, 0.1580328086033647E+01, 0.1579357214869920E+01, 0.9827770701659698E-03, 0.1063198377376995E-02, 0.1605606471164067E+01, 0.1460790610050406E+01, 0.9563440497488795E-01, 0.1457986614708343E+00, 0.1053295055699924E+01, 0.1053173039756072E+01, 0.1465159169633776E+00, 0.9575644420574685E-01, 0.1585124051340792E+01, 0.1611635563526955E+01, 0.4981502397231050E-01, 0.1200044280642223E+00, 0.7033973032949510E+00, 0.6580006578954666E+00, 0.1152436546510613E+00, 0.9521169265880262E-01, 0.9968711907896164E+00, 0.8513878247486099E+00, 0.4448645553200346E+00, 0.2607270439790754E+00, 0.1411591407973117E+01, 0.1700907785529018E+01, 0.9010174998427344E-01, 0.1555482010511415E+00, 0.8419881158177074E+00, 0.8176684478615445E+00, 0.2587099684834221E+00, 0.1144214412274440E+00, 0.1806527574243020E+01, 0.1903757867143247E+01, 0.1039810460775319E+00, 0.1614796988702029E+00, 0.1081842351702556E+01, 0.1163270852323576E+01, 0.1692539477932339E-01, 0.2255256874351997E-01, 0.8229228471769590E+00, 0.8119079072453143E+00, 0.3544318396494814E-01, 0.2794035799797570E-01, 0.1008469291521964E+01, 0.1043902367448729E+01, 0.3062892015595061E-05, 0.1013132519024162E-04, 0.3048973339666884E+00, 0.3048794193232055E+00, 0.7013072071892081E-05, 0.2100082250625822E-04, 0.1018113345824760E+00, 0.1018182491185255E+00, 0.2786425742647189E-13, 0.1218230301111122E-06, 0.2696165428114542E-17, 0.2328703557243073E-07, 0.5825676764620370E-08, 0.1286276792433928E-07}, + i0: 1, + n0: 17, + pp: 0, + n0in: 17, + dmin: 2.6961654281145418E-018, + dmin1: 0.10181121275944585, + dmin2: 0.30487633314418217, + dn: 2.6961654281145418E-018, + dn1: 0.10181121275944585, + dn2: 0.30487633314418217, + tau: 2.3287007705477136E-008, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2371578788845052E+01, 0.2371578799269292E+01, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.1074174599487151E+01, 0.1074111849557515E+01, 0.9230392664199863E-04, 0.6277904232066118E-04, 0.1580328086033647E+01, 0.1579357214869920E+01, 0.9827770701659698E-03, 0.1063198377376995E-02, 0.1605606471164067E+01, 0.1460790610050406E+01, 0.9563440497488795E-01, 0.1457986614708343E+00, 0.1053295055699924E+01, 0.1053173039756072E+01, 0.1465159169633776E+00, 0.9575644420574685E-01, 0.1585124051340792E+01, 0.1611635563526955E+01, 0.4981502397231050E-01, 0.1200044280642223E+00, 0.7033973032949510E+00, 0.6580006578954666E+00, 0.1152436546510613E+00, 0.9521169265880262E-01, 0.9968711907896164E+00, 0.8513878247486099E+00, 0.4448645553200346E+00, 0.2607270439790754E+00, 0.1411591407973117E+01, 0.1700907785529018E+01, 0.9010174998427344E-01, 0.1555482010511415E+00, 0.8419881158177074E+00, 0.8176684478615445E+00, 0.2587099684834221E+00, 0.1144214412274440E+00, 0.1806527574243020E+01, 0.1903757867143247E+01, 0.1039810460775319E+00, 0.1614796988702029E+00, 0.1081842351702556E+01, 0.1163270852323576E+01, 0.1692539477932339E-01, 0.2255256874351997E-01, 0.8229228471769590E+00, 0.8119079072453143E+00, 0.3544318396494814E-01, 0.2794035799797570E-01, 0.1008469291521964E+01, 0.1043902367448729E+01, 0.3062892015595061E-05, 0.1013132519024162E-04, 0.3048973339666884E+00, 0.3048794193232055E+00, 0.7013072071892081E-05, 0.2100082250625822E-04, 0.1018113345824760E+00, 0.1018182491185255E+00, 0.2786425742647189E-13, 0.1218230301111122E-06, 0.2696165428114542E-17, 0.2328703557243073E-07, 0.5825676764620370E-08, 0.1286276792433928E-07}, + tauOut: 2.6961654281138038E-018, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2371578788845052E+01, 0.2371578794670729E+01, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.1074174599487151E+01, 0.1074266900775131E+01, 0.9230392664199863E-04, 0.1357860766428602E-03, 0.1580328086033647E+01, 0.1581175077027170E+01, 0.9827770701659698E-03, 0.9979623676695663E-03, 0.1605606471164067E+01, 0.1700242913771285E+01, 0.9563440497488795E-01, 0.5924520849284005E-01, 0.1053295055699924E+01, 0.1140565764170461E+01, 0.1465159169633776E+00, 0.2036234219705987E+00, 0.1585124051340792E+01, 0.1431315653342504E+01, 0.4981502397231050E-01, 0.2448080089382756E-01, 0.7033973032949510E+00, 0.7941601570521848E+00, 0.1152436546510613E+00, 0.1446598374682775E+00, 0.9968711907896164E+00, 0.1297075908641373E+01, 0.4448645553200346E+00, 0.4841405038964208E+00, 0.1411591407973117E+01, 0.1017552654060970E+01, 0.9010174998427344E-01, 0.7455594793877945E-01, 0.8419881158177074E+00, 0.1026142136362350E+01, 0.2587099684834221E+00, 0.4554599945126984E+00, 0.1806527574243020E+01, 0.1455048625807853E+01, 0.1039810460775319E+00, 0.7731088667813635E-01, 0.1081842351702556E+01, 0.1021456859803743E+01, 0.1692539477932339E-01, 0.1363571444815687E-01, 0.8229228471769590E+00, 0.8447303166937503E+00, 0.3544318396494814E-01, 0.4231334180394086E-01, 0.1008469291521964E+01, 0.9661590126100381E+00, 0.3062892015595061E-05, 0.9665775484099522E-06, 0.3048973339666884E+00, 0.3049033804612119E+00, 0.7013072071892081E-05, 0.2341758973227438E-05, 0.1018113345824760E+00, 0.1018089928235306E+00, 0.2786425742647189E-13, 0.7379175991216932E-30, 0.1093987140067686E+00}, + i0: 1, + n0: 16, + pp: 1, + n0in: 17, + dmin: 2.6961654281138038E-018, + dmin1: 0.10180899282350273, + dmin2: 0.30489636738914000, + dn: 2.6961654281138038E-018, + dn1: 0.10180899282350273, + dn2: 0.30489636738914000, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2371578788845052E+01, 0.2371578794670729E+01, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.1074174599487151E+01, 0.1074266900775131E+01, 0.9230392664199863E-04, 0.1357860766428602E-03, 0.1580328086033647E+01, 0.1581175077027170E+01, 0.9827770701659698E-03, 0.9979623676695663E-03, 0.1605606471164067E+01, 0.1700242913771285E+01, 0.9563440497488795E-01, 0.5924520849284005E-01, 0.1053295055699924E+01, 0.1140565764170461E+01, 0.1465159169633776E+00, 0.2036234219705987E+00, 0.1585124051340792E+01, 0.1431315653342504E+01, 0.4981502397231050E-01, 0.2448080089382756E-01, 0.7033973032949510E+00, 0.7941601570521848E+00, 0.1152436546510613E+00, 0.1446598374682775E+00, 0.9968711907896164E+00, 0.1297075908641373E+01, 0.4448645553200346E+00, 0.4841405038964208E+00, 0.1411591407973117E+01, 0.1017552654060970E+01, 0.9010174998427344E-01, 0.7455594793877945E-01, 0.8419881158177074E+00, 0.1026142136362350E+01, 0.2587099684834221E+00, 0.4554599945126984E+00, 0.1806527574243020E+01, 0.1455048625807853E+01, 0.1039810460775319E+00, 0.7731088667813635E-01, 0.1081842351702556E+01, 0.1021456859803743E+01, 0.1692539477932339E-01, 0.1363571444815687E-01, 0.8229228471769590E+00, 0.8447303166937503E+00, 0.3544318396494814E-01, 0.4231334180394086E-01, 0.1008469291521964E+01, 0.9661590126100381E+00, 0.3062892015595061E-05, 0.9665775484099522E-06, 0.3048973339666884E+00, 0.3049033804612119E+00, 0.7013072071892081E-05, 0.2341758973227438E-05, 0.1018113345824760E+00, 0.1018089928235306E+00, 0.2786425742647189E-13, 0.7379175991216932E-30, 0.1093987140067686E+00}, + tauOut: 0.10180650470263587, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2269772292606755E+01, 0.2371578794670729E+01, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.9725961809002787E+00, 0.1074266900775131E+01, 0.2207509801202943E-03, 0.1357860766428602E-03, 0.1480145783712083E+01, 0.1581175077027170E+01, 0.1146359002276934E-02, 0.9979623676695663E-03, 0.1656535258559212E+01, 0.1700242913771285E+01, 0.4079180092843103E-01, 0.5924520849284005E-01, 0.1201590880509993E+01, 0.1140565764170461E+01, 0.2425529321011353E+00, 0.2036234219705987E+00, 0.1111437017432560E+01, 0.1431315653342504E+01, 0.1749237822536809E-01, 0.2448080089382756E-01, 0.8195211115924584E+00, 0.7941601570521848E+00, 0.2289566278084960E+00, 0.1446598374682775E+00, 0.1450453280026662E+01, 0.1297075908641373E+01, 0.3396444831847066E+00, 0.4841405038964208E+00, 0.6506576141124067E+00, 0.1017552654060970E+01, 0.1175810411452473E+00, 0.7455594793877945E-01, 0.1262214585027166E+01, 0.1026142136362350E+01, 0.5250426092262996E+00, 0.4554599945126984E+00, 0.9055103985570538E+00, 0.1455048625807853E+01, 0.8721019179982008E-01, 0.7731088667813635E-01, 0.8460758777494440E+00, 0.1021456859803743E+01, 0.1361402882064932E-01, 0.1363571444815687E-01, 0.7716231249744060E+00, 0.8447303166937503E+00, 0.5298106707064092E-01, 0.4231334180394086E-01, 0.8113724074143097E+00, 0.9661590126100381E+00, 0.3632274887524200E-06, 0.9665775484099522E-06, 0.2030988542900605E+00, 0.3049033804612119E+00, 0.1173872316183806E-05, 0.2341758973227438E-05, 0.1314248578535016E-05, 0.1018089928235306E+00, 0.1248859578385863E-08, 0.2638661645752538E-08}, + i0: 1, + n0: 16, + pp: 0, + n0in: 16, + dmin: 1.3142485785350155E-006, + dmin1: 0.20309651253108729, + dmin2: 0.57610166617362735, + dn: 1.3142485785350155E-006, + dn1: 0.20309651253108729, + dn2: 0.81137144083676127, + tau: 0.10180650470263587, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.2269772292606755E+01, 0.2371578794670729E+01, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.9725961809002787E+00, 0.1074266900775131E+01, 0.2207509801202943E-03, 0.1357860766428602E-03, 0.1480145783712083E+01, 0.1581175077027170E+01, 0.1146359002276934E-02, 0.9979623676695663E-03, 0.1656535258559212E+01, 0.1700242913771285E+01, 0.4079180092843103E-01, 0.5924520849284005E-01, 0.1201590880509993E+01, 0.1140565764170461E+01, 0.2425529321011353E+00, 0.2036234219705987E+00, 0.1111437017432560E+01, 0.1431315653342504E+01, 0.1749237822536809E-01, 0.2448080089382756E-01, 0.8195211115924584E+00, 0.7941601570521848E+00, 0.2289566278084960E+00, 0.1446598374682775E+00, 0.1450453280026662E+01, 0.1297075908641373E+01, 0.3396444831847066E+00, 0.4841405038964208E+00, 0.6506576141124067E+00, 0.1017552654060970E+01, 0.1175810411452473E+00, 0.7455594793877945E-01, 0.1262214585027166E+01, 0.1026142136362350E+01, 0.5250426092262996E+00, 0.4554599945126984E+00, 0.9055103985570538E+00, 0.1455048625807853E+01, 0.8721019179982008E-01, 0.7731088667813635E-01, 0.8460758777494440E+00, 0.1021456859803743E+01, 0.1361402882064932E-01, 0.1363571444815687E-01, 0.7716231249744060E+00, 0.8447303166937503E+00, 0.5298106707064092E-01, 0.4231334180394086E-01, 0.8113724074143097E+00, 0.9661590126100381E+00, 0.3632274887524200E-06, 0.9665775484099522E-06, 0.2030988542900605E+00, 0.3049033804612119E+00, 0.1173872316183806E-05, 0.2341758973227438E-05, 0.1314248578535016E-05, 0.1018089928235306E+00, 0.1248859578385863E-08, 0.2638661645752538E-08}, + tauOut: 1.3142409824136984E-006, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2269772292606755E+01, 0.2269770979614632E+01, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.9725961809002787E+00, 0.9728156171042807E+00, 0.2207509801202943E-03, 0.3358741643642203E-03, 0.1480145783712083E+01, 0.1480954954309013E+01, 0.1146359002276934E-02, 0.1282269997958535E-02, 0.1656535258559212E+01, 0.1696043475248702E+01, 0.4079180092843103E-01, 0.2889964597634762E-01, 0.1201590880509993E+01, 0.1415242852393798E+01, 0.2425529321011353E+00, 0.1904848393814713E+00, 0.1111437017432560E+01, 0.9384432420354740E+00, 0.1749237822536809E-01, 0.1527569554079381E-01, 0.8195211115924584E+00, 0.1033200729619178E+01, 0.2289566278084960E+00, 0.3214195289148511E+00, 0.1450453280026662E+01, 0.1468676920055535E+01, 0.3396444831847066E+00, 0.1504703083827628E+00, 0.6506576141124067E+00, 0.6177670326339089E+00, 0.1175810411452473E+00, 0.2402402478867145E+00, 0.1262214585027166E+01, 0.1547015632125768E+01, 0.5250426092262996E+00, 0.3073217441808570E+00, 0.9055103985570538E+00, 0.6853975319350345E+00, 0.8721019179982008E-01, 0.1076549537133787E+00, 0.8460758777494440E+00, 0.7520336386157322E+00, 0.1361402882064932E-01, 0.1396865635082151E-01, 0.7716231249744060E+00, 0.8106342214532430E+00, 0.5298106707064092E-01, 0.5302931309687425E-01, 0.8113724074143097E+00, 0.7583421433039418E+00, 0.3632274887524200E-06, 0.9727942389020712E-07, 0.2030988542900605E+00, 0.2030986166419704E+00, 0.1173872316183806E-05, 0.7596112905317353E-11, 0.1314248578535016E-05, 0.8411884199182457E-17, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.1093987140067686E+00}, + i0: 1, + n0: 16, + pp: 1, + n0in: 16, + dmin: 8.4118841991824567E-018, + dmin1: 0.20309744276965425, + dmin2: 0.50018599148866161, + dn: 8.4118841991824567E-018, + dn1: 0.20309744276965425, + dn2: 0.75834178007645303, + tau: 1.3142409824136984E-006, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2269772292606755E+01, 0.2269770979614632E+01, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.9725961809002787E+00, 0.9728156171042807E+00, 0.2207509801202943E-03, 0.3358741643642203E-03, 0.1480145783712083E+01, 0.1480954954309013E+01, 0.1146359002276934E-02, 0.1282269997958535E-02, 0.1656535258559212E+01, 0.1696043475248702E+01, 0.4079180092843103E-01, 0.2889964597634762E-01, 0.1201590880509993E+01, 0.1415242852393798E+01, 0.2425529321011353E+00, 0.1904848393814713E+00, 0.1111437017432560E+01, 0.9384432420354740E+00, 0.1749237822536809E-01, 0.1527569554079381E-01, 0.8195211115924584E+00, 0.1033200729619178E+01, 0.2289566278084960E+00, 0.3214195289148511E+00, 0.1450453280026662E+01, 0.1468676920055535E+01, 0.3396444831847066E+00, 0.1504703083827628E+00, 0.6506576141124067E+00, 0.6177670326339089E+00, 0.1175810411452473E+00, 0.2402402478867145E+00, 0.1262214585027166E+01, 0.1547015632125768E+01, 0.5250426092262996E+00, 0.3073217441808570E+00, 0.9055103985570538E+00, 0.6853975319350345E+00, 0.8721019179982008E-01, 0.1076549537133787E+00, 0.8460758777494440E+00, 0.7520336386157322E+00, 0.1361402882064932E-01, 0.1396865635082151E-01, 0.7716231249744060E+00, 0.8106342214532430E+00, 0.5298106707064092E-01, 0.5302931309687425E-01, 0.8113724074143097E+00, 0.7583421433039418E+00, 0.3632274887524200E-06, 0.9727942389020712E-07, 0.2030988542900605E+00, 0.2030986166419704E+00, 0.1173872316183806E-05, 0.7596112905317353E-11, 0.1314248578535016E-05, 0.8411884199182457E-17, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.1093987140067686E+00}, + tauOut: 8.4118841988678429E-018, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2269770980149768E+01, 0.2269770979614632E+01, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.9731514910392876E+00, 0.9728156171042807E+00, 0.5111377954200868E-03, 0.3358741643642203E-03, 0.1481726086511552E+01, 0.1480954954309013E+01, 0.1467737987028945E-02, 0.1282269997958535E-02, 0.1723475383238021E+01, 0.1696043475248702E+01, 0.2373112943910766E-01, 0.2889964597634762E-01, 0.1581996562336162E+01, 0.1415242852393798E+01, 0.1129959536471923E+00, 0.1904848393814713E+00, 0.8407229839290754E+00, 0.9384432420354740E+00, 0.1877296098701645E-01, 0.1527569554079381E-01, 0.1335847297547013E+01, 0.1033200729619178E+01, 0.3533797947109679E+00, 0.3214195289148511E+00, 0.1265767433727330E+01, 0.1468676920055535E+01, 0.7343813202351114E-01, 0.1504703083827628E+00, 0.7845691484971122E+00, 0.6177670326339089E+00, 0.4737063898809231E+00, 0.2402402478867145E+00, 0.1380630986425702E+01, 0.1547015632125768E+01, 0.1525661578238559E+00, 0.3073217441808570E+00, 0.6404863278245572E+00, 0.6853975319350345E+00, 0.1264041760751794E+00, 0.1076549537133787E+00, 0.6395981188913744E+00, 0.7520336386157322E+00, 0.1770404028911661E-01, 0.1396865635082151E-01, 0.8459594942610007E+00, 0.8106342214532430E+00, 0.4753698401003136E-01, 0.5302931309687425E-01, 0.7108052565733343E+00, 0.7583421433039418E+00, 0.2779568135873871E-07, 0.9727942389020712E-07, 0.2030985888538852E+00, 0.2030986166419704E+00, 0.3146138162949754E-27, 0.7596112905317353E-11, 0.8411884198867843E-17, 0.8411884199182457E-17, 0.2293573303077261E-09, 0.5351359530665278E-09}, + i0: 1, + n0: 16, + pp: 0, + n0in: 16, + dmin: 8.4118841988678429E-018, + dmin1: 0.20309858884628909, + dmin2: 0.53283137411117854, + dn: 8.4118841988678429E-018, + dn1: 0.20309858884628909, + dn2: 0.71080515929391042, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2269770980149768E+01, 0.2269770979614632E+01, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.9731514910392876E+00, 0.9728156171042807E+00, 0.5111377954200868E-03, 0.3358741643642203E-03, 0.1481726086511552E+01, 0.1480954954309013E+01, 0.1467737987028945E-02, 0.1282269997958535E-02, 0.1723475383238021E+01, 0.1696043475248702E+01, 0.2373112943910766E-01, 0.2889964597634762E-01, 0.1581996562336162E+01, 0.1415242852393798E+01, 0.1129959536471923E+00, 0.1904848393814713E+00, 0.8407229839290754E+00, 0.9384432420354740E+00, 0.1877296098701645E-01, 0.1527569554079381E-01, 0.1335847297547013E+01, 0.1033200729619178E+01, 0.3533797947109679E+00, 0.3214195289148511E+00, 0.1265767433727330E+01, 0.1468676920055535E+01, 0.7343813202351114E-01, 0.1504703083827628E+00, 0.7845691484971122E+00, 0.6177670326339089E+00, 0.4737063898809231E+00, 0.2402402478867145E+00, 0.1380630986425702E+01, 0.1547015632125768E+01, 0.1525661578238559E+00, 0.3073217441808570E+00, 0.6404863278245572E+00, 0.6853975319350345E+00, 0.1264041760751794E+00, 0.1076549537133787E+00, 0.6395981188913744E+00, 0.7520336386157322E+00, 0.1770404028911661E-01, 0.1396865635082151E-01, 0.8459594942610007E+00, 0.8106342214532430E+00, 0.4753698401003136E-01, 0.5302931309687425E-01, 0.7108052565733343E+00, 0.7583421433039418E+00, 0.2779568135873871E-07, 0.9727942389020712E-07, 0.2030985888538852E+00, 0.2030986166419704E+00, 0.3146138162949754E-27, 0.7596112905317353E-11, 0.8411884198867843E-17, 0.8411884199182457E-17, 0.2293573303077261E-09, 0.5351359530665278E-09}, + tauOut: 8.4118841988678429E-018, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2269770980149768E+01, 0.2269770980379126E+01, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.9731514910392876E+00, 0.9736626287363720E+00, 0.5111377954200868E-03, 0.7778528033461282E-03, 0.1481726086511552E+01, 0.1482415971695234E+01, 0.1467737987028945E-02, 0.1706410574351102E-02, 0.1723475383238021E+01, 0.1745500102102777E+01, 0.2373112943910766E-01, 0.2150819994097728E-01, 0.1581996562336162E+01, 0.1673484316042377E+01, 0.1129959536471923E+00, 0.5676676764251993E-01, 0.8407229839290754E+00, 0.8027291772735718E+00, 0.1877296098701645E-01, 0.3124068479314146E-01, 0.1335847297547013E+01, 0.1657986407464839E+01, 0.3533797947109679E+00, 0.2697830536296953E+00, 0.1265767433727330E+01, 0.1069422512121146E+01, 0.7343813202351114E-01, 0.5387701498318342E-01, 0.7845691484971122E+00, 0.1204398523394852E+01, 0.4737063898809231E+00, 0.5430210247136315E+00, 0.1380630986425702E+01, 0.9901761195359265E+00, 0.1525661578238559E+00, 0.9868601781741700E-01, 0.6404863278245572E+00, 0.6682044860823195E+00, 0.1264041760751794E+00, 0.1209927124430272E+00, 0.6395981188913744E+00, 0.5363094467374639E+00, 0.1770404028911661E-01, 0.2792585709699239E-01, 0.8459594942610007E+00, 0.8655706211740396E+00, 0.4753698401003136E-01, 0.3903729781186600E-01, 0.7108052565733343E+00, 0.6717679865571495E+00, 0.2779568135873871E-07, 0.8403591378512072E-08, 0.2030985888538852E+00, 0.2030985804502939E+00, 0.3146138162949754E-27, 0.1303059324279677E-43, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + n0in: 16, + dmin: 8.4118841988678429E-018, + dmin1: 0.20309858045029386, + dmin2: 0.51860540644834729, + dn: 8.4118841988678429E-018, + dn1: 0.20309858045029386, + dn2: 0.67176795876146822, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2269770980149768E+01, 0.2269770980379126E+01, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.9731514910392876E+00, 0.9736626287363720E+00, 0.5111377954200868E-03, 0.7778528033461282E-03, 0.1481726086511552E+01, 0.1482415971695234E+01, 0.1467737987028945E-02, 0.1706410574351102E-02, 0.1723475383238021E+01, 0.1745500102102777E+01, 0.2373112943910766E-01, 0.2150819994097728E-01, 0.1581996562336162E+01, 0.1673484316042377E+01, 0.1129959536471923E+00, 0.5676676764251993E-01, 0.8407229839290754E+00, 0.8027291772735718E+00, 0.1877296098701645E-01, 0.3124068479314146E-01, 0.1335847297547013E+01, 0.1657986407464839E+01, 0.3533797947109679E+00, 0.2697830536296953E+00, 0.1265767433727330E+01, 0.1069422512121146E+01, 0.7343813202351114E-01, 0.5387701498318342E-01, 0.7845691484971122E+00, 0.1204398523394852E+01, 0.4737063898809231E+00, 0.5430210247136315E+00, 0.1380630986425702E+01, 0.9901761195359265E+00, 0.1525661578238559E+00, 0.9868601781741700E-01, 0.6404863278245572E+00, 0.6682044860823195E+00, 0.1264041760751794E+00, 0.1209927124430272E+00, 0.6395981188913744E+00, 0.5363094467374639E+00, 0.1770404028911661E-01, 0.2792585709699239E-01, 0.8459594942610007E+00, 0.8655706211740396E+00, 0.4753698401003136E-01, 0.3903729781186600E-01, 0.7108052565733343E+00, 0.6717679865571495E+00, 0.2779568135873871E-07, 0.8403591378512072E-08, 0.2030985888538852E+00, 0.2030985804502939E+00, 0.3146138162949754E-27, 0.1303059324279677E-43, 0.2112065329503869E+00}, + tauOut: 0.10154929022514693, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2168221690252314E+01, 0.2269770980379126E+01, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.8728911912704126E+00, 0.9736626287363720E+00, 0.1321013925721922E-02, 0.7778528033461282E-03, 0.1381252078118717E+01, 0.1482415971695234E+01, 0.2156405683614187E-02, 0.1706410574351102E-02, 0.1663302606134993E+01, 0.1745500102102777E+01, 0.2163985983955575E-01, 0.2150819994097728E-01, 0.1607061933620194E+01, 0.1673484316042377E+01, 0.2835506195054301E-01, 0.5676676764251993E-01, 0.7040655098910235E+00, 0.8027291772735718E+00, 0.7356791380810462E-01, 0.3124068479314146E-01, 0.1752652257061283E+01, 0.1657986407464839E+01, 0.1646145547572216E+00, 0.2697830536296953E+00, 0.8571356821219610E+00, 0.1069422512121146E+01, 0.7570493055431493E-01, 0.5387701498318342E-01, 0.1570165327329021E+01, 0.1204398523394852E+01, 0.3424393862982660E+00, 0.5430210247136315E+00, 0.6448734608299306E+00, 0.9901761195359265E+00, 0.1022564019526126E+00, 0.9868601781741700E-01, 0.5853915063475871E+00, 0.6682044860823195E+00, 0.1108480973262629E+00, 0.1209927124430272E+00, 0.3518379162830466E+00, 0.5363094467374639E+00, 0.6870152520689508E-01, 0.2792585709699239E-01, 0.7343571035538636E+00, 0.8655706211740396E+00, 0.3571015630515456E-01, 0.3903729781186600E-01, 0.5345085484304394E+00, 0.6717679865571495E+00, 0.3193134112956561E-08, 0.8403591378512072E-08, 0.1015492870320128E+00, 0.2030985804502939E+00, 0.4415865678637858E-10, 0.9833566024906726E-10}, + i0: 1, + n0: 15, + pp: 0, + n0in: 15, + dmin: 0.10154928703201281, + dmin1: 0.32391205918605420, + dmin2: 0.32391205918605420, + dn: 0.10154928703201281, + dn1: 0.53450854002684800, + dn2: 0.69531980574199759, + tau: 0.10154929022514693, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.2168221690252314E+01, 0.2269770980379126E+01, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.8728911912704126E+00, 0.9736626287363720E+00, 0.1321013925721922E-02, 0.7778528033461282E-03, 0.1381252078118717E+01, 0.1482415971695234E+01, 0.2156405683614187E-02, 0.1706410574351102E-02, 0.1663302606134993E+01, 0.1745500102102777E+01, 0.2163985983955575E-01, 0.2150819994097728E-01, 0.1607061933620194E+01, 0.1673484316042377E+01, 0.2835506195054301E-01, 0.5676676764251993E-01, 0.7040655098910235E+00, 0.8027291772735718E+00, 0.7356791380810462E-01, 0.3124068479314146E-01, 0.1752652257061283E+01, 0.1657986407464839E+01, 0.1646145547572216E+00, 0.2697830536296953E+00, 0.8571356821219610E+00, 0.1069422512121146E+01, 0.7570493055431493E-01, 0.5387701498318342E-01, 0.1570165327329021E+01, 0.1204398523394852E+01, 0.3424393862982660E+00, 0.5430210247136315E+00, 0.6448734608299306E+00, 0.9901761195359265E+00, 0.1022564019526126E+00, 0.9868601781741700E-01, 0.5853915063475871E+00, 0.6682044860823195E+00, 0.1108480973262629E+00, 0.1209927124430272E+00, 0.3518379162830466E+00, 0.5363094467374639E+00, 0.6870152520689508E-01, 0.2792585709699239E-01, 0.7343571035538636E+00, 0.8655706211740396E+00, 0.3571015630515456E-01, 0.3903729781186600E-01, 0.5345085484304394E+00, 0.6717679865571495E+00, 0.3193134112956561E-08, 0.8403591378512072E-08, 0.1015492870320128E+00, 0.2030985804502939E+00, 0.4415865678637858E-10, 0.9833566024906726E-10}, + tauOut: 0.10154100618138810, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2168221690252314E+01, 0.2066680684115085E+01, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.8728911912704126E+00, 0.7726711989960955E+00, 0.1321013925721922E-02, 0.2361487308570419E-02, 0.1381252078118717E+01, 0.1279505990312372E+01, 0.2156405683614187E-02, 0.2803234389363145E-02, 0.1663302606134993E+01, 0.1580598225403798E+01, 0.2163985983955575E-01, 0.2200217261925751E-01, 0.1607061933620194E+01, 0.1511873816770092E+01, 0.2835506195054301E-01, 0.1320468740761088E-01, 0.7040655098910235E+00, 0.6628877301101292E+00, 0.7356791380810462E-01, 0.1945110224949301E+00, 0.1752652257061283E+01, 0.1621214783142186E+01, 0.1646145547572216E+00, 0.8703165684534678E-01, 0.8571356821219610E+00, 0.7442679496495411E+00, 0.7570493055431493E-01, 0.1597129865933493E+00, 0.1570165327329021E+01, 0.1651350720852550E+01, 0.3424393862982660E+00, 0.1337269360034139E+00, 0.6448734608299306E+00, 0.5118619205977412E+00, 0.1022564019526126E+00, 0.1169456581236225E+00, 0.5853915063475871E+00, 0.4777529393688394E+00, 0.1108480973262629E+00, 0.8163333047984263E-01, 0.3518379162830466E+00, 0.2373651048287110E+00, 0.6870152520689508E-01, 0.2125478936639627E+00, 0.7343571035538636E+00, 0.4559783600136673E+00, 0.3571015630515456E-01, 0.4186028435717903E-01, 0.5345085484304394E+00, 0.3911072610850064E+00, 0.3193134112956561E-08, 0.8290832843879624E-09, 0.1015492870320128E+00, 0.8280021541434701E-05, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + n0in: 15, + dmin: 8.2800215414347011E-006, + dmin1: 0.16866357962181588, + dmin2: 0.16866357962181588, + dn: 8.2800215414347011E-006, + dn1: 0.39110725789187228, + dn2: 0.42026820370851276, + tau: 0.10154100618138810, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2168221690252314E+01, 0.2066680684115085E+01, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.8728911912704126E+00, 0.7726711989960955E+00, 0.1321013925721922E-02, 0.2361487308570419E-02, 0.1381252078118717E+01, 0.1279505990312372E+01, 0.2156405683614187E-02, 0.2803234389363145E-02, 0.1663302606134993E+01, 0.1580598225403798E+01, 0.2163985983955575E-01, 0.2200217261925751E-01, 0.1607061933620194E+01, 0.1511873816770092E+01, 0.2835506195054301E-01, 0.1320468740761088E-01, 0.7040655098910235E+00, 0.6628877301101292E+00, 0.7356791380810462E-01, 0.1945110224949301E+00, 0.1752652257061283E+01, 0.1621214783142186E+01, 0.1646145547572216E+00, 0.8703165684534678E-01, 0.8571356821219610E+00, 0.7442679496495411E+00, 0.7570493055431493E-01, 0.1597129865933493E+00, 0.1570165327329021E+01, 0.1651350720852550E+01, 0.3424393862982660E+00, 0.1337269360034139E+00, 0.6448734608299306E+00, 0.5118619205977412E+00, 0.1022564019526126E+00, 0.1169456581236225E+00, 0.5853915063475871E+00, 0.4777529393688394E+00, 0.1108480973262629E+00, 0.8163333047984263E-01, 0.3518379162830466E+00, 0.2373651048287110E+00, 0.6870152520689508E-01, 0.2125478936639627E+00, 0.7343571035538636E+00, 0.4559783600136673E+00, 0.3571015630515456E-01, 0.4186028435717903E-01, 0.5345085484304394E+00, 0.3911072610850064E+00, 0.3193134112956561E-08, 0.8290832843879624E-09, 0.1015492870320128E+00, 0.8280021541434701E-05, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.2112065329503869E+00}, + tauOut: 8.2795951083136037E-006, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2066672404538628E+01, 0.2066680684115085E+01, 0.6973096395115281E-11, 0.1865101988102620E-10, 0.7750244067025847E+00, 0.7726711989960955E+00, 0.3898634844569491E-02, 0.2361487308570419E-02, 0.1278402310262057E+01, 0.1279505990312372E+01, 0.3465878671879142E-02, 0.2803234389363145E-02, 0.1599126239756068E+01, 0.1580598225403798E+01, 0.2080167773382635E-01, 0.2200217261925751E-01, 0.1504268546848768E+01, 0.1511873816770092E+01, 0.5818924606767697E-02, 0.1320468740761088E-01, 0.8515715484031834E+00, 0.6628877301101292E+00, 0.3703084558710277E+00, 0.1945110224949301E+00, 0.1337929704521397E+01, 0.1621214783142186E+01, 0.4841425717359337E-01, 0.8703165684534678E-01, 0.8555583994741887E+00, 0.7442679496495411E+00, 0.3082690272254148E+00, 0.1597129865933493E+00, 0.1476800350035441E+01, 0.1651350720852550E+01, 0.4635002036444261E-01, 0.1337269360034139E+00, 0.5824492787618127E+00, 0.5118619205977412E+00, 0.9592445892242578E-01, 0.1169456581236225E+00, 0.4634535313311479E+00, 0.4777529393688394E+00, 0.4180980990954932E-01, 0.8163333047984263E-01, 0.4080949089880160E+00, 0.2373651048287110E+00, 0.2374870106014949E+00, 0.2125478936639627E+00, 0.2603433541742431E+00, 0.4559783600136673E+00, 0.6288565043307552E-01, 0.4186028435717903E-01, 0.3282133318859058E+00, 0.3911072610850064E+00, 0.2091574834858362E-13, 0.8290832843879624E-09, 0.4264122053484397E-09, 0.8280021541434701E-05, 0.6973096395115281E-11, 0.1865101988102620E-10}, + i0: 1, + n0: 15, + pp: 0, + n0in: 15, + dmin: 4.2641220534843968E-010, + dmin1: 0.19554701532405336, + dmin2: 0.19554701532405336, + dn: 4.2641220534843968E-010, + dn1: 0.32821333105682254, + dn2: 0.21848306981706411, + tau: 8.2795951083136037E-006, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2066672404538628E+01, 0.2066680684115085E+01, 0.6973096395115281E-11, 0.1865101988102620E-10, 0.7750244067025847E+00, 0.7726711989960955E+00, 0.3898634844569491E-02, 0.2361487308570419E-02, 0.1278402310262057E+01, 0.1279505990312372E+01, 0.3465878671879142E-02, 0.2803234389363145E-02, 0.1599126239756068E+01, 0.1580598225403798E+01, 0.2080167773382635E-01, 0.2200217261925751E-01, 0.1504268546848768E+01, 0.1511873816770092E+01, 0.5818924606767697E-02, 0.1320468740761088E-01, 0.8515715484031834E+00, 0.6628877301101292E+00, 0.3703084558710277E+00, 0.1945110224949301E+00, 0.1337929704521397E+01, 0.1621214783142186E+01, 0.4841425717359337E-01, 0.8703165684534678E-01, 0.8555583994741887E+00, 0.7442679496495411E+00, 0.3082690272254148E+00, 0.1597129865933493E+00, 0.1476800350035441E+01, 0.1651350720852550E+01, 0.4635002036444261E-01, 0.1337269360034139E+00, 0.5824492787618127E+00, 0.5118619205977412E+00, 0.9592445892242578E-01, 0.1169456581236225E+00, 0.4634535313311479E+00, 0.4777529393688394E+00, 0.4180980990954932E-01, 0.8163333047984263E-01, 0.4080949089880160E+00, 0.2373651048287110E+00, 0.2374870106014949E+00, 0.2125478936639627E+00, 0.2603433541742431E+00, 0.4559783600136673E+00, 0.6288565043307552E-01, 0.4186028435717903E-01, 0.3282133318859058E+00, 0.3911072610850064E+00, 0.2091574834858362E-13, 0.8290832843879624E-09, 0.4264122053484397E-09, 0.8280021541434701E-05, 0.6973096395115281E-11, 0.1865101988102620E-10}, + tauOut: 4.2641207498271701E-010, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2066672404538628E+01, 0.2066672404119188E+01, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.7750244067025847E+00, 0.7789230411181270E+00, 0.3898634844569491E-02, 0.6398608757305904E-02, 0.1278402310262057E+01, 0.1275469579750218E+01, 0.3465878671879142E-02, 0.4345362379476143E-02, 0.1599126239756068E+01, 0.1615582554684006E+01, 0.2080167773382635E-01, 0.1936843737632438E-01, 0.1504268546848768E+01, 0.1490719033652799E+01, 0.5818924606767697E-02, 0.3324054047451484E-02, 0.8515715484031834E+00, 0.1218555949800348E+01, 0.3703084558710277E+00, 0.4065850919906259E+00, 0.1337929704521397E+01, 0.9797588692779520E+00, 0.4841425717359337E-01, 0.4227695780870786E-01, 0.8555583994741887E+00, 0.1121550468464483E+01, 0.3082690272254148E+00, 0.4059129037098644E+00, 0.1476800350035441E+01, 0.1117237466263607E+01, 0.4635002036444261E-01, 0.2416365074306882E-01, 0.5824492787618127E+00, 0.6542100865147574E+00, 0.9592445892242578E-01, 0.6795451513972497E-01, 0.4634535313311479E+00, 0.4373088256745602E+00, 0.4180980990954932E-01, 0.3901675330591518E-01, 0.4080949089880160E+00, 0.6065651658571838E+00, 0.2374870106014949E+00, 0.1019316116273065E+00, 0.2603433541742431E+00, 0.2212973925536000E+00, 0.6288565043307552E-01, 0.9326774535516916E-01, 0.3282133318859058E+00, 0.2349455861043456E+00, 0.2091574834858362E-13, 0.3796083394336032E-22, 0.4264122053484397E-09, 0.1303656847202082E-15, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + n0in: 15, + dmin: 1.3036568472020817E-016, + dmin1: 0.15841174212052453, + dmin2: 0.15841174212052453, + dn: 1.3036568472020817E-016, + dn1: 0.23494558610432464, + dn2: 0.15841174212052453, + tau: 4.2641207498271701E-010, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2066672404538628E+01, 0.2066672404119188E+01, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.7750244067025847E+00, 0.7789230411181270E+00, 0.3898634844569491E-02, 0.6398608757305904E-02, 0.1278402310262057E+01, 0.1275469579750218E+01, 0.3465878671879142E-02, 0.4345362379476143E-02, 0.1599126239756068E+01, 0.1615582554684006E+01, 0.2080167773382635E-01, 0.1936843737632438E-01, 0.1504268546848768E+01, 0.1490719033652799E+01, 0.5818924606767697E-02, 0.3324054047451484E-02, 0.8515715484031834E+00, 0.1218555949800348E+01, 0.3703084558710277E+00, 0.4065850919906259E+00, 0.1337929704521397E+01, 0.9797588692779520E+00, 0.4841425717359337E-01, 0.4227695780870786E-01, 0.8555583994741887E+00, 0.1121550468464483E+01, 0.3082690272254148E+00, 0.4059129037098644E+00, 0.1476800350035441E+01, 0.1117237466263607E+01, 0.4635002036444261E-01, 0.2416365074306882E-01, 0.5824492787618127E+00, 0.6542100865147574E+00, 0.9592445892242578E-01, 0.6795451513972497E-01, 0.4634535313311479E+00, 0.4373088256745602E+00, 0.4180980990954932E-01, 0.3901675330591518E-01, 0.4080949089880160E+00, 0.6065651658571838E+00, 0.2374870106014949E+00, 0.1019316116273065E+00, 0.2603433541742431E+00, 0.2212973925536000E+00, 0.6288565043307552E-01, 0.9326774535516916E-01, 0.3282133318859058E+00, 0.2349455861043456E+00, 0.2091574834858362E-13, 0.3796083394336032E-22, 0.4264122053484397E-09, 0.1303656847202082E-15, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.2112065329503869E+00}, + tauOut: 1.3036568471812905E-016, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2066672404121803E+01, 0.2066672404119188E+01, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.7853216498744473E+00, 0.7789230411181270E+00, 0.1039221422709001E-01, 0.6398608757305904E-02, 0.1269422727902604E+01, 0.1275469579750218E+01, 0.5530302475095172E-02, 0.4345362379476143E-02, 0.1629420689585235E+01, 0.1615582554684006E+01, 0.1771973219288664E-01, 0.1936843737632438E-01, 0.1476323355507364E+01, 0.1490719033652799E+01, 0.2743671176012720E-02, 0.3324054047451484E-02, 0.1622397370614960E+01, 0.1218555949800348E+01, 0.2455350071499520E+00, 0.4065850919906259E+00, 0.7765008199367077E+00, 0.9797588692779520E+00, 0.6106335063429082E-01, 0.4227695780870786E-01, 0.1466400021540057E+01, 0.1121550468464483E+01, 0.3092615230516922E+00, 0.4059129037098644E+00, 0.8321395939549830E+00, 0.1117237466263607E+01, 0.1899693772291602E-01, 0.2416365074306882E-01, 0.7031676639315663E+00, 0.6542100865147574E+00, 0.4226176876348708E-01, 0.6795451513972497E-01, 0.4340638102169883E+00, 0.4373088256745602E+00, 0.5452240634477346E-01, 0.3901675330591518E-01, 0.6539743711397168E+00, 0.6065651658571838E+00, 0.3449248298919955E-01, 0.1019316116273065E+00, 0.2800726549195695E+00, 0.2212973925536000E+00, 0.7823985923721809E-01, 0.9326774535516916E-01, 0.1567057268671274E+00, 0.2349455861043456E+00, 0.3158014839988858E-37, 0.3796083394336032E-22}, + i0: 1, + n0: 14, + pp: 0, + n0in: 15, + dmin: 2.0791168714198411E-027, + dmin1: 0.15670572686712736, + dmin2: 0.18680490956440032, + dn: 2.0791168714198411E-027, + dn1: 0.15670572686712736, + dn2: 0.18680490956440032, + tau: 1.3036568471812905E-016, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2066672404121803E+01, 0.2066672404119188E+01, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.7853216498744473E+00, 0.7789230411181270E+00, 0.1039221422709001E-01, 0.6398608757305904E-02, 0.1269422727902604E+01, 0.1275469579750218E+01, 0.5530302475095172E-02, 0.4345362379476143E-02, 0.1629420689585235E+01, 0.1615582554684006E+01, 0.1771973219288664E-01, 0.1936843737632438E-01, 0.1476323355507364E+01, 0.1490719033652799E+01, 0.2743671176012720E-02, 0.3324054047451484E-02, 0.1622397370614960E+01, 0.1218555949800348E+01, 0.2455350071499520E+00, 0.4065850919906259E+00, 0.7765008199367077E+00, 0.9797588692779520E+00, 0.6106335063429082E-01, 0.4227695780870786E-01, 0.1466400021540057E+01, 0.1121550468464483E+01, 0.3092615230516922E+00, 0.4059129037098644E+00, 0.8321395939549830E+00, 0.1117237466263607E+01, 0.1899693772291602E-01, 0.2416365074306882E-01, 0.7031676639315663E+00, 0.6542100865147574E+00, 0.4226176876348708E-01, 0.6795451513972497E-01, 0.4340638102169883E+00, 0.4373088256745602E+00, 0.5452240634477346E-01, 0.3901675330591518E-01, 0.6539743711397168E+00, 0.6065651658571838E+00, 0.3449248298919955E-01, 0.1019316116273065E+00, 0.2800726549195695E+00, 0.2212973925536000E+00, 0.7823985923721809E-01, 0.9326774535516916E-01, 0.1567057268671274E+00, 0.2349455861043456E+00, 0.3158014839988858E-37, 0.3796083394336032E-22}, + tauOut: 5.2226904068357879E-002, + ttypeOut: -8, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2066672404121803E+01, 0.2014445500054431E+01, 0.9855809897129084E-12, 0.3842238913414725E-12, 0.7853216498744473E+00, 0.7434869600327952E+00, 0.1039221422709001E-01, 0.1774357001838869E-01, 0.1269422727902604E+01, 0.1204982556290953E+01, 0.5530302475095172E-02, 0.7478273627729330E-02, 0.1629420689585235E+01, 0.1587435244082034E+01, 0.1771973219288664E-01, 0.1647944669694028E-01, 0.1476323355507364E+01, 0.1410360675918078E+01, 0.2743671176012720E-02, 0.3156160674217245E-02, 0.1622397370614960E+01, 0.1812549313022337E+01, 0.2455350071499520E+00, 0.1051878329628395E+00, 0.7765008199367077E+00, 0.6801494335398012E+00, 0.6106335063429082E-01, 0.1316523902981273E+00, 0.1466400021540057E+01, 0.1591782250225264E+01, 0.3092615230516922E+00, 0.1616733433116970E+00, 0.8321395939549830E+00, 0.6372362842978442E+00, 0.1899693772291602E-01, 0.2096244776016672E-01, 0.7031676639315663E+00, 0.6722400808665288E+00, 0.4226176876348708E-01, 0.2728832287468248E-01, 0.4340638102169883E+00, 0.4090709896187213E+00, 0.5452240634477346E-01, 0.8716398206477828E-01, 0.6539743711397168E+00, 0.5490759679957803E+00, 0.3449248298919955E-01, 0.1759392479116377E-01, 0.2800726549195695E+00, 0.2884916852972659E+00, 0.7823985923721809E-01, 0.4249908970207047E-01, 0.1567057268671274E+00, 0.6197973309669901E-01, 0.3158014839988858E-37, 0.3842238913414725E-12, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + n0in: 14, + dmin: 6.1979733096699005E-002, + dmin1: 0.21025182606004778, + dmin2: 0.35454858327394784, + dn: 6.1979733096699005E-002, + dn1: 0.21025182606004778, + dn2: 0.51458348500658069, + tau: 5.2226904068357879E-002, + ttype: -8, + g: 0.0000000000000000, + zOut: []float64{0.2066672404121803E+01, 0.2014445500054431E+01, 0.9855809897129084E-12, 0.3842238913414725E-12, 0.7853216498744473E+00, 0.7434869600327952E+00, 0.1039221422709001E-01, 0.1774357001838869E-01, 0.1269422727902604E+01, 0.1204982556290953E+01, 0.5530302475095172E-02, 0.7478273627729330E-02, 0.1629420689585235E+01, 0.1587435244082034E+01, 0.1771973219288664E-01, 0.1647944669694028E-01, 0.1476323355507364E+01, 0.1410360675918078E+01, 0.2743671176012720E-02, 0.3156160674217245E-02, 0.1622397370614960E+01, 0.1812549313022337E+01, 0.2455350071499520E+00, 0.1051878329628395E+00, 0.7765008199367077E+00, 0.6801494335398012E+00, 0.6106335063429082E-01, 0.1316523902981273E+00, 0.1466400021540057E+01, 0.1591782250225264E+01, 0.3092615230516922E+00, 0.1616733433116970E+00, 0.8321395939549830E+00, 0.6372362842978442E+00, 0.1899693772291602E-01, 0.2096244776016672E-01, 0.7031676639315663E+00, 0.6722400808665288E+00, 0.4226176876348708E-01, 0.2728832287468248E-01, 0.4340638102169883E+00, 0.4090709896187213E+00, 0.5452240634477346E-01, 0.8716398206477828E-01, 0.6539743711397168E+00, 0.5490759679957803E+00, 0.3449248298919955E-01, 0.1759392479116377E-01, 0.2800726549195695E+00, 0.2884916852972659E+00, 0.7823985923721809E-01, 0.4249908970207047E-01, 0.1567057268671274E+00, 0.6197973309669901E-01, 0.3158014839988858E-37, 0.3842238913414725E-12, 0.4143051093784424E+00}, + tauOut: 4.3992746597899146E-002, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1970452753456916E+01, 0.2014445500054431E+01, 0.1449745254963753E-12, 0.3842238913414725E-12, 0.7172377834531399E+00, 0.7434869600327952E+00, 0.2980976860358389E-01, 0.1774357001838869E-01, 0.1138658314717199E+01, 0.1204982556290953E+01, 0.1042566937606312E-01, 0.7478273627729330E-02, 0.1549496274805013E+01, 0.1587435244082034E+01, 0.1499968987352189E-01, 0.1647944669694028E-01, 0.1354524400120875E+01, 0.1410360675918078E+01, 0.4223398900256122E-02, 0.3156160674217245E-02, 0.1869521000487022E+01, 0.1812549313022337E+01, 0.3826832915293116E-01, 0.1051878329628395E+00, 0.7295407480870981E+00, 0.6801494335398012E+00, 0.2872518617030954E+00, 0.1316523902981273E+00, 0.1422210985235967E+01, 0.1591782250225264E+01, 0.7243940711431240E-01, 0.1616733433116970E+00, 0.5417665783457993E+00, 0.6372362842978442E+00, 0.2601082853889214E-01, 0.2096244776016672E-01, 0.6295248286044199E+00, 0.6722400808665288E+00, 0.1773220171177086E-01, 0.2728832287468248E-01, 0.4345100233738295E+00, 0.4090709896187213E+00, 0.1101462457758059E+00, 0.8716398206477828E-01, 0.4125309004132391E+00, 0.5490759679957803E+00, 0.1230380805149813E-01, 0.1759392479116377E-01, 0.2746942203499391E+00, 0.2884916852972659E+00, 0.9589143278047064E-02, 0.4249908970207047E-01, 0.8397843220752800E-02, 0.6197973309669901E-01, 0.1449745254963753E-12, 0.3842238913414725E-12}, + i0: 1, + n0: 14, + pp: 0, + n0in: 14, + dmin: 8.3978432207528000E-003, + dmin1: 0.23219513064786862, + dmin2: 0.34734604130905122, + dn: 8.3978432207528000E-003, + dn1: 0.23219513064786862, + dn2: 0.39493697562207530, + tau: 4.3992746597899146E-002, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1970452753456916E+01, 0.2014445500054431E+01, 0.1449745254963753E-12, 0.3842238913414725E-12, 0.7172377834531399E+00, 0.7434869600327952E+00, 0.2980976860358389E-01, 0.1774357001838869E-01, 0.1138658314717199E+01, 0.1204982556290953E+01, 0.1042566937606312E-01, 0.7478273627729330E-02, 0.1549496274805013E+01, 0.1587435244082034E+01, 0.1499968987352189E-01, 0.1647944669694028E-01, 0.1354524400120875E+01, 0.1410360675918078E+01, 0.4223398900256122E-02, 0.3156160674217245E-02, 0.1869521000487022E+01, 0.1812549313022337E+01, 0.3826832915293116E-01, 0.1051878329628395E+00, 0.7295407480870981E+00, 0.6801494335398012E+00, 0.2872518617030954E+00, 0.1316523902981273E+00, 0.1422210985235967E+01, 0.1591782250225264E+01, 0.7243940711431240E-01, 0.1616733433116970E+00, 0.5417665783457993E+00, 0.6372362842978442E+00, 0.2601082853889214E-01, 0.2096244776016672E-01, 0.6295248286044199E+00, 0.6722400808665288E+00, 0.1773220171177086E-01, 0.2728832287468248E-01, 0.4345100233738295E+00, 0.4090709896187213E+00, 0.1101462457758059E+00, 0.8716398206477828E-01, 0.4125309004132391E+00, 0.5490759679957803E+00, 0.1230380805149813E-01, 0.1759392479116377E-01, 0.2746942203499391E+00, 0.2884916852972659E+00, 0.9589143278047064E-02, 0.4249908970207047E-01, 0.8397843220752800E-02, 0.6197973309669901E-01, 0.1449745254963753E-12, 0.3842238913414725E-12}, + tauOut: 8.0121275381568099E-003, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1970452753456916E+01, 0.1962440625918904E+01, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.7172377834531399E+00, 0.7390354245185139E+00, 0.2980976860358389E-01, 0.4592897681783073E-01, 0.1138658314717199E+01, 0.1095142879737275E+01, 0.1042566937606312E-01, 0.1475107600976594E-01, 0.1549496274805013E+01, 0.1541732761130612E+01, 0.1499968987352189E-01, 0.1317831886314191E-01, 0.1354524400120875E+01, 0.1337557352619832E+01, 0.4223398900256122E-02, 0.5903098601340335E-02, 0.1869521000487022E+01, 0.1893874103500456E+01, 0.3826832915293116E-01, 0.1474137347708128E-01, 0.7295407480870981E+00, 0.9940391087749554E+00, 0.2872518617030954E+00, 0.4109825756725979E+00, 0.1422210985235967E+01, 0.1075655689139524E+01, 0.7243940711431240E-01, 0.3648495529374628E-01, 0.5417665783457993E+00, 0.5232803240527883E+00, 0.2601082853889214E-01, 0.3129195122603765E-01, 0.6295248286044199E+00, 0.6079529515519964E+00, 0.1773220171177086E-01, 0.1267338099203561E-01, 0.4345100233738295E+00, 0.5239707606194429E+00, 0.1101462457758059E+00, 0.8671997249104711E-01, 0.4125309004132391E+00, 0.3301026084355332E+00, 0.1230380805149813E-01, 0.1023858907404432E-01, 0.2746942203499391E+00, 0.2660326470157850E+00, 0.9589143278047064E-02, 0.3027001489241909E-03, 0.8397843220752800E-02, 0.8301553367179998E-04, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + n0in: 14, + dmin: 8.3015533671799979E-005, + dmin1: 0.25644350373773794, + dmin2: 0.31779880038403513, + dn: 8.3015533671799979E-005, + dn1: 0.25644350373773794, + dn2: 0.31779880038403513, + tau: 8.0121275381568099E-003, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1970452753456916E+01, 0.1962440625918904E+01, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.7172377834531399E+00, 0.7390354245185139E+00, 0.2980976860358389E-01, 0.4592897681783073E-01, 0.1138658314717199E+01, 0.1095142879737275E+01, 0.1042566937606312E-01, 0.1475107600976594E-01, 0.1549496274805013E+01, 0.1541732761130612E+01, 0.1499968987352189E-01, 0.1317831886314191E-01, 0.1354524400120875E+01, 0.1337557352619832E+01, 0.4223398900256122E-02, 0.5903098601340335E-02, 0.1869521000487022E+01, 0.1893874103500456E+01, 0.3826832915293116E-01, 0.1474137347708128E-01, 0.7295407480870981E+00, 0.9940391087749554E+00, 0.2872518617030954E+00, 0.4109825756725979E+00, 0.1422210985235967E+01, 0.1075655689139524E+01, 0.7243940711431240E-01, 0.3648495529374628E-01, 0.5417665783457993E+00, 0.5232803240527883E+00, 0.2601082853889214E-01, 0.3129195122603765E-01, 0.6295248286044199E+00, 0.6079529515519964E+00, 0.1773220171177086E-01, 0.1267338099203561E-01, 0.4345100233738295E+00, 0.5239707606194429E+00, 0.1101462457758059E+00, 0.8671997249104711E-01, 0.4125309004132391E+00, 0.3301026084355332E+00, 0.1230380805149813E-01, 0.1023858907404432E-01, 0.2746942203499391E+00, 0.2660326470157850E+00, 0.9589143278047064E-02, 0.3027001489241909E-03, 0.8397843220752800E-02, 0.8301553367179998E-04, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.4143051093784424E+00}, + tauOut: 8.2898056486573887E-005, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1962357727862470E+01, 0.1962440625918904E+01, 0.1995470932711637E-13, 0.5298565773193886E-13, 0.7848815032798381E+00, 0.7390354245185139E+00, 0.6408456783027588E-01, 0.4592897681783073E-01, 0.1045726489860278E+01, 0.1095142879737275E+01, 0.2174776805091989E-01, 0.1475107600976594E-01, 0.1533080413886347E+01, 0.1541732761130612E+01, 0.1149760777771624E-01, 0.1317831886314191E-01, 0.1331879945386970E+01, 0.1337557352619832E+01, 0.8393943921304423E-02, 0.5903098601340335E-02, 0.1900138634999746E+01, 0.1893874103500456E+01, 0.7711806645770664E-02, 0.1474137347708128E-01, 0.1397226979745296E+01, 0.9940391087749554E+00, 0.3163950825942626E+00, 0.4109825756725979E+00, 0.7956626637825215E+00, 0.1075655689139524E+01, 0.2399491656225486E-01, 0.3648495529374628E-01, 0.5304944606600845E+00, 0.5232803240527883E+00, 0.3586094769777509E-01, 0.3129195122603765E-01, 0.5846824867897703E+00, 0.6079529515519964E+00, 0.1135741402906866E-01, 0.1267338099203561E-01, 0.5992504210249349E+00, 0.5239707606194429E+00, 0.4777049480214081E-01, 0.8671997249104711E-01, 0.2924878046509502E+00, 0.3301026084355332E+00, 0.9312521444528056E-02, 0.1023858907404432E-01, 0.2569399276636945E+00, 0.2660326470157850E+00, 0.9780034825247492E-07, 0.3027001489241909E-03, 0.1967683697362142E-07, 0.8301553367179998E-04, 0.1995470932711637E-13, 0.5298565773193886E-13}, + i0: 1, + n0: 14, + pp: 0, + n0in: 14, + dmin: 1.9676836973621424E-008, + dmin1: 0.25663722751477031, + dmin2: 0.28224921557690585, + dn: 1.9676836973621424E-008, + dn1: 0.25663722751477031, + dn2: 0.28224921557690585, + tau: 8.2898056486573887E-005, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1962357727862470E+01, 0.1962440625918904E+01, 0.1995470932711637E-13, 0.5298565773193886E-13, 0.7848815032798381E+00, 0.7390354245185139E+00, 0.6408456783027588E-01, 0.4592897681783073E-01, 0.1045726489860278E+01, 0.1095142879737275E+01, 0.2174776805091989E-01, 0.1475107600976594E-01, 0.1533080413886347E+01, 0.1541732761130612E+01, 0.1149760777771624E-01, 0.1317831886314191E-01, 0.1331879945386970E+01, 0.1337557352619832E+01, 0.8393943921304423E-02, 0.5903098601340335E-02, 0.1900138634999746E+01, 0.1893874103500456E+01, 0.7711806645770664E-02, 0.1474137347708128E-01, 0.1397226979745296E+01, 0.9940391087749554E+00, 0.3163950825942626E+00, 0.4109825756725979E+00, 0.7956626637825215E+00, 0.1075655689139524E+01, 0.2399491656225486E-01, 0.3648495529374628E-01, 0.5304944606600845E+00, 0.5232803240527883E+00, 0.3586094769777509E-01, 0.3129195122603765E-01, 0.5846824867897703E+00, 0.6079529515519964E+00, 0.1135741402906866E-01, 0.1267338099203561E-01, 0.5992504210249349E+00, 0.5239707606194429E+00, 0.4777049480214081E-01, 0.8671997249104711E-01, 0.2924878046509502E+00, 0.3301026084355332E+00, 0.9312521444528056E-02, 0.1023858907404432E-01, 0.2569399276636945E+00, 0.2660326470157850E+00, 0.9780034825247492E-07, 0.3027001489241909E-03, 0.1967683697362142E-07, 0.8301553367179998E-04, 0.1995470932711637E-13, 0.5298565773193886E-13}, + tauOut: 1.9676827722764296E-008, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1962357727862470E+01, 0.1962357708185662E+01, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.7848815032798381E+00, 0.8489660514332782E+00, 0.6408456783027588E-01, 0.7893711422056097E-01, 0.1045726489860278E+01, 0.9885371240138099E+00, 0.2174776805091989E-01, 0.3372769361380378E-01, 0.1533080413886347E+01, 0.1510850308373431E+01, 0.1149760777771624E-01, 0.1013563894066502E-01, 0.1331879945386970E+01, 0.1330138230690781E+01, 0.8393943921304423E-02, 0.1199097716077874E-01, 0.1900138634999746E+01, 0.1895859444807910E+01, 0.7711806645770664E-02, 0.5683514322519618E-02, 0.1397226979745296E+01, 0.1707938528340212E+01, 0.3163950825942626E+00, 0.1473962616612956E+00, 0.7956626637825215E+00, 0.6722612990066530E+00, 0.2399491656225486E-01, 0.1893485515094503E-01, 0.5304944606600845E+00, 0.5474205335300870E+00, 0.3586094769777509E-01, 0.3830193935796279E-01, 0.5846824867897703E+00, 0.5577379417840483E+00, 0.1135741402906866E-01, 0.1220274725600271E-01, 0.5992504210249349E+00, 0.6348181488942451E+00, 0.4777049480214081E-01, 0.2200990500366971E-01, 0.2924878046509502E+00, 0.2797904014149808E+00, 0.9312521444528056E-02, 0.8551968095484232E-02, 0.2569399276636945E+00, 0.2483880376917308E+00, 0.9780034825247492E-07, 0.7747561140265878E-14, 0.1967683697362142E-07, 0.1503295986001297E-14, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + n0in: 14, + dmin: 1.5032959860012969E-015, + dmin1: 0.24838793989138258, + dmin2: 0.27047787997045275, + dn: 1.5032959860012969E-015, + dn1: 0.24838793989138258, + dn2: 0.27047787997045275, + tau: 1.9676827722764296E-008, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1962357727862470E+01, 0.1962357708185662E+01, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.7848815032798381E+00, 0.8489660514332782E+00, 0.6408456783027588E-01, 0.7893711422056097E-01, 0.1045726489860278E+01, 0.9885371240138099E+00, 0.2174776805091989E-01, 0.3372769361380378E-01, 0.1533080413886347E+01, 0.1510850308373431E+01, 0.1149760777771624E-01, 0.1013563894066502E-01, 0.1331879945386970E+01, 0.1330138230690781E+01, 0.8393943921304423E-02, 0.1199097716077874E-01, 0.1900138634999746E+01, 0.1895859444807910E+01, 0.7711806645770664E-02, 0.5683514322519618E-02, 0.1397226979745296E+01, 0.1707938528340212E+01, 0.3163950825942626E+00, 0.1473962616612956E+00, 0.7956626637825215E+00, 0.6722612990066530E+00, 0.2399491656225486E-01, 0.1893485515094503E-01, 0.5304944606600845E+00, 0.5474205335300870E+00, 0.3586094769777509E-01, 0.3830193935796279E-01, 0.5846824867897703E+00, 0.5577379417840483E+00, 0.1135741402906866E-01, 0.1220274725600271E-01, 0.5992504210249349E+00, 0.6348181488942451E+00, 0.4777049480214081E-01, 0.2200990500366971E-01, 0.2924878046509502E+00, 0.2797904014149808E+00, 0.9312521444528056E-02, 0.8551968095484232E-02, 0.2569399276636945E+00, 0.2483880376917308E+00, 0.9780034825247492E-07, 0.7747561140265878E-14, 0.1967683697362142E-07, 0.1503295986001297E-14, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.4143051093784424E+00}, + tauOut: 1.5032959860012393E-015, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1962357708185669E+01, 0.1962357708185662E+01, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.9279031656538340E+00, 0.8489660514332782E+00, 0.8409527066820451E-01, 0.7893711422056097E-01, 0.9381695469594078E+00, 0.9885371240138099E+00, 0.5431587122209677E-01, 0.3372769361380378E-01, 0.1466670076091998E+01, 0.1510850308373431E+01, 0.9192115573380727E-02, 0.1013563894066502E-01, 0.1332937092278178E+01, 0.1330138230690781E+01, 0.1705497388769041E-01, 0.1199097716077874E-01, 0.1884487985242738E+01, 0.1895859444807910E+01, 0.5151050664063701E-02, 0.5683514322519618E-02, 0.1850183739337442E+01, 0.1707938528340212E+01, 0.5355619565040129E-01, 0.1473962616612956E+00, 0.6376399585071952E+00, 0.6722612990066530E+00, 0.1625577000116482E-01, 0.1893485515094503E-01, 0.5694667028868834E+00, 0.5474205335300870E+00, 0.3751307094084999E-01, 0.3830193935796279E-01, 0.5324276180991995E+00, 0.5577379417840483E+00, 0.1454944326918194E-01, 0.1220274725600271E-01, 0.6422786106287314E+00, 0.6348181488942451E+00, 0.9587988848101409E-02, 0.2200990500366971E-01, 0.2787543806623621E+00, 0.2797904014149808E+00, 0.7620352256320365E-02, 0.8551968095484232E-02, 0.2407676854354167E+00, 0.2483880376917308E+00, 0.4837392336267432E-28, 0.7747561140265878E-14}, + i0: 1, + n0: 13, + pp: 0, + n0in: 14, + dmin: 9.2691156363468887E-030, + dmin1: 0.24076768543540897, + dmin2: 0.27020241256687788, + dn: 9.2691156363468887E-030, + dn1: 0.24076768543540897, + dn2: 0.27020241256687788, + tau: 1.5032959860012393E-015, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1962357708185669E+01, 0.1962357708185662E+01, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.9279031656538340E+00, 0.8489660514332782E+00, 0.8409527066820451E-01, 0.7893711422056097E-01, 0.9381695469594078E+00, 0.9885371240138099E+00, 0.5431587122209677E-01, 0.3372769361380378E-01, 0.1466670076091998E+01, 0.1510850308373431E+01, 0.9192115573380727E-02, 0.1013563894066502E-01, 0.1332937092278178E+01, 0.1330138230690781E+01, 0.1705497388769041E-01, 0.1199097716077874E-01, 0.1884487985242738E+01, 0.1895859444807910E+01, 0.5151050664063701E-02, 0.5683514322519618E-02, 0.1850183739337442E+01, 0.1707938528340212E+01, 0.5355619565040129E-01, 0.1473962616612956E+00, 0.6376399585071952E+00, 0.6722612990066530E+00, 0.1625577000116482E-01, 0.1893485515094503E-01, 0.5694667028868834E+00, 0.5474205335300870E+00, 0.3751307094084999E-01, 0.3830193935796279E-01, 0.5324276180991995E+00, 0.5577379417840483E+00, 0.1454944326918194E-01, 0.1220274725600271E-01, 0.6422786106287314E+00, 0.6348181488942451E+00, 0.9587988848101409E-02, 0.2200990500366971E-01, 0.2787543806623621E+00, 0.2797904014149808E+00, 0.7620352256320365E-02, 0.8551968095484232E-02, 0.2407676854354167E+00, 0.2483880376917308E+00, 0.4837392336267432E-28, 0.7747561140265878E-14}, + tauOut: 0.19361025134591583, + ttypeOut: -8, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1962357708185669E+01, 0.1768747456839757E+01, 0.3452895805257589E-14, 0.1811424766142649E-14, 0.9279031656538340E+00, 0.8183881849761209E+00, 0.8409527066820451E-01, 0.9640366690596863E-01, 0.9381695469594078E+00, 0.7024714999296202E+00, 0.5431587122209677E-01, 0.1134045480653624E+00, 0.1466670076091998E+01, 0.1168847392254101E+01, 0.9192115573380727E-02, 0.1048255904531585E-01, 0.1332937092278178E+01, 0.1145899255774637E+01, 0.1705497388769041E-01, 0.2804774784346500E-01, 0.1884487985242738E+01, 0.1667981036717421E+01, 0.5151050664063701E-02, 0.5713728135608638E-02, 0.1850183739337442E+01, 0.1704415955506319E+01, 0.5355619565040129E-01, 0.2003593680404179E-01, 0.6376399585071952E+00, 0.4402495403584025E+00, 0.1625577000116482E-01, 0.2102698332839761E-01, 0.5694667028868834E+00, 0.3923425391534199E+00, 0.3751307094084999E-01, 0.5090703407211448E-01, 0.5324276180991995E+00, 0.3024597759503511E+00, 0.1454944326918194E-01, 0.3089599659653809E-01, 0.6422786106287314E+00, 0.4273603515343789E+00, 0.9587988848101409E-02, 0.6253958476854957E-02, 0.2787543806623621E+00, 0.8651052309591171E-01, 0.7620352256320365E-02, 0.2120822426333837E-01, 0.2407676854354167E+00, 0.2594920982616250E-01, 0.4837392336267432E-28, 0.1811424766142649E-14, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + n0in: 13, + dmin: 2.5949209826162500E-002, + dmin1: 7.8890170839591350E-002, + dmin2: 0.28791033268116917, + dn: 2.5949209826162500E-002, + dn1: 7.8890170839591350E-002, + dn2: 0.41777236268627749, + tau: 0.19361025134591583, + ttype: -8, + g: 0.0000000000000000, + zOut: []float64{0.1962357708185669E+01, 0.1768747456839757E+01, 0.3452895805257589E-14, 0.1811424766142649E-14, 0.9279031656538340E+00, 0.8183881849761209E+00, 0.8409527066820451E-01, 0.9640366690596863E-01, 0.9381695469594078E+00, 0.7024714999296202E+00, 0.5431587122209677E-01, 0.1134045480653624E+00, 0.1466670076091998E+01, 0.1168847392254101E+01, 0.9192115573380727E-02, 0.1048255904531585E-01, 0.1332937092278178E+01, 0.1145899255774637E+01, 0.1705497388769041E-01, 0.2804774784346500E-01, 0.1884487985242738E+01, 0.1667981036717421E+01, 0.5151050664063701E-02, 0.5713728135608638E-02, 0.1850183739337442E+01, 0.1704415955506319E+01, 0.5355619565040129E-01, 0.2003593680404179E-01, 0.6376399585071952E+00, 0.4402495403584025E+00, 0.1625577000116482E-01, 0.2102698332839761E-01, 0.5694667028868834E+00, 0.3923425391534199E+00, 0.3751307094084999E-01, 0.5090703407211448E-01, 0.5324276180991995E+00, 0.3024597759503511E+00, 0.1454944326918194E-01, 0.3089599659653809E-01, 0.6422786106287314E+00, 0.4273603515343789E+00, 0.9587988848101409E-02, 0.6253958476854957E-02, 0.2787543806623621E+00, 0.8651052309591171E-01, 0.7620352256320365E-02, 0.2120822426333837E-01, 0.2407676854354167E+00, 0.2594920982616250E-01, 0.4837392336267432E-28, 0.1811424766142649E-14, 0.5186198053161721E+00}, + tauOut: 1.8780556192507153E-002, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749966900647251E+01, 0.1768747456839757E+01, 0.8471295234418270E-15, 0.1811424766142649E-14, 0.8960112956895816E+00, 0.8183881849761209E+00, 0.7558032897122403E-01, 0.9640366690596863E-01, 0.7215151628312513E+00, 0.7024714999296202E+00, 0.1837142406762631E+00, 0.1134045480653624E+00, 0.9768351544306461E+00, 0.1168847392254101E+01, 0.1229681032071614E-01, 0.1048255904531585E-01, 0.1142869637104878E+01, 0.1145899255774637E+01, 0.4093477506677201E-01, 0.2804774784346500E-01, 0.1613979433593750E+01, 0.1667981036717421E+01, 0.6033886923870183E-02, 0.5713728135608638E-02, 0.1699637449193983E+01, 0.1704415955506319E+01, 0.5189819730562233E-02, 0.2003593680404179E-01, 0.4373061477637308E+00, 0.4402495403584025E+00, 0.1886499897608887E-01, 0.2102698332839761E-01, 0.4056040180569384E+00, 0.3923425391534199E+00, 0.3796148320598534E-01, 0.5090703407211448E-01, 0.2766137331483968E+00, 0.3024597759503511E+00, 0.4773343613933298E-01, 0.3089599659653809E-01, 0.3671003176793937E+00, 0.4273603515343789E+00, 0.1473802100398464E-02, 0.6253958476854957E-02, 0.8746438906634448E-01, 0.8651052309591171E-01, 0.6292122626412339E-02, 0.2120822426333837E-01, 0.8765310072430081E-03, 0.2594920982616250E-01, 0.8471295234418270E-15, 0.1811424766142649E-14}, + i0: 1, + n0: 13, + pp: 0, + n0in: 13, + dmin: 8.7653100724300811E-004, + dmin1: 6.6256164803006098E-002, + dmin2: 0.24571773655185866, + dn: 8.7653100724300811E-004, + dn1: 6.6256164803006098E-002, + dn2: 0.36084635920253871, + tau: 1.8780556192507153E-002, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1749966900647251E+01, 0.1768747456839757E+01, 0.8471295234418270E-15, 0.1811424766142649E-14, 0.8960112956895816E+00, 0.8183881849761209E+00, 0.7558032897122403E-01, 0.9640366690596863E-01, 0.7215151628312513E+00, 0.7024714999296202E+00, 0.1837142406762631E+00, 0.1134045480653624E+00, 0.9768351544306461E+00, 0.1168847392254101E+01, 0.1229681032071614E-01, 0.1048255904531585E-01, 0.1142869637104878E+01, 0.1145899255774637E+01, 0.4093477506677201E-01, 0.2804774784346500E-01, 0.1613979433593750E+01, 0.1667981036717421E+01, 0.6033886923870183E-02, 0.5713728135608638E-02, 0.1699637449193983E+01, 0.1704415955506319E+01, 0.5189819730562233E-02, 0.2003593680404179E-01, 0.4373061477637308E+00, 0.4402495403584025E+00, 0.1886499897608887E-01, 0.2102698332839761E-01, 0.4056040180569384E+00, 0.3923425391534199E+00, 0.3796148320598534E-01, 0.5090703407211448E-01, 0.2766137331483968E+00, 0.3024597759503511E+00, 0.4773343613933298E-01, 0.3089599659653809E-01, 0.3671003176793937E+00, 0.4273603515343789E+00, 0.1473802100398464E-02, 0.6253958476854957E-02, 0.8746438906634448E-01, 0.8651052309591171E-01, 0.6292122626412339E-02, 0.2120822426333837E-01, 0.8765310072430081E-03, 0.2594920982616250E-01, 0.8471295234418270E-15, 0.1811424766142649E-14}, + tauOut: 8.1622622999092049E-004, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749966900647251E+01, 0.1749150674417261E+01, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.8960112956895816E+00, 0.9707753984308143E+00, 0.7558032897122403E-01, 0.5617401661873561E-01, 0.7215151628312513E+00, 0.8482391606587878E+00, 0.1837142406762631E+00, 0.2115659556707206E+00, 0.9768351544306461E+00, 0.7767497828506508E+00, 0.1229681032071614E-01, 0.1809289356632693E-01, 0.1142869637104878E+01, 0.1164895292375332E+01, 0.4093477506677201E-01, 0.5671572845129930E-01, 0.1613979433593750E+01, 0.1562481365836330E+01, 0.6033886923870183E-02, 0.6563547191183529E-02, 0.1699637449193983E+01, 0.1697447495503371E+01, 0.5189819730562233E-02, 0.1337031089310571E-02, 0.4373061477637308E+00, 0.4540178894205181E+00, 0.1886499897608887E-01, 0.1685334336738995E-01, 0.4056040180569384E+00, 0.4258959316655428E+00, 0.3796148320598534E-01, 0.2465547755855056E-01, 0.2766137331483968E+00, 0.2988754654991882E+00, 0.4773343613933298E-01, 0.5862963539483231E-01, 0.3671003176793937E+00, 0.3091282581549689E+00, 0.1473802100398464E-02, 0.4169958485368410E-03, 0.8746438906634448E-01, 0.9252328961422907E-01, 0.6292122626412339E-02, 0.5960921413863723E-04, 0.8765310072430081E-03, 0.6955631134505013E-06, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + n0in: 13, + dmin: 6.9556311345050133E-007, + dmin1: 8.6231166987816729E-002, + dmin2: 0.25114202935985525, + dn: 6.9556311345050133E-007, + dn1: 8.6231166987816729E-002, + dn2: 0.30765445605457048, + tau: 8.1622622999092049E-004, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1749966900647251E+01, 0.1749150674417261E+01, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.8960112956895816E+00, 0.9707753984308143E+00, 0.7558032897122403E-01, 0.5617401661873561E-01, 0.7215151628312513E+00, 0.8482391606587878E+00, 0.1837142406762631E+00, 0.2115659556707206E+00, 0.9768351544306461E+00, 0.7767497828506508E+00, 0.1229681032071614E-01, 0.1809289356632693E-01, 0.1142869637104878E+01, 0.1164895292375332E+01, 0.4093477506677201E-01, 0.5671572845129930E-01, 0.1613979433593750E+01, 0.1562481365836330E+01, 0.6033886923870183E-02, 0.6563547191183529E-02, 0.1699637449193983E+01, 0.1697447495503371E+01, 0.5189819730562233E-02, 0.1337031089310571E-02, 0.4373061477637308E+00, 0.4540178894205181E+00, 0.1886499897608887E-01, 0.1685334336738995E-01, 0.4056040180569384E+00, 0.4258959316655428E+00, 0.3796148320598534E-01, 0.2465547755855056E-01, 0.2766137331483968E+00, 0.2988754654991882E+00, 0.4773343613933298E-01, 0.5862963539483231E-01, 0.3671003176793937E+00, 0.3091282581549689E+00, 0.1473802100398464E-02, 0.4169958485368410E-03, 0.8746438906634448E-01, 0.9252328961422907E-01, 0.6292122626412339E-02, 0.5960921413863723E-04, 0.8765310072430081E-03, 0.6955631134505013E-06, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.5186198053161721E+00}, + tauOut: 6.9511331676175615E-007, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749149979303945E+01, 0.1749150674417261E+01, 0.2408395422307052E-15, 0.4339463906783712E-15, 0.1026948719936233E+01, 0.9707753984308143E+00, 0.4639861736277134E-01, 0.5617401661873561E-01, 0.1013405803853420E+01, 0.8482391606587878E+00, 0.1621599259654447E+00, 0.2115659556707206E+00, 0.6326820553382161E+00, 0.7767497828506508E+00, 0.3331266686486833E-01, 0.1809289356632693E-01, 0.1188297658848447E+01, 0.1164895292375332E+01, 0.7457497555020480E-01, 0.5671572845129930E-01, 0.1494469242363992E+01, 0.1562481365836330E+01, 0.7455005714048079E-02, 0.6563547191183529E-02, 0.1691328825765317E+01, 0.1697447495503371E+01, 0.3589107121045615E-03, 0.1337031089310571E-02, 0.4705116269624868E+00, 0.4540178894205181E+00, 0.1525524548983380E-01, 0.1685334336738995E-01, 0.4352954686209429E+00, 0.4258959316655428E+00, 0.1692854133253905E-01, 0.2465547755855056E-01, 0.3405758644481647E+00, 0.2988754654991882E+00, 0.5321597610926388E-01, 0.5862963539483231E-01, 0.2563285827809251E+00, 0.3091282581549689E+00, 0.1505170716567330E-03, 0.4169958485368410E-03, 0.9243168664339420E-01, 0.9252328961422907E-01, 0.4485687980202113E-09, 0.5960921413863723E-04, 0.1227890724922389E-11, 0.6955631134505013E-06, 0.2408395422307052E-15, 0.4339463906783712E-15}, + i0: 1, + n0: 13, + pp: 0, + n0in: 13, + dmin: 1.2278907249223888E-012, + dmin1: 9.2372077429255559E-002, + dmin2: 0.25591158693238830, + dn: 1.2278907249223888E-012, + dn1: 9.2372077429255559E-002, + dn2: 0.25591158693238830, + tau: 6.9511331676175615E-007, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1749149979303945E+01, 0.1749150674417261E+01, 0.2408395422307052E-15, 0.4339463906783712E-15, 0.1026948719936233E+01, 0.9707753984308143E+00, 0.4639861736277134E-01, 0.5617401661873561E-01, 0.1013405803853420E+01, 0.8482391606587878E+00, 0.1621599259654447E+00, 0.2115659556707206E+00, 0.6326820553382161E+00, 0.7767497828506508E+00, 0.3331266686486833E-01, 0.1809289356632693E-01, 0.1188297658848447E+01, 0.1164895292375332E+01, 0.7457497555020480E-01, 0.5671572845129930E-01, 0.1494469242363992E+01, 0.1562481365836330E+01, 0.7455005714048079E-02, 0.6563547191183529E-02, 0.1691328825765317E+01, 0.1697447495503371E+01, 0.3589107121045615E-03, 0.1337031089310571E-02, 0.4705116269624868E+00, 0.4540178894205181E+00, 0.1525524548983380E-01, 0.1685334336738995E-01, 0.4352954686209429E+00, 0.4258959316655428E+00, 0.1692854133253905E-01, 0.2465547755855056E-01, 0.3405758644481647E+00, 0.2988754654991882E+00, 0.5321597610926388E-01, 0.5862963539483231E-01, 0.2563285827809251E+00, 0.3091282581549689E+00, 0.1505170716567330E-03, 0.4169958485368410E-03, 0.9243168664339420E-01, 0.9252328961422907E-01, 0.4485687980202113E-09, 0.5960921413863723E-04, 0.1227890724922389E-11, 0.6955631134505013E-06, 0.2408395422307052E-15, 0.4339463906783712E-15}, + tauOut: 1.2278907189544363E-012, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749149979303945E+01, 0.1749149979302717E+01, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.1026948719936233E+01, 0.1073347337297776E+01, 0.4639861736277134E-01, 0.4380746706334982E-01, 0.1013405803853420E+01, 0.1131758262754287E+01, 0.1621599259654447E+00, 0.9065158049178278E-01, 0.6326820553382161E+00, 0.5753431417100738E+00, 0.3331266686486833E-01, 0.6880305191066147E-01, 0.1188297658848447E+01, 0.1194069582486762E+01, 0.7457497555020480E-01, 0.9333627524262254E-01, 0.1494469242363992E+01, 0.1408587972834190E+01, 0.7455005714048079E-02, 0.8951422490882578E-02, 0.1691328825765317E+01, 0.1682736313985311E+01, 0.3589107121045615E-03, 0.1003553923945662E-03, 0.4705116269624868E+00, 0.4856665170586981E+00, 0.1525524548983380E-01, 0.1367304312976171E-01, 0.4352954686209429E+00, 0.4385509668224923E+00, 0.1692854133253905E-01, 0.1314659648329904E-01, 0.3405758644481647E+00, 0.3806452440729016E+00, 0.5321597610926388E-01, 0.3583592846566260E-01, 0.2563285827809251E+00, 0.2206431713856914E+00, 0.1505170716567330E-03, 0.6305450884558253E-04, 0.9243168664339420E-01, 0.9236863258188953E-01, 0.4485687980202113E-09, 0.5962992535266723E-20, 0.1227890724922389E-11, 0.4959852501050381E-23, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + n0in: 13, + dmin: 4.9598525010503808E-024, + dmin1: 9.2368632133320736E-002, + dmin2: 0.22049265431403467, + dn: 4.9598525010503808E-024, + dn1: 9.2368632133320736E-002, + dn2: 0.22049265431403467, + tau: 1.2278907189544363E-012, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1749149979303945E+01, 0.1749149979302717E+01, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.1026948719936233E+01, 0.1073347337297776E+01, 0.4639861736277134E-01, 0.4380746706334982E-01, 0.1013405803853420E+01, 0.1131758262754287E+01, 0.1621599259654447E+00, 0.9065158049178278E-01, 0.6326820553382161E+00, 0.5753431417100738E+00, 0.3331266686486833E-01, 0.6880305191066147E-01, 0.1188297658848447E+01, 0.1194069582486762E+01, 0.7457497555020480E-01, 0.9333627524262254E-01, 0.1494469242363992E+01, 0.1408587972834190E+01, 0.7455005714048079E-02, 0.8951422490882578E-02, 0.1691328825765317E+01, 0.1682736313985311E+01, 0.3589107121045615E-03, 0.1003553923945662E-03, 0.4705116269624868E+00, 0.4856665170586981E+00, 0.1525524548983380E-01, 0.1367304312976171E-01, 0.4352954686209429E+00, 0.4385509668224923E+00, 0.1692854133253905E-01, 0.1314659648329904E-01, 0.3405758644481647E+00, 0.3806452440729016E+00, 0.5321597610926388E-01, 0.3583592846566260E-01, 0.2563285827809251E+00, 0.2206431713856914E+00, 0.1505170716567330E-03, 0.6305450884558253E-04, 0.9243168664339420E-01, 0.9236863258188953E-01, 0.4485687980202113E-09, 0.5962992535266723E-20, 0.1227890724922389E-11, 0.4959852501050381E-23, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.5186198053161721E+00}, + tauOut: 4.9598525010503808E-024, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749149979302717E+01, 0.1749149979302717E+01, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.1117154804361126E+01, 0.1073347337297776E+01, 0.4438011869593646E-01, 0.4380746706334982E-01, 0.1178029724550133E+01, 0.1131758262754287E+01, 0.4427372589519608E-01, 0.9065158049178278E-01, 0.5998724677255393E+00, 0.5753431417100738E+00, 0.1369551627869799E+00, 0.6880305191066147E-01, 0.1150450694942405E+01, 0.1194069582486762E+01, 0.1142789997988411E+00, 0.9333627524262254E-01, 0.1303260395526232E+01, 0.1408587972834190E+01, 0.1155784656615063E-01, 0.8951422490882578E-02, 0.1671278822811555E+01, 0.1682736313985311E+01, 0.2916285016424428E-04, 0.1003553923945662E-03, 0.4993103973382956E+00, 0.4856665170586981E+00, 0.1200921574220688E-01, 0.1367304312976171E-01, 0.4396883475635844E+00, 0.4385509668224923E+00, 0.1138121911768345E-01, 0.1314659648329904E-01, 0.4050999534208807E+00, 0.3806452440729016E+00, 0.1951852336551518E-01, 0.3583592846566260E-01, 0.2011877025290218E+00, 0.2206431713856914E+00, 0.2894937755625969E-04, 0.6305450884558253E-04, 0.9233968320433328E-01, 0.9236863258188953E-01, 0.3202909346606844E-42, 0.5962992535266723E-20}, + i0: 1, + n0: 12, + pp: 0, + n0in: 13, + dmin: 4.9598525010503808E-024, + dmin1: 9.2339683204333278E-002, + dmin2: 0.20112464802017624, + dn: 4.9598525010503808E-024, + dn1: 9.2339683204333278E-002, + dn2: 0.20112464802017624, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1749149979302717E+01, 0.1749149979302717E+01, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.1117154804361126E+01, 0.1073347337297776E+01, 0.4438011869593646E-01, 0.4380746706334982E-01, 0.1178029724550133E+01, 0.1131758262754287E+01, 0.4427372589519608E-01, 0.9065158049178278E-01, 0.5998724677255393E+00, 0.5753431417100738E+00, 0.1369551627869799E+00, 0.6880305191066147E-01, 0.1150450694942405E+01, 0.1194069582486762E+01, 0.1142789997988411E+00, 0.9333627524262254E-01, 0.1303260395526232E+01, 0.1408587972834190E+01, 0.1155784656615063E-01, 0.8951422490882578E-02, 0.1671278822811555E+01, 0.1682736313985311E+01, 0.2916285016424428E-04, 0.1003553923945662E-03, 0.4993103973382956E+00, 0.4856665170586981E+00, 0.1200921574220688E-01, 0.1367304312976171E-01, 0.4396883475635844E+00, 0.4385509668224923E+00, 0.1138121911768345E-01, 0.1314659648329904E-01, 0.4050999534208807E+00, 0.3806452440729016E+00, 0.1951852336551518E-01, 0.3583592846566260E-01, 0.2011877025290218E+00, 0.2206431713856914E+00, 0.2894937755625969E-04, 0.6305450884558253E-04, 0.9233968320433328E-01, 0.9236863258188953E-01, 0.3202909346606844E-42, 0.5962992535266723E-20}, + tauOut: 9.2159326345418235E-002, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1749149979302717E+01, 0.1656990652957299E+01, 0.8676862906242004E-16, 0.5850002270797901E-16, 0.1117154804361126E+01, 0.1069375596711644E+01, 0.4438011869593646E-01, 0.4888936980013561E-01, 0.1178029724550133E+01, 0.1081254754299776E+01, 0.4427372589519608E-01, 0.2456274906772994E-01, 0.5998724677255393E+00, 0.6201055550993710E+00, 0.1369551627869799E+00, 0.2540860356894923E+00, 0.1150450694942405E+01, 0.9184843327063353E+00, 0.1142789997988411E+00, 0.1621533314992303E+00, 0.1303260395526232E+01, 0.1060505584247734E+01, 0.1155784656615063E-01, 0.1821431635083262E-01, 0.1671278822811555E+01, 0.1560934342965469E+01, 0.2916285016424428E-04, 0.9328588590960435E-05, 0.4993103973382956E+00, 0.4191509581464933E+00, 0.1200921574220688E-01, 0.1259763844648080E-01, 0.4396883475635844E+00, 0.3463126018893689E+00, 0.1138121911768345E-01, 0.1331320693873929E-01, 0.4050999534208807E+00, 0.3191459435022383E+00, 0.1951852336551518E-01, 0.1230436091267282E-01, 0.2011877025290218E+00, 0.9675296464848704E-01, 0.2894937755625969E-04, 0.2762888312745317E-04, 0.9233968320433328E-01, 0.1527279757875810E-03, 0.3202909346606844E-42, 0.5850002270797901E-16, 0.7318275341991307E+00}, + i0: 1, + n0: 12, + pp: 1, + n0in: 12, + dmin: 1.5272797578758102E-004, + dmin1: 9.6724015270930774E-002, + dmin2: 0.29962742013672317, + dn: 1.5272797578758102E-004, + dn1: 9.6724015270930774E-002, + dn2: 0.29962742013672317, + tau: 9.2159326345418235E-002, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.1749149979302717E+01, 0.1656990652957299E+01, 0.8676862906242004E-16, 0.5850002270797901E-16, 0.1117154804361126E+01, 0.1069375596711644E+01, 0.4438011869593646E-01, 0.4888936980013561E-01, 0.1178029724550133E+01, 0.1081254754299776E+01, 0.4427372589519608E-01, 0.2456274906772994E-01, 0.5998724677255393E+00, 0.6201055550993710E+00, 0.1369551627869799E+00, 0.2540860356894923E+00, 0.1150450694942405E+01, 0.9184843327063353E+00, 0.1142789997988411E+00, 0.1621533314992303E+00, 0.1303260395526232E+01, 0.1060505584247734E+01, 0.1155784656615063E-01, 0.1821431635083262E-01, 0.1671278822811555E+01, 0.1560934342965469E+01, 0.2916285016424428E-04, 0.9328588590960435E-05, 0.4993103973382956E+00, 0.4191509581464933E+00, 0.1200921574220688E-01, 0.1259763844648080E-01, 0.4396883475635844E+00, 0.3463126018893689E+00, 0.1138121911768345E-01, 0.1331320693873929E-01, 0.4050999534208807E+00, 0.3191459435022383E+00, 0.1951852336551518E-01, 0.1230436091267282E-01, 0.2011877025290218E+00, 0.9675296464848704E-01, 0.2894937755625969E-04, 0.2762888312745317E-04, 0.9233968320433328E-01, 0.1527279757875810E-03, 0.3202909346606844E-42, 0.5850002270797901E-16, 0.7318275341991307E+00}, + tauOut: 1.5267965277267402E-004, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1656837973304527E+01, 0.1656990652957299E+01, 0.3775776370348287E-16, 0.5850002270797901E-16, 0.1118112286859007E+01, 0.1069375596711644E+01, 0.4727777715386321E-01, 0.4888936980013561E-01, 0.1058387046560870E+01, 0.1081254754299776E+01, 0.1439123541326830E-01, 0.2456274906772994E-01, 0.8596476757228223E+00, 0.6201055550993710E+00, 0.2714763844897646E+00, 0.2540860356894923E+00, 0.8090086000630283E+00, 0.9184843327063353E+00, 0.2125620340079330E+00, 0.1621533314992303E+00, 0.8660051869378607E+00, 0.1060505584247734E+01, 0.3283046378299830E-01, 0.1821431635083262E-01, 0.1527960528118289E+01, 0.1560934342965469E+01, 0.2559023465659061E-05, 0.9328588590960435E-05, 0.4315933579167358E+00, 0.4191509581464933E+00, 0.1010840613748274E-01, 0.1259763844648080E-01, 0.3493647230378528E+00, 0.3463126018893689E+00, 0.1216166289646864E-01, 0.1331320693873929E-01, 0.3191359618656699E+00, 0.3191459435022383E+00, 0.3730332957296599E-02, 0.1230436091267282E-01, 0.9289758092154521E-01, 0.9675296464848704E-01, 0.4542317842367971E-07, 0.2762888312745317E-04, 0.2899836483324881E-08, 0.1527279757875810E-03, 0.3775776370348287E-16, 0.5850002270797901E-16}, + i0: 1, + n0: 12, + pp: 0, + n0in: 12, + dmin: 2.8998364833248812E-009, + dmin1: 9.2869952038417761E-002, + dmin2: 0.30683160095299705, + dn: 2.8998364833248812E-009, + dn1: 9.2869952038417761E-002, + dn2: 0.30683160095299705, + tau: 1.5267965277267402E-004, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1656837973304527E+01, 0.1656990652957299E+01, 0.3775776370348287E-16, 0.5850002270797901E-16, 0.1118112286859007E+01, 0.1069375596711644E+01, 0.4727777715386321E-01, 0.4888936980013561E-01, 0.1058387046560870E+01, 0.1081254754299776E+01, 0.1439123541326830E-01, 0.2456274906772994E-01, 0.8596476757228223E+00, 0.6201055550993710E+00, 0.2714763844897646E+00, 0.2540860356894923E+00, 0.8090086000630283E+00, 0.9184843327063353E+00, 0.2125620340079330E+00, 0.1621533314992303E+00, 0.8660051869378607E+00, 0.1060505584247734E+01, 0.3283046378299830E-01, 0.1821431635083262E-01, 0.1527960528118289E+01, 0.1560934342965469E+01, 0.2559023465659061E-05, 0.9328588590960435E-05, 0.4315933579167358E+00, 0.4191509581464933E+00, 0.1010840613748274E-01, 0.1259763844648080E-01, 0.3493647230378528E+00, 0.3463126018893689E+00, 0.1216166289646864E-01, 0.1331320693873929E-01, 0.3191359618656699E+00, 0.3191459435022383E+00, 0.3730332957296599E-02, 0.1230436091267282E-01, 0.9289758092154521E-01, 0.9675296464848704E-01, 0.4542317842367971E-07, 0.2762888312745317E-04, 0.2899836483324881E-08, 0.1527279757875810E-03, 0.3775776370348287E-16, 0.5850002270797901E-16}, + tauOut: 2.8998350258011044E-009, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1656837973304527E+01, 0.1656837970404692E+01, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.1118112286859007E+01, 0.1165390061113035E+01, 0.4727777715386321E-01, 0.4293685745187325E-01, 0.1058387046560870E+01, 0.1029841421622430E+01, 0.1439123541326830E-01, 0.1201290976848257E-01, 0.8596476757228223E+00, 0.1119111147544269E+01, 0.2714763844897646E+00, 0.1962510428460807E+00, 0.8090086000630283E+00, 0.8253195883250457E+00, 0.2125620340079330E+00, 0.2230406579474441E+00, 0.8660051869378607E+00, 0.6757949898735797E+00, 0.3283046378299830E-01, 0.7422909836846008E-01, 0.1527960528118289E+01, 0.1453733985873459E+01, 0.2559023465659061E-05, 0.7597383986781573E-06, 0.4315933579167358E+00, 0.4417010014159849E+00, 0.1010840613748274E-01, 0.7995273950601426E-02, 0.3493647230378528E+00, 0.3535311090838850E+00, 0.1216166289646864E-01, 0.1097845108004235E-01, 0.3191359618656699E+00, 0.3118878408430891E+00, 0.3730332957296599E-02, 0.1111101051031713E-02, 0.9289758092154521E-01, 0.9178652239385691E-01, 0.4542317842367971E-07, 0.1435066789177947E-14, 0.2899836483324881E-08, 0.2245698748385924E-16, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.7318275341991307E+00}, + i0: 1, + n0: 12, + pp: 1, + n0in: 12, + dmin: 2.2456987483859239E-017, + dmin1: 9.1786476970678488E-002, + dmin2: 0.30815750788579249, + dn: 2.2456987483859239E-017, + dn1: 9.1786476970678488E-002, + dn2: 0.30815750788579249, + tau: 2.8998350258011044E-009, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1656837973304527E+01, 0.1656837970404692E+01, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.1118112286859007E+01, 0.1165390061113035E+01, 0.4727777715386321E-01, 0.4293685745187325E-01, 0.1058387046560870E+01, 0.1029841421622430E+01, 0.1439123541326830E-01, 0.1201290976848257E-01, 0.8596476757228223E+00, 0.1119111147544269E+01, 0.2714763844897646E+00, 0.1962510428460807E+00, 0.8090086000630283E+00, 0.8253195883250457E+00, 0.2125620340079330E+00, 0.2230406579474441E+00, 0.8660051869378607E+00, 0.6757949898735797E+00, 0.3283046378299830E-01, 0.7422909836846008E-01, 0.1527960528118289E+01, 0.1453733985873459E+01, 0.2559023465659061E-05, 0.7597383986781573E-06, 0.4315933579167358E+00, 0.4417010014159849E+00, 0.1010840613748274E-01, 0.7995273950601426E-02, 0.3493647230378528E+00, 0.3535311090838850E+00, 0.1216166289646864E-01, 0.1097845108004235E-01, 0.3191359618656699E+00, 0.3118878408430891E+00, 0.3730332957296599E-02, 0.1111101051031713E-02, 0.9289758092154521E-01, 0.9178652239385691E-01, 0.4542317842367971E-07, 0.1435066789177947E-14, 0.2899836483324881E-08, 0.2245698748385924E-16, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.7318275341991307E+00}, + tauOut: 2.2456987483858885E-017, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1656837970404692E+01, 0.1656837970404692E+01, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.1208326918564908E+01, 0.1165390061113035E+01, 0.3659452888027460E-01, 0.4293685745187325E-01, 0.1005259802510638E+01, 0.1029841421622430E+01, 0.1337343958524596E-01, 0.1201290976848257E-01, 0.1301988750805104E+01, 0.1119111147544269E+01, 0.1244018658302015E+00, 0.1962510428460807E+00, 0.9239583804422884E+00, 0.8253195883250457E+00, 0.1631347930486186E+00, 0.2230406579474441E+00, 0.5868892951934211E+00, 0.6757949898735797E+00, 0.1838666404767374E+00, 0.7422909836846008E-01, 0.1269868105135121E+01, 0.1453733985873459E+01, 0.2642614694812039E-06, 0.7597383986781573E-06, 0.4496960111051168E+00, 0.4417010014159849E+00, 0.6285530663790794E-02, 0.7995273950601426E-02, 0.3582240295001366E+00, 0.3535311090838850E+00, 0.9558391177537082E-02, 0.1097845108004235E-01, 0.3034405507165837E+00, 0.3118878408430891E+00, 0.3360925270585024E-03, 0.1111101051031713E-02, 0.9145042986679984E-01, 0.9178652239385691E-01, 0.3524015903480299E-30, 0.1435066789177947E-14}, + i0: 1, + n0: 11, + pp: 0, + n0in: 12, + dmin: 2.2456987483858888E-017, + dmin1: 9.1450429866798411E-002, + dmin2: 0.30232944966555197, + dn: 2.2456987483858888E-017, + dn1: 9.1450429866798411E-002, + dn2: 0.30232944966555197, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1656837970404692E+01, 0.1656837970404692E+01, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.1208326918564908E+01, 0.1165390061113035E+01, 0.3659452888027460E-01, 0.4293685745187325E-01, 0.1005259802510638E+01, 0.1029841421622430E+01, 0.1337343958524596E-01, 0.1201290976848257E-01, 0.1301988750805104E+01, 0.1119111147544269E+01, 0.1244018658302015E+00, 0.1962510428460807E+00, 0.9239583804422884E+00, 0.8253195883250457E+00, 0.1631347930486186E+00, 0.2230406579474441E+00, 0.5868892951934211E+00, 0.6757949898735797E+00, 0.1838666404767374E+00, 0.7422909836846008E-01, 0.1269868105135121E+01, 0.1453733985873459E+01, 0.2642614694812039E-06, 0.7597383986781573E-06, 0.4496960111051168E+00, 0.4417010014159849E+00, 0.6285530663790794E-02, 0.7995273950601426E-02, 0.3582240295001366E+00, 0.3535311090838850E+00, 0.9558391177537082E-02, 0.1097845108004235E-01, 0.3034405507165837E+00, 0.3118878408430891E+00, 0.3360925270585024E-03, 0.1111101051031713E-02, 0.9145042986679984E-01, 0.9178652239385691E-01, 0.3524015903480299E-30, 0.1435066789177947E-14}, + tauOut: 9.1173077708044642E-002, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1656837970404692E+01, 0.1565664892696647E+01, 0.1792267857826344E-16, 0.1383211380667930E-16, 0.1208326918564908E+01, 0.1153748369737138E+01, 0.3659452888027460E-01, 0.3188477647299814E-01, 0.1005259802510638E+01, 0.8955753879148407E+00, 0.1337343958524596E-01, 0.1944232516271161E-01, 0.1301988750805104E+01, 0.1315775213764550E+01, 0.1244018658302015E+00, 0.8735697805677015E-01, 0.9239583804422884E+00, 0.9085631177260922E+00, 0.1631347930486186E+00, 0.1053774491236745E+00, 0.5868892951934211E+00, 0.5742054088384394E+00, 0.1838666404767374E+00, 0.4066251880351924E+00, 0.1269868105135121E+01, 0.7720701036533529E+00, 0.2642614694812039E-06, 0.1539203864417861E-06, 0.4496960111051168E+00, 0.3648083101404764E+00, 0.6285530663790794E-02, 0.6172085611379779E-02, 0.3582240295001366E+00, 0.2704372573582493E+00, 0.9558391177537082E-02, 0.1072486650400470E-01, 0.3034405507165837E+00, 0.2018786990315928E+00, 0.3360925270585024E-03, 0.1522488812438262E-03, 0.9145042986679984E-01, 0.1251032775113764E-03, 0.3524015903480299E-30, 0.1383211380667930E-16, 0.8241395430971566E+00}, + i0: 1, + n0: 11, + pp: 1, + n0in: 11, + dmin: 1.2510327751137640E-004, + dmin1: 0.20154260650453434, + dmin2: 0.26087886618071221, + dn: 1.2510327751137640E-004, + dn1: 0.20154260650453434, + dn2: 0.26087886618071221, + tau: 9.1173077708044642E-002, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.1656837970404692E+01, 0.1565664892696647E+01, 0.1792267857826344E-16, 0.1383211380667930E-16, 0.1208326918564908E+01, 0.1153748369737138E+01, 0.3659452888027460E-01, 0.3188477647299814E-01, 0.1005259802510638E+01, 0.8955753879148407E+00, 0.1337343958524596E-01, 0.1944232516271161E-01, 0.1301988750805104E+01, 0.1315775213764550E+01, 0.1244018658302015E+00, 0.8735697805677015E-01, 0.9239583804422884E+00, 0.9085631177260922E+00, 0.1631347930486186E+00, 0.1053774491236745E+00, 0.5868892951934211E+00, 0.5742054088384394E+00, 0.1838666404767374E+00, 0.4066251880351924E+00, 0.1269868105135121E+01, 0.7720701036533529E+00, 0.2642614694812039E-06, 0.1539203864417861E-06, 0.4496960111051168E+00, 0.3648083101404764E+00, 0.6285530663790794E-02, 0.6172085611379779E-02, 0.3582240295001366E+00, 0.2704372573582493E+00, 0.9558391177537082E-02, 0.1072486650400470E-01, 0.3034405507165837E+00, 0.2018786990315928E+00, 0.3360925270585024E-03, 0.1522488812438262E-03, 0.9145042986679984E-01, 0.1251032775113764E-03, 0.3524015903480299E-30, 0.1383211380667930E-16, 0.8241395430971566E+00}, + tauOut: 1.2498058228587147E-004, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1565539912114361E+01, 0.1565664892696647E+01, 0.1019378594629470E-16, 0.1383211380667930E-16, 0.1185508165627851E+01, 0.1153748369737138E+01, 0.2408690373149840E-01, 0.3188477647299814E-01, 0.8908058287637680E+00, 0.8955753879148407E+00, 0.2871751477260568E-01, 0.1944232516271161E-01, 0.1374289696466428E+01, 0.1315775213764550E+01, 0.5775298217141787E-01, 0.8735697805677015E-01, 0.9560626040960629E+00, 0.9085631177260922E+00, 0.6328905763825028E-01, 0.1053774491236745E+00, 0.9174165586530958E+00, 0.5742054088384394E+00, 0.3422034931823232E+00, 0.4066251880351924E+00, 0.4297417838091302E+00, 0.7720701036533529E+00, 0.1306631986684747E-06, 0.1539203864417861E-06, 0.3708552845063717E+00, 0.3648083101404764E+00, 0.4500844331080801E-02, 0.6172085611379779E-02, 0.2765362989488873E+00, 0.2704372573582493E+00, 0.7829431815445537E-02, 0.1072486650400470E-01, 0.1940765355151052E+00, 0.2018786990315928E+00, 0.9814083907923291E-07, 0.1522488812438262E-03, 0.2455438642568072E-07, 0.1251032775113764E-03, 0.1019378594629470E-16, 0.1383211380667930E-16}, + i0: 1, + n0: 11, + pp: 0, + n0in: 11, + dmin: 2.4554386425680716E-008, + dmin1: 0.19392428663386141, + dmin2: 0.26581143244488259, + dn: 2.4554386425680716E-008, + dn1: 0.19392428663386141, + dn2: 0.26581143244488259, + tau: 1.2498058228587147E-004, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1565539912114361E+01, 0.1565664892696647E+01, 0.1019378594629470E-16, 0.1383211380667930E-16, 0.1185508165627851E+01, 0.1153748369737138E+01, 0.2408690373149840E-01, 0.3188477647299814E-01, 0.8908058287637680E+00, 0.8955753879148407E+00, 0.2871751477260568E-01, 0.1944232516271161E-01, 0.1374289696466428E+01, 0.1315775213764550E+01, 0.5775298217141787E-01, 0.8735697805677015E-01, 0.9560626040960629E+00, 0.9085631177260922E+00, 0.6328905763825028E-01, 0.1053774491236745E+00, 0.9174165586530958E+00, 0.5742054088384394E+00, 0.3422034931823232E+00, 0.4066251880351924E+00, 0.4297417838091302E+00, 0.7720701036533529E+00, 0.1306631986684747E-06, 0.1539203864417861E-06, 0.3708552845063717E+00, 0.3648083101404764E+00, 0.4500844331080801E-02, 0.6172085611379779E-02, 0.2765362989488873E+00, 0.2704372573582493E+00, 0.7829431815445537E-02, 0.1072486650400470E-01, 0.1940765355151052E+00, 0.2018786990315928E+00, 0.9814083907923291E-07, 0.1522488812438262E-03, 0.2455438642568072E-07, 0.1251032775113764E-03, 0.1019378594629470E-16, 0.1383211380667930E-16}, + tauOut: 2.4554370888251911E-008, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1565539912114361E+01, 0.1565539887559990E+01, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.1185508165627851E+01, 0.1209595044804978E+01, 0.2408690373149840E-01, 0.1773879145177052E-01, 0.8908058287637680E+00, 0.9017845275302323E+00, 0.2871751477260568E-01, 0.4376453959373496E-01, 0.1374289696466428E+01, 0.1388278114489740E+01, 0.5775298217141787E-01, 0.3977262621431848E-01, 0.9560626040960629E+00, 0.9795790109656241E+00, 0.6328905763825028E-01, 0.5927283946360358E-01, 0.9174165586530958E+00, 0.1200347187817445E+01, 0.3422034931823232E+00, 0.1225138368952072E+00, 0.4297417838091302E+00, 0.3072280530227507E+00, 0.1306631986684747E-06, 0.1577236754259593E-06, 0.3708552845063717E+00, 0.3753559465594062E+00, 0.4500844331080801E-02, 0.3315910790466669E-02, 0.2765362989488873E+00, 0.2810497954194954E+00, 0.7829431815445537E-02, 0.5406547261581845E-02, 0.1940765355151052E+00, 0.1886700618399915E+00, 0.9814083907923291E-07, 0.1277249852674422E-13, 0.2455438642568072E-07, 0.2764930279233778E-14, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.8241395430971566E+00}, + i0: 1, + n0: 11, + pp: 1, + n0in: 11, + dmin: 2.7649302792337775E-015, + dmin1: 0.18866996369915248, + dmin2: 0.27322036360404983, + dn: 2.7649302792337775E-015, + dn1: 0.18866996369915248, + dn2: 0.27322036360404983, + tau: 2.4554370888251911E-008, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1565539912114361E+01, 0.1565539887559990E+01, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.1185508165627851E+01, 0.1209595044804978E+01, 0.2408690373149840E-01, 0.1773879145177052E-01, 0.8908058287637680E+00, 0.9017845275302323E+00, 0.2871751477260568E-01, 0.4376453959373496E-01, 0.1374289696466428E+01, 0.1388278114489740E+01, 0.5775298217141787E-01, 0.3977262621431848E-01, 0.9560626040960629E+00, 0.9795790109656241E+00, 0.6328905763825028E-01, 0.5927283946360358E-01, 0.9174165586530958E+00, 0.1200347187817445E+01, 0.3422034931823232E+00, 0.1225138368952072E+00, 0.4297417838091302E+00, 0.3072280530227507E+00, 0.1306631986684747E-06, 0.1577236754259593E-06, 0.3708552845063717E+00, 0.3753559465594062E+00, 0.4500844331080801E-02, 0.3315910790466669E-02, 0.2765362989488873E+00, 0.2810497954194954E+00, 0.7829431815445537E-02, 0.5406547261581845E-02, 0.1940765355151052E+00, 0.1886700618399915E+00, 0.9814083907923291E-07, 0.1277249852674422E-13, 0.2455438642568072E-07, 0.2764930279233778E-14, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.8241395430971566E+00}, + tauOut: 2.7649302792335523E-015, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1565539887559988E+01, 0.1565539887559990E+01, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.1227333836256746E+01, 0.1209595044804978E+01, 0.1303359134714337E-01, 0.1773879145177052E-01, 0.9325154757768211E+00, 0.9017845275302323E+00, 0.6515425651042277E-01, 0.4376453959373496E-01, 0.1362896484193633E+01, 0.1388278114489740E+01, 0.2858649229958118E-01, 0.3977262621431848E-01, 0.1010265358129644E+01, 0.9795790109656241E+00, 0.7042504782685149E-01, 0.5927283946360358E-01, 0.1252435976885798E+01, 0.1200347187817445E+01, 0.3005318297487194E-01, 0.1225138368952072E+00, 0.2771750277715515E+00, 0.3072280530227507E+00, 0.2135925446109612E-06, 0.1577236754259593E-06, 0.3786716437573254E+00, 0.3753559465594062E+00, 0.2461066374135985E-02, 0.3315910790466669E-02, 0.2839952763069384E+00, 0.2810497954194954E+00, 0.3591797791316158E-02, 0.5406547261581845E-02, 0.1850782640486854E+00, 0.1886700618399915E+00, 0.1908115364037247E-27, 0.1277249852674422E-13}, + i0: 1, + n0: 10, + pp: 0, + n0in: 11, + dmin: 3.4709879829724519E-029, + dmin1: 0.18507826404867261, + dmin2: 0.27717487004787600, + dn: 3.4709879829724519E-029, + dn1: 0.18507826404867261, + dn2: 0.27858872904535659, + tau: 2.7649302792335523E-015, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1565539887559988E+01, 0.1565539887559990E+01, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.1227333836256746E+01, 0.1209595044804978E+01, 0.1303359134714337E-01, 0.1773879145177052E-01, 0.9325154757768211E+00, 0.9017845275302323E+00, 0.6515425651042277E-01, 0.4376453959373496E-01, 0.1362896484193633E+01, 0.1388278114489740E+01, 0.2858649229958118E-01, 0.3977262621431848E-01, 0.1010265358129644E+01, 0.9795790109656241E+00, 0.7042504782685149E-01, 0.5927283946360358E-01, 0.1252435976885798E+01, 0.1200347187817445E+01, 0.3005318297487194E-01, 0.1225138368952072E+00, 0.2771750277715515E+00, 0.3072280530227507E+00, 0.2135925446109612E-06, 0.1577236754259593E-06, 0.3786716437573254E+00, 0.3753559465594062E+00, 0.2461066374135985E-02, 0.3315910790466669E-02, 0.2839952763069384E+00, 0.2810497954194954E+00, 0.3591797791316158E-02, 0.5406547261581845E-02, 0.1850782640486854E+00, 0.1886700618399915E+00, 0.1908115364037247E-27, 0.1277249852674422E-13}, + tauOut: 9.2539132024336307E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1565539887559988E+01, 0.1473000755535651E+01, 0.5964194309842799E-17, 0.4969486576955697E-17, 0.1227333836256746E+01, 0.1147828295579553E+01, 0.1303359134714337E-01, 0.1058871408116432E-01, 0.9325154757768211E+00, 0.8945418861817434E+00, 0.6515425651042277E-01, 0.9926701980086396E-01, 0.1362896484193633E+01, 0.1199676824668014E+01, 0.2858649229958118E-01, 0.2407310226126826E-01, 0.1010265358129644E+01, 0.9640781716708908E+00, 0.7042504782685149E-01, 0.9148932748822959E-01, 0.1252435976885798E+01, 0.1098460700348104E+01, 0.3005318297487194E-01, 0.7583331677723075E-02, 0.2771750277715515E+00, 0.1770527776620367E+00, 0.2135925446109612E-06, 0.4568210735249311E-06, 0.3786716437573254E+00, 0.2885931212860515E+00, 0.2461066374135985E-02, 0.2421856840585221E-02, 0.2839952763069384E+00, 0.1926260852333330E+00, 0.3591797791316158E-02, 0.3451057520197492E-02, 0.1850782640486854E+00, 0.8908807450415157E-01, 0.1908115364037247E-27, 0.4969486576955697E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + n0in: 10, + dmin: 8.9088074504151571E-002, + dmin1: 0.17705256406949207, + dmin2: 0.17705256406949207, + dn: 8.9088074504151571E-002, + dn1: 0.18903428744201686, + dn2: 0.28613205491191551, + tau: 9.2539132024336307E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.1565539887559988E+01, 0.1473000755535651E+01, 0.5964194309842799E-17, 0.4969486576955697E-17, 0.1227333836256746E+01, 0.1147828295579553E+01, 0.1303359134714337E-01, 0.1058871408116432E-01, 0.9325154757768211E+00, 0.8945418861817434E+00, 0.6515425651042277E-01, 0.9926701980086396E-01, 0.1362896484193633E+01, 0.1199676824668014E+01, 0.2858649229958118E-01, 0.2407310226126826E-01, 0.1010265358129644E+01, 0.9640781716708908E+00, 0.7042504782685149E-01, 0.9148932748822959E-01, 0.1252435976885798E+01, 0.1098460700348104E+01, 0.3005318297487194E-01, 0.7583331677723075E-02, 0.2771750277715515E+00, 0.1770527776620367E+00, 0.2135925446109612E-06, 0.4568210735249311E-06, 0.3786716437573254E+00, 0.2885931212860515E+00, 0.2461066374135985E-02, 0.2421856840585221E-02, 0.2839952763069384E+00, 0.1926260852333330E+00, 0.3591797791316158E-02, 0.3451057520197492E-02, 0.1850782640486854E+00, 0.8908807450415157E-01, 0.1908115364037247E-27, 0.4969486576955697E-17, 0.9154376259418607E+00}, + tauOut: 7.5387921832037685E-002, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1397612833703614E+01, 0.1473000755535651E+01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.1083029087828680E+01, 0.1147828295579553E+01, 0.8745885380967966E-02, 0.1058871408116432E-01, 0.9096750987696016E+00, 0.8945418861817434E+00, 0.1309130515609722E+00, 0.9926701980086396E-01, 0.1017448953536272E+01, 0.1199676824668014E+01, 0.2281033592282574E-01, 0.2407310226126826E-01, 0.9573692414042568E+00, 0.9640781716708908E+00, 0.1049724875218357E+00, 0.9148932748822959E-01, 0.9256836226719531E+00, 0.1098460700348104E+01, 0.1450441494900679E-02, 0.7583331677723075E-02, 0.1002148711561719E+00, 0.1770527776620367E+00, 0.1315527505616969E-05, 0.4568210735249311E-06, 0.2156257407670935E+00, 0.2885931212860515E+00, 0.2163530200698068E-02, 0.2421856840585221E-02, 0.1185256907207948E+00, 0.1926260852333330E+00, 0.2593936112987583E-02, 0.3451057520197492E-02, 0.1110621655912630E-01, 0.8908807450415157E-01, 0.4081328655531061E-17, 0.4969486576955697E-17}, + i0: 1, + n0: 10, + pp: 0, + n0in: 10, + dmin: 1.1106216559126303E-002, + dmin1: 0.10021441433509834, + dmin2: 0.10021441433509834, + dn: 1.1106216559126303E-002, + dn1: 0.11507463320059727, + dn2: 0.21320388392650824, + tau: 7.5387921832037685E-002, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1397612833703614E+01, 0.1473000755535651E+01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.1083029087828680E+01, 0.1147828295579553E+01, 0.8745885380967966E-02, 0.1058871408116432E-01, 0.9096750987696016E+00, 0.8945418861817434E+00, 0.1309130515609722E+00, 0.9926701980086396E-01, 0.1017448953536272E+01, 0.1199676824668014E+01, 0.2281033592282574E-01, 0.2407310226126826E-01, 0.9573692414042568E+00, 0.9640781716708908E+00, 0.1049724875218357E+00, 0.9148932748822959E-01, 0.9256836226719531E+00, 0.1098460700348104E+01, 0.1450441494900679E-02, 0.7583331677723075E-02, 0.1002148711561719E+00, 0.1770527776620367E+00, 0.1315527505616969E-05, 0.4568210735249311E-06, 0.2156257407670935E+00, 0.2885931212860515E+00, 0.2163530200698068E-02, 0.2421856840585221E-02, 0.1185256907207948E+00, 0.1926260852333330E+00, 0.2593936112987583E-02, 0.3451057520197492E-02, 0.1110621655912630E-01, 0.8908807450415157E-01, 0.4081328655531061E-17, 0.4969486576955697E-17}, + tauOut: 9.2006637361187298E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1397612833703614E+01, 0.1388412169967495E+01, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.1083029087828680E+01, 0.1082574309473529E+01, 0.8745885380967966E-02, 0.7349069784991225E-02, 0.9096750987696016E+00, 0.1024038416809464E+01, 0.1309130515609722E+00, 0.1300706547025319E+00, 0.1017448953536272E+01, 0.9009879710204475E+00, 0.2281033592282574E-01, 0.2423774201322422E-01, 0.9573692414042568E+00, 0.1028903323176749E+01, 0.1049724875218357E+00, 0.9444163542020824E-01, 0.9256836226719531E+00, 0.8234917650105269E+00, 0.1450441494900679E-02, 0.1765115496075164E-03, 0.1002148711561719E+00, 0.9083901139795122E-01, 0.1315527505616969E-05, 0.3122684720284652E-05, 0.2156257407670935E+00, 0.2085854845469525E+00, 0.2163530200698068E-02, 0.1229394806594584E-02, 0.1185256907207948E+00, 0.1106895682910690E+00, 0.2593936112987583E-02, 0.2602667681892373E-03, 0.1110621655912630E-01, 0.1645286054818337E-02, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + n0in: 10, + dmin: 1.6452860548183366E-003, + dmin1: 9.0837695870445614E-002, + dmin2: 9.0837695870445614E-002, + dn: 1.6452860548183366E-003, + dn1: 0.10809563217808144, + dn2: 0.20642195434625446, + tau: 9.2006637361187298E-003, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1397612833703614E+01, 0.1388412169967495E+01, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.1083029087828680E+01, 0.1082574309473529E+01, 0.8745885380967966E-02, 0.7349069784991225E-02, 0.9096750987696016E+00, 0.1024038416809464E+01, 0.1309130515609722E+00, 0.1300706547025319E+00, 0.1017448953536272E+01, 0.9009879710204475E+00, 0.2281033592282574E-01, 0.2423774201322422E-01, 0.9573692414042568E+00, 0.1028903323176749E+01, 0.1049724875218357E+00, 0.9444163542020824E-01, 0.9256836226719531E+00, 0.8234917650105269E+00, 0.1450441494900679E-02, 0.1765115496075164E-03, 0.1002148711561719E+00, 0.9083901139795122E-01, 0.1315527505616969E-05, 0.3122684720284652E-05, 0.2156257407670935E+00, 0.2085854845469525E+00, 0.2163530200698068E-02, 0.1229394806594584E-02, 0.1185256907207948E+00, 0.1106895682910690E+00, 0.2593936112987583E-02, 0.2602667681892373E-03, 0.1110621655912630E-01, 0.1645286054818337E-02, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.9154376259418607E+00}, + tauOut: 1.5594219393746818E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386852748028120E+01, 0.1388412169967495E+01, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.1088363957319145E+01, 0.1082574309473529E+01, 0.6914717946174950E-02, 0.7349069784991225E-02, 0.1145634931626446E+01, 0.1024038416809464E+01, 0.1022944500333619E+00, 0.1300706547025319E+00, 0.8213718410609353E+00, 0.9009879710204475E+00, 0.3036175828902931E-01, 0.2423774201322422E-01, 0.1091423778368554E+01, 0.1028903323176749E+01, 0.7125729765473905E-01, 0.9444163542020824E-01, 0.7508515569660207E+00, 0.8234917650105269E+00, 0.2135460001102832E-04, 0.1765115496075164E-03, 0.8926135754328580E-01, 0.9083901139795122E-01, 0.7297073710223142E-05, 0.3122684720284652E-05, 0.2082481603404622E+00, 0.2085854845469525E+00, 0.6534568189162364E-03, 0.1229394806594584E-02, 0.1087369563009673E+00, 0.1106895682910690E+00, 0.3938065757966957E-05, 0.2602667681892373E-03, 0.8192604968568760E-04, 0.1645286054818337E-02, 0.2485138759635906E-17, 0.3183635051997810E-17}, + i0: 1, + n0: 10, + pp: 0, + n0in: 10, + dmin: 8.1926049685687600E-005, + dmin1: 8.9258234858565516E-002, + dmin2: 8.9258234858565516E-002, + dn: 8.1926049685687600E-005, + dn1: 0.10847668953277810, + dn2: 0.20701876553386761, + tau: 1.5594219393746818E-003, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1386852748028120E+01, 0.1388412169967495E+01, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.1088363957319145E+01, 0.1082574309473529E+01, 0.6914717946174950E-02, 0.7349069784991225E-02, 0.1145634931626446E+01, 0.1024038416809464E+01, 0.1022944500333619E+00, 0.1300706547025319E+00, 0.8213718410609353E+00, 0.9009879710204475E+00, 0.3036175828902931E-01, 0.2423774201322422E-01, 0.1091423778368554E+01, 0.1028903323176749E+01, 0.7125729765473905E-01, 0.9444163542020824E-01, 0.7508515569660207E+00, 0.8234917650105269E+00, 0.2135460001102832E-04, 0.1765115496075164E-03, 0.8926135754328580E-01, 0.9083901139795122E-01, 0.7297073710223142E-05, 0.3122684720284652E-05, 0.2082481603404622E+00, 0.2085854845469525E+00, 0.6534568189162364E-03, 0.1229394806594584E-02, 0.1087369563009673E+00, 0.1106895682910690E+00, 0.3938065757966957E-05, 0.2602667681892373E-03, 0.8192604968568760E-04, 0.1645286054818337E-02, 0.2485138759635906E-17, 0.3183635051997810E-17}, + tauOut: 8.1416944590412474E-005, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386852748028120E+01, 0.1386771331083530E+01, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.1088363957319145E+01, 0.1095197258320730E+01, 0.6914717946174950E-02, 0.7233164949324962E-02, 0.1145634931626446E+01, 0.1240614799765893E+01, 0.1022944500333619E+00, 0.6772592167212049E-01, 0.8213718410609353E+00, 0.7839262607332537E+00, 0.3036175828902931E-01, 0.4227125255215914E-01, 0.1091423778368554E+01, 0.1120328406526543E+01, 0.7125729765473905E-01, 0.4775711530437247E-01, 0.7508515569660207E+00, 0.7030343793170689E+00, 0.2135460001102832E-04, 0.2711304941630149E-05, 0.8926135754328580E-01, 0.8918452636746399E-01, 0.7297073710223142E-05, 0.1703885458517271E-04, 0.2082481603404622E+00, 0.2088031613602029E+00, 0.6534568189162364E-03, 0.3402961195615630E-03, 0.1087369563009673E+00, 0.1083191813025733E+00, 0.3938065757966957E-05, 0.2978513750500819E-08, 0.8192604968568760E-04, 0.5061265815246250E-06, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + n0in: 10, + dmin: 5.0612658152462498E-007, + dmin1: 8.9177229293753768E-002, + dmin2: 8.9177229293753768E-002, + dn: 5.0612658152462498E-007, + dn1: 0.10831524323681536, + dn2: 0.20814970454128662, + tau: 8.1416944590412474E-005, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1386852748028120E+01, 0.1386771331083530E+01, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.1088363957319145E+01, 0.1095197258320730E+01, 0.6914717946174950E-02, 0.7233164949324962E-02, 0.1145634931626446E+01, 0.1240614799765893E+01, 0.1022944500333619E+00, 0.6772592167212049E-01, 0.8213718410609353E+00, 0.7839262607332537E+00, 0.3036175828902931E-01, 0.4227125255215914E-01, 0.1091423778368554E+01, 0.1120328406526543E+01, 0.7125729765473905E-01, 0.4775711530437247E-01, 0.7508515569660207E+00, 0.7030343793170689E+00, 0.2135460001102832E-04, 0.2711304941630149E-05, 0.8926135754328580E-01, 0.8918452636746399E-01, 0.7297073710223142E-05, 0.1703885458517271E-04, 0.2082481603404622E+00, 0.2088031613602029E+00, 0.6534568189162364E-03, 0.3402961195615630E-03, 0.1087369563009673E+00, 0.1083191813025733E+00, 0.3938065757966957E-05, 0.2978513750500819E-08, 0.8192604968568760E-04, 0.5061265815246250E-06, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.9154376259418607E+00}, + tauOut: 5.0604049633765406E-007, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386770825043033E+01, 0.1386771331083530E+01, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.1102429917229558E+01, 0.1095197258320730E+01, 0.8139811288713328E-02, 0.7233164949324962E-02, 0.1300200404108803E+01, 0.1240614799765893E+01, 0.4083380405309871E-01, 0.6772592167212049E-01, 0.7853632031918177E+00, 0.7839262607332537E+00, 0.6030036143936175E-01, 0.4227125255215914E-01, 0.1107784654351057E+01, 0.1120328406526543E+01, 0.3030814137396716E-01, 0.4775711530437247E-01, 0.6727284432075471E+00, 0.7030343793170689E+00, 0.3594413905024206E-06, 0.2711304941630149E-05, 0.8920069974016231E-01, 0.8918452636746399E-01, 0.3988496406087022E-04, 0.1703885458517271E-04, 0.2091030664752072E+00, 0.2088031613602029E+00, 0.1762795624794033E-03, 0.3402961195615630E-03, 0.1081423986781113E+00, 0.1083191813025733E+00, 0.1393999949133917E-13, 0.2978513750500819E-08, 0.8607124697139263E-10, 0.5061265815246250E-06, 0.1540308069724697E-17, 0.1950383162890474E-17}, + i0: 1, + n0: 10, + pp: 0, + n0in: 10, + dmin: 8.6071246971392626E-011, + dmin1: 8.9183660885577137E-002, + dmin2: 8.9183660885577137E-002, + dn: 8.6071246971392626E-011, + dn1: 0.10814239569959758, + dn2: 0.20876277035564564, + tau: 5.0604049633765406E-007, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1386770825043033E+01, 0.1386771331083530E+01, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.1102429917229558E+01, 0.1095197258320730E+01, 0.8139811288713328E-02, 0.7233164949324962E-02, 0.1300200404108803E+01, 0.1240614799765893E+01, 0.4083380405309871E-01, 0.6772592167212049E-01, 0.7853632031918177E+00, 0.7839262607332537E+00, 0.6030036143936175E-01, 0.4227125255215914E-01, 0.1107784654351057E+01, 0.1120328406526543E+01, 0.3030814137396716E-01, 0.4775711530437247E-01, 0.6727284432075471E+00, 0.7030343793170689E+00, 0.3594413905024206E-06, 0.2711304941630149E-05, 0.8920069974016231E-01, 0.8918452636746399E-01, 0.3988496406087022E-04, 0.1703885458517271E-04, 0.2091030664752072E+00, 0.2088031613602029E+00, 0.1762795624794033E-03, 0.3402961195615630E-03, 0.1081423986781113E+00, 0.1083191813025733E+00, 0.1393999949133917E-13, 0.2978513750500819E-08, 0.8607124697139263E-10, 0.5061265815246250E-06, 0.1540308069724697E-17, 0.1950383162890474E-17}, + tauOut: 8.6071215292546838E-011, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386770825043033E+01, 0.1386770824956962E+01, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.1102429917229558E+01, 0.1110569728432201E+01, 0.8139811288713328E-02, 0.9529690622753703E-02, 0.1300200404108803E+01, 0.1331504517453077E+01, 0.4083380405309871E-01, 0.2408506071837550E-01, 0.7853632031918177E+00, 0.8215785038267327E+00, 0.6030036143936175E-01, 0.8130667336500198E-01, 0.1107784654351057E+01, 0.1056786122273951E+01, 0.3030814137396716E-01, 0.1929354325655847E-01, 0.6727284432075471E+00, 0.6534352593063080E+00, 0.3594413905024206E-06, 0.4906748310831983E-07, 0.8920069974016231E-01, 0.8924053555066887E-01, 0.3988496406087022E-04, 0.9345605379795243E-04, 0.2091030664752072E+00, 0.2091858898978174E+00, 0.1762795624794033E-03, 0.9113088236382798E-04, 0.1081423986781113E+00, 0.1080512677096902E+00, 0.1393999949133917E-13, 0.1110429488179469E-22, 0.8607124697139263E-10, 0.3167883469916549E-16, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + n0in: 10, + dmin: 3.1678834699165494E-017, + dmin1: 8.9200650586607991E-002, + dmin2: 8.9200650586607991E-002, + dn: 3.1678834699165494E-017, + dn1: 0.10805126770967630, + dn2: 0.20900961033533805, + tau: 8.6071215292546838E-011, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1386770825043033E+01, 0.1386770824956962E+01, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.1102429917229558E+01, 0.1110569728432201E+01, 0.8139811288713328E-02, 0.9529690622753703E-02, 0.1300200404108803E+01, 0.1331504517453077E+01, 0.4083380405309871E-01, 0.2408506071837550E-01, 0.7853632031918177E+00, 0.8215785038267327E+00, 0.6030036143936175E-01, 0.8130667336500198E-01, 0.1107784654351057E+01, 0.1056786122273951E+01, 0.3030814137396716E-01, 0.1929354325655847E-01, 0.6727284432075471E+00, 0.6534352593063080E+00, 0.3594413905024206E-06, 0.4906748310831983E-07, 0.8920069974016231E-01, 0.8924053555066887E-01, 0.3988496406087022E-04, 0.9345605379795243E-04, 0.2091030664752072E+00, 0.2091858898978174E+00, 0.1762795624794033E-03, 0.9113088236382798E-04, 0.1081423986781113E+00, 0.1080512677096902E+00, 0.1393999949133917E-13, 0.1110429488179469E-22, 0.8607124697139263E-10, 0.3167883469916549E-16, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.9154376259418607E+00}, + tauOut: 3.1678834698836348E-017, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386770824956962E+01, 0.1386770824956962E+01, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.1120099419054954E+01, 0.1110569728432201E+01, 0.1132830345080667E-01, 0.9529690622753703E-02, 0.1344261274720646E+01, 0.1331504517453077E+01, 0.1472018016266302E-01, 0.2408506071837550E-01, 0.8881649970290716E+00, 0.8215785038267327E+00, 0.9674301998819117E-01, 0.8130667336500198E-01, 0.9793366455423188E+00, 0.1056786122273951E+01, 0.1287308250760436E-01, 0.1929354325655847E-01, 0.6405622258661866E+00, 0.6534352593063080E+00, 0.6835883063177366E-08, 0.4906748310831983E-07, 0.8933398476858376E-01, 0.8924053555066887E-01, 0.2188381927740679E-03, 0.9345605379795243E-04, 0.2090581825874072E+00, 0.2091858898978174E+00, 0.4710079866305792E-04, 0.9113088236382798E-04, 0.1080041669110272E+00, 0.1080512677096902E+00, 0.3257014354834561E-38, 0.1110429488179469E-22}, + i0: 1, + n0: 9, + pp: 0, + n0in: 10, + dmin: 3.1678834699165494E-017, + dmin1: 8.9240528714785800E-002, + dmin2: 8.9240528714785800E-002, + dn: 3.1678834699165494E-017, + dn1: 0.10800416691102718, + dn2: 0.20896705170504334, + tau: 0.0000000000000000, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1386770824956962E+01, 0.1386770824956962E+01, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.1120099419054954E+01, 0.1110569728432201E+01, 0.1132830345080667E-01, 0.9529690622753703E-02, 0.1344261274720646E+01, 0.1331504517453077E+01, 0.1472018016266302E-01, 0.2408506071837550E-01, 0.8881649970290716E+00, 0.8215785038267327E+00, 0.9674301998819117E-01, 0.8130667336500198E-01, 0.9793366455423188E+00, 0.1056786122273951E+01, 0.1287308250760436E-01, 0.1929354325655847E-01, 0.6405622258661866E+00, 0.6534352593063080E+00, 0.6835883063177366E-08, 0.4906748310831983E-07, 0.8933398476858376E-01, 0.8924053555066887E-01, 0.2188381927740679E-03, 0.9345605379795243E-04, 0.2090581825874072E+00, 0.2091858898978174E+00, 0.4710079866305792E-04, 0.9113088236382798E-04, 0.1080041669110272E+00, 0.1080512677096902E+00, 0.3257014354834561E-38, 0.1110429488179469E-22}, + tauOut: 2.2310132178696450E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1386770824956962E+01, 0.1364460692778266E+01, 0.9806070694382835E-18, 0.8049901434408684E-18, 0.1120099419054954E+01, 0.1109117590327065E+01, 0.1132830345080667E-01, 0.1373001363427395E-01, 0.1344261274720646E+01, 0.1322941309070339E+01, 0.1472018016266302E-01, 0.9882485852396858E-02, 0.8881649970290716E+00, 0.9527153989861693E+00, 0.9674301998819117E-01, 0.9944626147083412E-01, 0.9793366455423188E+00, 0.8704533344003925E+00, 0.1287308250760436E-01, 0.9473236598617136E-02, 0.6405622258661866E+00, 0.6087788639247561E+00, 0.6835883063177366E-08, 0.1003117403762534E-08, 0.8933398476858376E-01, 0.6724268977954398E-01, 0.2188381927740679E-03, 0.6803700894781421E-03, 0.2090581825874072E+00, 0.1861147811178956E+00, 0.4710079866305792E-04, 0.2733303872960605E-04, 0.1080041669110272E+00, 0.8566670169360113E-01, 0.3257014354834561E-38, 0.8049901434408684E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 6.7023851586769906E-002, + dmin1: 6.7023851586769906E-002, + dmin2: 6.7023851586769906E-002, + dn: 8.5666701693601133E-002, + dn1: 0.18606768031923254, + dn2: 6.7023851586769906E-002, + tau: 2.2310132178696450E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.1386770824956962E+01, 0.1364460692778266E+01, 0.9806070694382835E-18, 0.8049901434408684E-18, 0.1120099419054954E+01, 0.1109117590327065E+01, 0.1132830345080667E-01, 0.1373001363427395E-01, 0.1344261274720646E+01, 0.1322941309070339E+01, 0.1472018016266302E-01, 0.9882485852396858E-02, 0.8881649970290716E+00, 0.9527153989861693E+00, 0.9674301998819117E-01, 0.9944626147083412E-01, 0.9793366455423188E+00, 0.8704533344003925E+00, 0.1287308250760436E-01, 0.9473236598617136E-02, 0.6405622258661866E+00, 0.6087788639247561E+00, 0.6835883063177366E-08, 0.1003117403762534E-08, 0.8933398476858376E-01, 0.6724268977954398E-01, 0.2188381927740679E-03, 0.6803700894781421E-03, 0.2090581825874072E+00, 0.1861147811178956E+00, 0.4710079866305792E-04, 0.2733303872960605E-04, 0.1080041669110272E+00, 0.8566670169360113E-01, 0.3257014354834561E-38, 0.8049901434408684E-18, 0.1094206688544886E+01}, + tauOut: 6.4730147312741043E-002, + ttypeOut: -5, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1299730545465525E+01, 0.1364460692778266E+01, 0.6869337119490330E-18, 0.8049901434408684E-18, 0.1058117456648598E+01, 0.1109117590327065E+01, 0.1716633828952343E-01, 0.1373001363427395E-01, 0.1250927309320471E+01, 0.1322941309070339E+01, 0.7526573591998700E-02, 0.9882485852396858E-02, 0.9799049395522637E+00, 0.9527153989861693E+00, 0.8833849733474472E-01, 0.9944626147083412E-01, 0.7268579263515238E+00, 0.8704533344003925E+00, 0.7934296380510910E-02, 0.9473236598617136E-02, 0.5361144212346215E+00, 0.6087788639247561E+00, 0.1258170079408221E-09, 0.1003117403762534E-08, 0.3192912430464083E-02, 0.6724268977954398E-01, 0.3965875451961033E-01, 0.6803700894781421E-03, 0.8175321232427381E-01, 0.1861147811178956E+00, 0.2864145895504550E-04, 0.2733303872960605E-04, 0.2090791292190505E-01, 0.8566670169360113E-01, 0.6869337119490330E-18, 0.8049901434408684E-18}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 2.5125423409859404E-003, + dmin1: 2.5125423409859404E-003, + dmin2: 2.5125423409859404E-003, + dn: 2.0907912921905053E-002, + dn1: 8.1725879285544201E-002, + dn2: 2.5125423409859404E-003, + tau: 6.4730147312741043E-002, + ttype: -5, + g: 0.0000000000000000, + zOut: []float64{0.1299730545465525E+01, 0.1364460692778266E+01, 0.6869337119490330E-18, 0.8049901434408684E-18, 0.1058117456648598E+01, 0.1109117590327065E+01, 0.1716633828952343E-01, 0.1373001363427395E-01, 0.1250927309320471E+01, 0.1322941309070339E+01, 0.7526573591998700E-02, 0.9882485852396858E-02, 0.9799049395522637E+00, 0.9527153989861693E+00, 0.8833849733474472E-01, 0.9944626147083412E-01, 0.7268579263515238E+00, 0.8704533344003925E+00, 0.7934296380510910E-02, 0.9473236598617136E-02, 0.5361144212346215E+00, 0.6087788639247561E+00, 0.1258170079408221E-09, 0.1003117403762534E-08, 0.3192912430464083E-02, 0.6724268977954398E-01, 0.3965875451961033E-01, 0.6803700894781421E-03, 0.8175321232427381E-01, 0.1861147811178956E+00, 0.2864145895504550E-04, 0.2733303872960605E-04, 0.2090791292190505E-01, 0.8566670169360113E-01, 0.6869337119490330E-18, 0.8049901434408684E-18}, + tauOut: 2.3478378904869292E-003, + ttypeOut: -5, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1299730545465525E+01, 0.1299143585992903E+01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1058117456648598E+01, 0.1074696835465499E+01, 0.1716633828952343E-01, 0.1998130138542489E-01, 0.1250927309320471E+01, 0.1237885622054423E+01, 0.7526573591998700E-02, 0.5958003315736791E-02, 0.9799049395522637E+00, 0.1061698474098650E+01, 0.8833849733474472E-01, 0.6047812873071532E-01, 0.7268579263515238E+00, 0.6737271345286977E+00, 0.7934296380510910E-02, 0.6313669873066943E-02, 0.5361144212346215E+00, 0.5292137920147498E+00, 0.1258170079408221E-09, 0.7590933847144573E-12, 0.3192912430464083E-02, 0.4226470747669359E-01, 0.3965875451961033E-01, 0.7671248122433710E-01, 0.8175321232427381E-01, 0.4482413086270017E-02, 0.2864145895504550E-04, 0.1335961497218277E-03, 0.2090791292190505E-01, 0.2018735729956149E-01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 2.6059529570832572E-003, + dmin1: 2.6059529570832572E-003, + dmin2: 2.6059529570832572E-003, + dn: 2.0187357299561493E-002, + dn1: 4.4537716273149721E-003, + dn2: 2.6059529570832572E-003, + tau: 5.8695947262173229E-004, + ttype: -17, + g: 0.0000000000000000, + zOut: []float64{0.1299730545465525E+01, 0.1299143585992903E+01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1058117456648598E+01, 0.1074696835465499E+01, 0.1716633828952343E-01, 0.1998130138542489E-01, 0.1250927309320471E+01, 0.1237885622054423E+01, 0.7526573591998700E-02, 0.5958003315736791E-02, 0.9799049395522637E+00, 0.1061698474098650E+01, 0.8833849733474472E-01, 0.6047812873071532E-01, 0.7268579263515238E+00, 0.6737271345286977E+00, 0.7934296380510910E-02, 0.6313669873066943E-02, 0.5361144212346215E+00, 0.5292137920147498E+00, 0.1258170079408221E-09, 0.7590933847144573E-12, 0.3192912430464083E-02, 0.4226470747669359E-01, 0.3965875451961033E-01, 0.7671248122433710E-01, 0.8175321232427381E-01, 0.4482413086270017E-02, 0.2864145895504550E-04, 0.1335961497218277E-03, 0.2090791292190505E-01, 0.2018735729956149E-01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1094206688544886E+01}, + tauOut: 4.9324499328963489E-004, + ttypeOut: -5, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1298650340999613E+01, 0.1299143585992903E+01, 0.4630045856693428E-18, 0.5594890049187079E-18, 0.1094184891857634E+01, 0.1074696835465499E+01, 0.2260547177996662E-01, 0.1998130138542489E-01, 0.1220744908596903E+01, 0.1237885622054423E+01, 0.5181756634367578E-02, 0.5958003315736791E-02, 0.1116501601201708E+01, 0.1061698474098650E+01, 0.3649413160495897E-01, 0.6047812873071532E-01, 0.6430534278035160E+00, 0.6737271345286977E+00, 0.5195962000339362E-02, 0.6313669873066943E-02, 0.5235245850218799E+00, 0.5292137920147498E+00, 0.6128243213469890E-13, 0.7590933847144573E-12, 0.1184839437076798E+00, 0.4226470747669359E-01, 0.2902140315050332E-02, 0.7671248122433710E-01, 0.1220623927651878E-02, 0.4482413086270017E-02, 0.2209487416380896E-02, 0.1335961497218277E-03, 0.1748462488989096E-01, 0.2018735729956149E-01, 0.4630045856693428E-18, 0.5594890049187079E-18}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 1.0870277779300500E-003, + dmin1: 1.0870277779300500E-003, + dmin2: 4.1771462483342674E-002, + dn: 1.7484624889890960E-002, + dn1: 1.0870277779300500E-003, + dn2: 4.1771462483342674E-002, + tau: 4.9324499328963489E-004, + ttype: -5, + g: 0.0000000000000000, + zOut: []float64{0.1298650340999613E+01, 0.1299143585992903E+01, 0.4630045856693428E-18, 0.5594890049187079E-18, 0.1094184891857634E+01, 0.1074696835465499E+01, 0.2260547177996662E-01, 0.1998130138542489E-01, 0.1220744908596903E+01, 0.1237885622054423E+01, 0.5181756634367578E-02, 0.5958003315736791E-02, 0.1116501601201708E+01, 0.1061698474098650E+01, 0.3649413160495897E-01, 0.6047812873071532E-01, 0.6430534278035160E+00, 0.6737271345286977E+00, 0.5195962000339362E-02, 0.6313669873066943E-02, 0.5235245850218799E+00, 0.5292137920147498E+00, 0.6128243213469890E-13, 0.7590933847144573E-12, 0.1184839437076798E+00, 0.4226470747669359E-01, 0.2902140315050332E-02, 0.7671248122433710E-01, 0.1220623927651878E-02, 0.4482413086270017E-02, 0.2209487416380896E-02, 0.1335961497218277E-03, 0.1748462488989096E-01, 0.2018735729956149E-01, 0.4630045856693428E-18, 0.5594890049187079E-18}, + tauOut: 8.6238530354903250E-004, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1298650340999613E+01, 0.1297787955696064E+01, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094184891857634E+01, 0.1115927978334052E+01, 0.2260547177996662E-01, 0.2472875948770642E-01, 0.1220744908596903E+01, 0.1200335520440015E+01, 0.5181756634367578E-02, 0.4819852017032840E-02, 0.1116501601201708E+01, 0.1147313495486085E+01, 0.3649413160495897E-01, 0.2045445862496274E-01, 0.6430534278035160E+00, 0.6269325458753436E+00, 0.5195962000339362E-02, 0.4338925882718484E-02, 0.5235245850218799E+00, 0.5183232738356738E+00, 0.6128243213469890E-13, 0.1400860159256393E-13, 0.1184839437076798E+00, 0.1205236987191671E+00, 0.2902140315050332E-02, 0.2939191169537379E-04, 0.1220623927651878E-02, 0.2538334128788367E-02, 0.2209487416380896E-02, 0.1521945367089819E-01, 0.1748462488989096E-01, 0.1402785915443734E-02, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 3.2884671240747138E-004, + dmin1: 3.2884671240747138E-004, + dmin2: 0.11762155840411674, + dn: 1.4027859154437344E-003, + dn1: 3.2884671240747138E-004, + dn2: 0.11762155840411674, + tau: 8.6238530354903250E-004, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1298650340999613E+01, 0.1297787955696064E+01, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094184891857634E+01, 0.1115927978334052E+01, 0.2260547177996662E-01, 0.2472875948770642E-01, 0.1220744908596903E+01, 0.1200335520440015E+01, 0.5181756634367578E-02, 0.4819852017032840E-02, 0.1116501601201708E+01, 0.1147313495486085E+01, 0.3649413160495897E-01, 0.2045445862496274E-01, 0.6430534278035160E+00, 0.6269325458753436E+00, 0.5195962000339362E-02, 0.4338925882718484E-02, 0.5235245850218799E+00, 0.5183232738356738E+00, 0.6128243213469890E-13, 0.1400860159256393E-13, 0.1184839437076798E+00, 0.1205236987191671E+00, 0.2902140315050332E-02, 0.2939191169537379E-04, 0.1220623927651878E-02, 0.2538334128788367E-02, 0.2209487416380896E-02, 0.1521945367089819E-01, 0.1748462488989096E-01, 0.1402785915443734E-02, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094206688544886E+01}, + tauOut: 1.8442717265434725E-004, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1297603528523410E+01, 0.1297787955696064E+01, 0.3357116521683426E-18, 0.3903662538064461E-18, 0.1140472310649104E+01, 0.1115927978334052E+01, 0.2602676813137004E-01, 0.2472875948770642E-01, 0.1178944177153024E+01, 0.1200335520440015E+01, 0.4690536984322235E-02, 0.4819852017032840E-02, 0.1162892989954071E+01, 0.1147313495486085E+01, 0.1102729651913737E-01, 0.2045445862496274E-01, 0.6200597480662705E+00, 0.6269325458753436E+00, 0.3627015421456806E-02, 0.4338925882718484E-02, 0.5145118312415766E+00, 0.5183232738356738E+00, 0.3281495925457712E-14, 0.1400860159256393E-13, 0.1203686634582048E+00, 0.1205236987191671E+00, 0.6198165737098726E-06, 0.2939191169537379E-04, 0.1757274081045850E-01, 0.2538334128788367E-02, 0.1214929161054836E-02, 0.1521945367089819E-01, 0.3429581734551261E-05, 0.1402785915443734E-02, 0.3357116521683426E-18, 0.3903662538064461E-18}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 3.4295817345512611E-006, + dmin1: 2.3532871395603098E-003, + dmin2: 0.12033927154650945, + dn: 3.4295817345512611E-006, + dn1: 2.3532871395603098E-003, + dn2: 0.12033927154650945, + tau: 1.8442717265434725E-004, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1297603528523410E+01, 0.1297787955696064E+01, 0.3357116521683426E-18, 0.3903662538064461E-18, 0.1140472310649104E+01, 0.1115927978334052E+01, 0.2602676813137004E-01, 0.2472875948770642E-01, 0.1178944177153024E+01, 0.1200335520440015E+01, 0.4690536984322235E-02, 0.4819852017032840E-02, 0.1162892989954071E+01, 0.1147313495486085E+01, 0.1102729651913737E-01, 0.2045445862496274E-01, 0.6200597480662705E+00, 0.6269325458753436E+00, 0.3627015421456806E-02, 0.4338925882718484E-02, 0.5145118312415766E+00, 0.5183232738356738E+00, 0.3281495925457712E-14, 0.1400860159256393E-13, 0.1203686634582048E+00, 0.1205236987191671E+00, 0.6198165737098726E-06, 0.2939191169537379E-04, 0.1757274081045850E-01, 0.2538334128788367E-02, 0.1214929161054836E-02, 0.1521945367089819E-01, 0.3429581734551261E-05, 0.1402785915443734E-02, 0.3357116521683426E-18, 0.3903662538064461E-18}, + tauOut: 3.2077610710809750E-006, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1297603528523410E+01, 0.1297600320762339E+01, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1140472310649104E+01, 0.1166495871019403E+01, 0.2602676813137004E-01, 0.2630451380147252E-01, 0.1178944177153024E+01, 0.1157326992574803E+01, 0.4690536984322235E-02, 0.4713095445958055E-02, 0.1162892989954071E+01, 0.1169203983266179E+01, 0.1102729651913737E-01, 0.5848066547299594E-02, 0.6200597480662705E+00, 0.6178354891793567E+00, 0.3627015421456806E-02, 0.3020451850239120E-02, 0.5145118312415766E+00, 0.5114881716302697E+00, 0.3281495925457712E-14, 0.7722354114894537E-15, 0.1203686634582048E+00, 0.1203660755137067E+00, 0.6198165737098726E-06, 0.9048958315991394E-07, 0.1757274081045850E-01, 0.1878437172085910E-01, 0.1214929161054836E-02, 0.2218173128942313E-06, 0.3429581734551261E-05, 0.3350576054907334E-11, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 3.3505760549073344E-012, + dmin1: 1.7569442559804263E-002, + dmin2: 0.12036545569713296, + dn: 3.3505760549073344E-012, + dn1: 1.7569442559804263E-002, + dn2: 0.12036545569713296, + tau: 3.2077610710809750E-006, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1297603528523410E+01, 0.1297600320762339E+01, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1140472310649104E+01, 0.1166495871019403E+01, 0.2602676813137004E-01, 0.2630451380147252E-01, 0.1178944177153024E+01, 0.1157326992574803E+01, 0.4690536984322235E-02, 0.4713095445958055E-02, 0.1162892989954071E+01, 0.1169203983266179E+01, 0.1102729651913737E-01, 0.5848066547299594E-02, 0.6200597480662705E+00, 0.6178354891793567E+00, 0.3627015421456806E-02, 0.3020451850239120E-02, 0.5145118312415766E+00, 0.5114881716302697E+00, 0.3281495925457712E-14, 0.7722354114894537E-15, 0.1203686634582048E+00, 0.1203660755137067E+00, 0.6198165737098726E-06, 0.9048958315991394E-07, 0.1757274081045850E-01, 0.1878437172085910E-01, 0.1214929161054836E-02, 0.2218173128942313E-06, 0.3429581734551261E-05, 0.3350576054907334E-11, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1094206688544886E+01}, + tauOut: 3.3505364896797715E-012, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1297600320758988E+01, 0.1297600320762339E+01, 0.2652482201353177E-18, 0.2950599175525191E-18, 0.1192800384817525E+01, 0.1166495871019403E+01, 0.2552222839336001E-01, 0.2630451380147252E-01, 0.1136517859624050E+01, 0.1157326992574803E+01, 0.4848643531876122E-02, 0.4713095445958055E-02, 0.1170203406278252E+01, 0.1169203983266179E+01, 0.3087619670750762E-02, 0.5848066547299594E-02, 0.6177683213554945E+00, 0.6178354891793567E+00, 0.2500816796475141E-02, 0.3020451850239120E-02, 0.5089873548304448E+00, 0.5114881716302697E+00, 0.1826193617023393E-15, 0.7722354114894537E-15, 0.1203661659999391E+00, 0.1203660755137067E+00, 0.1412182528886294E-07, 0.9048958315991394E-07, 0.1878457941299617E-01, 0.1878437172085910E-01, 0.3956520722700361E-16, 0.2218173128942313E-06, 0.2033579915109003E-22, 0.3350576054907334E-11, 0.2652482201353177E-18, 0.2950599175525191E-18}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 2.0335799151090034E-023, + dmin1: 1.8784357595683275E-002, + dmin2: 0.12036607551035594, + dn: 2.0335799151090034E-023, + dn1: 1.8784357595683275E-002, + dn2: 0.12036607551035594, + tau: 3.3505364896797715E-012, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1297600320758988E+01, 0.1297600320762339E+01, 0.2652482201353177E-18, 0.2950599175525191E-18, 0.1192800384817525E+01, 0.1166495871019403E+01, 0.2552222839336001E-01, 0.2630451380147252E-01, 0.1136517859624050E+01, 0.1157326992574803E+01, 0.4848643531876122E-02, 0.4713095445958055E-02, 0.1170203406278252E+01, 0.1169203983266179E+01, 0.3087619670750762E-02, 0.5848066547299594E-02, 0.6177683213554945E+00, 0.6178354891793567E+00, 0.2500816796475141E-02, 0.3020451850239120E-02, 0.5089873548304448E+00, 0.5114881716302697E+00, 0.1826193617023393E-15, 0.7722354114894537E-15, 0.1203661659999391E+00, 0.1203660755137067E+00, 0.1412182528886294E-07, 0.9048958315991394E-07, 0.1878457941299617E-01, 0.1878437172085910E-01, 0.3956520722700361E-16, 0.2218173128942313E-06, 0.2033579915109003E-22, 0.3350576054907334E-11, 0.2652482201353177E-18, 0.2950599175525191E-18}, + tauOut: 2.0335799151089990E-023, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1297600320758988E+01, 0.1297600320758988E+01, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1192800384817525E+01, 0.1218322613210885E+01, 0.2552222839336001E-01, 0.2380852827644004E-01, 0.1136517859624050E+01, 0.1117557974879486E+01, 0.4848643531876122E-02, 0.5077051306839188E-02, 0.1170203406278252E+01, 0.1168213974642164E+01, 0.3087619670750762E-02, 0.1632777609571200E-02, 0.6177683213554945E+00, 0.6186363605423986E+00, 0.2500816796475141E-02, 0.2057564358223963E-02, 0.5089873548304448E+00, 0.5069297904722210E+00, 0.1826193617023393E-15, 0.4336141378669131E-16, 0.1203661659999391E+00, 0.1203661801217644E+00, 0.1412182528886294E-07, 0.2203879431304952E-08, 0.1878457941299617E-01, 0.1878457720911678E-01, 0.3956520722700361E-16, 0.4283248425464200E-37, 0.1183377192742860E+01}, + i0: 1, + n0: 8, + pp: 1, + n0in: 9, + dmin: 2.0335799151089993E-023, + dmin1: 1.8784577209116738E-002, + dmin2: 0.12036616599993906, + dn: 2.0335799151089993E-023, + dn1: 1.8784577209116738E-002, + dn2: 0.12036616599993906, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1297600320758988E+01, 0.1297600320758988E+01, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1192800384817525E+01, 0.1218322613210885E+01, 0.2552222839336001E-01, 0.2380852827644004E-01, 0.1136517859624050E+01, 0.1117557974879486E+01, 0.4848643531876122E-02, 0.5077051306839188E-02, 0.1170203406278252E+01, 0.1168213974642164E+01, 0.3087619670750762E-02, 0.1632777609571200E-02, 0.6177683213554945E+00, 0.6186363605423986E+00, 0.2500816796475141E-02, 0.2057564358223963E-02, 0.5089873548304448E+00, 0.5069297904722210E+00, 0.1826193617023393E-15, 0.4336141378669131E-16, 0.1203661659999391E+00, 0.1203661801217644E+00, 0.1412182528886294E-07, 0.2203879431304952E-08, 0.1878457941299617E-01, 0.1878457720911678E-01, 0.3956520722700361E-16, 0.4283248425464200E-37, 0.1183377192742860E+01}, + tauOut: 1.8784576682472597E-002, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1278815744076516E+01, 0.1297600320758988E+01, 0.2322916695987584E-18, 0.2438256017573345E-18, 0.1223346564804853E+01, 0.1218322613210885E+01, 0.2174969171530204E-01, 0.2380852827644004E-01, 0.1082100757788551E+01, 0.1117557974879486E+01, 0.5481081353963683E-02, 0.5077051306839188E-02, 0.1145581094215299E+01, 0.1168213974642164E+01, 0.8817320773368219E-03, 0.1632777609571200E-02, 0.6010276161408131E+00, 0.6186363605423986E+00, 0.1735428857154564E-02, 0.2057564358223963E-02, 0.4864097849325938E+00, 0.5069297904722210E+00, 0.1073014545319338E-16, 0.4336141378669131E-16, 0.1015816056431712E+00, 0.1203661801217644E+00, 0.4075436992240071E-09, 0.2203879431304952E-08, 0.1191004794787176E-09, 0.1878457720911678E-01, 0.2322916695987584E-18, 0.2438256017573345E-18}, + i0: 1, + n0: 8, + pp: 0, + n0in: 8, + dmin: 1.1910047947871760E-010, + dmin1: 0.10158160343929173, + dmin2: 0.48640978493259379, + dn: 1.1910047947871760E-010, + dn1: 0.10158160343929173, + dn2: 0.48640978493259379, + tau: 1.8784576682472597E-002, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.1278815744076516E+01, 0.1297600320758988E+01, 0.2322916695987584E-18, 0.2438256017573345E-18, 0.1223346564804853E+01, 0.1218322613210885E+01, 0.2174969171530204E-01, 0.2380852827644004E-01, 0.1082100757788551E+01, 0.1117557974879486E+01, 0.5481081353963683E-02, 0.5077051306839188E-02, 0.1145581094215299E+01, 0.1168213974642164E+01, 0.8817320773368219E-03, 0.1632777609571200E-02, 0.6010276161408131E+00, 0.6186363605423986E+00, 0.1735428857154564E-02, 0.2057564358223963E-02, 0.4864097849325938E+00, 0.5069297904722210E+00, 0.1073014545319338E-16, 0.4336141378669131E-16, 0.1015816056431712E+00, 0.1203661801217644E+00, 0.4075436992240071E-09, 0.2203879431304952E-08, 0.1191004794787176E-09, 0.1878457720911678E-01, 0.2322916695987584E-18, 0.2438256017573345E-18}, + tauOut: 1.1910047900088848E-010, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1278815744076516E+01, 0.1278815743957415E+01, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1223346564804853E+01, 0.1245096256401054E+01, 0.2174969171530204E-01, 0.1890244048666934E-01, 0.1082100757788551E+01, 0.1068679398536745E+01, 0.5481081353963683E-02, 0.5875497537946494E-02, 0.1145581094215299E+01, 0.1140587328635589E+01, 0.8817320773368219E-03, 0.4646249482278370E-03, 0.6010276161408131E+00, 0.6022984199306394E+00, 0.1735428857154564E-02, 0.1401513849681988E-02, 0.4864097849325938E+00, 0.4850082709638114E+00, 0.1073014545319338E-16, 0.2247354260070927E-17, 0.1015816056431712E+00, 0.1015816059316144E+00, 0.4075436992240071E-09, 0.4778291260603437E-18, 0.1191004794787176E-09, 0.0000000000000000E+00, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1183377192742860E+01}, + i0: 1, + n0: 8, + pp: 1, + n0in: 8, + dmin: 0.0000000000000000, + dmin1: 0.10158160552407068, + dmin2: 0.48500827096381138, + dn: 0.0000000000000000, + dn1: 0.10158160552407068, + dn2: 0.48500827096381138, + tau: 1.1910047900088848E-010, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1278815744076516E+01, 0.1278815743957415E+01, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1223346564804853E+01, 0.1245096256401054E+01, 0.2174969171530204E-01, 0.1890244048666934E-01, 0.1082100757788551E+01, 0.1068679398536745E+01, 0.5481081353963683E-02, 0.5875497537946494E-02, 0.1145581094215299E+01, 0.1140587328635589E+01, 0.8817320773368219E-03, 0.4646249482278370E-03, 0.6010276161408131E+00, 0.6022984199306394E+00, 0.1735428857154564E-02, 0.1401513849681988E-02, 0.4864097849325938E+00, 0.4850082709638114E+00, 0.1073014545319338E-16, 0.2247354260070927E-17, 0.1015816056431712E+00, 0.1015816059316144E+00, 0.4075436992240071E-09, 0.4778291260603437E-18, 0.1191004794787176E-09, 0.0000000000000000E+00, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1183377192742860E+01}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1263998696887723E+01, 0.1245096256401054E+01, 0.1598154237018549E-01, 0.1890244048666934E-01, 0.1058573353704506E+01, 0.1068679398536745E+01, 0.6330707284251229E-02, 0.5875497537946494E-02, 0.1134721246299565E+01, 0.1140587328635589E+01, 0.2466181655543824E-03, 0.4646249482278370E-03, 0.6034533156147670E+00, 0.6022984199306394E+00, 0.1126426504548419E-02, 0.1401513849681988E-02, 0.4838818444592630E+00, 0.4850082709638114E+00, 0.4717884282068346E-18, 0.2247354260070927E-17, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.4778291260603437E-18}, + i0: 1, + n0: 7, + pp: 0, + n0in: 8, + dmin: 0.0000000000000000, + dmin1: 0.10158160593161437, + dmin2: 0.48388184445926297, + dn: 0.0000000000000000, + dn1: 0.10158160593161437, + dn2: 0.48388184445926297, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1263998696887723E+01, 0.1245096256401054E+01, 0.1598154237018549E-01, 0.1890244048666934E-01, 0.1058573353704506E+01, 0.1068679398536745E+01, 0.6330707284251229E-02, 0.5875497537946494E-02, 0.1134721246299565E+01, 0.1140587328635589E+01, 0.2466181655543824E-03, 0.4646249482278370E-03, 0.6034533156147670E+00, 0.6022984199306394E+00, 0.1126426504548419E-02, 0.1401513849681988E-02, 0.4838818444592630E+00, 0.4850082709638114E+00, 0.4717884282068346E-18, 0.2247354260070927E-17, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.4778291260603437E-18}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2138497627045302E-18, 0.1263998696887723E+01, 0.1279980239257909E+01, 0.1598154237018549E-01, 0.1321710631563048E-01, 0.1058573353704506E+01, 0.1051686954673127E+01, 0.6330707284251229E-02, 0.6830538334266978E-02, 0.1134721246299565E+01, 0.1128137326130852E+01, 0.2466181655543824E-03, 0.1319188242844840E-03, 0.6034533156147670E+00, 0.6044478232950309E+00, 0.1126426504548419E-02, 0.9017442261557238E-03, 0.4838818444592630E+00, 0.4829801002331072E+00, 0.4717884282068346E-18, 0.9922774494036444E-19, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.2138497627045302E-18, 0.1202161769544433E+01}, + i0: 1, + n0: 7, + pp: 1, + n0in: 7, + dmin: 0.10158160593161437, + dmin1: 0.48298010023310722, + dmin2: 0.60332139679048247, + dn: 0.10158160593161437, + dn1: 0.48298010023310722, + dn2: 0.60332139679048247, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2138497627045302E-18, 0.1263998696887723E+01, 0.1279980239257909E+01, 0.1598154237018549E-01, 0.1321710631563048E-01, 0.1058573353704506E+01, 0.1051686954673127E+01, 0.6330707284251229E-02, 0.6830538334266978E-02, 0.1134721246299565E+01, 0.1128137326130852E+01, 0.2466181655543824E-03, 0.1319188242844840E-03, 0.6034533156147670E+00, 0.6044478232950309E+00, 0.1126426504548419E-02, 0.9017442261557238E-03, 0.4838818444592630E+00, 0.4829801002331072E+00, 0.4717884282068346E-18, 0.9922774494036444E-19, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.2138497627045302E-18, 0.1202161769544433E+01}, + tauOut: 0.10158160593161437, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1177234138025801E+01, 0.1278815743957415E+01, 0.2325140442247288E-18, 0.2138497627045302E-18, 0.1191615739641925E+01, 0.1279980239257909E+01, 0.1166505092896250E-01, 0.1321710631563048E-01, 0.9452708361468171E+00, 0.1051686954673127E+01, 0.8151933771558135E-02, 0.6830538334266978E-02, 0.1018535705251965E+01, 0.1128137326130852E+01, 0.7828694249915420E-04, 0.1319188242844840E-03, 0.5036896746470730E+00, 0.6044478232950309E+00, 0.8646683437346259E-03, 0.9017442261557238E-03, 0.3805338259577582E+00, 0.4829801002331072E+00, 0.2648835135390502E-19, 0.9922774494036444E-19, 0.0000000000000000E+00, 0.1015816059316144E+00, 0.2325140442247288E-18, 0.2138497627045302E-18}, + i0: 1, + n0: 7, + pp: 0, + n0in: 7, + dmin: 0.0000000000000000, + dmin1: 0.38053382595775820, + dmin2: 0.50278793042091730, + dn: 0.0000000000000000, + dn1: 0.38053382595775820, + dn2: 0.50278793042091730, + tau: 0.10158160593161437, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1177234138025801E+01, 0.1278815743957415E+01, 0.2325140442247288E-18, 0.2138497627045302E-18, 0.1191615739641925E+01, 0.1279980239257909E+01, 0.1166505092896250E-01, 0.1321710631563048E-01, 0.9452708361468171E+00, 0.1051686954673127E+01, 0.8151933771558135E-02, 0.6830538334266978E-02, 0.1018535705251965E+01, 0.1128137326130852E+01, 0.7828694249915420E-04, 0.1319188242844840E-03, 0.5036896746470730E+00, 0.6044478232950309E+00, 0.8646683437346259E-03, 0.9017442261557238E-03, 0.3805338259577582E+00, 0.4829801002331072E+00, 0.2648835135390502E-19, 0.9922774494036444E-19, 0.0000000000000000E+00, 0.1015816059316144E+00, 0.2325140442247288E-18, 0.2138497627045302E-18}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1191615739641925E+01, 0.1203280790570888E+01, 0.1166505092896250E-01, 0.9163806595868684E-02, 0.9452708361468171E+00, 0.9442589633225065E+00, 0.8151933771558135E-02, 0.8793176380307672E-02, 0.1018535705251965E+01, 0.1009820815814156E+01, 0.7828694249915420E-04, 0.3904883319791864E-04, 0.5036896746470730E+00, 0.5045152941576099E+00, 0.8646683437346259E-03, 0.6521815232088979E-03, 0.3805338259577582E+00, 0.3798816444345493E+00, 0.2648835135390502E-19, 0.0000000000000000E+00, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + n0in: 7, + dmin: 0.0000000000000000, + dmin1: 0.37988164443454930, + dmin2: 0.50365062581387521, + dn: 0.0000000000000000, + dn1: 0.37988164443454930, + dn2: 0.50365062581387521, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1191615739641925E+01, 0.1203280790570888E+01, 0.1166505092896250E-01, 0.9163806595868684E-02, 0.9452708361468171E+00, 0.9442589633225065E+00, 0.8151933771558135E-02, 0.8793176380307672E-02, 0.1018535705251965E+01, 0.1009820815814156E+01, 0.7828694249915420E-04, 0.3904883319791864E-04, 0.5036896746470730E+00, 0.5045152941576099E+00, 0.8646683437346259E-03, 0.6521815232088979E-03, 0.3805338259577582E+00, 0.3798816444345493E+00, 0.2648835135390502E-19, 0.0000000000000000E+00, 0.1303743375476047E+01}, + tauOut: -0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2405618249359890E-18, 0.2353545363971710E-18, 0.1212444597166756E+01, 0.1203280790570888E+01, 0.7136826323052847E-02, 0.9163806595868684E-02, 0.9459153133797613E+00, 0.9442589633225065E+00, 0.9387238392656353E-02, 0.8793176380307672E-02, 0.1000472626254697E+01, 0.1009820815814156E+01, 0.1969142688202247E-04, 0.3904883319791864E-04, 0.5051477842539368E+00, 0.5045152941576099E+00, 0.4904540754787929E-03, 0.6521815232088979E-03, 0.3793911903590705E+00, 0.3798816444345493E+00, 0.2405618249359890E-18, 0.2353545363971710E-18}, + i0: 1, + n0: 6, + pp: 0, + n0in: 6, + dmin: 0.37939119035907048, + dmin1: 0.50449560273072791, + dmin2: 0.93712213699945368, + dn: 0.37939119035907048, + dn1: 0.50449560273072791, + dn2: 1.0004335774214996, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2405618249359890E-18, 0.2353545363971710E-18, 0.1212444597166756E+01, 0.1203280790570888E+01, 0.7136826323052847E-02, 0.9163806595868684E-02, 0.9459153133797613E+00, 0.9442589633225065E+00, 0.9387238392656353E-02, 0.8793176380307672E-02, 0.1000472626254697E+01, 0.1009820815814156E+01, 0.1969142688202247E-04, 0.3904883319791864E-04, 0.5051477842539368E+00, 0.5045152941576099E+00, 0.4904540754787929E-03, 0.6521815232088979E-03, 0.3793911903590705E+00, 0.3798816444345493E+00, 0.2405618249359890E-18, 0.2353545363971710E-18}, + tauOut: 0.37791671367087804, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1177234138025801E+01, 0.7993174243549228E+00, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1212444597166756E+01, 0.8416647098189309E+00, 0.7136826323052847E-02, 0.8020810697124018E-02, 0.9459153133797613E+00, 0.5693650274044155E+00, 0.9387238392656353E-02, 0.1649499810480807E-01, 0.1000472626254697E+01, 0.6060806059058935E+00, 0.1969142688202247E-04, 0.1641214148963635E-04, 0.5051477842539368E+00, 0.1277051125170478E+00, 0.4904540754787929E-03, 0.1457059563590431E-02, 0.3793911903590705E+00, 0.1741712460201494E-04, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + n0in: 6, + dmin: 1.7417124602014944E-005, + dmin1: 0.12721465844156904, + dmin2: 0.55997778901175921, + dn: 1.7417124602014944E-005, + dn1: 0.12721465844156904, + dn2: 0.60606091447901145, + tau: 0.37791671367087804, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1177234138025801E+01, 0.7993174243549228E+00, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1212444597166756E+01, 0.8416647098189309E+00, 0.7136826323052847E-02, 0.8020810697124018E-02, 0.9459153133797613E+00, 0.5693650274044155E+00, 0.9387238392656353E-02, 0.1649499810480807E-01, 0.1000472626254697E+01, 0.6060806059058935E+00, 0.1969142688202247E-04, 0.1641214148963635E-04, 0.5051477842539368E+00, 0.1277051125170478E+00, 0.4904540754787929E-03, 0.1457059563590431E-02, 0.3793911903590705E+00, 0.1741712460201494E-04, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1303743375476047E+01}, + tauOut: 1.7220607103034587E-005, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.7993002037478197E+00, 0.7993174243549228E+00, 0.3842364192156412E-18, 0.3648961927279404E-18, 0.8496682999089519E+00, 0.8416647098189309E+00, 0.5374766956544110E-02, 0.8020810697124018E-02, 0.5804680379455763E+00, 0.5693650274044155E+00, 0.1722282329473577E-01, 0.1649499810480807E-01, 0.5888569741455443E+00, 0.6060806059058935E+00, 0.3559292778388127E-05, 0.1641214148963635E-04, 0.1291413921807568E+00, 0.1277051125170478E+00, 0.1965116493098606E-06, 0.1457059563590431E-02, 0.5849670496393478E-11, 0.1741712460201494E-04, 0.3842364192156412E-18, 0.3648961927279404E-18}, + i0: 1, + n0: 6, + pp: 0, + n0in: 6, + dmin: 5.8496704963934779E-012, + dmin1: 0.12768433261716639, + dmin2: 0.56397303984076830, + dn: 5.8496704963934779E-012, + dn1: 0.12768433261716639, + dn2: 0.58884056200405466, + tau: 1.7220607103034587E-005, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.7993002037478197E+00, 0.7993174243549228E+00, 0.3842364192156412E-18, 0.3648961927279404E-18, 0.8496682999089519E+00, 0.8416647098189309E+00, 0.5374766956544110E-02, 0.8020810697124018E-02, 0.5804680379455763E+00, 0.5693650274044155E+00, 0.1722282329473577E-01, 0.1649499810480807E-01, 0.5888569741455443E+00, 0.6060806059058935E+00, 0.3559292778388127E-05, 0.1641214148963635E-04, 0.1291413921807568E+00, 0.1277051125170478E+00, 0.1965116493098606E-06, 0.1457059563590431E-02, 0.5849670496393478E-11, 0.1741712460201494E-04, 0.3842364192156412E-18, 0.3648961927279404E-18}, + tauOut: 5.8496615949827599E-012, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.7993002037478197E+00, 0.7993002037419701E+00, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.8496682999089519E+00, 0.8550430668596465E+00, 0.5374766956544110E-02, 0.3648799166500929E-02, 0.5804680379455763E+00, 0.5940420620679615E+00, 0.1722282329473577E-01, 0.1707249411982080E-01, 0.5888569741455443E+00, 0.5717880393126522E+00, 0.3559292778388127E-05, 0.8038853438286423E-06, 0.1291413921807568E+00, 0.1291407848012127E+00, 0.1965116493098606E-06, 0.8901358303923820E-17, 0.5849670496393478E-11, 0.5241368559131172E-22, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + n0in: 6, + dmin: 5.2413685591311719E-023, + dmin1: 0.12914058828956335, + dmin2: 0.57178448001987381, + dn: 5.2413685591311719E-023, + dn1: 0.12914058828956335, + dn2: 0.57178448001987381, + tau: 5.8496615949827599E-012, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.7993002037478197E+00, 0.7993002037419701E+00, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.8496682999089519E+00, 0.8550430668596465E+00, 0.5374766956544110E-02, 0.3648799166500929E-02, 0.5804680379455763E+00, 0.5940420620679615E+00, 0.1722282329473577E-01, 0.1707249411982080E-01, 0.5888569741455443E+00, 0.5717880393126522E+00, 0.3559292778388127E-05, 0.8038853438286423E-06, 0.1291413921807568E+00, 0.1291407848012127E+00, 0.1965116493098606E-06, 0.8901358303923820E-17, 0.5849670496393478E-11, 0.5241368559131172E-22, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.1303743375476047E+01}, + tauOut: 5.2413685591311714E-023, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.7993002037419701E+00, 0.7993002037419701E+00, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.8586918660261474E+00, 0.8550430668596465E+00, 0.2524235138002424E-02, 0.3648799166500929E-02, 0.6085903210497798E+00, 0.5940420620679615E+00, 0.1604009725641142E-01, 0.1707249411982080E-01, 0.5557487459415846E+00, 0.5717880393126522E+00, 0.1868009328861996E-06, 0.8038853438286423E-06, 0.1291405980002798E+00, 0.1291407848012127E+00, 0.3612752323451872E-38, 0.8901358303923820E-17}, + i0: 1, + n0: 5, + pp: 0, + n0in: 6, + dmin: 5.2413685591311719E-023, + dmin1: 0.12914059800027977, + dmin2: 0.55574794205624078, + dn: 5.2413685591311719E-023, + dn1: 0.12914059800027977, + dn2: 0.55574794205624078, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.7993002037419701E+00, 0.7993002037419701E+00, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.8586918660261474E+00, 0.8550430668596465E+00, 0.2524235138002424E-02, 0.3648799166500929E-02, 0.6085903210497798E+00, 0.5940420620679615E+00, 0.1604009725641142E-01, 0.1707249411982080E-01, 0.5557487459415846E+00, 0.5717880393126522E+00, 0.1868009328861996E-06, 0.8038853438286423E-06, 0.1291405980002798E+00, 0.1291407848012127E+00, 0.3612752323451872E-38, 0.8901358303923820E-17}, + tauOut: 0.12914051019182277, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.7993002037419701E+00, 0.6701596935501473E+00, 0.4369342452764876E-18, 0.5598544436768911E-18, 0.8586918660261474E+00, 0.7320755909723271E+00, 0.2524235138002424E-02, 0.2098451433139096E-02, 0.6085903210497798E+00, 0.4933914566812295E+00, 0.1604009725641142E-01, 0.1806732527351204E-01, 0.5557487459415846E+00, 0.4085410972771827E+00, 0.1868009328861996E-06, 0.5904812108429529E-07, 0.1291405980002798E+00, 0.2876033591836524E-07, 0.3612752323451872E-38, 0.5598544436768911E-18, 0.1681677309759878E+01}, + i0: 1, + n0: 5, + pp: 1, + n0in: 5, + dmin: 2.8760335918365243E-008, + dmin1: 0.40854091047624980, + dmin2: 0.47735135942481804, + dn: 2.8760335918365243E-008, + dn1: 0.40854091047624980, + dn2: 0.47735135942481804, + tau: 0.12914051019182277, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.7993002037419701E+00, 0.6701596935501473E+00, 0.4369342452764876E-18, 0.5598544436768911E-18, 0.8586918660261474E+00, 0.7320755909723271E+00, 0.2524235138002424E-02, 0.2098451433139096E-02, 0.6085903210497798E+00, 0.4933914566812295E+00, 0.1604009725641142E-01, 0.1806732527351204E-01, 0.5557487459415846E+00, 0.4085410972771827E+00, 0.1868009328861996E-06, 0.5904812108429529E-07, 0.1291405980002798E+00, 0.2876033591836524E-07, 0.3612752323451872E-38, 0.5598544436768911E-18, 0.1681677309759878E+01}, + tauOut: 2.8760330654564486E-008, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.6701596647898166E+00, 0.6701596935501473E+00, 0.6115792910959321E-18, 0.5598544436768911E-18, 0.7341740136451356E+00, 0.7320755909723271E+00, 0.1410235162411720E-02, 0.2098451433139096E-02, 0.5100485180319990E+00, 0.4933914566812295E+00, 0.1447165246275905E-01, 0.1806732527351204E-01, 0.3940694751022140E+00, 0.4085410972771827E+00, 0.4309503539425748E-14, 0.5904812108429529E-07, 0.9542972193014773E-15, 0.2876033591836524E-07, 0.6115792910959321E-18, 0.5598544436768911E-18}, + i0: 1, + n0: 5, + pp: 0, + n0in: 5, + dmin: 9.5429721930147733E-016, + dmin1: 0.39406941605409296, + dmin2: 0.49198119275848701, + dn: 9.5429721930147733E-016, + dn1: 0.39406941605409296, + dn2: 0.49198119275848701, + tau: 2.8760330654564486E-008, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.6701596647898166E+00, 0.6701596935501473E+00, 0.6115792910959321E-18, 0.5598544436768911E-18, 0.7341740136451356E+00, 0.7320755909723271E+00, 0.1410235162411720E-02, 0.2098451433139096E-02, 0.5100485180319990E+00, 0.4933914566812295E+00, 0.1447165246275905E-01, 0.1806732527351204E-01, 0.3940694751022140E+00, 0.4085410972771827E+00, 0.4309503539425748E-14, 0.5904812108429529E-07, 0.9542972193014773E-15, 0.2876033591836524E-07, 0.6115792910959321E-18, 0.5598544436768911E-18}, + tauOut: 9.5429721930146451E-016, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.6701596647898166E+00, 0.6701596647898156E+00, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.7341740136451356E+00, 0.7355842488075462E+00, 0.1410235162411720E-02, 0.9778463253267723E-03, 0.5100485180319990E+00, 0.5235423241694304E+00, 0.1447165246275905E-01, 0.1089278980244500E-01, 0.3940694751022140E+00, 0.3831766852997724E+00, 0.4309503539425748E-14, 0.1073277003016631E-28, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 5, + dmin: 1.9721522630525295E-030, + dmin1: 0.38317668529976806, + dmin2: 0.50907067170667131, + dn: 1.9721522630525295E-030, + dn1: 0.38317668529976806, + dn2: 0.50907067170667131, + tau: 9.5429721930146451E-016, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.6701596647898166E+00, 0.6701596647898156E+00, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.7341740136451356E+00, 0.7355842488075462E+00, 0.1410235162411720E-02, 0.9778463253267723E-03, 0.5100485180319990E+00, 0.5235423241694304E+00, 0.1447165246275905E-01, 0.1089278980244500E-01, 0.3940694751022140E+00, 0.3831766852997724E+00, 0.4309503539425748E-14, 0.1073277003016631E-28, 0.1810817848712033E+01}, + tauOut: 0.31895966905528556, + ttypeOut: -8, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3511999957345300E+00, 0.6701596647898156E+00, 0.1403302870260262E-17, 0.6699979816704878E-18, 0.4176024260775874E+00, 0.7355842488075462E+00, 0.1225912269357841E-02, 0.9778463253267723E-03, 0.2142495326472319E+00, 0.5235423241694304E+00, 0.1948131712866055E-01, 0.1089278980244500E-01, 0.4473569911582631E-01, 0.3831766852997724E+00, 0.1403302870260262E-17, 0.6699979816704878E-18}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 4.4735699115826311E-002, + dmin1: 0.20335674284478694, + dmin2: 0.35119999573453003, + dn: 4.4735699115826311E-002, + dn1: 0.20335674284478694, + dn2: 0.41662457975226058, + tau: 0.31895966905528556, + ttype: -8, + g: 0.0000000000000000, + zOut: []float64{0.3511999957345300E+00, 0.6701596647898156E+00, 0.1403302870260262E-17, 0.6699979816704878E-18, 0.4176024260775874E+00, 0.7355842488075462E+00, 0.1225912269357841E-02, 0.9778463253267723E-03, 0.2142495326472319E+00, 0.5235423241694304E+00, 0.1948131712866055E-01, 0.1089278980244500E-01, 0.4473569911582631E-01, 0.3831766852997724E+00, 0.1403302870260262E-17, 0.6699979816704878E-18}, + tauOut: 3.9897804510299034E-002, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3511999957345300E+00, 0.3113021912242310E+00, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.4176024260775874E+00, 0.3789305338366462E+00, 0.1225912269357841E-02, 0.6931379430343076E-03, 0.2142495326472319E+00, 0.1931399073225591E+00, 0.1948131712866055E-01, 0.4512326600593524E-02, 0.4473569911582631E-01, 0.3255680049337531E-03, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 4, + dmin: 3.2556800493375310E-004, + dmin1: 0.17365859019389857, + dmin2: 0.31130219122423097, + dn: 3.2556800493375310E-004, + dn1: 0.17365859019389857, + dn2: 0.37770462156728835, + tau: 3.9897804510299034E-002, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.3511999957345300E+00, 0.3113021912242310E+00, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.4176024260775874E+00, 0.3789305338366462E+00, 0.1225912269357841E-02, 0.6931379430343076E-03, 0.2142495326472319E+00, 0.1931399073225591E+00, 0.1948131712866055E-01, 0.4512326600593524E-02, 0.4473569911582631E-01, 0.3255680049337531E-03, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.1810817848712033E+01}, + tauOut: 3.1797943619548145E-004, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3109842117880355E+00, 0.3113021912242310E+00, 0.2293789231233262E-17, 0.1882488140663987E-17, 0.3793056923434850E+00, 0.3789305338366462E+00, 0.3529411785314453E-03, 0.6931379430343076E-03, 0.1969813133084257E+00, 0.1931399073225591E+00, 0.7457911333267062E-05, 0.4512326600593524E-02, 0.1306574050045526E-06, 0.3255680049337531E-03, 0.2293789231233262E-17, 0.1882488140663987E-17}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 1.3065740500455263E-007, + dmin1: 0.19246898670783216, + dmin2: 0.31098421178803548, + dn: 1.3065740500455263E-007, + dn1: 0.19246898670783216, + dn2: 0.37861255440045072, + tau: 3.1797943619548145E-004, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.3109842117880355E+00, 0.3113021912242310E+00, 0.2293789231233262E-17, 0.1882488140663987E-17, 0.3793056923434850E+00, 0.3789305338366462E+00, 0.3529411785314453E-03, 0.6931379430343076E-03, 0.1969813133084257E+00, 0.1931399073225591E+00, 0.7457911333267062E-05, 0.4512326600593524E-02, 0.1306574050045526E-06, 0.3255680049337531E-03, 0.2293789231233262E-17, 0.1882488140663987E-17}, + tauOut: 1.3065240973281283E-007, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3109842117880355E+00, 0.3109840811356258E+00, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.3793056923434850E+00, 0.3796585028696068E+00, 0.3529411785314453E-03, 0.1831193463132450E-03, 0.1969813133084257E+00, 0.1968055212210360E+00, 0.7457911333267062E-05, 0.4951239861123181E-11, 0.1306574050045526E-06, 0.4403187866809611E-13, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 4, + dmin: 4.4031878668096113E-014, + dmin1: 0.19679806330970273, + dmin2: 0.31098408113562576, + dn: 4.4031878668096113E-014, + dn1: 0.19679806330970273, + dn2: 0.37930556169107532, + tau: 1.3065240973281283E-007, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.3109842117880355E+00, 0.3109840811356258E+00, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.3793056923434850E+00, 0.3796585028696068E+00, 0.3529411785314453E-03, 0.1831193463132450E-03, 0.1969813133084257E+00, 0.1968055212210360E+00, 0.7457911333267062E-05, 0.4951239861123181E-11, 0.1306574050045526E-06, 0.4403187866809611E-13, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.1810817848712033E+01}, + tauOut: 4.4031878666982759E-014, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3109840811355817E+00, 0.3109840811356258E+00, 0.3415542419024794E-17, 0.2797722987188916E-17, 0.3798416222158761E+00, 0.3796585028696068E+00, 0.9487875021856221E-04, 0.1831193463132450E-03, 0.1967106424757246E+00, 0.1968055212210360E+00, 0.1108289770587888E-23, 0.4951239861123181E-11, 0.5067642455139780E-26, 0.4403187866809611E-13, 0.3415542419024794E-17, 0.2797722987188916E-17}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 5.0676424551397798E-027, + dmin1: 0.19671064247077341, + dmin2: 0.31098408113558174, + dn: 5.0676424551397798E-027, + dn1: 0.19671064247077341, + dn2: 0.37965850286956282, + tau: 4.4031878666982759E-014, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.3109840811355817E+00, 0.3109840811356258E+00, 0.3415542419024794E-17, 0.2797722987188916E-17, 0.3798416222158761E+00, 0.3796585028696068E+00, 0.9487875021856221E-04, 0.1831193463132450E-03, 0.1967106424757246E+00, 0.1968055212210360E+00, 0.1108289770587888E-23, 0.4951239861123181E-11, 0.5067642455139780E-26, 0.4403187866809611E-13, 0.3415542419024794E-17, 0.2797722987188916E-17}, + tauOut: 5.0676424551397798E-027, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.3109840811355817E+00, 0.3109840811355817E+00, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.3798416222158761E+00, 0.3799365009660947E+00, 0.9487875021856221E-04, 0.4912310311151891E-04, 0.1967106424757246E+00, 0.1966615193726131E+00, 0.1108289770587888E-23, 0.2855879641297252E-49, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + n0in: 4, + dmin: 5.0676424551397798E-027, + dmin1: 0.19666151937261311, + dmin2: 0.31098408113558174, + dn: 5.0676424551397798E-027, + dn1: 0.19666151937261311, + dn2: 0.37984162221587608, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.3109840811355817E+00, 0.3109840811355817E+00, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.3798416222158761E+00, 0.3799365009660947E+00, 0.9487875021856221E-04, 0.4912310311151891E-04, 0.1967106424757246E+00, 0.1966615193726131E+00, 0.1108289770587888E-23, 0.2855879641297252E-49, 0.2169993432366266E+01}, + tauOut: 9.8330759686306557E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2126533214492752E+00, 0.3109840811355817E+00, 0.7453545812882342E-17, 0.4171805735046273E-17, 0.2816548643828996E+00, 0.3799365009660947E+00, 0.3429951091160839E-04, 0.4912310311151891E-04, 0.9829646017539498E-01, 0.1966615193726131E+00, 0.3799365009660947E+00, 0.2855879641297252E-49}, + i0: 1, + n0: 3, + pp: 0, + n0in: 3, + dmin: 9.8296460175394978E-002, + dmin1: 0.21265332144927518, + dmin2: 0.21265332144927518, + dn: 9.8296460175394978E-002, + dn1: 0.28160574127978810, + dn2: 0.21265332144927518, + tau: 9.8330759686306557E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.2126533214492752E+00, 0.3109840811355817E+00, 0.7453545812882342E-17, 0.4171805735046273E-17, 0.2816548643828996E+00, 0.3799365009660947E+00, 0.3429951091160839E-04, 0.4912310311151891E-04, 0.9829646017539498E-01, 0.1966615193726131E+00, 0.3799365009660947E+00, 0.2855879641297252E-49}, + tauOut: 9.7172513485343004E-002, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2126533214492752E+00, 0.1154808079639322E+00, 0.7453545812882342E-17, 0.1817901582187390E-16, 0.2816548643828996E+00, 0.1845166504084682E+00, 0.3429951091160839E-04, 0.1827217490071947E-04, 0.9829646017539498E-01, 0.1105674515151256E-02, 0.3799365009660947E+00, 0.2816548643828996E+00, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + n0in: 3, + dmin: 1.1056745151512559E-003, + dmin1: 0.11548080796393217, + dmin2: 0.11548080796393217, + dn: 1.1056745151512559E-003, + dn1: 0.18448235089755655, + dn2: 0.11548080796393217, + tau: 9.7172513485343004E-002, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2126533214492752E+00, 0.1154808079639322E+00, 0.7453545812882342E-17, 0.1817901582187390E-16, 0.2816548643828996E+00, 0.1845166504084682E+00, 0.3429951091160839E-04, 0.1827217490071947E-04, 0.9829646017539498E-01, 0.1105674515151256E-02, 0.3799365009660947E+00, 0.2816548643828996E+00, 0.2169993432366266E+01}, + tauOut: 1.0942861809085330E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1143865217830237E+00, 0.1154808079639322E+00, 0.2932453102768040E-16, 0.1817901582187390E-16, 0.1834406364024603E+00, 0.1845166504084682E+00, 0.1101341475930520E-06, 0.1827217490071947E-04, 0.1127820009512990E-04, 0.1105674515151256E-02, 0.1845166504084682E+00, 0.2816548643828996E+00}, + i0: 1, + n0: 3, + pp: 0, + n0in: 3, + dmin: 1.1278200095129901E-005, + dmin1: 0.11438652178302365, + dmin2: 0.11438652178302365, + dn: 1.1278200095129901E-005, + dn1: 0.18342236422755959, + dn2: 0.11438652178302365, + tau: 1.0942861809085330E-003, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1143865217830237E+00, 0.1154808079639322E+00, 0.2932453102768040E-16, 0.1817901582187390E-16, 0.1834406364024603E+00, 0.1845166504084682E+00, 0.1101341475930520E-06, 0.1827217490071947E-04, 0.1127820009512990E-04, 0.1105674515151256E-02, 0.1845166504084682E+00, 0.2816548643828996E+00}, + tauOut: 1.1269238360546607E-005, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1143865217830237E+00, 0.1143752525446631E+00, 0.2932453102768040E-16, 0.4703212027287794E-16, 0.1834406364024603E+00, 0.1834294772982473E+00, 0.1101341475930520E-06, 0.6771621290952006E-11, 0.1127820009512990E-04, 0.8954962962003413E-08, 0.1845166504084682E+00, 0.1834406364024603E+00, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + n0in: 3, + dmin: 8.9549629620034135E-009, + dmin1: 0.11437525254466312, + dmin2: 0.11437525254466312, + dn: 8.9549629620034135E-009, + dn1: 0.18342936716409974, + dn2: 0.11437525254466312, + tau: 1.1269238360546607E-005, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1143865217830237E+00, 0.1143752525446631E+00, 0.2932453102768040E-16, 0.4703212027287794E-16, 0.1834406364024603E+00, 0.1834294772982473E+00, 0.1101341475930520E-06, 0.6771621290952006E-11, 0.1127820009512990E-04, 0.8954962962003413E-08, 0.1845166504084682E+00, 0.1834406364024603E+00, 0.2169993432366266E+01}, + tauOut: 8.9549072084035346E-009, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1143752435897560E+00, 0.1143752525446631E+00, 0.7542783706608855E-16, 0.4703212027287794E-16, 0.1834294683501117E+00, 0.1834294772982473E+00, 0.3305882004599510E-18, 0.6771621290952006E-11, 0.5575326929115112E-13, 0.8954962962003413E-08, 0.1834294772982473E+00, 0.1834406364024603E+00}, + i0: 1, + n0: 3, + pp: 0, + n0in: 3, + dmin: 5.5753269291151117E-014, + dmin1: 0.11437524358975594, + dmin2: 0.11437524358975594, + dn: 5.5753269291151117E-014, + dn1: 0.18342946834334006, + dn2: 0.11437524358975594, + tau: 8.9549072084035346E-009, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1143752435897560E+00, 0.1143752525446631E+00, 0.7542783706608855E-16, 0.4703212027287794E-16, 0.1834294683501117E+00, 0.1834294772982473E+00, 0.3305882004599510E-18, 0.6771621290952006E-11, 0.5575326929115112E-13, 0.8954962962003413E-08, 0.1834294772982473E+00, 0.1834406364024603E+00}, + tauOut: 5.5753269214454873E-014, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1648283185136998E+01, 0.1396221235720571E+01, 0.1712714336271993E+00, 0.2520619494164272E+00, 0.1510753432847732E+01, 0.1119977945086946E+01, 0.3792800633372563E+00, 0.5620469213879850E+00, 0.1328441621586708E+01, 0.1019485448443405E+01, 0.1388998759717073E+00, 0.6882362364805590E+00, 0.4466938077796418E+00, 0.2681061628164644E+00, 0.7093206047768255E+00, 0.3174875209348847E+00, 0.6843112870203156E+00, 0.9979892152967577E+00, 0.6490582981441884E+00, 0.3956426765003833E+00, 0.5085572738629487E+00, 0.1122623886995757E+01, 0.9750235054014829E-02, 0.3499168501137979E-01, 0.1364886053450573E+00, 0.1417066070690837E+00, 0.2301225778544498E-01, 0.4532233329988395E-02, 0.1646009972289452E+01, 0.6930161671496210E+00, 0.2362515608142310E+00, 0.9760060629252760E+00, 0.5818602562677768E+00, 0.3984323866837953E+00, 0.1797665269485310E-01, 0.4196794303982125E+00, 0.5600419521166516E+00, 0.2492354636952108E-01, 0.2195137569256029E+00, 0.5530950584419837E+00, 0.4184071984843414E+00, 0.2222708575473020E+00, 0.2727864547293006E+00, 0.4156500978626423E+00, 0.6774373914466536E-01, 0.2745959086613283E+00, 0.1050967099374242E+00, 0.6593428521263771E-01, 0.2040338718098096E+00, 0.1079809097801335E+00, 0.1271971985482246E+00, 0.2011496719671002E+00, 0.4444741998443960E-01, 0.1290210252363728E+00, 0.5776327498150620E+00, 0.4262359329629137E-01, 0.3402556968467140E+00, 0.6023491555328507E+00, 0.1086565805630269E+00, 0.3155392911289253E+00, 0.9382999256694983E+00, 0.1171677238805356E+00, 0.7901625299559836E+00, 0.9297887823519896E+00, 0.6095853796269167E+00, 0.7973955560628040E+00, 0.8018125008387630E+00, 0.6023523535200964E+00, 0.2443177602187348E-01, 0.8114406374558937E+00, 0.2277830378453201E+00, 0.1480363940474286E-01, 0.6969081780841352E+00, 0.3759308106650992E+00, 0.8012406122589412E-01, 0.5487604052643561E+00, 0.9781022865072954E-01, 0.1017549972519246E+00, 0.2961248981181939E-03, 0.7617929262469909E-01, 0.8408398800007548E-04, 0.3802088861182694E-03, 0.0000000000000000E+00, 0.0000000000000000E+00}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: -0.0000000000000000, + dmin1: 0.0000000000000000, + dmin2: 0.0000000000000000, + dn: 0.0000000000000000, + dn1: 0.0000000000000000, + dn2: 0.0000000000000000, + tau: 0.0000000000000000, + ttype: 0, + g: 0.0000000000000000, + zOut: []float64{0.1648283185136998E+01, 0.1396221235720571E+01, 0.1712714336271993E+00, 0.2520619494164272E+00, 0.1510753432847732E+01, 0.1119977945086946E+01, 0.3792800633372563E+00, 0.5620469213879850E+00, 0.1328441621586708E+01, 0.1019485448443405E+01, 0.1388998759717073E+00, 0.6882362364805590E+00, 0.4466938077796418E+00, 0.2681061628164644E+00, 0.7093206047768255E+00, 0.3174875209348847E+00, 0.6843112870203156E+00, 0.9979892152967577E+00, 0.6490582981441884E+00, 0.3956426765003833E+00, 0.5085572738629487E+00, 0.1122623886995757E+01, 0.9750235054014829E-02, 0.3499168501137979E-01, 0.1364886053450573E+00, 0.1417066070690837E+00, 0.2301225778544498E-01, 0.4532233329988395E-02, 0.1646009972289452E+01, 0.6930161671496210E+00, 0.2362515608142310E+00, 0.9760060629252760E+00, 0.5818602562677768E+00, 0.3984323866837953E+00, 0.1797665269485310E-01, 0.4196794303982125E+00, 0.5600419521166516E+00, 0.2492354636952108E-01, 0.2195137569256029E+00, 0.5530950584419837E+00, 0.4184071984843414E+00, 0.2222708575473020E+00, 0.2727864547293006E+00, 0.4156500978626423E+00, 0.6774373914466536E-01, 0.2745959086613283E+00, 0.1050967099374242E+00, 0.6593428521263771E-01, 0.2040338718098096E+00, 0.1079809097801335E+00, 0.1271971985482246E+00, 0.2011496719671002E+00, 0.4444741998443960E-01, 0.1290210252363728E+00, 0.5776327498150620E+00, 0.4262359329629137E-01, 0.3402556968467140E+00, 0.6023491555328507E+00, 0.1086565805630269E+00, 0.3155392911289253E+00, 0.9382999256694983E+00, 0.1171677238805356E+00, 0.7901625299559836E+00, 0.9297887823519896E+00, 0.6095853796269167E+00, 0.7973955560628040E+00, 0.8018125008387630E+00, 0.6023523535200964E+00, 0.2443177602187348E-01, 0.8114406374558937E+00, 0.2277830378453201E+00, 0.1480363940474286E-01, 0.6969081780841352E+00, 0.3759308106650992E+00, 0.8012406122589412E-01, 0.5487604052643561E+00, 0.9781022865072954E-01, 0.1017549972519246E+00, 0.2961248981181939E-03, 0.7617929262469909E-01, 0.8408398800007548E-04, 0.3802088861182694E-03, 0.0000000000000000E+00, 0.0000000000000000E+00}, + tauOut: 0.0000000000000000, + ttypeOut: -1, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1648283185136998E+01, 0.1819554618764197E+01, 0.1712714336271993E+00, 0.1422045283129674E+00, 0.1510753432847732E+01, 0.1747828967872021E+01, 0.3792800633372563E+00, 0.2882727267008810E+00, 0.1328441621586708E+01, 0.1179068770857534E+01, 0.1388998759717073E+00, 0.5262264257308433E-01, 0.4466938077796418E+00, 0.1103391769983383E+01, 0.7093206047768255E+00, 0.4399127392187891E+00, 0.6843112870203156E+00, 0.8934568459457148E+00, 0.6490582981441884E+00, 0.3694451726238032E+00, 0.5085572738629487E+00, 0.1488623362931603E+00, 0.9750235054014829E-02, 0.8939776288934402E-02, 0.1364886053450573E+00, 0.1505610868415679E+00, 0.2301225778544498E-01, 0.2515816443301624E+00, 0.1646009972289452E+01, 0.1630679888773521E+01, 0.2362515608142310E+00, 0.8429943526342391E-01, 0.5818602562677768E+00, 0.5155374736992060E+00, 0.1797665269485310E-01, 0.1952851185677853E-01, 0.5600419521166516E+00, 0.7600271971854760E+00, 0.2195137569256029E+00, 0.1208458544696003E+00, 0.4184071984843414E+00, 0.5703477987440417E+00, 0.2727864547293006E+00, 0.3240053608004366E-01, 0.6774373914466536E-01, 0.1404399130020459E+00, 0.1050967099374242E+00, 0.1526865702536626E+00, 0.2040338718098096E+00, 0.1785445001043715E+00, 0.1271971985482246E+00, 0.3166486394939177E-01, 0.4444741998443960E-01, 0.5904153058501098E+00, 0.5776327498150620E+00, 0.3328891237445398E+00, 0.3402556968467140E+00, 0.1160231536652011E+00, 0.1086565805630269E+00, 0.8787251358464724E+00, 0.9382999256694983E+00, 0.8497373197790092E+00, 0.7901625299559836E+00, 0.5668475593321608E+00, 0.6095853796269167E+00, 0.8445503211335190E+00, 0.8018125008387630E+00, 0.2319542476253924E-01, 0.2443177602187348E-01, 0.2290193891046544E+00, 0.2277830378453201E+00, 0.6931459494493321E+00, 0.6969081780841352E+00, 0.8388628986069724E-01, 0.8012406122589412E-01, 0.9342352322344821E-01, 0.9781022865072954E-01, 0.4682830325399513E-02, 0.2961248981181939E-03, 0.5317160915449039E-05, 0.8408398800007548E-04, 0.7876682708462645E-04, 0.0000000000000000E+00, 0.8939776288934402E-02, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + n0in: 21, + dmin: 7.8766827084626452E-005, + dmin1: 1.2363512593342330E-003, + dmin2: 1.2363512593342330E-003, + dn: 7.8766827084626452E-005, + dn1: 4.3867054272813191E-003, + dn2: 3.7622286348031123E-003, + tau: 0.0000000000000000, + ttype: -1, + g: 0.0000000000000000, + zOut: []float64{0.1648283185136998E+01, 0.1819554618764197E+01, 0.1712714336271993E+00, 0.1422045283129674E+00, 0.1510753432847732E+01, 0.1747828967872021E+01, 0.3792800633372563E+00, 0.2882727267008810E+00, 0.1328441621586708E+01, 0.1179068770857534E+01, 0.1388998759717073E+00, 0.5262264257308433E-01, 0.4466938077796418E+00, 0.1103391769983383E+01, 0.7093206047768255E+00, 0.4399127392187891E+00, 0.6843112870203156E+00, 0.8934568459457148E+00, 0.6490582981441884E+00, 0.3694451726238032E+00, 0.5085572738629487E+00, 0.1488623362931603E+00, 0.9750235054014829E-02, 0.8939776288934402E-02, 0.1364886053450573E+00, 0.1505610868415679E+00, 0.2301225778544498E-01, 0.2515816443301624E+00, 0.1646009972289452E+01, 0.1630679888773521E+01, 0.2362515608142310E+00, 0.8429943526342391E-01, 0.5818602562677768E+00, 0.5155374736992060E+00, 0.1797665269485310E-01, 0.1952851185677853E-01, 0.5600419521166516E+00, 0.7600271971854760E+00, 0.2195137569256029E+00, 0.1208458544696003E+00, 0.4184071984843414E+00, 0.5703477987440417E+00, 0.2727864547293006E+00, 0.3240053608004366E-01, 0.6774373914466536E-01, 0.1404399130020459E+00, 0.1050967099374242E+00, 0.1526865702536626E+00, 0.2040338718098096E+00, 0.1785445001043715E+00, 0.1271971985482246E+00, 0.3166486394939177E-01, 0.4444741998443960E-01, 0.5904153058501098E+00, 0.5776327498150620E+00, 0.3328891237445398E+00, 0.3402556968467140E+00, 0.1160231536652011E+00, 0.1086565805630269E+00, 0.8787251358464724E+00, 0.9382999256694983E+00, 0.8497373197790092E+00, 0.7901625299559836E+00, 0.5668475593321608E+00, 0.6095853796269167E+00, 0.8445503211335190E+00, 0.8018125008387630E+00, 0.2319542476253924E-01, 0.2443177602187348E-01, 0.2290193891046544E+00, 0.2277830378453201E+00, 0.6931459494493321E+00, 0.6969081780841352E+00, 0.8388628986069724E-01, 0.8012406122589412E-01, 0.9342352322344821E-01, 0.9781022865072954E-01, 0.4682830325399513E-02, 0.2961248981181939E-03, 0.5317160915449039E-05, 0.8408398800007548E-04, 0.7876682708462645E-04, 0.0000000000000000E+00, 0.8939776288934402E-02, 0.1037537856266618 - 321}, + tauOut: 0.0000000000000000, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1961759147077164E+01, 0.1819554618764197E+01, 0.1266970995487882E+00, 0.1422045283129674E+00, 0.1909404595024114E+01, 0.1747828967872021E+01, 0.1780101349021133E+00, 0.2882727267008810E+00, 0.1053681278528505E+01, 0.1179068770857534E+01, 0.5510526941411123E-01, 0.5262264257308433E-01, 0.1488199239788061E+01, 0.1103391769983383E+01, 0.2641064704009213E+00, 0.4399127392187891E+00, 0.9987955481685968E+00, 0.8934568459457148E+00, 0.5506279200968747E-01, 0.3694451726238032E+00, 0.1027393205724072E+00, 0.1488623362931603E+00, 0.1310094739466220E-01, 0.8939776288934402E-02, 0.3890417837770681E+00, 0.1505610868415679E+00, 0.1054511738587064E+01, 0.2515816443301624E+00, 0.6604675854498806E+00, 0.1630679888773521E+01, 0.6580113672099847E-01, 0.8429943526342391E-01, 0.4692648488349861E+00, 0.5155374736992060E+00, 0.3162862116895929E-01, 0.1952851185677853E-01, 0.8492444304861170E+00, 0.7600271971854760E+00, 0.8115939841327705E-01, 0.1208458544696003E+00, 0.5215889364108083E+00, 0.5703477987440417E+00, 0.8723974284448969E-02, 0.3240053608004366E-01, 0.2844025089712595E+00, 0.1404399130020459E+00, 0.9585480612390133E-01, 0.1526865702536626E+00, 0.1143545579298620E+00, 0.1785445001043715E+00, 0.1634864466429828E+00, 0.3166486394939177E-01, 0.7598179829516669E+00, 0.5904153058501098E+00, 0.5083170815153470E-01, 0.3328891237445398E+00, 0.9439165813601388E+00, 0.1160231536652011E+00, 0.7910503496831139E+00, 0.8787251358464724E+00, 0.6255345294280562E+00, 0.8497373197790092E+00, 0.7653155273545736E+00, 0.5668475593321608E+00, 0.1024302185414846E+00, 0.8445503211335190E+00, 0.5186166821452450E-01, 0.2319542476253924E-01, 0.8703036703394620E+00, 0.2290193891046544E+00, 0.6681052144545734E-01, 0.6931459494493321E+00, 0.1104992916386881E+00, 0.8388628986069724E-01, 0.3959179295799719E-02, 0.9342352322344821E-01, 0.7289681905152429E-03, 0.4682830325399513E-02, 0.5745324691222600E-06, 0.5317160915449039E-05, 0.7819229461550419E-04, 0.7876682708462645E-04, 0.8723974284448969E-02, 0.8939776288934402E-02}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: 7.8192294615504193E-005, + dmin1: 7.2365102959979382E-004, + dmin2: 1.7075768415239889E-002, + dn: 7.8192294615504193E-005, + dn1: 7.2365102959979382E-004, + dn2: 1.7075768415239889E-002, + tau: 0.0000000000000000, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1961759147077164E+01, 0.1819554618764197E+01, 0.1266970995487882E+00, 0.1422045283129674E+00, 0.1909404595024114E+01, 0.1747828967872021E+01, 0.1780101349021133E+00, 0.2882727267008810E+00, 0.1053681278528505E+01, 0.1179068770857534E+01, 0.5510526941411123E-01, 0.5262264257308433E-01, 0.1488199239788061E+01, 0.1103391769983383E+01, 0.2641064704009213E+00, 0.4399127392187891E+00, 0.9987955481685968E+00, 0.8934568459457148E+00, 0.5506279200968747E-01, 0.3694451726238032E+00, 0.1027393205724072E+00, 0.1488623362931603E+00, 0.1310094739466220E-01, 0.8939776288934402E-02, 0.3890417837770681E+00, 0.1505610868415679E+00, 0.1054511738587064E+01, 0.2515816443301624E+00, 0.6604675854498806E+00, 0.1630679888773521E+01, 0.6580113672099847E-01, 0.8429943526342391E-01, 0.4692648488349861E+00, 0.5155374736992060E+00, 0.3162862116895929E-01, 0.1952851185677853E-01, 0.8492444304861170E+00, 0.7600271971854760E+00, 0.8115939841327705E-01, 0.1208458544696003E+00, 0.5215889364108083E+00, 0.5703477987440417E+00, 0.8723974284448969E-02, 0.3240053608004366E-01, 0.2844025089712595E+00, 0.1404399130020459E+00, 0.9585480612390133E-01, 0.1526865702536626E+00, 0.1143545579298620E+00, 0.1785445001043715E+00, 0.1634864466429828E+00, 0.3166486394939177E-01, 0.7598179829516669E+00, 0.5904153058501098E+00, 0.5083170815153470E-01, 0.3328891237445398E+00, 0.9439165813601388E+00, 0.1160231536652011E+00, 0.7910503496831139E+00, 0.8787251358464724E+00, 0.6255345294280562E+00, 0.8497373197790092E+00, 0.7653155273545736E+00, 0.5668475593321608E+00, 0.1024302185414846E+00, 0.8445503211335190E+00, 0.5186166821452450E-01, 0.2319542476253924E-01, 0.8703036703394620E+00, 0.2290193891046544E+00, 0.6681052144545734E-01, 0.6931459494493321E+00, 0.1104992916386881E+00, 0.8388628986069724E-01, 0.3959179295799719E-02, 0.9342352322344821E-01, 0.7289681905152429E-03, 0.4682830325399513E-02, 0.5745324691222600E-06, 0.5317160915449039E-05, 0.7819229461550419E-04, 0.7876682708462645E-04, 0.8723974284448969E-02, 0.8939776288934402E-02}, + tauOut: 7.8083356181667918E-005, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1961759147077164E+01, 0.2088378163269771E+01, 0.1266970995487882E+00, 0.1158391848322702E+00, 0.1909404595024114E+01, 0.1971497461737776E+01, 0.1780101349021133E+00, 0.9513882222772962E-01, 0.1053681278528505E+01, 0.1013569642358705E+01, 0.5510526941411123E-01, 0.8090970429970110E-01, 0.1488199239788061E+01, 0.1671317922533099E+01, 0.2641064704009213E+00, 0.1578325483874163E+00, 0.9987955481685968E+00, 0.8959477084346864E+00, 0.5506279200968747E-01, 0.6314111623521673E-02, 0.1027393205724072E+00, 0.1094480729873660E+00, 0.1310094739466220E-01, 0.4656834793406785E-01, 0.3890417837770681E+00, 0.1396907091073883E+01, 0.1054511738587064E+01, 0.4985806330739840E+00, 0.6604675854498806E+00, 0.2276100057407134E+00, 0.6580113672099847E-01, 0.1356625794022653E+00, 0.4692648488349861E+00, 0.3651528072454984E+00, 0.3162862116895929E-01, 0.7355942454424362E-01, 0.8492444304861170E+00, 0.8567663209989688E+00, 0.8115939841327705E-01, 0.4940885660487250E-01, 0.5215889364108083E+00, 0.4808259707342031E+00, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.2844025089712595E+00, 0.3750191107685802E+00, 0.9585480612390133E-01, 0.2922900104287094E-01, 0.1143545579298620E+00, 0.2485339201737921E+00, 0.1634864466429828E+00, 0.4998108187459615E+00, 0.7598179829516669E+00, 0.3107607890010585E+00, 0.5083170815153470E-01, 0.1543981540828483E+00, 0.9439165813601388E+00, 0.1580490693604223E+01, 0.7910503496831139E+00, 0.3130858727896049E+00, 0.6255345294280562E+00, 0.1077686100636843E+01, 0.7653155273545736E+00, 0.7274051012980143E-01, 0.1024302185414846E+00, 0.8147329327002600E-01, 0.5186166821452450E-01, 0.5539901283655780E+00, 0.8703036703394620E+00, 0.3830459800631597E+00, 0.6681052144545734E-01, 0.1927318305890360E-01, 0.1104992916386881E+00, 0.9510720451940254E-01, 0.3959179295799719E-02, 0.3034592154998885E-04, 0.7289681905152429E-03, 0.6211134452527084E-03, 0.5745324691222600E-06, 0.7232819130731082E-07, 0.7819229461550419E-04, 0.3661024252896476E-07, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + n0in: 21, + dmin: 3.6610242528964756E-008, + dmin1: 6.2053891278358614E-004, + dmin2: 2.9611625055501498E-002, + dn: 3.6610242528964756E-008, + dn1: 6.2053891278358614E-004, + dn2: 9.1148025223602810E-002, + tau: 7.8083356181667918E-005, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.1961759147077164E+01, 0.2088378163269771E+01, 0.1266970995487882E+00, 0.1158391848322702E+00, 0.1909404595024114E+01, 0.1971497461737776E+01, 0.1780101349021133E+00, 0.9513882222772962E-01, 0.1053681278528505E+01, 0.1013569642358705E+01, 0.5510526941411123E-01, 0.8090970429970110E-01, 0.1488199239788061E+01, 0.1671317922533099E+01, 0.2641064704009213E+00, 0.1578325483874163E+00, 0.9987955481685968E+00, 0.8959477084346864E+00, 0.5506279200968747E-01, 0.6314111623521673E-02, 0.1027393205724072E+00, 0.1094480729873660E+00, 0.1310094739466220E-01, 0.4656834793406785E-01, 0.3890417837770681E+00, 0.1396907091073883E+01, 0.1054511738587064E+01, 0.4985806330739840E+00, 0.6604675854498806E+00, 0.2276100057407134E+00, 0.6580113672099847E-01, 0.1356625794022653E+00, 0.4692648488349861E+00, 0.3651528072454984E+00, 0.3162862116895929E-01, 0.7355942454424362E-01, 0.8492444304861170E+00, 0.8567663209989688E+00, 0.8115939841327705E-01, 0.4940885660487250E-01, 0.5215889364108083E+00, 0.4808259707342031E+00, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.2844025089712595E+00, 0.3750191107685802E+00, 0.9585480612390133E-01, 0.2922900104287094E-01, 0.1143545579298620E+00, 0.2485339201737921E+00, 0.1634864466429828E+00, 0.4998108187459615E+00, 0.7598179829516669E+00, 0.3107607890010585E+00, 0.5083170815153470E-01, 0.1543981540828483E+00, 0.9439165813601388E+00, 0.1580490693604223E+01, 0.7910503496831139E+00, 0.3130858727896049E+00, 0.6255345294280562E+00, 0.1077686100636843E+01, 0.7653155273545736E+00, 0.7274051012980143E-01, 0.1024302185414846E+00, 0.8147329327002600E-01, 0.5186166821452450E-01, 0.5539901283655780E+00, 0.8703036703394620E+00, 0.3830459800631597E+00, 0.6681052144545734E-01, 0.1927318305890360E-01, 0.1104992916386881E+00, 0.9510720451940254E-01, 0.3959179295799719E-02, 0.3034592154998885E-04, 0.7289681905152429E-03, 0.6211134452527084E-03, 0.5745324691222600E-06, 0.7232819130731082E-07, 0.7819229461550419E-04, 0.3661024252896476E-07, 0.8723974284448969E-02, 0.5160120970399038E-02, 0.1037537856266618 - 321}, + tauOut: 3.6605973538398975E-008, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2204217311496068E+01, 0.2088378163269771E+01, 0.1036089580076783E+00, 0.1158391848322702E+00, 0.1963027289351853E+01, 0.1971497461737776E+01, 0.4912301654839819E-01, 0.9513882222772962E-01, 0.1045356293504034E+01, 0.1013569642358705E+01, 0.1293586117415210E+00, 0.8090970429970110E-01, 0.1699791822573021E+01, 0.1671317922533099E+01, 0.8319236989271818E-01, 0.1578325483874163E+00, 0.8190694135595162E+00, 0.8959477084346864E+00, 0.8437225690290790E-03, 0.6314111623521673E-02, 0.1551726617464312E+00, 0.1094480729873660E+00, 0.4192211096758560E+00, 0.4656834793406785E-01, 0.1476266577866037E+01, 0.1396907091073883E+01, 0.7687090018675194E-01, 0.4985806330739840E+00, 0.2864016483502532E+00, 0.2276100057407134E+00, 0.1729653861709652E+00, 0.1356625794022653E+00, 0.2657468090128033E+00, 0.3651528072454984E+00, 0.2371551996266359E+00, 0.7355942454424362E-01, 0.6690199413712319E+00, 0.8567663209989688E+00, 0.3551024412099299E-01, 0.4940885660487250E-01, 0.4504758109776356E+00, 0.4808259707342031E+00, 0.4295777776785939E-02, 0.5160120970399038E-02, 0.3999522974286917E+00, 0.3750191107685802E+00, 0.1816316160365039E-01, 0.2922900104287094E-01, 0.7301815407101296E+00, 0.2485339201737921E+00, 0.2127164214993764E+00, 0.4998108187459615E+00, 0.2524424849785568E+00, 0.3107607890010585E+00, 0.9666552191416621E+00, 0.1543981540828483E+00, 0.9269213106461920E+00, 0.1580490693604223E+01, 0.3640096408786760E+00, 0.3130858727896049E+00, 0.7864169332819952E+00, 0.1077686100636843E+01, 0.7535963003344312E-02, 0.7274051012980143E-01, 0.6279274220262862E+00, 0.8147329327002600E-01, 0.3379430237022286E+00, 0.5539901283655780E+00, 0.6437610281386123E-01, 0.3830459800631597E+00, 0.2847358698029713E-01, 0.1927318305890360E-01, 0.6666392685468185E-01, 0.9510720451940254E-01, 0.2827355178816361E-06, 0.3034592154998885E-04, 0.6208664319525956E-03, 0.6211134452527084E-03, 0.4264931214133004E-11, 0.7232819130731082E-07, 0.4059351646211308E-14, 0.3661024252896476E-07, 0.8437225690290790E-03, 0.5160120970399038E-02}, + i0: 1, + n0: 21, + pp: 0, + n0in: 21, + dmin: 4.0593516462113082E-015, + dmin1: 6.2079410376128833E-004, + dmin2: 4.5102919754957636E-002, + dn: 4.0593516462113082E-015, + dn1: 6.2079410376128833E-004, + dn2: 6.6633580933131861E-002, + tau: 3.6605973538398975E-008, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2204217311496068E+01, 0.2088378163269771E+01, 0.1036089580076783E+00, 0.1158391848322702E+00, 0.1963027289351853E+01, 0.1971497461737776E+01, 0.4912301654839819E-01, 0.9513882222772962E-01, 0.1045356293504034E+01, 0.1013569642358705E+01, 0.1293586117415210E+00, 0.8090970429970110E-01, 0.1699791822573021E+01, 0.1671317922533099E+01, 0.8319236989271818E-01, 0.1578325483874163E+00, 0.8190694135595162E+00, 0.8959477084346864E+00, 0.8437225690290790E-03, 0.6314111623521673E-02, 0.1551726617464312E+00, 0.1094480729873660E+00, 0.4192211096758560E+00, 0.4656834793406785E-01, 0.1476266577866037E+01, 0.1396907091073883E+01, 0.7687090018675194E-01, 0.4985806330739840E+00, 0.2864016483502532E+00, 0.2276100057407134E+00, 0.1729653861709652E+00, 0.1356625794022653E+00, 0.2657468090128033E+00, 0.3651528072454984E+00, 0.2371551996266359E+00, 0.7355942454424362E-01, 0.6690199413712319E+00, 0.8567663209989688E+00, 0.3551024412099299E-01, 0.4940885660487250E-01, 0.4504758109776356E+00, 0.4808259707342031E+00, 0.4295777776785939E-02, 0.5160120970399038E-02, 0.3999522974286917E+00, 0.3750191107685802E+00, 0.1816316160365039E-01, 0.2922900104287094E-01, 0.7301815407101296E+00, 0.2485339201737921E+00, 0.2127164214993764E+00, 0.4998108187459615E+00, 0.2524424849785568E+00, 0.3107607890010585E+00, 0.9666552191416621E+00, 0.1543981540828483E+00, 0.9269213106461920E+00, 0.1580490693604223E+01, 0.3640096408786760E+00, 0.3130858727896049E+00, 0.7864169332819952E+00, 0.1077686100636843E+01, 0.7535963003344312E-02, 0.7274051012980143E-01, 0.6279274220262862E+00, 0.8147329327002600E-01, 0.3379430237022286E+00, 0.5539901283655780E+00, 0.6437610281386123E-01, 0.3830459800631597E+00, 0.2847358698029713E-01, 0.1927318305890360E-01, 0.6666392685468185E-01, 0.9510720451940254E-01, 0.2827355178816361E-06, 0.3034592154998885E-04, 0.6208664319525956E-03, 0.6211134452527084E-03, 0.4264931214133004E-11, 0.7232819130731082E-07, 0.4059351646211308E-14, 0.3661024252896476E-07, 0.8437225690290790E-03, 0.5160120970399038E-02}, + tauOut: 4.0593516183260787E-015, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2204217311496068E+01, 0.2307826269503742E+01, 0.1036089580076783E+00, 0.8812934261040264E-01, 0.1963027289351853E+01, 0.1924020963289845E+01, 0.4912301654839819E-01, 0.2668944646890268E-01, 0.1045356293504034E+01, 0.1148025458776649E+01, 0.1293586117415210E+00, 0.1915312145184878E+00, 0.1699791822573021E+01, 0.1591452977947247E+01, 0.8319236989271818E-01, 0.4281642408847453E-01, 0.8190694135595162E+00, 0.7770967120400667E+00, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1551726617464312E+00, 0.5742252947387723E+00, 0.4192211096758560E+00, 0.1077768810640642E+01, 0.1476266577866037E+01, 0.4753686674121431E+00, 0.7687090018675194E-01, 0.4631342794110950E-01, 0.2864016483502532E+00, 0.4130536065801048E+00, 0.1729653861709652E+00, 0.1112809541240190E+00, 0.2657468090128033E+00, 0.3916210545154161E+00, 0.2371551996266359E+00, 0.4051405202062471E+00, 0.6690199413712319E+00, 0.2993896652859737E+00, 0.3551024412099299E-01, 0.5343038813025977E-01, 0.4504758109776356E+00, 0.4013412006241577E+00, 0.4295777776785939E-02, 0.4280911574482486E-02, 0.3999522974286917E+00, 0.4138345474578556E+00, 0.1816316160365039E-01, 0.3204760309498118E-01, 0.7301815407101296E+00, 0.9108503591145208E+00, 0.2127164214993764E+00, 0.5895442813598011E-01, 0.2524424849785568E+00, 0.1160143275984235E+01, 0.9666552191416621E+00, 0.7723298847804961E+00, 0.9269213106461920E+00, 0.5186010667443678E+00, 0.3640096408786760E+00, 0.5519914319921668E+00, 0.7864169332819952E+00, 0.2419614642931688E+00, 0.7535963003344312E-02, 0.1955698951896722E-01, 0.6279274220262862E+00, 0.9463134562095434E+00, 0.3379430237022286E+00, 0.2298969194226957E-01, 0.6437610281386123E-01, 0.6985999785188474E-01, 0.2847358698029713E-01, 0.2717093011896993E-01, 0.6666392685468185E-01, 0.3949327947122574E-01, 0.2827355178816361E-06, 0.4444831994804014E-08, 0.6208664319525956E-03, 0.6208619913814727E-03, 0.4264931214133004E-11, 0.2788519153273688E-22, 0.4059351646211308E-14, 0.3786532345060857E-28, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + n0in: 21, + dmin: 3.7865323450608567E-029, + dmin1: 6.2086198711654151E-004, + dmin2: 3.9492996735707858E-002, + dn: 3.7865323450608567E-029, + dn1: 6.2086198711654151E-004, + dn2: 3.9492996735707858E-002, + tau: 4.0593516183260787E-015, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2204217311496068E+01, 0.2307826269503742E+01, 0.1036089580076783E+00, 0.8812934261040264E-01, 0.1963027289351853E+01, 0.1924020963289845E+01, 0.4912301654839819E-01, 0.2668944646890268E-01, 0.1045356293504034E+01, 0.1148025458776649E+01, 0.1293586117415210E+00, 0.1915312145184878E+00, 0.1699791822573021E+01, 0.1591452977947247E+01, 0.8319236989271818E-01, 0.4281642408847453E-01, 0.8190694135595162E+00, 0.7770967120400667E+00, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1551726617464312E+00, 0.5742252947387723E+00, 0.4192211096758560E+00, 0.1077768810640642E+01, 0.1476266577866037E+01, 0.4753686674121431E+00, 0.7687090018675194E-01, 0.4631342794110950E-01, 0.2864016483502532E+00, 0.4130536065801048E+00, 0.1729653861709652E+00, 0.1112809541240190E+00, 0.2657468090128033E+00, 0.3916210545154161E+00, 0.2371551996266359E+00, 0.4051405202062471E+00, 0.6690199413712319E+00, 0.2993896652859737E+00, 0.3551024412099299E-01, 0.5343038813025977E-01, 0.4504758109776356E+00, 0.4013412006241577E+00, 0.4295777776785939E-02, 0.4280911574482486E-02, 0.3999522974286917E+00, 0.4138345474578556E+00, 0.1816316160365039E-01, 0.3204760309498118E-01, 0.7301815407101296E+00, 0.9108503591145208E+00, 0.2127164214993764E+00, 0.5895442813598011E-01, 0.2524424849785568E+00, 0.1160143275984235E+01, 0.9666552191416621E+00, 0.7723298847804961E+00, 0.9269213106461920E+00, 0.5186010667443678E+00, 0.3640096408786760E+00, 0.5519914319921668E+00, 0.7864169332819952E+00, 0.2419614642931688E+00, 0.7535963003344312E-02, 0.1955698951896722E-01, 0.6279274220262862E+00, 0.9463134562095434E+00, 0.3379430237022286E+00, 0.2298969194226957E-01, 0.6437610281386123E-01, 0.6985999785188474E-01, 0.2847358698029713E-01, 0.2717093011896993E-01, 0.6666392685468185E-01, 0.3949327947122574E-01, 0.2827355178816361E-06, 0.4444831994804014E-08, 0.6208664319525956E-03, 0.6208619913814727E-03, 0.4264931214133004E-11, 0.2788519153273688E-22, 0.4059351646211308E-14, 0.3786532345060857E-28, 0.8437225690290790E-03, 0.1684766835109566E-03, 0.1037537856266618 - 321}, + tauOut: 3.7865323450608567E-029, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2395955612114145E+01, 0.2307826269503742E+01, 0.7077038564739886E-01, 0.8812934261040264E-01, 0.1879940024111348E+01, 0.1924020963289845E+01, 0.1629847954401656E-01, 0.2668944646890268E-01, 0.1323258193751120E+01, 0.1148025458776649E+01, 0.2303502998543534E+00, 0.1915312145184878E+00, 0.1403919102181368E+01, 0.1591452977947247E+01, 0.2369972908607684E-01, 0.4281642408847453E-01, 0.7535654596375009E+00, 0.7770967120400667E+00, 0.1283811140869274E-03, 0.1684766835109566E-03, 0.1651865724265327E+01, 0.5742252947387723E+00, 0.3101568824672333E+00, 0.1077768810640642E+01, 0.2115252128860193E+00, 0.4753686674121431E+00, 0.9043805314343908E-01, 0.4631342794110950E-01, 0.4338965075606848E+00, 0.4130536065801048E+00, 0.1004386157577793E+00, 0.1112809541240190E+00, 0.6963229589638840E+00, 0.3916210545154161E+00, 0.1741934301847783E+00, 0.4051405202062471E+00, 0.1786266232314551E+00, 0.2993896652859737E+00, 0.1200482645536405E+00, 0.5343038813025977E-01, 0.2855738476449996E+00, 0.4013412006241577E+00, 0.6203611145567293E-02, 0.4280911574482486E-02, 0.4396785394072695E+00, 0.4138345474578556E+00, 0.6639071087521134E-01, 0.3204760309498118E-01, 0.9034140763752896E+00, 0.9108503591145208E+00, 0.7570790092830114E-01, 0.5895442813598011E-01, 0.1856765259836430E+01, 0.1160143275984235E+01, 0.2157144528657351E+00, 0.7723298847804961E+00, 0.8548780458707995E+00, 0.5186010667443678E+00, 0.1562335771835849E+00, 0.5519914319921668E+00, 0.1052848766285511E+00, 0.2419614642931688E+00, 0.1757806338135458E+00, 0.1955698951896722E-01, 0.7935225143382671E+00, 0.9463134562095434E+00, 0.2023962522401480E-02, 0.2298969194226957E-01, 0.9500696544845319E-01, 0.6985999785188474E-01, 0.1129463646814219E-01, 0.2717093011896993E-01, 0.2819864744791555E-01, 0.3949327947122574E-01, 0.9786381594178541E-10, 0.4444831994804014E-08, 0.6208618935176568E-03, 0.6208619913814727E-03, 0.1700670967075909E-47, 0.2788519153273688E-22}, + i0: 1, + n0: 20, + pp: 0, + n0in: 21, + dmin: 3.7865323450608567E-029, + dmin1: 6.2086189351765679E-004, + dmin2: 2.8198643003083550E-002, + dn: 3.7865323450608567E-029, + dn1: 6.2086189351765679E-004, + dn2: 2.8198643003083550E-002, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2395955612114145E+01, 0.2307826269503742E+01, 0.7077038564739886E-01, 0.8812934261040264E-01, 0.1879940024111348E+01, 0.1924020963289845E+01, 0.1629847954401656E-01, 0.2668944646890268E-01, 0.1323258193751120E+01, 0.1148025458776649E+01, 0.2303502998543534E+00, 0.1915312145184878E+00, 0.1403919102181368E+01, 0.1591452977947247E+01, 0.2369972908607684E-01, 0.4281642408847453E-01, 0.7535654596375009E+00, 0.7770967120400667E+00, 0.1283811140869274E-03, 0.1684766835109566E-03, 0.1651865724265327E+01, 0.5742252947387723E+00, 0.3101568824672333E+00, 0.1077768810640642E+01, 0.2115252128860193E+00, 0.4753686674121431E+00, 0.9043805314343908E-01, 0.4631342794110950E-01, 0.4338965075606848E+00, 0.4130536065801048E+00, 0.1004386157577793E+00, 0.1112809541240190E+00, 0.6963229589638840E+00, 0.3916210545154161E+00, 0.1741934301847783E+00, 0.4051405202062471E+00, 0.1786266232314551E+00, 0.2993896652859737E+00, 0.1200482645536405E+00, 0.5343038813025977E-01, 0.2855738476449996E+00, 0.4013412006241577E+00, 0.6203611145567293E-02, 0.4280911574482486E-02, 0.4396785394072695E+00, 0.4138345474578556E+00, 0.6639071087521134E-01, 0.3204760309498118E-01, 0.9034140763752896E+00, 0.9108503591145208E+00, 0.7570790092830114E-01, 0.5895442813598011E-01, 0.1856765259836430E+01, 0.1160143275984235E+01, 0.2157144528657351E+00, 0.7723298847804961E+00, 0.8548780458707995E+00, 0.5186010667443678E+00, 0.1562335771835849E+00, 0.5519914319921668E+00, 0.1052848766285511E+00, 0.2419614642931688E+00, 0.1757806338135458E+00, 0.1955698951896722E-01, 0.7935225143382671E+00, 0.9463134562095434E+00, 0.2023962522401480E-02, 0.2298969194226957E-01, 0.9500696544845319E-01, 0.6985999785188474E-01, 0.1129463646814219E-01, 0.2717093011896993E-01, 0.2819864744791555E-01, 0.3949327947122574E-01, 0.9786381594178541E-10, 0.4444831994804014E-08, 0.6208618935176568E-03, 0.6208619913814727E-03, 0.1700670967075909E-47, 0.2788519153273688E-22}, + tauOut: 0.0000000000000000, + ttypeOut: -7, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2395955612114145E+01, 0.2466725997761544E+01, 0.7077038564739886E-01, 0.5393549207373363E-01, 0.1879940024111348E+01, 0.1842303011581631E+01, 0.1629847954401656E-01, 0.1170659574821484E-01, 0.1323258193751120E+01, 0.1541901897857258E+01, 0.2303502998543534E+00, 0.2097365510789915E+00, 0.1403919102181368E+01, 0.1217882280188454E+01, 0.2369972908607684E-01, 0.1466422291592108E-01, 0.7535654596375009E+00, 0.7390296178356669E+00, 0.1283811140869274E-03, 0.2869551596920546E-03, 0.1651865724265327E+01, 0.1961735651572868E+01, 0.3101568824672333E+00, 0.3344283443049241E-01, 0.2115252128860193E+00, 0.2685204315989660E+00, 0.9043805314343908E-01, 0.1461369444993732E+00, 0.4338965075606848E+00, 0.3881981788190908E+00, 0.1004386157577793E+00, 0.1801598202532681E+00, 0.6963229589638840E+00, 0.6903565688953941E+00, 0.1741934301847783E+00, 0.4507175802324546E-01, 0.1786266232314551E+00, 0.2536031297618502E+00, 0.1200482645536405E+00, 0.1351822623162481E+00, 0.2855738476449996E+00, 0.1565951964743188E+00, 0.6203611145567293E-02, 0.1741812487831326E-01, 0.4396785394072695E+00, 0.4886511254041676E+00, 0.6639071087521134E-01, 0.1227425859208231E+00, 0.9034140763752896E+00, 0.8563793913827676E+00, 0.7570790092830114E-01, 0.1641466407918003E+00, 0.1856765259836430E+01, 0.1908333071910365E+01, 0.2157144528657351E+00, 0.9663383852973971E-01, 0.8548780458707995E+00, 0.9144777845246447E+00, 0.1562335771835849E+00, 0.1798735100772441E-01, 0.1052848766285511E+00, 0.2630781594343725E+00, 0.1757806338135458E+00, 0.5302070335887964E+00, 0.7935225143382671E+00, 0.2653394432718723E+00, 0.2023962522401480E-02, 0.7246963929058098E-03, 0.9500696544845319E-01, 0.1055769055236896E+00, 0.1129463646814219E-01, 0.3016696409481782E-02, 0.2819864744791555E-01, 0.2518195113629758E-01, 0.9786381594178541E-10, 0.2412835834031154E-11, 0.6208618935176568E-03, 0.6208618911048210E-03, 0.1700670967075909E-47, 0.2869551596920546E-03, 0.7811996215926567E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 6.2086189110482101E-004, + dmin1: 2.5181951038433764E-002, + dmin2: 8.7297525620826724E-002, + dn: 6.2086189110482101E-004, + dn1: 2.5181951038433764E-002, + dn2: 9.4282269055547374E-002, + tau: 0.0000000000000000, + ttype: -7, + g: 0.0000000000000000, + zOut: []float64{0.2395955612114145E+01, 0.2466725997761544E+01, 0.7077038564739886E-01, 0.5393549207373363E-01, 0.1879940024111348E+01, 0.1842303011581631E+01, 0.1629847954401656E-01, 0.1170659574821484E-01, 0.1323258193751120E+01, 0.1541901897857258E+01, 0.2303502998543534E+00, 0.2097365510789915E+00, 0.1403919102181368E+01, 0.1217882280188454E+01, 0.2369972908607684E-01, 0.1466422291592108E-01, 0.7535654596375009E+00, 0.7390296178356669E+00, 0.1283811140869274E-03, 0.2869551596920546E-03, 0.1651865724265327E+01, 0.1961735651572868E+01, 0.3101568824672333E+00, 0.3344283443049241E-01, 0.2115252128860193E+00, 0.2685204315989660E+00, 0.9043805314343908E-01, 0.1461369444993732E+00, 0.4338965075606848E+00, 0.3881981788190908E+00, 0.1004386157577793E+00, 0.1801598202532681E+00, 0.6963229589638840E+00, 0.6903565688953941E+00, 0.1741934301847783E+00, 0.4507175802324546E-01, 0.1786266232314551E+00, 0.2536031297618502E+00, 0.1200482645536405E+00, 0.1351822623162481E+00, 0.2855738476449996E+00, 0.1565951964743188E+00, 0.6203611145567293E-02, 0.1741812487831326E-01, 0.4396785394072695E+00, 0.4886511254041676E+00, 0.6639071087521134E-01, 0.1227425859208231E+00, 0.9034140763752896E+00, 0.8563793913827676E+00, 0.7570790092830114E-01, 0.1641466407918003E+00, 0.1856765259836430E+01, 0.1908333071910365E+01, 0.2157144528657351E+00, 0.9663383852973971E-01, 0.8548780458707995E+00, 0.9144777845246447E+00, 0.1562335771835849E+00, 0.1798735100772441E-01, 0.1052848766285511E+00, 0.2630781594343725E+00, 0.1757806338135458E+00, 0.5302070335887964E+00, 0.7935225143382671E+00, 0.2653394432718723E+00, 0.2023962522401480E-02, 0.7246963929058098E-03, 0.9500696544845319E-01, 0.1055769055236896E+00, 0.1129463646814219E-01, 0.3016696409481782E-02, 0.2819864744791555E-01, 0.2518195113629758E-01, 0.9786381594178541E-10, 0.2412835834031154E-11, 0.6208618935176568E-03, 0.6208618911048210E-03, 0.1700670967075909E-47, 0.2869551596920546E-03, 0.7811996215926567E-04}, + tauOut: 6.2086189103875732E-004, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2520040627944239E+01, 0.2466725997761544E+01, 0.3943012599746679E-01, 0.5393549207373363E-01, 0.1813958619441340E+01, 0.1842303011581631E+01, 0.9950845630193767E-02, 0.1170659574821484E-01, 0.1741066741415017E+01, 0.1541901897857258E+01, 0.1467114516582776E+00, 0.2097365510789915E+00, 0.1085214189555058E+01, 0.1217882280188454E+01, 0.9986318978978259E-02, 0.1466422291592108E-01, 0.7287093921253419E+00, 0.7390296178356669E+00, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.1993785121145770E+01, 0.1961735651572868E+01, 0.4504038193447841E-02, 0.3344283443049241E-01, 0.4095324760138526E+00, 0.2685204315989660E+00, 0.1385240464077977E+00, 0.1461369444993732E+00, 0.4292130907735224E+00, 0.3881981788190908E+00, 0.2897733504323247E+00, 0.1801598202532681E+00, 0.4450341145952761E+00, 0.6903565688953941E+00, 0.2568418582687495E-01, 0.4507175802324546E-01, 0.3624803443601846E+00, 0.2536031297618502E+00, 0.5840011260368079E-01, 0.1351822623162481E+00, 0.1149923468579125E+00, 0.1565951964743188E+00, 0.7401698075381481E-01, 0.1741812487831326E-01, 0.5367558686801371E+00, 0.4886511254041676E+00, 0.1958324578473516E+00, 0.1227425859208231E+00, 0.8240727124361776E+00, 0.8563793913827676E+00, 0.3801199318200257E+00, 0.1641466407918003E+00, 0.1624226116729040E+01, 0.1908333071910365E+01, 0.5440714051978934E-01, 0.9663383852973971E-01, 0.8774371331215411E+00, 0.9144777845246447E+00, 0.5393069221241477E-02, 0.1798735100772441E-01, 0.7872712619108886E+00, 0.2630781594343725E+00, 0.1786993199393658E+00, 0.5302070335887964E+00, 0.8674395783437358E-01, 0.2653394432718723E+00, 0.8820349511059155E-03, 0.7246963929058098E-03, 0.1070907050910267E+00, 0.1055769055236896E+00, 0.7093640994523618E-03, 0.3016696409481782E-02, 0.2385172514821930E-01, 0.2518195113629758E-01, 0.6280626703238275E-13, 0.2412835834031154E-11, 0.3257377007015450E-14, 0.6208618911048210E-03, 0.7725029665513934E-03, 0.2869551596920546E-03}, + i0: 1, + n0: 20, + pp: 0, + n0in: 20, + dmin: 3.2573770070154495E-015, + dmin1: 2.3851725145806461E-002, + dmin2: 8.6019261441467765E-002, + dn: 3.2573770070154495E-015, + dn1: 2.3851725145806461E-002, + dn2: 0.10407400868154487, + tau: 6.2086189103875732E-004, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2520040627944239E+01, 0.2466725997761544E+01, 0.3943012599746679E-01, 0.5393549207373363E-01, 0.1813958619441340E+01, 0.1842303011581631E+01, 0.9950845630193767E-02, 0.1170659574821484E-01, 0.1741066741415017E+01, 0.1541901897857258E+01, 0.1467114516582776E+00, 0.2097365510789915E+00, 0.1085214189555058E+01, 0.1217882280188454E+01, 0.9986318978978259E-02, 0.1466422291592108E-01, 0.7287093921253419E+00, 0.7390296178356669E+00, 0.7725029665513934E-03, 0.2869551596920546E-03, 0.1993785121145770E+01, 0.1961735651572868E+01, 0.4504038193447841E-02, 0.3344283443049241E-01, 0.4095324760138526E+00, 0.2685204315989660E+00, 0.1385240464077977E+00, 0.1461369444993732E+00, 0.4292130907735224E+00, 0.3881981788190908E+00, 0.2897733504323247E+00, 0.1801598202532681E+00, 0.4450341145952761E+00, 0.6903565688953941E+00, 0.2568418582687495E-01, 0.4507175802324546E-01, 0.3624803443601846E+00, 0.2536031297618502E+00, 0.5840011260368079E-01, 0.1351822623162481E+00, 0.1149923468579125E+00, 0.1565951964743188E+00, 0.7401698075381481E-01, 0.1741812487831326E-01, 0.5367558686801371E+00, 0.4886511254041676E+00, 0.1958324578473516E+00, 0.1227425859208231E+00, 0.8240727124361776E+00, 0.8563793913827676E+00, 0.3801199318200257E+00, 0.1641466407918003E+00, 0.1624226116729040E+01, 0.1908333071910365E+01, 0.5440714051978934E-01, 0.9663383852973971E-01, 0.8774371331215411E+00, 0.9144777845246447E+00, 0.5393069221241477E-02, 0.1798735100772441E-01, 0.7872712619108886E+00, 0.2630781594343725E+00, 0.1786993199393658E+00, 0.5302070335887964E+00, 0.8674395783437358E-01, 0.2653394432718723E+00, 0.8820349511059155E-03, 0.7246963929058098E-03, 0.1070907050910267E+00, 0.1055769055236896E+00, 0.7093640994523618E-03, 0.3016696409481782E-02, 0.2385172514821930E-01, 0.2518195113629758E-01, 0.6280626703238275E-13, 0.2412835834031154E-11, 0.3257377007015450E-14, 0.6208618911048210E-03, 0.7725029665513934E-03, 0.2869551596920546E-03}, + tauOut: 3.2573770070067200E-015, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2520040627944239E+01, 0.2559470753941703E+01, 0.3943012599746679E-01, 0.2794508075882943E-01, 0.1813958619441340E+01, 0.1795964384312701E+01, 0.9950845630193767E-02, 0.9646675917972324E-02, 0.1741066741415017E+01, 0.1878131517155319E+01, 0.1467114516582776E+00, 0.8477220453173254E-01, 0.1085214189555058E+01, 0.1010428304002300E+01, 0.9986318978978259E-02, 0.7202019583097946E-02, 0.7287093921253419E+00, 0.7222798755087921E+00, 0.7725029665513934E-03, 0.2132421202606784E-02, 0.1993785121145770E+01, 0.1996156738136608E+01, 0.4504038193447841E-02, 0.9240506410060376E-03, 0.4095324760138526E+00, 0.5471324717806409E+00, 0.1385240464077977E+00, 0.1086689918286978E+00, 0.4292130907735224E+00, 0.6103174493771462E+00, 0.2897733504323247E+00, 0.2112982785836522E+00, 0.4450341145952761E+00, 0.2594200218384955E+00, 0.2568418582687495E-01, 0.3588779484774172E-01, 0.3624803443601846E+00, 0.3849926621161204E+00, 0.5840011260368079E-01, 0.1744336104525046E-01, 0.1149923468579125E+00, 0.1715659665664736E+00, 0.7401698075381481E-01, 0.2315671901408358E+00, 0.5367558686801371E+00, 0.5010211363866497E+00, 0.1958324578473516E+00, 0.3221025481782661E+00, 0.8240727124361776E+00, 0.8820900960779340E+00, 0.3801199318200257E+00, 0.6999293195746292E+00, 0.1624226116729040E+01, 0.9787039376741966E+00, 0.5440714051978934E-01, 0.4877761656142095E-01, 0.8774371331215411E+00, 0.8340525857813585E+00, 0.5393069221241477E-02, 0.5090576402208483E-02, 0.7872712619108886E+00, 0.9608800054480426E+00, 0.1786993199393658E+00, 0.1613217694817542E-01, 0.8674395783437358E-01, 0.7149381583730083E-01, 0.8820349511059155E-03, 0.1321201613351008E-02, 0.1070907050910267E+00, 0.1064788675771248E+00, 0.7093640994523618E-03, 0.1589006148839502E-03, 0.2385172514821930E-01, 0.2369282453339490E-01, 0.6280626703238275E-13, 0.8634837515442557E-26, 0.3257377007015450E-14, 0.9466330862652142E-28, 0.7725029665513934E-03, 0.9240506410060376E-03, 0.7811996215926567E-04}, + i0: 1, + n0: 20, + pp: 1, + n0in: 20, + dmin: 9.4663308626521417E-029, + dmin1: 2.3692824533332088E-002, + dmin2: 7.0611780886194908E-002, + dn: 9.4663308626521417E-029, + dn1: 2.3692824533332088E-002, + dn2: 0.10576950347767239, + tau: 3.2573770070067200E-015, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2520040627944239E+01, 0.2559470753941703E+01, 0.3943012599746679E-01, 0.2794508075882943E-01, 0.1813958619441340E+01, 0.1795964384312701E+01, 0.9950845630193767E-02, 0.9646675917972324E-02, 0.1741066741415017E+01, 0.1878131517155319E+01, 0.1467114516582776E+00, 0.8477220453173254E-01, 0.1085214189555058E+01, 0.1010428304002300E+01, 0.9986318978978259E-02, 0.7202019583097946E-02, 0.7287093921253419E+00, 0.7222798755087921E+00, 0.7725029665513934E-03, 0.2132421202606784E-02, 0.1993785121145770E+01, 0.1996156738136608E+01, 0.4504038193447841E-02, 0.9240506410060376E-03, 0.4095324760138526E+00, 0.5471324717806409E+00, 0.1385240464077977E+00, 0.1086689918286978E+00, 0.4292130907735224E+00, 0.6103174493771462E+00, 0.2897733504323247E+00, 0.2112982785836522E+00, 0.4450341145952761E+00, 0.2594200218384955E+00, 0.2568418582687495E-01, 0.3588779484774172E-01, 0.3624803443601846E+00, 0.3849926621161204E+00, 0.5840011260368079E-01, 0.1744336104525046E-01, 0.1149923468579125E+00, 0.1715659665664736E+00, 0.7401698075381481E-01, 0.2315671901408358E+00, 0.5367558686801371E+00, 0.5010211363866497E+00, 0.1958324578473516E+00, 0.3221025481782661E+00, 0.8240727124361776E+00, 0.8820900960779340E+00, 0.3801199318200257E+00, 0.6999293195746292E+00, 0.1624226116729040E+01, 0.9787039376741966E+00, 0.5440714051978934E-01, 0.4877761656142095E-01, 0.8774371331215411E+00, 0.8340525857813585E+00, 0.5393069221241477E-02, 0.5090576402208483E-02, 0.7872712619108886E+00, 0.9608800054480426E+00, 0.1786993199393658E+00, 0.1613217694817542E-01, 0.8674395783437358E-01, 0.7149381583730083E-01, 0.8820349511059155E-03, 0.1321201613351008E-02, 0.1070907050910267E+00, 0.1064788675771248E+00, 0.7093640994523618E-03, 0.1589006148839502E-03, 0.2385172514821930E-01, 0.2369282453339490E-01, 0.6280626703238275E-13, 0.8634837515442557E-26, 0.3257377007015450E-14, 0.9466330862652142E-28, 0.7725029665513934E-03, 0.9240506410060376E-03, 0.7811996215926567E-04}, + tauOut: 9.4663308626521417E-029, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2587415834700532E+01, 0.2559470753941703E+01, 0.1939710234687058E-01, 0.2794508075882943E-01, 0.1786213957883803E+01, 0.1795964384312701E+01, 0.1014308840067055E-01, 0.9646675917972324E-02, 0.1952760633286381E+01, 0.1878131517155319E+01, 0.4386417535844126E-01, 0.8477220453173254E-01, 0.9737661482269571E+00, 0.1010428304002300E+01, 0.5342015449359675E-02, 0.7202019583097946E-02, 0.7190702812620393E+00, 0.7222798755087921E+00, 0.5919653562455767E-02, 0.2132421202606784E-02, 0.1991161135215158E+01, 0.1996156738136608E+01, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.6555475524103290E+00, 0.5471324717806409E+00, 0.1011712753337584E+00, 0.1086689918286978E+00, 0.7204444526270400E+00, 0.6103174493771462E+00, 0.7608498315828412E-01, 0.2112982785836522E+00, 0.2192228335279531E+00, 0.2594200218384955E+00, 0.6302508481237896E-01, 0.3588779484774172E-01, 0.3394109383489919E+00, 0.3849926621161204E+00, 0.8817297145618809E-02, 0.1744336104525046E-01, 0.3943158595616905E+00, 0.1715659665664736E+00, 0.2942312715577539E+00, 0.2315671901408358E+00, 0.5288924130071619E+00, 0.5010211363866497E+00, 0.5372046576619481E+00, 0.3221025481782661E+00, 0.1044814757990615E+01, 0.8820900960779340E+00, 0.6556411803358774E+00, 0.6999293195746292E+00, 0.3718403738997403E+00, 0.9787039376741966E+00, 0.1094101127175453E+00, 0.4877761656142095E-01, 0.7297330494660218E+00, 0.8340525857813585E+00, 0.6703044469024726E-02, 0.5090576402208483E-02, 0.9703091379271934E+00, 0.9608800054480426E+00, 0.1188642714683105E-02, 0.1613217694817542E-01, 0.7162637473596872E-01, 0.7149381583730083E-01, 0.1964081696850700E-02, 0.1321201613351008E-02, 0.1046736864951580E+00, 0.1064788675771248E+00, 0.3596705640885345E-04, 0.1589006148839502E-03, 0.2365685747698604E-01, 0.2369282453339490E-01, 0.3455244592226135E-52, 0.8634837515442557E-26}, + i0: 1, + n0: 19, + pp: 0, + n0in: 20, + dmin: 9.4663308626521417E-029, + dmin1: 2.3656857476986041E-002, + dmin2: 7.0305173122617720E-002, + dn: 9.4663308626521417E-029, + dn1: 2.3656857476986041E-002, + dn2: 0.10451478588027406, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2587415834700532E+01, 0.2559470753941703E+01, 0.1939710234687058E-01, 0.2794508075882943E-01, 0.1786213957883803E+01, 0.1795964384312701E+01, 0.1014308840067055E-01, 0.9646675917972324E-02, 0.1952760633286381E+01, 0.1878131517155319E+01, 0.4386417535844126E-01, 0.8477220453173254E-01, 0.9737661482269571E+00, 0.1010428304002300E+01, 0.5342015449359675E-02, 0.7202019583097946E-02, 0.7190702812620393E+00, 0.7222798755087921E+00, 0.5919653562455767E-02, 0.2132421202606784E-02, 0.1991161135215158E+01, 0.1996156738136608E+01, 0.2539111990097616E-03, 0.9240506410060376E-03, 0.6555475524103290E+00, 0.5471324717806409E+00, 0.1011712753337584E+00, 0.1086689918286978E+00, 0.7204444526270400E+00, 0.6103174493771462E+00, 0.7608498315828412E-01, 0.2112982785836522E+00, 0.2192228335279531E+00, 0.2594200218384955E+00, 0.6302508481237896E-01, 0.3588779484774172E-01, 0.3394109383489919E+00, 0.3849926621161204E+00, 0.8817297145618809E-02, 0.1744336104525046E-01, 0.3943158595616905E+00, 0.1715659665664736E+00, 0.2942312715577539E+00, 0.2315671901408358E+00, 0.5288924130071619E+00, 0.5010211363866497E+00, 0.5372046576619481E+00, 0.3221025481782661E+00, 0.1044814757990615E+01, 0.8820900960779340E+00, 0.6556411803358774E+00, 0.6999293195746292E+00, 0.3718403738997403E+00, 0.9787039376741966E+00, 0.1094101127175453E+00, 0.4877761656142095E-01, 0.7297330494660218E+00, 0.8340525857813585E+00, 0.6703044469024726E-02, 0.5090576402208483E-02, 0.9703091379271934E+00, 0.9608800054480426E+00, 0.1188642714683105E-02, 0.1613217694817542E-01, 0.7162637473596872E-01, 0.7149381583730083E-01, 0.1964081696850700E-02, 0.1321201613351008E-02, 0.1046736864951580E+00, 0.1064788675771248E+00, 0.3596705640885345E-04, 0.1589006148839502E-03, 0.2365685747698604E-01, 0.2369282453339490E-01, 0.3455244592226135E-52, 0.8634837515442557E-26}, + tauOut: 1.1828428738493020E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2587415834700532E+01, 0.2594984508308910E+01, 0.1939710234687058E-01, 0.1335166928493912E-01, 0.1786213957883803E+01, 0.1771176948261041E+01, 0.1014308840067055E-01, 0.1118297285215907E-01, 0.1952760633286381E+01, 0.1973613407054170E+01, 0.4386417535844126E-01, 0.2164225725832272E-01, 0.9737661482269571E+00, 0.9456374776795010E+00, 0.5342015449359675E-02, 0.4062111160297227E-02, 0.7190702812620393E+00, 0.7090993949257048E+00, 0.5919653562455767E-02, 0.1662247097070905E-01, 0.1991161135215158E+01, 0.1962964146704966E+01, 0.2539111990097616E-03, 0.8479567256479229E-04, 0.6555475524103290E+00, 0.7448056033330296E+00, 0.1011712753337584E+00, 0.9786215859981671E-01, 0.7204444526270400E+00, 0.6868388484470145E+00, 0.7608498315828412E-01, 0.2428454015756268E-01, 0.2192228335279531E+00, 0.2461349494442763E+00, 0.6302508481237896E-01, 0.8690924724014965E-01, 0.3394109383489919E+00, 0.2494905595159681E+00, 0.8817297145618809E-02, 0.1393559784278329E-01, 0.3943158595616905E+00, 0.6627831045381681E+00, 0.2942312715577539E+00, 0.2347927793131975E+00, 0.5288924130071619E+00, 0.8194758626174196E+00, 0.5372046576619481E+00, 0.6849248159595133E+00, 0.1044814757990615E+01, 0.1003702693628486E+01, 0.6556411803358774E+00, 0.2428944977310168E+00, 0.3718403738997403E+00, 0.2265275601477758E+00, 0.1094101127175453E+00, 0.3524523689025369E+00, 0.7297330494660218E+00, 0.3721552962940165E+00, 0.6703044469024726E-02, 0.1747664312451059E-01, 0.9703091379271934E+00, 0.9421927087788731E+00, 0.1188642714683105E-02, 0.9036173567869616E-04, 0.7162637473596872E-01, 0.6167166595864771E-01, 0.1964081696850700E-02, 0.3333583884775863E-02, 0.1046736864951580E+00, 0.8954764092829798E-01, 0.3596705640885345E-04, 0.9501841907954501E-05, 0.2365685747698604E-01, 0.1181892689658507E-01, 0.3455244592226135E-52, 0.8479567256479229E-04, 0.6989818532012803E-03}, + i0: 1, + n0: 19, + pp: 1, + n0in: 19, + dmin: 1.1818926896585069E-002, + dmin1: 5.9707584261797009E-002, + dmin2: 5.9707584261797009E-002, + dn: 1.1818926896585069E-002, + dn1: 8.9511673871889130E-002, + dn2: 5.9707584261797009E-002, + tau: 1.1828428738493020E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.2587415834700532E+01, 0.2594984508308910E+01, 0.1939710234687058E-01, 0.1335166928493912E-01, 0.1786213957883803E+01, 0.1771176948261041E+01, 0.1014308840067055E-01, 0.1118297285215907E-01, 0.1952760633286381E+01, 0.1973613407054170E+01, 0.4386417535844126E-01, 0.2164225725832272E-01, 0.9737661482269571E+00, 0.9456374776795010E+00, 0.5342015449359675E-02, 0.4062111160297227E-02, 0.7190702812620393E+00, 0.7090993949257048E+00, 0.5919653562455767E-02, 0.1662247097070905E-01, 0.1991161135215158E+01, 0.1962964146704966E+01, 0.2539111990097616E-03, 0.8479567256479229E-04, 0.6555475524103290E+00, 0.7448056033330296E+00, 0.1011712753337584E+00, 0.9786215859981671E-01, 0.7204444526270400E+00, 0.6868388484470145E+00, 0.7608498315828412E-01, 0.2428454015756268E-01, 0.2192228335279531E+00, 0.2461349494442763E+00, 0.6302508481237896E-01, 0.8690924724014965E-01, 0.3394109383489919E+00, 0.2494905595159681E+00, 0.8817297145618809E-02, 0.1393559784278329E-01, 0.3943158595616905E+00, 0.6627831045381681E+00, 0.2942312715577539E+00, 0.2347927793131975E+00, 0.5288924130071619E+00, 0.8194758626174196E+00, 0.5372046576619481E+00, 0.6849248159595133E+00, 0.1044814757990615E+01, 0.1003702693628486E+01, 0.6556411803358774E+00, 0.2428944977310168E+00, 0.3718403738997403E+00, 0.2265275601477758E+00, 0.1094101127175453E+00, 0.3524523689025369E+00, 0.7297330494660218E+00, 0.3721552962940165E+00, 0.6703044469024726E-02, 0.1747664312451059E-01, 0.9703091379271934E+00, 0.9421927087788731E+00, 0.1188642714683105E-02, 0.9036173567869616E-04, 0.7162637473596872E-01, 0.6167166595864771E-01, 0.1964081696850700E-02, 0.3333583884775863E-02, 0.1046736864951580E+00, 0.8954764092829798E-01, 0.3596705640885345E-04, 0.9501841907954501E-05, 0.2365685747698604E-01, 0.1181892689658507E-01, 0.3455244592226135E-52, 0.8479567256479229E-04, 0.6989818532012803E-03}, + tauOut: 1.1689473904977585E-002, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2596646703688871E+01, 0.2594984508308910E+01, 0.9107195378059658E-02, 0.1335166928493912E-01, 0.1761563251830163E+01, 0.1771176948261041E+01, 0.1252913577120413E-01, 0.1118297285215907E-01, 0.1971037054636311E+01, 0.1973613407054170E+01, 0.1038322923301279E-01, 0.2164225725832272E-01, 0.9276268857018078E+00, 0.9456374776795010E+00, 0.3105171497598932E-02, 0.4062111160297227E-02, 0.7109272204938374E+00, 0.7090993949257048E+00, 0.4589684232723624E-01, 0.1662247097070905E-01, 0.1905462626145317E+01, 0.1962964146704966E+01, 0.3314486004504485E-04, 0.8479567256479229E-04, 0.8309451431678238E+00, 0.7448056033330296E+00, 0.8089045693556918E-01, 0.9786215859981671E-01, 0.6185434577640304E+00, 0.6868388484470145E+00, 0.9663466631053550E-02, 0.2428454015756268E-01, 0.3116912561483949E+00, 0.2461349494442763E+00, 0.6956575230565126E-01, 0.8690924724014965E-01, 0.1821709311481225E+00, 0.2494905595159681E+00, 0.5070116699532772E-01, 0.1393559784278329E-01, 0.8351852429510604E+00, 0.6627831045381681E+00, 0.2303764547900405E+00, 0.2347927793131975E+00, 0.1262334749881915E+01, 0.8194758626174196E+00, 0.5445947541061251E+00, 0.6849248159595133E+00, 0.6903129633483998E+00, 0.1003702693628486E+01, 0.7970630839299049E-01, 0.2428944977310168E+00, 0.4875841467523446E+00, 0.2265275601477758E+00, 0.2690141110044630E+00, 0.3524523689025369E+00, 0.1089283545090865E+00, 0.3721552962940165E+00, 0.1511669372043137E+00, 0.1747664312451059E-01, 0.7794266594052606E+00, 0.9421927087788731E+00, 0.7149818024536710E-05, 0.9036173567869616E-04, 0.5330862612042146E-01, 0.6167166595864771E-01, 0.5599742376476567E-02, 0.3333583884775863E-02, 0.7226792648875177E-01, 0.8954764092829798E-01, 0.1553961492315709E-05, 0.9501841907954501E-05, 0.1278990301151681E-03, 0.1181892689658507E-01, 0.7149818024536710E-05, 0.8479567256479229E-04}, + i0: 1, + n0: 19, + pp: 0, + n0in: 19, + dmin: 1.2789903011516807E-004, + dmin1: 4.9975042235645591E-002, + dmin2: 4.9975042235645591E-002, + dn: 1.2789903011516807E-004, + dn1: 7.2258424646843816E-002, + dn2: 4.9975042235645591E-002, + tau: 1.1689473904977585E-002, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2596646703688871E+01, 0.2594984508308910E+01, 0.9107195378059658E-02, 0.1335166928493912E-01, 0.1761563251830163E+01, 0.1771176948261041E+01, 0.1252913577120413E-01, 0.1118297285215907E-01, 0.1971037054636311E+01, 0.1973613407054170E+01, 0.1038322923301279E-01, 0.2164225725832272E-01, 0.9276268857018078E+00, 0.9456374776795010E+00, 0.3105171497598932E-02, 0.4062111160297227E-02, 0.7109272204938374E+00, 0.7090993949257048E+00, 0.4589684232723624E-01, 0.1662247097070905E-01, 0.1905462626145317E+01, 0.1962964146704966E+01, 0.3314486004504485E-04, 0.8479567256479229E-04, 0.8309451431678238E+00, 0.7448056033330296E+00, 0.8089045693556918E-01, 0.9786215859981671E-01, 0.6185434577640304E+00, 0.6868388484470145E+00, 0.9663466631053550E-02, 0.2428454015756268E-01, 0.3116912561483949E+00, 0.2461349494442763E+00, 0.6956575230565126E-01, 0.8690924724014965E-01, 0.1821709311481225E+00, 0.2494905595159681E+00, 0.5070116699532772E-01, 0.1393559784278329E-01, 0.8351852429510604E+00, 0.6627831045381681E+00, 0.2303764547900405E+00, 0.2347927793131975E+00, 0.1262334749881915E+01, 0.8194758626174196E+00, 0.5445947541061251E+00, 0.6849248159595133E+00, 0.6903129633483998E+00, 0.1003702693628486E+01, 0.7970630839299049E-01, 0.2428944977310168E+00, 0.4875841467523446E+00, 0.2265275601477758E+00, 0.2690141110044630E+00, 0.3524523689025369E+00, 0.1089283545090865E+00, 0.3721552962940165E+00, 0.1511669372043137E+00, 0.1747664312451059E-01, 0.7794266594052606E+00, 0.9421927087788731E+00, 0.7149818024536710E-05, 0.9036173567869616E-04, 0.5330862612042146E-01, 0.6167166595864771E-01, 0.5599742376476567E-02, 0.3333583884775863E-02, 0.7226792648875177E-01, 0.8954764092829798E-01, 0.1553961492315709E-05, 0.9501841907954501E-05, 0.1278990301151681E-03, 0.1181892689658507E-01, 0.7149818024536710E-05, 0.8479567256479229E-04}, + tauOut: 1.1689473904977585E-002, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2596646703688871E+01, 0.2605626003858251E+01, 0.9107195378059658E-02, 0.6157023564192275E-02, 0.1761563251830163E+01, 0.1767807468828494E+01, 0.1252913577120413E-01, 0.1396950250695455E-01, 0.1971037054636311E+01, 0.1967322886153689E+01, 0.1038322923301279E-01, 0.4895872794820515E-02, 0.9276268857018078E+00, 0.9257082891959054E+00, 0.3105171497598932E-02, 0.2384715539127593E-02, 0.7109272204938374E+00, 0.7543114520732653E+00, 0.4589684232723624E-01, 0.1159397984377132E+00, 0.1905462626145317E+01, 0.1789428077358968E+01, 0.3314486004504485E-04, 0.1539126429493388E-04, 0.8309451431678238E+00, 0.9116923136304173E+00, 0.8089045693556918E-01, 0.5488064578914756E-01, 0.6185434577640304E+00, 0.5731983833972557E+00, 0.9663466631053550E-02, 0.5254756712901782E-02, 0.3116912561483949E+00, 0.3758743565324636E+00, 0.6956575230565126E-01, 0.3371567560620648E-01, 0.1821709311481225E+00, 0.1990285273285630E+00, 0.5070116699532772E-01, 0.2127577741907859E+00, 0.8351852429510604E+00, 0.8526760283416343E+00, 0.2303764547900405E+00, 0.3410582621885915E+00, 0.1262334749881915E+01, 0.1465743346590768E+01, 0.5445947541061251E+00, 0.2564847518533230E+00, 0.6903129633483998E+00, 0.5134066246793865E+00, 0.7970630839299049E-01, 0.7569737222001199E-01, 0.4875841467523446E+00, 0.6807729903281149E+00, 0.2690141110044630E+00, 0.4304410555024735E-01, 0.1089283545090865E+00, 0.2169232909544721E+00, 0.1511669372043137E+00, 0.5431576312495270E+00, 0.7794266594052606E+00, 0.2361482827650774E+00, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.5330862612042146E-01, 0.5877885927277143E-01, 0.5599742376476567E-02, 0.6884818375619963E-02, 0.7226792648875177E-01, 0.6525676686594341E-01, 0.1553961492315709E-05, 0.3045663725752605E-08, 0.1278990301151681E-03, 0.7757707209639971E-09, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.6989818532012803E-03}, + i0: 1, + n0: 19, + pp: 1, + n0in: 19, + dmin: 7.7577072096399712E-010, + dmin1: 5.3179116896294863E-002, + dmin2: 5.3179116896294863E-002, + dn: 7.7577072096399712E-010, + dn1: 6.5255212904451090E-002, + dn2: 5.3179116896294863E-002, + tau: 1.2789520868072135E-004, + ttype: -15, + g: 0.0000000000000000, + zOut: []float64{0.2596646703688871E+01, 0.2605626003858251E+01, 0.9107195378059658E-02, 0.6157023564192275E-02, 0.1761563251830163E+01, 0.1767807468828494E+01, 0.1252913577120413E-01, 0.1396950250695455E-01, 0.1971037054636311E+01, 0.1967322886153689E+01, 0.1038322923301279E-01, 0.4895872794820515E-02, 0.9276268857018078E+00, 0.9257082891959054E+00, 0.3105171497598932E-02, 0.2384715539127593E-02, 0.7109272204938374E+00, 0.7543114520732653E+00, 0.4589684232723624E-01, 0.1159397984377132E+00, 0.1905462626145317E+01, 0.1789428077358968E+01, 0.3314486004504485E-04, 0.1539126429493388E-04, 0.8309451431678238E+00, 0.9116923136304173E+00, 0.8089045693556918E-01, 0.5488064578914756E-01, 0.6185434577640304E+00, 0.5731983833972557E+00, 0.9663466631053550E-02, 0.5254756712901782E-02, 0.3116912561483949E+00, 0.3758743565324636E+00, 0.6956575230565126E-01, 0.3371567560620648E-01, 0.1821709311481225E+00, 0.1990285273285630E+00, 0.5070116699532772E-01, 0.2127577741907859E+00, 0.8351852429510604E+00, 0.8526760283416343E+00, 0.2303764547900405E+00, 0.3410582621885915E+00, 0.1262334749881915E+01, 0.1465743346590768E+01, 0.5445947541061251E+00, 0.2564847518533230E+00, 0.6903129633483998E+00, 0.5134066246793865E+00, 0.7970630839299049E-01, 0.7569737222001199E-01, 0.4875841467523446E+00, 0.6807729903281149E+00, 0.2690141110044630E+00, 0.4304410555024735E-01, 0.1089283545090865E+00, 0.2169232909544721E+00, 0.1511669372043137E+00, 0.5431576312495270E+00, 0.7794266594052606E+00, 0.2361482827650774E+00, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.5330862612042146E-01, 0.5877885927277143E-01, 0.5599742376476567E-02, 0.6884818375619963E-02, 0.7226792648875177E-01, 0.6525676686594341E-01, 0.1553961492315709E-05, 0.3045663725752605E-08, 0.1278990301151681E-03, 0.7757707209639971E-09, 0.7149818024536710E-05, 0.1614015445872399E-05, 0.6989818532012803E-03}, + tauOut: 1.2789520868072135E-004, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2611783026646672E+01, 0.2605626003858251E+01, 0.4167433562238479E-02, 0.6157023564192275E-02, 0.1777609536997439E+01, 0.1767807468828494E+01, 0.1546038171944878E-01, 0.1396950250695455E-01, 0.1956758376453290E+01, 0.1967322886153689E+01, 0.2316152103168096E-02, 0.4895872794820515E-02, 0.9257768518560943E+00, 0.9257082891959054E+00, 0.1943036529261404E-02, 0.2384715539127593E-02, 0.8683082132059464E+00, 0.7543114520732653E+00, 0.2389312083572061E+00, 0.1159397984377132E+00, 0.1550512259490286E+01, 0.1789428077358968E+01, 0.9049975109102588E-05, 0.1539126429493388E-04, 0.9665639086686850E+00, 0.9116923136304173E+00, 0.3254569838994440E-01, 0.5488064578914756E-01, 0.5459074409444424E+00, 0.5731983833972557E+00, 0.3618064437406363E-02, 0.5254756712901782E-02, 0.4059719669254931E+00, 0.3758743565324636E+00, 0.1652917395900484E-01, 0.3371567560620648E-01, 0.3952571267845734E+00, 0.1990285273285630E+00, 0.4589757947481138E+00, 0.2127577741907859E+00, 0.7347584950063413E+00, 0.8526760283416343E+00, 0.6803648845168142E+00, 0.3410582621885915E+00, 0.1041863213151506E+01, 0.1465743346590768E+01, 0.1263898840735783E+00, 0.2564847518533230E+00, 0.4627141120500496E+00, 0.5134066246793865E+00, 0.1113705527974558E+00, 0.7569737222001199E-01, 0.6124465423051357E+00, 0.6807729903281149E+00, 0.1524585149425051E-01, 0.4304410555024735E-01, 0.7448350699339780E+00, 0.2169232909544721E+00, 0.1722069046798406E+00, 0.5431576312495270E+00, 0.6394299132491200E-01, 0.2361482827650774E+00, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6566219320748727E-01, 0.5877885927277143E-01, 0.6842308575232983E-02, 0.6884818375619963E-02, 0.5841446056060346E-01, 0.6525676686594341E-01, 0.4044780558898965E-16, 0.3045663725752605E-08, 0.1013559914197710E-18, 0.7757707209639971E-09, 0.1483665133446019E-05, 0.1614015445872399E-05}, + i0: 1, + n0: 19, + pp: 0, + n0in: 19, + dmin: 1.0135599141977102E-019, + dmin1: 5.8414457514939733E-002, + dmin2: 5.8777374831867304E-002, + dn: 1.0135599141977102E-019, + dn1: 5.8414457514939733E-002, + dn2: 5.8777374831867304E-002, + tau: 7.7577068041483555E-010, + ttype: -15, + g: 0.0000000000000000, + zOut: []float64{0.2611783026646672E+01, 0.2605626003858251E+01, 0.4167433562238479E-02, 0.6157023564192275E-02, 0.1777609536997439E+01, 0.1767807468828494E+01, 0.1546038171944878E-01, 0.1396950250695455E-01, 0.1956758376453290E+01, 0.1967322886153689E+01, 0.2316152103168096E-02, 0.4895872794820515E-02, 0.9257768518560943E+00, 0.9257082891959054E+00, 0.1943036529261404E-02, 0.2384715539127593E-02, 0.8683082132059464E+00, 0.7543114520732653E+00, 0.2389312083572061E+00, 0.1159397984377132E+00, 0.1550512259490286E+01, 0.1789428077358968E+01, 0.9049975109102588E-05, 0.1539126429493388E-04, 0.9665639086686850E+00, 0.9116923136304173E+00, 0.3254569838994440E-01, 0.5488064578914756E-01, 0.5459074409444424E+00, 0.5731983833972557E+00, 0.3618064437406363E-02, 0.5254756712901782E-02, 0.4059719669254931E+00, 0.3758743565324636E+00, 0.1652917395900484E-01, 0.3371567560620648E-01, 0.3952571267845734E+00, 0.1990285273285630E+00, 0.4589757947481138E+00, 0.2127577741907859E+00, 0.7347584950063413E+00, 0.8526760283416343E+00, 0.6803648845168142E+00, 0.3410582621885915E+00, 0.1041863213151506E+01, 0.1465743346590768E+01, 0.1263898840735783E+00, 0.2564847518533230E+00, 0.4627141120500496E+00, 0.5134066246793865E+00, 0.1113705527974558E+00, 0.7569737222001199E-01, 0.6124465423051357E+00, 0.6807729903281149E+00, 0.1524585149425051E-01, 0.4304410555024735E-01, 0.7448350699339780E+00, 0.2169232909544721E+00, 0.1722069046798406E+00, 0.5431576312495270E+00, 0.6394299132491200E-01, 0.2361482827650774E+00, 0.1483665133446019E-05, 0.1614015445872399E-05, 0.6566219320748727E-01, 0.5877885927277143E-01, 0.6842308575232983E-02, 0.6884818375619963E-02, 0.5841446056060346E-01, 0.6525676686594341E-01, 0.4044780558898965E-16, 0.3045663725752605E-08, 0.1013559914197710E-18, 0.7757707209639971E-09, 0.1483665133446019E-05, 0.1614015445872399E-05}, + tauOut: 1.0135599141977091E-019, + ttypeOut: -2, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2611783026646672E+01, 0.2615950460208911E+01, 0.4167433562238479E-02, 0.2831884532112553E-02, 0.1777609536997439E+01, 0.1790238034184775E+01, 0.1546038171944878E-01, 0.1689844079671380E-01, 0.1956758376453290E+01, 0.1942176087759744E+01, 0.2316152103168096E-02, 0.1104039956008399E-02, 0.9257768518560943E+00, 0.9266158484293474E+00, 0.1943036529261404E-02, 0.1820770257466081E-02, 0.8683082132059464E+00, 0.1105418651305687E+01, 0.2389312083572061E+00, 0.3351361651941490E+00, 0.1550512259490286E+01, 0.1215385144271246E+01, 0.9049975109102588E-05, 0.7197207696703830E-05, 0.9665639086686850E+00, 0.9991024098509327E+00, 0.3254569838994440E-01, 0.1778290067827487E-01, 0.5459074409444424E+00, 0.5317426047035739E+00, 0.3618064437406363E-02, 0.2762300261676148E-02, 0.4059719669254931E+00, 0.4197388406228219E+00, 0.1652917395900484E-01, 0.1556509232613395E-01, 0.3952571267845734E+00, 0.8386678292065533E+00, 0.4589757947481138E+00, 0.4021095747913879E+00, 0.7347584950063413E+00, 0.1013013804731768E+01, 0.6803648845168142E+00, 0.6997408538631263E+00, 0.1041863213151506E+01, 0.4685122433619579E+00, 0.1263898840735783E+00, 0.1248257304047288E+00, 0.4627141120500496E+00, 0.4492589344427766E+00, 0.1113705527974558E+00, 0.1518244930621437E+00, 0.6124465423051357E+00, 0.4758679007372426E+00, 0.1524585149425051E-01, 0.2386301922514691E-01, 0.7448350699339780E+00, 0.8931789553886716E+00, 0.1722069046798406E+00, 0.1232835205710967E-01, 0.6394299132491200E-01, 0.5161612293293578E-01, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6566219320748727E-01, 0.7250261437426894E-01, 0.6842308575232983E-02, 0.5512763475647510E-02, 0.5841446056060346E-01, 0.5290169708495600E-01, 0.4044780558898965E-16, 0.7749519698096867E-34, 0.2434478048112329E-01}, + i0: 1, + n0: 18, + pp: 1, + n0in: 19, + dmin: 1.0135599141977093E-019, + dmin1: 5.1614639267802333E-002, + dmin2: 5.1614639267802333E-002, + dn: 1.0135599141977093E-019, + dn1: 5.2901697084955956E-002, + dn2: 6.5660305799035965E-002, + tau: 0.0000000000000000, + ttype: -2, + g: 0.0000000000000000, + zOut: []float64{0.2611783026646672E+01, 0.2615950460208911E+01, 0.4167433562238479E-02, 0.2831884532112553E-02, 0.1777609536997439E+01, 0.1790238034184775E+01, 0.1546038171944878E-01, 0.1689844079671380E-01, 0.1956758376453290E+01, 0.1942176087759744E+01, 0.2316152103168096E-02, 0.1104039956008399E-02, 0.9257768518560943E+00, 0.9266158484293474E+00, 0.1943036529261404E-02, 0.1820770257466081E-02, 0.8683082132059464E+00, 0.1105418651305687E+01, 0.2389312083572061E+00, 0.3351361651941490E+00, 0.1550512259490286E+01, 0.1215385144271246E+01, 0.9049975109102588E-05, 0.7197207696703830E-05, 0.9665639086686850E+00, 0.9991024098509327E+00, 0.3254569838994440E-01, 0.1778290067827487E-01, 0.5459074409444424E+00, 0.5317426047035739E+00, 0.3618064437406363E-02, 0.2762300261676148E-02, 0.4059719669254931E+00, 0.4197388406228219E+00, 0.1652917395900484E-01, 0.1556509232613395E-01, 0.3952571267845734E+00, 0.8386678292065533E+00, 0.4589757947481138E+00, 0.4021095747913879E+00, 0.7347584950063413E+00, 0.1013013804731768E+01, 0.6803648845168142E+00, 0.6997408538631263E+00, 0.1041863213151506E+01, 0.4685122433619579E+00, 0.1263898840735783E+00, 0.1248257304047288E+00, 0.4627141120500496E+00, 0.4492589344427766E+00, 0.1113705527974558E+00, 0.1518244930621437E+00, 0.6124465423051357E+00, 0.4758679007372426E+00, 0.1524585149425051E-01, 0.2386301922514691E-01, 0.7448350699339780E+00, 0.8931789553886716E+00, 0.1722069046798406E+00, 0.1232835205710967E-01, 0.6394299132491200E-01, 0.5161612293293578E-01, 0.1483665133446019E-05, 0.1887408451311279E-05, 0.6566219320748727E-01, 0.7250261437426894E-01, 0.6842308575232983E-02, 0.5512763475647510E-02, 0.5841446056060346E-01, 0.5290169708495600E-01, 0.4044780558898965E-16, 0.7749519698096867E-34, 0.2434478048112329E-01}, + tauOut: 1.2903659816950583E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2605878684924073E+01, 0.2615950460208911E+01, 0.1945503997226627E-02, 0.2831884532112553E-02, 0.1792287311167312E+01, 0.1790238034184775E+01, 0.1831165540887852E-01, 0.1689844079671380E-01, 0.1912064812489923E+01, 0.1942176087759744E+01, 0.5350346462390188E-03, 0.1104039956008399E-02, 0.9149979242236238E+00, 0.9266158484293474E+00, 0.2199691768758329E-02, 0.1820770257466081E-02, 0.1425451464914127E+01, 0.1105418651305687E+01, 0.2857477273065492E+00, 0.3351361651941490E+00, 0.9167409543554429E+00, 0.1215385144271246E+01, 0.7843816205451699E-05, 0.7197207696703830E-05, 0.1003973806896052E+01, 0.9991024098509327E+00, 0.9418498631040351E-02, 0.1778290067827487E-01, 0.5121827465172590E+00, 0.5317426047035739E+00, 0.2263732461064059E-02, 0.2762300261676148E-02, 0.4201365406709412E+00, 0.4197388406228219E+00, 0.3107071375346623E-01, 0.1556509232613395E-01, 0.1196803030427524E+01, 0.8386678292065533E+00, 0.3403588894097180E+00, 0.4021095747913879E+00, 0.1359492109368225E+01, 0.1013013804731768E+01, 0.2411467892724848E+00, 0.6997408538631263E+00, 0.3392875246772514E+00, 0.4685122433619579E+00, 0.1652848117124708E+00, 0.1248257304047288E+00, 0.4228949559754990E+00, 0.4492589344427766E+00, 0.1708424320817961E+00, 0.1518244930621437E+00, 0.3159848280636428E+00, 0.4758679007372426E+00, 0.6745243660763246E-01, 0.2386301922514691E-01, 0.8251512110211983E+00, 0.8931789553886716E+00, 0.7711819686391232E-03, 0.1232835205710967E-01, 0.3794316855579739E-01, 0.5161612293293578E-01, 0.3606500256058598E-05, 0.1887408451311279E-05, 0.6510811153270980E-01, 0.7250261437426894E-01, 0.4479235177066975E-02, 0.5512763475647510E-02, 0.3551880209093845E-01, 0.5290169708495600E-01, 0.7843816205451699E-05, 0.7197207696703830E-05}, + i0: 1, + n0: 18, + pp: 0, + n0in: 18, + dmin: 3.5518802090938446E-002, + dmin1: 3.7941281147346073E-002, + dmin2: 3.7941281147346073E-002, + dn: 3.5518802090938446E-002, + dn1: 5.9595348057062299E-002, + dn2: 3.7941281147346073E-002, + tau: 1.2903659816950583E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.2605878684924073E+01, 0.2615950460208911E+01, 0.1945503997226627E-02, 0.2831884532112553E-02, 0.1792287311167312E+01, 0.1790238034184775E+01, 0.1831165540887852E-01, 0.1689844079671380E-01, 0.1912064812489923E+01, 0.1942176087759744E+01, 0.5350346462390188E-03, 0.1104039956008399E-02, 0.9149979242236238E+00, 0.9266158484293474E+00, 0.2199691768758329E-02, 0.1820770257466081E-02, 0.1425451464914127E+01, 0.1105418651305687E+01, 0.2857477273065492E+00, 0.3351361651941490E+00, 0.9167409543554429E+00, 0.1215385144271246E+01, 0.7843816205451699E-05, 0.7197207696703830E-05, 0.1003973806896052E+01, 0.9991024098509327E+00, 0.9418498631040351E-02, 0.1778290067827487E-01, 0.5121827465172590E+00, 0.5317426047035739E+00, 0.2263732461064059E-02, 0.2762300261676148E-02, 0.4201365406709412E+00, 0.4197388406228219E+00, 0.3107071375346623E-01, 0.1556509232613395E-01, 0.1196803030427524E+01, 0.8386678292065533E+00, 0.3403588894097180E+00, 0.4021095747913879E+00, 0.1359492109368225E+01, 0.1013013804731768E+01, 0.2411467892724848E+00, 0.6997408538631263E+00, 0.3392875246772514E+00, 0.4685122433619579E+00, 0.1652848117124708E+00, 0.1248257304047288E+00, 0.4228949559754990E+00, 0.4492589344427766E+00, 0.1708424320817961E+00, 0.1518244930621437E+00, 0.3159848280636428E+00, 0.4758679007372426E+00, 0.6745243660763246E-01, 0.2386301922514691E-01, 0.8251512110211983E+00, 0.8931789553886716E+00, 0.7711819686391232E-03, 0.1232835205710967E-01, 0.3794316855579739E-01, 0.5161612293293578E-01, 0.3606500256058598E-05, 0.1887408451311279E-05, 0.6510811153270980E-01, 0.7250261437426894E-01, 0.4479235177066975E-02, 0.5512763475647510E-02, 0.3551880209093845E-01, 0.5290169708495600E-01, 0.7843816205451699E-05, 0.7197207696703830E-05}, + tauOut: 2.4222106054237202E-002, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.2605878684924073E+01, 0.2583602082867062E+01, 0.1945503997226627E-02, 0.1349628161076996E-02, 0.1792287311167312E+01, 0.1785027232360876E+01, 0.1831165540887852E-01, 0.1961486711855321E-01, 0.1912064812489923E+01, 0.1868762873963372E+01, 0.5350346462390188E-03, 0.2619677421449130E-03, 0.9149979242236238E+00, 0.8927135421960001E+00, 0.2199691768758329E-02, 0.3512385223173503E-02, 0.1425451464914127E+01, 0.1683464700943265E+01, 0.2857477273065492E+00, 0.1556056649653108E+00, 0.9167409543554429E+00, 0.7369210271521004E+00, 0.7843816205451699E-05, 0.1068633642713914E-04, 0.1003973806896052E+01, 0.9891595131364276E+00, 0.9418498631040351E-02, 0.4876860034049891E-02, 0.5121827465172590E+00, 0.4853475128900360E+00, 0.2263732461064059E-02, 0.1959578858316830E-02, 0.4201365406709412E+00, 0.4250255695118534E+00, 0.3107071375346623E-01, 0.8749008776201990E-01, 0.1196803030427524E+01, 0.1425449726020986E+01, 0.3403588894097180E+00, 0.3246099922425689E+00, 0.1359492109368225E+01, 0.1251806800343904E+01, 0.2411467892724848E+00, 0.6536000379104072E-01, 0.3392875246772514E+00, 0.4149902265444443E+00, 0.1652848117124708E+00, 0.1684331550518530E+00, 0.4228949559754990E+00, 0.4010821269512049E+00, 0.1708424320817961E+00, 0.1345949193440586E+00, 0.3159848280636428E+00, 0.2246202392729794E+00, 0.6745243660763246E-01, 0.2477891570824889E+00, 0.8251512110211983E+00, 0.5539111298531113E+00, 0.7711819686391232E-03, 0.5282632149136541E-04, 0.3794316855579739E-01, 0.1367184268032488E-01, 0.3606500256058598E-05, 0.1717489195894037E-04, 0.6510811153270980E-01, 0.4534806576358064E-01, 0.4479235177066975E-02, 0.3508353996892708E-02, 0.3551880209093845E-01, 0.7788342039808532E-02, 0.7843816205451699E-05, 0.1068633642713914E-04, 0.2434478048112329E-01}, + i0: 1, + n0: 18, + pp: 1, + n0in: 18, + dmin: 7.7883420398085317E-003, + dmin1: 1.3668236180068825E-002, + dmin2: 1.3668236180068825E-002, + dn: 7.7883420398085317E-003, + dn1: 4.0868830586513666E-002, + dn2: 1.3668236180068825E-002, + tau: 2.4222106054237202E-002, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.2605878684924073E+01, 0.2583602082867062E+01, 0.1945503997226627E-02, 0.1349628161076996E-02, 0.1792287311167312E+01, 0.1785027232360876E+01, 0.1831165540887852E-01, 0.1961486711855321E-01, 0.1912064812489923E+01, 0.1868762873963372E+01, 0.5350346462390188E-03, 0.2619677421449130E-03, 0.9149979242236238E+00, 0.8927135421960001E+00, 0.2199691768758329E-02, 0.3512385223173503E-02, 0.1425451464914127E+01, 0.1683464700943265E+01, 0.2857477273065492E+00, 0.1556056649653108E+00, 0.9167409543554429E+00, 0.7369210271521004E+00, 0.7843816205451699E-05, 0.1068633642713914E-04, 0.1003973806896052E+01, 0.9891595131364276E+00, 0.9418498631040351E-02, 0.4876860034049891E-02, 0.5121827465172590E+00, 0.4853475128900360E+00, 0.2263732461064059E-02, 0.1959578858316830E-02, 0.4201365406709412E+00, 0.4250255695118534E+00, 0.3107071375346623E-01, 0.8749008776201990E-01, 0.1196803030427524E+01, 0.1425449726020986E+01, 0.3403588894097180E+00, 0.3246099922425689E+00, 0.1359492109368225E+01, 0.1251806800343904E+01, 0.2411467892724848E+00, 0.6536000379104072E-01, 0.3392875246772514E+00, 0.4149902265444443E+00, 0.1652848117124708E+00, 0.1684331550518530E+00, 0.4228949559754990E+00, 0.4010821269512049E+00, 0.1708424320817961E+00, 0.1345949193440586E+00, 0.3159848280636428E+00, 0.2246202392729794E+00, 0.6745243660763246E-01, 0.2477891570824889E+00, 0.8251512110211983E+00, 0.5539111298531113E+00, 0.7711819686391232E-03, 0.5282632149136541E-04, 0.3794316855579739E-01, 0.1367184268032488E-01, 0.3606500256058598E-05, 0.1717489195894037E-04, 0.6510811153270980E-01, 0.4534806576358064E-01, 0.4479235177066975E-02, 0.3508353996892708E-02, 0.3551880209093845E-01, 0.7788342039808532E-02, 0.7843816205451699E-05, 0.1068633642713914E-04, 0.2434478048112329E-01}, + tauOut: 5.1484099711571517E-003, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + + { + z: []float64{0.1845045664413523E+01, 0.1845045673681623E+01, 0.9284324334305927E-09, 0.1331924177594376E-08, 0.1286110617891388E+01, 0.1286109423357647E+01, 0.8600075793510468E-06, 0.1206062196852843E-05, 0.9228692597002398E+00, 0.9170877606119078E+00, 0.7344017075309068E-02, 0.5782369695935185E-02, 0.1164764979181097E+01, 0.1172109006845551E+01, 0.1416795225784663E-10, 0.1087898982148097E-10, 0.1516899526939413E+01, 0.1516899536394917E+01, 0.1175479719901021E-09, 0.1158688024893155E-08, 0.1569402316257081E+00, 0.1538882419371820E+00, 0.4821181617659422E-02, 0.3052000406097992E-02, 0.2431018491557045E+00, 0.2479152225121892E+00, 0.8755391955186837E-05, 0.7818861198543554E-05, 0.2722314297289909E+00, 0.2722202019375114E+00, 0.1357252989661879E-04, 0.1999378345859679E-04, 0.1847873189363651E+00, 0.1848009020627515E+00, 0.2027258571663375E-18, 0.3534048617228375E-11, 0.4750110334503861E-13, 0.1060007138617788E-07, 0.1416795225784663E-10, 0.1087898982148097E-10}, + i0: 1, + n0: 10, + pp: 0, + n0in: 10, + dmin: 4.7501103345038606E-014, + dmin1: 0.15388823121961009, + dmin2: 0.15388823121961009, + dn: 4.7501103345038606E-014, + dn1: 0.18478731893283101, + dn2: 0.27221143594553232, + tau: 1.0600023884871808E-008, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1845045664413523E+01, 0.1845045673681623E+01, 0.9284324334305927E-09, 0.1331924177594376E-08, 0.1286110617891388E+01, 0.1286109423357647E+01, 0.8600075793510468E-06, 0.1206062196852843E-05, 0.9228692597002398E+00, 0.9170877606119078E+00, 0.7344017075309068E-02, 0.5782369695935185E-02, 0.1164764979181097E+01, 0.1172109006845551E+01, 0.1416795225784663E-10, 0.1087898982148097E-10, 0.1516899526939413E+01, 0.1516899536394917E+01, 0.1175479719901021E-09, 0.1158688024893155E-08, 0.1569402316257081E+00, 0.1538882419371820E+00, 0.4821181617659422E-02, 0.3052000406097992E-02, 0.2431018491557045E+00, 0.2479152225121892E+00, 0.8755391955186837E-05, 0.7818861198543554E-05, 0.2722314297289909E+00, 0.2722202019375114E+00, 0.1357252989661879E-04, 0.1999378345859679E-04, 0.1847873189363651E+00, 0.1848009020627515E+00, 0.2027258571663375E-18, 0.3534048617228375E-11, 0.4750110334503861E-13, 0.1060007138617788E-07, 0.1416795225784663E-10, 0.1087898982148097E-10}, + tauOut: 4.7501103294055340E-014, + ttypeOut: -4, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1845045664413523E+01, 0.1845045665341908E+01, 0.9284324334305927E-09, 0.6471746651368383E-09, 0.1286110617891388E+01, 0.1286111477251745E+01, 0.8600075793510468E-06, 0.6171117917307419E-06, 0.9228692597002398E+00, 0.9302126596637096E+00, 0.7344017075309068E-02, 0.9195804644198721E-02, 0.1164764979181097E+01, 0.1155569174551018E+01, 0.1416795225784663E-10, 0.1859807318413278E-10, 0.1516899526939413E+01, 0.1516899527038316E+01, 0.1175479719901021E-09, 0.1216165317638265E-10, 0.1569402316257081E+00, 0.1617614132311584E+00, 0.4821181617659422E-02, 0.7245474325163344E-02, 0.2431018491557045E+00, 0.2358651302224488E+00, 0.8755391955186837E-05, 0.1010532106865606E-04, 0.2722314297289909E+00, 0.2722348969377714E+00, 0.1357252989661879E-04, 0.9212747663842461E-05, 0.1847873189363651E+00, 0.1847781061886537E+00, 0.2027258571663375E-18, 0.5211495068651724E-31, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 10, + dmin: 5.0983266199979805E-023, + dmin1: 0.15694023161349893, + dmin2: 0.15694023161349893, + dn: 5.0983266199979805E-023, + dn1: 0.18477810618865373, + dn2: 0.27222132440787472, + tau: 4.7501103294055340E-014, + ttype: -4, + g: 0.0000000000000000, + zOut: []float64{0.1845045664413523E+01, 0.1845045665341908E+01, 0.9284324334305927E-09, 0.6471746651368383E-09, 0.1286110617891388E+01, 0.1286111477251745E+01, 0.8600075793510468E-06, 0.6171117917307419E-06, 0.9228692597002398E+00, 0.9302126596637096E+00, 0.7344017075309068E-02, 0.9195804644198721E-02, 0.1164764979181097E+01, 0.1155569174551018E+01, 0.1416795225784663E-10, 0.1859807318413278E-10, 0.1516899526939413E+01, 0.1516899527038316E+01, 0.1175479719901021E-09, 0.1216165317638265E-10, 0.1569402316257081E+00, 0.1617614132311584E+00, 0.4821181617659422E-02, 0.7245474325163344E-02, 0.2431018491557045E+00, 0.2358651302224488E+00, 0.8755391955186837E-05, 0.1010532106865606E-04, 0.2722314297289909E+00, 0.2722348969377714E+00, 0.1357252989661879E-04, 0.9212747663842461E-05, 0.1847873189363651E+00, 0.1847781061886537E+00, 0.2027258571663375E-18, 0.5211495068651724E-31, 0.8046649468928653E+00}, + tauOut: 3.9235057903374733E-002, + ttypeOut: -9, + gOut: 0.0000000000000000, + }, + { + z: []float64{0.1805810608085708E+01, 0.1845045665341908E+01, 0.4609225136302542E-09, 0.6471746651368383E-09, 0.1246877035999240E+01, 0.1286111477251745E+01, 0.4603863769418564E-06, 0.6171117917307419E-06, 0.9001729460181566E+00, 0.9302126596637096E+00, 0.1180482975969687E-01, 0.9195804644198721E-02, 0.1104529286906545E+01, 0.1155569174551018E+01, 0.2554156666668993E-10, 0.1859807318413278E-10, 0.1477664469121561E+01, 0.1516899527038316E+01, 0.1331348385339719E-11, 0.1216165317638265E-10, 0.1297718296516156E+00, 0.1617614132311584E+00, 0.1316891924708087E-01, 0.7245474325163344E-02, 0.1834712583930619E+00, 0.2358651302224488E+00, 0.1499428882618218E-04, 0.1010532106865606E-04, 0.2329940574932343E+00, 0.2722348969377714E+00, 0.7306255294378852E-05, 0.9212747663842461E-05, 0.1455357420299846E+00, 0.1847781061886537E+00, 0.1331348385339719E-11, 0.1216165317638265E-10}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 0.12252635532645229, + dmin1: 0.12252635532645229, + dmin2: 0.12252635532645229, + dn: 0.14553574202998462, + dn1: 0.23298484474557046, + dn2: 0.18346115307199323, + tau: 3.9235057903374733E-002, + ttype: -9, + g: 0.0000000000000000, + zOut: []float64{0.1805810608085708E+01, 0.1845045665341908E+01, 0.4609225136302542E-09, 0.6471746651368383E-09, 0.1246877035999240E+01, 0.1286111477251745E+01, 0.4603863769418564E-06, 0.6171117917307419E-06, 0.9001729460181566E+00, 0.9302126596637096E+00, 0.1180482975969687E-01, 0.9195804644198721E-02, 0.1104529286906545E+01, 0.1155569174551018E+01, 0.2554156666668993E-10, 0.1859807318413278E-10, 0.1477664469121561E+01, 0.1516899527038316E+01, 0.1331348385339719E-11, 0.1216165317638265E-10, 0.1297718296516156E+00, 0.1617614132311584E+00, 0.1316891924708087E-01, 0.7245474325163344E-02, 0.1834712583930619E+00, 0.2358651302224488E+00, 0.1499428882618218E-04, 0.1010532106865606E-04, 0.2329940574932343E+00, 0.2722348969377714E+00, 0.7306255294378852E-05, 0.9212747663842461E-05, 0.1455357420299846E+00, 0.1847781061886537E+00, 0.1331348385339719E-11, 0.1216165317638265E-10}, + tauOut: 3.0631588831613071E-002, + ttypeOut: -6, + gOut: 0.25000000000000000, + }, + { + z: []float64{0.1805810608085708E+01, 0.1775179019715018E+01, 0.4609225136302542E-09, 0.3237497126982006E-09, 0.1246877035999240E+01, 0.1216245907230254E+01, 0.4603863769418564E-06, 0.3407430674789675E-06, 0.9001729460181566E+00, 0.8813458462031728E+00, 0.1180482975969687E-01, 0.1479416990810367E-01, 0.1104529286906545E+01, 0.1059103528192370E+01, 0.2554156666668993E-10, 0.3563567162644001E-10, 0.1477664469121561E+01, 0.1447032880255644E+01, 0.1331348385339719E-11, 0.1193970905752580E-12, 0.1297718296516156E+00, 0.1123091600669640E+00, 0.1316891924708087E-01, 0.2151309995104528E-01, 0.1834712583930619E+00, 0.1313415638992297E+00, 0.1499428882618218E-04, 0.2659919745982362E-04, 0.2329940574932343E+00, 0.2023431757194558E+00, 0.7306255294378852E-05, 0.5255039029347846E-05, 0.1455357420299846E+00, 0.1148988981593422E+00, 0.1331348385339719E-11, 0.1193970905752580E-12, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 9.9140240819883152E-002, + dmin1: 9.9140240819883152E-002, + dmin2: 9.9140240819883152E-002, + dn: 0.11489889815934221, + dn1: 0.20233586946416143, + dn2: 0.13132656961040354, + tau: 3.0631588831613071E-002, + ttype: -6, + g: 0.25000000000000000, + zOut: []float64{0.1805810608085708E+01, 0.1775179019715018E+01, 0.4609225136302542E-09, 0.3237497126982006E-09, 0.1246877035999240E+01, 0.1216245907230254E+01, 0.4603863769418564E-06, 0.3407430674789675E-06, 0.9001729460181566E+00, 0.8813458462031728E+00, 0.1180482975969687E-01, 0.1479416990810367E-01, 0.1104529286906545E+01, 0.1059103528192370E+01, 0.2554156666668993E-10, 0.3563567162644001E-10, 0.1477664469121561E+01, 0.1447032880255644E+01, 0.1331348385339719E-11, 0.1193970905752580E-12, 0.1297718296516156E+00, 0.1123091600669640E+00, 0.1316891924708087E-01, 0.2151309995104528E-01, 0.1834712583930619E+00, 0.1313415638992297E+00, 0.1499428882618218E-04, 0.2659919745982362E-04, 0.2329940574932343E+00, 0.2023431757194558E+00, 0.7306255294378852E-05, 0.5255039029347846E-05, 0.1455357420299846E+00, 0.1148988981593422E+00, 0.1331348385339719E-11, 0.1193970905752580E-12, 0.8046649468928653E+00}, + tauOut: 4.9545335349736611E-002, + ttypeOut: -6, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1725633684689031E+01, 0.1775179019715018E+01, 0.2281824158451768E-09, 0.3237497126982006E-09, 0.1166700912395402E+01, 0.1216245907230254E+01, 0.2574031475886406E-06, 0.3407430674789675E-06, 0.8465944233583922E+00, 0.8813458462031728E+00, 0.1850774953630535E-01, 0.1479416990810367E-01, 0.9910504433419636E+00, 0.1059103528192370E+01, 0.5203164874187830E-10, 0.3563567162644001E-10, 0.1397487544853995E+01, 0.1447032880255644E+01, 0.9595353465813834E-14, 0.1193970905752580E-12, 0.8427692466826309E-01, 0.1123091600669640E+00, 0.3352713928531350E-01, 0.2151309995104528E-01, 0.4829568846163943E-01, 0.1313415638992297E+00, 0.1114419580100731E-03, 0.2659919745982362E-04, 0.1526916534507385E+00, 0.2023431757194558E+00, 0.3954362799871079E-05, 0.5255039029347846E-05, 0.6534960844680572E-01, 0.1148988981593422E+00, 0.9595353465813834E-14, 0.1193970905752580E-12}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 4.8269089264179610E-002, + dmin1: 4.8269089264179610E-002, + dmin2: 4.8269089264179610E-002, + dn: 6.5349608446805721E-002, + dn1: 0.15268639841170917, + dn2: 4.8269089264179610E-002, + tau: 4.9545335349736611E-002, + ttype: -6, + g: 0.49975000000000003, + zOut: []float64{0.1725633684689031E+01, 0.1775179019715018E+01, 0.2281824158451768E-09, 0.3237497126982006E-09, 0.1166700912395402E+01, 0.1216245907230254E+01, 0.2574031475886406E-06, 0.3407430674789675E-06, 0.8465944233583922E+00, 0.8813458462031728E+00, 0.1850774953630535E-01, 0.1479416990810367E-01, 0.9910504433419636E+00, 0.1059103528192370E+01, 0.5203164874187830E-10, 0.3563567162644001E-10, 0.1397487544853995E+01, 0.1447032880255644E+01, 0.9595353465813834E-14, 0.1193970905752580E-12, 0.8427692466826309E-01, 0.1123091600669640E+00, 0.3352713928531350E-01, 0.2151309995104528E-01, 0.4829568846163943E-01, 0.1313415638992297E+00, 0.1114419580100731E-03, 0.2659919745982362E-04, 0.1526916534507385E+00, 0.2023431757194558E+00, 0.3954362799871079E-05, 0.5255039029347846E-05, 0.6534960844680572E-01, 0.1148988981593422E+00, 0.9595353465813834E-14, 0.1193970905752580E-12}, + tauOut: 1.2037453975339630E-002, + ttypeOut: -5, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1725633684689031E+01, 0.1713596230941874E+01, 0.2281824158451768E-09, 0.1553578538234923E-09, 0.1166700912395402E+01, 0.1154663715667853E+01, 0.2574031475886406E-06, 0.1887268702969492E-06, 0.8465944233583922E+00, 0.8530645301924875E+00, 0.1850774953630535E-01, 0.2150143715280096E-01, 0.9910504433419636E+00, 0.9575115522658546E+00, 0.5203164874187830E-10, 0.7594016059954953E-10, 0.1397487544853995E+01, 0.1385450090802725E+01, 0.9595353465813834E-14, 0.5836853211617396E-15, 0.8427692466826309E-01, 0.1057666099782364E+00, 0.3352713928531350E-01, 0.1530933320323569E-01, 0.4829568846163943E-01, 0.2106034324107419E-01, 0.1114419580100731E-03, 0.8079762346493418E-03, 0.1526916534507385E+00, 0.1398501776035494E+00, 0.3954362799871079E-05, 0.1847806452993955E-05, 0.6534960844680572E-01, 0.5331030666501309E-01, 0.9595353465813834E-14, 0.5836853211617396E-15, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 2.0948901283064113E-002, + dmin1: 2.0948901283064113E-002, + dmin2: 2.0948901283064113E-002, + dn: 5.3310306665013088E-002, + dn1: 0.13984622324074955, + dn2: 2.0948901283064113E-002, + tau: 1.2037453975339630E-002, + ttype: -5, + g: 0.49975000000000003, + zOut: []float64{0.1725633684689031E+01, 0.1713596230941874E+01, 0.2281824158451768E-09, 0.1553578538234923E-09, 0.1166700912395402E+01, 0.1154663715667853E+01, 0.2574031475886406E-06, 0.1887268702969492E-06, 0.8465944233583922E+00, 0.8530645301924875E+00, 0.1850774953630535E-01, 0.2150143715280096E-01, 0.9910504433419636E+00, 0.9575115522658546E+00, 0.5203164874187830E-10, 0.7594016059954953E-10, 0.1397487544853995E+01, 0.1385450090802725E+01, 0.9595353465813834E-14, 0.5836853211617396E-15, 0.8427692466826309E-01, 0.1057666099782364E+00, 0.3352713928531350E-01, 0.1530933320323569E-01, 0.4829568846163943E-01, 0.2106034324107419E-01, 0.1114419580100731E-03, 0.8079762346493418E-03, 0.1526916534507385E+00, 0.1398501776035494E+00, 0.3954362799871079E-05, 0.1847806452993955E-05, 0.6534960844680572E-01, 0.5331030666501309E-01, 0.9595353465813834E-14, 0.5836853211617396E-15, 0.8046649468928653E+00}, + tauOut: 1.1070386405955311E-002, + ttypeOut: -5, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1702525844691276E+01, 0.1713596230941874E+01, 0.1053646717395619E-09, 0.1553578538234923E-09, 0.1143593517883403E+01, 0.1154663715667853E+01, 0.1407809649380857E-06, 0.1887268702969492E-06, 0.8634954401583683E+00, 0.8530645301924875E+00, 0.2384248197112572E-01, 0.2150143715280096E-01, 0.9225986839647138E+00, 0.9575115522658546E+00, 0.1140379931457212E-09, 0.7594016059954953E-10, 0.1374379704282732E+01, 0.1385450090802725E+01, 0.4491802194179927E-16, 0.5836853211617396E-15, 0.1100055567755167E+00, 0.1057666099782364E+00, 0.2930941140637693E-02, 0.1530933320323569E-01, 0.7866991929130526E-02, 0.2106034324107419E-01, 0.1436325611276508E-01, 0.8079762346493418E-03, 0.1144183828912820E+00, 0.1398501776035494E+00, 0.8609379557504958E-06, 0.1847806452993955E-05, 0.4223905932110202E-01, 0.5331030666501309E-01, 0.4491802194179927E-16, 0.5836853211617396E-15}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 7.0590156944811844E-003, + dmin1: 7.0590156944811844E-003, + dmin2: 7.0590156944811844E-003, + dn: 4.2239059321102022E-002, + dn1: 0.11441653508482905, + dn2: 7.0590156944811844E-003, + tau: 1.1070386405955311E-002, + ttype: -5, + g: 0.49975000000000003, + zOut: []float64{0.1702525844691276E+01, 0.1713596230941874E+01, 0.1053646717395619E-09, 0.1553578538234923E-09, 0.1143593517883403E+01, 0.1154663715667853E+01, 0.1407809649380857E-06, 0.1887268702969492E-06, 0.8634954401583683E+00, 0.8530645301924875E+00, 0.2384248197112572E-01, 0.2150143715280096E-01, 0.9225986839647138E+00, 0.9575115522658546E+00, 0.1140379931457212E-09, 0.7594016059954953E-10, 0.1374379704282732E+01, 0.1385450090802725E+01, 0.4491802194179927E-16, 0.5836853211617396E-15, 0.1100055567755167E+00, 0.1057666099782364E+00, 0.2930941140637693E-02, 0.1530933320323569E-01, 0.7866991929130526E-02, 0.2106034324107419E-01, 0.1436325611276508E-01, 0.8079762346493418E-03, 0.1144183828912820E+00, 0.1398501776035494E+00, 0.8609379557504958E-06, 0.1847806452993955E-05, 0.4223905932110202E-01, 0.5331030666501309E-01, 0.4491802194179927E-16, 0.5836853211617396E-15}, + tauOut: 5.5670727120955849E-003, + ttypeOut: -5, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1702525844691276E+01, 0.1696958772084545E+01, 0.1053646717395619E-09, 0.7100605954454643E-10, 0.1143593517883403E+01, 0.1138026585881266E+01, 0.1407809649380857E-06, 0.1068197551738174E-06, 0.8634954401583683E+00, 0.8817707425976433E+00, 0.2384248197112572E-01, 0.2494644177488929E-01, 0.9225986839647138E+00, 0.8920851695917670E+00, 0.1140379931457212E-09, 0.1756911880603681E-09, 0.1374379704282732E+01, 0.1368812631394945E+01, 0.4491802194179927E-16, 0.3609867340226789E-17, 0.1100055567755167E+00, 0.1073694252040588E+00, 0.2930941140637693E-02, 0.2147509894397918E-03, 0.7866991929130526E-02, 0.1644842434036023E-01, 0.1436325611276508E-01, 0.9991355423895336E-01, 0.1144183828912820E+00, 0.8938616878188867E-02, 0.8609379557504958E-06, 0.4068326216494222E-05, 0.4223905932110202E-01, 0.3666791828278994E-01, 0.4491802194179927E-16, 0.3609867340226789E-17, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 2.0851682275951503E-003, + dmin1: 2.0851682275951503E-003, + dmin2: 2.0851682275951503E-003, + dn: 3.6667918282789938E-002, + dn1: 8.9377559402331157E-003, + dn2: 2.0851682275951503E-003, + tau: 5.5670727120955849E-003, + ttype: -5, + g: 0.49975000000000003, + zOut: []float64{0.1702525844691276E+01, 0.1696958772084545E+01, 0.1053646717395619E-09, 0.7100605954454643E-10, 0.1143593517883403E+01, 0.1138026585881266E+01, 0.1407809649380857E-06, 0.1068197551738174E-06, 0.8634954401583683E+00, 0.8817707425976433E+00, 0.2384248197112572E-01, 0.2494644177488929E-01, 0.9225986839647138E+00, 0.8920851695917670E+00, 0.1140379931457212E-09, 0.1756911880603681E-09, 0.1374379704282732E+01, 0.1368812631394945E+01, 0.4491802194179927E-16, 0.3609867340226789E-17, 0.1100055567755167E+00, 0.1073694252040588E+00, 0.2930941140637693E-02, 0.2147509894397918E-03, 0.7866991929130526E-02, 0.1644842434036023E-01, 0.1436325611276508E-01, 0.9991355423895336E-01, 0.1144183828912820E+00, 0.8938616878188867E-02, 0.8609379557504958E-06, 0.4068326216494222E-05, 0.4223905932110202E-01, 0.3666791828278994E-01, 0.4491802194179927E-16, 0.3609867340226789E-17, 0.8046649468928653E+00}, + tauOut: 1.1659821590613959E-003, + ttypeOut: -5, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695792789996490E+01, 0.1696958772084545E+01, 0.4765133098633433E-10, 0.7100605954454643E-10, 0.1136860710494309E+01, 0.1138026585881266E+01, 0.8285142935651389E-07, 0.1068197551738174E-06, 0.9055511193620417E+00, 0.8817707425976433E+00, 0.2457547703893446E-01, 0.2494644177488929E-01, 0.8663437105694624E+00, 0.8920851695917670E+00, 0.2775899617066991E-09, 0.1756911880603681E-09, 0.1367646648958294E+01, 0.1368812631394945E+01, 0.2833987723936393E-18, 0.3609867340226789E-17, 0.1064181940344372E+00, 0.1073694252040588E+00, 0.3319277717374952E-04, 0.2147509894397918E-03, 0.1151628036430784E+00, 0.1644842434036023E-01, 0.7755012504281143E-02, 0.9991355423895336E-01, 0.2169054106282214E-04, 0.8938616878188867E-02, 0.6877516463147774E-02, 0.4068326216494222E-05, 0.2862441966058077E-01, 0.3666791828278994E-01, 0.2833987723936393E-18, 0.3609867340226789E-17}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 1.7622214846327918E-005, + dmin1: 1.7622214846327918E-005, + dmin2: 1.5249249404125084E-002, + dn: 2.8624419660580765E-002, + dn1: 1.7622214846327918E-005, + dn2: 1.5249249404125084E-002, + tau: 1.1659821590613959E-003, + ttype: -5, + g: 0.49975000000000003, + zOut: []float64{0.1695792789996490E+01, 0.1696958772084545E+01, 0.4765133098633433E-10, 0.7100605954454643E-10, 0.1136860710494309E+01, 0.1138026585881266E+01, 0.8285142935651389E-07, 0.1068197551738174E-06, 0.9055511193620417E+00, 0.8817707425976433E+00, 0.2457547703893446E-01, 0.2494644177488929E-01, 0.8663437105694624E+00, 0.8920851695917670E+00, 0.2775899617066991E-09, 0.1756911880603681E-09, 0.1367646648958294E+01, 0.1368812631394945E+01, 0.2833987723936393E-18, 0.3609867340226789E-17, 0.1064181940344372E+00, 0.1073694252040588E+00, 0.3319277717374952E-04, 0.2147509894397918E-03, 0.1151628036430784E+00, 0.1644842434036023E-01, 0.7755012504281143E-02, 0.9991355423895336E-01, 0.2169054106282214E-04, 0.8938616878188867E-02, 0.6877516463147774E-02, 0.4068326216494222E-05, 0.2862441966058077E-01, 0.3666791828278994E-01, 0.2833987723936393E-18, 0.3609867340226789E-17}, + tauOut: 1.2076215031173109E-005, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695792789996490E+01, 0.1695780713829110E+01, 0.4765133098633433E-10, 0.3194571418305606E-10, 0.1136860710494309E+01, 0.1136848717098761E+01, 0.8285142935651389E-07, 0.6599488873594650E-07, 0.9055511193620417E+00, 0.9301144541910563E+00, 0.2457547703893446E-01, 0.2289052693567938E-01, 0.8663437105694624E+00, 0.8434411076963417E+00, 0.2775899617066991E-09, 0.4501143914475995E-09, 0.1367646648958294E+01, 0.1367634572293148E+01, 0.2833987723936393E-18, 0.2205178646452290E-19, 0.1064181940344372E+00, 0.1064393105965798E+00, 0.3319277717374952E-04, 0.3591317210346347E-04, 0.1151628036430784E+00, 0.1228698267602250E+00, 0.7755012504281143E-02, 0.1369013219942635E-05, 0.2169054106282214E-04, 0.6885761775959480E-02, 0.6877516463147774E-02, 0.2859014352646020E-01, 0.2862441966058077E-01, 0.2219991908939190E-04, 0.2833987723936393E-18, 0.2205178646452290E-19, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 8.2453128117063980E-006, + dmin1: 8.2453128117063980E-006, + dmin2: 0.10640611781940604, + dn: 2.2199919089391903E-005, + dn1: 8.2453128117063980E-006, + dn2: 0.11511481425594380, + tau: 1.2076215031173109E-005, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1695792789996490E+01, 0.1695780713829110E+01, 0.4765133098633433E-10, 0.3194571418305606E-10, 0.1136860710494309E+01, 0.1136848717098761E+01, 0.8285142935651389E-07, 0.6599488873594650E-07, 0.9055511193620417E+00, 0.9301144541910563E+00, 0.2457547703893446E-01, 0.2289052693567938E-01, 0.8663437105694624E+00, 0.8434411076963417E+00, 0.2775899617066991E-09, 0.4501143914475995E-09, 0.1367646648958294E+01, 0.1367634572293148E+01, 0.2833987723936393E-18, 0.2205178646452290E-19, 0.1064181940344372E+00, 0.1064393105965798E+00, 0.3319277717374952E-04, 0.3591317210346347E-04, 0.1151628036430784E+00, 0.1228698267602250E+00, 0.7755012504281143E-02, 0.1369013219942635E-05, 0.2169054106282214E-04, 0.6885761775959480E-02, 0.6877516463147774E-02, 0.2859014352646020E-01, 0.2862441966058077E-01, 0.2219991908939190E-04, 0.2833987723936393E-18, 0.2205178646452290E-19, 0.8046649468928653E+00}, + tauOut: 3.2770273787704380E-006, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695777436833677E+01, 0.1695780713829110E+01, 0.2141639781080129E-10, 0.3194571418305606E-10, 0.1136845506044855E+01, 0.1136848717098761E+01, 0.5399396803668456E-07, 0.6599488873594650E-07, 0.9530016501053890E+00, 0.9301144541910563E+00, 0.2025894854667596E-01, 0.2289052693567938E-01, 0.8231788825724013E+00, 0.8434411076963417E+00, 0.7478228806194929E-09, 0.4501143914475995E-09, 0.1367631294517947E+01, 0.1367634572293148E+01, 0.1716235185693175E-20, 0.2205178646452290E-19, 0.1064719467413045E+00, 0.1064393105965798E+00, 0.4144420544393849E-04, 0.3591317210346347E-04, 0.1228264745406222E+00, 0.1228698267602250E+00, 0.7674810284932935E-07, 0.1369013219942635E-05, 0.3547255152693805E-01, 0.6885761775959480E-02, 0.1789267604726782E-04, 0.2859014352646020E-01, 0.1030215663353646E-05, 0.2219991908939190E-04, 0.1716235185693175E-20, 0.2205178646452290E-19}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 1.0302156633536465E-006, + dmin1: 6.8824080004778604E-003, + dmin2: 0.10643603356920101, + dn: 1.0302156633536465E-006, + dn1: 6.8824080004778604E-003, + dn2: 0.12282510552740224, + tau: 3.2770273787704380E-006, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1695777436833677E+01, 0.1695780713829110E+01, 0.2141639781080129E-10, 0.3194571418305606E-10, 0.1136845506044855E+01, 0.1136848717098761E+01, 0.5399396803668456E-07, 0.6599488873594650E-07, 0.9530016501053890E+00, 0.9301144541910563E+00, 0.2025894854667596E-01, 0.2289052693567938E-01, 0.8231788825724013E+00, 0.8434411076963417E+00, 0.7478228806194929E-09, 0.4501143914475995E-09, 0.1367631294517947E+01, 0.1367634572293148E+01, 0.1716235185693175E-20, 0.2205178646452290E-19, 0.1064719467413045E+00, 0.1064393105965798E+00, 0.4144420544393849E-04, 0.3591317210346347E-04, 0.1228264745406222E+00, 0.1228698267602250E+00, 0.7674810284932935E-07, 0.1369013219942635E-05, 0.3547255152693805E-01, 0.6885761775959480E-02, 0.1789267604726782E-04, 0.2859014352646020E-01, 0.1030215663353646E-05, 0.2219991908939190E-04, 0.1716235185693175E-20, 0.2205178646452290E-19}, + tauOut: 1.0296962592568820E-006, + ttypeOut: -2, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695777436833677E+01, 0.1695776407158834E+01, 0.2141639781080129E-10, 0.1435751523850387E-10, 0.1136845506044855E+01, 0.1136844530328206E+01, 0.5399396803668456E-07, 0.4526242530264241E-07, 0.9530016501053890E+00, 0.9732595236933804E+00, 0.2025894854667596E-01, 0.1713493494875720E-01, 0.8231788825724013E+00, 0.8060429186752077E+00, 0.7478228806194929E-09, 0.1268848035998799E-08, 0.1367631294517947E+01, 0.1367630263552839E+01, 0.1716235185693175E-20, 0.1336113320657127E-21, 0.1064719467413045E+00, 0.1065123612504892E+00, 0.4144420544393849E-04, 0.4779206455525695E-04, 0.1228264745406222E+00, 0.1227777295279105E+00, 0.7674810284932935E-07, 0.2217381803186623E-07, 0.3547255152693805E-01, 0.3548939233290803E-01, 0.1789267604726782E-04, 0.5194035150079302E-09, 0.1030215663353646E-05, 0.5817566277343568E-15, 0.1716235185693175E-20, 0.1336113320657127E-21, 0.8046649468928653E+00}, + i0: 1, + n0: 9, + pp: 1, + n0in: 9, + dmin: 5.8175662773435680E-016, + dmin1: 3.5471499656860764E-002, + dmin2: 0.10647091704504522, + dn: 5.8175662773435680E-016, + dn1: 3.5471499656860764E-002, + dn2: 0.12277765277980766, + tau: 1.0296962592568820E-006, + ttype: -2, + g: 0.49975000000000003, + zOut: []float64{0.1695777436833677E+01, 0.1695776407158834E+01, 0.2141639781080129E-10, 0.1435751523850387E-10, 0.1136845506044855E+01, 0.1136844530328206E+01, 0.5399396803668456E-07, 0.4526242530264241E-07, 0.9530016501053890E+00, 0.9732595236933804E+00, 0.2025894854667596E-01, 0.1713493494875720E-01, 0.8231788825724013E+00, 0.8060429186752077E+00, 0.7478228806194929E-09, 0.1268848035998799E-08, 0.1367631294517947E+01, 0.1367630263552839E+01, 0.1716235185693175E-20, 0.1336113320657127E-21, 0.1064719467413045E+00, 0.1065123612504892E+00, 0.4144420544393849E-04, 0.4779206455525695E-04, 0.1228264745406222E+00, 0.1227777295279105E+00, 0.7674810284932935E-07, 0.2217381803186623E-07, 0.3547255152693805E-01, 0.3548939233290803E-01, 0.1789267604726782E-04, 0.5194035150079302E-09, 0.1030215663353646E-05, 0.5817566277343568E-15, 0.1716235185693175E-20, 0.1336113320657127E-21, 0.8046649468928653E+00}, + tauOut: 5.8175661922007790E-016, + ttypeOut: -2, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695776407173191E+01, 0.1695776407158834E+01, 0.9625244577618415E-11, 0.1435751523850387E-10, 0.1136844575581005E+01, 0.1136844530328206E+01, 0.3874943632355666E-07, 0.4526242530264241E-07, 0.9903944198927007E+00, 0.9732595236933804E+00, 0.1394544708652782E-01, 0.1713493494875720E-01, 0.7920974728575274E+00, 0.8060429186752077E+00, 0.2190784636165185E-08, 0.1268848035998799E-08, 0.1367630261362054E+01, 0.1367630263552839E+01, 0.1040577915698430E-22, 0.1336113320657127E-21, 0.1065601533150438E+00, 0.1065123612504892E+00, 0.5506562249584694E-04, 0.4779206455525695E-04, 0.1227226860792321E+00, 0.1227777295279105E+00, 0.6412305277798032E-08, 0.2217381803186623E-07, 0.3548938644000568E-01, 0.3548939233290803E-01, 0.8514276171981532E-23, 0.5194035150079302E-09, 0.2761013168273541E-29, 0.5817566277343568E-15, 0.1040577915698430E-22, 0.1336113320657127E-21}, + i0: 1, + n0: 9, + pp: 0, + n0in: 9, + dmin: 2.7610131682735413E-030, + dmin1: 3.5489385920602169E-002, + dmin2: 0.10651236125048857, + dn: 2.7610131682735413E-030, + dn1: 3.5489385920602169E-002, + dn2: 0.12272266390541409, + tau: 5.8175661922007790E-016, + ttype: -2, + g: 0.49975000000000003, + zOut: []float64{0.1695776407173191E+01, 0.1695776407158834E+01, 0.9625244577618415E-11, 0.1435751523850387E-10, 0.1136844575581005E+01, 0.1136844530328206E+01, 0.3874943632355666E-07, 0.4526242530264241E-07, 0.9903944198927007E+00, 0.9732595236933804E+00, 0.1394544708652782E-01, 0.1713493494875720E-01, 0.7920974728575274E+00, 0.8060429186752077E+00, 0.2190784636165185E-08, 0.1268848035998799E-08, 0.1367630261362054E+01, 0.1367630263552839E+01, 0.1040577915698430E-22, 0.1336113320657127E-21, 0.1065601533150438E+00, 0.1065123612504892E+00, 0.5506562249584694E-04, 0.4779206455525695E-04, 0.1227226860792321E+00, 0.1227777295279105E+00, 0.6412305277798032E-08, 0.2217381803186623E-07, 0.3548938644000568E-01, 0.3548939233290803E-01, 0.8514276171981532E-23, 0.5194035150079302E-09, 0.2761013168273541E-29, 0.5817566277343568E-15, 0.1040577915698430E-22, 0.1336113320657127E-21}, + tauOut: 2.7610131682735413E-030, + ttypeOut: -2, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1695776407173191E+01, 0.1695776407182817E+01, 0.9625244577618415E-11, 0.6452741670633652E-11, 0.1136844575581005E+01, 0.1136844614323989E+01, 0.3874943632355666E-07, 0.3375767015588020E-07, 0.9903944198927007E+00, 0.1004339833221559E+01, 0.1394544708652782E-01, 0.1099842207759001E-01, 0.7920974728575274E+00, 0.7810990529707220E+00, 0.2190784636165185E-08, 0.3835855840755795E-08, 0.1367630261362054E+01, 0.1367630257526198E+01, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.1065601533150438E+00, 0.1066152189375397E+00, 0.5506562249584694E-04, 0.6338495733216447E-04, 0.1227226860792321E+00, 0.1226593075342052E+00, 0.6412305277798032E-08, 0.1855291575909163E-08, 0.3548938644000568E-01, 0.3548938458471410E-01, 0.8514276171981532E-23, 0.6623960630549781E-51, 0.9539342071687115E+00}, + i0: 1, + n0: 8, + pp: 1, + n0in: 9, + dmin: 2.7610131682735413E-030, + dmin1: 3.5489384584714102E-002, + dmin2: 0.10656015331504384, + dn: 2.7610131682735413E-030, + dn1: 3.5489384584714102E-002, + dn2: 0.12265930112189996, + tau: 0.0000000000000000, + ttype: -2, + g: 0.49975000000000003, + zOut: []float64{0.1695776407173191E+01, 0.1695776407182817E+01, 0.9625244577618415E-11, 0.6452741670633652E-11, 0.1136844575581005E+01, 0.1136844614323989E+01, 0.3874943632355666E-07, 0.3375767015588020E-07, 0.9903944198927007E+00, 0.1004339833221559E+01, 0.1394544708652782E-01, 0.1099842207759001E-01, 0.7920974728575274E+00, 0.7810990529707220E+00, 0.2190784636165185E-08, 0.3835855840755795E-08, 0.1367630261362054E+01, 0.1367630257526198E+01, 0.1040577915698430E-22, 0.8107757314001177E-24, 0.1065601533150438E+00, 0.1066152189375397E+00, 0.5506562249584694E-04, 0.6338495733216447E-04, 0.1227226860792321E+00, 0.1226593075342052E+00, 0.6412305277798032E-08, 0.1855291575909163E-08, 0.3548938644000568E-01, 0.3548938458471410E-01, 0.8514276171981532E-23, 0.6623960630549781E-51, 0.9539342071687115E+00}, + tauOut: 1.7744692292357051E-002, + ttypeOut: -9, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1678031714896912E+01, 0.1695776407182817E+01, 0.4371648372768990E-11, 0.6452741670633652E-11, 0.1119099955784930E+01, 0.1136844614323989E+01, 0.3029592900888367E-07, 0.3375767015588020E-07, 0.9975935327108624E+00, 0.1004339833221559E+01, 0.8611580555893368E-02, 0.1099842207759001E-01, 0.7547427839583274E+00, 0.7810990529707220E+00, 0.6950755439903452E-08, 0.3835855840755795E-08, 0.1349885558283086E+01, 0.1367630257526198E+01, 0.6403582257922030E-25, 0.8107757314001177E-24, 0.8893391160251481E-01, 0.1066152189375397E+00, 0.8742171388117141E-04, 0.6338495733216447E-04, 0.1048271953832586E+00, 0.1226593075342052E+00, 0.6281113981299557E-09, 0.1855291575909163E-08, 0.1774469166424565E-01, 0.3548938458471410E-01, 0.6403582257922030E-25, 0.8107757314001177E-24}, + i0: 1, + n0: 8, + pp: 0, + n0in: 8, + dmin: 1.7744691664245655E-002, + dmin1: 8.8870526645182649E-002, + dmin2: 8.8870526645182649E-002, + dn: 1.7744691664245655E-002, + dn1: 0.10482719352796703, + dn2: 8.8870526645182649E-002, + tau: 1.7744692292357051E-002, + ttype: -9, + g: 0.49975000000000003, + zOut: []float64{0.1678031714896912E+01, 0.1695776407182817E+01, 0.4371648372768990E-11, 0.6452741670633652E-11, 0.1119099955784930E+01, 0.1136844614323989E+01, 0.3029592900888367E-07, 0.3375767015588020E-07, 0.9975935327108624E+00, 0.1004339833221559E+01, 0.8611580555893368E-02, 0.1099842207759001E-01, 0.7547427839583274E+00, 0.7810990529707220E+00, 0.6950755439903452E-08, 0.3835855840755795E-08, 0.1349885558283086E+01, 0.1367630257526198E+01, 0.6403582257922030E-25, 0.8107757314001177E-24, 0.8893391160251481E-01, 0.1066152189375397E+00, 0.8742171388117141E-04, 0.6338495733216447E-04, 0.1048271953832586E+00, 0.1226593075342052E+00, 0.6281113981299557E-09, 0.1855291575909163E-08, 0.1774469166424565E-01, 0.3548938458471410E-01, 0.6403582257922030E-25, 0.8107757314001177E-24}, + tauOut: 1.7743283373674822E-002, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1678031714896912E+01, 0.1660288431527609E+01, 0.4371648372768990E-11, 0.2946663608425970E-11, 0.1119099955784930E+01, 0.1101356702704238E+01, 0.3029592900888367E-07, 0.2744162973950316E-07, 0.9975935327108624E+00, 0.9884618024514511E+00, 0.8611580555893368E-02, 0.6575396506892930E-02, 0.7547427839583274E+00, 0.7304241110285150E+00, 0.6950755439903452E-08, 0.1284558415558242E-07, 0.1349885558283086E+01, 0.1332142262063827E+01, 0.6403582257922030E-25, 0.4275036042946169E-26, 0.8893391160251481E-01, 0.7127804994272115E-01, 0.8742171388117141E-04, 0.1285693574547170E-03, 0.1048271953832586E+00, 0.8695534328024046E-01, 0.6281113981299557E-09, 0.1281766326273249E-09, 0.1774469166424565E-01, 0.1408162394200135E-05, 0.6403582257922030E-25, 0.4275036042946169E-26, 0.9539342071687115E+00}, + i0: 1, + n0: 8, + pp: 1, + n0in: 8, + dmin: 1.4081623942001353E-006, + dmin1: 7.1190628228839981E-002, + dmin2: 7.1190628228839981E-002, + dn: 1.4081623942001353E-006, + dn1: 8.6955342652129064E-002, + dn2: 7.1190628228839981E-002, + tau: 1.7743283373674822E-002, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1678031714896912E+01, 0.1660288431527609E+01, 0.4371648372768990E-11, 0.2946663608425970E-11, 0.1119099955784930E+01, 0.1101356702704238E+01, 0.3029592900888367E-07, 0.2744162973950316E-07, 0.9975935327108624E+00, 0.9884618024514511E+00, 0.8611580555893368E-02, 0.6575396506892930E-02, 0.7547427839583274E+00, 0.7304241110285150E+00, 0.6950755439903452E-08, 0.1284558415558242E-07, 0.1349885558283086E+01, 0.1332142262063827E+01, 0.6403582257922030E-25, 0.4275036042946169E-26, 0.8893391160251481E-01, 0.7127804994272115E-01, 0.8742171388117141E-04, 0.1285693574547170E-03, 0.1048271953832586E+00, 0.8695534328024046E-01, 0.6281113981299557E-09, 0.1281766326273249E-09, 0.1774469166424565E-01, 0.1408162394200135E-05, 0.6403582257922030E-25, 0.4275036042946169E-26, 0.9539342071687115E+00}, + tauOut: 1.4081069428512511E-006, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26, 0.7140521119323301E-01, 0.7127804994272115E-01, 0.1565683011922014E-03, 0.1285693574547170E-03, 0.8679736700028205E-01, 0.8695534328024046E-01, 0.2079481441878513E-14, 0.1281766326273249E-09, 0.5544926940271698E-10, 0.1408162394200135E-05, 0.1565683011922014E-03, 0.1285693574547170E-03}, + i0: 6, + n0: 8, + pp: 0, + n0in: 8, + dmin: 5.5449269402716976E-011, + dmin1: 7.1276641835778295E-002, + dmin2: 7.1276641835778295E-002, + dn: 5.5449269402716976E-011, + dn1: 8.6797366872105416E-002, + dn2: 7.1276641835778295E-002, + tau: 1.4081069428512511E-006, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26, 0.7140521119323301E-01, 0.7127804994272115E-01, 0.1565683011922014E-03, 0.1285693574547170E-03, 0.8679736700028205E-01, 0.8695534328024046E-01, 0.2079481441878513E-14, 0.1281766326273249E-09, 0.5544926940271698E-10, 0.1408162394200135E-05, 0.1565683011922014E-03, 0.1285693574547170E-03}, + tauOut: 5.5449260598506680E-011, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26, 0.7140521119323301E-01, 0.7156177943897596E-01, 0.1565683011922014E-03, 0.1899018778701386E-03, 0.8679736700028205E-01, 0.8660746506696473E-01, 0.2079481441878513E-14, 0.1331360138522907E-23, 0.5544926940271698E-10, 0.8804208964992894E-17, 0.1565683011922014E-03, 0.8679736700028205E-01, 0.9539342071687115E+00}, + i0: 6, + n0: 8, + pp: 1, + n0in: 8, + dmin: 8.8042089649928937E-018, + dmin1: 7.1405211137783753E-002, + dmin2: 7.1405211137783753E-002, + dn: 8.8042089649928937E-018, + dn1: 8.6607465066962652E-002, + dn2: 7.1405211137783753E-002, + tau: 5.5449260598506680E-011, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26, 0.7140521119323301E-01, 0.7156177943897596E-01, 0.1565683011922014E-03, 0.1899018778701386E-03, 0.8679736700028205E-01, 0.8660746506696473E-01, 0.2079481441878513E-14, 0.1331360138522907E-23, 0.5544926940271698E-10, 0.8804208964992894E-17, 0.1565683011922014E-03, 0.8679736700028205E-01, 0.9539342071687115E+00}, + tauOut: 8.8042089649574750E-018, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26}, + i0: 1, + n0: 5, + pp: 0, + n0in: 5, + dmin: -0.60723548073666500, + dmin1: 7.1561779438975959E-002, + dmin2: 7.1561779438975959E-002, + dn: 8.8042089649928937E-018, + dn1: 8.6378245068883266E-002, + dn2: 7.1561779438975959E-002, + tau: 0.0000000000000000, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.1660287023423613E+01, 0.1660288431527609E+01, 0.1954678721190348E-11, 0.2946663608425970E-11, 0.1101355322036970E+01, 0.1101356702704238E+01, 0.2462874809952034E-07, 0.2744162973950316E-07, 0.9950357662226532E+00, 0.9884618024514511E+00, 0.4826789459478154E-02, 0.6575396506892930E-02, 0.7255959263076781E+00, 0.7304241110285150E+00, 0.2358357443050565E-07, 0.1284558415558242E-07, 0.1332140830373310E+01, 0.1332142262063827E+01, -0.9894235909416862E+00, 0.4275036042946169E-26}, + tauOut: 0.60723548073666500, + ttypeOut: -1, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.1660287023423613E+01, 0.1053051542688903E+01, 0.1954678721190348E-11, 0.2044340400431280E-11, 0.1101355322036970E+01, 0.4941198659270088E+00, 0.2462874809952034E-07, 0.4959623550114665E-07, 0.9950357662226532E+00, 0.3926270253492309E+00, 0.4826789459478154E-02, 0.8920167341580701E-02, 0.7255959263076781E+00, 0.1094403018130068E+00, 0.2358357443050565E-07, 0.2870664819501689E-06, 0.1332140830373310E+01, 0.7249050625701626E+00, -0.9894235909416862E+00, 0.2044340400431280E-11, 0.1077066053646038E+01}, + i0: 1, + n0: 5, + pp: 1, + n0in: 5, + dmin: 0.10944027822943236, + dmin1: 0.10944027822943236, + dmin2: 0.38780023588975276, + dn: 0.72490506257016263, + dn1: 0.10944027822943236, + dn2: 0.38780023588975276, + tau: 0.60723548073666500, + ttype: -1, + g: 0.49975000000000003, + zOut: []float64{0.1660287023423613E+01, 0.1053051542688903E+01, 0.1954678721190348E-11, 0.2044340400431280E-11, 0.1101355322036970E+01, 0.4941198659270088E+00, 0.2462874809952034E-07, 0.4959623550114665E-07, 0.9950357662226532E+00, 0.3926270253492309E+00, 0.4826789459478154E-02, 0.8920167341580701E-02, 0.7255959263076781E+00, 0.1094403018130068E+00, 0.2358357443050565E-07, 0.2870664819501689E-06, 0.1332140830373310E+01, 0.7249050625701626E+00, -0.9894235909416862E+00, 0.2044340400431280E-11, 0.1077066053646038E+01}, + tauOut: 9.0381042476589277E-002, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9626705002143580E+00, 0.1053051542688903E+01, 0.1049319787347115E-11, 0.2044340400431280E-11, 0.4037388730456057E+00, 0.4941198659270088E+00, 0.4823122991958101E-07, 0.4959623550114665E-07, 0.3111661019829924E+00, 0.3926270253492309E+00, 0.3137314122148422E-02, 0.8920167341580701E-02, 0.1592223228075105E-01, 0.1094403018130068E+00, 0.1306952080528672E-04, 0.2870664819501689E-06, 0.6345109505727681E+00, 0.7249050625701626E+00, 0.1049319787347115E-11, 0.2044340400431280E-11}, + i0: 1, + n0: 5, + pp: 0, + n0in: 5, + dmin: 1.5921945214269095E-002, + dmin1: 1.5921945214269095E-002, + dmin2: 0.30224593464141175, + dn: 0.63451095057276807, + dn1: 1.5921945214269095E-002, + dn2: 0.30224593464141175, + tau: 9.0381042476589277E-002, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.9626705002143580E+00, 0.1053051542688903E+01, 0.1049319787347115E-11, 0.2044340400431280E-11, 0.4037388730456057E+00, 0.4941198659270088E+00, 0.4823122991958101E-07, 0.4959623550114665E-07, 0.3111661019829924E+00, 0.3926270253492309E+00, 0.3137314122148422E-02, 0.8920167341580701E-02, 0.1592223228075105E-01, 0.1094403018130068E+00, 0.1306952080528672E-04, 0.2870664819501689E-06, 0.6345109505727681E+00, 0.7249050625701626E+00, 0.1049319787347115E-11, 0.2044340400431280E-11}, + tauOut: 1.4134050686447828E-002, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9626705002143580E+00, 0.9485364495289594E+00, 0.1049319787347115E-11, 0.4466366986934060E-12, 0.4037388730456057E+00, 0.3896048705899411E+00, 0.4823122991958101E-07, 0.3852088344069326E-07, 0.3111661019829924E+00, 0.3001693268978096E+00, 0.3137314122148422E-02, 0.1664162181618706E-03, 0.1592223228075105E-01, 0.1634834896946635E-02, 0.1306952080528672E-04, 0.5072533064458891E-02, 0.6345109505727681E+00, 0.6153043668218613E+00, 0.1049319787347115E-11, 0.4466366986934060E-12, 0.1077066053646038E+01}, + i0: 1, + n0: 5, + pp: 1, + n0in: 5, + dmin: 1.6217653761413479E-003, + dmin1: 1.6217653761413479E-003, + dmin2: 0.29703201277566116, + dn: 0.61530436682186129, + dn1: 1.6217653761413479E-003, + dn2: 0.29703201277566116, + tau: 1.4134050686447828E-002, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.9626705002143580E+00, 0.9485364495289594E+00, 0.1049319787347115E-11, 0.4466366986934060E-12, 0.4037388730456057E+00, 0.3896048705899411E+00, 0.4823122991958101E-07, 0.3852088344069326E-07, 0.3111661019829924E+00, 0.3001693268978096E+00, 0.3137314122148422E-02, 0.1664162181618706E-03, 0.1592223228075105E-01, 0.1634834896946635E-02, 0.1306952080528672E-04, 0.5072533064458891E-02, 0.6345109505727681E+00, 0.6153043668218613E+00, 0.1049319787347115E-11, 0.4466366986934060E-12, 0.1077066053646038E+01}, + tauOut: 1.5809617416939919E-003, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469554877877121E+00, 0.9485364495289594E+00, 0.1837592531426069E-12, 0.4466366986934060E-12, 0.3880239473689468E+00, 0.3896048705899411E+00, 0.2979915990315817E-07, 0.3852088344069326E-07, 0.2987547515751175E+00, 0.3001693268978096E+00, 0.9106567826436868E-06, 0.1664162181618706E-03, 0.5125495562928890E-02, 0.1634834896946635E-02, 0.6089463364253304E+00, 0.5072533064458891E-02, 0.4777068654836977E-02, 0.6153043668218613E+00, 0.1837592531426069E-12, 0.4466366986934060E-12}, + i0: 1, + n0: 5, + pp: 0, + n0in: 5, + dmin: 5.2962498469998932E-005, + dmin1: 5.2962498469998932E-005, + dmin2: 0.29858833535695567, + dn: 4.7770686548369769E-003, + dn1: 5.2962498469998932E-005, + dn2: 0.29858833535695567, + tau: 1.5809617416939919E-003, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.9469554877877121E+00, 0.9485364495289594E+00, 0.1837592531426069E-12, 0.4466366986934060E-12, 0.3880239473689468E+00, 0.3896048705899411E+00, 0.2979915990315817E-07, 0.3852088344069326E-07, 0.2987547515751175E+00, 0.3001693268978096E+00, 0.9106567826436868E-06, 0.1664162181618706E-03, 0.5125495562928890E-02, 0.1634834896946635E-02, 0.6089463364253304E+00, 0.5072533064458891E-02, 0.4777068654836977E-02, 0.6153043668218613E+00, 0.1837592531426069E-12, 0.4466366986934060E-12}, + tauOut: 4.7621670852039755E-005, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469554877877121E+00, 0.9469159823779022E+00, 0.1837592531426069E-12, 0.7530022947855128E-13, 0.3880239473689468E+00, 0.3879844717580378E+00, 0.2979915990315817E-07, 0.2294586835827609E-07, 0.2987547515751175E+00, 0.2987161338760382E+00, 0.9106567826436868E-06, 0.1562542751952015E-07, 0.5125495562928890E-02, 0.6140323109528382E+00, 0.6089463364253304E+00, 0.4737500623869755E-02, 0.4777068654836977E-02, 0.6262097360996939E-07, 0.1837592531426069E-12, 0.7530022947855128E-13, 0.1077066053646038E+01}, + i0: 1, + n0: 5, + pp: 1, + n0in: 5, + dmin: 6.2620973609969386E-008, + dmin1: 5.0859745275077589E-003, + dmin2: 0.29871522321925559, + dn: 6.2620973609969386E-008, + dn1: 5.0859745275077589E-003, + dn2: 0.29871522321925559, + tau: 3.9505409993611756E-005, + ttype: -15, + g: 0.49975000000000003, + zOut: []float64{0.9469554877877121E+00, 0.9469159823779022E+00, 0.1837592531426069E-12, 0.7530022947855128E-13, 0.3880239473689468E+00, 0.3879844717580378E+00, 0.2979915990315817E-07, 0.2294586835827609E-07, 0.2987547515751175E+00, 0.2987161338760382E+00, 0.9106567826436868E-06, 0.1562542751952015E-07, 0.5125495562928890E-02, 0.6140323109528382E+00, 0.6089463364253304E+00, 0.4737500623869755E-02, 0.4777068654836977E-02, 0.6262097360996939E-07, 0.1837592531426069E-12, 0.7530022947855128E-13, 0.1077066053646038E+01}, + tauOut: 6.2141437994562936E-008, + ttypeOut: -2, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469159202365395E+00, 0.9469159823779022E+00, 0.3085312975855001E-13, 0.7530022947855128E-13, 0.3879844325624373E+00, 0.3879844717580378E+00, 0.1766643326162244E-07, 0.2294586835827609E-07, 0.2987160696935945E+00, 0.2987161338760382E+00, 0.3211918722443868E-07, 0.1562542751952015E-07, 0.6187697173160828E+00, 0.6140323109528382E+00, 0.4794463808464251E-09, 0.4737500623869755E-02, 0.8923456002485611E-13, 0.6262097360996939E-07, 0.3085312975855001E-13, 0.7530022947855128E-13}, + i0: 1, + n0: 5, + pp: 0, + n0in: 5, + dmin: 8.9234560024856112E-014, + dmin1: 0.29871605406816698, + dmin2: 0.29871605406816698, + dn: 8.9234560024856112E-014, + dn1: 0.61403221669221297, + dn2: 0.29871605406816698, + tau: 6.2141437994562936E-008, + ttype: -2, + g: 0.49975000000000003, + zOut: []float64{0.9469159202365395E+00, 0.9469159823779022E+00, 0.3085312975855001E-13, 0.7530022947855128E-13, 0.3879844325624373E+00, 0.3879844717580378E+00, 0.1766643326162244E-07, 0.2294586835827609E-07, 0.2987160696935945E+00, 0.2987161338760382E+00, 0.3211918722443868E-07, 0.1562542751952015E-07, 0.6187697173160828E+00, 0.6140323109528382E+00, 0.4794463808464251E-09, 0.4737500623869755E-02, 0.8923456002485611E-13, 0.6262097360996939E-07, 0.3085312975855001E-13, 0.7530022947855128E-13}, + tauOut: 8.9232014685788963E-014, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469159202365395E+00, 0.9469159202364811E+00, 0.3085312975855001E-13, 0.1264160184270297E-13, 0.3879844325624373E+00, 0.3879844502287687E+00, 0.1766643326162244E-07, 0.1360169848638109E-07, 0.2987160696935945E+00, 0.2987160882109940E+00, 0.3211918722443868E-07, 0.6653267495003571E-07, 0.6187697173160828E+00, 0.6187696512627651E+00, 0.4794463808464251E-09, 0.6914234847011291E-22, 0.8923456002485611E-13, 0.2545269924803487E-17, 0.3085312975855001E-13, 0.1264160184270297E-13, 0.1077066053646038E+01}, + i0: 1, + n0: 5, + pp: 1, + n0in: 5, + dmin: 2.5452699248034865E-018, + dmin1: 0.29871605609180679, + dmin2: 0.29871605609180679, + dn: 2.5452699248034865E-018, + dn1: 0.61876965078331869, + dn2: 0.29871605609180679, + tau: 8.9232014685788963E-014, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.9469159202365395E+00, 0.9469159202364811E+00, 0.3085312975855001E-13, 0.1264160184270297E-13, 0.3879844325624373E+00, 0.3879844502287687E+00, 0.1766643326162244E-07, 0.1360169848638109E-07, 0.2987160696935945E+00, 0.2987160882109940E+00, 0.3211918722443868E-07, 0.6653267495003571E-07, 0.6187697173160828E+00, 0.6187696512627651E+00, 0.4794463808464251E-09, 0.6914234847011291E-22, 0.8923456002485611E-13, 0.2545269924803487E-17, 0.3085312975855001E-13, 0.1264160184270297E-13, 0.1077066053646038E+01}, + tauOut: 2.5452699247759164E-018, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469159202364937E+00, 0.9469159202364811E+00, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.3879844638304620E+00, 0.3879844502287687E+00, 0.1047218779010850E-07, 0.1360169848638109E-07, 0.2987161442714811E+00, 0.2987160882109940E+00, 0.1378177941363543E-06, 0.6653267495003571E-07, 0.6187695134449710E+00, 0.6187696512627651E+00, 0.2844127518685707E-39, 0.6914234847011291E-22}, + i0: 1, + n0: 4, + pp: 0, + n0in: 5, + dmin: 2.5452699248034865E-018, + dmin1: 0.29871607773880621, + dmin2: 0.29871607773880621, + dn: 2.5452699248034865E-018, + dn1: 0.61876951344497100, + dn2: 0.29871607773880621, + tau: 0.0000000000000000, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.9469159202364937E+00, 0.9469159202364811E+00, 0.5179704803914515E-14, 0.1264160184270297E-13, 0.3879844638304620E+00, 0.3879844502287687E+00, 0.1047218779010850E-07, 0.1360169848638109E-07, 0.2987161442714811E+00, 0.2987160882109940E+00, 0.1378177941363543E-06, 0.6653267495003571E-07, 0.6187695134449710E+00, 0.6187696512627651E+00, 0.2844127518685707E-39, 0.6914234847011291E-22}, + tauOut: 7.4679019434701552E-002, + ttypeOut: -9, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.9469159202364937E+00, 0.8722369008017974E+00, 0.5179704803914515E-14, 0.2304012808102351E-14, 0.3879844638304620E+00, 0.3133054548679459E+00, 0.1047218779010850E-07, 0.9984542273822185E-08, 0.2987161442714811E+00, 0.2240372526700314E+00, 0.1378177941363543E-06, 0.3806395963416417E-06, 0.6187695134449710E+00, 0.5440901133706730E+00, 0.2844127518685707E-39, 0.2304012808102351E-14, 0.1702794694134603E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 4, + dmin: 0.22403711485223726, + dmin1: 0.22403711485223726, + dmin2: 0.31330544439575814, + dn: 0.54409011337067303, + dn1: 0.22403711485223726, + dn2: 0.31330544439575814, + tau: 7.4679019434701552E-002, + ttype: -9, + g: 0.49975000000000003, + zOut: []float64{0.9469159202364937E+00, 0.8722369008017974E+00, 0.5179704803914515E-14, 0.2304012808102351E-14, 0.3879844638304620E+00, 0.3133054548679459E+00, 0.1047218779010850E-07, 0.9984542273822185E-08, 0.2987161442714811E+00, 0.2240372526700314E+00, 0.1378177941363543E-06, 0.3806395963416417E-06, 0.6187695134449710E+00, 0.5440901133706730E+00, 0.2844127518685707E-39, 0.2304012808102351E-14, 0.1702794694134603E+01}, + tauOut: 0.22392121955733330, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6483156812444665E+00, 0.8722369008017974E+00, 0.1113438717814820E-14, 0.2304012808102351E-14, 0.8938424529515379E-01, 0.3133054548679459E+00, 0.2502576838690600E-07, 0.9984542273822185E-08, 0.1163887265260836E-03, 0.2240372526700314E+00, 0.1779401212715201E-02, 0.3806395963416417E-06, 0.3183894926006245E+00, 0.5440901133706730E+00, 0.1113438717814820E-14, 0.2304012808102351E-14}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 1.1600808692974196E-004, + dmin1: 1.1600808692974196E-004, + dmin2: 8.9384235310611515E-002, + dn: 0.31838949260062449, + dn1: 1.1600808692974196E-004, + dn2: 8.9384235310611515E-002, + tau: 0.22392121955733330, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.6483156812444665E+00, 0.8722369008017974E+00, 0.1113438717814820E-14, 0.2304012808102351E-14, 0.8938424529515379E-01, 0.3133054548679459E+00, 0.2502576838690600E-07, 0.9984542273822185E-08, 0.1163887265260836E-03, 0.2240372526700314E+00, 0.1779401212715201E-02, 0.3806395963416417E-06, 0.3183894926006245E+00, 0.5440901133706730E+00, 0.1113438717814820E-14, 0.2304012808102351E-14}, + tauOut: 1.1589031543524988E-004, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6483156812444665E+00, 0.6482265310101248E+00, 0.1113438717814820E-14, 0.1535325610927932E-15, 0.8938424529515379E-01, 0.8929512008657929E-01, 0.2502576838690600E-07, 0.3261899765703413E-10, 0.1163887265260836E-03, 0.1806639672279546E-02, 0.1779401212715201E-02, 0.3135891777105103E+00, 0.3183894926006245E+00, 0.4711164655771408E-02, 0.1113438717814820E-14, 0.1535325610927932E-15, 0.1702794694134603E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 4, + dmin: 2.7238459564345061E-005, + dmin1: 2.7238459564345061E-005, + dmin2: 8.9295095060810903E-002, + dn: 4.7111646557714080E-003, + dn1: 2.7238459564345061E-005, + dn2: 8.9295095060810903E-002, + tau: 8.9150234342740890E-005, + ttype: -15, + g: 0.49975000000000003, + zOut: []float64{0.6483156812444665E+00, 0.6482265310101248E+00, 0.1113438717814820E-14, 0.1535325610927932E-15, 0.8938424529515379E-01, 0.8929512008657929E-01, 0.2502576838690600E-07, 0.3261899765703413E-10, 0.1163887265260836E-03, 0.1806639672279546E-02, 0.1779401212715201E-02, 0.3135891777105103E+00, 0.3183894926006245E+00, 0.4711164655771408E-02, 0.1113438717814820E-14, 0.1535325610927932E-15, 0.1702794694134603E+01}, + tauOut: 2.5005145741075717E-005, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6482015258643838E+00, 0.6482265310101248E+00, 0.2115037983241246E-16, 0.1535325610927932E-15, 0.8927011497345719E-01, 0.8929512008657929E-01, 0.6601400172354812E-12, 0.3261899765703413E-10, 0.3153708122363886E+00, 0.1806639672279546E-02, 0.4684549720964035E-02, 0.3135891777105103E+00, 0.1609789066298190E-05, 0.4711164655771408E-02, 0.2115037983241246E-16, 0.1535325610927932E-15}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 1.6097890662981897E-006, + dmin1: 1.7816345258783307E-003, + dmin2: 8.9270114940838197E-002, + dn: 1.6097890662981897E-006, + dn1: 1.7816345258783307E-003, + dn2: 8.9270114940838197E-002, + tau: 2.5005145741075717E-005, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.6482015258643838E+00, 0.6482265310101248E+00, 0.2115037983241246E-16, 0.1535325610927932E-15, 0.8927011497345719E-01, 0.8929512008657929E-01, 0.6601400172354812E-12, 0.3261899765703413E-10, 0.3153708122363886E+00, 0.1806639672279546E-02, 0.4684549720964035E-02, 0.3135891777105103E+00, 0.1609789066298190E-05, 0.4711164655771408E-02, 0.2115037983241246E-16, 0.1535325610927932E-15}, + tauOut: 1.5862205428611591E-006, + ttypeOut: -2, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6482015258643838E+00, 0.6481999396438409E+00, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.8927011497345719E-01, 0.8926852875357447E-01, 0.6601400172354812E-12, 0.2332164496627946E-11, 0.3153708122363886E+00, 0.3200537757344777E+00, 0.4684549720964035E-02, 0.2356209328895529E-07, 0.1609789066298190E-05, 0.6430148075154844E-11, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.1702794694134603E+01}, + i0: 1, + n0: 4, + pp: 1, + n0in: 4, + dmin: 6.4301480751548441E-012, + dmin1: 8.9268528752914328E-002, + dmin2: 8.9268528752914328E-002, + dn: 6.4301480751548441E-012, + dn1: 0.31536922601351364, + dn2: 8.9268528752914328E-002, + tau: 1.5862205428611591E-006, + ttype: -2, + g: 0.49975000000000003, + zOut: []float64{0.6482015258643838E+00, 0.6481999396438409E+00, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.8927011497345719E-01, 0.8926852875357447E-01, 0.6601400172354812E-12, 0.2332164496627946E-11, 0.3153708122363886E+00, 0.3200537757344777E+00, 0.4684549720964035E-02, 0.2356209328895529E-07, 0.1609789066298190E-05, 0.6430148075154844E-11, 0.2115037983241246E-16, 0.2912830939801045E-17, 0.1702794694134603E+01}, + tauOut: 6.4283598105616478E-012, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6481999396374125E+00, 0.6481999396438409E+00, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.8926852874947827E-01, 0.8926852875357447E-01, 0.8361491594360282E-11, 0.2332164496627946E-11, 0.3200537992817811E+00, 0.3200537757344777E+00, 0.4733821287189426E-18, 0.2356209328895529E-07, 0.1787791211067534E-14, 0.6430148075154844E-11, 0.4011480356653261E-18, 0.2912830939801045E-17}, + i0: 1, + n0: 4, + pp: 0, + n0in: 4, + dmin: 1.7877912110675335E-015, + dmin1: 8.9268528747146109E-002, + dmin2: 8.9268528747146109E-002, + dn: 1.7877912110675335E-015, + dn1: 0.32005377571968785, + dn2: 8.9268528747146109E-002, + tau: 6.4283598105616478E-012, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.6481999396374125E+00, 0.6481999396438409E+00, 0.4011480356653261E-18, 0.2912830939801045E-17, 0.8926852874947827E-01, 0.8926852875357447E-01, 0.8361491594360282E-11, 0.2332164496627946E-11, 0.3200537992817811E+00, 0.3200537757344777E+00, 0.4733821287189426E-18, 0.2356209328895529E-07, 0.1787791211067534E-14, 0.6430148075154844E-11, 0.4011480356653261E-18, 0.2912830939801045E-17}, + tauOut: 1.7877912088395813E-015, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6481999396374125E+00, 0.6481999396374107E+00, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.8926852874947827E-01, 0.8926852875783797E-01, 0.8361491594360282E-11, 0.2997839428604580E-10, 0.3200537992817811E+00, 0.3200537992518009E+00, 0.4733821287189426E-18, 0.2644269217171004E-32, 0.2001510674733695E+01}, + i0: 1, + n0: 3, + pp: 1, + n0in: 4, + dmin: 2.2279522444840209E-024, + dmin1: 8.9268528749476481E-002, + dmin2: 8.9268528749476481E-002, + dn: 2.2279522444840209E-024, + dn1: 0.32005379925180094, + dn2: 8.9268528749476481E-002, + tau: 1.7877912088395813E-015, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.6481999396374125E+00, 0.6481999396374107E+00, 0.4011480356653261E-18, 0.5524513774965514E-19, 0.8926852874947827E-01, 0.8926852875783797E-01, 0.8361491594360282E-11, 0.2997839428604580E-10, 0.3200537992817811E+00, 0.3200537992518009E+00, 0.4733821287189426E-18, 0.2644269217171004E-32, 0.2001510674733695E+01}, + tauOut: 2.2317132187369120E-002, + ttypeOut: -9, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6258828074500417E+00, 0.6481999396374107E+00, 0.7879513719234823E-20, 0.5524513774965514E-19, 0.6695139660044724E-01, 0.8926852875783797E-01, 0.1433084218388560E-09, 0.2997839428604580E-10, 0.2977366669211234E+00, 0.3200537992518009E+00, 0.8926852875783797E-01, 0.2644269217171004E-32}, + i0: 1, + n0: 3, + pp: 0, + n0in: 3, + dmin: 6.6951396570468849E-002, + dmin1: 6.6951396570468849E-002, + dmin2: 0.62588280745004166, + dn: 0.29773666692112338, + dn1: 6.6951396570468849E-002, + dn2: 0.62588280745004166, + tau: 2.2317132187369120E-002, + ttype: -9, + g: 0.49975000000000003, + zOut: []float64{0.6258828074500417E+00, 0.6481999396374107E+00, 0.7879513719234823E-20, 0.5524513774965514E-19, 0.6695139660044724E-01, 0.8926852875783797E-01, 0.1433084218388560E-09, 0.2997839428604580E-10, 0.2977366669211234E+00, 0.3200537992518009E+00, 0.8926852875783797E-01, 0.2644269217171004E-32}, + tauOut: 6.6950732596142107E-002, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.6258828074500417E+00, 0.5589320748538995E+00, 0.7879513719234823E-20, 0.9438435755776795E-21, 0.6695139660044724E-01, 0.6641476135588615E-06, 0.1433084218388560E-09, 0.6424501268835132E-04, 0.2977366669211234E+00, 0.2307216893122929E+00, 0.8926852875783797E-01, 0.6695139660044724E-01, 0.2001510674733695E+01}, + i0: 1, + n0: 3, + pp: 1, + n0in: 3, + dmin: 6.6400430513702258E-007, + dmin1: 6.6400430513702258E-007, + dmin2: 0.55893207485389951, + dn: 0.23072168931229292, + dn1: 6.6400430513702258E-007, + dn2: 0.55893207485389951, + tau: 6.6950732596142107E-002, + ttype: -4, + g: 0.49975000000000003, + zOut: []float64{0.6258828074500417E+00, 0.5589320748538995E+00, 0.7879513719234823E-20, 0.9438435755776795E-21, 0.6695139660044724E-01, 0.6641476135588615E-06, 0.1433084218388560E-09, 0.6424501268835132E-04, 0.2977366669211234E+00, 0.2307216893122929E+00, 0.8926852875783797E-01, 0.6695139660044724E-01, 0.2001510674733695E+01}, + tauOut: 6.6398937736467640E-007, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + { + z: []float64{0.5589315065851642E+00, 0.5589320748538995E+00, 0.1121517486324177E-26, 0.9438435755776795E-21, 0.6434089156657428E-04, 0.6641476135588615E-06, 0.2303778747300831E+00, 0.6424501268835132E-04, 0.3432463134744483E-03, 0.2307216893122929E+00, 0.6641476135588615E-06, 0.6695139660044724E-01}, + i0: 1, + n0: 3, + pp: 0, + n0in: 3, + dmin: 9.5878878222950548E-008, + dmin1: 9.5878878222950548E-008, + dmin2: 0.55893150658516422, + dn: 3.4324631347444829E-004, + dn1: 9.5878878222950548E-008, + dn2: 0.55893150658516422, + tau: 5.6826873533591094E-007, + ttype: -15, + g: 0.49975000000000003, + zOut: []float64{0.5589315065851642E+00, 0.5589320748538995E+00, 0.1121517486324177E-26, 0.9438435755776795E-21, 0.6434089156657428E-04, 0.6641476135588615E-06, 0.2303778747300831E+00, 0.6424501268835132E-04, 0.3432463134744483E-03, 0.2307216893122929E+00, 0.6641476135588615E-06, 0.6695139660044724E-01}, + tauOut: 9.4211902206835373E-008, + ttypeOut: -4, + gOut: 0.49975000000000003, + }, + } { + z := make([]float64, len(test.z)) + copy(z, test.z) + + // Print for fortran input + //printDlasq4FortranInput(test) + + i0 := test.i0 - 1 // zero index + n0 := test.n0 - 1 // zero index + n0in := test.n0in - 1 + + tauOut, ttypeOut, gOut := impl.Dlasq4(i0, n0, z, test.pp, n0in, test.dmin, test.dmin1, test.dmin2, test.dn, test.dn1, test.dn2, test.tau, test.ttype, test.g) + + if !floats.EqualApprox(z, test.zOut, dTol) { + t.Errorf("Z mismatch") + } + if !floats.EqualWithinAbsOrRel(tauOut, test.tauOut, dTol, dTol) { + t.Errorf("Case %d, wrong tau. Want %v, got %v", cas, test.tauOut, tauOut) + } + if ttypeOut != test.ttypeOut { + t.Errorf("Wrong ttype. Want %v, got %v", test.ttypeOut, ttypeOut) + } + if !floats.EqualWithinAbsOrRel(gOut, test.gOut, dTol, dTol) { + t.Errorf("Wrong g. Want %v, got %v", test.gOut, gOut) + } + } +} diff --git a/lapack/testlapack/dlasq5.go b/lapack/testlapack/dlasq5.go new file mode 100644 index 00000000..740210f9 --- /dev/null +++ b/lapack/testlapack/dlasq5.go @@ -0,0 +1,1992 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "testing" + + "github.com/gonum/floats" +) + +type Dlasq5er interface { + Dlasq5(i0, n0 int, z []float64, pp int, tau, sigma float64) (i0Out, n0Out, ppOut int, tauOut, sigmaOut, dmin, dmin1, dmin2, dn, dnm1, dnm2 float64) +} + +func Dlasq5Test(t *testing.T, impl Dlasq5er) { + dTol := 1e-14 + for _, test := range []struct { + z []float64 + i0, n0, pp int + tau, sigma float64 + + i0Out, n0Out, ppOut int + tauOut, sigmaOut float64 + dminOut, dmin1Out, dmin2Out float64 + dnOut, dnm1Out, dnm2Out float64 + }{ + { + z: []float64{0.1914365246180821E+01, 0.1564384297703890E+01, 0.2493389162143899E+00, 0.3499809484769305E+00, 0.1315996513131545E+01, 0.1363862112490627E+01, 0.9898466611970759E-01, 0.2014733168553078E+00, 0.6023973979587287E+00, 0.6465544792741794E+00, 0.2210033410638781E-02, 0.5482758480425683E-01, 0.9861857233678967E-01, 0.2428190810745492E-01, 0.4756321484454819E+00, 0.7654669763997353E-01, 0.2588748143677115E+00, 0.6127784069508770E+00, 0.1078611376690004E+00, 0.1217285558623164E+00, 0.6442896492255246E+00, 0.2293835804898155E+00, 0.6203230486639705E+00, 0.5227672064047094E+00, 0.3695660678607585E+00, 0.7645233184745865E+00, 0.5378838054252265E+00, 0.2253657980501426E+00, 0.3562533181264623E+00, 0.8820486722335483E+00, 0.2222132496436145E-01, 0.1208845131814035E-01, 0.1275094303021685E+01, 0.6548746852163357E+00, 0.1647324354821218E+00, 0.6424409427697111E+00, 0.1007530576543866E+01, 0.3269551736546701E+00, 0.3453881601783118E+00, 0.8453078383713172E+00, 0.2679391719153404E+00, 0.4116714838778281E+00, 0.7328677736683723E+00, 0.2016558482158241E+00, 0.8360828138307410E+00, 0.9737579452195326E+00, 0.4813660709592822E+00, 0.5951926422795808E+00, 0.6495370513676459E+00, 0.6761876248148171E+00, 0.2325475880222648E+00, 0.4547154975121112E+00, 0.1993624802893807E+00, 0.3321819367342255E+00, 0.3782318916911257E+00, 0.9972813157741996E-01, 0.9830449403503746E+00, 0.7561080996844842E+00, 0.4429733864040367E+00, 0.6051687323570161E+00, 0.1173279550602403E+01, 0.7195724480316686E+00, 0.5035524069144587E+00, 0.8966804889747714E+00, 0.3058980395058521E+00, 0.6588832353928662E+00, 0.3014634433415453E+00, 0.1505672110274446E+00, 0.1289422237567578E+01, 0.6124645310993601E+00, 0.7583364305799440E+00, 0.9784211498097629E+00, 0.4977814779461571E+00, 0.9993813577491869E+00, 0.2841468847862598E+00, 0.2567365507769143E+00, 0.9257539794205765E+00, 0.5509268385614666E+00, 0.5231355605450990E-04, 0.6589740256453697E+00, 0.2117869221381033E-04, 0.7349224826832024E-04, 0.0000000000000000E+00, 0.0000000000000000E+00}, + i0: 1, + n0: 21, + pp: 0, + tau: 0.0000000000000000, + sigma: 0.0000000000000000, + i0Out: 1, + n0Out: 21, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + dminOut: 2.1175426017541180E-005, + dmin1Out: 4.4311601260836921E-002, + dmin2Out: 4.4311601260836921E-002, + dnOut: 2.1175426017541180E-005, + dnm1Out: 0.33915960483100382, + dnm2Out: 0.16428924199195991, + }, + { + z: []float64{0.1914365246180821E+01, 0.2163704162395211E+01, 0.2493389162143899E+00, 0.1516515751224039E+00, 0.1315996513131545E+01, 0.1263329604128848E+01, 0.9898466611970759E-01, 0.4719916727467415E-01, 0.6023973979587287E+00, 0.5574082640946934E+00, 0.2210033410638781E-02, 0.3910066531356214E-03, 0.9861857233678967E-01, 0.5738597141291359E+00, 0.4756321484454819E+00, 0.2145632131068746E+00, 0.2588748143677115E+00, 0.1521727389298373E+00, 0.1078611376690004E+00, 0.4566771620366771E+00, 0.6442896492255246E+00, 0.8079355358528180E+00, 0.6203230486639705E+00, 0.2837483186776231E+00, 0.3695660678607585E+00, 0.6237015546083620E+00, 0.5378838054252265E+00, 0.3072349091217998E+00, 0.3562533181264623E+00, 0.7123973396902394E-01, 0.2222132496436145E-01, 0.3977314805803597E+00, 0.1275094303021685E+01, 0.1042095257923447E+01, 0.1647324354821218E+00, 0.1592685164190333E+00, 0.1007530576543866E+01, 0.1193650220303144E+01, 0.3453881601783118E+00, 0.7752942700755104E-01, 0.2679391719153404E+00, 0.9232775185761617E+00, 0.7328677736683723E+00, 0.6636554427529671E+00, 0.8360828138307410E+00, 0.6537934420370561E+00, 0.4813660709592822E+00, 0.4782322339990674E+00, 0.6495370513676459E+00, 0.4038524053908432E+00, 0.2325475880222648E+00, 0.1147975431483785E+00, 0.1993624802893807E+00, 0.4627968288321279E+00, 0.3782318916911257E+00, 0.8034172324482011E+00, 0.9830449403503746E+00, 0.6226010943062101E+00, 0.4429733864040367E+00, 0.8347746582554776E+00, 0.1173279550602403E+01, 0.8420572992613844E+00, 0.5035524069144587E+00, 0.1829278057427913E+00, 0.3058980395058521E+00, 0.4244336771046062E+00, 0.3014634433415453E+00, 0.9158407747236312E+00, 0.1289422237567578E+01, 0.1131917893423890E+01, 0.7583364305799440E+00, 0.3334922359541972E+00, 0.4977814779461571E+00, 0.4484361267782198E+00, 0.2841468847862598E+00, 0.5865943745895725E+00, 0.9257539794205765E+00, 0.3392119183870583E+00, 0.5231355605450990E-04, 0.3266196269153995E-08, 0.2117869221381033E-04, 0.2117542601754118E-04, 0.0000000000000000E+00, 0.3910066531356214E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + tau: 0.0000000000000000, + sigma: 0.0000000000000000, + i0Out: 1, + n0Out: 21, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + dminOut: 2.1175425069176302E-005, + dmin1Out: 2.9944624525135358E-002, + dmin2Out: 2.9944624525135358E-002, + dnOut: 2.1175425069176302E-005, + dnm1Out: 7.2928780948497918E-002, + dnm2Out: 0.16065460645225654, + }, + { + z: []float64{0.2315355737517615E+01, 0.2163704162395211E+01, 0.8274578340618610E-01, 0.1516515751224039E+00, 0.1227782987997336E+01, 0.1263329604128848E+01, 0.2142822156235013E-01, 0.4719916727467415E-01, 0.5363710491854788E+00, 0.5574082640946934E+00, 0.4183353417969536E-03, 0.3910066531356214E-03, 0.7880045918942136E+00, 0.5738597141291359E+00, 0.4143462125464707E-01, 0.2145632131068746E+00, 0.5674152797118673E+00, 0.1521727389298373E+00, 0.6502569120260687E+00, 0.4566771620366771E+00, 0.4414269425043723E+00, 0.8079355358528180E+00, 0.4009140594652070E+00, 0.2837483186776231E+00, 0.5300224042649548E+00, 0.6237015546083620E+00, 0.4129510944388858E-01, 0.3072349091217998E+00, 0.4276761051054951E+00, 0.7123973396902394E-01, 0.9691308092544145E+00, 0.3977314805803597E+00, 0.2322329650880660E+00, 0.1042095257923447E+01, 0.8186215063776209E+00, 0.1592685164190333E+00, 0.4525581409330741E+00, 0.1193650220303144E+01, 0.1581701233715052E+00, 0.7752942700755104E-01, 0.1428762837957623E+01, 0.9232775185761617E+00, 0.3036848136842134E+00, 0.6636554427529671E+00, 0.8283408623519102E+00, 0.6537934420370561E+00, 0.2331591338951825E+00, 0.4782322339990674E+00, 0.2854908146440392E+00, 0.4038524053908432E+00, 0.1860933389154074E+00, 0.1147975431483785E+00, 0.1080120722364922E+01, 0.4627968288321279E+00, 0.4631042046962229E+00, 0.8034172324482011E+00, 0.9942715478654648E+00, 0.6226010943062101E+00, 0.7069779837626068E+00, 0.8347746582554776E+00, 0.3180071212415688E+00, 0.8420572992613844E+00, 0.2441477440283845E+00, 0.1829278057427913E+00, 0.1096126707799853E+01, 0.4244336771046062E+00, 0.9457451890006905E+00, 0.9158407747236312E+00, 0.5196649403773971E+00, 0.1131917893423890E+01, 0.2877815203259632E+00, 0.3334922359541972E+00, 0.7472489810418290E+00, 0.4484361267782198E+00, 0.2662831374385604E+00, 0.5865943745895725E+00, 0.7292878421469419E-01, 0.3392119183870583E+00, 0.9483648767903632E-12, 0.3266196269153995E-08, 0.2117542506917630E-04, 0.2117542601754118E-04, 0.4183353417969536E-03, 0.3910066531356214E-03}, + i0: 1, + n0: 21, + pp: 0, + tau: 2.1175313795360271E-005, + sigma: 0.0000000000000000, + i0Out: 1, + n0Out: 21, + ppOut: 0, + tauOut: 2.1175313795360271E-005, + sigmaOut: 0.0000000000000000, + dminOut: 1.1127325659669794E-010, + dmin1Out: 3.1433071595911154E-002, + dmin2Out: 3.1433071595911154E-002, + dnOut: 1.1127325659669794E-010, + dnm1Out: 3.5896964560873705E-002, + dnm2Out: 0.25842281720128102, + }, + { + z: []float64{0.2315355737517615E+01, 0.2398080345610006E+01, 0.8274578340618610E-01, 0.4236466279397526E-01, 0.1227782987997336E+01, 0.1206825371451915E+01, 0.2142822156235013E-01, 0.9523728911788614E-02, 0.5363710491854788E+00, 0.5272444803016919E+00, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.7880045918942136E+00, 0.8287928057414093E+00, 0.4143462125464707E-01, 0.2836732781232222E-01, 0.5674152797118673E+00, 0.1189283688611819E+01, 0.6502569120260687E+00, 0.2413561400585997E+00, 0.4414269425043723E+00, 0.6009636865971842E+00, 0.4009140594652070E+00, 0.3535878097802652E+00, 0.5300224042649548E+00, 0.2177085286147829E+00, 0.4129510944388858E-01, 0.8112190955144877E-01, 0.4276761051054951E+00, 0.1315663829494665E+01, 0.9691308092544145E+00, 0.1710650671895379E+00, 0.2322329650880660E+00, 0.8797682289623537E+00, 0.8186215063776209E+00, 0.4211038940233675E+00, 0.4525581409330741E+00, 0.1896031949674164E+00, 0.1581701233715052E+00, 0.1191897606932286E+01, 0.1428762837957623E+01, 0.5405288693957555E+00, 0.3036848136842134E+00, 0.4653859482687157E+00, 0.8283408623519102E+00, 0.5960928726645816E+00, 0.2331591338951825E+00, 0.1116684901463164E+00, 0.2854908146440392E+00, 0.3598944880993349E+00, 0.1860933389154074E+00, 0.5585061130503639E+00, 0.1080120722364922E+01, 0.9846976386969850E+00, 0.4631042046962229E+00, 0.4676068229793028E+00, 0.9942715478654648E+00, 0.1233621533334973E+01, 0.7069779837626068E+00, 0.1822471700779458E+00, 0.3180071212415688E+00, 0.3798865198782122E+00, 0.2441477440283845E+00, 0.7044652781161848E+00, 0.1096126707799853E+01, 0.1337385443370563E+01, 0.9457451890006905E+00, 0.3674861422265960E+00, 0.5196649403773971E+00, 0.4399391431629689E+00, 0.2877815203259632E+00, 0.4888049885267526E+00, 0.7472489810418290E+00, 0.5247059546398414E+00, 0.2662831374385604E+00, 0.3701064434002514E-01, 0.7292878421469419E-01, 0.3589696456182207E-01, 0.9483648767903632E-12, 0.5594353069081231E-15, 0.2117542506917630E-04, 0.1112732565966979E-09, 0.4183353417969536E-03, 0.6252320936560726E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + tau: 2.1175313795360271E-005, + sigma: 2.1175313795360271E-005, + i0Out: 1, + n0Out: 21, + ppOut: 1, + tauOut: 2.1175313795360271E-005, + sigmaOut: 2.1175313795360271E-005, + dminOut: -2.1175202522103674E-005, + dmin1Out: 2.9116497146097618E-002, + dmin2Out: 4.9396687496051764E-002, + dnOut: -2.1175202522103674E-005, + dnm1Out: 2.9116497146097618E-002, + dnm2Out: 0.15954393093937583, + }, + { + z: []float64{0.2440423833090186E+01, 0.2398080345610006E+01, 0.2094994698033050E-01, 0.4236466279397526E-01, 0.1195377978069578E+01, 0.1206825371451915E+01, 0.4200624064314086E-02, 0.9523728911788614E-02, 0.5236479130172386E+00, 0.5272444803016919E+00, 0.9895730475750664E-03, 0.6252320936560726E-03, 0.8561493851923613E+00, 0.8287928057414093E+00, 0.3940527300515336E-01, 0.2836732781232222E-01, 0.1391213380351470E+01, 0.1189283688611819E+01, 0.1042588274099539E+00, 0.2413561400585997E+00, 0.8502714936537001E+00, 0.6009636865971842E+00, 0.9053470847599347E-01, 0.3535878097802652E+00, 0.2082745543764428E+00, 0.2177085286147829E+00, 0.5124445590385125E+00, 0.8112190955144877E-01, 0.9742631623318954E+00, 0.1315663829494665E+01, 0.1544732645319877E+00, 0.1710650671895379E+00, 0.1146377683139938E+01, 0.8797682289623537E+00, 0.6964776521238716E-01, 0.4211038940233675E+00, 0.1311831861373520E+01, 0.1896031949674164E+00, 0.4911110065859084E+00, 0.1191897606932286E+01, 0.5147826357647675E+00, 0.5405288693957555E+00, 0.5388939477127089E+00, 0.4653859482687157E+00, 0.1688462397843937E+00, 0.5960928726645816E+00, 0.2380205454936569E+00, 0.1116684901463164E+00, 0.6803588803422466E+00, 0.3598944880993349E+00, 0.8083375797812383E+00, 0.5585061130503639E+00, 0.6439457065812542E+00, 0.9846976386969850E+00, 0.8958050967125053E+00, 0.4676068229793028E+00, 0.5200424313866183E+00, 0.1233621533334973E+01, 0.1331299890548604E+00, 0.1822471700779458E+00, 0.9512006336257413E+00, 0.3798865198782122E+00, 0.9904762202705547E+00, 0.7044652781161848E+00, 0.7143741900128092E+00, 0.1337385443370563E+01, 0.2263121215682984E+00, 0.3674861422265960E+00, 0.7024108348076278E+00, 0.4399391431629689E+00, 0.3651408483866702E+00, 0.4888049885267526E+00, 0.1965545752794010E+00, 0.5247059546398414E+00, 0.6759292101929097E-02, 0.3701064434002514E-01, 0.2911649714609818E-01, 0.3589696456182207E-01, 0.2137969692662087E-23, 0.5594353069081231E-15, -0.2117520252210367E-04, 0.1112732565966979E-09, 0.9895730475750664E-03, 0.6252320936560726E-03, 0.1037537856266618 - 321}, + i0: 1, + n0: 21, + pp: 1, + tau: 1.1127325659669789E-010, + sigma: 2.1175313795360271E-005, + i0Out: 1, + n0Out: 21, + ppOut: 1, + tauOut: 1.1127325659669789E-010, + sigmaOut: 2.1175313795360271E-005, + dminOut: -2.0808762284537102E-024, + dmin1Out: 2.9139336744737766E-002, + dmin2Out: 4.9426557292086552E-002, + dnOut: -2.0808762284537102E-024, + dnm1Out: 2.9139336744737766E-002, + dnm2Out: 0.15959234211062134, + }, + { + z: []float64{0.2440445008292708E+01, 0.2398080345610006E+01, 0.2094976520226600E-01, 0.4236466279397526E-01, 0.1195399335050165E+01, 0.1206825371451915E+01, 0.4200549016048655E-02, 0.9523728911788614E-02, 0.5236691632680260E+00, 0.5272444803016919E+00, 0.9895328911616120E-03, 0.6252320936560726E-03, 0.8561706005512968E+00, 0.8287928057414093E+00, 0.3940429656773515E-01, 0.2836732781232222E-01, 0.1391235531991410E+01, 0.1189283688611819E+01, 0.1042571673718422E+00, 0.2413561400585997E+00, 0.8502943288943339E+00, 0.6009636865971842E+00, 0.9053227710395735E-01, 0.3535878097802652E+00, 0.2082981609510011E+00, 0.2177085286147829E+00, 0.5123864833424303E+00, 0.8112190955144877E-01, 0.9743424132304999E+00, 0.1315663829494665E+01, 0.1544607000116935E+00, 0.1710650671895379E+00, 0.1146411422862754E+01, 0.8797682289623537E+00, 0.6964571542795012E-01, 0.4211038940233675E+00, 0.1311855086360479E+01, 0.1896031949674164E+00, 0.4911023119923957E+00, 0.1191897606932286E+01, 0.5148125055608023E+00, 0.5405288693957555E+00, 0.5388626806938843E+00, 0.4653859482687157E+00, 0.1688986820057405E+00, 0.5960928726645816E+00, 0.2379466412690434E+00, 0.1116684901463164E+00, 0.6804539597693821E+00, 0.3598944880993349E+00, 0.8082246312519304E+00, 0.5585061130503639E+00, 0.6440798303130841E+00, 0.9846976386969850E+00, 0.8956185534970393E+00, 0.4676068229793028E+00, 0.5202501498046066E+00, 0.1233621533334973E+01, 0.1330768347199243E+00, 0.1822471700779458E+00, 0.9512749631631994E+00, 0.3798865198782122E+00, 0.9903988276741268E+00, 0.7044652781161848E+00, 0.7144727578117591E+00, 0.1337385443370563E+01, 0.2262808998212762E+00, 0.3674861422265960E+00, 0.7024632317571722E+00, 0.4399391431629689E+00, 0.3651136124179467E+00, 0.4888049885267526E+00, 0.1966029864506465E+00, 0.5247059546398414E+00, 0.6757627705811050E-02, 0.3701064434002514E-01, 0.2913933674473832E-01, 0.3589696456182207E-01, 0.2136293938333395E-23, 0.5594353069081231E-15, 0.0000000000000000E+00, 0.1112732565966979E-09, 0.9895328911616120E-03, 0.6252320936560726E-03}, + i0: 1, + n0: 21, + pp: 0, + tau: -0.0000000000000000, + sigma: 2.1175425068616867E-005, + i0Out: 1, + n0Out: 21, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 2.1175425068616867E-005, + dminOut: 0.0000000000000000, + dmin1Out: 2.7016889331018056E-002, + dmin2Out: 5.3061698118516694E-002, + dnOut: 0.0000000000000000, + dnm1Out: 2.7016889331018056E-002, + dnm2Out: 8.6018658784156071E-002, + }, + { + z: []float64{0.2440445008292708E+01, 0.2461394773494974E+01, 0.2094976520226600E-01, 0.1017444891892999E-01, 0.1195399335050165E+01, 0.1189425435147283E+01, 0.4200549016048655E-02, 0.1849378635683999E-02, 0.5236691632680260E+00, 0.5228093175235037E+00, 0.9895328911616120E-03, 0.1620493249248586E-02, 0.8561706005512968E+00, 0.8939544038697832E+00, 0.3940429656773515E-01, 0.6132377362967349E-01, 0.1391235531991410E+01, 0.1434168925733579E+01, 0.1042571673718422E+00, 0.6181229879703373E-01, 0.8502943288943339E+00, 0.8790143072012576E+00, 0.9053227710395735E-01, 0.2145324219750511E-01, 0.2082981609510011E+00, 0.6992314020959263E+00, 0.5123864833424303E+00, 0.7139837844669097E+00, 0.9743424132304999E+00, 0.4148193287752837E+00, 0.1544607000116935E+00, 0.4268738185358478E+00, 0.1146411422862754E+01, 0.7891833197548568E+00, 0.6964571542795012E-01, 0.1157716892137957E+00, 0.1311855086360479E+01, 0.1687185709139079E+01, 0.4911023119923957E+00, 0.1498504938454686E+00, 0.5148125055608023E+00, 0.9038246924092180E+00, 0.5388626806938843E+00, 0.1006978425303630E+00, 0.1688986820057405E+00, 0.3061474807444209E+00, 0.2379466412690434E+00, 0.5288684194677825E+00, 0.6804539597693821E+00, 0.9598101715535300E+00, 0.8082246312519304E+00, 0.5423584775195998E+00, 0.6440798303130841E+00, 0.9973399062905237E+00, 0.8956185534970393E+00, 0.4671884516860899E+00, 0.5202501498046066E+00, 0.1861385328384410E+00, 0.1330768347199243E+00, 0.6800991665489665E+00, 0.9512749631631994E+00, 0.1261574624288360E+01, 0.9903988276741268E+00, 0.5608966509936130E+00, 0.7144727578117591E+00, 0.3798570066394223E+00, 0.2262808998212762E+00, 0.4184574968871406E+00, 0.7024632317571722E+00, 0.6491193472879784E+00, 0.3651136124179467E+00, 0.1105843276664904E+00, 0.1966029864506465E+00, 0.9277628648996712E-01, 0.6757627705811050E-02, 0.2122447413720272E-02, 0.2913933674473832E-01, 0.2701688933101806E-01, 0.2136293938333395E-23, 0.0000000000000000E+00, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + tau: -0.0000000000000000, + sigma: 2.1175425068616867E-005, + i0Out: 1, + n0Out: 20, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 2.1175425068616867E-005, + dminOut: 2.5763383633962696E-002, + dmin1Out: 4.3622798915905092E-002, + dmin2Out: 7.4536672467372611E-002, + dnOut: 2.5763383633962696E-002, + dnm1Out: 4.3622798915905092E-002, + dnm2Out: 9.8141518071882677E-002, + }, + { + z: []float64{0.2471569222413904E+01, 0.2461394773494974E+01, 0.4896382518051712E-02, 0.1017444891892999E-01, 0.1186378431264915E+01, 0.1189425435147283E+01, 0.8149780515932184E-03, 0.1849378635683999E-02, 0.5236148327211592E+00, 0.5228093175235037E+00, 0.2766627272719901E-02, 0.1620493249248586E-02, 0.9525115502267366E+00, 0.8939544038697832E+00, 0.9233342160256496E-01, 0.6132377362967349E-01, 0.1403647802928048E+01, 0.1434168925733579E+01, 0.3870906568602875E-01, 0.6181229879703373E-01, 0.8617584837127339E+00, 0.8790143072012576E+00, 0.1740717486950262E-01, 0.2145324219750511E-01, 0.1395808011693333E+01, 0.6992314020959263E+00, 0.2121884039551361E+00, 0.7139837844669097E+00, 0.6295047433559955E+00, 0.4148193287752837E+00, 0.5351535485381410E+00, 0.4268738185358478E+00, 0.3698014604305115E+00, 0.7891833197548568E+00, 0.5281978587564573E+00, 0.1157716892137957E+00, 0.1308838344228090E+01, 0.1687185709139079E+01, 0.1034799882693896E+00, 0.1498504938454686E+00, 0.9010425466701916E+00, 0.9038246924092180E+00, 0.3421413441684364E-01, 0.1006978425303630E+00, 0.8008017657953598E+00, 0.3061474807444209E+00, 0.6338813300623194E+00, 0.5288684194677825E+00, 0.8682873190108105E+00, 0.9598101715535300E+00, 0.6229686202966810E+00, 0.5423584775195998E+00, 0.8415597376799326E+00, 0.9973399062905237E+00, 0.1033340463692495E+00, 0.4671884516860899E+00, 0.7629036530181579E+00, 0.1861385328384410E+00, 0.1124645093942705E+01, 0.6800991665489665E+00, 0.6978261813392677E+00, 0.1261574624288360E+01, 0.3053203341720497E+00, 0.5608966509936130E+00, 0.4929941693545132E+00, 0.3798570066394223E+00, 0.5509778292160957E+00, 0.4184574968871406E+00, 0.2087258457383731E+00, 0.6491193472879784E+00, 0.4915348757406203E-01, 0.1105843276664904E+00, 0.4574524632962537E-01, 0.9277628648996712E-01, 0.1253505697055357E-02, 0.2122447413720272E-02, 0.2576338363396270E-01, 0.2701688933101806E-01, 0.8149780515932184E-03, 0.1620493249248586E-02}, + i0: 1, + n0: 20, + pp: 0, + tau: 2.0080554394878082E-002, + sigma: 2.1175425068616867E-005, + i0Out: 1, + n0Out: 20, + ppOut: 0, + tauOut: 2.0080554394878082E-002, + sigmaOut: 2.1175425068616867E-005, + dminOut: -2.1187919252575148E-003, + dmin1Out: -2.1187919252575148E-003, + dmin2Out: 3.1777270007152948E-002, + dnOut: 4.3005217031728403E-002, + dnm1Out: -2.1187919252575148E-003, + dnm2Out: 3.1777270007152948E-002, + }, + { + z: []float64{0.2471569222413904E+01, 0.2456385050537078E+01, 0.4896382518051712E-02, 0.2364842030515144E-02, 0.1186378431264915E+01, 0.1164748012891115E+01, 0.8149780515932184E-03, 0.3663750368606913E-03, 0.5236148327211592E+00, 0.5059345305621403E+00, 0.2766627272719901E-02, 0.5208666879309463E-02, 0.9525115502267366E+00, 0.1019555750555114E+01, 0.9233342160256496E-01, 0.1271177219084926E+00, 0.1403647802928048E+01, 0.1295158592310706E+01, 0.3870906568602875E-01, 0.2575581550365553E-01, 0.8617584837127339E+00, 0.8333292886837029E+00, 0.1740717486950262E-01, 0.2915663048658400E-01, 0.1395808011693333E+01, 0.1558759230767007E+01, 0.2121884039551361E+00, 0.8569226352498945E-01, 0.6295047433559955E+00, 0.1058885473974269E+01, 0.5351535485381410E+00, 0.1868951540728986E+00, 0.3698014604305115E+00, 0.6910236107191923E+00, 0.5281978587564573E+00, 0.1000437033056103E+01, 0.1308838344228090E+01, 0.3918007450464985E+00, 0.1034799882693896E+00, 0.2379777816619179E+00, 0.9010425466701916E+00, 0.6771983450302391E+00, 0.3421413441684364E-01, 0.4045895778871807E-01, 0.8008017657953598E+00, 0.1374143583674083E+01, 0.6338813300623194E+00, 0.4005339232303680E+00, 0.8682873190108105E+00, 0.1070641461682245E+01, 0.6229686202966810E+00, 0.4896740201485869E+00, 0.8415597376799326E+00, 0.4351392095057171E+00, 0.1033340463692495E+00, 0.1811694274708021E+00, 0.7629036530181579E+00, 0.1686298765095183E+01, 0.1124645093942705E+01, 0.4654019842229331E+00, 0.6978261813392677E+00, 0.5176639768935063E+00, 0.3053203341720497E+00, 0.2907699806261721E+00, 0.4929941693545132E+00, 0.7331214635495586E+00, 0.5509778292160957E+00, 0.1568680213363420E+00, 0.2087258457383731E+00, 0.8093075758121498E-01, 0.4915348757406203E-01, 0.2778348386000479E-01, 0.4574524632962537E-01, -0.8652862282021575E-03, 0.1253505697055357E-02, -0.3732238779264379E-01, 0.2576338363396270E-01, 0.4300521703172840E-01, 0.8149780515932184E-03, 0.3663750368606913E-03}, + i0: 1, + n0: 20, + pp: 0, + tau: 5.0201385987195205E-003, + sigma: 2.1175425068616867E-005, + i0Out: 1, + n0Out: 20, + ppOut: 0, + tauOut: 5.0201385987195205E-003, + sigmaOut: 2.1175425068616867E-005, + dminOut: 1.8576185384092288E-002, + dmin1Out: 1.8576185384092288E-002, + dmin2Out: 5.2365600435162571E-002, + dnOut: 1.9114649409197451E-002, + dnm1Out: 1.8576185384092288E-002, + dnm2Out: 5.2365600435162571E-002, + }, + { + z: []float64{0.2471569222413904E+01, 0.2471445466333236E+01, 0.4896382518051712E-02, 0.2350431231346416E-02, 0.1186378431264915E+01, 0.1179822839486443E+01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.5236148327211592E+00, 0.5209996276036221E+00, 0.2766627272719901E-02, 0.5058054349403302E-02, 0.9525115502267366E+00, 0.1034766778881179E+01, 0.9233342160256496E-01, 0.1252490967185870E+00, 0.1403647802928048E+01, 0.1312087633296770E+01, 0.3870906568602875E-01, 0.2542350442532051E-01, 0.8617584837127339E+00, 0.8487220155581966E+00, 0.1740717486950262E-01, 0.2862783537884150E-01, 0.1395808011693333E+01, 0.1574348441670908E+01, 0.2121884039551361E+00, 0.8484373804386666E-01, 0.6295047433559955E+00, 0.1074794415251550E+01, 0.5351535485381410E+00, 0.1841287608083240E+00, 0.3698014604305115E+00, 0.7088504197799252E+00, 0.5281978587564573E+00, 0.9752771411128711E+00, 0.1308838344228090E+01, 0.4320210527858890E+00, 0.1034799882693896E+00, 0.2158225196628609E+00, 0.9010425466701916E+00, 0.7144140228254550E+00, 0.3421413441684364E-01, 0.3835134583138245E-01, 0.8008017657953598E+00, 0.1391311611427577E+01, 0.6338813300623194E+00, 0.3955915526975877E+00, 0.8682873190108105E+00, 0.1090644248011184E+01, 0.6229686202966810E+00, 0.4806932321292802E+00, 0.8415597376799326E+00, 0.4591804133211825E+00, 0.1033340463692495E+00, 0.1716839812178710E+00, 0.7629036530181579E+00, 0.1710844627144272E+01, 0.1124645093942705E+01, 0.4587247601659613E+00, 0.6978261813392677E+00, 0.5394016167466366E+00, 0.3053203341720497E+00, 0.2790520826393697E+00, 0.4929941693545132E+00, 0.7598997773325197E+00, 0.5509778292160957E+00, 0.1513401067044909E+00, 0.2087258457383731E+00, 0.1015190880092246E+00, 0.4915348757406203E-01, 0.2214892234681356E-01, 0.4574524632962537E-01, 0.1982969108114764E-01, 0.1253505697055357E-02, 0.1628595626045726E-02, 0.2576338363396270E-01, 0.1911464940919745E-01, 0.8149780515932184E-03, 0.3616937915375072E-03, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + tau: 5.4769133315280185E-003, + sigma: 5.0413140237881371E-003, + i0Out: 1, + n0Out: 20, + ppOut: 1, + tauOut: 5.4769133315280185E-003, + sigmaOut: 5.0413140237881371E-003, + dminOut: 9.5622848228283271E-003, + dmin1Out: 9.5622848228283271E-003, + dmin2Out: 6.9533978479808370E-002, + dnOut: 1.0856003705186750E-002, + dnm1Out: 9.5622848228283271E-003, + dnm2Out: 6.9533978479808370E-002, + }, + { + z: []float64{0.2468318984233055E+01, 0.2471445466333236E+01, 0.1123474100024551E-02, 0.2350431231346416E-02, 0.1173584145846428E+01, 0.1179822839486443E+01, 0.1605699355811189E-03, 0.3616937915375072E-03, 0.5204201986859162E+00, 0.5209996276036221E+00, 0.1005707814522541E-01, 0.5058054349403302E-02, 0.1144481884123012E+01, 0.1034766778881179E+01, 0.1435914304680996E+00, 0.1252490967185870E+00, 0.1188442793922463E+01, 0.1312087633296770E+01, 0.1815610143690141E-01, 0.2542350442532051E-01, 0.8537168361686087E+00, 0.8487220155581966E+00, 0.5279290053521807E-01, 0.2862783537884150E-01, 0.1600922365848029E+01, 0.1574348441670908E+01, 0.5696064828871891E-01, 0.8484373804386666E-01, 0.1196485614439627E+01, 0.1074794415251550E+01, 0.1090859328498209E+00, 0.1841287608083240E+00, 0.1569564714711448E+01, 0.7088504197799252E+00, 0.2684440171930437E+00, 0.9752771411128711E+00, 0.3739226419241781E+00, 0.4320210527858890E+00, 0.4123490187575627E+00, 0.2158225196628609E+00, 0.3349394365677468E+00, 0.7144140228254550E+00, 0.1593084209965356E+00, 0.3835134583138245E-01, 0.1622117829797102E+01, 0.1391311611427577E+01, 0.2659792301064862E+00, 0.3955915526975877E+00, 0.1299881336702450E+01, 0.1090644248011184E+01, 0.1698038973078534E+00, 0.4806932321292802E+00, 0.4555835838996722E+00, 0.4591804133211825E+00, 0.6447216871142054E+00, 0.1716839812178710E+00, 0.1519370786864500E+01, 0.1710844627144272E+01, 0.1628548339973444E+00, 0.4587247601659613E+00, 0.6501219520571339E+00, 0.5394016167466366E+00, 0.3261720586281595E+00, 0.2790520826393697E+00, 0.5795909120773233E+00, 0.7598997773325197E+00, 0.2650819619788820E-01, 0.1513401067044909E+00, 0.9168290082662192E-01, 0.1015190880092246E+00, 0.4790492926791300E-02, 0.2214892234681356E-01, 0.1119088044887405E-01, 0.1982969108114764E-01, 0.2781732372482683E-02, 0.1628595626045726E-02, 0.1085600370518675E-01, 0.1911464940919745E-01, 0.1605699355811189E-03, 0.3616937915375072E-03}, + i0: 1, + n0: 20, + pp: 0, + tau: 5.1216063611655054E-003, + sigma: 1.0518227355316156E-002, + i0Out: 1, + n0Out: 20, + ppOut: 0, + tauOut: 5.1216063611655054E-003, + sigmaOut: 1.0518227355316156E-002, + dminOut: 2.0601312480394186E-003, + dmin1Out: 5.4371870398960158E-003, + dmin2Out: 8.0023511442426670E-002, + dnOut: 2.0601312480394186E-003, + dnm1Out: 5.4371870398960158E-003, + dnm2Out: 8.0023511442426670E-002, + }, + { + z: []float64{0.2468318984233055E+01, 0.2464320851971913E+01, 0.1123474100024551E-02, 0.5350323562789559E-03, 0.1173584145846428E+01, 0.1168088077064565E+01, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.5204201986859162E+00, 0.5252841314829605E+00, 0.1005707814522541E-01, 0.2191222436498315E-01, 0.1144481884123012E+01, 0.1261039483864963E+01, 0.1435914304680996E+00, 0.1353250258951489E+00, 0.1188442793922463E+01, 0.1066152263103050E+01, 0.1815610143690141E-01, 0.1453842008528346E-01, 0.8537168361686087E+00, 0.8868497102573779E+00, 0.5279290053521807E-01, 0.9530062900995111E-01, 0.1600922365848029E+01, 0.1557460778765631E+01, 0.5696064828871891E-01, 0.4375878814786067E-01, 0.1196485614439627E+01, 0.1256691152780422E+01, 0.1090859328498209E+00, 0.1362446379077657E+00, 0.1569564714711448E+01, 0.1696642487635560E+01, 0.2684440171930437E+00, 0.5916231430550117E-01, 0.3739226419241781E+00, 0.7219877400150740E+00, 0.4123490187575627E+00, 0.1912940350054112E+00, 0.3349394365677468E+00, 0.2978322161977056E+00, 0.1593084209965356E+00, 0.8676597630518320E+00, 0.1622117829797102E+01, 0.1015315690490590E+01, 0.2659792301064862E+00, 0.3405260456467969E+00, 0.1299881336702450E+01, 0.1124037582002341E+01, 0.1698038973078534E+00, 0.6882320425428856E-01, 0.4555835838996722E+00, 0.1026360460398424E+01, 0.6447216871142054E+00, 0.9544125430154021E+00, 0.1519370786864500E+01, 0.7226914714852769E+00, 0.1628548339973444E+00, 0.1465016632377001E+00, 0.6501219520571339E+00, 0.8246707410864278E+00, 0.3261720586281595E+00, 0.2292385937027206E+00, 0.5795909120773233E+00, 0.3717389082113253E+00, 0.2650819619788820E-01, 0.6537783023029759E-02, 0.9168290082662192E-01, 0.8481400436921797E-01, 0.4790492926791300E-02, 0.6320870478125323E-03, 0.1119088044887405E-01, 0.8218919412378699E-02, 0.2781732372482683E-02, 0.3674266095981827E-02, 0.1085600370518675E-01, 0.2060131248039419E-02, 0.1605699355811189E-03, 0.7153898701552432E-04, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + tau: 1.2817878169164906E-003, + sigma: 1.5639833716481661E-002, + i0Out: 1, + n0Out: 20, + ppOut: 1, + tauOut: 1.2817878169164906E-003, + sigmaOut: 1.5639833716481661E-002, + dminOut: 6.0731361153288982E-005, + dmin1Out: 6.8738708636769136E-003, + dmin2Out: 8.1489512892123819E-002, + dnOut: 6.0731361153288982E-005, + dnm1Out: 6.8738708636769136E-003, + dnm2Out: 8.1489512892123819E-002, + }, + { + z: []float64{0.2463574096511276E+01, 0.2464320851971913E+01, 0.2536822079344948E-03, 0.5350323562789559E-03, 0.1166624146026729E+01, 0.1168088077064565E+01, 0.3221114082852138E-04, 0.7153898701552432E-04, 0.5458823568901986E+00, 0.5252841314829605E+00, 0.5061929508212644E-01, 0.2191222436498315E-01, 0.1344463426861069E+01, 0.1261039483864963E+01, 0.1073120173669855E+00, 0.1353250258951489E+00, 0.9720968780044319E+00, 0.1066152263103050E+01, 0.1326348631702415E-01, 0.1453842008528346E-01, 0.9676050651333883E+00, 0.8868497102573779E+00, 0.1533962535161303E+00, 0.9530062900995111E-01, 0.1446541525580445E+01, 0.1557460778765631E+01, 0.3801569533217738E-01, 0.4375878814786067E-01, 0.1353638307539094E+01, 0.1256691152780422E+01, 0.1707682473962209E+00, 0.1362446379077657E+00, 0.1583754766727924E+01, 0.1696642487635560E+01, 0.2697037855661164E-01, 0.5916231430550117E-01, 0.8850296086469572E+00, 0.7219877400150740E+00, 0.6437471225190403E-01, 0.1912940350054112E+00, 0.1099835479180717E+01, 0.2978322161977056E+00, 0.8009821360646626E+00, 0.8676597630518320E+00, 0.5535778122558079E+00, 0.1015315690490590E+01, 0.6914368034330997E+00, 0.3405260456467969E+00, 0.5001421950066134E+00, 0.1124037582002341E+01, 0.1412346654806686E+00, 0.6882320425428856E-01, 0.1838256550116241E+01, 0.1026360460398424E+01, 0.3752173792456719E+00, 0.9544125430154021E+00, 0.4926939676603885E+00, 0.7226914714852769E+00, 0.2452143584512202E+00, 0.1465016632377001E+00, 0.8074131885210117E+00, 0.8246707410864278E+00, 0.1055431169003394E+00, 0.2292385937027206E+00, 0.2714517865170992E+00, 0.3717389082113253E+00, 0.2042703660177667E-02, 0.6537783023029759E-02, 0.8212159993993635E-01, 0.8481400436921797E-01, 0.6326073178529442E-04, 0.6320870478125323E-03, 0.1054813695965874E-01, 0.8218919412378699E-02, 0.7176120699696391E-03, 0.3674266095981827E-02, 0.6073136115328898E-04, 0.2060131248039419E-02, 0.3221114082852138E-04, 0.7153898701552432E-04}, + i0: 1, + n0: 20, + pp: 0, + tau: 5.6837241251038845E-005, + sigma: 1.6921621533398150E-002, + i0Out: 1, + n0Out: 20, + ppOut: 0, + tauOut: 5.6837241251038845E-005, + sigmaOut: 1.6921621533398150E-002, + dminOut: 3.1568086081919418E-009, + dmin1Out: 1.0483100129151506E-002, + dmin2Out: 8.1316774559040517E-002, + dnOut: 3.1568086081919418E-009, + dnm1Out: 1.0483100129151506E-002, + dnm2Out: 8.1316774559040517E-002, + }, + { + z: []float64{0.2463574096511276E+01, 0.2463770941477959E+01, 0.2536822079344948E-03, 0.1201214707955848E-03, 0.1166624146026729E+01, 0.1166479398455512E+01, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.5458823568901986E+00, 0.5964297407456295E+00, 0.5061929508212644E-01, 0.1141052940222717E+00, 0.1344463426861069E+01, 0.1337613312964532E+01, 0.1073120173669855E+00, 0.7798791776646297E-01, 0.9720968780044319E+00, 0.9073156093137420E+00, 0.1326348631702415E-01, 0.1414482062243694E-01, 0.9676050651333883E+00, 0.1106799660785830E+01, 0.1533962535161303E+00, 0.2004825791345134E+00, 0.1446541525580445E+01, 0.1284017804536858E+01, 0.3801569533217738E-01, 0.4007693764646178E-01, 0.1353638307539094E+01, 0.1484272780047602E+01, 0.1707682473962209E+00, 0.1822138285193538E+00, 0.1583754766727924E+01, 0.1428454479523931E+01, 0.2697037855661164E-01, 0.1671007646458111E-01, 0.8850296086469572E+00, 0.9326374071930291E+00, 0.6437471225190403E-01, 0.7591545433480534E-01, 0.1099835479180717E+01, 0.1824845323669324E+01, 0.8009821360646626E+00, 0.2429827519008994E+00, 0.5535778122558079E+00, 0.1001975026546757E+01, 0.6914368034330997E+00, 0.3451350696526060E+00, 0.5001421950066134E+00, 0.2961849535934249E+00, 0.1412346654806686E+00, 0.8765656248686587E+00, 0.1838256550116241E+01, 0.1336851467252003E+01, 0.3752173792456719E+00, 0.1382856239786244E+00, 0.4926939676603885E+00, 0.5995658648917332E+00, 0.2452143584512202E+00, 0.3302211126778973E+00, 0.8074131885210117E+00, 0.5826783555022028E+00, 0.1055431169003394E+00, 0.4916926700063749E-01, 0.2714517865170992E+00, 0.2242683859353883E+00, 0.2042703660177667E-02, 0.7479881396448043E-03, 0.8212159993993635E-01, 0.8138003529082581E-01, 0.6326073178529442E-04, 0.8199589256196194E-05, 0.1054813695965874E-01, 0.1120071219912114E-01, 0.7176120699696391E-03, 0.3890963093641941E-05, 0.6073136115328898E-04, 0.3156808608191942E-08, 0.3221114082852138E-04, 0.1507398544447245E-04, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + tau: 3.1557121791797713E-009, + sigma: 1.6978458774649190E-002, + i0Out: 1, + n0Out: 20, + ppOut: 1, + tauOut: 3.1557121791797713E-009, + sigmaOut: 1.6978458774649190E-002, + dminOut: 6.9684975813366743E-017, + dmin1Out: 1.1199576261102989E-002, + dmin2Out: 8.1067607231828140E-002, + dnOut: 6.9684975813366743E-017, + dnm1Out: 1.1199576261102989E-002, + dnm2Out: 8.1067607231828140E-002, + }, + { + z: []float64{0.2463891059793043E+01, 0.2463770941477959E+01, 0.5686908130061341E-04, 0.1201214707955848E-03, 0.1166437600203943E+01, 0.1166479398455512E+01, 0.7707718980490818E-05, 0.1507398544447245E-04, 0.7105273238932086E+00, 0.5964297407456295E+00, 0.2148105431436762E+00, 0.1141052940222717E+00, 0.1200790684431606E+01, 0.1337613312964532E+01, 0.5892755169139442E-01, 0.7798791776646297E-01, 0.8625328750890724E+00, 0.9073156093137420E+00, 0.1815059242254727E-01, 0.1414482062243694E-01, 0.1289131644342084E+01, 0.1106799660785830E+01, 0.1996872873596725E+00, 0.2004825791345134E+00, 0.1124407451667935E+01, 0.1284017804536858E+01, 0.5290351604133232E-01, 0.4007693764646178E-01, 0.1613583089369911E+01, 0.1484272780047602E+01, 0.1613081850537457E+00, 0.1822138285193538E+00, 0.1283856367779054E+01, 0.1428454479523931E+01, 0.1213877407087503E-01, 0.1671007646458111E-01, 0.9964140843012472E+00, 0.9326374071930291E+00, 0.1390325207358455E+00, 0.7591545433480534E-01, 0.1928795551678665E+01, 0.1824845323669324E+01, 0.1262252233392066E+00, 0.2429827519008994E+00, 0.1220884869704444E+01, 0.1001975026546757E+01, 0.8372928285471114E-01, 0.3451350696526060E+00, 0.1089021292451660E+01, 0.2961849535934249E+00, 0.1076046951396362E+01, 0.8765656248686587E+00, 0.3990901366785531E+00, 0.1336851467252003E+01, 0.2077509116934600E+00, 0.1382856239786244E+00, 0.7220360627204584E+00, 0.5995658648917332E+00, 0.2664862668525171E+00, 0.3302211126778973E+00, 0.3653613524946110E+00, 0.5826783555022028E+00, 0.3018138637972599E-01, 0.4916926700063749E-01, 0.1948349845395949E+00, 0.2242683859353883E+00, 0.3124249032854923E-03, 0.7479881396448043E-03, 0.8107580682108434E-01, 0.8138003529082581E-01, 0.1132782305976083E-05, 0.8199589256196194E-05, 0.1120346722419663E-01, 0.1120071219912114E-01, 0.1096359327194516E-11, 0.3890963093641941E-05, 0.6968497581336674E-16, 0.3156808608191942E-08, 0.7707718980490818E-05, 0.1507398544447245E-04}, + i0: 1, + n0: 20, + pp: 0, + tau: 6.9684975806547287E-017, + sigma: 1.6978461930361368E-002, + i0Out: 1, + n0Out: 20, + ppOut: 0, + tauOut: 6.9684975806547287E-017, + sigmaOut: 1.6978461930361368E-002, + dminOut: 6.1629758220391547E-032, + dmin1Out: 1.1203310405167735E-002, + dmin2Out: 8.0927116373146771E-002, + dnOut: 6.1629758220391547E-032, + dnm1Out: 1.1203310405167735E-002, + dnm2Out: 8.0927116373146771E-002, + }, + { + z: []float64{0.2463891059793043E+01, 0.2463947928874343E+01, 0.5686908130061341E-04, 0.2692193042748079E-04, 0.1166437600203943E+01, 0.1166418385992496E+01, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.7105273238932086E+00, 0.9253331718563164E+00, 0.2148105431436762E+00, 0.2787563517334627E+00, 0.1200790684431606E+01, 0.9809618843895378E+00, 0.5892755169139442E-01, 0.5181337969514327E-01, 0.8625328750890724E+00, 0.8288700878164763E+00, 0.1815059242254727E-01, 0.2822939734392020E-01, 0.1289131644342084E+01, 0.1460589534357837E+01, 0.1996872873596725E+00, 0.1537255119449346E+00, 0.1124407451667935E+01, 0.1023585455764333E+01, 0.5290351604133232E-01, 0.8339725654733963E-01, 0.1613583089369911E+01, 0.1691494017876317E+01, 0.1613081850537457E+00, 0.1224340957564512E+00, 0.1283856367779054E+01, 0.1173561046093478E+01, 0.1213877407087503E-01, 0.1030644761994533E-01, 0.9964140843012472E+00, 0.1125140157417147E+01, 0.1390325207358455E+00, 0.2383394688796517E+00, 0.1928795551678665E+01, 0.1816681306138221E+01, 0.1262252233392066E+00, 0.8482856339700598E-01, 0.1220884869704444E+01, 0.1219785589162149E+01, 0.8372928285471114E-01, 0.7475327847832687E-01, 0.1089021292451660E+01, 0.2090314965369696E+01, 0.1076046951396362E+01, 0.2054425921547012E+00, 0.3990901366785531E+00, 0.4013984562173118E+00, 0.2077509116934600E+00, 0.3737026089221466E+00, 0.7220360627204584E+00, 0.6148197206508288E+00, 0.2664862668525171E+00, 0.1583615157552351E+00, 0.3653613524946110E+00, 0.2371812231191019E+00, 0.3018138637972599E-01, 0.2479281399828426E-01, 0.1948349845395949E+00, 0.1703545954445960E+00, 0.3124249032854923E-03, 0.1486904479375115E-03, 0.8107580682108434E-01, 0.8092824915545274E-01, 0.1132782305976083E-05, 0.1568190288260776E-06, 0.1120346722419663E-01, 0.1120331040626409E-01, 0.1096359327194516E-11, 0.6819392699821255E-26, 0.6968497581336674E-16, 0.6162975822039155E-31, 0.7707718980490818E-05, 0.4695180568393632E-05, 0.2117542506861687E-04}, + i0: 1, + n0: 20, + pp: 1, + tau: 6.1629758220391547E-032, + sigma: 1.6978461930361441E-002, + i0Out: 1, + n0Out: 20, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 1.6978461930361441E-002, + dminOut: 6.1629758220391547E-032, + dmin1Out: 1.1203288675083998E-002, + dmin2Out: 8.0846453894262649E-002, + dnOut: 6.1629758220391547E-032, + dnm1Out: 1.1203288675083998E-002, + dnm2Out: 8.0846453894262649E-002, + }, + { + z: []float64{0.2463974850804771E+01, 0.2463947928874343E+01, 0.1274454348702788E-04, 0.2692193042748079E-04, 0.1166410336629578E+01, 0.1166418385992496E+01, 0.3724766654883956E-05, 0.4695180568393632E-05, 0.1204085798823124E+01, 0.9253331718563164E+00, 0.2271012218143261E+00, 0.2787563517334627E+00, 0.8056740422703550E+00, 0.9809618843895378E+00, 0.5330513126246473E-01, 0.5181337969514327E-01, 0.8037943538979316E+00, 0.8288700878164763E+00, 0.5129615818002433E-01, 0.2822939734392020E-01, 0.1563018888122747E+01, 0.1460589534357837E+01, 0.1006713350698832E+00, 0.1537255119449346E+00, 0.1006311377241790E+01, 0.1023585455764333E+01, 0.1401812239704283E+00, 0.8339725654733963E-01, 0.1673746889662340E+01, 0.1691494017876317E+01, 0.8584564749956700E-01, 0.1224340957564512E+00, 0.1098021846213856E+01, 0.1173561046093478E+01, 0.1056099032774466E-01, 0.1030644761994533E-01, 0.1352918635969054E+01, 0.1125140157417147E+01, 0.3200390963041470E+00, 0.2383394688796517E+00, 0.1581470773231080E+01, 0.1816681306138221E+01, 0.6542811978092533E-01, 0.8482856339700598E-01, 0.1229110747859551E+01, 0.1219785589162149E+01, 0.1271308521106110E+00, 0.7475327847832687E-01, 0.2168626705413786E+01, 0.2090314965369696E+01, 0.3802606466401751E-01, 0.2054425921547012E+00, 0.7370750004754409E+00, 0.4013984562173118E+00, 0.3117182559112661E+00, 0.3737026089221466E+00, 0.4614629804947978E+00, 0.6148197206508288E+00, 0.8139413038408401E-01, 0.1583615157552351E+00, 0.1805799067333021E+00, 0.2371812231191019E+00, 0.2338892446571373E-01, 0.2479281399828426E-01, 0.1471143614268198E+00, 0.1703545954445960E+00, 0.8179526119010886E-04, 0.1486904479375115E-03, 0.8084661071329148E-01, 0.8092824915545274E-01, 0.2173118009582292E-07, 0.1568190288260776E-06, 0.1120328867508400E-01, 0.1120331040626409E-01, 0.3751376363572422E-55, 0.6819392699821255E-26}, + i0: 1, + n0: 19, + pp: 0, + tau: 1.1203284285913290E-002, + sigma: 1.6978461930361441E-002, + i0Out: 1, + n0Out: 19, + ppOut: 0, + tauOut: 1.1203284285913290E-002, + sigmaOut: 1.6978461930361441E-002, + dminOut: 8.9043085058082561E-010, + dmin1Out: 6.9585227169791292E-002, + dmin2Out: 0.11373841371027797, + dnOut: 8.9043085058082561E-010, + dnm1Out: 6.9585227169791292E-002, + dnm2Out: 0.11373841371027797, + }, + { + z: []float64{0.2463974850804771E+01, 0.2452784311062345E+01, 0.1274454348702788E-04, 0.6060609239813679E-05, 0.1166410336629578E+01, 0.1155204716501079E+01, 0.3724766654883956E-05, 0.3882375624867434E-05, 0.1204085798823124E+01, 0.1419979853975912E+01, 0.2271012218143261E+00, 0.1288536304732592E+00, 0.8056740422703550E+00, 0.7189222587736472E+00, 0.5330513126246473E-01, 0.5959804835594534E-01, 0.8037943538979316E+00, 0.7842891794360973E+00, 0.5129615818002433E-01, 0.1022287011292917E+00, 0.1563018888122747E+01, 0.1550258237777425E+01, 0.1006713350698832E+00, 0.6534828028921505E-01, 0.1006311377241790E+01, 0.1069941036637090E+01, 0.1401812239704283E+00, 0.2192904838448094E+00, 0.1673746889662340E+01, 0.1529098769031184E+01, 0.8584564749956700E-01, 0.6164441320989392E-01, 0.1098021846213856E+01, 0.1035735139045794E+01, 0.1056099032774466E-01, 0.1379518767882891E-01, 0.1352918635969054E+01, 0.1647959260308459E+01, 0.3200390963041470E+00, 0.3071268139247320E+00, 0.1581470773231080E+01, 0.1328568794801360E+01, 0.6542811978092533E-01, 0.6053010243026304E-01, 0.1229110747859551E+01, 0.1284508213253985E+01, 0.1271308521106110E+00, 0.2146341752620367E+00, 0.2168626705413786E+01, 0.1980815310529854E+01, 0.3802606466401751E-01, 0.1414976019284330E-01, 0.7370750004754409E+00, 0.1023440211907950E+01, 0.3117182559112661E+00, 0.1405518698344743E+00, 0.4614629804947978E+00, 0.3911019567584944E+00, 0.8139413038408401E-01, 0.3758136265851575E-01, 0.1805799067333021E+00, 0.1551841842545868E+00, 0.2338892446571373E-01, 0.2217266343062855E-01, 0.1471143614268198E+00, 0.1138202089714681E+00, 0.8179526119010886E-04, 0.5809925758690545E-04, 0.8084661071329148E-01, 0.6958524890097138E-01, 0.2173118009582292E-07, 0.3498739858072780E-08, 0.1120328867508400E-01, 0.8904308505808256E-09, 0.3751376363572422E-55, 0.3882375624867434E-05, 0.1697846193036144E-01}, + i0: 1, + n0: 19, + pp: 1, + tau: 8.9043080564395014E-010, + sigma: 2.8181746216274728E-002, + i0Out: 1, + n0Out: 19, + ppOut: 1, + tauOut: 8.9043080564395014E-010, + sigmaOut: 2.8181746216274728E-002, + dminOut: 1.3962105636374437E-019, + dmin1Out: 6.9544122471813200E-002, + dmin2Out: 9.8247027562672340E-002, + dnOut: 1.3962105636374437E-019, + dnm1Out: 6.9544122471813200E-002, + dnm2Out: 9.8247027562672340E-002, + }, + { + z: []float64{0.2452790370781154E+01, 0.2452784311062345E+01, 0.2854399814229969E-05, 0.6060609239813679E-05, 0.1155205743586459E+01, 0.1155204716501079E+01, 0.4772219324121025E-05, 0.3882375624867434E-05, 0.1548828711339416E+01, 0.1419979853975912E+01, 0.5981019230390531E-01, 0.1288536304732592E+00, 0.7187101139352565E+00, 0.7189222587736472E+00, 0.6503610222645050E-01, 0.5959804835594534E-01, 0.8214817774485077E+00, 0.7842891794360973E+00, 0.1929207566298143E+00, 0.1022287011292917E+00, 0.1422685760546395E+01, 0.1550258237777425E+01, 0.4914564318703864E-01, 0.6534828028921505E-01, 0.1240085876404429E+01, 0.1069941036637090E+01, 0.2703980549150243E+00, 0.2192904838448094E+00, 0.1320345126435623E+01, 0.1529098769031184E+01, 0.4835651195207321E-01, 0.6164441320989392E-01, 0.1001173813882118E+01, 0.1035735139045794E+01, 0.2270725319399537E-01, 0.1379518767882891E-01, 0.1932378820148765E+01, 0.1647959260308459E+01, 0.2111589595024383E+00, 0.3071268139247320E+00, 0.1177939936838754E+01, 0.1328568794801360E+01, 0.6600626338337756E-01, 0.6053010243026304E-01, 0.1433136124242214E+01, 0.1284508213253985E+01, 0.2966575563411978E+00, 0.2146341752620367E+00, 0.1698307513491068E+01, 0.1980815310529854E+01, 0.8526979628348903E-02, 0.1414976019284330E-01, 0.1155465101223645E+01, 0.1023440211907950E+01, 0.4757401262929915E-01, 0.1405518698344743E+00, 0.3811093058972801E+00, 0.3911019567584944E+00, 0.1530278326215801E-01, 0.3758136265851575E-01, 0.1620540635326265E+00, 0.1551841842545868E+00, 0.1557318051836492E-01, 0.2217266343062855E-01, 0.9830512682025924E-01, 0.1138202089714681E+00, 0.4112553872737890E-04, 0.5809925758690545E-04, 0.6954412597055305E-01, 0.6958524890097138E-01, 0.4479725446695418E-16, 0.3498739858072780E-08, 0.1396210563637444E-18, 0.8904308505808256E-09, 0.2854399814229969E-05, 0.3882375624867434E-05}, + i0: 1, + n0: 19, + pp: 0, + tau: 1.3962105636374427E-019, + sigma: 2.8181747106705537E-002, + i0Out: 1, + n0Out: 19, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 2.8181747106705537E-002, + dminOut: 1.3962105636374430E-019, + dmin1Out: 6.9512134440652351E-002, + dmin2Out: 8.9358776708560295E-002, + dnOut: 1.3962105636374430E-019, + dnm1Out: 6.9512134440652351E-002, + dnm2Out: 8.9358776708560295E-002, + }, + { + z: []float64{0.2452790370781154E+01, 0.2452793225180968E+01, 0.2854399814229969E-05, 0.1344352644992036E-05, 0.1155205743586459E+01, 0.1155209171453138E+01, 0.4772219324121025E-05, 0.6398278760815103E-05, 0.1548828711339416E+01, 0.1608632505364561E+01, 0.5981019230390531E-01, 0.2672219415054498E-01, 0.7187101139352565E+00, 0.7570240220111620E+00, 0.6503610222645050E-01, 0.7057368234283014E-01, 0.8214817774485077E+00, 0.9438288517354918E+00, 0.1929207566298143E+00, 0.2908001941945216E+00, 0.1422685760546395E+01, 0.1181031209538913E+01, 0.4914564318703864E-01, 0.5160305461093759E-01, 0.1240085876404429E+01, 0.1458880876708516E+01, 0.2703980549150243E+00, 0.2447209773632920E+00, 0.1320345126435623E+01, 0.1123980661024405E+01, 0.4835651195207321E-01, 0.4307304847484577E-01, 0.1001173813882118E+01, 0.9808080186012680E+00, 0.2270725319399537E-01, 0.4473761868138884E-01, 0.1932378820148765E+01, 0.2098800160969815E+01, 0.2111589595024383E+00, 0.1185117935689049E+00, 0.1177939936838754E+01, 0.1125434406653226E+01, 0.6600626338337756E-01, 0.8405284210411720E-01, 0.1433136124242214E+01, 0.1645740838479294E+01, 0.2966575563411978E+00, 0.3061331074057168E+00, 0.1698307513491068E+01, 0.1400701385713701E+01, 0.8526979628348903E-02, 0.7034066989504621E-02, 0.1155465101223645E+01, 0.1196005046863439E+01, 0.4757401262929915E-01, 0.1515955052150448E-01, 0.3811093058972801E+00, 0.3812525386379337E+00, 0.1530278326215801E-01, 0.6504555274179689E-02, 0.1620540635326265E+00, 0.1711226887768117E+00, 0.1557318051836492E-01, 0.8946350111698947E-02, 0.9830512682025924E-01, 0.8939990224728768E-01, 0.4112553872737890E-04, 0.3199152990069927E-04, 0.6954412597055305E-01, 0.6951213444065239E-01, 0.4479725446695418E-16, 0.8997910999570377E-34, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + tau: 6.8088572105595116E-002, + sigma: 2.8181747106705537E-002, + i0Out: 1, + n0Out: 18, + ppOut: 1, + tauOut: 6.8088572105595116E-002, + sigmaOut: 2.8181747106705537E-002, + dminOut: 1.2643548659038301E-003, + dmin1Out: 1.3935943135754067E-002, + dmin2Out: 9.9495800084882416E-002, + dnOut: 1.2643548659038301E-003, + dnm1Out: 1.3935943135754067E-002, + dnm2Out: 9.9495800084882416E-002, + }, + { + z: []float64{0.2384705997428018E+01, 0.2452793225180968E+01, 0.6512368848977837E-06, 0.1344352644992036E-05, 0.1087126346389419E+01, 0.1155209171453138E+01, 0.9467601652019932E-05, 0.6398278760815103E-05, 0.1567256659807859E+01, 0.1608632505364561E+01, 0.1290748567965171E-01, 0.2672219415054498E-01, 0.7466016465687454E+00, 0.7570240220111620E+00, 0.8921689079377818E-01, 0.7057368234283014E-01, 0.1077323583030640E+01, 0.9438288517354918E+00, 0.3187938243378626E+00, 0.2908001941945216E+00, 0.8457518677063927E+00, 0.1181031209538913E+01, 0.8901276181133644E-01, 0.5160305461093759E-01, 0.1546500520154876E+01, 0.1458880876708516E+01, 0.1778606876095877E+00, 0.2447209773632920E+00, 0.9211044497840675E+00, 0.1123980661024405E+01, 0.4586493023634136E-01, 0.4307304847484577E-01, 0.9115921349407204E+00, 0.9808080186012680E+00, 0.1030014605117353E+00, 0.4473761868138884E-01, 0.2046221921921390E+01, 0.2098800160969815E+01, 0.6518220171905387E-01, 0.1185117935689049E+00, 0.1076216474932694E+01, 0.1125434406653226E+01, 0.1285328723941422E+00, 0.8405284210411720E-01, 0.1755252501385274E+01, 0.1645740838479294E+01, 0.2442959445536252E+00, 0.3061331074057168E+00, 0.1095350936043985E+01, 0.1400701385713701E+01, 0.7680442260639305E-02, 0.7034066989504621E-02, 0.1135395583018709E+01, 0.1196005046863439E+01, 0.5090399511302622E-02, 0.1515955052150448E-01, 0.3145781222952156E+00, 0.3812525386379337E+00, 0.3538316586334169E-02, 0.6504555274179689E-02, 0.1084421501965814E+00, 0.1711226887768117E+00, 0.7375387005938499E-02, 0.8946350111698947E-02, 0.1396793466565477E-01, 0.8939990224728768E-01, 0.1592074691534444E-03, 0.3199152990069927E-04, 0.1264354865903830E-02, 0.6951213444065239E-01, 0.6512368848977837E-06, 0.1344352644992036E-05}, + i0: 1, + n0: 18, + pp: 0, + tau: 1.2463174543591322E-003, + sigma: 9.6270319212300656E-002, + i0Out: 1, + n0Out: 18, + ppOut: 0, + tauOut: 1.2463174543591322E-003, + sigmaOut: 9.6270319212300656E-002, + dminOut: 1.2236274461701734E-006, + dmin1Out: 1.1812799375517376E-002, + dmin2Out: 0.10597947881780349, + dnOut: 1.2236274461701734E-006, + dnm1Out: 1.1812799375517376E-002, + dnm2Out: 0.10597947881780349, + }, + { + z: []float64{0.2384705997428018E+01, 0.2383460331210544E+01, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.1087126346389419E+01, 0.1085889199499347E+01, 0.9467601652019932E-05, 0.1366452649899944E-04, 0.1567256659807859E+01, 0.1578904163506652E+01, 0.1290748567965171E-01, 0.6103442048115082E-02, 0.7466016465687454E+00, 0.8284687778600495E+00, 0.8921689079377818E-01, 0.1160157908485996E+00, 0.1077323583030640E+01, 0.1278855299065544E+01, 0.3187938243378626E+00, 0.2108295383723412E+00, 0.8457518677063927E+00, 0.7226887736910288E+00, 0.8901276181133644E-01, 0.1904807262171572E+00, 0.1546500520154876E+01, 0.1532634164092948E+01, 0.1778606876095877E+00, 0.1068932656188067E+00, 0.9211044497840675E+00, 0.8588297969472432E+00, 0.4586493023634136E-01, 0.4868264913684867E-01, 0.9115921349407204E+00, 0.9646646288612479E+00, 0.1030014605117353E+00, 0.2184840619043245E+00, 0.2046221921921390E+01, 0.1891673744281760E+01, 0.6518220171905387E-01, 0.3708364593761750E-01, 0.1076216474932694E+01, 0.1166419383934860E+01, 0.1285328723941422E+00, 0.1934189785315259E+00, 0.1755252501385274E+01, 0.1804883149953014E+01, 0.2442959445536252E+00, 0.1482587897978486E+00, 0.1095350936043985E+01, 0.9535262710524167E+00, 0.7680442260639305E-02, 0.9145359161143373E-02, 0.1135395583018709E+01, 0.1130094305914509E+01, 0.5090399511302622E-02, 0.1416986451145964E-02, 0.3145781222952156E+00, 0.3154531349760448E+00, 0.3538316586334169E-02, 0.1216353924418735E-02, 0.1084421501965814E+00, 0.1133548658237420E+00, 0.7375387005938499E-02, 0.9088178357782586E-03, 0.1396793466565477E-01, 0.1197200684467082E-01, 0.1592074691534444E-03, 0.1681378409852773E-04, 0.1264354865903830E-02, 0.1223627446170173E-05, 0.6512368848977837E-06, 0.2970373645586866E-06, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + tau: 1.2218877946904154E-006, + sigma: 9.7516636666659787E-002, + i0Out: 1, + n0Out: 18, + ppOut: 1, + tauOut: 1.2218877946904154E-006, + sigmaOut: 9.7516636666659787E-002, + dminOut: 9.5986727915820745E-012, + dmin1Out: 1.1875197612370336E-002, + dmin2Out: 0.11291768719739126, + dnOut: 9.5986727915820745E-012, + dnm1Out: 1.1875197612370336E-002, + dnm2Out: 0.11291768719739126, + }, + { + z: []float64{0.2383459406360114E+01, 0.2383460331210544E+01, 0.1353283656358167E-06, 0.2970373645586866E-06, 0.1085901506809686E+01, 0.1085889199499347E+01, 0.1986826396898849E-04, 0.1366452649899944E-04, 0.1584986515403004E+01, 0.1578904163506652E+01, 0.3190255011763210E-02, 0.6103442048115082E-02, 0.9412930918090910E+00, 0.8284687778600495E+00, 0.1576208411525267E+00, 0.1160157908485996E+00, 0.1332062774397564E+01, 0.1278855299065544E+01, 0.1143821023097510E+00, 0.2108295383723412E+00, 0.7987861757106404E+00, 0.7226887736910288E+00, 0.3654761154847582E+00, 0.1904807262171572E+00, 0.1274050092339202E+01, 0.1532634164092948E+01, 0.7205613198290631E-01, 0.1068932656188067E+00, 0.8354550922133908E+00, 0.8588297969472432E+00, 0.5621179414582513E-01, 0.4868264913684867E-01, 0.1126935674731953E+01, 0.9646646288612479E+00, 0.3667472533840468E+00, 0.2184840619043245E+00, 0.1562008914947536E+01, 0.1891673744281760E+01, 0.2769195683500124E-01, 0.3708364593761750E-01, 0.1332145183743590E+01, 0.1166419383934860E+01, 0.2620575140703801E+00, 0.1934189785315259E+00, 0.1691083203792688E+01, 0.1804883149953014E+01, 0.8359650824372877E-01, 0.1482587897978486E+00, 0.8790739000820365E+00, 0.9535262710524167E+00, 0.1175682535061811E-01, 0.9145359161143373E-02, 0.1119753245127243E+01, 0.1130094305914509E+01, 0.3991886785572840E-03, 0.1416986451145964E-02, 0.3162690783341116E+00, 0.3154531349760448E+00, 0.4359567385560517E-03, 0.1216353924418735E-02, 0.1138265050331695E+00, 0.1133548658237420E+00, 0.9558734450579545E-04, 0.9088178357782586E-03, 0.1189201139646886E-01, 0.1197200684467082E-01, 0.1730052806966466E-08, 0.1681378409852773E-04, 0.9598672791582074E-11, 0.1223627446170173E-05, 0.1353283656358167E-06, 0.2970373645586866E-06}, + i0: 1, + n0: 18, + pp: 0, + tau: 9.5986713933289272E-012, + sigma: 9.7517858554454467E-002, + i0Out: 1, + n0Out: 18, + ppOut: 0, + tauOut: 9.5986713933289272E-012, + sigmaOut: 9.7517858554454467E-002, + dminOut: 6.6174125886815435E-022, + dmin1Out: 1.1882019541390456E-002, + dmin2Out: 0.11366976186212303, + dnOut: 6.6174125886815435E-022, + dnm1Out: 1.1882019541390456E-002, + dnm2Out: 0.11366976186212303, + }, + { + z: []float64{0.2383459406360114E+01, 0.2383459541678881E+01, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.1085901506809686E+01, 0.1085921313408604E+01, 0.1986826396898849E-04, 0.2899927470478232E-04, 0.1584986515403004E+01, 0.1588147771130463E+01, 0.3190255011763210E-02, 0.1890859942802736E-02, 0.9412930918090910E+00, 0.1097023073009216E+01, 0.1576208411525267E+00, 0.1913914667196325E+00, 0.1332062774397564E+01, 0.1255053409978084E+01, 0.1143821023097510E+00, 0.7279916643176543E-01, 0.7987861757106404E+00, 0.1091463124754034E+01, 0.3654761154847582E+00, 0.4266153094141972E+00, 0.1274050092339202E+01, 0.9194909148983121E+00, 0.7205613198290631E-01, 0.6547064404326042E-01, 0.8354550922133908E+00, 0.8261962423063568E+00, 0.5621179414582513E-01, 0.7667315937770838E-01, 0.1126935674731953E+01, 0.1417009768728692E+01, 0.3667472533840468E+00, 0.4042756034295816E+00, 0.1562008914947536E+01, 0.1185425268343357E+01, 0.2769195683500124E-01, 0.3111938635974581E-01, 0.1332145183743590E+01, 0.1563083311444625E+01, 0.2620575140703801E+00, 0.2835172362390010E+00, 0.1691083203792688E+01, 0.1491162475787817E+01, 0.8359650824372877E-01, 0.4928202642453804E-01, 0.8790739000820365E+00, 0.8415486989985177E+00, 0.1175682535061811E-01, 0.1564347179719430E-01, 0.1119753245127243E+01, 0.1104508961999007E+01, 0.3991886785572840E-03, 0.1143051254380294E-03, 0.3162690783341116E+00, 0.3165907299376309E+00, 0.4359567385560517E-03, 0.1567431614478116E-03, 0.1138265050331695E+00, 0.1137653492066288E+00, 0.9558734450579545E-04, 0.9991845479738400E-05, 0.1189201139646886E-01, 0.1188202127144326E-01, 0.1730052806966466E-08, 0.1397591405272086E-17, 0.9598672791582074E-11, 0.6617412588681544E-21, 0.1353283656358167E-06, 0.6165545233233256E-07, 0.2818174710670554E-01}, + i0: 1, + n0: 18, + pp: 1, + tau: 6.6174125886815426E-022, + sigma: 9.7517858564053150E-002, + i0Out: 1, + n0Out: 18, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 9.7517858564053150E-002, + dminOut: 6.6174125886815426E-022, + dmin1Out: 1.1880977265773463E-002, + dmin2Out: 0.11370904624558997, + dnOut: 6.6174125886815426E-022, + dnm1Out: 1.1880977265773463E-002, + dnm2Out: 0.11370904624558997, + }, + { + z: []float64{0.2383459603334333E+01, 0.2383459541678881E+01, 0.2809066689524106E-07, 0.6165545233233256E-07, 0.1085950284592642E+01, 0.1085921313408604E+01, 0.4240998334843304E-04, 0.2899927470478232E-04, 0.1589996221089918E+01, 0.1588147771130463E+01, 0.1304604978030436E-02, 0.1890859942802736E-02, 0.1287109934750819E+01, 0.1097023073009216E+01, 0.1866247058326724E+00, 0.1913914667196325E+00, 0.1141227870577177E+01, 0.1255053409978084E+01, 0.6962466280543776E-01, 0.7279916643176543E-01, 0.1448453771362794E+01, 0.1091463124754034E+01, 0.2708190685256155E+00, 0.4266153094141972E+00, 0.7141424904159570E+00, 0.9194909148983121E+00, 0.7574342769943966E-01, 0.6547064404326042E-01, 0.8271259739846255E+00, 0.8261962423063568E+00, 0.1313543755784947E+00, 0.7667315937770838E-01, 0.1689930996579779E+01, 0.1417009768728692E+01, 0.2835846650840220E+00, 0.4042756034295816E+00, 0.9329599896190804E+00, 0.1185425268343357E+01, 0.5213749144931325E-01, 0.3111938635974581E-01, 0.1794463056234313E+01, 0.1563083311444625E+01, 0.2355970842920850E+00, 0.2835172362390010E+00, 0.1304847417920270E+01, 0.1491162475787817E+01, 0.3178396542921673E-01, 0.4928202642453804E-01, 0.8254082053664953E+00, 0.8415486989985177E+00, 0.2093310277804656E-01, 0.1564347179719430E-01, 0.1083690164346398E+01, 0.1104508961999007E+01, 0.3339325601415243E-04, 0.1143051254380294E-03, 0.3167140798430647E+00, 0.3165907299376309E+00, 0.5630296103885627E-04, 0.1567431614478116E-03, 0.1137190380910697E+00, 0.1137653492066288E+00, 0.1044005669799533E-05, 0.9991845479738400E-05, 0.1188097726577346E-01, 0.1188202127144326E-01, 0.7784240935906335E-37, 0.1397591405272086E-17}, + i0: 1, + n0: 17, + pp: 0, + tau: 1.1880832155707781E-002, + sigma: 9.7517858564053150E-002, + i0Out: 1, + n0Out: 17, + ppOut: 0, + tauOut: 1.1880832155707781E-002, + sigmaOut: 9.7517858564053150E-002, + dminOut: 2.3287035572430725E-008, + dmin1Out: 0.10181720511285566, + dmin2Out: 0.30482311636216664, + dnOut: 2.3287035572430725E-008, + dnm1Out: 0.10181720511285566, + dnm2Out: 0.30482311636216664, + }, + { + z: []float64{0.2383459603334333E+01, 0.2371578799269292E+01, 0.2809066689524106E-07, 0.1286276792433928E-07, 0.1085950284592642E+01, 0.1074111849557515E+01, 0.4240998334843304E-04, 0.6277904232066118E-04, 0.1589996221089918E+01, 0.1579357214869920E+01, 0.1304604978030436E-02, 0.1063198377376995E-02, 0.1287109934750819E+01, 0.1460790610050406E+01, 0.1866247058326724E+00, 0.1457986614708343E+00, 0.1141227870577177E+01, 0.1053173039756072E+01, 0.6962466280543776E-01, 0.9575644420574685E-01, 0.1448453771362794E+01, 0.1611635563526955E+01, 0.2708190685256155E+00, 0.1200044280642223E+00, 0.7141424904159570E+00, 0.6580006578954666E+00, 0.7574342769943966E-01, 0.9521169265880262E-01, 0.8271259739846255E+00, 0.8513878247486099E+00, 0.1313543755784947E+00, 0.2607270439790754E+00, 0.1689930996579779E+01, 0.1700907785529018E+01, 0.2835846650840220E+00, 0.1555482010511415E+00, 0.9329599896190804E+00, 0.8176684478615445E+00, 0.5213749144931325E-01, 0.1144214412274440E+00, 0.1794463056234313E+01, 0.1903757867143247E+01, 0.2355970842920850E+00, 0.1614796988702029E+00, 0.1304847417920270E+01, 0.1163270852323576E+01, 0.3178396542921673E-01, 0.2255256874351997E-01, 0.8254082053664953E+00, 0.8119079072453143E+00, 0.2093310277804656E-01, 0.2794035799797570E-01, 0.1083690164346398E+01, 0.1043902367448729E+01, 0.3339325601415243E-04, 0.1013132519024162E-04, 0.3167140798430647E+00, 0.3048794193232055E+00, 0.5630296103885627E-04, 0.2100082250625822E-04, 0.1137190380910697E+00, 0.1018182491185255E+00, 0.1044005669799533E-05, 0.1218230301111122E-06, 0.1188097726577346E-01, 0.2328703557243073E-07, 0.7784240935906335E-37, 0.1286276792433928E-07, 0.9751785856405315E-01}, + i0: 1, + n0: 17, + pp: 1, + tau: 2.3287007705477136E-008, + sigma: 0.10939869071976092, + i0Out: 1, + n0Out: 17, + ppOut: 1, + tauOut: 2.3287007705477136E-008, + sigmaOut: 0.10939869071976092, + dminOut: 2.6961654281145418E-018, + dmin1Out: 0.10181121275944585, + dmin2Out: 0.30487633314418217, + dnOut: 2.6961654281145418E-018, + dnm1Out: 0.10181121275944585, + dnm2Out: 0.30487633314418217, + }, + { + z: []float64{0.2371578788845052E+01, 0.2371578799269292E+01, 0.5825676764620370E-08, 0.1286276792433928E-07, 0.1074174599487151E+01, 0.1074111849557515E+01, 0.9230392664199863E-04, 0.6277904232066118E-04, 0.1580328086033647E+01, 0.1579357214869920E+01, 0.9827770701659698E-03, 0.1063198377376995E-02, 0.1605606471164067E+01, 0.1460790610050406E+01, 0.9563440497488795E-01, 0.1457986614708343E+00, 0.1053295055699924E+01, 0.1053173039756072E+01, 0.1465159169633776E+00, 0.9575644420574685E-01, 0.1585124051340792E+01, 0.1611635563526955E+01, 0.4981502397231050E-01, 0.1200044280642223E+00, 0.7033973032949510E+00, 0.6580006578954666E+00, 0.1152436546510613E+00, 0.9521169265880262E-01, 0.9968711907896164E+00, 0.8513878247486099E+00, 0.4448645553200346E+00, 0.2607270439790754E+00, 0.1411591407973117E+01, 0.1700907785529018E+01, 0.9010174998427344E-01, 0.1555482010511415E+00, 0.8419881158177074E+00, 0.8176684478615445E+00, 0.2587099684834221E+00, 0.1144214412274440E+00, 0.1806527574243020E+01, 0.1903757867143247E+01, 0.1039810460775319E+00, 0.1614796988702029E+00, 0.1081842351702556E+01, 0.1163270852323576E+01, 0.1692539477932339E-01, 0.2255256874351997E-01, 0.8229228471769590E+00, 0.8119079072453143E+00, 0.3544318396494814E-01, 0.2794035799797570E-01, 0.1008469291521964E+01, 0.1043902367448729E+01, 0.3062892015595061E-05, 0.1013132519024162E-04, 0.3048973339666884E+00, 0.3048794193232055E+00, 0.7013072071892081E-05, 0.2100082250625822E-04, 0.1018113345824760E+00, 0.1018182491185255E+00, 0.2786425742647189E-13, 0.1218230301111122E-06, 0.2696165428114542E-17, 0.2328703557243073E-07, 0.5825676764620370E-08, 0.1286276792433928E-07}, + i0: 1, + n0: 17, + pp: 0, + tau: 2.6961654281138038E-018, + sigma: 0.10939871400676864, + i0Out: 1, + n0Out: 17, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 0.10939871400676864, + dminOut: 2.6961654281138038E-018, + dmin1Out: 0.10180899282350273, + dmin2Out: 0.30489636738914000, + dnOut: 2.6961654281138038E-018, + dnm1Out: 0.10180899282350273, + dnm2Out: 0.30489636738914000, + }, + { + z: []float64{0.2371578788845052E+01, 0.2371578794670729E+01, 0.5825676764620370E-08, 0.2638661645752538E-08, 0.1074174599487151E+01, 0.1074266900775131E+01, 0.9230392664199863E-04, 0.1357860766428602E-03, 0.1580328086033647E+01, 0.1581175077027170E+01, 0.9827770701659698E-03, 0.9979623676695663E-03, 0.1605606471164067E+01, 0.1700242913771285E+01, 0.9563440497488795E-01, 0.5924520849284005E-01, 0.1053295055699924E+01, 0.1140565764170461E+01, 0.1465159169633776E+00, 0.2036234219705987E+00, 0.1585124051340792E+01, 0.1431315653342504E+01, 0.4981502397231050E-01, 0.2448080089382756E-01, 0.7033973032949510E+00, 0.7941601570521848E+00, 0.1152436546510613E+00, 0.1446598374682775E+00, 0.9968711907896164E+00, 0.1297075908641373E+01, 0.4448645553200346E+00, 0.4841405038964208E+00, 0.1411591407973117E+01, 0.1017552654060970E+01, 0.9010174998427344E-01, 0.7455594793877945E-01, 0.8419881158177074E+00, 0.1026142136362350E+01, 0.2587099684834221E+00, 0.4554599945126984E+00, 0.1806527574243020E+01, 0.1455048625807853E+01, 0.1039810460775319E+00, 0.7731088667813635E-01, 0.1081842351702556E+01, 0.1021456859803743E+01, 0.1692539477932339E-01, 0.1363571444815687E-01, 0.8229228471769590E+00, 0.8447303166937503E+00, 0.3544318396494814E-01, 0.4231334180394086E-01, 0.1008469291521964E+01, 0.9661590126100381E+00, 0.3062892015595061E-05, 0.9665775484099522E-06, 0.3048973339666884E+00, 0.3049033804612119E+00, 0.7013072071892081E-05, 0.2341758973227438E-05, 0.1018113345824760E+00, 0.1018089928235306E+00, 0.2786425742647189E-13, 0.7379175991216932E-30, 0.1093987140067686E+00}, + i0: 1, + n0: 16, + pp: 1, + tau: 0.10180650470263587, + sigma: 0.10939871400676864, + i0Out: 1, + n0Out: 16, + ppOut: 1, + tauOut: 0.10180650470263587, + sigmaOut: 0.10939871400676864, + dminOut: 1.3142485785350155E-006, + dmin1Out: 0.20309651253108729, + dmin2Out: 0.57610166617362735, + dnOut: 1.3142485785350155E-006, + dnm1Out: 0.20309651253108729, + dnm2Out: 0.81137144083676127, + }, + { + z: []float64{0.2269772292606755E+01, 0.2371578794670729E+01, 0.1248859578385863E-08, 0.2638661645752538E-08, 0.9725961809002787E+00, 0.1074266900775131E+01, 0.2207509801202943E-03, 0.1357860766428602E-03, 0.1480145783712083E+01, 0.1581175077027170E+01, 0.1146359002276934E-02, 0.9979623676695663E-03, 0.1656535258559212E+01, 0.1700242913771285E+01, 0.4079180092843103E-01, 0.5924520849284005E-01, 0.1201590880509993E+01, 0.1140565764170461E+01, 0.2425529321011353E+00, 0.2036234219705987E+00, 0.1111437017432560E+01, 0.1431315653342504E+01, 0.1749237822536809E-01, 0.2448080089382756E-01, 0.8195211115924584E+00, 0.7941601570521848E+00, 0.2289566278084960E+00, 0.1446598374682775E+00, 0.1450453280026662E+01, 0.1297075908641373E+01, 0.3396444831847066E+00, 0.4841405038964208E+00, 0.6506576141124067E+00, 0.1017552654060970E+01, 0.1175810411452473E+00, 0.7455594793877945E-01, 0.1262214585027166E+01, 0.1026142136362350E+01, 0.5250426092262996E+00, 0.4554599945126984E+00, 0.9055103985570538E+00, 0.1455048625807853E+01, 0.8721019179982008E-01, 0.7731088667813635E-01, 0.8460758777494440E+00, 0.1021456859803743E+01, 0.1361402882064932E-01, 0.1363571444815687E-01, 0.7716231249744060E+00, 0.8447303166937503E+00, 0.5298106707064092E-01, 0.4231334180394086E-01, 0.8113724074143097E+00, 0.9661590126100381E+00, 0.3632274887524200E-06, 0.9665775484099522E-06, 0.2030988542900605E+00, 0.3049033804612119E+00, 0.1173872316183806E-05, 0.2341758973227438E-05, 0.1314248578535016E-05, 0.1018089928235306E+00, 0.1248859578385863E-08, 0.2638661645752538E-08}, + i0: 1, + n0: 16, + pp: 0, + tau: 1.3142409824136984E-006, + sigma: 0.21120521870940451, + i0Out: 1, + n0Out: 16, + ppOut: 0, + tauOut: 1.3142409824136984E-006, + sigmaOut: 0.21120521870940451, + dminOut: 8.4118841991824567E-018, + dmin1Out: 0.20309744276965425, + dmin2Out: 0.50018599148866161, + dnOut: 8.4118841991824567E-018, + dnm1Out: 0.20309744276965425, + dnm2Out: 0.75834178007645303, + }, + { + z: []float64{0.2269772292606755E+01, 0.2269770979614632E+01, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.9725961809002787E+00, 0.9728156171042807E+00, 0.2207509801202943E-03, 0.3358741643642203E-03, 0.1480145783712083E+01, 0.1480954954309013E+01, 0.1146359002276934E-02, 0.1282269997958535E-02, 0.1656535258559212E+01, 0.1696043475248702E+01, 0.4079180092843103E-01, 0.2889964597634762E-01, 0.1201590880509993E+01, 0.1415242852393798E+01, 0.2425529321011353E+00, 0.1904848393814713E+00, 0.1111437017432560E+01, 0.9384432420354740E+00, 0.1749237822536809E-01, 0.1527569554079381E-01, 0.8195211115924584E+00, 0.1033200729619178E+01, 0.2289566278084960E+00, 0.3214195289148511E+00, 0.1450453280026662E+01, 0.1468676920055535E+01, 0.3396444831847066E+00, 0.1504703083827628E+00, 0.6506576141124067E+00, 0.6177670326339089E+00, 0.1175810411452473E+00, 0.2402402478867145E+00, 0.1262214585027166E+01, 0.1547015632125768E+01, 0.5250426092262996E+00, 0.3073217441808570E+00, 0.9055103985570538E+00, 0.6853975319350345E+00, 0.8721019179982008E-01, 0.1076549537133787E+00, 0.8460758777494440E+00, 0.7520336386157322E+00, 0.1361402882064932E-01, 0.1396865635082151E-01, 0.7716231249744060E+00, 0.8106342214532430E+00, 0.5298106707064092E-01, 0.5302931309687425E-01, 0.8113724074143097E+00, 0.7583421433039418E+00, 0.3632274887524200E-06, 0.9727942389020712E-07, 0.2030988542900605E+00, 0.2030986166419704E+00, 0.1173872316183806E-05, 0.7596112905317353E-11, 0.1314248578535016E-05, 0.8411884199182457E-17, 0.1248859578385863E-08, 0.5351359530665278E-09, 0.1093987140067686E+00}, + i0: 1, + n0: 16, + pp: 1, + tau: 8.4118841988678429E-018, + sigma: 0.21120653295038691, + i0Out: 1, + n0Out: 16, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 0.21120653295038691, + dminOut: 8.4118841988678429E-018, + dmin1Out: 0.20309858884628909, + dmin2Out: 0.53283137411117854, + dnOut: 8.4118841988678429E-018, + dnm1Out: 0.20309858884628909, + dnm2Out: 0.71080515929391042, + }, + { + z: []float64{0.2269770980149768E+01, 0.2269770979614632E+01, 0.2293573303077261E-09, 0.5351359530665278E-09, 0.9731514910392876E+00, 0.9728156171042807E+00, 0.5111377954200868E-03, 0.3358741643642203E-03, 0.1481726086511552E+01, 0.1480954954309013E+01, 0.1467737987028945E-02, 0.1282269997958535E-02, 0.1723475383238021E+01, 0.1696043475248702E+01, 0.2373112943910766E-01, 0.2889964597634762E-01, 0.1581996562336162E+01, 0.1415242852393798E+01, 0.1129959536471923E+00, 0.1904848393814713E+00, 0.8407229839290754E+00, 0.9384432420354740E+00, 0.1877296098701645E-01, 0.1527569554079381E-01, 0.1335847297547013E+01, 0.1033200729619178E+01, 0.3533797947109679E+00, 0.3214195289148511E+00, 0.1265767433727330E+01, 0.1468676920055535E+01, 0.7343813202351114E-01, 0.1504703083827628E+00, 0.7845691484971122E+00, 0.6177670326339089E+00, 0.4737063898809231E+00, 0.2402402478867145E+00, 0.1380630986425702E+01, 0.1547015632125768E+01, 0.1525661578238559E+00, 0.3073217441808570E+00, 0.6404863278245572E+00, 0.6853975319350345E+00, 0.1264041760751794E+00, 0.1076549537133787E+00, 0.6395981188913744E+00, 0.7520336386157322E+00, 0.1770404028911661E-01, 0.1396865635082151E-01, 0.8459594942610007E+00, 0.8106342214532430E+00, 0.4753698401003136E-01, 0.5302931309687425E-01, 0.7108052565733343E+00, 0.7583421433039418E+00, 0.2779568135873871E-07, 0.9727942389020712E-07, 0.2030985888538852E+00, 0.2030986166419704E+00, 0.3146138162949754E-27, 0.7596112905317353E-11, 0.8411884198867843E-17, 0.8411884199182457E-17, 0.2293573303077261E-09, 0.5351359530665278E-09}, + i0: 1, + n0: 16, + pp: 0, + tau: 8.4118841988678429E-018, + sigma: 0.21120653295038691, + i0Out: 1, + n0Out: 16, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 0.21120653295038691, + dminOut: 8.4118841988678429E-018, + dmin1Out: 0.20309858045029386, + dmin2Out: 0.51860540644834729, + dnOut: 8.4118841988678429E-018, + dnm1Out: 0.20309858045029386, + dnm2Out: 0.67176795876146822, + }, + { + z: []float64{0.2269770980149768E+01, 0.2269770980379126E+01, 0.2293573303077261E-09, 0.9833566024906726E-10, 0.9731514910392876E+00, 0.9736626287363720E+00, 0.5111377954200868E-03, 0.7778528033461282E-03, 0.1481726086511552E+01, 0.1482415971695234E+01, 0.1467737987028945E-02, 0.1706410574351102E-02, 0.1723475383238021E+01, 0.1745500102102777E+01, 0.2373112943910766E-01, 0.2150819994097728E-01, 0.1581996562336162E+01, 0.1673484316042377E+01, 0.1129959536471923E+00, 0.5676676764251993E-01, 0.8407229839290754E+00, 0.8027291772735718E+00, 0.1877296098701645E-01, 0.3124068479314146E-01, 0.1335847297547013E+01, 0.1657986407464839E+01, 0.3533797947109679E+00, 0.2697830536296953E+00, 0.1265767433727330E+01, 0.1069422512121146E+01, 0.7343813202351114E-01, 0.5387701498318342E-01, 0.7845691484971122E+00, 0.1204398523394852E+01, 0.4737063898809231E+00, 0.5430210247136315E+00, 0.1380630986425702E+01, 0.9901761195359265E+00, 0.1525661578238559E+00, 0.9868601781741700E-01, 0.6404863278245572E+00, 0.6682044860823195E+00, 0.1264041760751794E+00, 0.1209927124430272E+00, 0.6395981188913744E+00, 0.5363094467374639E+00, 0.1770404028911661E-01, 0.2792585709699239E-01, 0.8459594942610007E+00, 0.8655706211740396E+00, 0.4753698401003136E-01, 0.3903729781186600E-01, 0.7108052565733343E+00, 0.6717679865571495E+00, 0.2779568135873871E-07, 0.8403591378512072E-08, 0.2030985888538852E+00, 0.2030985804502939E+00, 0.3146138162949754E-27, 0.1303059324279677E-43, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + tau: 0.10154929022514693, + sigma: 0.21120653295038691, + i0Out: 1, + n0Out: 15, + ppOut: 1, + tauOut: 0.10154929022514693, + sigmaOut: 0.21120653295038691, + dminOut: 0.10154928703201281, + dmin1Out: 0.32391205918605420, + dmin2Out: 0.32391205918605420, + dnOut: 0.10154928703201281, + dnm1Out: 0.53450854002684800, + dnm2Out: 0.69531980574199759, + }, + { + z: []float64{0.2168221690252314E+01, 0.2269770980379126E+01, 0.4415865678637858E-10, 0.9833566024906726E-10, 0.8728911912704126E+00, 0.9736626287363720E+00, 0.1321013925721922E-02, 0.7778528033461282E-03, 0.1381252078118717E+01, 0.1482415971695234E+01, 0.2156405683614187E-02, 0.1706410574351102E-02, 0.1663302606134993E+01, 0.1745500102102777E+01, 0.2163985983955575E-01, 0.2150819994097728E-01, 0.1607061933620194E+01, 0.1673484316042377E+01, 0.2835506195054301E-01, 0.5676676764251993E-01, 0.7040655098910235E+00, 0.8027291772735718E+00, 0.7356791380810462E-01, 0.3124068479314146E-01, 0.1752652257061283E+01, 0.1657986407464839E+01, 0.1646145547572216E+00, 0.2697830536296953E+00, 0.8571356821219610E+00, 0.1069422512121146E+01, 0.7570493055431493E-01, 0.5387701498318342E-01, 0.1570165327329021E+01, 0.1204398523394852E+01, 0.3424393862982660E+00, 0.5430210247136315E+00, 0.6448734608299306E+00, 0.9901761195359265E+00, 0.1022564019526126E+00, 0.9868601781741700E-01, 0.5853915063475871E+00, 0.6682044860823195E+00, 0.1108480973262629E+00, 0.1209927124430272E+00, 0.3518379162830466E+00, 0.5363094467374639E+00, 0.6870152520689508E-01, 0.2792585709699239E-01, 0.7343571035538636E+00, 0.8655706211740396E+00, 0.3571015630515456E-01, 0.3903729781186600E-01, 0.5345085484304394E+00, 0.6717679865571495E+00, 0.3193134112956561E-08, 0.8403591378512072E-08, 0.1015492870320128E+00, 0.2030985804502939E+00, 0.4415865678637858E-10, 0.9833566024906726E-10}, + i0: 1, + n0: 15, + pp: 0, + tau: 0.10154100618138810, + sigma: 0.31275582317553385, + i0Out: 1, + n0Out: 15, + ppOut: 0, + tauOut: 0.10154100618138810, + sigmaOut: 0.31275582317553385, + dminOut: 8.2800215414347011E-006, + dmin1Out: 0.16866357962181588, + dmin2Out: 0.16866357962181588, + dnOut: 8.2800215414347011E-006, + dnm1Out: 0.39110725789187228, + dnm2Out: 0.42026820370851276, + }, + { + z: []float64{0.2168221690252314E+01, 0.2066680684115085E+01, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.8728911912704126E+00, 0.7726711989960955E+00, 0.1321013925721922E-02, 0.2361487308570419E-02, 0.1381252078118717E+01, 0.1279505990312372E+01, 0.2156405683614187E-02, 0.2803234389363145E-02, 0.1663302606134993E+01, 0.1580598225403798E+01, 0.2163985983955575E-01, 0.2200217261925751E-01, 0.1607061933620194E+01, 0.1511873816770092E+01, 0.2835506195054301E-01, 0.1320468740761088E-01, 0.7040655098910235E+00, 0.6628877301101292E+00, 0.7356791380810462E-01, 0.1945110224949301E+00, 0.1752652257061283E+01, 0.1621214783142186E+01, 0.1646145547572216E+00, 0.8703165684534678E-01, 0.8571356821219610E+00, 0.7442679496495411E+00, 0.7570493055431493E-01, 0.1597129865933493E+00, 0.1570165327329021E+01, 0.1651350720852550E+01, 0.3424393862982660E+00, 0.1337269360034139E+00, 0.6448734608299306E+00, 0.5118619205977412E+00, 0.1022564019526126E+00, 0.1169456581236225E+00, 0.5853915063475871E+00, 0.4777529393688394E+00, 0.1108480973262629E+00, 0.8163333047984263E-01, 0.3518379162830466E+00, 0.2373651048287110E+00, 0.6870152520689508E-01, 0.2125478936639627E+00, 0.7343571035538636E+00, 0.4559783600136673E+00, 0.3571015630515456E-01, 0.4186028435717903E-01, 0.5345085484304394E+00, 0.3911072610850064E+00, 0.3193134112956561E-08, 0.8290832843879624E-09, 0.1015492870320128E+00, 0.8280021541434701E-05, 0.4415865678637858E-10, 0.1865101988102620E-10, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + tau: 8.2795951083136037E-006, + sigma: 0.41429682935692197, + i0Out: 1, + n0Out: 15, + ppOut: 1, + tauOut: 8.2795951083136037E-006, + sigmaOut: 0.41429682935692197, + dminOut: 4.2641220534843968E-010, + dmin1Out: 0.19554701532405336, + dmin2Out: 0.19554701532405336, + dnOut: 4.2641220534843968E-010, + dnm1Out: 0.32821333105682254, + dnm2Out: 0.21848306981706411, + }, + { + z: []float64{0.2066672404538628E+01, 0.2066680684115085E+01, 0.6973096395115281E-11, 0.1865101988102620E-10, 0.7750244067025847E+00, 0.7726711989960955E+00, 0.3898634844569491E-02, 0.2361487308570419E-02, 0.1278402310262057E+01, 0.1279505990312372E+01, 0.3465878671879142E-02, 0.2803234389363145E-02, 0.1599126239756068E+01, 0.1580598225403798E+01, 0.2080167773382635E-01, 0.2200217261925751E-01, 0.1504268546848768E+01, 0.1511873816770092E+01, 0.5818924606767697E-02, 0.1320468740761088E-01, 0.8515715484031834E+00, 0.6628877301101292E+00, 0.3703084558710277E+00, 0.1945110224949301E+00, 0.1337929704521397E+01, 0.1621214783142186E+01, 0.4841425717359337E-01, 0.8703165684534678E-01, 0.8555583994741887E+00, 0.7442679496495411E+00, 0.3082690272254148E+00, 0.1597129865933493E+00, 0.1476800350035441E+01, 0.1651350720852550E+01, 0.4635002036444261E-01, 0.1337269360034139E+00, 0.5824492787618127E+00, 0.5118619205977412E+00, 0.9592445892242578E-01, 0.1169456581236225E+00, 0.4634535313311479E+00, 0.4777529393688394E+00, 0.4180980990954932E-01, 0.8163333047984263E-01, 0.4080949089880160E+00, 0.2373651048287110E+00, 0.2374870106014949E+00, 0.2125478936639627E+00, 0.2603433541742431E+00, 0.4559783600136673E+00, 0.6288565043307552E-01, 0.4186028435717903E-01, 0.3282133318859058E+00, 0.3911072610850064E+00, 0.2091574834858362E-13, 0.8290832843879624E-09, 0.4264122053484397E-09, 0.8280021541434701E-05, 0.6973096395115281E-11, 0.1865101988102620E-10}, + i0: 1, + n0: 15, + pp: 0, + tau: 4.2641207498271701E-010, + sigma: 0.41430510895203027, + i0Out: 1, + n0Out: 15, + ppOut: 0, + tauOut: 4.2641207498271701E-010, + sigmaOut: 0.41430510895203027, + dminOut: 1.3036568472020817E-016, + dmin1Out: 0.15841174212052453, + dmin2Out: 0.15841174212052453, + dnOut: 1.3036568472020817E-016, + dnm1Out: 0.23494558610432464, + dnm2Out: 0.15841174212052453, + }, + { + z: []float64{0.2066672404538628E+01, 0.2066672404119188E+01, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.7750244067025847E+00, 0.7789230411181270E+00, 0.3898634844569491E-02, 0.6398608757305904E-02, 0.1278402310262057E+01, 0.1275469579750218E+01, 0.3465878671879142E-02, 0.4345362379476143E-02, 0.1599126239756068E+01, 0.1615582554684006E+01, 0.2080167773382635E-01, 0.1936843737632438E-01, 0.1504268546848768E+01, 0.1490719033652799E+01, 0.5818924606767697E-02, 0.3324054047451484E-02, 0.8515715484031834E+00, 0.1218555949800348E+01, 0.3703084558710277E+00, 0.4065850919906259E+00, 0.1337929704521397E+01, 0.9797588692779520E+00, 0.4841425717359337E-01, 0.4227695780870786E-01, 0.8555583994741887E+00, 0.1121550468464483E+01, 0.3082690272254148E+00, 0.4059129037098644E+00, 0.1476800350035441E+01, 0.1117237466263607E+01, 0.4635002036444261E-01, 0.2416365074306882E-01, 0.5824492787618127E+00, 0.6542100865147574E+00, 0.9592445892242578E-01, 0.6795451513972497E-01, 0.4634535313311479E+00, 0.4373088256745602E+00, 0.4180980990954932E-01, 0.3901675330591518E-01, 0.4080949089880160E+00, 0.6065651658571838E+00, 0.2374870106014949E+00, 0.1019316116273065E+00, 0.2603433541742431E+00, 0.2212973925536000E+00, 0.6288565043307552E-01, 0.9326774535516916E-01, 0.3282133318859058E+00, 0.2349455861043456E+00, 0.2091574834858362E-13, 0.3796083394336032E-22, 0.4264122053484397E-09, 0.1303656847202082E-15, 0.6973096395115281E-11, 0.2614986238618434E-11, 0.2112065329503869E+00}, + i0: 1, + n0: 15, + pp: 1, + tau: 1.3036568471812905E-016, + sigma: 0.41430510937844234, + i0Out: 1, + n0Out: 15, + ppOut: 1, + tauOut: 1.3036568471812905E-016, + sigmaOut: 0.41430510937844234, + dminOut: 2.0791168714198411E-027, + dmin1Out: 0.15670572686712736, + dmin2Out: 0.18680490956440032, + dnOut: 2.0791168714198411E-027, + dnm1Out: 0.15670572686712736, + dnm2Out: 0.18680490956440032, + }, + { + z: []float64{0.2066672404121803E+01, 0.2066672404119188E+01, 0.9855809897129084E-12, 0.2614986238618434E-11, 0.7853216498744473E+00, 0.7789230411181270E+00, 0.1039221422709001E-01, 0.6398608757305904E-02, 0.1269422727902604E+01, 0.1275469579750218E+01, 0.5530302475095172E-02, 0.4345362379476143E-02, 0.1629420689585235E+01, 0.1615582554684006E+01, 0.1771973219288664E-01, 0.1936843737632438E-01, 0.1476323355507364E+01, 0.1490719033652799E+01, 0.2743671176012720E-02, 0.3324054047451484E-02, 0.1622397370614960E+01, 0.1218555949800348E+01, 0.2455350071499520E+00, 0.4065850919906259E+00, 0.7765008199367077E+00, 0.9797588692779520E+00, 0.6106335063429082E-01, 0.4227695780870786E-01, 0.1466400021540057E+01, 0.1121550468464483E+01, 0.3092615230516922E+00, 0.4059129037098644E+00, 0.8321395939549830E+00, 0.1117237466263607E+01, 0.1899693772291602E-01, 0.2416365074306882E-01, 0.7031676639315663E+00, 0.6542100865147574E+00, 0.4226176876348708E-01, 0.6795451513972497E-01, 0.4340638102169883E+00, 0.4373088256745602E+00, 0.5452240634477346E-01, 0.3901675330591518E-01, 0.6539743711397168E+00, 0.6065651658571838E+00, 0.3449248298919955E-01, 0.1019316116273065E+00, 0.2800726549195695E+00, 0.2212973925536000E+00, 0.7823985923721809E-01, 0.9326774535516916E-01, 0.1567057268671274E+00, 0.2349455861043456E+00, 0.3158014839988858E-37, 0.3796083394336032E-22}, + i0: 1, + n0: 14, + pp: 0, + tau: 5.2226904068357879E-002, + sigma: 0.41430510937844245, + i0Out: 1, + n0Out: 14, + ppOut: 0, + tauOut: 5.2226904068357879E-002, + sigmaOut: 0.41430510937844245, + dminOut: 6.1979733096699005E-002, + dmin1Out: 0.21025182606004778, + dmin2Out: 0.35454858327394784, + dnOut: 6.1979733096699005E-002, + dnm1Out: 0.21025182606004778, + dnm2Out: 0.51458348500658069, + }, + { + z: []float64{0.2066672404121803E+01, 0.2014445500054431E+01, 0.9855809897129084E-12, 0.3842238913414725E-12, 0.7853216498744473E+00, 0.7434869600327952E+00, 0.1039221422709001E-01, 0.1774357001838869E-01, 0.1269422727902604E+01, 0.1204982556290953E+01, 0.5530302475095172E-02, 0.7478273627729330E-02, 0.1629420689585235E+01, 0.1587435244082034E+01, 0.1771973219288664E-01, 0.1647944669694028E-01, 0.1476323355507364E+01, 0.1410360675918078E+01, 0.2743671176012720E-02, 0.3156160674217245E-02, 0.1622397370614960E+01, 0.1812549313022337E+01, 0.2455350071499520E+00, 0.1051878329628395E+00, 0.7765008199367077E+00, 0.6801494335398012E+00, 0.6106335063429082E-01, 0.1316523902981273E+00, 0.1466400021540057E+01, 0.1591782250225264E+01, 0.3092615230516922E+00, 0.1616733433116970E+00, 0.8321395939549830E+00, 0.6372362842978442E+00, 0.1899693772291602E-01, 0.2096244776016672E-01, 0.7031676639315663E+00, 0.6722400808665288E+00, 0.4226176876348708E-01, 0.2728832287468248E-01, 0.4340638102169883E+00, 0.4090709896187213E+00, 0.5452240634477346E-01, 0.8716398206477828E-01, 0.6539743711397168E+00, 0.5490759679957803E+00, 0.3449248298919955E-01, 0.1759392479116377E-01, 0.2800726549195695E+00, 0.2884916852972659E+00, 0.7823985923721809E-01, 0.4249908970207047E-01, 0.1567057268671274E+00, 0.6197973309669901E-01, 0.3158014839988858E-37, 0.3842238913414725E-12, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + tau: 4.3992746597899146E-002, + sigma: 0.46653201344680034, + i0Out: 1, + n0Out: 14, + ppOut: 1, + tauOut: 4.3992746597899146E-002, + sigmaOut: 0.46653201344680034, + dminOut: 8.3978432207528000E-003, + dmin1Out: 0.23219513064786862, + dmin2Out: 0.34734604130905122, + dnOut: 8.3978432207528000E-003, + dnm1Out: 0.23219513064786862, + dnm2Out: 0.39493697562207530, + }, + { + z: []float64{0.1970452753456916E+01, 0.2014445500054431E+01, 0.1449745254963753E-12, 0.3842238913414725E-12, 0.7172377834531399E+00, 0.7434869600327952E+00, 0.2980976860358389E-01, 0.1774357001838869E-01, 0.1138658314717199E+01, 0.1204982556290953E+01, 0.1042566937606312E-01, 0.7478273627729330E-02, 0.1549496274805013E+01, 0.1587435244082034E+01, 0.1499968987352189E-01, 0.1647944669694028E-01, 0.1354524400120875E+01, 0.1410360675918078E+01, 0.4223398900256122E-02, 0.3156160674217245E-02, 0.1869521000487022E+01, 0.1812549313022337E+01, 0.3826832915293116E-01, 0.1051878329628395E+00, 0.7295407480870981E+00, 0.6801494335398012E+00, 0.2872518617030954E+00, 0.1316523902981273E+00, 0.1422210985235967E+01, 0.1591782250225264E+01, 0.7243940711431240E-01, 0.1616733433116970E+00, 0.5417665783457993E+00, 0.6372362842978442E+00, 0.2601082853889214E-01, 0.2096244776016672E-01, 0.6295248286044199E+00, 0.6722400808665288E+00, 0.1773220171177086E-01, 0.2728832287468248E-01, 0.4345100233738295E+00, 0.4090709896187213E+00, 0.1101462457758059E+00, 0.8716398206477828E-01, 0.4125309004132391E+00, 0.5490759679957803E+00, 0.1230380805149813E-01, 0.1759392479116377E-01, 0.2746942203499391E+00, 0.2884916852972659E+00, 0.9589143278047064E-02, 0.4249908970207047E-01, 0.8397843220752800E-02, 0.6197973309669901E-01, 0.1449745254963753E-12, 0.3842238913414725E-12}, + i0: 1, + n0: 14, + pp: 0, + tau: 8.0121275381568099E-003, + sigma: 0.51052476004469949, + i0Out: 1, + n0Out: 14, + ppOut: 0, + tauOut: 8.0121275381568099E-003, + sigmaOut: 0.51052476004469949, + dminOut: 8.3015533671799979E-005, + dmin1Out: 0.25644350373773794, + dmin2Out: 0.31779880038403513, + dnOut: 8.3015533671799979E-005, + dnm1Out: 0.25644350373773794, + dnm2Out: 0.31779880038403513, + }, + { + z: []float64{0.1970452753456916E+01, 0.1962440625918904E+01, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.7172377834531399E+00, 0.7390354245185139E+00, 0.2980976860358389E-01, 0.4592897681783073E-01, 0.1138658314717199E+01, 0.1095142879737275E+01, 0.1042566937606312E-01, 0.1475107600976594E-01, 0.1549496274805013E+01, 0.1541732761130612E+01, 0.1499968987352189E-01, 0.1317831886314191E-01, 0.1354524400120875E+01, 0.1337557352619832E+01, 0.4223398900256122E-02, 0.5903098601340335E-02, 0.1869521000487022E+01, 0.1893874103500456E+01, 0.3826832915293116E-01, 0.1474137347708128E-01, 0.7295407480870981E+00, 0.9940391087749554E+00, 0.2872518617030954E+00, 0.4109825756725979E+00, 0.1422210985235967E+01, 0.1075655689139524E+01, 0.7243940711431240E-01, 0.3648495529374628E-01, 0.5417665783457993E+00, 0.5232803240527883E+00, 0.2601082853889214E-01, 0.3129195122603765E-01, 0.6295248286044199E+00, 0.6079529515519964E+00, 0.1773220171177086E-01, 0.1267338099203561E-01, 0.4345100233738295E+00, 0.5239707606194429E+00, 0.1101462457758059E+00, 0.8671997249104711E-01, 0.4125309004132391E+00, 0.3301026084355332E+00, 0.1230380805149813E-01, 0.1023858907404432E-01, 0.2746942203499391E+00, 0.2660326470157850E+00, 0.9589143278047064E-02, 0.3027001489241909E-03, 0.8397843220752800E-02, 0.8301553367179998E-04, 0.1449745254963753E-12, 0.5298565773193886E-13, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + tau: 8.2898056486573887E-005, + sigma: 0.51853688758285632, + i0Out: 1, + n0Out: 14, + ppOut: 1, + tauOut: 8.2898056486573887E-005, + sigmaOut: 0.51853688758285632, + dminOut: 1.9676836973621424E-008, + dmin1Out: 0.25663722751477031, + dmin2Out: 0.28224921557690585, + dnOut: 1.9676836973621424E-008, + dnm1Out: 0.25663722751477031, + dnm2Out: 0.28224921557690585, + }, + { + z: []float64{0.1962357727862470E+01, 0.1962440625918904E+01, 0.1995470932711637E-13, 0.5298565773193886E-13, 0.7848815032798381E+00, 0.7390354245185139E+00, 0.6408456783027588E-01, 0.4592897681783073E-01, 0.1045726489860278E+01, 0.1095142879737275E+01, 0.2174776805091989E-01, 0.1475107600976594E-01, 0.1533080413886347E+01, 0.1541732761130612E+01, 0.1149760777771624E-01, 0.1317831886314191E-01, 0.1331879945386970E+01, 0.1337557352619832E+01, 0.8393943921304423E-02, 0.5903098601340335E-02, 0.1900138634999746E+01, 0.1893874103500456E+01, 0.7711806645770664E-02, 0.1474137347708128E-01, 0.1397226979745296E+01, 0.9940391087749554E+00, 0.3163950825942626E+00, 0.4109825756725979E+00, 0.7956626637825215E+00, 0.1075655689139524E+01, 0.2399491656225486E-01, 0.3648495529374628E-01, 0.5304944606600845E+00, 0.5232803240527883E+00, 0.3586094769777509E-01, 0.3129195122603765E-01, 0.5846824867897703E+00, 0.6079529515519964E+00, 0.1135741402906866E-01, 0.1267338099203561E-01, 0.5992504210249349E+00, 0.5239707606194429E+00, 0.4777049480214081E-01, 0.8671997249104711E-01, 0.2924878046509502E+00, 0.3301026084355332E+00, 0.9312521444528056E-02, 0.1023858907404432E-01, 0.2569399276636945E+00, 0.2660326470157850E+00, 0.9780034825247492E-07, 0.3027001489241909E-03, 0.1967683697362142E-07, 0.8301553367179998E-04, 0.1995470932711637E-13, 0.5298565773193886E-13}, + i0: 1, + n0: 14, + pp: 0, + tau: 1.9676827722764296E-008, + sigma: 0.51861978563934286, + i0Out: 1, + n0Out: 14, + ppOut: 0, + tauOut: 1.9676827722764296E-008, + sigmaOut: 0.51861978563934286, + dminOut: 1.5032959860012969E-015, + dmin1Out: 0.24838793989138258, + dmin2Out: 0.27047787997045275, + dnOut: 1.5032959860012969E-015, + dnm1Out: 0.24838793989138258, + dnm2Out: 0.27047787997045275, + }, + { + z: []float64{0.1962357727862470E+01, 0.1962357708185662E+01, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.7848815032798381E+00, 0.8489660514332782E+00, 0.6408456783027588E-01, 0.7893711422056097E-01, 0.1045726489860278E+01, 0.9885371240138099E+00, 0.2174776805091989E-01, 0.3372769361380378E-01, 0.1533080413886347E+01, 0.1510850308373431E+01, 0.1149760777771624E-01, 0.1013563894066502E-01, 0.1331879945386970E+01, 0.1330138230690781E+01, 0.8393943921304423E-02, 0.1199097716077874E-01, 0.1900138634999746E+01, 0.1895859444807910E+01, 0.7711806645770664E-02, 0.5683514322519618E-02, 0.1397226979745296E+01, 0.1707938528340212E+01, 0.3163950825942626E+00, 0.1473962616612956E+00, 0.7956626637825215E+00, 0.6722612990066530E+00, 0.2399491656225486E-01, 0.1893485515094503E-01, 0.5304944606600845E+00, 0.5474205335300870E+00, 0.3586094769777509E-01, 0.3830193935796279E-01, 0.5846824867897703E+00, 0.5577379417840483E+00, 0.1135741402906866E-01, 0.1220274725600271E-01, 0.5992504210249349E+00, 0.6348181488942451E+00, 0.4777049480214081E-01, 0.2200990500366971E-01, 0.2924878046509502E+00, 0.2797904014149808E+00, 0.9312521444528056E-02, 0.8551968095484232E-02, 0.2569399276636945E+00, 0.2483880376917308E+00, 0.9780034825247492E-07, 0.7747561140265878E-14, 0.1967683697362142E-07, 0.1503295986001297E-14, 0.1995470932711637E-13, 0.7981257539768321E-14, 0.4143051093784424E+00}, + i0: 1, + n0: 14, + pp: 1, + tau: 1.5032959860012393E-015, + sigma: 0.51861980531617058, + i0Out: 1, + n0Out: 14, + ppOut: 1, + tauOut: 1.5032959860012393E-015, + sigmaOut: 0.51861980531617058, + dminOut: 9.2691156363468887E-030, + dmin1Out: 0.24076768543540897, + dmin2Out: 0.27020241256687788, + dnOut: 9.2691156363468887E-030, + dnm1Out: 0.24076768543540897, + dnm2Out: 0.27020241256687788, + }, + { + z: []float64{0.1962357708185669E+01, 0.1962357708185662E+01, 0.3452895805257589E-14, 0.7981257539768321E-14, 0.9279031656538340E+00, 0.8489660514332782E+00, 0.8409527066820451E-01, 0.7893711422056097E-01, 0.9381695469594078E+00, 0.9885371240138099E+00, 0.5431587122209677E-01, 0.3372769361380378E-01, 0.1466670076091998E+01, 0.1510850308373431E+01, 0.9192115573380727E-02, 0.1013563894066502E-01, 0.1332937092278178E+01, 0.1330138230690781E+01, 0.1705497388769041E-01, 0.1199097716077874E-01, 0.1884487985242738E+01, 0.1895859444807910E+01, 0.5151050664063701E-02, 0.5683514322519618E-02, 0.1850183739337442E+01, 0.1707938528340212E+01, 0.5355619565040129E-01, 0.1473962616612956E+00, 0.6376399585071952E+00, 0.6722612990066530E+00, 0.1625577000116482E-01, 0.1893485515094503E-01, 0.5694667028868834E+00, 0.5474205335300870E+00, 0.3751307094084999E-01, 0.3830193935796279E-01, 0.5324276180991995E+00, 0.5577379417840483E+00, 0.1454944326918194E-01, 0.1220274725600271E-01, 0.6422786106287314E+00, 0.6348181488942451E+00, 0.9587988848101409E-02, 0.2200990500366971E-01, 0.2787543806623621E+00, 0.2797904014149808E+00, 0.7620352256320365E-02, 0.8551968095484232E-02, 0.2407676854354167E+00, 0.2483880376917308E+00, 0.4837392336267432E-28, 0.7747561140265878E-14}, + i0: 1, + n0: 13, + pp: 0, + tau: 0.19361025134591583, + sigma: 0.51861980531617213, + i0Out: 1, + n0Out: 13, + ppOut: 0, + tauOut: 0.19361025134591583, + sigmaOut: 0.51861980531617213, + dminOut: 2.5949209826162500E-002, + dmin1Out: 7.8890170839591350E-002, + dmin2Out: 0.28791033268116917, + dnOut: 2.5949209826162500E-002, + dnm1Out: 7.8890170839591350E-002, + dnm2Out: 0.41777236268627749, + }, + { + z: []float64{0.1962357708185669E+01, 0.1768747456839757E+01, 0.3452895805257589E-14, 0.1811424766142649E-14, 0.9279031656538340E+00, 0.8183881849761209E+00, 0.8409527066820451E-01, 0.9640366690596863E-01, 0.9381695469594078E+00, 0.7024714999296202E+00, 0.5431587122209677E-01, 0.1134045480653624E+00, 0.1466670076091998E+01, 0.1168847392254101E+01, 0.9192115573380727E-02, 0.1048255904531585E-01, 0.1332937092278178E+01, 0.1145899255774637E+01, 0.1705497388769041E-01, 0.2804774784346500E-01, 0.1884487985242738E+01, 0.1667981036717421E+01, 0.5151050664063701E-02, 0.5713728135608638E-02, 0.1850183739337442E+01, 0.1704415955506319E+01, 0.5355619565040129E-01, 0.2003593680404179E-01, 0.6376399585071952E+00, 0.4402495403584025E+00, 0.1625577000116482E-01, 0.2102698332839761E-01, 0.5694667028868834E+00, 0.3923425391534199E+00, 0.3751307094084999E-01, 0.5090703407211448E-01, 0.5324276180991995E+00, 0.3024597759503511E+00, 0.1454944326918194E-01, 0.3089599659653809E-01, 0.6422786106287314E+00, 0.4273603515343789E+00, 0.9587988848101409E-02, 0.6253958476854957E-02, 0.2787543806623621E+00, 0.8651052309591171E-01, 0.7620352256320365E-02, 0.2120822426333837E-01, 0.2407676854354167E+00, 0.2594920982616250E-01, 0.4837392336267432E-28, 0.1811424766142649E-14, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + tau: 1.8780556192507153E-002, + sigma: 0.71223005666208794, + i0Out: 1, + n0Out: 13, + ppOut: 1, + tauOut: 1.8780556192507153E-002, + sigmaOut: 0.71223005666208794, + dminOut: 8.7653100724300811E-004, + dmin1Out: 6.6256164803006098E-002, + dmin2Out: 0.24571773655185866, + dnOut: 8.7653100724300811E-004, + dnm1Out: 6.6256164803006098E-002, + dnm2Out: 0.36084635920253871, + }, + { + z: []float64{0.1749966900647251E+01, 0.1768747456839757E+01, 0.8471295234418270E-15, 0.1811424766142649E-14, 0.8960112956895816E+00, 0.8183881849761209E+00, 0.7558032897122403E-01, 0.9640366690596863E-01, 0.7215151628312513E+00, 0.7024714999296202E+00, 0.1837142406762631E+00, 0.1134045480653624E+00, 0.9768351544306461E+00, 0.1168847392254101E+01, 0.1229681032071614E-01, 0.1048255904531585E-01, 0.1142869637104878E+01, 0.1145899255774637E+01, 0.4093477506677201E-01, 0.2804774784346500E-01, 0.1613979433593750E+01, 0.1667981036717421E+01, 0.6033886923870183E-02, 0.5713728135608638E-02, 0.1699637449193983E+01, 0.1704415955506319E+01, 0.5189819730562233E-02, 0.2003593680404179E-01, 0.4373061477637308E+00, 0.4402495403584025E+00, 0.1886499897608887E-01, 0.2102698332839761E-01, 0.4056040180569384E+00, 0.3923425391534199E+00, 0.3796148320598534E-01, 0.5090703407211448E-01, 0.2766137331483968E+00, 0.3024597759503511E+00, 0.4773343613933298E-01, 0.3089599659653809E-01, 0.3671003176793937E+00, 0.4273603515343789E+00, 0.1473802100398464E-02, 0.6253958476854957E-02, 0.8746438906634448E-01, 0.8651052309591171E-01, 0.6292122626412339E-02, 0.2120822426333837E-01, 0.8765310072430081E-03, 0.2594920982616250E-01, 0.8471295234418270E-15, 0.1811424766142649E-14}, + i0: 1, + n0: 13, + pp: 0, + tau: 8.1622622999092049E-004, + sigma: 0.73101061285459512, + i0Out: 1, + n0Out: 13, + ppOut: 0, + tauOut: 8.1622622999092049E-004, + sigmaOut: 0.73101061285459512, + dminOut: 6.9556311345050133E-007, + dmin1Out: 8.6231166987816729E-002, + dmin2Out: 0.25114202935985525, + dnOut: 6.9556311345050133E-007, + dnm1Out: 8.6231166987816729E-002, + dnm2Out: 0.30765445605457048, + }, + { + z: []float64{0.1749966900647251E+01, 0.1749150674417261E+01, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.8960112956895816E+00, 0.9707753984308143E+00, 0.7558032897122403E-01, 0.5617401661873561E-01, 0.7215151628312513E+00, 0.8482391606587878E+00, 0.1837142406762631E+00, 0.2115659556707206E+00, 0.9768351544306461E+00, 0.7767497828506508E+00, 0.1229681032071614E-01, 0.1809289356632693E-01, 0.1142869637104878E+01, 0.1164895292375332E+01, 0.4093477506677201E-01, 0.5671572845129930E-01, 0.1613979433593750E+01, 0.1562481365836330E+01, 0.6033886923870183E-02, 0.6563547191183529E-02, 0.1699637449193983E+01, 0.1697447495503371E+01, 0.5189819730562233E-02, 0.1337031089310571E-02, 0.4373061477637308E+00, 0.4540178894205181E+00, 0.1886499897608887E-01, 0.1685334336738995E-01, 0.4056040180569384E+00, 0.4258959316655428E+00, 0.3796148320598534E-01, 0.2465547755855056E-01, 0.2766137331483968E+00, 0.2988754654991882E+00, 0.4773343613933298E-01, 0.5862963539483231E-01, 0.3671003176793937E+00, 0.3091282581549689E+00, 0.1473802100398464E-02, 0.4169958485368410E-03, 0.8746438906634448E-01, 0.9252328961422907E-01, 0.6292122626412339E-02, 0.5960921413863723E-04, 0.8765310072430081E-03, 0.6955631134505013E-06, 0.8471295234418270E-15, 0.4339463906783712E-15, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + tau: 6.9511331676175615E-007, + sigma: 0.73182683908458601, + i0Out: 1, + n0Out: 13, + ppOut: 1, + tauOut: 6.9511331676175615E-007, + sigmaOut: 0.73182683908458601, + dminOut: 1.2278907249223888E-012, + dmin1Out: 9.2372077429255559E-002, + dmin2Out: 0.25591158693238830, + dnOut: 1.2278907249223888E-012, + dnm1Out: 9.2372077429255559E-002, + dnm2Out: 0.25591158693238830, + }, + { + z: []float64{0.1749149979303945E+01, 0.1749150674417261E+01, 0.2408395422307052E-15, 0.4339463906783712E-15, 0.1026948719936233E+01, 0.9707753984308143E+00, 0.4639861736277134E-01, 0.5617401661873561E-01, 0.1013405803853420E+01, 0.8482391606587878E+00, 0.1621599259654447E+00, 0.2115659556707206E+00, 0.6326820553382161E+00, 0.7767497828506508E+00, 0.3331266686486833E-01, 0.1809289356632693E-01, 0.1188297658848447E+01, 0.1164895292375332E+01, 0.7457497555020480E-01, 0.5671572845129930E-01, 0.1494469242363992E+01, 0.1562481365836330E+01, 0.7455005714048079E-02, 0.6563547191183529E-02, 0.1691328825765317E+01, 0.1697447495503371E+01, 0.3589107121045615E-03, 0.1337031089310571E-02, 0.4705116269624868E+00, 0.4540178894205181E+00, 0.1525524548983380E-01, 0.1685334336738995E-01, 0.4352954686209429E+00, 0.4258959316655428E+00, 0.1692854133253905E-01, 0.2465547755855056E-01, 0.3405758644481647E+00, 0.2988754654991882E+00, 0.5321597610926388E-01, 0.5862963539483231E-01, 0.2563285827809251E+00, 0.3091282581549689E+00, 0.1505170716567330E-03, 0.4169958485368410E-03, 0.9243168664339420E-01, 0.9252328961422907E-01, 0.4485687980202113E-09, 0.5960921413863723E-04, 0.1227890724922389E-11, 0.6955631134505013E-06, 0.2408395422307052E-15, 0.4339463906783712E-15}, + i0: 1, + n0: 13, + pp: 0, + tau: 1.2278907189544363E-012, + sigma: 0.73182753419790281, + i0Out: 1, + n0Out: 13, + ppOut: 0, + tauOut: 1.2278907189544363E-012, + sigmaOut: 0.73182753419790281, + dminOut: 4.9598525010503808E-024, + dmin1Out: 9.2368632133320736E-002, + dmin2Out: 0.22049265431403467, + dnOut: 4.9598525010503808E-024, + dnm1Out: 9.2368632133320736E-002, + dnm2Out: 0.22049265431403467, + }, + { + z: []float64{0.1749149979303945E+01, 0.1749149979302717E+01, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.1026948719936233E+01, 0.1073347337297776E+01, 0.4639861736277134E-01, 0.4380746706334982E-01, 0.1013405803853420E+01, 0.1131758262754287E+01, 0.1621599259654447E+00, 0.9065158049178278E-01, 0.6326820553382161E+00, 0.5753431417100738E+00, 0.3331266686486833E-01, 0.6880305191066147E-01, 0.1188297658848447E+01, 0.1194069582486762E+01, 0.7457497555020480E-01, 0.9333627524262254E-01, 0.1494469242363992E+01, 0.1408587972834190E+01, 0.7455005714048079E-02, 0.8951422490882578E-02, 0.1691328825765317E+01, 0.1682736313985311E+01, 0.3589107121045615E-03, 0.1003553923945662E-03, 0.4705116269624868E+00, 0.4856665170586981E+00, 0.1525524548983380E-01, 0.1367304312976171E-01, 0.4352954686209429E+00, 0.4385509668224923E+00, 0.1692854133253905E-01, 0.1314659648329904E-01, 0.3405758644481647E+00, 0.3806452440729016E+00, 0.5321597610926388E-01, 0.3583592846566260E-01, 0.2563285827809251E+00, 0.2206431713856914E+00, 0.1505170716567330E-03, 0.6305450884558253E-04, 0.9243168664339420E-01, 0.9236863258188953E-01, 0.4485687980202113E-09, 0.5962992535266723E-20, 0.1227890724922389E-11, 0.4959852501050381E-23, 0.2408395422307052E-15, 0.1414000300319855E-15, 0.5186198053161721E+00}, + i0: 1, + n0: 13, + pp: 1, + tau: 4.9598525010503808E-024, + sigma: 0.73182753419913071, + i0Out: 1, + n0Out: 13, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 0.73182753419913071, + dminOut: 4.9598525010503808E-024, + dmin1Out: 9.2339683204333278E-002, + dmin2Out: 0.20112464802017624, + dnOut: 4.9598525010503808E-024, + dnm1Out: 9.2339683204333278E-002, + dnm2Out: 0.20112464802017624, + }, + { + z: []float64{0.1749149979302717E+01, 0.1749149979302717E+01, 0.8676862906242004E-16, 0.1414000300319855E-15, 0.1117154804361126E+01, 0.1073347337297776E+01, 0.4438011869593646E-01, 0.4380746706334982E-01, 0.1178029724550133E+01, 0.1131758262754287E+01, 0.4427372589519608E-01, 0.9065158049178278E-01, 0.5998724677255393E+00, 0.5753431417100738E+00, 0.1369551627869799E+00, 0.6880305191066147E-01, 0.1150450694942405E+01, 0.1194069582486762E+01, 0.1142789997988411E+00, 0.9333627524262254E-01, 0.1303260395526232E+01, 0.1408587972834190E+01, 0.1155784656615063E-01, 0.8951422490882578E-02, 0.1671278822811555E+01, 0.1682736313985311E+01, 0.2916285016424428E-04, 0.1003553923945662E-03, 0.4993103973382956E+00, 0.4856665170586981E+00, 0.1200921574220688E-01, 0.1367304312976171E-01, 0.4396883475635844E+00, 0.4385509668224923E+00, 0.1138121911768345E-01, 0.1314659648329904E-01, 0.4050999534208807E+00, 0.3806452440729016E+00, 0.1951852336551518E-01, 0.3583592846566260E-01, 0.2011877025290218E+00, 0.2206431713856914E+00, 0.2894937755625969E-04, 0.6305450884558253E-04, 0.9233968320433328E-01, 0.9236863258188953E-01, 0.3202909346606844E-42, 0.5962992535266723E-20}, + i0: 1, + n0: 12, + pp: 0, + tau: 9.2159326345418235E-002, + sigma: 0.73182753419913071, + i0Out: 1, + n0Out: 12, + ppOut: 0, + tauOut: 9.2159326345418235E-002, + sigmaOut: 0.73182753419913071, + dminOut: 1.5272797578758102E-004, + dmin1Out: 9.6724015270930774E-002, + dmin2Out: 0.29962742013672317, + dnOut: 1.5272797578758102E-004, + dnm1Out: 9.6724015270930774E-002, + dnm2Out: 0.29962742013672317, + }, + { + z: []float64{0.1749149979302717E+01, 0.1656990652957299E+01, 0.8676862906242004E-16, 0.5850002270797901E-16, 0.1117154804361126E+01, 0.1069375596711644E+01, 0.4438011869593646E-01, 0.4888936980013561E-01, 0.1178029724550133E+01, 0.1081254754299776E+01, 0.4427372589519608E-01, 0.2456274906772994E-01, 0.5998724677255393E+00, 0.6201055550993710E+00, 0.1369551627869799E+00, 0.2540860356894923E+00, 0.1150450694942405E+01, 0.9184843327063353E+00, 0.1142789997988411E+00, 0.1621533314992303E+00, 0.1303260395526232E+01, 0.1060505584247734E+01, 0.1155784656615063E-01, 0.1821431635083262E-01, 0.1671278822811555E+01, 0.1560934342965469E+01, 0.2916285016424428E-04, 0.9328588590960435E-05, 0.4993103973382956E+00, 0.4191509581464933E+00, 0.1200921574220688E-01, 0.1259763844648080E-01, 0.4396883475635844E+00, 0.3463126018893689E+00, 0.1138121911768345E-01, 0.1331320693873929E-01, 0.4050999534208807E+00, 0.3191459435022383E+00, 0.1951852336551518E-01, 0.1230436091267282E-01, 0.2011877025290218E+00, 0.9675296464848704E-01, 0.2894937755625969E-04, 0.2762888312745317E-04, 0.9233968320433328E-01, 0.1527279757875810E-03, 0.3202909346606844E-42, 0.5850002270797901E-16, 0.7318275341991307E+00}, + i0: 1, + n0: 12, + pp: 1, + tau: 1.5267965277267402E-004, + sigma: 0.82398686054454895, + i0Out: 1, + n0Out: 12, + ppOut: 1, + tauOut: 1.5267965277267402E-004, + sigmaOut: 0.82398686054454895, + dminOut: 2.8998364833248812E-009, + dmin1Out: 9.2869952038417761E-002, + dmin2Out: 0.30683160095299705, + dnOut: 2.8998364833248812E-009, + dnm1Out: 9.2869952038417761E-002, + dnm2Out: 0.30683160095299705, + }, + { + z: []float64{0.1656837973304527E+01, 0.1656990652957299E+01, 0.3775776370348287E-16, 0.5850002270797901E-16, 0.1118112286859007E+01, 0.1069375596711644E+01, 0.4727777715386321E-01, 0.4888936980013561E-01, 0.1058387046560870E+01, 0.1081254754299776E+01, 0.1439123541326830E-01, 0.2456274906772994E-01, 0.8596476757228223E+00, 0.6201055550993710E+00, 0.2714763844897646E+00, 0.2540860356894923E+00, 0.8090086000630283E+00, 0.9184843327063353E+00, 0.2125620340079330E+00, 0.1621533314992303E+00, 0.8660051869378607E+00, 0.1060505584247734E+01, 0.3283046378299830E-01, 0.1821431635083262E-01, 0.1527960528118289E+01, 0.1560934342965469E+01, 0.2559023465659061E-05, 0.9328588590960435E-05, 0.4315933579167358E+00, 0.4191509581464933E+00, 0.1010840613748274E-01, 0.1259763844648080E-01, 0.3493647230378528E+00, 0.3463126018893689E+00, 0.1216166289646864E-01, 0.1331320693873929E-01, 0.3191359618656699E+00, 0.3191459435022383E+00, 0.3730332957296599E-02, 0.1230436091267282E-01, 0.9289758092154521E-01, 0.9675296464848704E-01, 0.4542317842367971E-07, 0.2762888312745317E-04, 0.2899836483324881E-08, 0.1527279757875810E-03, 0.3775776370348287E-16, 0.5850002270797901E-16}, + i0: 1, + n0: 12, + pp: 0, + tau: 2.8998350258011044E-009, + sigma: 0.82413954019732161, + i0Out: 1, + n0Out: 12, + ppOut: 0, + tauOut: 2.8998350258011044E-009, + sigmaOut: 0.82413954019732161, + dminOut: 2.2456987483859239E-017, + dmin1Out: 9.1786476970678488E-002, + dmin2Out: 0.30815750788579249, + dnOut: 2.2456987483859239E-017, + dnm1Out: 9.1786476970678488E-002, + dnm2Out: 0.30815750788579249, + }, + { + z: []float64{0.1656837973304527E+01, 0.1656837970404692E+01, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.1118112286859007E+01, 0.1165390061113035E+01, 0.4727777715386321E-01, 0.4293685745187325E-01, 0.1058387046560870E+01, 0.1029841421622430E+01, 0.1439123541326830E-01, 0.1201290976848257E-01, 0.8596476757228223E+00, 0.1119111147544269E+01, 0.2714763844897646E+00, 0.1962510428460807E+00, 0.8090086000630283E+00, 0.8253195883250457E+00, 0.2125620340079330E+00, 0.2230406579474441E+00, 0.8660051869378607E+00, 0.6757949898735797E+00, 0.3283046378299830E-01, 0.7422909836846008E-01, 0.1527960528118289E+01, 0.1453733985873459E+01, 0.2559023465659061E-05, 0.7597383986781573E-06, 0.4315933579167358E+00, 0.4417010014159849E+00, 0.1010840613748274E-01, 0.7995273950601426E-02, 0.3493647230378528E+00, 0.3535311090838850E+00, 0.1216166289646864E-01, 0.1097845108004235E-01, 0.3191359618656699E+00, 0.3118878408430891E+00, 0.3730332957296599E-02, 0.1111101051031713E-02, 0.9289758092154521E-01, 0.9178652239385691E-01, 0.4542317842367971E-07, 0.1435066789177947E-14, 0.2899836483324881E-08, 0.2245698748385924E-16, 0.3775776370348287E-16, 0.2548071704976161E-16, 0.7318275341991307E+00}, + i0: 1, + n0: 12, + pp: 1, + tau: 2.2456987483858885E-017, + sigma: 0.82413954309715665, + i0Out: 1, + n0Out: 12, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 0.82413954309715665, + dminOut: 2.2456987483858888E-017, + dmin1Out: 9.1450429866798411E-002, + dmin2Out: 0.30232944966555197, + dnOut: 2.2456987483858888E-017, + dnm1Out: 9.1450429866798411E-002, + dnm2Out: 0.30232944966555197, + }, + { + z: []float64{0.1656837970404692E+01, 0.1656837970404692E+01, 0.1792267857826344E-16, 0.2548071704976161E-16, 0.1208326918564908E+01, 0.1165390061113035E+01, 0.3659452888027460E-01, 0.4293685745187325E-01, 0.1005259802510638E+01, 0.1029841421622430E+01, 0.1337343958524596E-01, 0.1201290976848257E-01, 0.1301988750805104E+01, 0.1119111147544269E+01, 0.1244018658302015E+00, 0.1962510428460807E+00, 0.9239583804422884E+00, 0.8253195883250457E+00, 0.1631347930486186E+00, 0.2230406579474441E+00, 0.5868892951934211E+00, 0.6757949898735797E+00, 0.1838666404767374E+00, 0.7422909836846008E-01, 0.1269868105135121E+01, 0.1453733985873459E+01, 0.2642614694812039E-06, 0.7597383986781573E-06, 0.4496960111051168E+00, 0.4417010014159849E+00, 0.6285530663790794E-02, 0.7995273950601426E-02, 0.3582240295001366E+00, 0.3535311090838850E+00, 0.9558391177537082E-02, 0.1097845108004235E-01, 0.3034405507165837E+00, 0.3118878408430891E+00, 0.3360925270585024E-03, 0.1111101051031713E-02, 0.9145042986679984E-01, 0.9178652239385691E-01, 0.3524015903480299E-30, 0.1435066789177947E-14}, + i0: 1, + n0: 11, + pp: 0, + tau: 9.1173077708044642E-002, + sigma: 0.82413954309715665, + i0Out: 1, + n0Out: 11, + ppOut: 0, + tauOut: 9.1173077708044642E-002, + sigmaOut: 0.82413954309715665, + dminOut: 1.2510327751137640E-004, + dmin1Out: 0.20154260650453434, + dmin2Out: 0.26087886618071221, + dnOut: 1.2510327751137640E-004, + dnm1Out: 0.20154260650453434, + dnm2Out: 0.26087886618071221, + }, + { + z: []float64{0.1656837970404692E+01, 0.1565664892696647E+01, 0.1792267857826344E-16, 0.1383211380667930E-16, 0.1208326918564908E+01, 0.1153748369737138E+01, 0.3659452888027460E-01, 0.3188477647299814E-01, 0.1005259802510638E+01, 0.8955753879148407E+00, 0.1337343958524596E-01, 0.1944232516271161E-01, 0.1301988750805104E+01, 0.1315775213764550E+01, 0.1244018658302015E+00, 0.8735697805677015E-01, 0.9239583804422884E+00, 0.9085631177260922E+00, 0.1631347930486186E+00, 0.1053774491236745E+00, 0.5868892951934211E+00, 0.5742054088384394E+00, 0.1838666404767374E+00, 0.4066251880351924E+00, 0.1269868105135121E+01, 0.7720701036533529E+00, 0.2642614694812039E-06, 0.1539203864417861E-06, 0.4496960111051168E+00, 0.3648083101404764E+00, 0.6285530663790794E-02, 0.6172085611379779E-02, 0.3582240295001366E+00, 0.2704372573582493E+00, 0.9558391177537082E-02, 0.1072486650400470E-01, 0.3034405507165837E+00, 0.2018786990315928E+00, 0.3360925270585024E-03, 0.1522488812438262E-03, 0.9145042986679984E-01, 0.1251032775113764E-03, 0.3524015903480299E-30, 0.1383211380667930E-16, 0.8241395430971566E+00}, + i0: 1, + n0: 11, + pp: 1, + tau: 1.2498058228587147E-004, + sigma: 0.91531262080520126, + i0Out: 1, + n0Out: 11, + ppOut: 1, + tauOut: 1.2498058228587147E-004, + sigmaOut: 0.91531262080520126, + dminOut: 2.4554386425680716E-008, + dmin1Out: 0.19392428663386141, + dmin2Out: 0.26581143244488259, + dnOut: 2.4554386425680716E-008, + dnm1Out: 0.19392428663386141, + dnm2Out: 0.26581143244488259, + }, + { + z: []float64{0.1565539912114361E+01, 0.1565664892696647E+01, 0.1019378594629470E-16, 0.1383211380667930E-16, 0.1185508165627851E+01, 0.1153748369737138E+01, 0.2408690373149840E-01, 0.3188477647299814E-01, 0.8908058287637680E+00, 0.8955753879148407E+00, 0.2871751477260568E-01, 0.1944232516271161E-01, 0.1374289696466428E+01, 0.1315775213764550E+01, 0.5775298217141787E-01, 0.8735697805677015E-01, 0.9560626040960629E+00, 0.9085631177260922E+00, 0.6328905763825028E-01, 0.1053774491236745E+00, 0.9174165586530958E+00, 0.5742054088384394E+00, 0.3422034931823232E+00, 0.4066251880351924E+00, 0.4297417838091302E+00, 0.7720701036533529E+00, 0.1306631986684747E-06, 0.1539203864417861E-06, 0.3708552845063717E+00, 0.3648083101404764E+00, 0.4500844331080801E-02, 0.6172085611379779E-02, 0.2765362989488873E+00, 0.2704372573582493E+00, 0.7829431815445537E-02, 0.1072486650400470E-01, 0.1940765355151052E+00, 0.2018786990315928E+00, 0.9814083907923291E-07, 0.1522488812438262E-03, 0.2455438642568072E-07, 0.1251032775113764E-03, 0.1019378594629470E-16, 0.1383211380667930E-16}, + i0: 1, + n0: 11, + pp: 0, + tau: 2.4554370888251911E-008, + sigma: 0.91543760138748709, + i0Out: 1, + n0Out: 11, + ppOut: 0, + tauOut: 2.4554370888251911E-008, + sigmaOut: 0.91543760138748709, + dminOut: 2.7649302792337775E-015, + dmin1Out: 0.18866996369915248, + dmin2Out: 0.27322036360404983, + dnOut: 2.7649302792337775E-015, + dnm1Out: 0.18866996369915248, + dnm2Out: 0.27322036360404983, + }, + { + z: []float64{0.1565539912114361E+01, 0.1565539887559990E+01, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.1185508165627851E+01, 0.1209595044804978E+01, 0.2408690373149840E-01, 0.1773879145177052E-01, 0.8908058287637680E+00, 0.9017845275302323E+00, 0.2871751477260568E-01, 0.4376453959373496E-01, 0.1374289696466428E+01, 0.1388278114489740E+01, 0.5775298217141787E-01, 0.3977262621431848E-01, 0.9560626040960629E+00, 0.9795790109656241E+00, 0.6328905763825028E-01, 0.5927283946360358E-01, 0.9174165586530958E+00, 0.1200347187817445E+01, 0.3422034931823232E+00, 0.1225138368952072E+00, 0.4297417838091302E+00, 0.3072280530227507E+00, 0.1306631986684747E-06, 0.1577236754259593E-06, 0.3708552845063717E+00, 0.3753559465594062E+00, 0.4500844331080801E-02, 0.3315910790466669E-02, 0.2765362989488873E+00, 0.2810497954194954E+00, 0.7829431815445537E-02, 0.5406547261581845E-02, 0.1940765355151052E+00, 0.1886700618399915E+00, 0.9814083907923291E-07, 0.1277249852674422E-13, 0.2455438642568072E-07, 0.2764930279233778E-14, 0.1019378594629470E-16, 0.7719264500395369E-17, 0.8241395430971566E+00}, + i0: 1, + n0: 11, + pp: 1, + tau: 2.7649302792335523E-015, + sigma: 0.91543762594185796, + i0Out: 1, + n0Out: 11, + ppOut: 1, + tauOut: 2.7649302792335523E-015, + sigmaOut: 0.91543762594185796, + dminOut: 3.4709879829724519E-029, + dmin1Out: 0.18507826404867261, + dmin2Out: 0.27717487004787600, + dnOut: 3.4709879829724519E-029, + dnm1Out: 0.18507826404867261, + dnm2Out: 0.27858872904535659, + }, + { + z: []float64{0.1565539887559988E+01, 0.1565539887559990E+01, 0.5964194309842799E-17, 0.7719264500395369E-17, 0.1227333836256746E+01, 0.1209595044804978E+01, 0.1303359134714337E-01, 0.1773879145177052E-01, 0.9325154757768211E+00, 0.9017845275302323E+00, 0.6515425651042277E-01, 0.4376453959373496E-01, 0.1362896484193633E+01, 0.1388278114489740E+01, 0.2858649229958118E-01, 0.3977262621431848E-01, 0.1010265358129644E+01, 0.9795790109656241E+00, 0.7042504782685149E-01, 0.5927283946360358E-01, 0.1252435976885798E+01, 0.1200347187817445E+01, 0.3005318297487194E-01, 0.1225138368952072E+00, 0.2771750277715515E+00, 0.3072280530227507E+00, 0.2135925446109612E-06, 0.1577236754259593E-06, 0.3786716437573254E+00, 0.3753559465594062E+00, 0.2461066374135985E-02, 0.3315910790466669E-02, 0.2839952763069384E+00, 0.2810497954194954E+00, 0.3591797791316158E-02, 0.5406547261581845E-02, 0.1850782640486854E+00, 0.1886700618399915E+00, 0.1908115364037247E-27, 0.1277249852674422E-13}, + i0: 1, + n0: 10, + pp: 0, + tau: 9.2539132024336307E-002, + sigma: 0.91543762594186073, + i0Out: 1, + n0Out: 10, + ppOut: 0, + tauOut: 9.2539132024336307E-002, + sigmaOut: 0.91543762594186073, + dminOut: 8.9088074504151571E-002, + dmin1Out: 0.17705256406949207, + dmin2Out: 0.17705256406949207, + dnOut: 8.9088074504151571E-002, + dnm1Out: 0.18903428744201686, + dnm2Out: 0.28613205491191551, + }, + { + z: []float64{0.1565539887559988E+01, 0.1473000755535651E+01, 0.5964194309842799E-17, 0.4969486576955697E-17, 0.1227333836256746E+01, 0.1147828295579553E+01, 0.1303359134714337E-01, 0.1058871408116432E-01, 0.9325154757768211E+00, 0.8945418861817434E+00, 0.6515425651042277E-01, 0.9926701980086396E-01, 0.1362896484193633E+01, 0.1199676824668014E+01, 0.2858649229958118E-01, 0.2407310226126826E-01, 0.1010265358129644E+01, 0.9640781716708908E+00, 0.7042504782685149E-01, 0.9148932748822959E-01, 0.1252435976885798E+01, 0.1098460700348104E+01, 0.3005318297487194E-01, 0.7583331677723075E-02, 0.2771750277715515E+00, 0.1770527776620367E+00, 0.2135925446109612E-06, 0.4568210735249311E-06, 0.3786716437573254E+00, 0.2885931212860515E+00, 0.2461066374135985E-02, 0.2421856840585221E-02, 0.2839952763069384E+00, 0.1926260852333330E+00, 0.3591797791316158E-02, 0.3451057520197492E-02, 0.1850782640486854E+00, 0.8908807450415157E-01, 0.1908115364037247E-27, 0.4969486576955697E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + tau: 7.5387921832037685E-002, + sigma: 1.0079767579661971, + i0Out: 1, + n0Out: 10, + ppOut: 1, + tauOut: 7.5387921832037685E-002, + sigmaOut: 1.0079767579661971, + dminOut: 1.1106216559126303E-002, + dmin1Out: 0.10021441433509834, + dmin2Out: 0.10021441433509834, + dnOut: 1.1106216559126303E-002, + dnm1Out: 0.11507463320059727, + dnm2Out: 0.21320388392650824, + }, + { + z: []float64{0.1397612833703614E+01, 0.1473000755535651E+01, 0.4081328655531061E-17, 0.4969486576955697E-17, 0.1083029087828680E+01, 0.1147828295579553E+01, 0.8745885380967966E-02, 0.1058871408116432E-01, 0.9096750987696016E+00, 0.8945418861817434E+00, 0.1309130515609722E+00, 0.9926701980086396E-01, 0.1017448953536272E+01, 0.1199676824668014E+01, 0.2281033592282574E-01, 0.2407310226126826E-01, 0.9573692414042568E+00, 0.9640781716708908E+00, 0.1049724875218357E+00, 0.9148932748822959E-01, 0.9256836226719531E+00, 0.1098460700348104E+01, 0.1450441494900679E-02, 0.7583331677723075E-02, 0.1002148711561719E+00, 0.1770527776620367E+00, 0.1315527505616969E-05, 0.4568210735249311E-06, 0.2156257407670935E+00, 0.2885931212860515E+00, 0.2163530200698068E-02, 0.2421856840585221E-02, 0.1185256907207948E+00, 0.1926260852333330E+00, 0.2593936112987583E-02, 0.3451057520197492E-02, 0.1110621655912630E-01, 0.8908807450415157E-01, 0.4081328655531061E-17, 0.4969486576955697E-17}, + i0: 1, + n0: 10, + pp: 0, + tau: 9.2006637361187298E-003, + sigma: 1.0833646797982348, + i0Out: 1, + n0Out: 10, + ppOut: 0, + tauOut: 9.2006637361187298E-003, + sigmaOut: 1.0833646797982348, + dminOut: 1.6452860548183366E-003, + dmin1Out: 9.0837695870445614E-002, + dmin2Out: 9.0837695870445614E-002, + dnOut: 1.6452860548183366E-003, + dnm1Out: 0.10809563217808144, + dnm2Out: 0.20642195434625446, + }, + { + z: []float64{0.1397612833703614E+01, 0.1388412169967495E+01, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.1083029087828680E+01, 0.1082574309473529E+01, 0.8745885380967966E-02, 0.7349069784991225E-02, 0.9096750987696016E+00, 0.1024038416809464E+01, 0.1309130515609722E+00, 0.1300706547025319E+00, 0.1017448953536272E+01, 0.9009879710204475E+00, 0.2281033592282574E-01, 0.2423774201322422E-01, 0.9573692414042568E+00, 0.1028903323176749E+01, 0.1049724875218357E+00, 0.9444163542020824E-01, 0.9256836226719531E+00, 0.8234917650105269E+00, 0.1450441494900679E-02, 0.1765115496075164E-03, 0.1002148711561719E+00, 0.9083901139795122E-01, 0.1315527505616969E-05, 0.3122684720284652E-05, 0.2156257407670935E+00, 0.2085854845469525E+00, 0.2163530200698068E-02, 0.1229394806594584E-02, 0.1185256907207948E+00, 0.1106895682910690E+00, 0.2593936112987583E-02, 0.2602667681892373E-03, 0.1110621655912630E-01, 0.1645286054818337E-02, 0.4081328655531061E-17, 0.3183635051997810E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + tau: 1.5594219393746818E-003, + sigma: 1.0925653435343534, + i0Out: 1, + n0Out: 10, + ppOut: 1, + tauOut: 1.5594219393746818E-003, + sigmaOut: 1.0925653435343534, + dminOut: 8.1926049685687600E-005, + dmin1Out: 8.9258234858565516E-002, + dmin2Out: 8.9258234858565516E-002, + dnOut: 8.1926049685687600E-005, + dnm1Out: 0.10847668953277810, + dnm2Out: 0.20701876553386761, + }, + { + z: []float64{0.1386852748028120E+01, 0.1388412169967495E+01, 0.2485138759635906E-17, 0.3183635051997810E-17, 0.1088363957319145E+01, 0.1082574309473529E+01, 0.6914717946174950E-02, 0.7349069784991225E-02, 0.1145634931626446E+01, 0.1024038416809464E+01, 0.1022944500333619E+00, 0.1300706547025319E+00, 0.8213718410609353E+00, 0.9009879710204475E+00, 0.3036175828902931E-01, 0.2423774201322422E-01, 0.1091423778368554E+01, 0.1028903323176749E+01, 0.7125729765473905E-01, 0.9444163542020824E-01, 0.7508515569660207E+00, 0.8234917650105269E+00, 0.2135460001102832E-04, 0.1765115496075164E-03, 0.8926135754328580E-01, 0.9083901139795122E-01, 0.7297073710223142E-05, 0.3122684720284652E-05, 0.2082481603404622E+00, 0.2085854845469525E+00, 0.6534568189162364E-03, 0.1229394806594584E-02, 0.1087369563009673E+00, 0.1106895682910690E+00, 0.3938065757966957E-05, 0.2602667681892373E-03, 0.8192604968568760E-04, 0.1645286054818337E-02, 0.2485138759635906E-17, 0.3183635051997810E-17}, + i0: 1, + n0: 10, + pp: 0, + tau: 8.1416944590412474E-005, + sigma: 1.0941247654737283, + i0Out: 1, + n0Out: 10, + ppOut: 0, + tauOut: 8.1416944590412474E-005, + sigmaOut: 1.0941247654737283, + dminOut: 5.0612658152462498E-007, + dmin1Out: 8.9177229293753768E-002, + dmin2Out: 8.9177229293753768E-002, + dnOut: 5.0612658152462498E-007, + dnm1Out: 0.10831524323681536, + dnm2Out: 0.20814970454128662, + }, + { + z: []float64{0.1386852748028120E+01, 0.1386771331083530E+01, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.1088363957319145E+01, 0.1095197258320730E+01, 0.6914717946174950E-02, 0.7233164949324962E-02, 0.1145634931626446E+01, 0.1240614799765893E+01, 0.1022944500333619E+00, 0.6772592167212049E-01, 0.8213718410609353E+00, 0.7839262607332537E+00, 0.3036175828902931E-01, 0.4227125255215914E-01, 0.1091423778368554E+01, 0.1120328406526543E+01, 0.7125729765473905E-01, 0.4775711530437247E-01, 0.7508515569660207E+00, 0.7030343793170689E+00, 0.2135460001102832E-04, 0.2711304941630149E-05, 0.8926135754328580E-01, 0.8918452636746399E-01, 0.7297073710223142E-05, 0.1703885458517271E-04, 0.2082481603404622E+00, 0.2088031613602029E+00, 0.6534568189162364E-03, 0.3402961195615630E-03, 0.1087369563009673E+00, 0.1083191813025733E+00, 0.3938065757966957E-05, 0.2978513750500819E-08, 0.8192604968568760E-04, 0.5061265815246250E-06, 0.2485138759635906E-17, 0.1950383162890474E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + tau: 5.0604049633765406E-007, + sigma: 1.0942061824183187, + i0Out: 1, + n0Out: 10, + ppOut: 1, + tauOut: 5.0604049633765406E-007, + sigmaOut: 1.0942061824183187, + dminOut: 8.6071246971392626E-011, + dmin1Out: 8.9183660885577137E-002, + dmin2Out: 8.9183660885577137E-002, + dnOut: 8.6071246971392626E-011, + dnm1Out: 0.10814239569959758, + dnm2Out: 0.20876277035564564, + }, + { + z: []float64{0.1386770825043033E+01, 0.1386771331083530E+01, 0.1540308069724697E-17, 0.1950383162890474E-17, 0.1102429917229558E+01, 0.1095197258320730E+01, 0.8139811288713328E-02, 0.7233164949324962E-02, 0.1300200404108803E+01, 0.1240614799765893E+01, 0.4083380405309871E-01, 0.6772592167212049E-01, 0.7853632031918177E+00, 0.7839262607332537E+00, 0.6030036143936175E-01, 0.4227125255215914E-01, 0.1107784654351057E+01, 0.1120328406526543E+01, 0.3030814137396716E-01, 0.4775711530437247E-01, 0.6727284432075471E+00, 0.7030343793170689E+00, 0.3594413905024206E-06, 0.2711304941630149E-05, 0.8920069974016231E-01, 0.8918452636746399E-01, 0.3988496406087022E-04, 0.1703885458517271E-04, 0.2091030664752072E+00, 0.2088031613602029E+00, 0.1762795624794033E-03, 0.3402961195615630E-03, 0.1081423986781113E+00, 0.1083191813025733E+00, 0.1393999949133917E-13, 0.2978513750500819E-08, 0.8607124697139263E-10, 0.5061265815246250E-06, 0.1540308069724697E-17, 0.1950383162890474E-17}, + i0: 1, + n0: 10, + pp: 0, + tau: 8.6071215292546838E-011, + sigma: 1.0942066884588149, + i0Out: 1, + n0Out: 10, + ppOut: 0, + tauOut: 8.6071215292546838E-011, + sigmaOut: 1.0942066884588149, + dminOut: 3.1678834699165494E-017, + dmin1Out: 8.9200650586607991E-002, + dmin2Out: 8.9200650586607991E-002, + dnOut: 3.1678834699165494E-017, + dnm1Out: 0.10805126770967630, + dnm2Out: 0.20900961033533805, + }, + { + z: []float64{0.1386770825043033E+01, 0.1386770824956962E+01, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.1102429917229558E+01, 0.1110569728432201E+01, 0.8139811288713328E-02, 0.9529690622753703E-02, 0.1300200404108803E+01, 0.1331504517453077E+01, 0.4083380405309871E-01, 0.2408506071837550E-01, 0.7853632031918177E+00, 0.8215785038267327E+00, 0.6030036143936175E-01, 0.8130667336500198E-01, 0.1107784654351057E+01, 0.1056786122273951E+01, 0.3030814137396716E-01, 0.1929354325655847E-01, 0.6727284432075471E+00, 0.6534352593063080E+00, 0.3594413905024206E-06, 0.4906748310831983E-07, 0.8920069974016231E-01, 0.8924053555066887E-01, 0.3988496406087022E-04, 0.9345605379795243E-04, 0.2091030664752072E+00, 0.2091858898978174E+00, 0.1762795624794033E-03, 0.9113088236382798E-04, 0.1081423986781113E+00, 0.1080512677096902E+00, 0.1393999949133917E-13, 0.1110429488179469E-22, 0.8607124697139263E-10, 0.3167883469916549E-16, 0.1540308069724697E-17, 0.1224486171222500E-17, 0.9154376259418607E+00}, + i0: 1, + n0: 10, + pp: 1, + tau: 3.1678834698836348E-017, + sigma: 1.0942066885448862, + i0Out: 1, + n0Out: 10, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 1.0942066885448862, + dminOut: 3.1678834699165494E-017, + dmin1Out: 8.9240528714785800E-002, + dmin2Out: 8.9240528714785800E-002, + dnOut: 3.1678834699165494E-017, + dnm1Out: 0.10800416691102718, + dnm2Out: 0.20896705170504334, + }, + { + z: []float64{0.1386770824956962E+01, 0.1386770824956962E+01, 0.9806070694382835E-18, 0.1224486171222500E-17, 0.1120099419054954E+01, 0.1110569728432201E+01, 0.1132830345080667E-01, 0.9529690622753703E-02, 0.1344261274720646E+01, 0.1331504517453077E+01, 0.1472018016266302E-01, 0.2408506071837550E-01, 0.8881649970290716E+00, 0.8215785038267327E+00, 0.9674301998819117E-01, 0.8130667336500198E-01, 0.9793366455423188E+00, 0.1056786122273951E+01, 0.1287308250760436E-01, 0.1929354325655847E-01, 0.6405622258661866E+00, 0.6534352593063080E+00, 0.6835883063177366E-08, 0.4906748310831983E-07, 0.8933398476858376E-01, 0.8924053555066887E-01, 0.2188381927740679E-03, 0.9345605379795243E-04, 0.2090581825874072E+00, 0.2091858898978174E+00, 0.4710079866305792E-04, 0.9113088236382798E-04, 0.1080041669110272E+00, 0.1080512677096902E+00, 0.3257014354834561E-38, 0.1110429488179469E-22}, + i0: 1, + n0: 9, + pp: 0, + tau: 2.2310132178696450E-002, + sigma: 1.0942066885448862, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 2.2310132178696450E-002, + sigmaOut: 1.0942066885448862, + dminOut: 6.7023851586769906E-002, + dmin1Out: 6.7023851586769906E-002, + dmin2Out: 6.7023851586769906E-002, + dnOut: 8.5666701693601133E-002, + dnm1Out: 0.18606768031923254, + dnm2Out: 6.7023851586769906E-002, + }, + { + z: []float64{0.1386770824956962E+01, 0.1364460692778266E+01, 0.9806070694382835E-18, 0.8049901434408684E-18, 0.1120099419054954E+01, 0.1109117590327065E+01, 0.1132830345080667E-01, 0.1373001363427395E-01, 0.1344261274720646E+01, 0.1322941309070339E+01, 0.1472018016266302E-01, 0.9882485852396858E-02, 0.8881649970290716E+00, 0.9527153989861693E+00, 0.9674301998819117E-01, 0.9944626147083412E-01, 0.9793366455423188E+00, 0.8704533344003925E+00, 0.1287308250760436E-01, 0.9473236598617136E-02, 0.6405622258661866E+00, 0.6087788639247561E+00, 0.6835883063177366E-08, 0.1003117403762534E-08, 0.8933398476858376E-01, 0.6724268977954398E-01, 0.2188381927740679E-03, 0.6803700894781421E-03, 0.2090581825874072E+00, 0.1861147811178956E+00, 0.4710079866305792E-04, 0.2733303872960605E-04, 0.1080041669110272E+00, 0.8566670169360113E-01, 0.3257014354834561E-38, 0.8049901434408684E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + tau: 6.4730147312741043E-002, + sigma: 1.1165168207235825, + i0Out: 1, + n0Out: 9, + ppOut: 1, + tauOut: 6.4730147312741043E-002, + sigmaOut: 1.1165168207235825, + dminOut: 2.5125423409859404E-003, + dmin1Out: 2.5125423409859404E-003, + dmin2Out: 2.5125423409859404E-003, + dnOut: 2.0907912921905053E-002, + dnm1Out: 8.1725879285544201E-002, + dnm2Out: 2.5125423409859404E-003, + }, + { + z: []float64{0.1299730545465525E+01, 0.1364460692778266E+01, 0.6869337119490330E-18, 0.8049901434408684E-18, 0.1058117456648598E+01, 0.1109117590327065E+01, 0.1716633828952343E-01, 0.1373001363427395E-01, 0.1250927309320471E+01, 0.1322941309070339E+01, 0.7526573591998700E-02, 0.9882485852396858E-02, 0.9799049395522637E+00, 0.9527153989861693E+00, 0.8833849733474472E-01, 0.9944626147083412E-01, 0.7268579263515238E+00, 0.8704533344003925E+00, 0.7934296380510910E-02, 0.9473236598617136E-02, 0.5361144212346215E+00, 0.6087788639247561E+00, 0.1258170079408221E-09, 0.1003117403762534E-08, 0.3192912430464083E-02, 0.6724268977954398E-01, 0.3965875451961033E-01, 0.6803700894781421E-03, 0.8175321232427381E-01, 0.1861147811178956E+00, 0.2864145895504550E-04, 0.2733303872960605E-04, 0.2090791292190505E-01, 0.8566670169360113E-01, 0.6869337119490330E-18, 0.8049901434408684E-18}, + i0: 1, + n0: 9, + pp: 0, + tau: 2.3478378904869292E-003, + sigma: 1.1812469680363236, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 2.3478378904869292E-003, + sigmaOut: 1.1812469680363236, + dminOut: -6.4213352031532861E-004, + dmin1Out: -6.4213352031532861E-004, + dmin2Out: 8.4507453921550072E-004, + dnOut: 1.9536180783236046E-002, + dnm1Out: -6.4213352031532861E-004, + dnm2Out: 8.4507453921550072E-004, + }, + { + z: []float64{0.1299730545465525E+01, 0.1297382707575038E+01, 0.6869337119490330E-18, 0.5602483738451179E-18, 0.1058117456648598E+01, 0.1072935957047634E+01, 0.1716633828952343E-01, 0.2001409424891253E-01, 0.1250927309320471E+01, 0.1236091950773070E+01, 0.7526573591998700E-02, 0.5966648869520194E-02, 0.9799049395522637E+00, 0.1059928950127001E+01, 0.8833849733474472E-01, 0.6057909540261972E-01, 0.7268579263515238E+00, 0.6718652894389281E+00, 0.7934296380510910E-02, 0.6331166051893822E-02, 0.5361144212346215E+00, 0.5274354174180577E+00, 0.1258170079408221E-09, 0.7616528495272331E-12, 0.3192912430464083E-02, 0.4050382905882583E-01, 0.3965875451961033E-01, 0.8004750795410222E-01, 0.8175321232427381E-01, -0.6134920613602832E-03, 0.2864145895504550E-04, -0.9761057518179271E-03, 0.2090791292190505E-01, 0.1953618078323605E-01, 0.6869337119490330E-18, 0.5602483738451179E-18}, + i0: 1, + n0: 9, + pp: 0, + tau: 5.8695947262173229E-004, + sigma: 1.1812469680363236, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 5.8695947262173229E-004, + sigmaOut: 1.1812469680363236, + dminOut: 2.6059529570832572E-003, + dmin1Out: 2.6059529570832572E-003, + dmin2Out: 2.6059529570832572E-003, + dnOut: 2.0187357299561493E-002, + dnm1Out: 4.4537716273149721E-003, + dnm2Out: 2.6059529570832572E-003, + }, + { + z: []float64{0.1299730545465525E+01, 0.1299143585992903E+01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1058117456648598E+01, 0.1074696835465499E+01, 0.1716633828952343E-01, 0.1998130138542489E-01, 0.1250927309320471E+01, 0.1237885622054423E+01, 0.7526573591998700E-02, 0.5958003315736791E-02, 0.9799049395522637E+00, 0.1061698474098650E+01, 0.8833849733474472E-01, 0.6047812873071532E-01, 0.7268579263515238E+00, 0.6737271345286977E+00, 0.7934296380510910E-02, 0.6313669873066943E-02, 0.5361144212346215E+00, 0.5292137920147498E+00, 0.1258170079408221E-09, 0.7590933847144573E-12, 0.3192912430464083E-02, 0.4226470747669359E-01, 0.3965875451961033E-01, 0.7671248122433710E-01, 0.8175321232427381E-01, 0.4482413086270017E-02, 0.2864145895504550E-04, 0.1335961497218277E-03, 0.2090791292190505E-01, 0.2018735729956149E-01, 0.6869337119490330E-18, 0.5594890049187079E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + tau: 4.9324499328963489E-004, + sigma: 1.1818339275089453, + i0Out: 1, + n0Out: 9, + ppOut: 1, + tauOut: 4.9324499328963489E-004, + sigmaOut: 1.1818339275089453, + dminOut: 1.0870277779300500E-003, + dmin1Out: 1.0870277779300500E-003, + dmin2Out: 4.1771462483342674E-002, + dnOut: 1.7484624889890960E-002, + dnm1Out: 1.0870277779300500E-003, + dnm2Out: 4.1771462483342674E-002, + }, + { + z: []float64{0.1298650340999613E+01, 0.1299143585992903E+01, 0.4630045856693428E-18, 0.5594890049187079E-18, 0.1094184891857634E+01, 0.1074696835465499E+01, 0.2260547177996662E-01, 0.1998130138542489E-01, 0.1220744908596903E+01, 0.1237885622054423E+01, 0.5181756634367578E-02, 0.5958003315736791E-02, 0.1116501601201708E+01, 0.1061698474098650E+01, 0.3649413160495897E-01, 0.6047812873071532E-01, 0.6430534278035160E+00, 0.6737271345286977E+00, 0.5195962000339362E-02, 0.6313669873066943E-02, 0.5235245850218799E+00, 0.5292137920147498E+00, 0.6128243213469890E-13, 0.7590933847144573E-12, 0.1184839437076798E+00, 0.4226470747669359E-01, 0.2902140315050332E-02, 0.7671248122433710E-01, 0.1220623927651878E-02, 0.4482413086270017E-02, 0.2209487416380896E-02, 0.1335961497218277E-03, 0.1748462488989096E-01, 0.2018735729956149E-01, 0.4630045856693428E-18, 0.5594890049187079E-18}, + i0: 1, + n0: 9, + pp: 0, + tau: 8.6238530354903250E-004, + sigma: 1.1823271725022351, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 8.6238530354903250E-004, + sigmaOut: 1.1823271725022351, + dminOut: 3.2884671240747138E-004, + dmin1Out: 3.2884671240747138E-004, + dmin2Out: 0.11762155840411674, + dnOut: 1.4027859154437344E-003, + dnm1Out: 3.2884671240747138E-004, + dnm2Out: 0.11762155840411674, + }, + { + z: []float64{0.1298650340999613E+01, 0.1297787955696064E+01, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094184891857634E+01, 0.1115927978334052E+01, 0.2260547177996662E-01, 0.2472875948770642E-01, 0.1220744908596903E+01, 0.1200335520440015E+01, 0.5181756634367578E-02, 0.4819852017032840E-02, 0.1116501601201708E+01, 0.1147313495486085E+01, 0.3649413160495897E-01, 0.2045445862496274E-01, 0.6430534278035160E+00, 0.6269325458753436E+00, 0.5195962000339362E-02, 0.4338925882718484E-02, 0.5235245850218799E+00, 0.5183232738356738E+00, 0.6128243213469890E-13, 0.1400860159256393E-13, 0.1184839437076798E+00, 0.1205236987191671E+00, 0.2902140315050332E-02, 0.2939191169537379E-04, 0.1220623927651878E-02, 0.2538334128788367E-02, 0.2209487416380896E-02, 0.1521945367089819E-01, 0.1748462488989096E-01, 0.1402785915443734E-02, 0.4630045856693428E-18, 0.3903662538064461E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + tau: 1.8442717265434725E-004, + sigma: 1.1831895578057841, + i0Out: 1, + n0Out: 9, + ppOut: 1, + tauOut: 1.8442717265434725E-004, + sigmaOut: 1.1831895578057841, + dminOut: 3.4295817345512611E-006, + dmin1Out: 2.3532871395603098E-003, + dmin2Out: 0.12033927154650945, + dnOut: 3.4295817345512611E-006, + dnm1Out: 2.3532871395603098E-003, + dnm2Out: 0.12033927154650945, + }, + { + z: []float64{0.1297603528523410E+01, 0.1297787955696064E+01, 0.3357116521683426E-18, 0.3903662538064461E-18, 0.1140472310649104E+01, 0.1115927978334052E+01, 0.2602676813137004E-01, 0.2472875948770642E-01, 0.1178944177153024E+01, 0.1200335520440015E+01, 0.4690536984322235E-02, 0.4819852017032840E-02, 0.1162892989954071E+01, 0.1147313495486085E+01, 0.1102729651913737E-01, 0.2045445862496274E-01, 0.6200597480662705E+00, 0.6269325458753436E+00, 0.3627015421456806E-02, 0.4338925882718484E-02, 0.5145118312415766E+00, 0.5183232738356738E+00, 0.3281495925457712E-14, 0.1400860159256393E-13, 0.1203686634582048E+00, 0.1205236987191671E+00, 0.6198165737098726E-06, 0.2939191169537379E-04, 0.1757274081045850E-01, 0.2538334128788367E-02, 0.1214929161054836E-02, 0.1521945367089819E-01, 0.3429581734551261E-05, 0.1402785915443734E-02, 0.3357116521683426E-18, 0.3903662538064461E-18}, + i0: 1, + n0: 9, + pp: 0, + tau: 3.2077610710809750E-006, + sigma: 1.1833739849784384, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 3.2077610710809750E-006, + sigmaOut: 1.1833739849784384, + dminOut: 3.3505760549073344E-012, + dmin1Out: 1.7569442559804263E-002, + dmin2Out: 0.12036545569713296, + dnOut: 3.3505760549073344E-012, + dnm1Out: 1.7569442559804263E-002, + dnm2Out: 0.12036545569713296, + }, + { + z: []float64{0.1297603528523410E+01, 0.1297600320762339E+01, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1140472310649104E+01, 0.1166495871019403E+01, 0.2602676813137004E-01, 0.2630451380147252E-01, 0.1178944177153024E+01, 0.1157326992574803E+01, 0.4690536984322235E-02, 0.4713095445958055E-02, 0.1162892989954071E+01, 0.1169203983266179E+01, 0.1102729651913737E-01, 0.5848066547299594E-02, 0.6200597480662705E+00, 0.6178354891793567E+00, 0.3627015421456806E-02, 0.3020451850239120E-02, 0.5145118312415766E+00, 0.5114881716302697E+00, 0.3281495925457712E-14, 0.7722354114894537E-15, 0.1203686634582048E+00, 0.1203660755137067E+00, 0.6198165737098726E-06, 0.9048958315991394E-07, 0.1757274081045850E-01, 0.1878437172085910E-01, 0.1214929161054836E-02, 0.2218173128942313E-06, 0.3429581734551261E-05, 0.3350576054907334E-11, 0.3357116521683426E-18, 0.2950599175525191E-18, 0.1094206688544886E+01}, + i0: 1, + n0: 9, + pp: 1, + tau: 3.3505364896797715E-012, + sigma: 1.1833771927395094, + i0Out: 1, + n0Out: 9, + ppOut: 1, + tauOut: 3.3505364896797715E-012, + sigmaOut: 1.1833771927395094, + dminOut: 2.0335799151090034E-023, + dmin1Out: 1.8784357595683275E-002, + dmin2Out: 0.12036607551035594, + dnOut: 2.0335799151090034E-023, + dnm1Out: 1.8784357595683275E-002, + dnm2Out: 0.12036607551035594, + }, + { + z: []float64{0.1297600320758988E+01, 0.1297600320762339E+01, 0.2652482201353177E-18, 0.2950599175525191E-18, 0.1192800384817525E+01, 0.1166495871019403E+01, 0.2552222839336001E-01, 0.2630451380147252E-01, 0.1136517859624050E+01, 0.1157326992574803E+01, 0.4848643531876122E-02, 0.4713095445958055E-02, 0.1170203406278252E+01, 0.1169203983266179E+01, 0.3087619670750762E-02, 0.5848066547299594E-02, 0.6177683213554945E+00, 0.6178354891793567E+00, 0.2500816796475141E-02, 0.3020451850239120E-02, 0.5089873548304448E+00, 0.5114881716302697E+00, 0.1826193617023393E-15, 0.7722354114894537E-15, 0.1203661659999391E+00, 0.1203660755137067E+00, 0.1412182528886294E-07, 0.9048958315991394E-07, 0.1878457941299617E-01, 0.1878437172085910E-01, 0.3956520722700361E-16, 0.2218173128942313E-06, 0.2033579915109003E-22, 0.3350576054907334E-11, 0.2652482201353177E-18, 0.2950599175525191E-18}, + i0: 1, + n0: 9, + pp: 0, + tau: 2.0335799151089990E-023, + sigma: 1.1833771927428600, + i0Out: 1, + n0Out: 9, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 1.1833771927428600, + dminOut: 2.0335799151089993E-023, + dmin1Out: 1.8784577209116738E-002, + dmin2Out: 0.12036616599993906, + dnOut: 2.0335799151089993E-023, + dnm1Out: 1.8784577209116738E-002, + dnm2Out: 0.12036616599993906, + }, + { + z: []float64{0.1297600320758988E+01, 0.1297600320758988E+01, 0.2652482201353177E-18, 0.2438256017573345E-18, 0.1192800384817525E+01, 0.1218322613210885E+01, 0.2552222839336001E-01, 0.2380852827644004E-01, 0.1136517859624050E+01, 0.1117557974879486E+01, 0.4848643531876122E-02, 0.5077051306839188E-02, 0.1170203406278252E+01, 0.1168213974642164E+01, 0.3087619670750762E-02, 0.1632777609571200E-02, 0.6177683213554945E+00, 0.6186363605423986E+00, 0.2500816796475141E-02, 0.2057564358223963E-02, 0.5089873548304448E+00, 0.5069297904722210E+00, 0.1826193617023393E-15, 0.4336141378669131E-16, 0.1203661659999391E+00, 0.1203661801217644E+00, 0.1412182528886294E-07, 0.2203879431304952E-08, 0.1878457941299617E-01, 0.1878457720911678E-01, 0.3956520722700361E-16, 0.4283248425464200E-37, 0.1183377192742860E+01}, + i0: 1, + n0: 8, + pp: 1, + tau: 1.8784576682472597E-002, + sigma: 1.1833771927428600, + i0Out: 1, + n0Out: 8, + ppOut: 1, + tauOut: 1.8784576682472597E-002, + sigmaOut: 1.1833771927428600, + dminOut: 1.1910047947871760E-010, + dmin1Out: 0.10158160343929173, + dmin2Out: 0.48640978493259379, + dnOut: 1.1910047947871760E-010, + dnm1Out: 0.10158160343929173, + dnm2Out: 0.48640978493259379, + }, + { + z: []float64{0.1278815744076516E+01, 0.1297600320758988E+01, 0.2322916695987584E-18, 0.2438256017573345E-18, 0.1223346564804853E+01, 0.1218322613210885E+01, 0.2174969171530204E-01, 0.2380852827644004E-01, 0.1082100757788551E+01, 0.1117557974879486E+01, 0.5481081353963683E-02, 0.5077051306839188E-02, 0.1145581094215299E+01, 0.1168213974642164E+01, 0.8817320773368219E-03, 0.1632777609571200E-02, 0.6010276161408131E+00, 0.6186363605423986E+00, 0.1735428857154564E-02, 0.2057564358223963E-02, 0.4864097849325938E+00, 0.5069297904722210E+00, 0.1073014545319338E-16, 0.4336141378669131E-16, 0.1015816056431712E+00, 0.1203661801217644E+00, 0.4075436992240071E-09, 0.2203879431304952E-08, 0.1191004794787176E-09, 0.1878457720911678E-01, 0.2322916695987584E-18, 0.2438256017573345E-18}, + i0: 1, + n0: 8, + pp: 0, + tau: 1.1910047900088848E-010, + sigma: 1.2021617694253326, + i0Out: 1, + n0Out: 8, + ppOut: 0, + tauOut: 1.1910047900088848E-010, + sigmaOut: 1.2021617694253326, + dminOut: 0.0000000000000000, + dmin1Out: 0.10158160552407068, + dmin2Out: 0.48500827096381138, + dnOut: 0.0000000000000000, + dnm1Out: 0.10158160552407068, + dnm2Out: 0.48500827096381138, + }, + { + z: []float64{0.1278815744076516E+01, 0.1278815743957415E+01, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1223346564804853E+01, 0.1245096256401054E+01, 0.2174969171530204E-01, 0.1890244048666934E-01, 0.1082100757788551E+01, 0.1068679398536745E+01, 0.5481081353963683E-02, 0.5875497537946494E-02, 0.1145581094215299E+01, 0.1140587328635589E+01, 0.8817320773368219E-03, 0.4646249482278370E-03, 0.6010276161408131E+00, 0.6022984199306394E+00, 0.1735428857154564E-02, 0.1401513849681988E-02, 0.4864097849325938E+00, 0.4850082709638114E+00, 0.1073014545319338E-16, 0.2247354260070927E-17, 0.1015816056431712E+00, 0.1015816059316144E+00, 0.4075436992240071E-09, 0.4778291260603437E-18, 0.1191004794787176E-09, 0.0000000000000000E+00, 0.2322916695987584E-18, 0.2222159192042978E-18, 0.1183377192742860E+01}, + i0: 1, + n0: 8, + pp: 1, + tau: -0.0000000000000000, + sigma: 1.2021617695444331, + i0Out: 1, + n0Out: 8, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 1.2021617695444331, + dminOut: 0.0000000000000000, + dmin1Out: 0.10158160593161437, + dmin2Out: 0.48388184445926297, + dnOut: 0.0000000000000000, + dnm1Out: 0.10158160593161437, + dnm2Out: 0.48388184445926297, + }, + { + z: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2222159192042978E-18, 0.1263998696887723E+01, 0.1245096256401054E+01, 0.1598154237018549E-01, 0.1890244048666934E-01, 0.1058573353704506E+01, 0.1068679398536745E+01, 0.6330707284251229E-02, 0.5875497537946494E-02, 0.1134721246299565E+01, 0.1140587328635589E+01, 0.2466181655543824E-03, 0.4646249482278370E-03, 0.6034533156147670E+00, 0.6022984199306394E+00, 0.1126426504548419E-02, 0.1401513849681988E-02, 0.4838818444592630E+00, 0.4850082709638114E+00, 0.4717884282068346E-18, 0.2247354260070927E-17, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.4778291260603437E-18}, + i0: 1, + n0: 7, + pp: 0, + tau: -0.0000000000000000, + sigma: 1.2021617695444331, + i0Out: 1, + n0Out: 7, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 1.2021617695444331, + dminOut: 0.10158160593161437, + dmin1Out: 0.48298010023310722, + dmin2Out: 0.60332139679048247, + dnOut: 0.10158160593161437, + dnm1Out: 0.48298010023310722, + dnm2Out: 0.60332139679048247, + }, + { + z: []float64{0.1278815743957415E+01, 0.1278815743957415E+01, 0.2163565864913247E-18, 0.2138497627045302E-18, 0.1263998696887723E+01, 0.1279980239257909E+01, 0.1598154237018549E-01, 0.1321710631563048E-01, 0.1058573353704506E+01, 0.1051686954673127E+01, 0.6330707284251229E-02, 0.6830538334266978E-02, 0.1134721246299565E+01, 0.1128137326130852E+01, 0.2466181655543824E-03, 0.1319188242844840E-03, 0.6034533156147670E+00, 0.6044478232950309E+00, 0.1126426504548419E-02, 0.9017442261557238E-03, 0.4838818444592630E+00, 0.4829801002331072E+00, 0.4717884282068346E-18, 0.9922774494036444E-19, 0.1015816059316144E+00, 0.1015816059316144E+00, 0.0000000000000000E+00, 0.2138497627045302E-18, 0.1202161769544433E+01}, + i0: 1, + n0: 7, + pp: 1, + tau: 0.10158160593161437, + sigma: 1.2021617695444331, + i0Out: 1, + n0Out: 7, + ppOut: 1, + tauOut: 0.10158160593161437, + sigmaOut: 1.2021617695444331, + dminOut: 0.0000000000000000, + dmin1Out: 0.38053382595775820, + dmin2Out: 0.50278793042091730, + dnOut: 0.0000000000000000, + dnm1Out: 0.38053382595775820, + dnm2Out: 0.50278793042091730, + }, + { + z: []float64{0.1177234138025801E+01, 0.1278815743957415E+01, 0.2325140442247288E-18, 0.2138497627045302E-18, 0.1191615739641925E+01, 0.1279980239257909E+01, 0.1166505092896250E-01, 0.1321710631563048E-01, 0.9452708361468171E+00, 0.1051686954673127E+01, 0.8151933771558135E-02, 0.6830538334266978E-02, 0.1018535705251965E+01, 0.1128137326130852E+01, 0.7828694249915420E-04, 0.1319188242844840E-03, 0.5036896746470730E+00, 0.6044478232950309E+00, 0.8646683437346259E-03, 0.9017442261557238E-03, 0.3805338259577582E+00, 0.4829801002331072E+00, 0.2648835135390502E-19, 0.9922774494036444E-19, 0.0000000000000000E+00, 0.1015816059316144E+00, 0.2325140442247288E-18, 0.2138497627045302E-18}, + i0: 1, + n0: 7, + pp: 0, + tau: -0.0000000000000000, + sigma: 1.3037433754760475, + i0Out: 1, + n0Out: 7, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 1.3037433754760475, + dminOut: 0.0000000000000000, + dmin1Out: 0.37988164443454930, + dmin2Out: 0.50365062581387521, + dnOut: 0.0000000000000000, + dnm1Out: 0.37988164443454930, + dnm2Out: 0.50365062581387521, + }, + { + z: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2325140442247288E-18, 0.2353545363971710E-18, 0.1191615739641925E+01, 0.1203280790570888E+01, 0.1166505092896250E-01, 0.9163806595868684E-02, 0.9452708361468171E+00, 0.9442589633225065E+00, 0.8151933771558135E-02, 0.8793176380307672E-02, 0.1018535705251965E+01, 0.1009820815814156E+01, 0.7828694249915420E-04, 0.3904883319791864E-04, 0.5036896746470730E+00, 0.5045152941576099E+00, 0.8646683437346259E-03, 0.6521815232088979E-03, 0.3805338259577582E+00, 0.3798816444345493E+00, 0.2648835135390502E-19, 0.0000000000000000E+00, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + tau: -0.0000000000000000, + sigma: 1.3037433754760475, + i0Out: 1, + n0Out: 6, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 1.3037433754760475, + dminOut: 0.37939119035907048, + dmin1Out: 0.50449560273072791, + dmin2Out: 0.93712213699945368, + dnOut: 0.37939119035907048, + dnm1Out: 0.50449560273072791, + dnm2Out: 1.0004335774214996, + }, + { + z: []float64{0.1177234138025801E+01, 0.1177234138025801E+01, 0.2405618249359890E-18, 0.2353545363971710E-18, 0.1212444597166756E+01, 0.1203280790570888E+01, 0.7136826323052847E-02, 0.9163806595868684E-02, 0.9459153133797613E+00, 0.9442589633225065E+00, 0.9387238392656353E-02, 0.8793176380307672E-02, 0.1000472626254697E+01, 0.1009820815814156E+01, 0.1969142688202247E-04, 0.3904883319791864E-04, 0.5051477842539368E+00, 0.5045152941576099E+00, 0.4904540754787929E-03, 0.6521815232088979E-03, 0.3793911903590705E+00, 0.3798816444345493E+00, 0.2405618249359890E-18, 0.2353545363971710E-18}, + i0: 1, + n0: 6, + pp: 0, + tau: 0.37791671367087804, + sigma: 1.3037433754760475, + i0Out: 1, + n0Out: 6, + ppOut: 0, + tauOut: 0.37791671367087804, + sigmaOut: 1.3037433754760475, + dminOut: 1.7417124602014944E-005, + dmin1Out: 0.12721465844156904, + dmin2Out: 0.55997778901175921, + dnOut: 1.7417124602014944E-005, + dnm1Out: 0.12721465844156904, + dnm2Out: 0.60606091447901145, + }, + { + z: []float64{0.1177234138025801E+01, 0.7993174243549228E+00, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1212444597166756E+01, 0.8416647098189309E+00, 0.7136826323052847E-02, 0.8020810697124018E-02, 0.9459153133797613E+00, 0.5693650274044155E+00, 0.9387238392656353E-02, 0.1649499810480807E-01, 0.1000472626254697E+01, 0.6060806059058935E+00, 0.1969142688202247E-04, 0.1641214148963635E-04, 0.5051477842539368E+00, 0.1277051125170478E+00, 0.4904540754787929E-03, 0.1457059563590431E-02, 0.3793911903590705E+00, 0.1741712460201494E-04, 0.2405618249359890E-18, 0.3648961927279404E-18, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + tau: 1.7220607103034587E-005, + sigma: 1.6816600891469256, + i0Out: 1, + n0Out: 6, + ppOut: 1, + tauOut: 1.7220607103034587E-005, + sigmaOut: 1.6816600891469256, + dminOut: 5.8496704963934779E-012, + dmin1Out: 0.12768433261716639, + dmin2Out: 0.56397303984076830, + dnOut: 5.8496704963934779E-012, + dnm1Out: 0.12768433261716639, + dnm2Out: 0.58884056200405466, + }, + { + z: []float64{0.7993002037478197E+00, 0.7993174243549228E+00, 0.3842364192156412E-18, 0.3648961927279404E-18, 0.8496682999089519E+00, 0.8416647098189309E+00, 0.5374766956544110E-02, 0.8020810697124018E-02, 0.5804680379455763E+00, 0.5693650274044155E+00, 0.1722282329473577E-01, 0.1649499810480807E-01, 0.5888569741455443E+00, 0.6060806059058935E+00, 0.3559292778388127E-05, 0.1641214148963635E-04, 0.1291413921807568E+00, 0.1277051125170478E+00, 0.1965116493098606E-06, 0.1457059563590431E-02, 0.5849670496393478E-11, 0.1741712460201494E-04, 0.3842364192156412E-18, 0.3648961927279404E-18}, + i0: 1, + n0: 6, + pp: 0, + tau: 5.8496615949827599E-012, + sigma: 1.6816773097540285, + i0Out: 1, + n0Out: 6, + ppOut: 0, + tauOut: 5.8496615949827599E-012, + sigmaOut: 1.6816773097540285, + dminOut: 5.2413685591311719E-023, + dmin1Out: 0.12914058828956335, + dmin2Out: 0.57178448001987381, + dnOut: 5.2413685591311719E-023, + dnm1Out: 0.12914058828956335, + dnm2Out: 0.57178448001987381, + }, + { + z: []float64{0.7993002037478197E+00, 0.7993002037419701E+00, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.8496682999089519E+00, 0.8550430668596465E+00, 0.5374766956544110E-02, 0.3648799166500929E-02, 0.5804680379455763E+00, 0.5940420620679615E+00, 0.1722282329473577E-01, 0.1707249411982080E-01, 0.5888569741455443E+00, 0.5717880393126522E+00, 0.3559292778388127E-05, 0.8038853438286423E-06, 0.1291413921807568E+00, 0.1291407848012127E+00, 0.1965116493098606E-06, 0.8901358303923820E-17, 0.5849670496393478E-11, 0.5241368559131172E-22, 0.3842364192156412E-18, 0.4084491703488284E-18, 0.1303743375476047E+01}, + i0: 1, + n0: 6, + pp: 1, + tau: 5.2413685591311714E-023, + sigma: 1.6816773097598783, + i0Out: 1, + n0Out: 6, + ppOut: 1, + tauOut: 0.0000000000000000, + sigmaOut: 1.6816773097598783, + dminOut: 5.2413685591311719E-023, + dmin1Out: 0.12914059800027977, + dmin2Out: 0.55574794205624078, + dnOut: 5.2413685591311719E-023, + dnm1Out: 0.12914059800027977, + dnm2Out: 0.55574794205624078, + }, + { + z: []float64{0.7993002037419701E+00, 0.7993002037419701E+00, 0.4369342452764876E-18, 0.4084491703488284E-18, 0.8586918660261474E+00, 0.8550430668596465E+00, 0.2524235138002424E-02, 0.3648799166500929E-02, 0.6085903210497798E+00, 0.5940420620679615E+00, 0.1604009725641142E-01, 0.1707249411982080E-01, 0.5557487459415846E+00, 0.5717880393126522E+00, 0.1868009328861996E-06, 0.8038853438286423E-06, 0.1291405980002798E+00, 0.1291407848012127E+00, 0.3612752323451872E-38, 0.8901358303923820E-17}, + i0: 1, + n0: 5, + pp: 0, + tau: 0.12914051019182277, + sigma: 1.6816773097598783, + i0Out: 1, + n0Out: 5, + ppOut: 0, + tauOut: 0.12914051019182277, + sigmaOut: 1.6816773097598783, + dminOut: 2.8760335918365243E-008, + dmin1Out: 0.40854091047624980, + dmin2Out: 0.47735135942481804, + dnOut: 2.8760335918365243E-008, + dnm1Out: 0.40854091047624980, + dnm2Out: 0.47735135942481804, + }, + { + z: []float64{0.7993002037419701E+00, 0.6701596935501473E+00, 0.4369342452764876E-18, 0.5598544436768911E-18, 0.8586918660261474E+00, 0.7320755909723271E+00, 0.2524235138002424E-02, 0.2098451433139096E-02, 0.6085903210497798E+00, 0.4933914566812295E+00, 0.1604009725641142E-01, 0.1806732527351204E-01, 0.5557487459415846E+00, 0.4085410972771827E+00, 0.1868009328861996E-06, 0.5904812108429529E-07, 0.1291405980002798E+00, 0.2876033591836524E-07, 0.3612752323451872E-38, 0.5598544436768911E-18, 0.1681677309759878E+01}, + i0: 1, + n0: 5, + pp: 1, + tau: 2.8760330654564486E-008, + sigma: 1.8108178199517009, + i0Out: 1, + n0Out: 5, + ppOut: 1, + tauOut: 2.8760330654564486E-008, + sigmaOut: 1.8108178199517009, + dminOut: 9.5429721930147733E-016, + dmin1Out: 0.39406941605409296, + dmin2Out: 0.49198119275848701, + dnOut: 9.5429721930147733E-016, + dnm1Out: 0.39406941605409296, + dnm2Out: 0.49198119275848701, + }, + { + z: []float64{0.6701596647898166E+00, 0.6701596935501473E+00, 0.6115792910959321E-18, 0.5598544436768911E-18, 0.7341740136451356E+00, 0.7320755909723271E+00, 0.1410235162411720E-02, 0.2098451433139096E-02, 0.5100485180319990E+00, 0.4933914566812295E+00, 0.1447165246275905E-01, 0.1806732527351204E-01, 0.3940694751022140E+00, 0.4085410972771827E+00, 0.4309503539425748E-14, 0.5904812108429529E-07, 0.9542972193014773E-15, 0.2876033591836524E-07, 0.6115792910959321E-18, 0.5598544436768911E-18}, + i0: 1, + n0: 5, + pp: 0, + tau: 9.5429721930146451E-016, + sigma: 1.8108178487120317, + i0Out: 1, + n0Out: 5, + ppOut: 0, + tauOut: 9.5429721930146451E-016, + sigmaOut: 1.8108178487120317, + dminOut: 1.9721522630525295E-030, + dmin1Out: 0.38317668529976806, + dmin2Out: 0.50907067170667131, + dnOut: 1.9721522630525295E-030, + dnm1Out: 0.38317668529976806, + dnm2Out: 0.50907067170667131, + }, + { + z: []float64{0.6701596647898166E+00, 0.6701596647898156E+00, 0.6115792910959321E-18, 0.6699979816704878E-18, 0.7341740136451356E+00, 0.7355842488075462E+00, 0.1410235162411720E-02, 0.9778463253267723E-03, 0.5100485180319990E+00, 0.5235423241694304E+00, 0.1447165246275905E-01, 0.1089278980244500E-01, 0.3940694751022140E+00, 0.3831766852997724E+00, 0.4309503539425748E-14, 0.1073277003016631E-28, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + tau: 0.31895966905528556, + sigma: 1.8108178487120326, + i0Out: 1, + n0Out: 4, + ppOut: 1, + tauOut: 0.31895966905528556, + sigmaOut: 1.8108178487120326, + dminOut: 4.4735699115826311E-002, + dmin1Out: 0.20335674284478694, + dmin2Out: 0.35119999573453003, + dnOut: 4.4735699115826311E-002, + dnm1Out: 0.20335674284478694, + dnm2Out: 0.41662457975226058, + }, + { + z: []float64{0.3511999957345300E+00, 0.6701596647898156E+00, 0.1403302870260262E-17, 0.6699979816704878E-18, 0.4176024260775874E+00, 0.7355842488075462E+00, 0.1225912269357841E-02, 0.9778463253267723E-03, 0.2142495326472319E+00, 0.5235423241694304E+00, 0.1948131712866055E-01, 0.1089278980244500E-01, 0.4473569911582631E-01, 0.3831766852997724E+00, 0.1403302870260262E-17, 0.6699979816704878E-18}, + i0: 1, + n0: 4, + pp: 0, + tau: 3.9897804510299034E-002, + sigma: 2.1297775177673182, + i0Out: 1, + n0Out: 4, + ppOut: 0, + tauOut: 3.9897804510299034E-002, + sigmaOut: 2.1297775177673182, + dminOut: 3.2556800493375310E-004, + dmin1Out: 0.17365859019389857, + dmin2Out: 0.31130219122423097, + dnOut: 3.2556800493375310E-004, + dnm1Out: 0.17365859019389857, + dnm2Out: 0.37770462156728835, + }, + { + z: []float64{0.3511999957345300E+00, 0.3113021912242310E+00, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.4176024260775874E+00, 0.3789305338366462E+00, 0.1225912269357841E-02, 0.6931379430343076E-03, 0.2142495326472319E+00, 0.1931399073225591E+00, 0.1948131712866055E-01, 0.4512326600593524E-02, 0.4473569911582631E-01, 0.3255680049337531E-03, 0.1403302870260262E-17, 0.1882488140663987E-17, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + tau: 3.1797943619548145E-004, + sigma: 2.1696753222776173, + i0Out: 1, + n0Out: 4, + ppOut: 1, + tauOut: 3.1797943619548145E-004, + sigmaOut: 2.1696753222776173, + dminOut: 1.3065740500455263E-007, + dmin1Out: 0.19246898670783216, + dmin2Out: 0.31098421178803548, + dnOut: 1.3065740500455263E-007, + dnm1Out: 0.19246898670783216, + dnm2Out: 0.37861255440045072, + }, + { + z: []float64{0.3109842117880355E+00, 0.3113021912242310E+00, 0.2293789231233262E-17, 0.1882488140663987E-17, 0.3793056923434850E+00, 0.3789305338366462E+00, 0.3529411785314453E-03, 0.6931379430343076E-03, 0.1969813133084257E+00, 0.1931399073225591E+00, 0.7457911333267062E-05, 0.4512326600593524E-02, 0.1306574050045526E-06, 0.3255680049337531E-03, 0.2293789231233262E-17, 0.1882488140663987E-17}, + i0: 1, + n0: 4, + pp: 0, + tau: 1.3065240973281283E-007, + sigma: 2.1699933017138124, + i0Out: 1, + n0Out: 4, + ppOut: 0, + tauOut: 1.3065240973281283E-007, + sigmaOut: 2.1699933017138124, + dminOut: 4.4031878668096113E-014, + dmin1Out: 0.19679806330970273, + dmin2Out: 0.31098408113562576, + dnOut: 4.4031878668096113E-014, + dnm1Out: 0.19679806330970273, + dnm2Out: 0.37930556169107532, + }, + { + z: []float64{0.3109842117880355E+00, 0.3109840811356258E+00, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.3793056923434850E+00, 0.3796585028696068E+00, 0.3529411785314453E-03, 0.1831193463132450E-03, 0.1969813133084257E+00, 0.1968055212210360E+00, 0.7457911333267062E-05, 0.4951239861123181E-11, 0.1306574050045526E-06, 0.4403187866809611E-13, 0.2293789231233262E-17, 0.2797722987188916E-17, 0.1810817848712033E+01}, + i0: 1, + n0: 4, + pp: 1, + tau: 4.4031878666982759E-014, + sigma: 2.1699934323662222, + i0Out: 1, + n0Out: 4, + ppOut: 1, + tauOut: 4.4031878666982759E-014, + sigmaOut: 2.1699934323662222, + dminOut: 5.0676424551397798E-027, + dmin1Out: 0.19671064247077341, + dmin2Out: 0.31098408113558174, + dnOut: 5.0676424551397798E-027, + dnm1Out: 0.19671064247077341, + dnm2Out: 0.37965850286956282, + }, + { + z: []float64{0.3109840811355817E+00, 0.3109840811356258E+00, 0.3415542419024794E-17, 0.2797722987188916E-17, 0.3798416222158761E+00, 0.3796585028696068E+00, 0.9487875021856221E-04, 0.1831193463132450E-03, 0.1967106424757246E+00, 0.1968055212210360E+00, 0.1108289770587888E-23, 0.4951239861123181E-11, 0.5067642455139780E-26, 0.4403187866809611E-13, 0.3415542419024794E-17, 0.2797722987188916E-17}, + i0: 1, + n0: 4, + pp: 0, + tau: 5.0676424551397798E-027, + sigma: 2.1699934323662662, + i0Out: 1, + n0Out: 4, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 2.1699934323662662, + dminOut: 5.0676424551397798E-027, + dmin1Out: 0.19666151937261311, + dmin2Out: 0.31098408113558174, + dnOut: 5.0676424551397798E-027, + dnm1Out: 0.19666151937261311, + dnm2Out: 0.37984162221587608, + }, + { + z: []float64{0.3109840811355817E+00, 0.3109840811355817E+00, 0.3415542419024794E-17, 0.4171805735046273E-17, 0.3798416222158761E+00, 0.3799365009660947E+00, 0.9487875021856221E-04, 0.4912310311151891E-04, 0.1967106424757246E+00, 0.1966615193726131E+00, 0.1108289770587888E-23, 0.2855879641297252E-49, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + tau: 9.8330759686306557E-002, + sigma: 2.1699934323662662, + i0Out: 1, + n0Out: 3, + ppOut: 1, + tauOut: 9.8330759686306557E-002, + sigmaOut: 2.1699934323662662, + dminOut: 9.8296460175394978E-002, + dmin1Out: 0.21265332144927518, + dmin2Out: 0.21265332144927518, + dnOut: 9.8296460175394978E-002, + dnm1Out: 0.28160574127978810, + dnm2Out: 0.21265332144927518, + }, + { + z: []float64{0.2126533214492752E+00, 0.3109840811355817E+00, 0.7453545812882342E-17, 0.4171805735046273E-17, 0.2816548643828996E+00, 0.3799365009660947E+00, 0.3429951091160839E-04, 0.4912310311151891E-04, 0.9829646017539498E-01, 0.1966615193726131E+00, 0.3799365009660947E+00, 0.2855879641297252E-49}, + i0: 1, + n0: 3, + pp: 0, + tau: 9.7172513485343004E-002, + sigma: 2.2683241920525727, + i0Out: 1, + n0Out: 3, + ppOut: 0, + tauOut: 9.7172513485343004E-002, + sigmaOut: 2.2683241920525727, + dminOut: 1.1056745151512559E-003, + dmin1Out: 0.11548080796393217, + dmin2Out: 0.11548080796393217, + dnOut: 1.1056745151512559E-003, + dnm1Out: 0.18448235089755655, + dnm2Out: 0.11548080796393217, + }, + { + z: []float64{0.2126533214492752E+00, 0.1154808079639322E+00, 0.7453545812882342E-17, 0.1817901582187390E-16, 0.2816548643828996E+00, 0.1845166504084682E+00, 0.3429951091160839E-04, 0.1827217490071947E-04, 0.9829646017539498E-01, 0.1105674515151256E-02, 0.3799365009660947E+00, 0.2816548643828996E+00, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + tau: 1.0942861809085330E-003, + sigma: 2.3654967055379159, + i0Out: 1, + n0Out: 3, + ppOut: 1, + tauOut: 1.0942861809085330E-003, + sigmaOut: 2.3654967055379159, + dminOut: 1.1278200095129901E-005, + dmin1Out: 0.11438652178302365, + dmin2Out: 0.11438652178302365, + dnOut: 1.1278200095129901E-005, + dnm1Out: 0.18342236422755959, + dnm2Out: 0.11438652178302365, + }, + { + z: []float64{0.1143865217830237E+00, 0.1154808079639322E+00, 0.2932453102768040E-16, 0.1817901582187390E-16, 0.1834406364024603E+00, 0.1845166504084682E+00, 0.1101341475930520E-06, 0.1827217490071947E-04, 0.1127820009512990E-04, 0.1105674515151256E-02, 0.1845166504084682E+00, 0.2816548643828996E+00}, + i0: 1, + n0: 3, + pp: 0, + tau: 1.1269238360546607E-005, + sigma: 2.3665909917188244, + i0Out: 1, + n0Out: 3, + ppOut: 0, + tauOut: 1.1269238360546607E-005, + sigmaOut: 2.3665909917188244, + dminOut: 8.9549629620034135E-009, + dmin1Out: 0.11437525254466312, + dmin2Out: 0.11437525254466312, + dnOut: 8.9549629620034135E-009, + dnm1Out: 0.18342936716409974, + dnm2Out: 0.11437525254466312, + }, + { + z: []float64{0.1143865217830237E+00, 0.1143752525446631E+00, 0.2932453102768040E-16, 0.4703212027287794E-16, 0.1834406364024603E+00, 0.1834294772982473E+00, 0.1101341475930520E-06, 0.6771621290952006E-11, 0.1127820009512990E-04, 0.8954962962003413E-08, 0.1845166504084682E+00, 0.1834406364024603E+00, 0.2169993432366266E+01}, + i0: 1, + n0: 3, + pp: 1, + tau: 8.9549072084035346E-009, + sigma: 2.3666022609571851, + i0Out: 1, + n0Out: 3, + ppOut: 1, + tauOut: 8.9549072084035346E-009, + sigmaOut: 2.3666022609571851, + dminOut: 5.5753269291151117E-014, + dmin1Out: 0.11437524358975594, + dmin2Out: 0.11437524358975594, + dnOut: 5.5753269291151117E-014, + dnm1Out: 0.18342946834334006, + dnm2Out: 0.11437524358975594, + }, + { + z: []float64{0.1143752435897560E+00, 0.1143752525446631E+00, 0.7542783706608855E-16, 0.4703212027287794E-16, 0.1834294683501117E+00, 0.1834294772982473E+00, 0.3305882004599510E-18, 0.6771621290952006E-11, 0.5575326929115112E-13, 0.8954962962003413E-08, 0.1834294772982473E+00, 0.1834406364024603E+00}, + i0: 1, + n0: 3, + pp: 0, + tau: 5.5753269214454873E-014, + sigma: 2.3666022699120921, + i0Out: 1, + n0Out: 3, + ppOut: 0, + tauOut: 5.5753269214454873E-014, + sigmaOut: 2.3666022699120921, + dminOut: 7.6696244203643861E-023, + dmin1Out: 0.11437524358970023, + dmin2Out: 0.11437524358970023, + dnOut: 7.6696244203643861E-023, + dnm1Out: 0.18342946835005580, + dnm2Out: 0.11437524358970023, + }, + { + z: []float64{0.1648283185136998E+01, 0.1396221235720571E+01, 0.1712714336271993E+00, 0.2520619494164272E+00, 0.1510753432847732E+01, 0.1119977945086946E+01, 0.3792800633372563E+00, 0.5620469213879850E+00, 0.1328441621586708E+01, 0.1019485448443405E+01, 0.1388998759717073E+00, 0.6882362364805590E+00, 0.4466938077796418E+00, 0.2681061628164644E+00, 0.7093206047768255E+00, 0.3174875209348847E+00, 0.6843112870203156E+00, 0.9979892152967577E+00, 0.6490582981441884E+00, 0.3956426765003833E+00, 0.5085572738629487E+00, 0.1122623886995757E+01, 0.9750235054014829E-02, 0.3499168501137979E-01, 0.1364886053450573E+00, 0.1417066070690837E+00, 0.2301225778544498E-01, 0.4532233329988395E-02, 0.1646009972289452E+01, 0.6930161671496210E+00, 0.2362515608142310E+00, 0.9760060629252760E+00, 0.5818602562677768E+00, 0.3984323866837953E+00, 0.1797665269485310E-01, 0.4196794303982125E+00, 0.5600419521166516E+00, 0.2492354636952108E-01, 0.2195137569256029E+00, 0.5530950584419837E+00, 0.4184071984843414E+00, 0.2222708575473020E+00, 0.2727864547293006E+00, 0.4156500978626423E+00, 0.6774373914466536E-01, 0.2745959086613283E+00, 0.1050967099374242E+00, 0.6593428521263771E-01, 0.2040338718098096E+00, 0.1079809097801335E+00, 0.1271971985482246E+00, 0.2011496719671002E+00, 0.4444741998443960E-01, 0.1290210252363728E+00, 0.5776327498150620E+00, 0.4262359329629137E-01, 0.3402556968467140E+00, 0.6023491555328507E+00, 0.1086565805630269E+00, 0.3155392911289253E+00, 0.9382999256694983E+00, 0.1171677238805356E+00, 0.7901625299559836E+00, 0.9297887823519896E+00, 0.6095853796269167E+00, 0.7973955560628040E+00, 0.8018125008387630E+00, 0.6023523535200964E+00, 0.2443177602187348E-01, 0.8114406374558937E+00, 0.2277830378453201E+00, 0.1480363940474286E-01, 0.6969081780841352E+00, 0.3759308106650992E+00, 0.8012406122589412E-01, 0.5487604052643561E+00, 0.9781022865072954E-01, 0.1017549972519246E+00, 0.2961248981181939E-03, 0.7617929262469909E-01, 0.8408398800007548E-04, 0.3802088861182694E-03, 0.0000000000000000E+00, 0.0000000000000000E+00}, + i0: 1, + n0: 21, + pp: 0, + tau: 0.0000000000000000, + sigma: 0.0000000000000000, + i0Out: 1, + n0Out: 21, + ppOut: 0, + tauOut: 0.0000000000000000, + sigmaOut: 0.0000000000000000, + dminOut: 7.8766827084626452E-005, + dmin1Out: 1.2363512593342330E-003, + dmin2Out: 1.2363512593342330E-003, + dnOut: 7.8766827084626452E-005, + dnm1Out: 4.3867054272813191E-003, + dnm2Out: 3.7622286348031123E-003, + }, + } { + // TODO(btracey): Check other outputs + i0 := test.i0 - 1 + n0 := test.n0 - 1 + z := make([]float64, len(test.z)) + copy(z, test.z) + + i0Out, n0Out, ppOut, tauOut, sigmaOut, dminOut, dmin1Out, dmin2Out, dnOut, dnm1Out, dnm2Out := impl.Dlasq5(i0, n0, z, test.pp, test.tau, test.sigma) + + if i0Out != test.i0Out-1 { + t.Errorf("Wrong i0. Want %v, got %v", test.n0Out, n0Out) + } + if n0Out != test.n0Out-1 { + t.Errorf("Wrong n0. Want %v, got %v", test.n0Out, n0Out) + } + if ppOut != test.ppOut { + t.Errorf("Wrong pp. Want %v, got %v", test.ppOut, ppOut) + } + if !floats.EqualWithinAbsOrRel(tauOut, test.tauOut, dTol, dTol) { + t.Errorf("Wrong tau. Want %v, got %v", test.tauOut, tauOut) + } + if !floats.EqualWithinAbsOrRel(sigmaOut, test.sigmaOut, dTol, dTol) { + t.Errorf("Wrong tau. Want %v, got %v", test.sigmaOut, sigmaOut) + } + + if !floats.EqualWithinAbsOrRel(dminOut, test.dminOut, dTol, dTol) { + t.Errorf("Wrong dmin. Want %v, got %v", test.dminOut, dminOut) + } + if !floats.EqualWithinAbsOrRel(dmin1Out, test.dmin1Out, dTol, dTol) { + t.Errorf("Wrong dmin1. Want %v, got %v", test.dmin1Out, dmin1Out) + } + if !floats.EqualWithinAbsOrRel(dmin2Out, test.dmin2Out, dTol, dTol) { + t.Errorf("Wrong dmin2. Want %v, got %v", test.dmin2Out, dmin2Out) + } + if !floats.EqualWithinAbsOrRel(dnOut, test.dnOut, dTol, dTol) { + t.Errorf("Wrong dn. Want %v, got %v", test.dnOut, dnOut) + } + if !floats.EqualWithinAbsOrRel(dnm1Out, test.dnm1Out, dTol, dTol) { + t.Errorf("Wrong dnm1. Want %v, got %v", test.dnm1Out, dnm1Out) + } + if !floats.EqualWithinAbsOrRel(dnm2Out, test.dnm2Out, dTol, dTol) { + t.Errorf("Wrong dnm2. Want %v, got %v", test.dnm2Out, dnm2Out) + } + } +} diff --git a/lapack/testlapack/dlasr.go b/lapack/testlapack/dlasr.go new file mode 100644 index 00000000..146c628e --- /dev/null +++ b/lapack/testlapack/dlasr.go @@ -0,0 +1,148 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dlasrer interface { + Dlasr(side blas.Side, pivot lapack.Pivot, direct lapack.Direct, m, n int, c, s, a []float64, lda int) +} + +func DlasrTest(t *testing.T, impl Dlasrer) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, pivot := range []lapack.Pivot{lapack.Variable, lapack.Top, lapack.Bottom} { + for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { + for _, test := range []struct { + m, n, lda int + }{ + {5, 5, 0}, + {5, 10, 0}, + {10, 5, 0}, + + {5, 5, 20}, + {5, 10, 20}, + {10, 5, 20}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + var s, c []float64 + if side == blas.Left { + s = make([]float64, m-1) + c = make([]float64, m-1) + } else { + s = make([]float64, n-1) + c = make([]float64, n-1) + } + for k := range s { + theta := rnd.Float64() * 2 * math.Pi + s[k] = math.Sin(theta) + c[k] = math.Cos(theta) + } + aCopy := make([]float64, len(a)) + copy(a, aCopy) + impl.Dlasr(side, pivot, direct, m, n, c, s, a, lda) + + pSize := m + if side == blas.Right { + pSize = n + } + p := blas64.General{ + Rows: pSize, + Cols: pSize, + Stride: pSize, + Data: make([]float64, pSize*pSize), + } + pk := blas64.General{ + Rows: pSize, + Cols: pSize, + Stride: pSize, + Data: make([]float64, pSize*pSize), + } + ptmp := blas64.General{ + Rows: pSize, + Cols: pSize, + Stride: pSize, + Data: make([]float64, pSize*pSize), + } + for i := 0; i < pSize; i++ { + p.Data[i*p.Stride+i] = 1 + ptmp.Data[i*p.Stride+i] = 1 + } + // Compare to direct computation. + for k := range s { + for i := range p.Data { + pk.Data[i] = 0 + } + for i := 0; i < pSize; i++ { + pk.Data[i*p.Stride+i] = 1 + } + if pivot == lapack.Variable { + pk.Data[k*p.Stride+k] = c[k] + pk.Data[k*p.Stride+k+1] = s[k] + pk.Data[(k+1)*p.Stride+k] = -s[k] + pk.Data[(k+1)*p.Stride+k+1] = c[k] + } else if pivot == lapack.Top { + pk.Data[0] = c[k] + pk.Data[k+1] = s[k] + pk.Data[(k+1)*p.Stride] = -s[k] + pk.Data[(k+1)*p.Stride+k+1] = c[k] + } else { + pk.Data[(pSize-1-k)*p.Stride+pSize-k-1] = c[k] + pk.Data[(pSize-1-k)*p.Stride+pSize-1] = s[k] + pk.Data[(pSize-1)*p.Stride+pSize-1-k] = -s[k] + pk.Data[(pSize-1)*p.Stride+pSize-1] = c[k] + } + if direct == lapack.Forward { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, pk, ptmp, 0, p) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, ptmp, pk, 0, p) + } + copy(ptmp.Data, p.Data) + } + + aMat := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + copy(a, aCopy) + newA := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, m*lda), + } + if side == blas.Left { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, p, aMat, 0, newA) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aMat, p, 0, newA) + } + if !floats.EqualApprox(newA.Data, a, 1e-12) { + t.Errorf("A update mismatch") + } + } + } + } + } +} diff --git a/lapack/testlapack/dlasrt.go b/lapack/testlapack/dlasrt.go new file mode 100644 index 00000000..427db939 --- /dev/null +++ b/lapack/testlapack/dlasrt.go @@ -0,0 +1,80 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "testing" + + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dlasrter interface { + Dlasrt(s lapack.Sort, n int, d []float64) +} + +func DlasrtTest(t *testing.T, impl Dlasrter) { + for ti, test := range []struct { + data []float64 + wantInc []float64 + wantDec []float64 + }{ + { + data: nil, + wantInc: nil, + wantDec: nil, + }, + { + data: []float64{}, + wantInc: []float64{}, + wantDec: []float64{}, + }, + { + data: []float64{1}, + wantInc: []float64{1}, + wantDec: []float64{1}, + }, + { + data: []float64{1, 2}, + wantInc: []float64{1, 2}, + wantDec: []float64{2, 1}, + }, + { + data: []float64{1, 2, -3}, + wantInc: []float64{-3, 1, 2}, + wantDec: []float64{2, 1, -3}, + }, + { + data: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, + wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, + wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, + }, + { + data: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, + wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, + wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, + }, + { + data: []float64{-2, 4, -1, 2, -4, 0, 3, 5, -5, 1, -3}, + wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, + wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, + }, + } { + n := len(test.data) + ds := make([]float64, n) + + copy(ds, test.data) + impl.Dlasrt(lapack.SortIncreasing, n, ds) + if !floats.Equal(ds, test.wantInc) { + t.Errorf("Case #%v: unexpected result of SortIncreasing", ti) + } + + copy(ds, test.data) + impl.Dlasrt(lapack.SortDecreasing, n, ds) + if !floats.Equal(ds, test.wantDec) { + t.Errorf("Case #%v: unexpected result of SortIncreasing", ti) + } + } +} diff --git a/lapack/testlapack/dlasv2.go b/lapack/testlapack/dlasv2.go new file mode 100644 index 00000000..a73476c1 --- /dev/null +++ b/lapack/testlapack/dlasv2.go @@ -0,0 +1,48 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dlasv2er interface { + Dlasv2(f, g, h float64) (ssmin, ssmax, snr, csr, snl, csl float64) +} + +func Dlasv2Test(t *testing.T, impl Dlasv2er) { + rnd := rand.New(rand.NewSource(1)) + for i := 0; i < 100; i++ { + f := rnd.NormFloat64() + g := rnd.NormFloat64() + h := rnd.NormFloat64() + + ssmin, ssmax, snr, csr, snl, csl := impl.Dlasv2(f, g, h) + + // tmp = + // [ csl snl] [f g] + // [-snl csl] [0 h] + tmp11 := csl * f + tmp12 := csl*g + snl*h + tmp21 := -snl * f + tmp22 := -snl*g + csl*h + // lhs = + // [tmp11 tmp12] [csr -snr] + // [tmp21 tmp22] [snr csr] + ans11 := tmp11*csr + tmp12*snr + ans12 := tmp11*-snr + tmp12*csr + ans21 := tmp21*csr + tmp22*snr + ans22 := tmp21*-snr + tmp22*csr + + lhs := []float64{ans11, ans12, ans21, ans22} + rhs := []float64{ssmax, 0, 0, ssmin} + if !floats.EqualApprox(rhs, lhs, 1e-12) { + t.Errorf("SVD mismatch. f = %v, g = %v, h = %v.\nLHS: %v\nRHS: %v", f, g, h, lhs, rhs) + } + } +} diff --git a/lapack/testlapack/dlaswp.go b/lapack/testlapack/dlaswp.go new file mode 100644 index 00000000..6e5bba07 --- /dev/null +++ b/lapack/testlapack/dlaswp.go @@ -0,0 +1,130 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "testing" + + "github.com/gonum/blas/blas64" +) + +type Dlaswper interface { + Dlaswp(n int, a []float64, lda, k1, k2 int, ipiv []int, incX int) +} + +func DlaswpTest(t *testing.T, impl Dlaswper) { + for ti, test := range []struct { + k1, k2 int + ipiv []int + incX int + + want blas64.General + }{ + { + k1: 0, + k2: 2, + ipiv: []int{0, 1, 2}, + incX: 1, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + }, + }, + }, + { + k1: 0, + k2: 2, + ipiv: []int{0, 1, 2}, + incX: -1, + want: blas64.General{ + Rows: 4, + Cols: 3, + Stride: 3, + Data: []float64{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + }, + }, + }, + { + k1: 0, + k2: 2, + ipiv: []int{1, 2, 3}, + incX: 1, + want: blas64.General{ + Rows: 5, + Cols: 3, + Stride: 3, + Data: []float64{ + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + 1, 2, 3, + 13, 14, 15, + }, + }, + }, + { + k1: 0, + k2: 2, + ipiv: []int{1, 2, 3}, + incX: -1, + want: blas64.General{ + Rows: 5, + Cols: 3, + Stride: 3, + Data: []float64{ + 10, 11, 12, + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 13, 14, 15, + }, + }, + }, + } { + m := test.want.Rows + n := test.want.Cols + k1 := test.k1 + k2 := test.k2 + if len(test.ipiv) != k2+1 { + panic("bad length of ipiv") + } + incX := test.incX + for _, extra := range []int{0, 11} { + a := zeros(m, n, n+extra) + c := 1 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a.Data[i*a.Stride+j] = float64(c) + c++ + } + } + + ipiv := make([]int, len(test.ipiv)) + copy(ipiv, test.ipiv) + + impl.Dlaswp(n, a.Data, a.Stride, k1, k2, ipiv, incX) + + prefix := fmt.Sprintf("Case %v (m=%v,n=%v,k1=%v,k2=%v,extra=%v)", ti, m, n, k1, k2, extra) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + + if !equalApproxGeneral(a, test.want, 0) { + t.Errorf("%v: unexpected A\n%v\n%v", prefix, a, test.want) + } + } + } +} diff --git a/lapack/testlapack/dlasy2.go b/lapack/testlapack/dlasy2.go new file mode 100644 index 00000000..44ea65cb --- /dev/null +++ b/lapack/testlapack/dlasy2.go @@ -0,0 +1,104 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlasy2er interface { + Dlasy2(tranl, tranr bool, isgn, n1, n2 int, tl []float64, ldtl int, tr []float64, ldtr int, b []float64, ldb int, x []float64, ldx int) (scale, xnorm float64, ok bool) +} + +func Dlasy2Test(t *testing.T, impl Dlasy2er) { + rnd := rand.New(rand.NewSource(1)) + for _, tranl := range []bool{true, false} { + for _, tranr := range []bool{true, false} { + for _, isgn := range []int{1, -1} { + for _, n1 := range []int{0, 1, 2} { + for _, n2 := range []int{0, 1, 2} { + for _, extra := range []int{0, 1, 2, 13} { + for cas := 0; cas < 1000; cas++ { + testDlasy2(t, impl, tranl, tranr, isgn, n1, n2, extra, rnd) + } + } + } + } + } + } + } +} + +func testDlasy2(t *testing.T, impl Dlasy2er, tranl, tranr bool, isgn, n1, n2, extra int, rnd *rand.Rand) { + const tol = 1e-11 + + tl := randomGeneral(n1, n1, n1+extra, rnd) + tr := randomGeneral(n2, n2, n2+extra, rnd) + b := randomGeneral(n1, n2, n2+extra, rnd) + x := randomGeneral(n1, n2, n2+extra, rnd) + + scale, xnorm, ok := impl.Dlasy2(tranl, tranr, isgn, n1, n2, tl.Data, tl.Stride, tr.Data, tr.Stride, b.Data, b.Stride, x.Data, x.Stride) + if scale > 1 { + t.Errorf("invalid value of scale, want <= 1, got %v", scale) + } + if n1 == 0 || n2 == 0 { + return + } + + prefix := fmt.Sprintf("Case n1=%v, n2=%v, isgn=%v", n1, n2, isgn) + + // Check any invalid modifications of x. + if !generalOutsideAllNaN(x) { + t.Errorf("%v: out-of-range write to x\n%v", prefix, x.Data) + } + + var xnormWant float64 + for i := 0; i < n1; i++ { + var rowsum float64 + for j := 0; j < n2; j++ { + rowsum += math.Abs(x.Data[i*x.Stride+j]) + } + if rowsum > xnormWant { + xnormWant = rowsum + } + } + if xnormWant != xnorm { + t.Errorf("%v: unexpected xnorm: want %v, got %v", prefix, xnormWant, xnorm) + } + + // Multiply b by scale to get the wanted right-hand side. + for i := 0; i < n1; i++ { + for j := 0; j < n2; j++ { + b.Data[i*b.Stride+j] *= scale + } + } + // Compute the wanted left-hand side. + lhsWant := randomGeneral(n1, n2, n2, rnd) + if tranl { + blas64.Gemm(blas.Trans, blas.NoTrans, 1, tl, x, 0, lhsWant) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tl, x, 0, lhsWant) + } + if tranr { + blas64.Gemm(blas.NoTrans, blas.Trans, float64(isgn), x, tr, 1, lhsWant) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, float64(isgn), x, tr, 1, lhsWant) + } + // Compare them. + for i := 0; i < n1; i++ { + for j := 0; j < n2; j++ { + diff := lhsWant.Data[i*lhsWant.Stride+j] - b.Data[i*b.Stride+j] + if math.Abs(diff) > tol && ok { + t.Errorf("%v: unexpected result, diff[%v,%v]=%v", prefix, i, j, diff) + } + } + } +} diff --git a/lapack/testlapack/dlatrd.go b/lapack/testlapack/dlatrd.go new file mode 100644 index 00000000..e0202176 --- /dev/null +++ b/lapack/testlapack/dlatrd.go @@ -0,0 +1,245 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlatrder interface { + Dlatrd(uplo blas.Uplo, n, nb int, a []float64, lda int, e, tau, w []float64, ldw int) +} + +func DlatrdTest(t *testing.T, impl Dlatrder) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, test := range []struct { + n, nb, lda, ldw int + }{ + {5, 2, 0, 0}, + {5, 5, 0, 0}, + + {5, 3, 10, 11}, + {5, 5, 10, 11}, + } { + n := test.n + nb := test.nb + lda := test.lda + if lda == 0 { + lda = n + } + ldw := test.ldw + if ldw == 0 { + ldw = nb + } + + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + + e := make([]float64, n-1) + for i := range e { + e[i] = math.NaN() + } + tau := make([]float64, n-1) + for i := range tau { + tau[i] = math.NaN() + } + w := make([]float64, n*ldw) + for i := range w { + w[i] = math.NaN() + } + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + impl.Dlatrd(uplo, n, nb, a, lda, e, tau, w, ldw) + + // Construct Q. + ldq := n + q := blas64.General{ + Rows: n, + Cols: n, + Stride: ldq, + Data: make([]float64, n*ldq), + } + for i := 0; i < n; i++ { + q.Data[i*ldq+i] = 1 + } + if uplo == blas.Upper { + for i := n - 1; i >= n-nb; i-- { + if i == 0 { + continue + } + h := blas64.General{ + Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n), + } + for j := 0; j < n; j++ { + h.Data[j*n+j] = 1 + } + v := blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + for j := 0; j < i-1; j++ { + v.Data[j] = a[j*lda+i] + } + v.Data[i-1] = 1 + + blas64.Ger(-tau[i-1], v, v, h) + + qTmp := blas64.General{ + Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n), + } + copy(qTmp.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qTmp, h, 0, q) + } + } else { + for i := 0; i < nb; i++ { + if i == n-1 { + continue + } + h := blas64.General{ + Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n), + } + for j := 0; j < n; j++ { + h.Data[j*n+j] = 1 + } + v := blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + v.Data[i+1] = 1 + for j := i + 2; j < n; j++ { + v.Data[j] = a[j*lda+i] + } + blas64.Ger(-tau[i], v, v, h) + + qTmp := blas64.General{ + Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n), + } + copy(qTmp.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qTmp, h, 0, q) + } + } + errStr := fmt.Sprintf("isUpper = %v, n = %v, nb = %v", uplo == blas.Upper, n, nb) + if !isOrthonormal(q) { + t.Errorf("Q not orthonormal. %s", errStr) + } + aGen := genFromSym(blas64.Symmetric{N: n, Stride: lda, Uplo: uplo, Data: aCopy}) + if !dlatrdCheckDecomposition(t, uplo, n, nb, e, tau, a, lda, aGen, q) { + t.Errorf("Decomposition mismatch. %s", errStr) + } + } + } +} + +// dlatrdCheckDecomposition checks that the first nb rows have been successfully +// reduced. +func dlatrdCheckDecomposition(t *testing.T, uplo blas.Uplo, n, nb int, e, tau, a []float64, lda int, aGen, q blas64.General) bool { + // Compute Q^T * A * Q. + tmp := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + ans := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, aGen, 0, tmp) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, q, 0, ans) + + // Compare with T. + if uplo == blas.Upper { + for i := n - 1; i >= n-nb; i-- { + for j := 0; j < n; j++ { + v := ans.Data[i*ans.Stride+j] + switch { + case i == j: + if math.Abs(v-a[i*lda+j]) > 1e-10 { + return false + } + case i == j-1: + if math.Abs(a[i*lda+j]-1) > 1e-10 { + return false + } + if math.Abs(v-e[i]) > 1e-10 { + return false + } + case i == j+1: + default: + if math.Abs(v) > 1e-10 { + return false + } + } + } + } + } else { + for i := 0; i < nb; i++ { + for j := 0; j < n; j++ { + v := ans.Data[i*ans.Stride+j] + switch { + case i == j: + if math.Abs(v-a[i*lda+j]) > 1e-10 { + return false + } + case i == j-1: + case i == j+1: + if math.Abs(a[i*lda+j]-1) > 1e-10 { + return false + } + if math.Abs(v-e[i-1]) > 1e-10 { + return false + } + default: + if math.Abs(v) > 1e-10 { + return false + } + } + } + } + } + return true +} + +// genFromSym constructs a (symmetric) general matrix from the data in the +// symmetric. +// TODO(btracey): Replace other constructions of this with a call to this function. +func genFromSym(a blas64.Symmetric) blas64.General { + n := a.N + lda := a.Stride + uplo := a.Uplo + b := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := a.Data[i*lda+j] + if uplo == blas.Lower { + v = a.Data[j*lda+i] + } + b.Data[i*n+j] = v + b.Data[j*n+i] = v + } + } + return b +} diff --git a/lapack/testlapack/dlatrs.go b/lapack/testlapack/dlatrs.go new file mode 100644 index 00000000..062d2ff8 --- /dev/null +++ b/lapack/testlapack/dlatrs.go @@ -0,0 +1,141 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dlatrser interface { + Dlatrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, normin bool, n int, a []float64, lda int, x []float64, cnorm []float64) (scale float64) +} + +func DlatrsTest(t *testing.T, impl Dlatrser) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, trans := range []blas.Transpose{blas.Trans, blas.NoTrans} { + for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 7, 10, 20, 50, 100} { + for _, lda := range []int{n, 2*n + 1} { + lda = max(1, lda) + imats := []int{7, 11, 12, 13, 14, 15, 16, 17, 18} + if n < 6 { + imats = append(imats, 19) + } + for _, imat := range imats { + testDlatrs(t, impl, imat, uplo, trans, n, lda, rnd) + } + } + } + } + } +} + +func testDlatrs(t *testing.T, impl Dlatrser, imat int, uplo blas.Uplo, trans blas.Transpose, n, lda int, rnd *rand.Rand) { + const tol = 1e-14 + + a := nanSlice(n * lda) + b := nanSlice(n) + work := make([]float64, 3*n) + + // Generate triangular test matrix and right hand side. + diag := dlattr(imat, uplo, trans, n, a, lda, b, work, rnd) + if imat <= 10 { + // b has not been generated. + dlarnv(b, 3, rnd) + } + + cnorm := nanSlice(n) + x := make([]float64, n) + + // Call Dlatrs with normin=false. + copy(x, b) + scale := impl.Dlatrs(uplo, trans, diag, false, n, a, lda, x, cnorm) + prefix := fmt.Sprintf("Case imat=%v (n=%v,lda=%v,trans=%v,uplo=%v,diag=%v", imat, n, lda, trans, uplo, diag) + for i, v := range cnorm { + if math.IsNaN(v) { + t.Errorf("%v: cnorm[%v] not computed (scale=%v,normin=false)", prefix, i, scale) + } + } + resid, hasNaN := dlatrsResidual(uplo, trans, diag, n, a, lda, scale, cnorm, x, b, work[:n]) + if hasNaN { + t.Errorf("%v: unexpected NaN (scale=%v,normin=false)", prefix, scale) + } else if resid > tol { + t.Errorf("%v: residual %v too large (scale=%v,normin=false)", prefix, scale) + } + + // Call Dlatrs with normin=true because cnorm has been filled. + copy(x, b) + scale = impl.Dlatrs(uplo, trans, diag, true, n, a, lda, x, cnorm) + resid, hasNaN = dlatrsResidual(uplo, trans, diag, n, a, lda, scale, cnorm, x, b, work[:n]) + if hasNaN { + t.Errorf("%v: unexpected NaN (scale=%v,normin=true)", prefix, scale) + } else if resid > tol { + t.Errorf("%v: residual %v too large (scale=%v,normin=true)", prefix, scale) + } +} + +// dlatrsResidual returns norm(trans(A)*x-scale*b) / (norm(trans(A))*norm(x)*eps) +// and whether NaN has been encountered in the process. +func dlatrsResidual(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, a []float64, lda int, scale float64, cnorm []float64, x, b, work []float64) (resid float64, hasNaN bool) { + if n == 0 { + return 0, false + } + + // Compute the norm of the triangular matrix A using the column norms + // already computed by Dlatrs. + var tnorm float64 + if diag == blas.NonUnit { + for j := 0; j < n; j++ { + tnorm = math.Max(tnorm, math.Abs(a[j*lda+j])+cnorm[j]) + } + } else { + for j := 0; j < n; j++ { + tnorm = math.Max(tnorm, 1+cnorm[j]) + } + } + + eps := dlamchE + smlnum := dlamchS + bi := blas64.Implementation() + + // Compute norm(trans(A)*x-scale*b) / (norm(trans(A))*norm(x)*eps) + copy(work, x) + ix := bi.Idamax(n, work, 1) + xnorm := math.Max(1, math.Abs(work[ix])) + xscal := 1 / xnorm / float64(n) + bi.Dscal(n, xscal, work, 1) + bi.Dtrmv(uplo, trans, diag, n, a, lda, work, 1) + bi.Daxpy(n, -scale*xscal, b, 1, work, 1) + for _, v := range work { + if math.IsNaN(v) { + return 1 / eps, true + } + } + ix = bi.Idamax(n, work, 1) + resid = math.Abs(work[ix]) + ix = bi.Idamax(n, x, 1) + xnorm = math.Abs(x[ix]) + if resid*smlnum <= xnorm { + if xnorm > 0 { + resid /= xnorm + } + } else if resid > 0 { + resid = 1 / eps + } + if resid*smlnum <= tnorm { + if tnorm > 0 { + resid /= tnorm + } + } else if resid > 0 { + resid = 1 / eps + } + return resid, false +} diff --git a/lapack/testlapack/dorg2l.go b/lapack/testlapack/dorg2l.go new file mode 100644 index 00000000..885ef5b8 --- /dev/null +++ b/lapack/testlapack/dorg2l.go @@ -0,0 +1,75 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" +) + +type Dorg2ler interface { + Dorg2l(m, n, k int, a []float64, lda int, tau, work []float64) + Dgeql2er +} + +func Dorg2lTest(t *testing.T, impl Dorg2ler) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, k, lda int + }{ + {5, 4, 3, 0}, + {5, 4, 4, 0}, + {3, 3, 2, 0}, + {5, 5, 5, 0}, + } { + m := test.m + n := test.n + k := test.k + lda := test.lda + if lda == 0 { + lda = n + } + + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + tau := nanSlice(max(m, n)) + work := make([]float64, n) + impl.Dgeql2(m, n, a, lda, tau, work) + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dorg2l(m, n, k, a, lda, tau[n-k:], work) + if !hasOrthonormalColumns(m, n, a, lda) { + t.Errorf("Q is not orthonormal. m = %v, n = %v, k = %v", m, n, k) + } + } +} + +// hasOrthornormalColumns checks that the columns of a are orthonormal. +func hasOrthonormalColumns(m, n int, a []float64, lda int) bool { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + dot := blas64.Dot(m, + blas64.Vector{Inc: lda, Data: a[i:]}, + blas64.Vector{Inc: lda, Data: a[j:]}, + ) + if i == j { + if math.Abs(dot-1) > 1e-10 { + return false + } + } else { + if math.Abs(dot) > 1e-10 { + return false + } + } + } + } + return true +} diff --git a/lapack/testlapack/dorg2r.go b/lapack/testlapack/dorg2r.go new file mode 100644 index 00000000..5cd95124 --- /dev/null +++ b/lapack/testlapack/dorg2r.go @@ -0,0 +1,79 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dorg2rer interface { + Dgeqrfer + Dorg2r(m, n, k int, a []float64, lda int, tau []float64, work []float64) +} + +func Dorg2rTest(t *testing.T, impl Dorg2rer) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, k, lda int + }{ + {3, 3, 0, 0}, + {4, 3, 0, 0}, + {3, 3, 2, 0}, + {4, 3, 2, 0}, + + {5, 5, 0, 20}, + {5, 5, 3, 20}, + {10, 5, 0, 20}, + {10, 5, 2, 20}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + k := min(m, n) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgeqrf(m, n, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgeqrf(m, n, a, lda, tau, work, len(work)) + + k = test.k + if k == 0 { + k = n + } + q := constructQK("QR", m, n, k, a, lda, tau) + + impl.Dorg2r(m, n, k, a, lda, tau, work) + + // Check that the first n columns match. + same := true + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if !floats.EqualWithinAbsOrRel(q.Data[i*q.Stride+j], a[i*lda+j], 1e-12, 1e-12) { + same = false + break + } + } + } + if !same { + fmt.Println() + fmt.Println("a =") + printRowise(a, m, n, lda, false) + fmt.Println("q =") + printRowise(q.Data, q.Rows, q.Cols, q.Stride, false) + t.Errorf("Q mismatch") + } + } +} diff --git a/lapack/testlapack/dorgbr.go b/lapack/testlapack/dorgbr.go new file mode 100644 index 00000000..6c400e69 --- /dev/null +++ b/lapack/testlapack/dorgbr.go @@ -0,0 +1,156 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dorgbrer interface { + Dorgbr(vect lapack.DecompUpdate, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) + Dgebrder +} + +func DorgbrTest(t *testing.T, impl Dorgbrer) { + rnd := rand.New(rand.NewSource(1)) + for _, vect := range []lapack.DecompUpdate{lapack.ApplyQ, lapack.ApplyP} { + for _, test := range []struct { + m, n, k, lda int + }{ + {5, 5, 5, 0}, + {5, 5, 3, 0}, + {5, 3, 5, 0}, + {3, 5, 5, 0}, + {3, 4, 5, 0}, + {3, 5, 4, 0}, + {4, 3, 5, 0}, + {4, 5, 3, 0}, + {5, 3, 4, 0}, + {5, 4, 3, 0}, + + {5, 5, 5, 10}, + {5, 5, 3, 10}, + {5, 3, 5, 10}, + {3, 5, 5, 10}, + {3, 4, 5, 10}, + {3, 5, 4, 10}, + {4, 3, 5, 10}, + {4, 5, 3, 10}, + {5, 3, 4, 10}, + {5, 4, 3, 10}, + } { + m := test.m + n := test.n + k := test.k + lda := test.lda + // Filter out bad tests + if vect == lapack.ApplyQ { + if m < n || n < min(m, k) || m < min(m, k) { + continue + } + } else { + if n < m || m < min(n, k) || n < min(n, k) { + continue + } + } + // Sizes for Dorgbr. + var ma, na int + if vect == lapack.ApplyQ { + if m >= k { + ma = m + na = k + } else { + ma = m + na = m + } + } else { + if n >= k { + ma = k + na = n + } else { + ma = n + na = n + } + } + // a eventually needs to store either P or Q, so it must be + // sufficiently big. + var a []float64 + if vect == lapack.ApplyQ { + lda = max(m, lda) + a = make([]float64, m*lda) + } else { + lda = max(n, lda) + a = make([]float64, n*lda) + } + for i := range a { + a[i] = rnd.NormFloat64() + } + + nTau := min(ma, na) + tauP := make([]float64, nTau) + tauQ := make([]float64, nTau) + d := make([]float64, nTau) + e := make([]float64, nTau) + lwork := -1 + work := make([]float64, 1) + impl.Dgebrd(ma, na, a, lda, d, e, tauQ, tauP, work, lwork) + work = make([]float64, int(work[0])) + lwork = len(work) + impl.Dgebrd(ma, na, a, lda, d, e, tauQ, tauP, work, lwork) + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + var tau []float64 + if vect == lapack.ApplyQ { + tau = tauQ + } else { + tau = tauP + } + + impl.Dorgbr(vect, m, n, k, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + lwork = len(work) + impl.Dorgbr(vect, m, n, k, a, lda, tau, work, lwork) + + var ans blas64.General + var nRows, nCols int + equal := true + if vect == lapack.ApplyQ { + nRows = m + nCols = m + if m >= k { + nCols = n + } + ans = constructQPBidiagonal(vect, ma, na, min(m, k), aCopy, lda, tau) + } else { + nRows = n + if k < n { + nRows = m + } + nCols = n + ansTmp := constructQPBidiagonal(vect, ma, na, min(k, n), aCopy, lda, tau) + // Dorgbr actually computes P^T + ans = transposeGeneral(ansTmp) + } + for i := 0; i < nRows; i++ { + for j := 0; j < nCols; j++ { + if !floats.EqualWithinAbsOrRel(a[i*lda+j], ans.Data[i*ans.Stride+j], 1e-8, 1e-8) { + equal = false + } + } + } + if !equal { + applyQ := vect == lapack.ApplyQ + t.Errorf("Extracted matrix mismatch. applyQ: %v, m = %v, n = %v, k = %v", applyQ, m, n, k) + } + } + } +} diff --git a/lapack/testlapack/dorghr.go b/lapack/testlapack/dorghr.go new file mode 100644 index 00000000..e72bd47e --- /dev/null +++ b/lapack/testlapack/dorghr.go @@ -0,0 +1,99 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dorghrer interface { + Dorghr(n, ilo, ihi int, a []float64, lda int, tau, work []float64, lwork int) + + Dgehrder +} + +func DorghrTest(t *testing.T, impl Dorghrer) { + rnd := rand.New(rand.NewSource(1)) + + for _, n := range []int{1, 2, 3, 4, 5, 6, 7, 8, 23, 34} { + for _, extra := range []int{0, 1, 13} { + for _, optwork := range []bool{true, false} { + for cas := 0; cas < 100; cas++ { + ilo := rnd.Intn(n) + ihi := rnd.Intn(n) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + testDorghr(t, impl, n, ilo, ihi, extra, optwork, rnd) + } + } + } + } + testDorghr(t, impl, 0, 0, -1, 0, false, rnd) + testDorghr(t, impl, 0, 0, -1, 0, true, rnd) +} + +func testDorghr(t *testing.T, impl Dorghrer, n, ilo, ihi, extra int, optwork bool, rnd *rand.Rand) { + const tol = 1e-14 + + // Construct the matrix A with elementary reflectors and scalar factors tau. + a := randomGeneral(n, n, n+extra, rnd) + var tau []float64 + if n > 1 { + tau = nanSlice(n - 1) + } + work := nanSlice(max(1, n)) // Minimum work for Dgehrd. + impl.Dgehrd(n, ilo, ihi, a.Data, a.Stride, tau, work, len(work)) + + // Extract Q for later comparison. + q := eye(n, n) + qCopy := cloneGeneral(q) + for j := ilo; j < ihi; j++ { + h := eye(n, n) + v := blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + v.Data[j+1] = 1 + for i := j + 2; i < ihi+1; i++ { + v.Data[i] = a.Data[i*a.Stride+j] + } + blas64.Ger(-tau[j], v, v, h) + copy(qCopy.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, h, 0, q) + } + + if optwork { + work = nanSlice(1) + impl.Dorghr(n, ilo, ihi, a.Data, a.Stride, tau, work, -1) + work = nanSlice(int(work[0])) + } else { + work = nanSlice(max(1, ihi-ilo)) + } + impl.Dorghr(n, ilo, ihi, a.Data, a.Stride, tau, work, len(work)) + + prefix := fmt.Sprintf("Case n=%v, ilo=%v, ihi=%v, extra=%v, optwork=%v", n, ilo, ihi, extra, optwork) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A\n%v", prefix, a.Data) + } + if !isOrthonormal(a) { + t.Errorf("%v: A is not orthogonal\n%v", prefix, a.Data) + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + aij := a.Data[i*a.Stride+j] + qij := q.Data[i*q.Stride+j] + if math.Abs(aij-qij) > tol { + t.Errorf("%v: unexpected value of A[%v,%v]. want %v, got %v", prefix, i, j, qij, aij) + } + } + } +} diff --git a/lapack/testlapack/dorgl2.go b/lapack/testlapack/dorgl2.go new file mode 100644 index 00000000..e0e6c5c7 --- /dev/null +++ b/lapack/testlapack/dorgl2.go @@ -0,0 +1,65 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dorgl2er interface { + Dgelqfer + Dorgl2(m, n, k int, a []float64, lda int, tau []float64, work []float64) +} + +func Dorgl2Test(t *testing.T, impl Dorgl2er) { + rnd := rand.New(rand.NewSource(1)) + for _, test := range []struct { + m, n, lda int + }{ + {3, 3, 0}, + {3, 4, 0}, + + {5, 5, 20}, + {5, 10, 20}, + } { + m := test.m + n := test.n + lda := test.lda + if lda == 0 { + lda = test.n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + k := min(m, n) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgelqf(m, n, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgelqf(m, n, a, lda, tau, work, len(work)) + + q := constructQ("LQ", m, n, a, lda, tau) + + impl.Dorgl2(m, n, k, a, lda, tau, work) + + // Check that the first m rows match. + same := true + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if !floats.EqualWithinAbsOrRel(q.Data[i*q.Stride+j], a[i*lda+j], 1e-12, 1e-12) { + same = false + break + } + } + } + if !same { + t.Errorf("Q mismatch") + } + } +} diff --git a/lapack/testlapack/dorglq.go b/lapack/testlapack/dorglq.go new file mode 100644 index 00000000..da2cdb7d --- /dev/null +++ b/lapack/testlapack/dorglq.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dorglqer interface { + Dorgl2er + Dorglq(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DorglqTest(t *testing.T, impl Dorglqer) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): Base tests off of nb and nx. + for _, test := range []struct{ m, n, k, lda int }{ + {10, 10, 10, 0}, + {10, 10, 10, 20}, + {10, 30, 10, 0}, + {20, 30, 10, 0}, + + {100, 100, 100, 0}, + {100, 100, 50, 0}, + {100, 130, 100, 0}, + {100, 130, 50, 0}, + {100, 100, 100, 150}, + {100, 100, 50, 150}, + {100, 130, 100, 150}, + {100, 130, 50, 150}, + + {200, 200, 200, 0}, + {200, 200, 150, 0}, + {200, 230, 200, 0}, + {200, 230, 150, 0}, + {200, 200, 200, 250}, + {200, 200, 150, 250}, + {200, 230, 200, 250}, + {200, 230, 150, 250}, + } { + m := test.m + n := test.n + k := test.k + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + work := make([]float64, 1) + tau := make([]float64, m) + for i := range tau { + tau[i] = math.NaN() + } + // Compute LQ factorization. + impl.Dgelqf(m, n, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgelqf(m, n, a, lda, tau, work, len(work)) + + aUnblocked := make([]float64, len(a)) + copy(aUnblocked, a) + for i := range work { + work[i] = math.NaN() + } + impl.Dorgl2(m, n, k, aUnblocked, lda, tau, work) + // make sure work isn't used before initialized + for i := range work { + work[i] = math.NaN() + } + impl.Dorglq(m, n, k, a, lda, tau, work, len(work)) + if !floats.EqualApprox(a, aUnblocked, 1e-10) { + t.Errorf("Q Mismatch. m = %d, n = %d, k = %d, lda = %d", m, n, k, lda) + } + } +} diff --git a/lapack/testlapack/dorgql.go b/lapack/testlapack/dorgql.go new file mode 100644 index 00000000..37d7a753 --- /dev/null +++ b/lapack/testlapack/dorgql.go @@ -0,0 +1,130 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dorgqler interface { + Dorgql(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) + + Dlarfger +} + +func DorgqlTest(t *testing.T, impl Dorgqler) { + const tol = 1e-14 + + type Dorg2ler interface { + Dorg2l(m, n, k int, a []float64, lda int, tau, work []float64) + } + dorg2ler, hasDorg2l := impl.(Dorg2ler) + + rnd := rand.New(rand.NewSource(1)) + for _, m := range []int{0, 1, 2, 3, 4, 5, 7, 10, 15, 30, 50, 150} { + for _, extra := range []int{0, 11} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + var k int + if m >= 129 { + // For large matrices make sure that k + // is large enough to trigger blocked + // path. + k = 129 + rnd.Intn(m-129+1) + } else { + k = rnd.Intn(m + 1) + } + n := k + rnd.Intn(m-k+1) + if m == 0 || n == 0 { + m = 0 + n = 0 + k = 0 + } + + // Generate k elementary reflectors in the last + // k columns of A. + a := nanGeneral(m, n, n+extra) + tau := make([]float64, k) + for l := 0; l < k; l++ { + jj := m - k + l + v := randomSlice(jj, rnd) + _, tau[l] = impl.Dlarfg(len(v)+1, rnd.NormFloat64(), v, 1) + j := n - k + l + for i := 0; i < jj; i++ { + a.Data[i*a.Stride+j] = v[i] + } + } + aCopy := cloneGeneral(a) + + // Compute the full matrix Q by forming the + // Householder reflectors explicitly. + q := eye(m, m) + qCopy := eye(m, m) + for l := 0; l < k; l++ { + h := eye(m, m) + jj := m - k + l + j := n - k + l + v := blas64.Vector{1, make([]float64, m)} + for i := 0; i < jj; i++ { + v.Data[i] = a.Data[i*a.Stride+j] + } + v.Data[jj] = 1 + blas64.Ger(-tau[l], v, v, h) + copy(qCopy.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, h, qCopy, 0, q) + } + // View the last n columns of Q as 'want'. + want := blas64.General{ + Rows: m, + Cols: n, + Stride: q.Stride, + Data: q.Data[m-n:], + } + + var lwork int + switch wl { + case minimumWork: + lwork = max(1, n) + case mediumWork: + work := make([]float64, 1) + impl.Dorgql(m, n, k, nil, a.Stride, nil, work, -1) + lwork = (int(work[0]) + n) / 2 + lwork = max(1, lwork) + case optimumWork: + work := make([]float64, 1) + impl.Dorgql(m, n, k, nil, a.Stride, nil, work, -1) + lwork = int(work[0]) + } + work := make([]float64, lwork) + + // Compute the last n columns of Q by a call to + // Dorgql. + impl.Dorgql(m, n, k, a.Data, a.Stride, tau, work, len(work)) + + prefix := fmt.Sprintf("Case m=%v,n=%v,k=%v,wl=%v", m, n, k, wl) + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + if !equalApproxGeneral(want, a, tol) { + t.Errorf("%v: unexpected Q", prefix) + } + + // Compute the last n columns of Q by a call to + // Dorg2l and check that we get the same result. + if !hasDorg2l { + continue + } + dorg2ler.Dorg2l(m, n, k, aCopy.Data, aCopy.Stride, tau, work) + if !equalApproxGeneral(aCopy, a, tol) { + t.Errorf("%v: mismatch between Dorgql and Dorg2l", prefix) + } + } + } + } +} diff --git a/lapack/testlapack/dorgqr.go b/lapack/testlapack/dorgqr.go new file mode 100644 index 00000000..2f647815 --- /dev/null +++ b/lapack/testlapack/dorgqr.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/floats" +) + +type Dorgqrer interface { + Dorg2rer + Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DorgqrTest(t *testing.T, impl Dorgqrer) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): Base tests off of nb and nx. + for _, test := range []struct{ m, n, k, lda int }{ + {10, 10, 10, 0}, + {10, 10, 10, 20}, + {30, 10, 10, 0}, + {30, 20, 10, 20}, + + {100, 100, 100, 0}, + {100, 100, 50, 0}, + {130, 100, 100, 0}, + {130, 100, 50, 0}, + {100, 100, 100, 150}, + {100, 100, 50, 150}, + {130, 100, 100, 150}, + {130, 100, 50, 150}, + + {200, 200, 200, 0}, + {200, 200, 150, 0}, + {230, 200, 200, 0}, + {230, 200, 150, 0}, + {200, 200, 200, 250}, + {200, 200, 150, 250}, + {230, 200, 200, 250}, + {230, 200, 150, 250}, + } { + m := test.m + n := test.n + k := test.k + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, m*lda) + for i := range a { + a[i] = rnd.Float64() + } + work := make([]float64, 1) + tau := make([]float64, n) + for i := range tau { + tau[i] = math.NaN() + } + // Compute QR factorization. + impl.Dgeqrf(m, n, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgeqrf(m, n, a, lda, tau, work, len(work)) + + aUnblocked := make([]float64, len(a)) + copy(aUnblocked, a) + for i := range work { + work[i] = math.NaN() + } + impl.Dorg2r(m, n, k, aUnblocked, lda, tau, work) + // make sure work isn't used before initialized + for i := range work { + work[i] = math.NaN() + } + impl.Dorgqr(m, n, k, a, lda, tau, work, len(work)) + if !floats.EqualApprox(a, aUnblocked, 1e-10) { + t.Errorf("Q Mismatch. m = %d, n = %d, k = %d, lda = %d", m, n, k, lda) + } + } +} diff --git a/lapack/testlapack/dorgtr.go b/lapack/testlapack/dorgtr.go new file mode 100644 index 00000000..b0e02f17 --- /dev/null +++ b/lapack/testlapack/dorgtr.go @@ -0,0 +1,136 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dorgtrer interface { + Dorgtr(uplo blas.Uplo, n int, a []float64, lda int, tau, work []float64, lwork int) + Dsytrder +} + +func DorgtrTest(t *testing.T, impl Dorgtrer) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + for _, test := range []struct { + n, lda int + }{ + {1, 0}, + {2, 0}, + {3, 0}, + {6, 0}, + {33, 0}, + {100, 0}, + + {1, 3}, + {2, 5}, + {3, 7}, + {6, 10}, + {33, 50}, + {100, 120}, + } { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + d := make([]float64, n) + e := make([]float64, n-1) + tau := make([]float64, n-1) + work := make([]float64, 1) + impl.Dsytrd(uplo, n, a, lda, d, e, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dsytrd(uplo, n, a, lda, d, e, tau, work, len(work)) + + var lwork int + switch wl { + case minimumWork: + lwork = max(1, n-1) + case mediumWork: + work := make([]float64, 1) + impl.Dorgtr(uplo, n, a, lda, tau, work, -1) + lwork = (int(work[0]) + n - 1) / 2 + lwork = max(1, lwork) + case optimumWork: + work := make([]float64, 1) + impl.Dorgtr(uplo, n, a, lda, tau, work, -1) + lwork = int(work[0]) + } + work = nanSlice(lwork) + + impl.Dorgtr(uplo, n, a, lda, tau, work, len(work)) + + q := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: a, + } + tri := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < n; i++ { + tri.Data[i*tri.Stride+i] = d[i] + if i != n-1 { + tri.Data[i*tri.Stride+i+1] = e[i] + tri.Data[(i+1)*tri.Stride+i] = e[i] + } + } + + aMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := aCopy[i*lda+j] + aMat.Data[i*aMat.Stride+j] = v + aMat.Data[j*aMat.Stride+i] = v + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + v := aCopy[i*lda+j] + aMat.Data[i*aMat.Stride+j] = v + aMat.Data[j*aMat.Stride+i] = v + } + } + } + + tmp := blas64.General{Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n)} + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, aMat, q, 0, tmp) + + ans := blas64.General{Rows: n, Cols: n, Stride: n, Data: make([]float64, n*n)} + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, tmp, 0, ans) + + if !floats.EqualApprox(ans.Data, tri.Data, 1e-13) { + t.Errorf("Recombination mismatch. n = %v, isUpper = %v", n, uplo == blas.Upper) + } + } + } + } +} diff --git a/lapack/testlapack/dorm2r.go b/lapack/testlapack/dorm2r.go new file mode 100644 index 00000000..d2598c74 --- /dev/null +++ b/lapack/testlapack/dorm2r.go @@ -0,0 +1,139 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dorm2rer interface { + Dgeqrfer + Dorm2r(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) +} + +func Dorm2rTest(t *testing.T, impl Dorm2rer) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + common, adim, cdim, lda, ldc int + }{ + {3, 4, 5, 0, 0}, + {3, 5, 4, 0, 0}, + {4, 3, 5, 0, 0}, + {4, 5, 3, 0, 0}, + {5, 3, 4, 0, 0}, + {5, 4, 3, 0, 0}, + {3, 4, 5, 6, 20}, + {3, 5, 4, 6, 20}, + {4, 3, 5, 6, 20}, + {4, 5, 3, 6, 20}, + {5, 3, 4, 6, 20}, + {5, 4, 3, 6, 20}, + {3, 4, 5, 20, 6}, + {3, 5, 4, 20, 6}, + {4, 3, 5, 20, 6}, + {4, 5, 3, 20, 6}, + {5, 3, 4, 20, 6}, + {5, 4, 3, 20, 6}, + } { + var ma, na, mc, nc int + if side == blas.Left { + ma = test.common + na = test.adim + mc = test.common + nc = test.cdim + } else { + ma = test.common + na = test.adim + mc = test.cdim + nc = test.common + } + + // Generate a random matrix + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := range a { + a[i] = rnd.Float64() + } + ldc := test.ldc + if ldc == 0 { + ldc = nc + } + // Compute random C matrix + c := make([]float64, mc*ldc) + for i := range c { + c[i] = rnd.Float64() + } + + // Compute QR + k := min(ma, na) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgeqrf(ma, na, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgeqrf(ma, na, a, lda, tau, work, len(work)) + + // Build Q from result + q := constructQ("QR", ma, na, a, lda, tau) + + cMat := blas64.General{ + Rows: mc, + Cols: nc, + Stride: ldc, + Data: make([]float64, len(c)), + } + copy(cMat.Data, c) + cMatCopy := blas64.General{ + Rows: cMat.Rows, + Cols: cMat.Cols, + Stride: cMat.Stride, + Data: make([]float64, len(cMat.Data)), + } + copy(cMatCopy.Data, cMat.Data) + switch { + default: + panic("bad test") + case side == blas.Left && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Left && trans == blas.Trans: + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Right && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, cMatCopy, q, 0, cMat) + case side == blas.Right && trans == blas.Trans: + blas64.Gemm(blas.NoTrans, blas.Trans, 1, cMatCopy, q, 0, cMat) + } + // Do Dorm2r ard compare + if side == blas.Left { + work = make([]float64, nc) + } else { + work = make([]float64, mc) + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + tauCopy := make([]float64, len(tau)) + copy(tauCopy, tau) + impl.Dorm2r(side, trans, mc, nc, k, a, lda, tau, c, ldc, work) + if !floats.Equal(a, aCopy) { + t.Errorf("a changed in call") + } + if !floats.Equal(tau, tauCopy) { + t.Errorf("tau changed in call") + } + if !floats.EqualApprox(cMat.Data, c, 1e-14) { + t.Errorf("Multiplication mismatch.\n Want %v \n got %v.", cMat.Data, c) + } + } + } + } +} diff --git a/lapack/testlapack/dormbr.go b/lapack/testlapack/dormbr.go new file mode 100644 index 00000000..53579793 --- /dev/null +++ b/lapack/testlapack/dormbr.go @@ -0,0 +1,164 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dormbrer interface { + Dormbr(vect lapack.DecompUpdate, side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) + Dgebrder +} + +func DormbrTest(t *testing.T, impl Dormbrer) { + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + for _, vect := range []lapack.DecompUpdate{lapack.ApplyQ, lapack.ApplyP} { + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + for _, test := range []struct { + m, n, k, lda, ldc int + }{ + {3, 4, 5, 0, 0}, + {3, 5, 4, 0, 0}, + {4, 3, 5, 0, 0}, + {4, 5, 3, 0, 0}, + {5, 3, 4, 0, 0}, + {5, 4, 3, 0, 0}, + + {3, 4, 5, 10, 12}, + {3, 5, 4, 10, 12}, + {4, 3, 5, 10, 12}, + {4, 5, 3, 10, 12}, + {5, 3, 4, 10, 12}, + {5, 4, 3, 10, 12}, + + {150, 140, 130, 0, 0}, + } { + m := test.m + n := test.n + k := test.k + ldc := test.ldc + if ldc == 0 { + ldc = n + } + nq := n + nw := m + if side == blas.Left { + nq = m + nw = n + } + + // Compute a decomposition. + var ma, na int + var a []float64 + if vect == lapack.ApplyQ { + ma = nq + na = k + } else { + ma = k + na = nq + } + lda := test.lda + if lda == 0 { + lda = na + } + a = make([]float64, ma*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + nTau := min(nq, k) + tauP := make([]float64, nTau) + tauQ := make([]float64, nTau) + d := make([]float64, nTau) + e := make([]float64, nTau) + + work := make([]float64, 1) + impl.Dgebrd(ma, na, a, lda, d, e, tauQ, tauP, work, -1) + work = make([]float64, int(work[0])) + impl.Dgebrd(ma, na, a, lda, d, e, tauQ, tauP, work, len(work)) + + // Apply and compare update. + c := make([]float64, m*ldc) + for i := range c { + c[i] = rnd.NormFloat64() + } + cCopy := make([]float64, len(c)) + copy(cCopy, c) + + var lwork int + switch wl { + case minimumWork: + lwork = nw + case optimumWork: + impl.Dormbr(vect, side, trans, m, n, k, a, lda, tauQ, c, ldc, work, -1) + lwork = int(work[0]) + case mediumWork: + work := make([]float64, 1) + impl.Dormbr(vect, side, trans, m, n, k, a, lda, tauQ, c, ldc, work, -1) + lwork = (int(work[0]) + nw) / 2 + } + lwork = max(1, lwork) + work = make([]float64, lwork) + + if vect == lapack.ApplyQ { + impl.Dormbr(vect, side, trans, m, n, k, a, lda, tauQ, c, ldc, work, lwork) + } else { + impl.Dormbr(vect, side, trans, m, n, k, a, lda, tauP, c, ldc, work, lwork) + } + + // Check that the multiplication was correct. + cOrig := blas64.General{ + Rows: m, + Cols: n, + Stride: ldc, + Data: make([]float64, len(cCopy)), + } + copy(cOrig.Data, cCopy) + cAns := blas64.General{ + Rows: m, + Cols: n, + Stride: ldc, + Data: make([]float64, len(cCopy)), + } + copy(cAns.Data, cCopy) + nb := min(ma, na) + var mulMat blas64.General + if vect == lapack.ApplyQ { + mulMat = constructQPBidiagonal(lapack.ApplyQ, ma, na, nb, a, lda, tauQ) + } else { + mulMat = constructQPBidiagonal(lapack.ApplyP, ma, na, nb, a, lda, tauP) + } + + mulTrans := trans + + if side == blas.Left { + bi.Dgemm(mulTrans, blas.NoTrans, m, n, m, 1, mulMat.Data, mulMat.Stride, cOrig.Data, cOrig.Stride, 0, cAns.Data, cAns.Stride) + } else { + bi.Dgemm(blas.NoTrans, mulTrans, m, n, n, 1, cOrig.Data, cOrig.Stride, mulMat.Data, mulMat.Stride, 0, cAns.Data, cAns.Stride) + } + + if !floats.EqualApprox(cAns.Data, c, 1e-13) { + isApplyQ := vect == lapack.ApplyQ + isLeft := side == blas.Left + isTrans := trans == blas.Trans + + t.Errorf("C mismatch. isApplyQ: %v, isLeft: %v, isTrans: %v, m = %v, n = %v, k = %v, lda = %v, ldc = %v", + isApplyQ, isLeft, isTrans, m, n, k, lda, ldc) + } + } + } + } + } + } +} diff --git a/lapack/testlapack/dormhr.go b/lapack/testlapack/dormhr.go new file mode 100644 index 00000000..462971a4 --- /dev/null +++ b/lapack/testlapack/dormhr.go @@ -0,0 +1,132 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dormhrer interface { + Dormhr(side blas.Side, trans blas.Transpose, m, n, ilo, ihi int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) + + Dgehrder +} + +func DormhrTest(t *testing.T, impl Dormhrer) { + rnd := rand.New(rand.NewSource(1)) + + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, m := range []int{1, 2, 3, 4, 5, 8, 9, 10, 23} { + for _, n := range []int{1, 2, 3, 4, 5, 8, 9, 10, 23} { + for _, extra := range []int{0, 1, 13} { + for cas := 0; cas < 10; cas++ { + nq := m + if side == blas.Right { + nq = n + } + ilo := rnd.Intn(nq) + ihi := rnd.Intn(nq) + if ilo > ihi { + ilo, ihi = ihi, ilo + } + testDormhr(t, impl, side, trans, m, n, ilo, ihi, extra, true, rnd) + testDormhr(t, impl, side, trans, m, n, ilo, ihi, extra, false, rnd) + } + } + } + } + } + } + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + testDormhr(t, impl, side, trans, 0, 0, 0, -1, 0, true, rnd) + testDormhr(t, impl, side, trans, 0, 0, 0, -1, 0, false, rnd) + } + } +} + +func testDormhr(t *testing.T, impl Dormhrer, side blas.Side, trans blas.Transpose, m, n, ilo, ihi, extra int, optwork bool, rnd *rand.Rand) { + const tol = 1e-14 + + var nq, nw int + switch side { + case blas.Left: + nq = m + nw = n + case blas.Right: + nq = n + nw = m + } + + // Compute the elementary reflectors and tau. + a := randomGeneral(nq, nq, nq+extra, rnd) + var tau []float64 + if nq > 1 { + tau = nanSlice(nq - 1) + } + work := nanSlice(max(1, nq)) // Minimum work for Dgehrd. + impl.Dgehrd(nq, ilo, ihi, a.Data, a.Stride, tau, work, len(work)) + + // Construct Q from the elementary reflectors in a and from tau. + q := eye(nq, nq) + qCopy := eye(nq, nq) + for j := ilo; j < ihi; j++ { + h := eye(nq, nq) + v := blas64.Vector{ + Inc: 1, + Data: make([]float64, nq), + } + v.Data[j+1] = 1 + for i := j + 2; i < ihi+1; i++ { + v.Data[i] = a.Data[i*a.Stride+j] + } + blas64.Ger(-tau[j], v, v, h) + copy(qCopy.Data, q.Data) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, h, 0, q) + } + + c := randomGeneral(m, n, n+extra, rnd) + + // Compute the product of Q and C explicitly. + qc := randomGeneral(m, n, n+extra, rnd) + if side == blas.Left { + blas64.Gemm(trans, blas.NoTrans, 1, q, c, 0, qc) + } else { + blas64.Gemm(blas.NoTrans, trans, 1, c, q, 0, qc) + } + + // Compute the product of Q and C using Dormhr. + if optwork { + work = nanSlice(1) + impl.Dormhr(side, trans, m, n, ilo, ihi, nil, a.Stride, nil, nil, c.Stride, work, -1) + work = nanSlice(int(work[0])) + } else { + work = nanSlice(max(1, nw)) + } + impl.Dormhr(side, trans, m, n, ilo, ihi, a.Data, a.Stride, tau, c.Data, c.Stride, work, len(work)) + + // Compare the two answers. + prefix := fmt.Sprintf("Case side=%v, trans=%v, m=%v, n=%v, ilo=%v, ihi=%v, extra=%v, optwork=%v", + side, trans, m, n, ilo, ihi, extra, optwork) + if !generalOutsideAllNaN(c) { + t.Errorf("%v: out-of-range write to C\n%v", prefix, c.Data) + } + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + cij := c.Data[i*c.Stride+j] + qcij := qc.Data[i*qc.Stride+j] + if math.Abs(cij-qcij) > tol { + t.Errorf("%v: unexpected value of the QC product at [%v,%v]: want %v, got %v", prefix, i, j, qcij, cij) + } + } + } +} diff --git a/lapack/testlapack/dorml2.go b/lapack/testlapack/dorml2.go new file mode 100644 index 00000000..cb3115bd --- /dev/null +++ b/lapack/testlapack/dorml2.go @@ -0,0 +1,144 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dorml2er interface { + Dgelqfer + Dorml2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) +} + +func Dorml2Test(t *testing.T, impl Dorml2er) { + rnd := rand.New(rand.NewSource(1)) + // TODO(btracey): This test is not complete, because it + // doesn't test individual values of m, n, and k, instead only testing + // a specific subset of possible k values. + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + common, adim, cdim, lda, ldc int + }{ + {3, 4, 5, 0, 0}, + {3, 5, 4, 0, 0}, + {4, 3, 5, 0, 0}, + {4, 5, 3, 0, 0}, + {5, 3, 4, 0, 0}, + {5, 4, 3, 0, 0}, + + {3, 4, 5, 6, 20}, + {3, 5, 4, 6, 20}, + {4, 3, 5, 6, 20}, + {4, 5, 3, 6, 20}, + {5, 3, 4, 6, 20}, + {5, 4, 3, 6, 20}, + {3, 4, 5, 20, 6}, + {3, 5, 4, 20, 6}, + {4, 3, 5, 20, 6}, + {4, 5, 3, 20, 6}, + {5, 3, 4, 20, 6}, + {5, 4, 3, 20, 6}, + } { + var ma, na, mc, nc int + if side == blas.Left { + ma = test.adim + na = test.common + mc = test.common + nc = test.cdim + } else { + ma = test.adim + na = test.common + mc = test.cdim + nc = test.common + } + // Generate a random matrix + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := range a { + a[i] = rnd.Float64() + } + ldc := test.ldc + if ldc == 0 { + ldc = nc + } + // Compute random C matrix + c := make([]float64, mc*ldc) + for i := range c { + c[i] = rnd.Float64() + } + + // Compute LQ + k := min(ma, na) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgelqf(ma, na, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgelqf(ma, na, a, lda, tau, work, len(work)) + + // Build Q from result + q := constructQ("LQ", ma, na, a, lda, tau) + + cMat := blas64.General{ + Rows: mc, + Cols: nc, + Stride: ldc, + Data: make([]float64, len(c)), + } + copy(cMat.Data, c) + cMatCopy := blas64.General{ + Rows: cMat.Rows, + Cols: cMat.Cols, + Stride: cMat.Stride, + Data: make([]float64, len(cMat.Data)), + } + copy(cMatCopy.Data, cMat.Data) + switch { + default: + panic("bad test") + case side == blas.Left && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Left && trans == blas.Trans: + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Right && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, cMatCopy, q, 0, cMat) + case side == blas.Right && trans == blas.Trans: + blas64.Gemm(blas.NoTrans, blas.Trans, 1, cMatCopy, q, 0, cMat) + } + // Do Dorm2r ard compare + if side == blas.Left { + work = make([]float64, nc) + } else { + work = make([]float64, mc) + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + tauCopy := make([]float64, len(tau)) + copy(tauCopy, tau) + impl.Dorml2(side, trans, mc, nc, k, a, lda, tau, c, ldc, work) + if !floats.Equal(a, aCopy) { + t.Errorf("a changed in call") + } + if !floats.Equal(tau, tauCopy) { + t.Errorf("tau changed in call") + } + if !floats.EqualApprox(cMat.Data, c, 1e-14) { + isLeft := side == blas.Left + isTrans := trans == blas.Trans + t.Errorf("Multiplication mismatch. IsLeft = %v. IsTrans = %v", isLeft, isTrans) + } + } + } + } +} diff --git a/lapack/testlapack/dormlq.go b/lapack/testlapack/dormlq.go new file mode 100644 index 00000000..a173443c --- /dev/null +++ b/lapack/testlapack/dormlq.go @@ -0,0 +1,130 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/floats" +) + +type Dormlqer interface { + Dorml2er + Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) +} + +func DormlqTest(t *testing.T, impl Dormlqer) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + for _, test := range []struct { + common, adim, cdim, lda, ldc int + }{ + {0, 0, 0, 0, 0}, + {6, 7, 8, 0, 0}, + {6, 8, 7, 0, 0}, + {7, 6, 8, 0, 0}, + {7, 8, 6, 0, 0}, + {8, 6, 7, 0, 0}, + {8, 7, 6, 0, 0}, + {100, 200, 300, 0, 0}, + {100, 300, 200, 0, 0}, + {200, 100, 300, 0, 0}, + {200, 300, 100, 0, 0}, + {300, 100, 200, 0, 0}, + {300, 200, 100, 0, 0}, + {100, 200, 300, 400, 500}, + {100, 300, 200, 400, 500}, + {200, 100, 300, 400, 500}, + {200, 300, 100, 400, 500}, + {300, 100, 200, 400, 500}, + {300, 200, 100, 400, 500}, + {100, 200, 300, 500, 400}, + {100, 300, 200, 500, 400}, + {200, 100, 300, 500, 400}, + {200, 300, 100, 500, 400}, + {300, 100, 200, 500, 400}, + {300, 200, 100, 500, 400}, + } { + var ma, na, mc, nc int + if side == blas.Left { + ma = test.adim + na = test.common + mc = test.common + nc = test.cdim + } else { + ma = test.adim + na = test.common + mc = test.cdim + nc = test.common + } + // Generate a random matrix + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := range a { + a[i] = rnd.Float64() + } + // Compute random C matrix + ldc := test.ldc + if ldc == 0 { + ldc = nc + } + c := make([]float64, mc*ldc) + for i := range c { + c[i] = rnd.Float64() + } + + // Compute LQ + k := min(ma, na) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgelqf(ma, na, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgelqf(ma, na, a, lda, tau, work, len(work)) + + cCopy := make([]float64, len(c)) + copy(cCopy, c) + ans := make([]float64, len(c)) + copy(ans, cCopy) + + var nw int + if side == blas.Left { + nw = nc + } else { + nw = mc + } + work = make([]float64, max(1, nw)) + impl.Dorml2(side, trans, mc, nc, k, a, lda, tau, ans, ldc, work) + + var lwork int + switch wl { + case minimumWork: + lwork = nw + case optimumWork: + impl.Dormlq(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, -1) + lwork = int(work[0]) + case mediumWork: + work := make([]float64, 1) + impl.Dormlq(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, -1) + lwork = (int(work[0]) + nw) / 2 + } + lwork = max(1, lwork) + work = make([]float64, lwork) + + impl.Dormlq(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, lwork) + if !floats.EqualApprox(c, ans, 1e-13) { + t.Errorf("Dormqr and Dorm2r results mismatch") + } + } + } + } + } +} diff --git a/lapack/testlapack/dormqr.go b/lapack/testlapack/dormqr.go new file mode 100644 index 00000000..c2161096 --- /dev/null +++ b/lapack/testlapack/dormqr.go @@ -0,0 +1,154 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/floats" +) + +type Dormqrer interface { + Dorm2rer + Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) +} + +func DormqrTest(t *testing.T, impl Dormqrer) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + common, adim, cdim, lda, ldc int + }{ + {6, 7, 8, 0, 0}, + {6, 8, 7, 0, 0}, + {7, 6, 8, 0, 0}, + {7, 8, 6, 0, 0}, + {8, 6, 7, 0, 0}, + {8, 7, 6, 0, 0}, + {100, 200, 300, 0, 0}, + {100, 300, 200, 0, 0}, + {200, 100, 300, 0, 0}, + {200, 300, 100, 0, 0}, + {300, 100, 200, 0, 0}, + {300, 200, 100, 0, 0}, + {100, 200, 300, 400, 500}, + {100, 300, 200, 400, 500}, + {200, 100, 300, 400, 500}, + {200, 300, 100, 400, 500}, + {300, 100, 200, 400, 500}, + {300, 200, 100, 400, 500}, + {100, 200, 300, 500, 400}, + {100, 300, 200, 500, 400}, + {200, 100, 300, 500, 400}, + {200, 300, 100, 500, 400}, + {300, 100, 200, 500, 400}, + {300, 200, 100, 500, 400}, + } { + var ma, na, mc, nc int + if side == blas.Left { + ma = test.common + na = test.adim + mc = test.common + nc = test.cdim + } else { + ma = test.common + na = test.adim + mc = test.cdim + nc = test.common + } + // Generate a random matrix + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := range a { + a[i] = rnd.Float64() + } + // Compute random C matrix + ldc := test.ldc + if ldc == 0 { + ldc = nc + } + c := make([]float64, mc*ldc) + for i := range c { + c[i] = rnd.Float64() + } + + // Compute QR + k := min(ma, na) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgeqrf(ma, na, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgeqrf(ma, na, a, lda, tau, work, len(work)) + + cCopy := make([]float64, len(c)) + copy(cCopy, c) + ans := make([]float64, len(c)) + copy(ans, cCopy) + + if side == blas.Left { + work = make([]float64, nc) + } else { + work = make([]float64, mc) + } + impl.Dorm2r(side, trans, mc, nc, k, a, lda, tau, ans, ldc, work) + + // Make sure Dorm2r and Dormqr match with small work + for i := range work { + work[i] = rnd.Float64() + } + copy(c, cCopy) + impl.Dormqr(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, len(work)) + if !floats.EqualApprox(c, ans, 1e-12) { + t.Errorf("Dormqr and Dorm2r mismatch for small work") + } + + // Try with the optimum amount of work + copy(c, cCopy) + impl.Dormqr(side, trans, mc, nc, k, nil, lda, nil, nil, ldc, work, -1) + work = make([]float64, int(work[0])) + for i := range work { + work[i] = rnd.Float64() + } + impl.Dormqr(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, len(work)) + if !floats.EqualApprox(c, ans, 1e-12) { + t.Errorf("Dormqr and Dorm2r mismatch for full work") + fmt.Println("ccopy") + for i := 0; i < mc; i++ { + fmt.Println(cCopy[i*ldc : (i+1)*ldc]) + } + fmt.Println("ans =") + for i := 0; i < mc; i++ { + fmt.Println(ans[i*ldc : (i+1)*ldc]) + } + fmt.Println("c =") + for i := 0; i < mc; i++ { + fmt.Println(c[i*ldc : (i+1)*ldc]) + } + } + + // Try with amount of work that is less than + // optimal but still long enough to use the + // blocked code. + copy(c, cCopy) + if side == blas.Left { + work = make([]float64, 3*nc) + } else { + work = make([]float64, 3*mc) + } + impl.Dormqr(side, trans, mc, nc, k, a, lda, tau, c, ldc, work, len(work)) + if !floats.EqualApprox(c, ans, 1e-12) { + t.Errorf("Dormqr and Dorm2r mismatch for medium work") + } + } + } + } +} diff --git a/lapack/testlapack/dormr2.go b/lapack/testlapack/dormr2.go new file mode 100644 index 00000000..6c199be5 --- /dev/null +++ b/lapack/testlapack/dormr2.go @@ -0,0 +1,137 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dormr2er interface { + Dgerqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) + Dormr2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) +} + +func Dormr2Test(t *testing.T, impl Dormr2er) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []blas.Side{blas.Left, blas.Right} { + for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { + for _, test := range []struct { + common, adim, cdim, lda, ldc int + }{ + {3, 4, 5, 0, 0}, + {3, 5, 4, 0, 0}, + {4, 3, 5, 0, 0}, + {4, 5, 3, 0, 0}, + {5, 3, 4, 0, 0}, + {5, 4, 3, 0, 0}, + {3, 4, 5, 6, 20}, + {3, 5, 4, 6, 20}, + {4, 3, 5, 6, 20}, + {4, 5, 3, 6, 20}, + {5, 3, 4, 6, 20}, + {5, 4, 3, 6, 20}, + {3, 4, 5, 20, 6}, + {3, 5, 4, 20, 6}, + {4, 3, 5, 20, 6}, + {4, 5, 3, 20, 6}, + {5, 3, 4, 20, 6}, + {5, 4, 3, 20, 6}, + } { + ma := test.adim + na := test.common + var mc, nc int + if side == blas.Left { + mc = test.common + nc = test.cdim + } else { + mc = test.cdim + nc = test.common + } + + // Generate a random matrix + lda := test.lda + if lda == 0 { + lda = na + } + a := make([]float64, ma*lda) + for i := range a { + a[i] = rnd.Float64() + } + ldc := test.ldc + if ldc == 0 { + ldc = nc + } + // Compute random C matrix + c := make([]float64, mc*ldc) + for i := range c { + c[i] = rnd.Float64() + } + + // Compute RQ + k := min(ma, na) + tau := make([]float64, k) + work := make([]float64, 1) + impl.Dgerqf(ma, na, a, lda, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dgerqf(ma, na, a, lda, tau, work, len(work)) + + // Build Q from result + q := constructQ("RQ", ma, na, a, lda, tau) + + cMat := blas64.General{ + Rows: mc, + Cols: nc, + Stride: ldc, + Data: make([]float64, len(c)), + } + copy(cMat.Data, c) + cMatCopy := blas64.General{ + Rows: cMat.Rows, + Cols: cMat.Cols, + Stride: cMat.Stride, + Data: make([]float64, len(cMat.Data)), + } + copy(cMatCopy.Data, cMat.Data) + switch { + default: + panic("bad test") + case side == blas.Left && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Left && trans == blas.Trans: + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, cMatCopy, 0, cMat) + case side == blas.Right && trans == blas.NoTrans: + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, cMatCopy, q, 0, cMat) + case side == blas.Right && trans == blas.Trans: + blas64.Gemm(blas.NoTrans, blas.Trans, 1, cMatCopy, q, 0, cMat) + } + // Do Dorm2r ard compare + if side == blas.Left { + work = make([]float64, nc) + } else { + work = make([]float64, mc) + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + tauCopy := make([]float64, len(tau)) + copy(tauCopy, tau) + impl.Dormr2(side, trans, mc, nc, k, a[(ma-k)*lda:], lda, tau, c, ldc, work) + if !floats.Equal(a, aCopy) { + t.Errorf("a changed in call") + } + if !floats.Equal(tau, tauCopy) { + t.Errorf("tau changed in call") + } + if !floats.EqualApprox(cMat.Data, c, 1e-14) { + t.Errorf("Multiplication mismatch.\n Want %v \n got %v.", cMat.Data, c) + } + } + } + } +} diff --git a/lapack/testlapack/dpocon.go b/lapack/testlapack/dpocon.go new file mode 100644 index 00000000..b300ea29 --- /dev/null +++ b/lapack/testlapack/dpocon.go @@ -0,0 +1,157 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "log" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dpoconer interface { + Dpotrfer + Dgeconer + Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 + Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64 +} + +func DpoconTest(t *testing.T, impl Dpoconer) { + for _, test := range []struct { + a []float64 + n int + cond float64 + uplo blas.Uplo + }{ + { + a: []float64{ + 89, 59, 77, + 0, 107, 59, + 0, 0, 89, + }, + uplo: blas.Upper, + n: 3, + cond: 0.050052137643379, + }, + { + a: []float64{ + 89, 0, 0, + 59, 107, 0, + 77, 59, 89, + }, + uplo: blas.Lower, + n: 3, + cond: 0.050052137643379, + }, + // Dgecon does not match Dpocon for this case. https://github.com/xianyi/OpenBLAS/issues/664. + { + a: []float64{ + 2.9995576045549965, -2.0898894566158663, 3.965560740124006, + 0, 1.9634729526261008, -2.8681002706874104, + 0, 0, 5.502416670471008, + }, + uplo: blas.Upper, + n: 3, + cond: 0.024054837369015203, + }, + } { + n := test.n + a := make([]float64, len(test.a)) + copy(a, test.a) + lda := n + uplo := test.uplo + work := make([]float64, 3*n) + anorm := impl.Dlansy(lapack.MaxColumnSum, uplo, n, a, lda, work) + // Compute cholesky decomposition + ok := impl.Dpotrf(uplo, n, a, lda) + if !ok { + t.Errorf("Bad test, matrix not positive definite") + continue + } + iwork := make([]int, n) + cond := impl.Dpocon(uplo, n, a, lda, anorm, work, iwork) + // Error if not the same order, otherwise log the difference. + if !floats.EqualWithinAbsOrRel(cond, test.cond, 1e0, 1e0) { + t.Errorf("Cond mismatch. Want %v, got %v.", test.cond, cond) + } else if !floats.EqualWithinAbsOrRel(cond, test.cond, 1e-14, 1e-14) { + log.Printf("Dpocon cond mismatch. Want %v, got %v.", test.cond, cond) + } + } + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + // Randomized tests compared against Dgecon. + for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { + for _, test := range []struct { + n, lda int + }{ + {3, 0}, + {3, 5}, + } { + for trial := 0; trial < 100; trial++ { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + + // Multiply a by itself to make it symmetric positive definite. + aCopy := make([]float64, len(a)) + copy(aCopy, a) + bi.Dgemm(blas.Trans, blas.NoTrans, n, n, n, 1, aCopy, lda, aCopy, lda, 0, a, lda) + + aDat := make([]float64, len(aCopy)) + copy(aDat, a) + + aDense := make([]float64, len(a)) + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := a[i*lda+j] + aDense[i*lda+j] = v + aDense[j*lda+i] = v + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + v := a[i*lda+j] + aDense[i*lda+j] = v + aDense[j*lda+i] = v + } + } + } + work := make([]float64, 4*n) + iwork := make([]int, n) + + anorm := impl.Dlansy(lapack.MaxColumnSum, uplo, n, a, lda, work) + ok := impl.Dpotrf(uplo, n, a, lda) + if !ok { + t.Errorf("Bad test, matrix not positive definite") + continue + } + got := impl.Dpocon(uplo, n, a, lda, anorm, work, iwork) + + denseNorm := impl.Dlange(lapack.MaxColumnSum, n, n, aDense, lda, work) + ipiv := make([]int, n) + impl.Dgetrf(n, n, aDense, lda, ipiv) + want := impl.Dgecon(lapack.MaxColumnSum, n, aDense, lda, denseNorm, work, iwork) + // Error if not the same order, otherwise log the difference. + if !floats.EqualWithinAbsOrRel(want, got, 1e0, 1e0) { + t.Errorf("Dpocon and Dgecon mismatch. Dpocon %v, Dgecon %v.", got, want) + } else if !floats.EqualWithinAbsOrRel(want, got, 1e-14, 1e-14) { + log.Printf("Dpocon and Dgecon mismatch. Dpocon %v, Dgecon %v.", got, want) + } + } + } + } +} diff --git a/lapack/testlapack/dpotf2.go b/lapack/testlapack/dpotf2.go new file mode 100644 index 00000000..76779472 --- /dev/null +++ b/lapack/testlapack/dpotf2.go @@ -0,0 +1,118 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "testing" + + "github.com/gonum/blas" + "github.com/gonum/floats" +) + +type Dpotf2er interface { + Dpotf2(ul blas.Uplo, n int, a []float64, lda int) (ok bool) +} + +func Dpotf2Test(t *testing.T, impl Dpotf2er) { + for _, test := range []struct { + a [][]float64 + ul blas.Uplo + pos bool + U [][]float64 + }{ + { + a: [][]float64{ + {23, 37, 34, 32}, + {108, 71, 48, 48}, + {109, 109, 67, 58}, + {106, 107, 106, 63}, + }, + pos: true, + U: [][]float64{ + {4.795831523312719, 7.715033320111766, 7.089490077940543, 6.672461249826393}, + {0, 3.387958215439679, -1.976308959006481, -1.026654004678691}, + {0, 0, 3.582364210034111, 2.419258947036024}, + {0, 0, 0, 3.401680257083044}, + }, + }, + { + a: [][]float64{ + {8, 2}, + {2, 4}, + }, + pos: true, + U: [][]float64{ + {2.82842712474619, 0.707106781186547}, + {0, 1.870828693386971}, + }, + }, + } { + testDpotf2(t, impl, test.pos, test.a, test.U, len(test.a[0]), blas.Upper) + testDpotf2(t, impl, test.pos, test.a, test.U, len(test.a[0])+5, blas.Upper) + aT := transpose(test.a) + L := transpose(test.U) + testDpotf2(t, impl, test.pos, aT, L, len(test.a[0]), blas.Lower) + testDpotf2(t, impl, test.pos, aT, L, len(test.a[0])+5, blas.Lower) + } +} + +func testDpotf2(t *testing.T, impl Dpotf2er, testPos bool, a, ans [][]float64, stride int, ul blas.Uplo) { + aFlat := flattenTri(a, stride, ul) + ansFlat := flattenTri(ans, stride, ul) + pos := impl.Dpotf2(ul, len(a[0]), aFlat, stride) + if pos != testPos { + t.Errorf("Positive definite mismatch: Want %v, Got %v", testPos, pos) + return + } + if testPos && !floats.EqualApprox(ansFlat, aFlat, 1e-14) { + t.Errorf("Result mismatch: Want %v, Got %v", ansFlat, aFlat) + } +} + +// flattenTri with a certain stride. stride must be >= dimension. Puts repeatable +// nonce values in non-accessed places +func flattenTri(a [][]float64, stride int, ul blas.Uplo) []float64 { + m := len(a) + n := len(a[0]) + if stride < n { + panic("bad stride") + } + upper := ul == blas.Upper + v := make([]float64, m*stride) + count := 1000.0 + for i := 0; i < m; i++ { + for j := 0; j < stride; j++ { + if j >= n || (upper && j < i) || (!upper && j > i) { + // not accessed, so give a unique crazy number + v[i*stride+j] = count + count++ + continue + } + v[i*stride+j] = a[i][j] + } + } + return v +} + +func transpose(a [][]float64) [][]float64 { + m := len(a) + n := len(a[0]) + if m != n { + panic("not square") + } + aNew := make([][]float64, m) + for i := 0; i < m; i++ { + aNew[i] = make([]float64, n) + } + for i := 0; i < m; i++ { + if len(a[i]) != n { + panic("bad n size") + } + for j := 0; j < n; j++ { + aNew[j][i] = a[i][j] + } + } + return aNew +} diff --git a/lapack/testlapack/dpotrf.go b/lapack/testlapack/dpotrf.go new file mode 100644 index 00000000..7494c623 --- /dev/null +++ b/lapack/testlapack/dpotrf.go @@ -0,0 +1,135 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dpotrfer interface { + Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) +} + +func DpotrfTest(t *testing.T, impl Dpotrfer) { + const tol = 1e-13 + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for tc, test := range []struct { + n int + lda int + }{ + {1, 0}, + {2, 0}, + {3, 0}, + {10, 0}, + {30, 0}, + {63, 0}, + {65, 0}, + {127, 0}, + {129, 0}, + {500, 0}, + {1, 10}, + {2, 10}, + {3, 10}, + {10, 20}, + {30, 50}, + {63, 100}, + {65, 100}, + {127, 200}, + {129, 200}, + {500, 600}, + } { + n := test.n + + // Random diagonal matrix D with positive entries. + d := make([]float64, n) + Dlatm1(d, 4, 10000, false, 1, rnd) + + // Construct a positive definite matrix A as + // A = U * D * U^T + // where U is a random orthogonal matrix. + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + Dlagsy(n, 0, d, a, lda, rnd, make([]float64, 2*n)) + + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + ok := impl.Dpotrf(uplo, n, a, lda) + if !ok { + t.Errorf("Case %v: unexpected failure for positive definite matrix", tc) + continue + } + + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + a[i*lda+j] = 0 + } + } + case blas.Lower: + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + a[i*lda+j] = 0 + } + } + default: + panic("bad uplo") + } + + ans := make([]float64, len(a)) + switch uplo { + case blas.Upper: + // Multiply U^T * U. + bi.Dsyrk(uplo, blas.Trans, n, n, 1, a, lda, 0, ans, lda) + case blas.Lower: + // Multiply L * L^T. + bi.Dsyrk(uplo, blas.NoTrans, n, n, 1, a, lda, 0, ans, lda) + } + + match := true + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + if !floats.EqualWithinAbsOrRel(ans[i*lda+j], aCopy[i*lda+j], tol, tol) { + match = false + } + } + } + case blas.Lower: + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + if !floats.EqualWithinAbsOrRel(ans[i*lda+j], aCopy[i*lda+j], tol, tol) { + match = false + } + } + } + } + if !match { + t.Errorf("Case %v (uplo=%v,n=%v,lda=%v): unexpected result", tc, uplo, n, lda) + } + + // Make one element of D negative so that A is not + // positive definite, and check that Dpotrf fails. + d[0] *= -1 + Dlagsy(n, 0, d, a, lda, rnd, make([]float64, 2*n)) + ok = impl.Dpotrf(uplo, n, a, lda) + if ok { + t.Errorf("Case %v: unexpected success for not positive definite matrix", tc) + } + } + } +} diff --git a/lapack/testlapack/drscl.go b/lapack/testlapack/drscl.go new file mode 100644 index 00000000..a398f2ce --- /dev/null +++ b/lapack/testlapack/drscl.go @@ -0,0 +1,52 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "testing" + + "github.com/gonum/floats" +) + +type Drscler interface { + Drscl(n int, a float64, x []float64, incX int) +} + +func DrsclTest(t *testing.T, impl Drscler) { + for _, test := range []struct { + x []float64 + a float64 + }{ + { + x: []float64{1, 2, 3, 4, 5}, + a: 4, + }, + { + x: []float64{1, 2, 3, 4, 5}, + a: math.MaxFloat64, + }, + { + x: []float64{1, 2, 3, 4, 5}, + a: 1e-307, + }, + } { + xcopy := make([]float64, len(test.x)) + copy(xcopy, test.x) + + // Cannot test the scaling directly because of floating point scaling issues + // (the purpose of Drscl). Instead, check that scaling and scaling back + // yeilds approximately x. If overflow or underflow occurs then the scaling + // won't match. + impl.Drscl(len(test.x), test.a, xcopy, 1) + if floats.Equal(xcopy, test.x) { + t.Errorf("x unchanged during call to drscl. a = %v, x = %v.", test.a, test.x) + } + impl.Drscl(len(test.x), 1/test.a, xcopy, 1) + if !floats.EqualApprox(xcopy, test.x, 1e-14) { + t.Errorf("x not equal after scaling and unscaling. a = %v, x = %v.", test.a, test.x) + } + } +} diff --git a/lapack/testlapack/dsteqr.go b/lapack/testlapack/dsteqr.go new file mode 100644 index 00000000..3325248b --- /dev/null +++ b/lapack/testlapack/dsteqr.go @@ -0,0 +1,171 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dsteqrer interface { + Dsteqr(compz lapack.EVComp, n int, d, e, z []float64, ldz int, work []float64) (ok bool) + Dorgtrer +} + +func DsteqrTest(t *testing.T, impl Dsteqrer) { + rnd := rand.New(rand.NewSource(1)) + for _, compz := range []lapack.EVComp{lapack.OriginalEV, lapack.TridiagEV} { + for _, test := range []struct { + n, lda int + }{ + {1, 0}, + {4, 0}, + {8, 0}, + {10, 0}, + + {2, 10}, + {8, 10}, + {10, 20}, + } { + for cas := 0; cas < 100; cas++ { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + d := make([]float64, n) + for i := range d { + d[i] = rnd.Float64() + } + e := make([]float64, n-1) + for i := range e { + e[i] = rnd.Float64() + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.Float64() + } + dCopy := make([]float64, len(d)) + copy(dCopy, d) + eCopy := make([]float64, len(e)) + copy(eCopy, e) + aCopy := make([]float64, len(a)) + copy(aCopy, a) + if compz == lapack.OriginalEV { + // Compute triangular decomposition and orthonormal matrix. + uplo := blas.Upper + tau := make([]float64, n) + work := make([]float64, 1) + impl.Dsytrd(blas.Upper, n, a, lda, d, e, tau, work, -1) + work = make([]float64, int(work[0])) + impl.Dsytrd(uplo, n, a, lda, d, e, tau, work, len(work)) + impl.Dorgtr(uplo, n, a, lda, tau, work, len(work)) + } else { + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = 0 + if i == j { + a[i*lda+j] = 1 + } + } + } + } + work := make([]float64, 2*n) + + aDecomp := make([]float64, len(a)) + copy(aDecomp, a) + dDecomp := make([]float64, len(d)) + copy(dDecomp, d) + eDecomp := make([]float64, len(e)) + copy(eDecomp, e) + impl.Dsteqr(compz, n, d, e, a, lda, work) + dAns := make([]float64, len(d)) + copy(dAns, d) + + var truth blas64.General + if compz == lapack.OriginalEV { + truth = blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := aCopy[i*lda+j] + truth.Data[i*truth.Stride+j] = v + truth.Data[j*truth.Stride+i] = v + } + } + } else { + truth = blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < n; i++ { + truth.Data[i*truth.Stride+i] = dCopy[i] + if i != n-1 { + truth.Data[(i+1)*truth.Stride+i] = eCopy[i] + truth.Data[i*truth.Stride+i+1] = eCopy[i] + } + } + } + + V := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: a, + } + if !eigenDecompCorrect(d, truth, V) { + t.Errorf("Eigen reconstruction mismatch. fromFull = %v, n = %v", + compz == lapack.OriginalEV, n) + } + + // Compare eigenvalues when not computing eigenvectors. + for i := range work { + work[i] = rnd.Float64() + } + impl.Dsteqr(lapack.None, n, dDecomp, eDecomp, aDecomp, lda, work) + if !floats.EqualApprox(d, dAns, 1e-8) { + t.Errorf("Eigenvalue mismatch when eigenvectors not computed") + } + } + } + } +} + +// eigenDecompCorrect returns whether the eigen decomposition is correct. +// It checks if +// A * v ≈ λ * v +// where the eigenvalues λ are stored in values, and the eigenvectors are stored +// in the columns of v. +func eigenDecompCorrect(values []float64, A, V blas64.General) bool { + n := A.Rows + for i := 0; i < n; i++ { + lambda := values[i] + vector := make([]float64, n) + ans2 := make([]float64, n) + for j := range vector { + v := V.Data[j*V.Stride+i] + vector[j] = v + ans2[j] = lambda * v + } + v := blas64.Vector{Inc: 1, Data: vector} + ans1 := blas64.Vector{Inc: 1, Data: make([]float64, n)} + blas64.Gemv(blas.NoTrans, 1, A, v, 0, ans1) + if !floats.EqualApprox(ans1.Data, ans2, 1e-8) { + return false + } + } + return true +} diff --git a/lapack/testlapack/dsterf.go b/lapack/testlapack/dsterf.go new file mode 100644 index 00000000..9b26c83b --- /dev/null +++ b/lapack/testlapack/dsterf.go @@ -0,0 +1,126 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "sort" + "testing" + + "github.com/gonum/floats" +) + +type Dsterfer interface { + Dgetrfer + Dsterf(n int, d, e []float64) (ok bool) +} + +func DsterfTest(t *testing.T, impl Dsterfer) { + // Hand coded tests. + for cas, test := range []struct { + d []float64 + e []float64 + n int + + ans []float64 + }{ + // Computed from Fortran code. + { + d: []float64{1, 3, 4, 6}, + e: []float64{2, 4, 5}, + n: 4, + ans: []float64{11.046227528488854, 4.795922173417400, -2.546379458290125, 0.704229756383872}, + }, + } { + n := test.n + d := make([]float64, len(test.d)) + copy(d, test.d) + e := make([]float64, len(test.e)) + copy(e, test.e) + ok := impl.Dsterf(n, d, e) + if !ok { + t.Errorf("Case %d, Eigenvalue decomposition failed", cas) + continue + } + ans := make([]float64, len(test.ans)) + copy(ans, test.ans) + sort.Float64s(ans) + if !floats.EqualApprox(ans, d, 1e-10) { + t.Errorf("eigenvalue mismatch") + } + } + + rnd := rand.New(rand.NewSource(1)) + // Probabilistic tests. + for _, n := range []int{4, 6, 10} { + for cas := 0; cas < 10; cas++ { + d := make([]float64, n) + for i := range d { + d[i] = rnd.NormFloat64() + } + dCopy := make([]float64, len(d)) + copy(dCopy, d) + e := make([]float64, n-1) + for i := range e { + e[i] = rnd.NormFloat64() + } + eCopy := make([]float64, len(e)) + copy(eCopy, e) + + ok := impl.Dsterf(n, d, e) + if !ok { + t.Errorf("Eigenvalue decomposition failed") + continue + } + + // Test that the eigenvalues are sorted. + if !sort.Float64sAreSorted(d) { + t.Errorf("Values are not sorted") + } + + // Construct original tridagional matrix. + lda := n + a := make([]float64, n*lda) + for i := 0; i < n; i++ { + a[i*lda+i] = dCopy[i] + if i != n-1 { + a[i*lda+i+1] = eCopy[i] + a[(i+1)*lda+i] = eCopy[i] + } + } + + asub := make([]float64, len(a)) + ipiv := make([]int, n) + + // Test that they are actually eigenvalues by computing the + // determinant of A - λI. + // TODO(btracey): Replace this test with a more numerically stable + // test. + for _, lambda := range d { + copy(asub, a) + for i := 0; i < n; i++ { + asub[i*lda+i] -= lambda + } + + // Compute LU. + ok := impl.Dgetrf(n, n, asub, lda, ipiv) + if !ok { + // Definitely singular. + continue + } + // Compute determinant. + var logdet float64 + for i := 0; i < n; i++ { + v := asub[i*lda+i] + logdet += math.Log(math.Abs(v)) + } + if math.Exp(logdet) > 2 { + t.Errorf("Incorrect singular value. n = %d, cas = %d, det = %v", n, cas, math.Exp(logdet)) + } + } + } + } +} diff --git a/lapack/testlapack/dsyev.go b/lapack/testlapack/dsyev.go new file mode 100644 index 00000000..104451b5 --- /dev/null +++ b/lapack/testlapack/dsyev.go @@ -0,0 +1,115 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dsyever interface { + Dsyev(jobz lapack.EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool) +} + +func DsyevTest(t *testing.T, impl Dsyever) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { + for _, test := range []struct { + n, lda int + }{ + {1, 0}, + {2, 0}, + {5, 0}, + {10, 0}, + {100, 0}, + + {1, 5}, + {2, 5}, + {5, 10}, + {10, 20}, + {100, 110}, + } { + for cas := 0; cas < 10; cas++ { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + w := make([]float64, n) + for i := range w { + w[i] = rnd.NormFloat64() + } + + work := make([]float64, 1) + impl.Dsyev(lapack.ComputeEV, uplo, n, a, lda, w, work, -1) + work = make([]float64, int(work[0])) + impl.Dsyev(lapack.ComputeEV, uplo, n, a, lda, w, work, len(work)) + + // Check that the decomposition is correct + orig := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := aCopy[i*lda+j] + orig.Data[i*orig.Stride+j] = v + orig.Data[j*orig.Stride+i] = v + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + v := aCopy[i*lda+j] + orig.Data[i*orig.Stride+j] = v + orig.Data[j*orig.Stride+i] = v + } + } + } + + V := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: a, + } + + if !eigenDecompCorrect(w, orig, V) { + t.Errorf("Decomposition mismatch") + } + + // Check that the decomposition is correct when the eigenvectors + // are not computed. + wAns := make([]float64, len(w)) + copy(wAns, w) + copy(a, aCopy) + for i := range w { + w[i] = rnd.Float64() + } + for i := range work { + work[i] = rnd.Float64() + } + impl.Dsyev(lapack.None, uplo, n, a, lda, w, work, len(work)) + if !floats.EqualApprox(w, wAns, 1e-8) { + t.Errorf("Eigenvalue mismatch when vectors not computed") + } + } + } + } +} diff --git a/lapack/testlapack/dsytd2.go b/lapack/testlapack/dsytd2.go new file mode 100644 index 00000000..be1ca12d --- /dev/null +++ b/lapack/testlapack/dsytd2.go @@ -0,0 +1,205 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dsytd2er interface { + Dsytd2(uplo blas.Uplo, n int, a []float64, lda int, d, e, tau []float64) +} + +func Dsytd2Test(t *testing.T, impl Dsytd2er) { + rnd := rand.New(rand.NewSource(1)) + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, test := range []struct { + n, lda int + }{ + {3, 0}, + {4, 0}, + {5, 0}, + + {3, 10}, + {4, 10}, + {5, 10}, + } { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.NormFloat64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + + d := make([]float64, n) + for i := range d { + d[i] = math.NaN() + } + e := make([]float64, n-1) + for i := range e { + e[i] = math.NaN() + } + tau := make([]float64, n-1) + for i := range tau { + tau[i] = math.NaN() + } + + impl.Dsytd2(uplo, n, a, lda, d, e, tau) + + // Construct Q + qMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + qCopy := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, len(qMat.Data)), + } + // Set Q to I. + for i := 0; i < n; i++ { + qMat.Data[i*qMat.Stride+i] = 1 + } + for i := 0; i < n-1; i++ { + hMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + // Set H to I. + for i := 0; i < n; i++ { + hMat.Data[i*hMat.Stride+i] = 1 + } + var vi blas64.Vector + if uplo == blas.Upper { + vi = blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + for j := 0; j < i; j++ { + vi.Data[j] = a[j*lda+i+1] + } + vi.Data[i] = 1 + } else { + vi = blas64.Vector{ + Inc: 1, + Data: make([]float64, n), + } + vi.Data[i+1] = 1 + for j := i + 2; j < n; j++ { + vi.Data[j] = a[j*lda+i] + } + } + blas64.Ger(-tau[i], vi, vi, hMat) + copy(qCopy.Data, qMat.Data) + + // Multiply q by the new h. + if uplo == blas.Upper { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, hMat, qCopy, 0, qMat) + } else { + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, hMat, 0, qMat) + } + } + // Check that Q is orthonormal + othonormal := true + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + dot := blas64.Dot(n, + blas64.Vector{Inc: 1, Data: qMat.Data[i*qMat.Stride:]}, + blas64.Vector{Inc: 1, Data: qMat.Data[j*qMat.Stride:]}, + ) + if i == j { + if math.Abs(dot-1) > 1e-10 { + othonormal = false + } + } else { + if math.Abs(dot) > 1e-10 { + othonormal = false + } + } + } + } + if !othonormal { + t.Errorf("Q not orthonormal") + } + + // Compute Q^T * A * Q. + aMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, len(a)), + } + + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + v := aCopy[i*lda+j] + if uplo == blas.Lower { + v = aCopy[j*lda+i] + } + aMat.Data[i*aMat.Stride+j] = v + aMat.Data[j*aMat.Stride+i] = v + } + } + + tmp := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + ans := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + blas64.Gemm(blas.Trans, blas.NoTrans, 1, qMat, aMat, 0, tmp) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, qMat, 0, ans) + + // Compare with T. + tMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + for i := 0; i < n-1; i++ { + tMat.Data[i*tMat.Stride+i] = d[i] + tMat.Data[i*tMat.Stride+i+1] = e[i] + tMat.Data[(i+1)*tMat.Stride+i] = e[i] + } + tMat.Data[(n-1)*tMat.Stride+n-1] = d[n-1] + + same := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if math.Abs(ans.Data[i*ans.Stride+j]-tMat.Data[i*tMat.Stride+j]) > 1e-10 { + same = false + } + } + } + if !same { + t.Errorf("Matrix answer mismatch") + } + } + } +} diff --git a/lapack/testlapack/dsytrd.go b/lapack/testlapack/dsytrd.go new file mode 100644 index 00000000..1bd70188 --- /dev/null +++ b/lapack/testlapack/dsytrd.go @@ -0,0 +1,160 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dsytrder interface { + Dsytrd(uplo blas.Uplo, n int, a []float64, lda int, d, e, tau, work []float64, lwork int) + + Dorgqr(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) + Dorgql(m, n, k int, a []float64, lda int, tau, work []float64, lwork int) +} + +func DsytrdTest(t *testing.T, impl Dsytrder) { + const tol = 1e-13 + rnd := rand.New(rand.NewSource(1)) + for tc, test := range []struct { + n, lda int + }{ + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {10, 0}, + {50, 0}, + {100, 0}, + {150, 0}, + {300, 0}, + + {1, 3}, + {2, 3}, + {3, 7}, + {4, 9}, + {10, 20}, + {50, 70}, + {100, 120}, + {150, 170}, + {300, 320}, + } { + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := randomGeneral(n, n, lda, rnd) + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + a.Data[i*a.Stride+j] = a.Data[j*a.Stride+i] + } + } + aCopy := cloneGeneral(a) + + d := nanSlice(n) + e := nanSlice(n - 1) + tau := nanSlice(n - 1) + + var lwork int + switch wl { + case minimumWork: + lwork = 1 + case mediumWork: + work := make([]float64, 1) + impl.Dsytrd(uplo, n, a.Data, a.Stride, d, e, tau, work, -1) + lwork = (int(work[0]) + 1) / 2 + lwork = max(1, lwork) + case optimumWork: + work := make([]float64, 1) + impl.Dsytrd(uplo, n, a.Data, a.Stride, d, e, tau, work, -1) + lwork = int(work[0]) + } + work := make([]float64, lwork) + + impl.Dsytrd(uplo, n, a.Data, a.Stride, d, e, tau, work, lwork) + + prefix := fmt.Sprintf("Case #%v: uplo=%v,n=%v,lda=%v,work=%v", + tc, uplo, n, lda, wl) + + if !generalOutsideAllNaN(a) { + t.Errorf("%v: out-of-range write to A", prefix) + } + + // Extract Q by doing what Dorgtr does. + q := cloneGeneral(a) + if uplo == blas.Upper { + for j := 0; j < n-1; j++ { + for i := 0; i < j; i++ { + q.Data[i*q.Stride+j] = q.Data[i*q.Stride+j+1] + } + q.Data[(n-1)*q.Stride+j] = 0 + } + for i := 0; i < n-1; i++ { + q.Data[i*q.Stride+n-1] = 0 + } + q.Data[(n-1)*q.Stride+n-1] = 1 + if n > 1 { + work = make([]float64, n-1) + impl.Dorgql(n-1, n-1, n-1, q.Data, q.Stride, tau, work, len(work)) + } + } else { + for j := n - 1; j > 0; j-- { + q.Data[j] = 0 + for i := j + 1; i < n; i++ { + q.Data[i*q.Stride+j] = q.Data[i*q.Stride+j-1] + } + } + q.Data[0] = 1 + for i := 1; i < n; i++ { + q.Data[i*q.Stride] = 0 + } + if n > 1 { + work = make([]float64, n-1) + impl.Dorgqr(n-1, n-1, n-1, q.Data[q.Stride+1:], q.Stride, tau, work, len(work)) + } + } + if !isOrthonormal(q) { + t.Errorf("%v: Q not orthogonal", prefix) + } + + // Contruct symmetric tridiagonal T from d and e. + tMat := zeros(n, n, n) + for i := 0; i < n; i++ { + tMat.Data[i*tMat.Stride+i] = d[i] + } + if uplo == blas.Upper { + for j := 1; j < n; j++ { + tMat.Data[(j-1)*tMat.Stride+j] = e[j-1] + tMat.Data[j*tMat.Stride+j-1] = e[j-1] + } + } else { + for j := 0; j < n-1; j++ { + tMat.Data[(j+1)*tMat.Stride+j] = e[j] + tMat.Data[j*tMat.Stride+j+1] = e[j] + } + } + + // Compute Q^T * A * Q. + tmp := zeros(n, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, aCopy, 0, tmp) + got := zeros(n, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp, q, 0, got) + + // Compare with T. + if !equalApproxGeneral(got, tMat, tol) { + t.Errorf("%v: Q^T*A*Q != T", prefix) + } + } + } + } +} diff --git a/lapack/testlapack/dtgsja.go b/lapack/testlapack/dtgsja.go new file mode 100644 index 00000000..b9466220 --- /dev/null +++ b/lapack/testlapack/dtgsja.go @@ -0,0 +1,165 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dtgsjaer interface { + Dlanger + Dtgsja(jobU, jobV, jobQ lapack.GSVDJob, m, p, n, k, l int, a []float64, lda int, b []float64, ldb int, tola, tolb float64, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64) (cycles int, ok bool) +} + +func DtgsjaTest(t *testing.T, impl Dtgsjaer) { + rnd := rand.New(rand.NewSource(1)) + for cas, test := range []struct { + m, p, n, k, l, lda, ldb, ldu, ldv, ldq int + + ok bool + }{ + {m: 5, p: 5, n: 5, k: 2, l: 2, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 5, k: 4, l: 1, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, k: 2, l: 2, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, k: 4, l: 1, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 10, k: 4, l: 2, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 5, n: 5, k: 2, l: 2, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 5, n: 5, k: 4, l: 1, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 10, n: 10, k: 5, l: 3, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 10, p: 10, n: 10, k: 6, l: 4, lda: 0, ldb: 0, ldu: 0, ldv: 0, ldq: 0, ok: true}, + {m: 5, p: 5, n: 5, k: 2, l: 2, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10, ok: true}, + {m: 5, p: 5, n: 5, k: 4, l: 1, lda: 10, ldb: 10, ldu: 10, ldv: 10, ldq: 10, ok: true}, + {m: 5, p: 5, n: 10, k: 2, l: 2, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 5, p: 5, n: 10, k: 4, l: 1, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 5, p: 5, n: 10, k: 4, l: 2, lda: 20, ldb: 20, ldu: 10, ldv: 10, ldq: 20, ok: true}, + {m: 10, p: 5, n: 5, k: 2, l: 2, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10, ok: true}, + {m: 10, p: 5, n: 5, k: 4, l: 1, lda: 10, ldb: 10, ldu: 20, ldv: 10, ldq: 10, ok: true}, + {m: 10, p: 10, n: 10, k: 5, l: 3, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20, ok: true}, + {m: 10, p: 10, n: 10, k: 6, l: 4, lda: 20, ldb: 20, ldu: 20, ldv: 20, ldq: 20, ok: true}, + } { + m := test.m + p := test.p + n := test.n + k := test.k + l := test.l + lda := test.lda + if lda == 0 { + lda = n + } + ldb := test.ldb + if ldb == 0 { + ldb = n + } + ldu := test.ldu + if ldu == 0 { + ldu = m + } + ldv := test.ldv + if ldv == 0 { + ldv = p + } + ldq := test.ldq + if ldq == 0 { + ldq = n + } + + a := blockedUpperTriGeneral(m, n, k, l, lda, true, rnd) + aCopy := cloneGeneral(a) + b := blockedUpperTriGeneral(p, n, k, l, ldb, false, rnd) + bCopy := cloneGeneral(b) + + tola := float64(max(m, n)) * impl.Dlange(lapack.NormFrob, m, n, a.Data, a.Stride, nil) * dlamchE + tolb := float64(max(p, n)) * impl.Dlange(lapack.NormFrob, p, n, b.Data, b.Stride, nil) * dlamchE + + alpha := make([]float64, n) + beta := make([]float64, n) + + work := make([]float64, 2*n) + + u := nanGeneral(m, m, ldu) + v := nanGeneral(p, p, ldv) + q := nanGeneral(n, n, ldq) + + _, ok := impl.Dtgsja(lapack.GSVDUnit, lapack.GSVDUnit, lapack.GSVDUnit, + m, p, n, k, l, + a.Data, a.Stride, + b.Data, b.Stride, + tola, tolb, + alpha, beta, + u.Data, u.Stride, + v.Data, v.Stride, + q.Data, q.Stride, + work) + + if !ok { + if test.ok { + t.Errorf("test %d unexpectedly did not converge", cas) + } + continue + } + + // Check orthogonality of U, V and Q. + if !isOrthonormal(u) { + t.Errorf("test %d: U is not orthogonal\n%+v", cas, u) + } + if !isOrthonormal(v) { + t.Errorf("test %d: V is not orthogonal\n%+v", cas, v) + } + if !isOrthonormal(q) { + t.Errorf("test %d: Q is not orthogonal\n%+v", cas, q) + } + + // Check C^2 + S^2 = I. + var elements []float64 + if m-k-l >= 0 { + elements = alpha[k : k+l] + } else { + elements = alpha[k:m] + } + for i := range elements { + i += k + d := alpha[i]*alpha[i] + beta[i]*beta[i] + if !floats.EqualWithinAbsOrRel(d, 1, 1e-14, 1e-14) { + t.Errorf("test %d: alpha_%d^2 + beta_%d^2 != 1: got: %v", cas, i, i, d) + } + } + + zeroR, d1, d2 := constructGSVDresults(n, p, m, k, l, a, b, alpha, beta) + + // Check U^T*A*Q = D1*[ 0 R ]. + uTmp := nanGeneral(m, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, u, aCopy, 0, uTmp) + uAns := nanGeneral(m, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, uTmp, q, 0, uAns) + + d10r := nanGeneral(m, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, d1, zeroR, 0, d10r) + + if !equalApproxGeneral(uAns, d10r, 1e-14) { + t.Errorf("test %d: U^T*A*Q != D1*[ 0 R ]\nU^T*A*Q:\n%+v\nD1*[ 0 R ]:\n%+v", + cas, uAns, d10r) + } + + // Check V^T*B*Q = D2*[ 0 R ]. + vTmp := nanGeneral(p, n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, v, bCopy, 0, vTmp) + vAns := nanGeneral(p, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, vTmp, q, 0, vAns) + + d20r := nanGeneral(p, n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, d2, zeroR, 0, d20r) + + if !equalApproxGeneral(vAns, d20r, 1e-14) { + t.Errorf("test %d: V^T*B*Q != D2*[ 0 R ]\nV^T*B*Q:\n%+v\nD2*[ 0 R ]:\n%+v", + cas, vAns, d20r) + } + } +} diff --git a/lapack/testlapack/dtrcon.go b/lapack/testlapack/dtrcon.go new file mode 100644 index 00000000..b2cbb3d8 --- /dev/null +++ b/lapack/testlapack/dtrcon.go @@ -0,0 +1,184 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dtrconer interface { + Dgeconer + Dtrcon(norm lapack.MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64 +} + +func DtrconTest(t *testing.T, impl Dtrconer) { + rnd := rand.New(rand.NewSource(1)) + // Hand crafted tests. + for _, test := range []struct { + a []float64 + n int + uplo blas.Uplo + diag blas.Diag + condOne float64 + condInf float64 + }{ + { + a: []float64{ + 8, 5, 6, + 0, 7, 8, + 0, 0, 6, + }, + n: 3, + uplo: blas.Upper, + diag: blas.Unit, + condOne: 1.0 / 645, + condInf: 1.0 / 480, + }, + { + a: []float64{ + 8, 5, 6, + 0, 7, 8, + 0, 0, 6, + }, + n: 3, + uplo: blas.Upper, + diag: blas.NonUnit, + condOne: 0.137704918032787, + condInf: 0.157894736842105, + }, + { + a: []float64{ + 8, 0, 0, + 5, 7, 0, + 6, 8, 6, + }, + n: 3, + uplo: blas.Lower, + diag: blas.Unit, + condOne: 1.0 / 480, + condInf: 1.0 / 645, + }, + { + a: []float64{ + 8, 0, 0, + 5, 7, 0, + 6, 8, 6, + }, + n: 3, + uplo: blas.Lower, + diag: blas.NonUnit, + condOne: 0.157894736842105, + condInf: 0.137704918032787, + }, + } { + lda := test.n + work := make([]float64, 3*test.n) + for i := range work { + work[i] = rnd.Float64() + } + iwork := make([]int, test.n) + for i := range iwork { + iwork[i] = int(rnd.Int31()) + } + aCopy := make([]float64, len(test.a)) + copy(aCopy, test.a) + condOne := impl.Dtrcon(lapack.MaxColumnSum, test.uplo, test.diag, test.n, test.a, lda, work, iwork) + if math.Abs(condOne-test.condOne) > 1e-14 { + t.Errorf("One norm mismatch. Want %v, got %v.", test.condOne, condOne) + } + if !floats.Equal(aCopy, test.a) { + t.Errorf("a modified during call") + } + condInf := impl.Dtrcon(lapack.MaxRowSum, test.uplo, test.diag, test.n, test.a, lda, work, iwork) + if math.Abs(condInf-test.condInf) > 1e-14 { + t.Errorf("Inf norm mismatch. Want %v, got %v.", test.condInf, condInf) + } + if !floats.Equal(aCopy, test.a) { + t.Errorf("a modified during call") + } + } + + // Dtrcon does not match the Dgecon output in many cases. See + // https://github.com/xianyi/OpenBLAS/issues/636 + // TODO(btracey): Uncomment this when the mismatch between Dgecon and Dtrcon + // is understood. + /* + // Randomized tests against Dgecon. + for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { + for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { + for _, test := range []struct { + n, lda int + }{ + {3, 0}, + {4, 9}, + } { + for trial := 0; trial < 1; trial++ { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + if trial == 0 { + for i := range a { + a[i] = float64(i + 2) + } + } else { + for i := range a { + a[i] = rnd.NormFloat64() + } + } + + aDense := make([]float64, len(a)) + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + aDense[i*lda+j] = a[i*lda+j] + } + } + } else { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + aDense[i*lda+j] = a[i*lda+j] + } + } + } + if diag == blas.Unit { + for i := 0; i < n; i++ { + aDense[i*lda+i] = 1 + } + } + + ipiv := make([]int, n) + work := make([]float64, 4*n) + denseOne := impl.Dlange(lapack.MaxColumnSum, n, n, aDense, lda, work) + denseInf := impl.Dlange(lapack.MaxRowSum, n, n, aDense, lda, work) + + aDenseLU := make([]float64, len(aDense)) + copy(aDenseLU, aDense) + impl.Dgetrf(n, n, aDenseLU, lda, ipiv) + iwork := make([]int, n) + want := impl.Dgecon(lapack.MaxColumnSum, n, aDenseLU, lda, denseOne, work, iwork) + got := impl.Dtrcon(lapack.MaxColumnSum, uplo, diag, n, a, lda, work, iwork) + if math.Abs(want-got) > 1e-14 { + t.Errorf("One norm mismatch. Upper = %v, unit = %v, want %v, got %v", uplo == blas.Upper, diag == blas.Unit, want, got) + } + want = impl.Dgecon(lapack.MaxRowSum, n, aDenseLU, lda, denseInf, work, iwork) + got = impl.Dtrcon(lapack.MaxRowSum, uplo, diag, n, a, lda, work, iwork) + if math.Abs(want-got) > 1e-14 { + t.Errorf("Inf norm mismatch. Upper = %v, unit = %v, want %v, got %v", uplo == blas.Upper, diag == blas.Unit, want, got) + } + } + } + } + } + */ +} diff --git a/lapack/testlapack/dtrevc3.go b/lapack/testlapack/dtrevc3.go new file mode 100644 index 00000000..e1af37fb --- /dev/null +++ b/lapack/testlapack/dtrevc3.go @@ -0,0 +1,221 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +type Dtrevc3er interface { + Dtrevc3(side lapack.EVSide, howmny lapack.HowMany, selected []bool, n int, t []float64, ldt int, vl []float64, ldvl int, vr []float64, ldvr int, mm int, work []float64, lwork int) int +} + +func Dtrevc3Test(t *testing.T, impl Dtrevc3er) { + rnd := rand.New(rand.NewSource(1)) + for _, side := range []lapack.EVSide{lapack.RightEV, lapack.LeftEV, lapack.RightLeftEV} { + for _, howmny := range []lapack.HowMany{lapack.AllEV, lapack.AllEVMulQ, lapack.SelectedEV} { + for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 34, 100} { + for _, extra := range []int{0, 11} { + for _, optwork := range []bool{true, false} { + for cas := 0; cas < 10; cas++ { + tmat := randomSchurCanonical(n, n+extra, rnd) + testDtrevc3(t, impl, side, howmny, tmat, optwork, rnd) + } + } + } + } + } + } +} + +func testDtrevc3(t *testing.T, impl Dtrevc3er, side lapack.EVSide, howmny lapack.HowMany, tmat blas64.General, optwork bool, rnd *rand.Rand) { + const tol = 1e-14 + + n := tmat.Rows + extra := tmat.Stride - tmat.Cols + right := side != lapack.LeftEV + left := side != lapack.RightEV + + var selected, selectedWant []bool + var mWant int // How many columns will the eigenvectors occupy. + if howmny == lapack.SelectedEV { + selected = make([]bool, n) + selectedWant = make([]bool, n) + // Dtrevc3 will compute only selected eigenvectors. Pick them + // randomly disregarding whether they are real or complex. + for i := range selected { + if rnd.Float64() < 0.5 { + selected[i] = true + } + } + // Dtrevc3 will modify (standardize) the slice selected based on + // whether the corresponding eigenvalues are real or complex. Do + // the same process here to fill selectedWant. + for i := 0; i < n; { + if i == n-1 || tmat.Data[(i+1)*tmat.Stride+i] == 0 { + // Real eigenvalue. + if selected[i] { + selectedWant[i] = true + mWant++ // Real eigenvectors occupy one column. + } + i++ + } else { + // Complex eigenvalue. + if selected[i] || selected[i+1] { + // Dtrevc3 will modify selected so that + // only the first element of the pair is + // true. + selectedWant[i] = true + mWant += 2 // Complex eigenvectors occupy two columns. + } + i += 2 + } + } + } else { + // All eigenvectors occupy n columns. + mWant = n + } + + var vr blas64.General + if right { + if howmny == lapack.AllEVMulQ { + vr = eye(n, n+extra) + } else { + // VR will be overwritten. + vr = nanGeneral(n, mWant, n+extra) + } + } + + var vl blas64.General + if left { + if howmny == lapack.AllEVMulQ { + vl = eye(n, n+extra) + } else { + // VL will be overwritten. + vl = nanGeneral(n, mWant, n+extra) + } + } + + work := make([]float64, max(1, 3*n)) + if optwork { + impl.Dtrevc3(side, howmny, nil, n, nil, 1, nil, 1, nil, 1, mWant, work, -1) + work = make([]float64, int(work[0])) + } + + m := impl.Dtrevc3(side, howmny, selected, n, tmat.Data, tmat.Stride, + vl.Data, vl.Stride, vr.Data, vr.Stride, mWant, work, len(work)) + + prefix := fmt.Sprintf("Case side=%v, howmny=%v, n=%v, extra=%v, optwk=%v", + side, howmny, n, extra, optwork) + + if !generalOutsideAllNaN(tmat) { + t.Errorf("%v: out-of-range write to T", prefix) + } + if !generalOutsideAllNaN(vl) { + t.Errorf("%v: out-of-range write to VL", prefix) + } + if !generalOutsideAllNaN(vr) { + t.Errorf("%v: out-of-range write to VR", prefix) + } + + if m != mWant { + t.Errorf("%v: unexpected value of m. Want %v, got %v", prefix, mWant, m) + } + + if howmny == lapack.SelectedEV { + for i := range selected { + if selected[i] != selectedWant[i] { + t.Errorf("%v: unexpected selected[%v]", prefix, i) + } + } + } + + // Check that the columns of VR and VL are actually eigenvectors and + // that the magnitude of their largest element is 1. + var k int + for j := 0; j < n; { + re := tmat.Data[j*tmat.Stride+j] + if j == n-1 || tmat.Data[(j+1)*tmat.Stride+j] == 0 { + if howmny == lapack.SelectedEV && !selected[j] { + j++ + continue + } + if right { + ev := columnOf(vr, k) + norm := floats.Norm(ev, math.Inf(1)) + if math.Abs(norm-1) > tol { + t.Errorf("%v: magnitude of largest element of VR[:,%v] not 1", prefix, k) + } + if !isRightEigenvectorOf(tmat, ev, nil, complex(re, 0), tol) { + t.Errorf("%v: VR[:,%v] is not real right eigenvector", prefix, k) + } + } + if left { + ev := columnOf(vl, k) + norm := floats.Norm(ev, math.Inf(1)) + if math.Abs(norm-1) > tol { + t.Errorf("%v: magnitude of largest element of VL[:,%v] not 1", prefix, k) + } + if !isLeftEigenvectorOf(tmat, ev, nil, complex(re, 0), tol) { + t.Errorf("%v: VL[:,%v] is not real left eigenvector", prefix, k) + } + } + k++ + j++ + continue + } + if howmny == lapack.SelectedEV && !selected[j] { + j += 2 + continue + } + im := math.Sqrt(math.Abs(tmat.Data[(j+1)*tmat.Stride+j])) * + math.Sqrt(math.Abs(tmat.Data[j*tmat.Stride+j+1])) + if right { + evre := columnOf(vr, k) + evim := columnOf(vr, k+1) + var evmax float64 + for i, v := range evre { + evmax = math.Max(evmax, math.Abs(v)+math.Abs(evim[i])) + } + if math.Abs(evmax-1) > tol { + t.Errorf("%v: magnitude of largest element of VR[:,%v] not 1", prefix, k) + } + if !isRightEigenvectorOf(tmat, evre, evim, complex(re, im), tol) { + t.Errorf("%v: VR[:,%v:%v] is not complex right eigenvector", prefix, k, k+1) + } + floats.Scale(-1, evim) + if !isRightEigenvectorOf(tmat, evre, evim, complex(re, -im), tol) { + t.Errorf("%v: VR[:,%v:%v] is not complex right eigenvector", prefix, k, k+1) + } + } + if left { + evre := columnOf(vl, k) + evim := columnOf(vl, k+1) + var evmax float64 + for i, v := range evre { + evmax = math.Max(evmax, math.Abs(v)+math.Abs(evim[i])) + } + if math.Abs(evmax-1) > tol { + t.Errorf("%v: magnitude of largest element of VL[:,%v] not 1", prefix, k) + } + if !isLeftEigenvectorOf(tmat, evre, evim, complex(re, im), tol) { + t.Errorf("%v: VL[:,%v:%v] is not complex left eigenvector", prefix, k, k+1) + } + floats.Scale(-1, evim) + if !isLeftEigenvectorOf(tmat, evre, evim, complex(re, -im), tol) { + t.Errorf("%v: VL[:,%v:%v] is not complex left eigenvector", prefix, k, k+1) + } + } + k += 2 + j += 2 + } +} diff --git a/lapack/testlapack/dtrexc.go b/lapack/testlapack/dtrexc.go new file mode 100644 index 00000000..ad224712 --- /dev/null +++ b/lapack/testlapack/dtrexc.go @@ -0,0 +1,219 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math/cmplx" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +type Dtrexcer interface { + Dtrexc(compq lapack.EVComp, n int, t []float64, ldt int, q []float64, ldq int, ifst, ilst int, work []float64) (ifstOut, ilstOut int, ok bool) +} + +func DtrexcTest(t *testing.T, impl Dtrexcer) { + rnd := rand.New(rand.NewSource(1)) + + for _, compq := range []lapack.EVComp{lapack.None, lapack.UpdateSchur} { + for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { + for _, extra := range []int{0, 1, 11} { + for cas := 0; cas < 100; cas++ { + tmat := randomSchurCanonical(n, n+extra, rnd) + ifst := rnd.Intn(n) + ilst := rnd.Intn(n) + testDtrexc(t, impl, compq, tmat, ifst, ilst, extra, rnd) + } + } + } + } + + for _, compq := range []lapack.EVComp{lapack.None, lapack.UpdateSchur} { + for _, extra := range []int{0, 1, 11} { + tmat := randomSchurCanonical(0, extra, rnd) + testDtrexc(t, impl, compq, tmat, 0, 0, extra, rnd) + } + } +} + +func testDtrexc(t *testing.T, impl Dtrexcer, compq lapack.EVComp, tmat blas64.General, ifst, ilst, extra int, rnd *rand.Rand) { + const tol = 1e-13 + + n := tmat.Rows + fstSize, fstFirst := schurBlockSize(tmat, ifst) + lstSize, lstFirst := schurBlockSize(tmat, ilst) + + tmatCopy := cloneGeneral(tmat) + + var wantq bool + var q, qCopy blas64.General + if compq == lapack.UpdateSchur { + wantq = true + q = eye(n, n+extra) + qCopy = cloneGeneral(q) + } + + work := nanSlice(n) + + ifstGot, ilstGot, ok := impl.Dtrexc(compq, n, tmat.Data, tmat.Stride, q.Data, q.Stride, ifst, ilst, work) + + prefix := fmt.Sprintf("Case compq=%v, n=%v, ifst=%v, nbf=%v, ilst=%v, nbl=%v, extra=%v", + compq, n, ifst, fstSize, ilst, lstSize, extra) + + if !generalOutsideAllNaN(tmat) { + t.Errorf("%v: out-of-range write to T", prefix) + } + if wantq && !generalOutsideAllNaN(q) { + t.Errorf("%v: out-of-range write to Q", prefix) + } + + if !ok { + t.Logf("%v: Dtrexc returned ok=false", prefix) + } + + // Check that the index of the first block was correctly updated (if + // necessary). + ifstWant := ifst + if !fstFirst { + ifstWant = ifst - 1 + } + if ifstWant != ifstGot { + t.Errorf("%v: unexpected ifst index. Want %v, got %v ", prefix, ifstWant, ifstGot) + } + + // Check that the index of the last block is as expected when ok=true. + // When ok=false, we don't know at which block the algorithm failed, so + // we don't check. + ilstWant := ilst + if !lstFirst { + ilstWant-- + } + if ok { + if ifstWant < ilstWant { + // If the blocks are swapped backwards, these + // adjustments are not necessary, the first row of the + // last block will end up at ifst. + switch { + case fstSize == 2 && lstSize == 1: + ilstWant-- + case fstSize == 1 && lstSize == 2: + ilstWant++ + } + } + if ilstWant != ilstGot { + t.Errorf("%v: unexpected ilst index. Want %v, got %v", prefix, ilstWant, ilstGot) + } + } + + if n <= 1 || ifstGot == ilstGot { + // Too small matrix or no swapping. + // Check that T was not modified. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if tmat.Data[i*tmat.Stride+j] != tmatCopy.Data[i*tmatCopy.Stride+j] { + t.Errorf("%v: unexpected modification at T[%v,%v]", prefix, i, j) + } + } + } + if !wantq { + return + } + // Check that Q was not modified. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if q.Data[i*q.Stride+j] != qCopy.Data[i*qCopy.Stride+j] { + t.Errorf("%v: unexpected modification at Q[%v,%v]", prefix, i, j) + } + } + } + return + } + + if !isSchurCanonicalGeneral(tmat) { + t.Errorf("%v: T is not in Schur canonical form", prefix) + } + + // Check that T was not modified except above the second subdiagonal in + // rows and columns [modMin,modMax]. + modMin := min(ifstGot, ilstGot) + modMax := max(ifstGot, ilstGot) + fstSize + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if modMin <= i && i < modMax && j+1 >= i { + continue + } + if modMin <= j && j < modMax && j+1 >= i { + continue + } + diff := tmat.Data[i*tmat.Stride+j] - tmatCopy.Data[i*tmatCopy.Stride+j] + if diff != 0 { + t.Errorf("%v: unexpected modification at T[%v,%v]", prefix, i, j) + } + } + } + + // Check that the block at ifstGot was delivered to ilstGot correctly. + if fstSize == 1 { + // 1×1 blocks are swapped exactly. + got := tmat.Data[ilstGot*tmat.Stride+ilstGot] + want := tmatCopy.Data[ifstGot*tmatCopy.Stride+ifstGot] + if want != got { + t.Errorf("%v: unexpected 1×1 block at T[%v,%v]. Want %v, got %v", + prefix, want, got, ilstGot, ilstGot) + } + } else { + // Check that the swapped 2×2 block is in Schur canonical form. + a, b, c, d := extract2x2Block(tmat.Data[ilstGot*tmat.Stride+ilstGot:], tmat.Stride) + if !isSchurCanonical(a, b, c, d) { + t.Errorf("%v: 2×2 block at T[%v,%v] not in Schur canonical form", prefix, ilstGot, ilstGot) + } + ev1Got, ev2Got := schurBlockEigenvalues(a, b, c, d) + + // Check that the swapped 2×2 block has the same eigenvalues. + // The block was originally located at T[ifstGot,ifstGot]. + a, b, c, d = extract2x2Block(tmatCopy.Data[ifstGot*tmatCopy.Stride+ifstGot:], tmatCopy.Stride) + ev1Want, ev2Want := schurBlockEigenvalues(a, b, c, d) + if cmplx.Abs(ev1Got-ev1Want) > tol { + t.Errorf("%v: unexpected first eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, ilstGot, ilstGot, ev1Want, ev1Got) + } + if cmplx.Abs(ev2Got-ev2Want) > tol { + t.Errorf("%v: unexpected second eigenvalue of 2×2 block at T[%v,%v]. Want %v, got %v", + prefix, ilstGot, ilstGot, ev2Want, ev2Got) + } + } + + if !wantq { + return + } + + if !isOrthonormal(q) { + t.Errorf("%v: Q is not orthogonal", prefix) + } + // Check that Q is unchanged outside of columns [modMin,modMax]. + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if modMin <= j && j < modMax { + continue + } + if q.Data[i*q.Stride+j]-qCopy.Data[i*qCopy.Stride+j] != 0 { + t.Errorf("%v: unexpected modification of Q[%v,%v]", prefix, i, j) + } + } + } + // Check that Q^T TOrig Q == T. + tq := eye(n, n) + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmatCopy, q, 0, tq) + qtq := eye(n, n) + blas64.Gemm(blas.Trans, blas.NoTrans, 1, q, tq, 0, qtq) + if !equalApproxGeneral(qtq, tmat, tol) { + t.Errorf("%v: Q^T (initial T) Q and (final T) are not equal", prefix) + } +} diff --git a/lapack/testlapack/dtrti2.go b/lapack/testlapack/dtrti2.go new file mode 100644 index 00000000..267d5e4f --- /dev/null +++ b/lapack/testlapack/dtrti2.go @@ -0,0 +1,163 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" +) + +type Dtrti2er interface { + Dtrti2(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) +} + +func Dtrti2Test(t *testing.T, impl Dtrti2er) { + const tol = 1e-14 + for _, test := range []struct { + a []float64 + n int + uplo blas.Uplo + diag blas.Diag + ans []float64 + }{ + { + a: []float64{ + 2, 3, 4, + 0, 5, 6, + 8, 0, 8}, + n: 3, + uplo: blas.Upper, + diag: blas.NonUnit, + ans: []float64{ + 0.5, -0.3, -0.025, + 0, 0.2, -0.15, + 8, 0, 0.125, + }, + }, + { + a: []float64{ + 5, 3, 4, + 0, 7, 6, + 10, 0, 8}, + n: 3, + uplo: blas.Upper, + diag: blas.Unit, + ans: []float64{ + 5, -3, 14, + 0, 7, -6, + 10, 0, 8, + }, + }, + { + a: []float64{ + 2, 0, 0, + 3, 5, 0, + 4, 6, 8}, + n: 3, + uplo: blas.Lower, + diag: blas.NonUnit, + ans: []float64{ + 0.5, 0, 0, + -0.3, 0.2, 0, + -0.025, -0.15, 0.125, + }, + }, + { + a: []float64{ + 1, 0, 0, + 3, 1, 0, + 4, 6, 1}, + n: 3, + uplo: blas.Lower, + diag: blas.Unit, + ans: []float64{ + 1, 0, 0, + -3, 1, 0, + 14, -6, 1, + }, + }, + } { + impl.Dtrti2(test.uplo, test.diag, test.n, test.a, test.n) + if !floats.EqualApprox(test.ans, test.a, tol) { + t.Errorf("Matrix inverse mismatch. Want %v, got %v.", test.ans, test.a) + } + } + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { + for _, test := range []struct { + n, lda int + }{ + {1, 0}, + {2, 0}, + {3, 0}, + {1, 5}, + {2, 5}, + {3, 5}, + } { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.Float64() + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dtrti2(uplo, diag, n, a, lda) + if uplo == blas.Upper { + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + aCopy[i*lda+j] = 0 + a[i*lda+j] = 0 + } + } + } else { + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + aCopy[i*lda+j] = 0 + a[i*lda+j] = 0 + } + } + } + if diag == blas.Unit { + for i := 0; i < n; i++ { + a[i*lda+i] = 1 + aCopy[i*lda+i] = 1 + } + } + ans := make([]float64, len(a)) + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, a, lda, aCopy, lda, 0, ans, lda) + iseye := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + if math.Abs(ans[i*lda+i]-1) > tol { + iseye = false + break + } + } else { + if math.Abs(ans[i*lda+j]) > tol { + iseye = false + break + } + } + } + } + if !iseye { + t.Errorf("inv(A) * A != I. Upper = %v, unit = %v, ans = %v", uplo == blas.Upper, diag == blas.Unit, ans) + } + } + } + } +} diff --git a/lapack/testlapack/dtrtri.go b/lapack/testlapack/dtrtri.go new file mode 100644 index 00000000..cd47bd0f --- /dev/null +++ b/lapack/testlapack/dtrtri.go @@ -0,0 +1,95 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type Dtrtrier interface { + Dtrconer + Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) bool +} + +func DtrtriTest(t *testing.T, impl Dtrtrier) { + const tol = 1e-6 + rnd := rand.New(rand.NewSource(1)) + bi := blas64.Implementation() + for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { + for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { + for _, test := range []struct { + n, lda int + }{ + {3, 0}, + {70, 0}, + {200, 0}, + {3, 5}, + {70, 92}, + {200, 205}, + } { + n := test.n + lda := test.lda + if lda == 0 { + lda = n + } + a := make([]float64, n*lda) + for i := range a { + a[i] = rnd.Float64() + 1 // This keeps the matrices well conditioned. + } + aCopy := make([]float64, len(a)) + copy(aCopy, a) + impl.Dtrtri(uplo, diag, n, a, lda) + if uplo == blas.Upper { + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + aCopy[i*lda+j] = 0 + a[i*lda+j] = 0 + } + } + } else { + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + aCopy[i*lda+j] = 0 + a[i*lda+j] = 0 + } + } + } + if diag == blas.Unit { + for i := 0; i < n; i++ { + a[i*lda+i] = 1 + aCopy[i*lda+i] = 1 + } + } + ans := make([]float64, len(a)) + bi.Dgemm(blas.NoTrans, blas.NoTrans, n, n, n, 1, a, lda, aCopy, lda, 0, ans, lda) + iseye := true + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + if math.Abs(ans[i*lda+i]-1) > tol { + iseye = false + break + } + } else { + if math.Abs(ans[i*lda+j]) > tol { + iseye = false + break + } + } + } + } + if !iseye { + t.Errorf("inv(A) * A != I. Upper = %v, unit = %v, n = %v, lda = %v", + uplo == blas.Upper, diag == blas.Unit, n, lda) + } + } + } + } +} diff --git a/lapack/testlapack/fortran.go b/lapack/testlapack/fortran.go new file mode 100644 index 00000000..45ea6d07 --- /dev/null +++ b/lapack/testlapack/fortran.go @@ -0,0 +1,33 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "strings" +) + +// This file implements types for helping to convert to Fortran testing capabilities. + +// fortran64 is a float64 type that prints as a double precision constant in +// Fortran format. +type fortran64 float64 + +func (f fortran64) String() string { + // Replace exponent with D + s := fmt.Sprintf("%0.16E", f) + s = strings.Replace(s, "E", "D", 1) + return s +} + +// printFortranArray prints a Go slice as an array that can be copied into a +// fortran script. +func printFortranArray(z []float64, name string) { + fmt.Printf("%s(1:%d) = (/%v, &\n", name, len(z), fortran64(z[0])) + for i := 1; i < len(z)-1; i++ { + fmt.Printf("%v, &\n", fortran64(z[i])) + } + fmt.Printf("%s/)\n", fortran64(z[len(z)-1])) +} diff --git a/lapack/testlapack/general.go b/lapack/testlapack/general.go new file mode 100644 index 00000000..e9bf80b5 --- /dev/null +++ b/lapack/testlapack/general.go @@ -0,0 +1,1414 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "fmt" + "math" + "math/cmplx" + "math/rand" + "testing" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/floats" + "github.com/gonum/lapack" +) + +const ( + // dlamchE is the machine epsilon. For IEEE this is 2^{-53}. + dlamchE = 1.0 / (1 << 53) + dlamchB = 2 + dlamchP = dlamchB * dlamchE + // dlamchS is the smallest normal number. For IEEE this is 2^{-1022}. + dlamchS = 1.0 / (1 << 256) / (1 << 256) / (1 << 256) / (1 << 254) +) + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +// worklen describes how much workspace a test should use. +type worklen int + +const ( + minimumWork worklen = iota + mediumWork + optimumWork +) + +// nanSlice allocates a new slice of length n filled with NaN. +func nanSlice(n int) []float64 { + s := make([]float64, n) + for i := range s { + s[i] = math.NaN() + } + return s +} + +// randomSlice allocates a new slice of length n filled with random values. +func randomSlice(n int, rnd *rand.Rand) []float64 { + s := make([]float64, n) + for i := range s { + s[i] = rnd.NormFloat64() + } + return s +} + +// nanGeneral allocates a new r×c general matrix filled with NaN values. +func nanGeneral(r, c, stride int) blas64.General { + if r < 0 || c < 0 { + panic("bad matrix size") + } + if r == 0 || c == 0 { + return blas64.General{Stride: max(1, stride)} + } + if stride < c { + panic("bad stride") + } + return blas64.General{ + Rows: r, + Cols: c, + Stride: stride, + Data: nanSlice((r-1)*stride + c), + } +} + +// randomGeneral allocates a new r×c general matrix filled with random +// numbers. Out-of-range elements are filled with NaN values. +func randomGeneral(r, c, stride int, rnd *rand.Rand) blas64.General { + ans := nanGeneral(r, c, stride) + for i := 0; i < r; i++ { + for j := 0; j < c; j++ { + ans.Data[i*ans.Stride+j] = rnd.NormFloat64() + } + } + return ans +} + +// randomHessenberg allocates a new n×n Hessenberg matrix filled with zeros +// under the first subdiagonal and with random numbers elsewhere. Out-of-range +// elements are filled with NaN values. +func randomHessenberg(n, stride int, rnd *rand.Rand) blas64.General { + ans := nanGeneral(n, n, stride) + for i := 0; i < n; i++ { + for j := 0; j < i-1; j++ { + ans.Data[i*ans.Stride+j] = 0 + } + for j := max(0, i-1); j < n; j++ { + ans.Data[i*ans.Stride+j] = rnd.NormFloat64() + } + } + return ans +} + +// randomSchurCanonical returns a random, general matrix in Schur canonical +// form, that is, block upper triangular with 1×1 and 2×2 diagonal blocks where +// each 2×2 diagonal block has its diagonal elements equal and its off-diagonal +// elements of opposite sign. +func randomSchurCanonical(n, stride int, rnd *rand.Rand) blas64.General { + t := randomGeneral(n, n, stride, rnd) + // Zero out the lower triangle. + for i := 0; i < t.Rows; i++ { + for j := 0; j < i; j++ { + t.Data[i*t.Stride+j] = 0 + } + } + // Randomly create 2×2 diagonal blocks. + for i := 0; i < t.Rows; { + if i == t.Rows-1 || rnd.Float64() < 0.5 { + // 1×1 block. + i++ + continue + } + // 2×2 block. + // Diagonal elements equal. + t.Data[(i+1)*t.Stride+i+1] = t.Data[i*t.Stride+i] + // Off-diagonal elements of opposite sign. + c := rnd.NormFloat64() + if math.Signbit(c) == math.Signbit(t.Data[i*t.Stride+i+1]) { + c *= -1 + } + t.Data[(i+1)*t.Stride+i] = c + i += 2 + } + return t +} + +// blockedUpperTriGeneral returns a normal random, general matrix in the form +// +// c-k-l k l +// A = k [ 0 A12 A13 ] if r-k-l >= 0; +// l [ 0 0 A23 ] +// r-k-l [ 0 0 0 ] +// +// c-k-l k l +// A = k [ 0 A12 A13 ] if r-k-l < 0; +// r-k [ 0 0 A23 ] +// +// where the k×k matrix A12 and l×l matrix is non-singular +// upper triangular. A23 is l×l upper triangular if r-k-l >= 0, +// otherwise A23 is (r-k)×l upper trapezoidal. +func blockedUpperTriGeneral(r, c, k, l, stride int, kblock bool, rnd *rand.Rand) blas64.General { + t := l + if kblock { + t += k + } + ans := zeros(r, c, stride) + for i := 0; i < min(r, t); i++ { + var v float64 + for v == 0 { + v = rnd.NormFloat64() + } + ans.Data[i*ans.Stride+i+(c-t)] = v + } + for i := 0; i < min(r, t); i++ { + for j := i + (c - t) + 1; j < c; j++ { + ans.Data[i*ans.Stride+j] = rnd.NormFloat64() + } + } + return ans +} + +// nanTriangular allocates a new r×c triangular matrix filled with NaN values. +func nanTriangular(uplo blas.Uplo, n, stride int) blas64.Triangular { + if n < 0 { + panic("bad matrix size") + } + if n == 0 { + return blas64.Triangular{ + Stride: max(1, stride), + Uplo: uplo, + Diag: blas.NonUnit, + } + } + if stride < n { + panic("bad stride") + } + return blas64.Triangular{ + N: n, + Stride: stride, + Data: nanSlice((n-1)*stride + n), + Uplo: uplo, + Diag: blas.NonUnit, + } +} + +// randomTriangular allocates a new r×c triangular matrix filled with random +// numbers. Out-of-triangle elements are filled with NaN values. +func randomTriangular(uplo blas.Uplo, n, stride int, rnd *rand.Rand) blas64.Triangular { + ans := nanTriangular(uplo, n, stride) + if uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + ans.Data[i*ans.Stride+j] = rnd.NormFloat64() + } + } + return ans + } + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + ans.Data[i*ans.Stride+j] = rnd.NormFloat64() + } + } + return ans +} + +// generalOutsideAllNaN returns whether all out-of-range elements have NaN +// values. +func generalOutsideAllNaN(a blas64.General) bool { + // Check after last column. + for i := 0; i < a.Rows-1; i++ { + for _, v := range a.Data[i*a.Stride+a.Cols : i*a.Stride+a.Stride] { + if !math.IsNaN(v) { + return false + } + } + } + // Check after last element. + last := (a.Rows-1)*a.Stride + a.Cols + if a.Rows == 0 || a.Cols == 0 { + last = 0 + } + for _, v := range a.Data[last:] { + if !math.IsNaN(v) { + return false + } + } + return true +} + +// triangularOutsideAllNaN returns whether all out-of-triangle elements have NaN +// values. +func triangularOutsideAllNaN(a blas64.Triangular) bool { + if a.Uplo == blas.Upper { + // Check below diagonal. + for i := 0; i < a.N; i++ { + for _, v := range a.Data[i*a.Stride : i*a.Stride+i] { + if !math.IsNaN(v) { + return false + } + } + } + // Check after last column. + for i := 0; i < a.N-1; i++ { + for _, v := range a.Data[i*a.Stride+a.N : i*a.Stride+a.Stride] { + if !math.IsNaN(v) { + return false + } + } + } + } else { + // Check above diagonal. + for i := 0; i < a.N-1; i++ { + for _, v := range a.Data[i*a.Stride+i+1 : i*a.Stride+a.Stride] { + if !math.IsNaN(v) { + return false + } + } + } + } + // Check after last element. + for _, v := range a.Data[max(0, a.N-1)*a.Stride+a.N:] { + if !math.IsNaN(v) { + return false + } + } + return true +} + +// transposeGeneral returns a new general matrix that is the transpose of the +// input. Nothing is done with data outside the {rows, cols} limit of the general. +func transposeGeneral(a blas64.General) blas64.General { + ans := blas64.General{ + Rows: a.Cols, + Cols: a.Rows, + Stride: a.Rows, + Data: make([]float64, a.Cols*a.Rows), + } + for i := 0; i < a.Rows; i++ { + for j := 0; j < a.Cols; j++ { + ans.Data[j*ans.Stride+i] = a.Data[i*a.Stride+j] + } + } + return ans +} + +// columnNorms returns the column norms of a. +func columnNorms(m, n int, a []float64, lda int) []float64 { + bi := blas64.Implementation() + norms := make([]float64, n) + for j := 0; j < n; j++ { + norms[j] = bi.Dnrm2(m, a[j:], lda) + } + return norms +} + +// extractVMat collects the single reflectors from a into a matrix. +func extractVMat(m, n int, a []float64, lda int, direct lapack.Direct, store lapack.StoreV) blas64.General { + k := min(m, n) + switch { + default: + panic("not implemented") + case direct == lapack.Forward && store == lapack.ColumnWise: + v := blas64.General{ + Rows: m, + Cols: k, + Stride: k, + Data: make([]float64, m*k), + } + for i := 0; i < k; i++ { + for j := 0; j < i; j++ { + v.Data[j*v.Stride+i] = 0 + } + v.Data[i*v.Stride+i] = 1 + for j := i + 1; j < m; j++ { + v.Data[j*v.Stride+i] = a[j*lda+i] + } + } + return v + case direct == lapack.Forward && store == lapack.RowWise: + v := blas64.General{ + Rows: k, + Cols: n, + Stride: n, + Data: make([]float64, k*n), + } + for i := 0; i < k; i++ { + for j := 0; j < i; j++ { + v.Data[i*v.Stride+j] = 0 + } + v.Data[i*v.Stride+i] = 1 + for j := i + 1; j < n; j++ { + v.Data[i*v.Stride+j] = a[i*lda+j] + } + } + return v + } +} + +// constructBidiagonal constructs a bidiagonal matrix with the given diagonal +// and off-diagonal elements. +func constructBidiagonal(uplo blas.Uplo, n int, d, e []float64) blas64.General { + bMat := blas64.General{ + Rows: n, + Cols: n, + Stride: n, + Data: make([]float64, n*n), + } + + for i := 0; i < n-1; i++ { + bMat.Data[i*bMat.Stride+i] = d[i] + if uplo == blas.Upper { + bMat.Data[i*bMat.Stride+i+1] = e[i] + } else { + bMat.Data[(i+1)*bMat.Stride+i] = e[i] + } + } + bMat.Data[(n-1)*bMat.Stride+n-1] = d[n-1] + return bMat +} + +// constructVMat transforms the v matrix based on the storage. +func constructVMat(vMat blas64.General, store lapack.StoreV, direct lapack.Direct) blas64.General { + m := vMat.Rows + k := vMat.Cols + switch { + default: + panic("not implemented") + case store == lapack.ColumnWise && direct == lapack.Forward: + ldv := k + v := make([]float64, m*k) + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + if j > i { + v[i*ldv+j] = 0 + } else if j == i { + v[i*ldv+i] = 1 + } else { + v[i*ldv+j] = vMat.Data[i*vMat.Stride+j] + } + } + } + return blas64.General{ + Rows: m, + Cols: k, + Stride: k, + Data: v, + } + case store == lapack.RowWise && direct == lapack.Forward: + ldv := m + v := make([]float64, m*k) + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + if j > i { + v[j*ldv+i] = 0 + } else if j == i { + v[j*ldv+i] = 1 + } else { + v[j*ldv+i] = vMat.Data[i*vMat.Stride+j] + } + } + } + return blas64.General{ + Rows: k, + Cols: m, + Stride: m, + Data: v, + } + case store == lapack.ColumnWise && direct == lapack.Backward: + rowsv := m + ldv := k + v := make([]float64, m*k) + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + vrow := rowsv - i - 1 + vcol := k - j - 1 + if j > i { + v[vrow*ldv+vcol] = 0 + } else if j == i { + v[vrow*ldv+vcol] = 1 + } else { + v[vrow*ldv+vcol] = vMat.Data[i*vMat.Stride+j] + } + } + } + return blas64.General{ + Rows: rowsv, + Cols: ldv, + Stride: ldv, + Data: v, + } + case store == lapack.RowWise && direct == lapack.Backward: + rowsv := k + ldv := m + v := make([]float64, m*k) + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + vcol := ldv - i - 1 + vrow := k - j - 1 + if j > i { + v[vrow*ldv+vcol] = 0 + } else if j == i { + v[vrow*ldv+vcol] = 1 + } else { + v[vrow*ldv+vcol] = vMat.Data[i*vMat.Stride+j] + } + } + } + return blas64.General{ + Rows: rowsv, + Cols: ldv, + Stride: ldv, + Data: v, + } + } +} + +func constructH(tau []float64, v blas64.General, store lapack.StoreV, direct lapack.Direct) blas64.General { + m := v.Rows + k := v.Cols + if store == lapack.RowWise { + m, k = k, m + } + h := blas64.General{ + Rows: m, + Cols: m, + Stride: m, + Data: make([]float64, m*m), + } + for i := 0; i < m; i++ { + h.Data[i*m+i] = 1 + } + for i := 0; i < k; i++ { + vecData := make([]float64, m) + if store == lapack.ColumnWise { + for j := 0; j < m; j++ { + vecData[j] = v.Data[j*v.Cols+i] + } + } else { + for j := 0; j < m; j++ { + vecData[j] = v.Data[i*v.Cols+j] + } + } + vec := blas64.Vector{ + Inc: 1, + Data: vecData, + } + + hi := blas64.General{ + Rows: m, + Cols: m, + Stride: m, + Data: make([]float64, m*m), + } + for i := 0; i < m; i++ { + hi.Data[i*m+i] = 1 + } + // hi = I - tau * v * v^T + blas64.Ger(-tau[i], vec, vec, hi) + + hcopy := blas64.General{ + Rows: m, + Cols: m, + Stride: m, + Data: make([]float64, m*m), + } + copy(hcopy.Data, h.Data) + if direct == lapack.Forward { + // H = H * H_I in forward mode + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, hcopy, hi, 0, h) + } else { + // H = H_I * H in backward mode + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, hi, hcopy, 0, h) + } + } + return h +} + +// constructQ constructs the Q matrix from the result of dgeqrf and dgeqr2. +func constructQ(kind string, m, n int, a []float64, lda int, tau []float64) blas64.General { + k := min(m, n) + return constructQK(kind, m, n, k, a, lda, tau) +} + +// constructQK constructs the Q matrix from the result of dgeqrf and dgeqr2 using +// the first k reflectors. +func constructQK(kind string, m, n, k int, a []float64, lda int, tau []float64) blas64.General { + var sz int + switch kind { + case "QR": + sz = m + case "LQ", "RQ": + sz = n + } + + q := blas64.General{ + Rows: sz, + Cols: sz, + Stride: sz, + Data: make([]float64, sz*sz), + } + for i := 0; i < sz; i++ { + q.Data[i*sz+i] = 1 + } + qCopy := blas64.General{ + Rows: q.Rows, + Cols: q.Cols, + Stride: q.Stride, + Data: make([]float64, len(q.Data)), + } + for i := 0; i < k; i++ { + h := blas64.General{ + Rows: sz, + Cols: sz, + Stride: sz, + Data: make([]float64, sz*sz), + } + for j := 0; j < sz; j++ { + h.Data[j*sz+j] = 1 + } + vVec := blas64.Vector{ + Inc: 1, + Data: make([]float64, sz), + } + switch kind { + case "QR": + vVec.Data[i] = 1 + for j := i + 1; j < sz; j++ { + vVec.Data[j] = a[lda*j+i] + } + case "LQ": + vVec.Data[i] = 1 + for j := i + 1; j < sz; j++ { + vVec.Data[j] = a[i*lda+j] + } + case "RQ": + for j := 0; j < n-k+i; j++ { + vVec.Data[j] = a[(m-k+i)*lda+j] + } + vVec.Data[n-k+i] = 1 + } + blas64.Ger(-tau[i], vVec, vVec, h) + copy(qCopy.Data, q.Data) + // Mulitply q by the new h + switch kind { + case "QR", "RQ": + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, h, 0, q) + case "LQ": + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, h, qCopy, 0, q) + } + } + return q +} + +// checkBidiagonal checks the bidiagonal decomposition from dlabrd and dgebd2. +// The input to this function is the answer returned from the routines, stored +// in a, d, e, tauP, and tauQ. The data of original A matrix (before +// decomposition) is input in aCopy. +// +// checkBidiagonal constructs the V and U matrices, and from them constructs Q +// and P. Using these constructions, it checks that Q^T * A * P and checks that +// the result is bidiagonal. +func checkBidiagonal(t *testing.T, m, n, nb int, a []float64, lda int, d, e, tauP, tauQ, aCopy []float64) { + // Check the answer. + // Construct V and U. + qMat := constructQPBidiagonal(lapack.ApplyQ, m, n, nb, a, lda, tauQ) + pMat := constructQPBidiagonal(lapack.ApplyP, m, n, nb, a, lda, tauP) + + // Compute Q^T * A * P + aMat := blas64.General{ + Rows: m, + Cols: n, + Stride: lda, + Data: make([]float64, len(aCopy)), + } + copy(aMat.Data, aCopy) + + tmp1 := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + blas64.Gemm(blas.Trans, blas.NoTrans, 1, qMat, aMat, 0, tmp1) + tmp2 := blas64.General{ + Rows: m, + Cols: n, + Stride: n, + Data: make([]float64, m*n), + } + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, tmp1, pMat, 0, tmp2) + + // Check that the first nb rows and cols of tm2 are upper bidiagonal + // if m >= n, and lower bidiagonal otherwise. + correctDiag := true + matchD := true + matchE := true + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if i >= nb && j >= nb { + continue + } + v := tmp2.Data[i*tmp2.Stride+j] + if i == j { + if math.Abs(d[i]-v) > 1e-12 { + matchD = false + } + continue + } + if m >= n && i == j-1 { + if math.Abs(e[j-1]-v) > 1e-12 { + matchE = false + } + continue + } + if m < n && i-1 == j { + if math.Abs(e[i-1]-v) > 1e-12 { + matchE = false + } + continue + } + if math.Abs(v) > 1e-12 { + correctDiag = false + } + } + } + if !correctDiag { + t.Errorf("Updated A not bi-diagonal") + } + if !matchD { + fmt.Println("d = ", d) + t.Errorf("D Mismatch") + } + if !matchE { + t.Errorf("E mismatch") + } +} + +// constructQPBidiagonal constructs Q or P from the Bidiagonal decomposition +// computed by dlabrd and bgebd2. +func constructQPBidiagonal(vect lapack.DecompUpdate, m, n, nb int, a []float64, lda int, tau []float64) blas64.General { + sz := n + if vect == lapack.ApplyQ { + sz = m + } + + var ldv int + var v blas64.General + if vect == lapack.ApplyQ { + ldv = nb + v = blas64.General{ + Rows: m, + Cols: nb, + Stride: ldv, + Data: make([]float64, m*ldv), + } + } else { + ldv = n + v = blas64.General{ + Rows: nb, + Cols: n, + Stride: ldv, + Data: make([]float64, m*ldv), + } + } + + if vect == lapack.ApplyQ { + if m >= n { + for i := 0; i < m; i++ { + for j := 0; j <= min(nb-1, i); j++ { + if i == j { + v.Data[i*ldv+j] = 1 + continue + } + v.Data[i*ldv+j] = a[i*lda+j] + } + } + } else { + for i := 1; i < m; i++ { + for j := 0; j <= min(nb-1, i-1); j++ { + if i-1 == j { + v.Data[i*ldv+j] = 1 + continue + } + v.Data[i*ldv+j] = a[i*lda+j] + } + } + } + } else { + if m < n { + for i := 0; i < nb; i++ { + for j := i; j < n; j++ { + if i == j { + v.Data[i*ldv+j] = 1 + continue + } + v.Data[i*ldv+j] = a[i*lda+j] + } + } + } else { + for i := 0; i < nb; i++ { + for j := i + 1; j < n; j++ { + if j-1 == i { + v.Data[i*ldv+j] = 1 + continue + } + v.Data[i*ldv+j] = a[i*lda+j] + } + } + } + } + + // The variable name is a computation of Q, but the algorithm is mostly the + // same for computing P (just with different data). + qMat := blas64.General{ + Rows: sz, + Cols: sz, + Stride: sz, + Data: make([]float64, sz*sz), + } + hMat := blas64.General{ + Rows: sz, + Cols: sz, + Stride: sz, + Data: make([]float64, sz*sz), + } + // set Q to I + for i := 0; i < sz; i++ { + qMat.Data[i*qMat.Stride+i] = 1 + } + for i := 0; i < nb; i++ { + qCopy := blas64.General{Rows: qMat.Rows, Cols: qMat.Cols, Stride: qMat.Stride, Data: make([]float64, len(qMat.Data))} + copy(qCopy.Data, qMat.Data) + + // Set g and h to I + for i := 0; i < sz; i++ { + for j := 0; j < sz; j++ { + if i == j { + hMat.Data[i*sz+j] = 1 + } else { + hMat.Data[i*sz+j] = 0 + } + } + } + var vi blas64.Vector + // H -= tauQ[i] * v[i] * v[i]^t + if vect == lapack.ApplyQ { + vi = blas64.Vector{ + Inc: v.Stride, + Data: v.Data[i:], + } + } else { + vi = blas64.Vector{ + Inc: 1, + Data: v.Data[i*v.Stride:], + } + } + blas64.Ger(-tau[i], vi, vi, hMat) + // Q = Q * G[1] + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, qCopy, hMat, 0, qMat) + } + return qMat +} + +// printRowise prints the matrix with one row per line. This is useful for debugging. +// If beyond is true, it prints beyond the final column to lda. If false, only +// the columns are printed. +func printRowise(a []float64, m, n, lda int, beyond bool) { + for i := 0; i < m; i++ { + end := n + if beyond { + end = lda + } + fmt.Println(a[i*lda : i*lda+end]) + } +} + +// isOrthonormal checks that a general matrix is orthonormal. +func isOrthonormal(q blas64.General) bool { + n := q.Rows + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + dot := blas64.Dot(n, + blas64.Vector{Inc: 1, Data: q.Data[i*q.Stride:]}, + blas64.Vector{Inc: 1, Data: q.Data[j*q.Stride:]}, + ) + if math.IsNaN(dot) { + return false + } + if i == j { + if math.Abs(dot-1) > 1e-10 { + return false + } + } else { + if math.Abs(dot) > 1e-10 { + return false + } + } + } + } + return true +} + +// copyMatrix copies an m×n matrix src of stride n into an m×n matrix dst of stride ld. +func copyMatrix(m, n int, dst []float64, ld int, src []float64) { + for i := 0; i < m; i++ { + copy(dst[i*ld:i*ld+n], src[i*n:i*n+n]) + } +} + +func copyGeneral(dst, src blas64.General) { + r := min(dst.Rows, src.Rows) + c := min(dst.Cols, src.Cols) + for i := 0; i < r; i++ { + copy(dst.Data[i*dst.Stride:i*dst.Stride+c], src.Data[i*src.Stride:i*src.Stride+c]) + } +} + +// cloneGeneral allocates and returns an exact copy of the given general matrix. +func cloneGeneral(a blas64.General) blas64.General { + c := a + c.Data = make([]float64, len(a.Data)) + copy(c.Data, a.Data) + return c +} + +// equalApprox returns whether the matrices A and B of order n are approximately +// equal within given tolerance. +func equalApprox(m, n int, a []float64, lda int, b []float64, tol float64) bool { + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + diff := a[i*lda+j] - b[i*n+j] + if math.IsNaN(diff) || math.Abs(diff) > tol { + return false + } + } + } + return true +} + +// equalApproxGeneral returns whether the general matrices a and b are +// approximately equal within given tolerance. +func equalApproxGeneral(a, b blas64.General, tol float64) bool { + if a.Rows != b.Rows || a.Cols != b.Cols { + panic("bad input") + } + for i := 0; i < a.Rows; i++ { + for j := 0; j < a.Cols; j++ { + diff := a.Data[i*a.Stride+j] - b.Data[i*b.Stride+j] + if math.IsNaN(diff) || math.Abs(diff) > tol { + return false + } + } + } + return true +} + +// equalApproxTriangular returns whether the triangular matrices A and B of +// order n are approximately equal within given tolerance. +func equalApproxTriangular(upper bool, n int, a []float64, lda int, b []float64, tol float64) bool { + if upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + diff := a[i*lda+j] - b[i*n+j] + if math.IsNaN(diff) || math.Abs(diff) > tol { + return false + } + } + } + return true + } + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + diff := a[i*lda+j] - b[i*n+j] + if math.IsNaN(diff) || math.Abs(diff) > tol { + return false + } + } + } + return true +} + +// eye returns an identity matrix of given order and stride. +func eye(n, stride int) blas64.General { + ans := nanGeneral(n, n, stride) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + ans.Data[i*ans.Stride+j] = 0 + } + ans.Data[i*ans.Stride+i] = 1 + } + return ans +} + +// zeros returns an m×n matrix with given stride filled with zeros. +func zeros(m, n, stride int) blas64.General { + a := nanGeneral(m, n, stride) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a.Data[i*a.Stride+j] = 0 + } + } + return a +} + +// extract2x2Block returns the elements of T at [0,0], [0,1], [1,0], and [1,1]. +func extract2x2Block(t []float64, ldt int) (a, b, c, d float64) { + return t[0], t[1], t[ldt], t[ldt+1] +} + +// isSchurCanonical returns whether the 2×2 matrix [a b; c d] is in Schur +// canonical form. +func isSchurCanonical(a, b, c, d float64) bool { + return c == 0 || (a == d && math.Signbit(b) != math.Signbit(c)) +} + +// isSchurCanonicalGeneral returns whether T is block upper triangular with 1×1 +// and 2×2 diagonal blocks, each 2×2 block in Schur canonical form. The function +// checks only along the diagonal and the first subdiagonal, otherwise the lower +// triangle is not accessed. +func isSchurCanonicalGeneral(t blas64.General) bool { + if t.Rows != t.Cols { + panic("invalid matrix") + } + for i := 0; i < t.Rows-1; { + if t.Data[(i+1)*t.Stride+i] == 0 { + // 1×1 block. + i++ + continue + } + // 2×2 block. + a, b, c, d := extract2x2Block(t.Data[i*t.Stride+i:], t.Stride) + if !isSchurCanonical(a, b, c, d) { + return false + } + i += 2 + } + return true +} + +// schurBlockEigenvalues returns the two eigenvalues of the 2×2 matrix [a b; c d] +// that must be in Schur canonical form. +func schurBlockEigenvalues(a, b, c, d float64) (ev1, ev2 complex128) { + if !isSchurCanonical(a, b, c, d) { + panic("block not in Schur canonical form") + } + if c == 0 { + return complex(a, 0), complex(d, 0) + } + im := math.Sqrt(-b * c) + return complex(a, im), complex(a, -im) +} + +// schurBlockSize returns the size of the diagonal block at i-th row in the +// upper quasi-triangular matrix t in Schur canonical form, and whether i points +// to the first row of the block. For zero-sized matrices the function returns 0 +// and true. +func schurBlockSize(t blas64.General, i int) (size int, first bool) { + if t.Rows != t.Cols { + panic("matrix not square") + } + if t.Rows == 0 { + return 0, true + } + if i < 0 || t.Rows <= i { + panic("index out of range") + } + + first = true + if i > 0 && t.Data[i*t.Stride+i-1] != 0 { + // There is a non-zero element to the left, therefore i must + // point to the second row in a 2×2 diagonal block. + first = false + i-- + } + size = 1 + if i+1 < t.Rows && t.Data[(i+1)*t.Stride+i] != 0 { + // There is a non-zero element below, this must be a 2×2 + // diagonal block. + size = 2 + } + return size, first +} + +// containsComplex returns whether z is approximately equal to one of the complex +// numbers in v. If z is found, its index in v will be also returned. +func containsComplex(v []complex128, z complex128, tol float64) (found bool, index int) { + for i := range v { + if cmplx.Abs(v[i]-z) < tol { + return true, i + } + } + return false, -1 +} + +// isAllNaN returns whether x contains only NaN values. +func isAllNaN(x []float64) bool { + for _, v := range x { + if !math.IsNaN(v) { + return false + } + } + return true +} + +// isUpperHessenberg returns whether h contains only zeros below the +// subdiagonal. +func isUpperHessenberg(h blas64.General) bool { + if h.Rows != h.Cols { + panic("matrix not square") + } + n := h.Rows + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i > j+1 && h.Data[i*h.Stride+j] != 0 { + return false + } + } + } + return true +} + +// isUpperTriangular returns whether a contains only zeros below the diagonal. +func isUpperTriangular(a blas64.General) bool { + n := a.Rows + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + if a.Data[i*a.Stride+j] != 0 { + return false + } + } + } + return true +} + +// unbalancedSparseGeneral returns an m×n dense matrix with a random sparse +// structure consisting of nz nonzero elements. The matrix will be unbalanced by +// multiplying each element randomly by its row or column index. +func unbalancedSparseGeneral(m, n, stride int, nonzeros int, rnd *rand.Rand) blas64.General { + a := zeros(m, n, stride) + for k := 0; k < nonzeros; k++ { + i := rnd.Intn(n) + j := rnd.Intn(n) + if rnd.Float64() < 0.5 { + a.Data[i*stride+j] = float64(i+1) * rnd.NormFloat64() + } else { + a.Data[i*stride+j] = float64(j+1) * rnd.NormFloat64() + } + } + return a +} + +// columnOf returns a copy of the j-th column of a. +func columnOf(a blas64.General, j int) []float64 { + if j < 0 || a.Cols <= j { + panic("bad column index") + } + col := make([]float64, a.Rows) + for i := range col { + col[i] = a.Data[i*a.Stride+j] + } + return col +} + +// isRightEigenvectorOf returns whether the vector xRe+i*xIm, where i is the +// imaginary unit, is the right eigenvector of A corresponding to the eigenvalue +// lambda. +// +// A right eigenvector corresponding to a complex eigenvalue λ is a complex +// non-zero vector x such that +// A x = λ x. +func isRightEigenvectorOf(a blas64.General, xRe, xIm []float64, lambda complex128, tol float64) bool { + if a.Rows != a.Cols { + panic("matrix not square") + } + + if imag(lambda) != 0 && xIm == nil { + // Complex eigenvalue of a real matrix cannot have a real + // eigenvector. + return false + } + + n := a.Rows + + // Compute A real(x) and store the result into xReAns. + xReAns := make([]float64, n) + blas64.Gemv(blas.NoTrans, 1, a, blas64.Vector{1, xRe}, 0, blas64.Vector{1, xReAns}) + + if imag(lambda) == 0 && xIm == nil { + // Real eigenvalue and eigenvector. + + // Compute λx and store the result into lambdax. + lambdax := make([]float64, n) + floats.AddScaled(lambdax, real(lambda), xRe) + + if floats.Distance(xReAns, lambdax, math.Inf(1)) > tol { + return false + } + return true + } + + // Complex eigenvector, and real or complex eigenvalue. + + // Compute A imag(x) and store the result into xImAns. + xImAns := make([]float64, n) + blas64.Gemv(blas.NoTrans, 1, a, blas64.Vector{1, xIm}, 0, blas64.Vector{1, xImAns}) + + // Compute λx and store the result into lambdax. + lambdax := make([]complex128, n) + for i := range lambdax { + lambdax[i] = lambda * complex(xRe[i], xIm[i]) + } + + for i, v := range lambdax { + ax := complex(xReAns[i], xImAns[i]) + if cmplx.Abs(v-ax) > tol { + return false + } + } + return true +} + +// isLeftEigenvectorOf returns whether the vector yRe+i*yIm, where i is the +// imaginary unit, is the left eigenvector of A corresponding to the eigenvalue +// lambda. +// +// A left eigenvector corresponding to a complex eigenvalue λ is a complex +// non-zero vector y such that +// y^H A = λ y^H, +// which is equivalent for real A to +// A^T y = conj(λ) y, +func isLeftEigenvectorOf(a blas64.General, yRe, yIm []float64, lambda complex128, tol float64) bool { + if a.Rows != a.Cols { + panic("matrix not square") + } + + if imag(lambda) != 0 && yIm == nil { + // Complex eigenvalue of a real matrix cannot have a real + // eigenvector. + return false + } + + n := a.Rows + + // Compute A^T real(y) and store the result into yReAns. + yReAns := make([]float64, n) + blas64.Gemv(blas.Trans, 1, a, blas64.Vector{1, yRe}, 0, blas64.Vector{1, yReAns}) + + if imag(lambda) == 0 && yIm == nil { + // Real eigenvalue and eigenvector. + + // Compute λy and store the result into lambday. + lambday := make([]float64, n) + floats.AddScaled(lambday, real(lambda), yRe) + + if floats.Distance(yReAns, lambday, math.Inf(1)) > tol { + return false + } + return true + } + + // Complex eigenvector, and real or complex eigenvalue. + + // Compute A^T imag(y) and store the result into yImAns. + yImAns := make([]float64, n) + blas64.Gemv(blas.Trans, 1, a, blas64.Vector{1, yIm}, 0, blas64.Vector{1, yImAns}) + + // Compute conj(λ)y and store the result into lambday. + lambda = cmplx.Conj(lambda) + lambday := make([]complex128, n) + for i := range lambday { + lambday[i] = lambda * complex(yRe[i], yIm[i]) + } + + for i, v := range lambday { + ay := complex(yReAns[i], yImAns[i]) + if cmplx.Abs(v-ay) > tol { + return false + } + } + return true +} + +// rootsOfUnity returns the n complex numbers whose n-th power is equal to 1. +func rootsOfUnity(n int) []complex128 { + w := make([]complex128, n) + for i := 0; i < n; i++ { + angle := math.Pi * float64(2*i) / float64(n) + w[i] = complex(math.Cos(angle), math.Sin(angle)) + } + return w +} + +// randomOrthogonal returns an n×n random orthogonal matrix. +func randomOrthogonal(n int, rnd *rand.Rand) blas64.General { + q := eye(n, n) + x := make([]float64, n) + v := make([]float64, n) + for j := 0; j < n-1; j++ { + // x represents the j-th column of a random matrix. + for i := 0; i < j; i++ { + x[i] = 0 + } + for i := j; i < n; i++ { + x[i] = rnd.NormFloat64() + } + // Compute v that represents the elementary reflector that + // annihilates the subdiagonal elements of x. + reflector(v, x, j) + // Compute Q * H_j and store the result into Q. + applyReflector(q, q, v) + } + if !isOrthonormal(q) { + panic("Q not orthogonal") + } + return q +} + +// reflector generates a Householder reflector v that zeros out subdiagonal +// entries in the j-th column of a matrix. +func reflector(v, col []float64, j int) { + n := len(col) + if len(v) != n { + panic("slice length mismatch") + } + if j < 0 || n <= j { + panic("invalid column index") + } + + for i := range v { + v[i] = 0 + } + if j == n-1 { + return + } + s := floats.Norm(col[j:], 2) + if s == 0 { + return + } + v[j] = col[j] + math.Copysign(s, col[j]) + copy(v[j+1:], col[j+1:]) + s = floats.Norm(v[j:], 2) + floats.Scale(1/s, v[j:]) +} + +// applyReflector computes Q*H where H is a Householder matrix represented by +// the Householder reflector v. +func applyReflector(qh blas64.General, q blas64.General, v []float64) { + n := len(v) + if qh.Rows != n || qh.Cols != n { + panic("bad size of qh") + } + if q.Rows != n || q.Cols != n { + panic("bad size of q") + } + qv := make([]float64, n) + blas64.Gemv(blas.NoTrans, 1, q, blas64.Vector{1, v}, 0, blas64.Vector{1, qv}) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + qh.Data[i*qh.Stride+j] = q.Data[i*q.Stride+j] + } + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + qh.Data[i*qh.Stride+j] -= 2 * qv[i] * v[j] + } + } + var norm2 float64 + for _, vi := range v { + norm2 += vi * vi + } + norm2inv := 1 / norm2 + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + qh.Data[i*qh.Stride+j] *= norm2inv + } + } +} + +// constructGSVDresults returns the matrices [ 0 R ], D1 and D2 described +// in the documentation of Dtgsja and Dggsvd3, and the result matrix in +// the documentation for Dggsvp3. +func constructGSVDresults(n, p, m, k, l int, a, b blas64.General, alpha, beta []float64) (zeroR, d1, d2 blas64.General) { + // [ 0 R ] + zeroR = zeros(k+l, n, n) + dst := zeroR + dst.Rows = min(m, k+l) + dst.Cols = k + l + dst.Data = zeroR.Data[n-k-l:] + src := a + src.Rows = min(m, k+l) + src.Cols = k + l + src.Data = a.Data[n-k-l:] + copyGeneral(dst, src) + if m < k+l { + // [ 0 R ] + dst.Rows = k + l - m + dst.Cols = k + l - m + dst.Data = zeroR.Data[m*zeroR.Stride+n-(k+l-m):] + src = b + src.Rows = k + l - m + src.Cols = k + l - m + src.Data = b.Data[(m-k)*b.Stride+n+m-k-l:] + copyGeneral(dst, src) + } + + // D1 + d1 = zeros(m, k+l, k+l) + for i := 0; i < k; i++ { + d1.Data[i*d1.Stride+i] = 1 + } + for i := k; i < min(m, k+l); i++ { + d1.Data[i*d1.Stride+i] = alpha[i] + } + + // D2 + d2 = zeros(p, k+l, k+l) + for i := 0; i < min(l, m-k); i++ { + d2.Data[i*d2.Stride+i+k] = beta[k+i] + } + for i := m - k; i < l; i++ { + d2.Data[i*d2.Stride+i+k] = 1 + } + + return zeroR, d1, d2 +} + +func constructGSVPresults(n, p, m, k, l int, a, b blas64.General) (zeroA, zeroB blas64.General) { + zeroA = zeros(m, n, n) + dst := zeroA + dst.Rows = min(m, k+l) + dst.Cols = k + l + dst.Data = zeroA.Data[n-k-l:] + src := a + dst.Rows = min(m, k+l) + src.Cols = k + l + src.Data = a.Data[n-k-l:] + copyGeneral(dst, src) + + zeroB = zeros(p, n, n) + dst = zeroB + dst.Rows = l + dst.Cols = l + dst.Data = zeroB.Data[n-l:] + src = b + dst.Rows = l + src.Cols = l + src.Data = b.Data[n-l:] + copyGeneral(dst, src) + + return zeroA, zeroB +} diff --git a/lapack/testlapack/iladlc.go b/lapack/testlapack/iladlc.go new file mode 100644 index 00000000..b8a5b2b3 --- /dev/null +++ b/lapack/testlapack/iladlc.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import "testing" + +type Iladlcer interface { + Iladlc(m, n int, a []float64, lda int) int +} + +func IladlcTest(t *testing.T, impl Iladlcer) { + for i, test := range []struct { + a []float64 + m, n, lda int + ans int + }{ + { + a: []float64{0, 0, 0, 0}, + m: 1, + n: 1, + lda: 2, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 2, + n: 2, + lda: 2, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 4, + n: 1, + lda: 1, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 1, + n: 4, + lda: 4, + ans: -1, + }, + { + a: []float64{ + 1, 2, 3, 4, + 5, 6, 7, 8, + }, + m: 2, + n: 4, + lda: 4, + ans: 3, + }, + { + a: []float64{ + 1, 2, 3, 0, + 0, 0, 0, 0, + }, + m: 2, + n: 4, + lda: 4, + ans: 2, + }, + { + a: []float64{ + 0, 0, 3, 4, + 0, 0, 0, 0, + }, + m: 2, + n: 2, + lda: 4, + ans: -1, + }, + } { + ans := impl.Iladlc(test.m, test.n, test.a, test.lda) + if ans != test.ans { + t.Errorf("Column mismatch case %v. Want: %v, got: %v", i, test.ans, ans) + } + } +} diff --git a/lapack/testlapack/iladlr.go b/lapack/testlapack/iladlr.go new file mode 100644 index 00000000..bd74d28c --- /dev/null +++ b/lapack/testlapack/iladlr.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import "testing" + +type Iladlrer interface { + Iladlr(m, n int, a []float64, lda int) int +} + +func IladlrTest(t *testing.T, impl Iladlrer) { + for i, test := range []struct { + a []float64 + m, n, lda int + ans int + }{ + { + a: []float64{0, 0, 0, 0}, + m: 1, + n: 1, + lda: 2, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 2, + n: 2, + lda: 2, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 4, + n: 1, + lda: 1, + ans: -1, + }, + { + a: []float64{0, 0, 0, 0}, + m: 1, + n: 4, + lda: 4, + ans: -1, + }, + { + a: []float64{ + 1, 2, 3, 4, + 5, 6, 7, 8, + }, + m: 2, + n: 4, + lda: 4, + ans: 1, + }, + { + a: []float64{ + 1, 2, 3, 0, + 0, 0, 0, 0, + }, + m: 2, + n: 4, + lda: 4, + ans: 0, + }, + { + a: []float64{ + 0, 0, 3, 4, + 0, 0, 0, 0, + }, + m: 2, + n: 2, + lda: 4, + ans: -1, + }, + } { + ans := impl.Iladlr(test.m, test.n, test.a, test.lda) + if ans != test.ans { + t.Errorf("Column mismatch case %v. Want: %v, got: %v", i, test.ans, ans) + } + } +} diff --git a/lapack/testlapack/matgen.go b/lapack/testlapack/matgen.go new file mode 100644 index 00000000..9977c431 --- /dev/null +++ b/lapack/testlapack/matgen.go @@ -0,0 +1,655 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlatm1 computes the entries of dst as specified by mode, cond and rsign. +// +// mode describes how dst will be computed: +// |mode| == 1: dst[0] = 1 and dst[1:n] = 1/cond +// |mode| == 2: dst[:n-1] = 1/cond and dst[n-1] = 1 +// |mode| == 3: dst[i] = cond^{-i/(n-1)}, i=0,...,n-1 +// |mode| == 4: dst[i] = 1 - i*(1-1/cond)/(n-1) +// |mode| == 5: dst[i] = random number in the range (1/cond, 1) such that +// their logarithms are uniformly distributed +// |mode| == 6: dst[i] = random number from the distribution given by dist +// If mode is negative, the order of the elements of dst will be reversed. +// For other values of mode Dlatm1 will panic. +// +// If rsign is true and mode is not ±6, each entry of dst will be multiplied by 1 +// or -1 with probability 0.5 +// +// dist specifies the type of distribution to be used when mode == ±6: +// dist == 1: Uniform[0,1) +// dist == 2: Uniform[-1,1) +// dist == 3: Normal(0,1) +// For other values of dist Dlatm1 will panic. +// +// rnd is used as a source of random numbers. +func Dlatm1(dst []float64, mode int, cond float64, rsign bool, dist int, rnd *rand.Rand) { + amode := mode + if amode < 0 { + amode = -amode + } + if amode < 1 || 6 < amode { + panic("testlapack: invalid mode") + } + if cond < 1 { + panic("testlapack: cond < 1") + } + if amode == 6 && (dist < 1 || 3 < dist) { + panic("testlapack: invalid dist") + } + + n := len(dst) + if n == 0 { + return + } + + switch amode { + case 1: + dst[0] = 1 + for i := 1; i < n; i++ { + dst[i] = 1 / cond + } + case 2: + for i := 0; i < n-1; i++ { + dst[i] = 1 + } + dst[n-1] = 1 / cond + case 3: + dst[0] = 1 + if n > 1 { + alpha := math.Pow(cond, -1/float64(n-1)) + for i := 1; i < n; i++ { + dst[i] = math.Pow(alpha, float64(i)) + } + } + case 4: + dst[0] = 1 + if n > 1 { + condInv := 1 / cond + alpha := (1 - condInv) / float64(n-1) + for i := 1; i < n; i++ { + dst[i] = float64(n-i-1)*alpha + condInv + } + } + case 5: + alpha := math.Log(1 / cond) + for i := range dst { + dst[i] = math.Exp(alpha * rnd.Float64()) + } + case 6: + switch dist { + case 1: + for i := range dst { + dst[i] = rnd.Float64() + } + case 2: + for i := range dst { + dst[i] = 2*rnd.Float64() - 1 + } + case 3: + for i := range dst { + dst[i] = rnd.NormFloat64() + } + } + } + + if rsign && amode != 6 { + for i, v := range dst { + if rnd.Float64() < 0.5 { + dst[i] = -v + } + } + } + + if mode < 0 { + for i := 0; i < n/2; i++ { + dst[i], dst[n-i-1] = dst[n-i-1], dst[i] + } + } +} + +// Dlagsy generates an n×n symmetric matrix A, by pre- and post- multiplying a +// real diagonal matrix D with a random orthogonal matrix: +// A = U * D * U^T. +// +// work must have length at least 2*n, otherwise Dlagsy will panic. +// +// The parameter k is unused but it must satisfy +// 0 <= k <= n-1. +func Dlagsy(n, k int, d []float64, a []float64, lda int, rnd *rand.Rand, work []float64) { + checkMatrix(n, n, a, lda) + if k < 0 || max(0, n-1) < k { + panic("testlapack: invalid value of k") + } + if len(d) != n { + panic("testlapack: bad length of d") + } + if len(work) < 2*n { + panic("testlapack: insufficient work length") + } + + // Initialize lower triangle of A to diagonal matrix. + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + a[i*lda+j] = 0 + } + } + for i := 0; i < n; i++ { + a[i*lda+i] = d[i] + } + + bi := blas64.Implementation() + + // Generate lower triangle of symmetric matrix. + for i := n - 2; i >= 0; i-- { + for j := 0; j < n-i; j++ { + work[j] = rnd.NormFloat64() + } + wn := bi.Dnrm2(n-i, work[:n-i], 1) + wa := math.Copysign(wn, work[0]) + var tau float64 + if wn != 0 { + wb := work[0] + wa + bi.Dscal(n-i-1, 1/wb, work[1:n-i], 1) + work[0] = 1 + tau = wb / wa + } + + // Apply random reflection to A[i:n,i:n] from the left and the + // right. + // + // Compute y := tau * A * u. + bi.Dsymv(blas.Lower, n-i, tau, a[i*lda+i:], lda, work[:n-i], 1, 0, work[n:2*n-i], 1) + + // Compute v := y - 1/2 * tau * ( y, u ) * u. + alpha := -0.5 * tau * bi.Ddot(n-i, work[n:2*n-i], 1, work[:n-i], 1) + bi.Daxpy(n-i, alpha, work[:n-i], 1, work[n:2*n-i], 1) + + // Apply the transformation as a rank-2 update to A[i:n,i:n]. + bi.Dsyr2(blas.Lower, n-i, -1, work[:n-i], 1, work[n:2*n-i], 1, a[i*lda+i:], lda) + } + + // Store full symmetric matrix. + for i := 1; i < n; i++ { + for j := 0; j < i; j++ { + a[j*lda+i] = a[i*lda+j] + } + } +} + +// Dlagge generates a real general m×n matrix A, by pre- and post-multiplying +// a real diagonal matrix D with random orthogonal matrices: +// A = U*D*V. +// +// d must have length min(m,n), and work must have length m+n, otherwise Dlagge +// will panic. +// +// The parameters ku and kl are unused but they must satisfy +// 0 <= kl <= m-1, +// 0 <= ku <= n-1. +func Dlagge(m, n, kl, ku int, d []float64, a []float64, lda int, rnd *rand.Rand, work []float64) { + checkMatrix(m, n, a, lda) + if kl < 0 || max(0, m-1) < kl { + panic("testlapack: invalid value of kl") + } + if ku < 0 || max(0, n-1) < ku { + panic("testlapack: invalid value of ku") + } + if len(d) != min(m, n) { + panic("testlapack: bad length of d") + } + if len(work) < m+n { + panic("testlapack: insufficient work length") + } + + // Initialize A to diagonal matrix. + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = 0 + } + } + for i := 0; i < min(m, n); i++ { + a[i*lda+i] = d[i] + } + + // Quick exit if the user wants a diagonal matrix. + // if kl == 0 && ku == 0 { + // return + // } + + bi := blas64.Implementation() + + // Pre- and post-multiply A by random orthogonal matrices. + for i := min(m, n) - 1; i >= 0; i-- { + if i < m-1 { + for j := 0; j < m-i; j++ { + work[j] = rnd.NormFloat64() + } + wn := bi.Dnrm2(m-i, work[:m-i], 1) + wa := math.Copysign(wn, work[0]) + var tau float64 + if wn != 0 { + wb := work[0] + wa + bi.Dscal(m-i-1, 1/wb, work[1:m-i], 1) + work[0] = 1 + tau = wb / wa + } + + // Multiply A[i:m,i:n] by random reflection from the left. + bi.Dgemv(blas.Trans, m-i, n-i, + 1, a[i*lda+i:], lda, work[:m-i], 1, + 0, work[m:m+n-i], 1) + bi.Dger(m-i, n-i, + -tau, work[:m-i], 1, work[m:m+n-i], 1, + a[i*lda+i:], lda) + } + if i < n-1 { + for j := 0; j < n-i; j++ { + work[j] = rnd.NormFloat64() + } + wn := bi.Dnrm2(n-i, work[:n-i], 1) + wa := math.Copysign(wn, work[0]) + var tau float64 + if wn != 0 { + wb := work[0] + wa + bi.Dscal(n-i-1, 1/wb, work[1:n-i], 1) + work[0] = 1 + tau = wb / wa + } + + // Multiply A[i:m,i:n] by random reflection from the right. + bi.Dgemv(blas.NoTrans, m-i, n-i, + 1, a[i*lda+i:], lda, work[:n-i], 1, + 0, work[n:n+m-i], 1) + bi.Dger(m-i, n-i, + -tau, work[n:n+m-i], 1, work[:n-i], 1, + a[i*lda+i:], lda) + } + } + + // TODO(vladimir-ch): Reduce number of subdiagonals to kl and number of + // superdiagonals to ku. +} + +// dlarnv fills dst with random numbers from a uniform or normal distribution +// specified by dist: +// dist=1: uniform(0,1), +// dist=2: uniform(-1,1), +// dist=3: normal(0,1). +// For other values of dist dlarnv will panic. +func dlarnv(dst []float64, dist int, rnd *rand.Rand) { + switch dist { + default: + panic("testlapack: invalid dist") + case 1: + for i := range dst { + dst[i] = rnd.Float64() + } + case 2: + for i := range dst { + dst[i] = 2*rnd.Float64() - 1 + } + case 3: + for i := range dst { + dst[i] = rnd.NormFloat64() + } + } +} + +// dlattr generates an n×n triangular test matrix A with its properties uniquely +// determined by imat and uplo, and returns whether A has unit diagonal. If diag +// is blas.Unit, the diagonal elements are set so that A[k,k]=k. +// +// trans specifies whether the matrix A or its transpose will be used. +// +// If imat is greater than 10, dlattr also generates the right hand side of the +// linear system A*x=b, or A^T*x=b. Valid values of imat are 7, and all between 11 +// and 19, inclusive. +// +// b mush have length n, and work must have length 3*n, and dlattr will panic +// otherwise. +func dlattr(imat int, uplo blas.Uplo, trans blas.Transpose, n int, a []float64, lda int, b, work []float64, rnd *rand.Rand) (diag blas.Diag) { + checkMatrix(n, n, a, lda) + if len(b) != n { + panic("testlapack: bad length of b") + } + if len(work) < 3*n { + panic("testlapack: insufficient length of work") + } + if uplo != blas.Upper && uplo != blas.Lower { + panic("testlapack: bad uplo") + } + if trans != blas.Trans && trans != blas.NoTrans { + panic("testlapack: bad trans") + } + + if n == 0 { + return blas.NonUnit + } + + ulp := dlamchE * dlamchB + smlnum := dlamchS + bignum := (1 - ulp) / smlnum + + bi := blas64.Implementation() + + switch imat { + default: + // TODO(vladimir-ch): Implement the remaining cases. + panic("testlapack: invalid or unimplemented imat") + case 7: + // Identity matrix. The diagonal is set to NaN. + diag = blas.Unit + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + a[i*lda+i] = math.NaN() + for j := i + 1; j < n; j++ { + a[i*lda+j] = 0 + } + } + case blas.Lower: + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + a[i*lda+j] = 0 + } + a[i*lda+i] = math.NaN() + } + } + case 11: + // Generate a triangular matrix with elements between -1 and 1, + // give the diagonal norm 2 to make it well-conditioned, and + // make the right hand side large so that it requires scaling. + diag = blas.NonUnit + switch uplo { + case blas.Upper: + for i := 0; i < n-1; i++ { + dlarnv(a[i*lda+i:i*lda+n], 2, rnd) + } + case blas.Lower: + for i := 1; i < n; i++ { + dlarnv(a[i*lda:i*lda+i+1], 2, rnd) + } + } + for i := 0; i < n; i++ { + a[i*lda+i] = math.Copysign(2, a[i*lda+i]) + } + // Set the right hand side so that the largest value is bignum. + dlarnv(b, 2, rnd) + imax := bi.Idamax(n, b, 1) + bscal := bignum / math.Max(1, b[imax]) + bi.Dscal(n, bscal, b, 1) + case 12: + // Make the first diagonal element in the solve small to cause + // immediate overflow when dividing by T[j,j]. The off-diagonal + // elements are small (cnorm[j] < 1). + diag = blas.NonUnit + tscal := 1 / math.Max(1, float64(n-1)) + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + dlarnv(a[i*lda+i:i*lda+n], 2, rnd) + bi.Dscal(n-i-1, tscal, a[i*lda+i+1:], 1) + a[i*lda+i] = math.Copysign(1, a[i*lda+i]) + } + a[(n-1)*lda+n-1] *= smlnum + case blas.Lower: + for i := 0; i < n; i++ { + dlarnv(a[i*lda:i*lda+i+1], 2, rnd) + bi.Dscal(i, tscal, a[i*lda:], 1) + a[i*lda+i] = math.Copysign(1, a[i*lda+i]) + } + a[0] *= smlnum + } + dlarnv(b, 2, rnd) + case 13: + // Make the first diagonal element in the solve small to cause + // immediate overflow when dividing by T[j,j]. The off-diagonal + // elements are O(1) (cnorm[j] > 1). + diag = blas.NonUnit + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + dlarnv(a[i*lda+i:i*lda+n], 2, rnd) + a[i*lda+i] = math.Copysign(1, a[i*lda+i]) + } + a[(n-1)*lda+n-1] *= smlnum + case blas.Lower: + for i := 0; i < n; i++ { + dlarnv(a[i*lda:i*lda+i+1], 2, rnd) + a[i*lda+i] = math.Copysign(1, a[i*lda+i]) + } + a[0] *= smlnum + } + dlarnv(b, 2, rnd) + case 14: + // T is diagonal with small numbers on the diagonal to + // make the growth factor underflow, but a small right hand side + // chosen so that the solution does not overflow. + diag = blas.NonUnit + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + a[i*lda+j] = 0 + } + if (n-1-i)&0x2 == 0 { + a[i*lda+i] = smlnum + } else { + a[i*lda+i] = 1 + } + } + case blas.Lower: + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + a[i*lda+j] = 0 + } + if i&0x2 == 0 { + a[i*lda+i] = smlnum + } else { + a[i*lda+i] = 1 + } + } + } + // Set the right hand side alternately zero and small. + switch uplo { + case blas.Upper: + b[0] = 0 + for i := n - 1; i > 0; i -= 2 { + b[i] = 0 + b[i-1] = smlnum + } + case blas.Lower: + for i := 0; i < n-1; i += 2 { + b[i] = 0 + b[i+1] = smlnum + } + b[n-1] = 0 + } + case 15: + // Make the diagonal elements small to cause gradual overflow + // when dividing by T[j,j]. To control the amount of scaling + // needed, the matrix is bidiagonal. + diag = blas.NonUnit + texp := 1 / math.Max(1, float64(n-1)) + tscal := math.Pow(smlnum, texp) + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + a[i*lda+i] = tscal + if i < n-1 { + a[i*lda+i+1] = -1 + } + for j := i + 2; j < n; j++ { + a[i*lda+j] = 0 + } + } + case blas.Lower: + for i := 0; i < n; i++ { + for j := 0; j < i-1; j++ { + a[i*lda+j] = 0 + } + if i > 0 { + a[i*lda+i-1] = -1 + } + a[i*lda+i] = tscal + } + } + dlarnv(b, 2, rnd) + case 16: + // One zero diagonal element. + diag = blas.NonUnit + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + dlarnv(a[i*lda+i:i*lda+n], 2, rnd) + a[i*lda+i] = math.Copysign(2, a[i*lda+i]) + } + case blas.Lower: + for i := 0; i < n; i++ { + dlarnv(a[i*lda:i*lda+i+1], 2, rnd) + a[i*lda+i] = math.Copysign(2, a[i*lda+i]) + } + } + iy := n / 2 + a[iy*lda+iy] = 0 + dlarnv(b, 2, rnd) + bi.Dscal(n, 2, b, 1) + case 17: + // Make the offdiagonal elements large to cause overflow when + // adding a column of T. In the non-transposed case, the matrix + // is constructed to cause overflow when adding a column in + // every other step. + diag = blas.NonUnit + tscal := (1 - ulp) / (dlamchS / ulp) + texp := 1.0 + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + a[i*lda+j] = 0 + } + } + for j := n - 1; j >= 1; j -= 2 { + a[j] = -tscal / float64(n+1) + a[j*lda+j] = 1 + b[j] = texp * (1 - ulp) + a[j-1] = -tscal / float64(n+1) / float64(n+2) + a[(j-1)*lda+j-1] = 1 + b[j-1] = texp * float64(n*n+n-1) + texp *= 2 + } + b[0] = float64(n+1) / float64(n+2) * tscal + case blas.Lower: + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + a[i*lda+j] = 0 + } + } + for j := 0; j < n-1; j += 2 { + a[(n-1)*lda+j] = -tscal / float64(n+1) + a[j*lda+j] = 1 + b[j] = texp * (1 - ulp) + a[(n-1)*lda+j+1] = -tscal / float64(n+1) / float64(n+2) + a[(j+1)*lda+j+1] = 1 + b[j+1] = texp * float64(n*n+n-1) + texp *= 2 + } + b[n-1] = float64(n+1) / float64(n+2) * tscal + } + case 18: + // Generate a unit triangular matrix with elements between -1 + // and 1, and make the right hand side large so that it requires + // scaling. The diagonal is set to NaN. + diag = blas.Unit + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + a[i*lda+i] = math.NaN() + dlarnv(a[i*lda+i+1:i*lda+n], 2, rnd) + } + case blas.Lower: + for i := 0; i < n; i++ { + dlarnv(a[i*lda:i*lda+i], 2, rnd) + a[i*lda+i] = math.NaN() + } + } + // Set the right hand side so that the largest value is bignum. + dlarnv(b, 2, rnd) + iy := bi.Idamax(n, b, 1) + bnorm := math.Abs(b[iy]) + bscal := bignum / math.Max(1, bnorm) + bi.Dscal(n, bscal, b, 1) + case 19: + // Generate a triangular matrix with elements between + // bignum/(n-1) and bignum so that at least one of the column + // norms will exceed bignum. + // Dlatrs cannot handle this case for (typically) n>5. + diag = blas.NonUnit + tleft := bignum / math.Max(1, float64(n-1)) + tscal := bignum * (float64(n-1) / math.Max(1, float64(n))) + switch uplo { + case blas.Upper: + for i := 0; i < n; i++ { + dlarnv(a[i*lda+i:i*lda+n], 2, rnd) + for j := i; j < n; j++ { + aij := a[i*lda+j] + a[i*lda+j] = math.Copysign(tleft, aij) + tscal*aij + } + } + case blas.Lower: + for i := 0; i < n; i++ { + dlarnv(a[i*lda:i*lda+i+1], 2, rnd) + for j := 0; j <= i; j++ { + aij := a[i*lda+j] + a[i*lda+j] = math.Copysign(tleft, aij) + tscal*aij + } + } + } + dlarnv(b, 2, rnd) + bi.Dscal(n, 2, b, 1) + } + + // Flip the matrix if the transpose will be used. + if trans == blas.Trans { + switch uplo { + case blas.Upper: + for j := 0; j < n/2; j++ { + bi.Dswap(n-2*j-1, a[j*lda+j:], 1, a[(j+1)*lda+n-j-1:], -lda) + } + case blas.Lower: + for j := 0; j < n/2; j++ { + bi.Dswap(n-2*j-1, a[j*lda+j:], lda, a[(n-j-1)*lda+j+1:], -1) + } + } + } + + return diag +} + +func checkMatrix(m, n int, a []float64, lda int) { + if m < 0 { + panic("testlapack: m < 0") + } + if n < 0 { + panic("testlapack: n < 0") + } + if lda < max(1, n) { + panic("testlapack: lda < max(1, n)") + } + if len(a) < (m-1)*lda+n { + panic("testlapack: insufficient matrix slice length") + } +} diff --git a/lapack/testlapack/matgen_test.go b/lapack/testlapack/matgen_test.go new file mode 100644 index 00000000..663b9803 --- /dev/null +++ b/lapack/testlapack/matgen_test.go @@ -0,0 +1,90 @@ +// Copyright ©2017 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + "testing" + + "github.com/gonum/blas/blas64" +) + +func TestDlagsy(t *testing.T) { + const tol = 1e-14 + rnd := rand.New(rand.NewSource(1)) + for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { + for _, lda := range []int{0, 2*n + 1} { + if lda == 0 { + lda = max(1, n) + } + d := make([]float64, n) + for i := range d { + d[i] = 1 + } + a := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: nanSlice(n * lda), + } + work := make([]float64, a.Rows+a.Cols) + + Dlagsy(a.Rows, 0, d, a.Data, a.Stride, rnd, work) + + isIdentity := true + identityLoop: + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + aij := a.Data[i*a.Stride+j] + if math.IsNaN(aij) { + isIdentity = false + } + if i == j && math.Abs(aij-1) > tol { + isIdentity = false + } + if i != j && math.Abs(aij) > tol { + isIdentity = false + } + if !isIdentity { + break identityLoop + } + } + } + if !isIdentity { + t.Errorf("Case n=%v,lda=%v: unexpected result", n, lda) + } + } + } +} + +func TestDlagge(t *testing.T) { + rnd := rand.New(rand.NewSource(1)) + for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { + for _, lda := range []int{0, 2*n + 1} { + if lda == 0 { + lda = max(1, n) + } + d := make([]float64, n) + for i := range d { + d[i] = 1 + } + a := blas64.General{ + Rows: n, + Cols: n, + Stride: lda, + Data: nanSlice(n * lda), + } + work := make([]float64, a.Rows+a.Cols) + + Dlagge(a.Rows, a.Cols, 0, 0, d, a.Data, a.Stride, rnd, work) + + if !isOrthonormal(a) { + t.Errorf("Case n=%v,lda=%v: unexpected result", n, lda) + } + } + } + +} diff --git a/lapack/testlapack/test_matrices.go b/lapack/testlapack/test_matrices.go new file mode 100644 index 00000000..d3b3d3d0 --- /dev/null +++ b/lapack/testlapack/test_matrices.go @@ -0,0 +1,615 @@ +// Copyright ©2016 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlapack + +import ( + "math" + "math/rand" + + "github.com/gonum/blas/blas64" +) + +// A123 is the non-symmetric singular matrix +// [ 1 2 3 ] +// A = [ 4 5 6 ] +// [ 7 8 9 ] +// It has three distinct real eigenvalues. +type A123 struct{} + +func (A123) Matrix() blas64.General { + return blas64.General{ + Rows: 3, + Cols: 3, + Stride: 3, + Data: []float64{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + }, + } +} + +func (A123) Eigenvalues() []complex128 { + return []complex128{16.116843969807043, -1.116843969807043, 0} +} + +func (A123) LeftEV() blas64.General { + return blas64.General{ + Rows: 3, + Cols: 3, + Stride: 3, + Data: []float64{ + -0.464547273387671, -0.570795531228578, -0.677043789069485, + -0.882905959653586, -0.239520420054206, 0.403865119545174, + 0.408248290463862, -0.816496580927726, 0.408248290463863, + }, + } +} + +func (A123) RightEV() blas64.General { + return blas64.General{ + Rows: 3, + Cols: 3, + Stride: 3, + Data: []float64{ + -0.231970687246286, -0.785830238742067, 0.408248290463864, + -0.525322093301234, -0.086751339256628, -0.816496580927726, + -0.818673499356181, 0.612327560228810, 0.408248290463863, + }, + } +} + +// AntisymRandom is a anti-symmetric random matrix. All its eigenvalues are +// imaginary with one zero if the order is odd. +type AntisymRandom struct { + mat blas64.General +} + +func NewAntisymRandom(n int, rnd *rand.Rand) AntisymRandom { + a := zeros(n, n, n) + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + r := rnd.NormFloat64() + a.Data[i*a.Stride+j] = r + a.Data[j*a.Stride+i] = -r + } + } + return AntisymRandom{a} +} + +func (a AntisymRandom) Matrix() blas64.General { + return cloneGeneral(a.mat) +} + +func (AntisymRandom) Eigenvalues() []complex128 { + return nil +} + +// Circulant is a generally non-symmetric matrix given by +// A[i,j] = 1 + (j-i+n)%n. +// For example, for n=5, +// [ 1 2 3 4 5 ] +// [ 5 1 2 3 4 ] +// A = [ 4 5 1 2 3 ] +// [ 3 4 5 1 2 ] +// [ 2 3 4 5 1 ] +// It has real and complex eigenvalues, some possibly repeated. +type Circulant int + +func (c Circulant) Matrix() blas64.General { + n := int(c) + a := zeros(n, n, n) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + a.Data[i*a.Stride+j] = float64(1 + (j-i+n)%n) + } + } + return a +} + +func (c Circulant) Eigenvalues() []complex128 { + n := int(c) + w := rootsOfUnity(n) + ev := make([]complex128, n) + for k := 0; k < n; k++ { + ev[k] = complex(float64(n), 0) + } + for i := n - 1; i > 0; i-- { + for k := 0; k < n; k++ { + ev[k] = ev[k]*w[k] + complex(float64(i), 0) + } + } + return ev +} + +// Clement is a generally non-symmetric matrix given by +// A[i,j] = i+1, if j == i+1, +// = n-i, if j == i-1, +// = 0, otherwise. +// For example, for n=5, +// [ . 1 . . . ] +// [ 4 . 2 . . ] +// A = [ . 3 . 3 . ] +// [ . . 2 . 4 ] +// [ . . . 1 . ] +// It has n distinct real eigenvalues. +type Clement int + +func (c Clement) Matrix() blas64.General { + n := int(c) + a := zeros(n, n, n) + for i := 0; i < n; i++ { + if i < n-1 { + a.Data[i*a.Stride+i+1] = float64(i + 1) + } + if i > 0 { + a.Data[i*a.Stride+i-1] = float64(n - i) + } + } + return a +} + +func (c Clement) Eigenvalues() []complex128 { + n := int(c) + ev := make([]complex128, n) + for i := range ev { + ev[i] = complex(float64(-n+2*i+1), 0) + } + return ev +} + +// Creation is a singular non-symmetric matrix given by +// A[i,j] = i, if j == i-1, +// = 0, otherwise. +// For example, for n=5, +// [ . . . . . ] +// [ 1 . . . . ] +// A = [ . 2 . . . ] +// [ . . 3 . . ] +// [ . . . 4 . ] +// Zero is its only eigenvalue. +type Creation int + +func (c Creation) Matrix() blas64.General { + n := int(c) + a := zeros(n, n, n) + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = float64(i) + } + return a +} + +func (c Creation) Eigenvalues() []complex128 { + return make([]complex128, int(c)) +} + +// Diagonal is a diagonal matrix given by +// A[i,j] = i+1, if i == j, +// = 0, otherwise. +// For example, for n=5, +// [ 1 . . . . ] +// [ . 2 . . . ] +// A = [ . . 3 . . ] +// [ . . . 4 . ] +// [ . . . . 5 ] +// It has n real eigenvalues {1,...,n}. +type Diagonal int + +func (d Diagonal) Matrix() blas64.General { + n := int(d) + a := zeros(n, n, n) + for i := 0; i < n; i++ { + a.Data[i*a.Stride+i] = float64(i) + } + return a +} + +func (d Diagonal) Eigenvalues() []complex128 { + n := int(d) + ev := make([]complex128, n) + for i := range ev { + ev[i] = complex(float64(i), 0) + } + return ev +} + +// Downshift is a non-singular upper Hessenberg matrix given by +// A[i,j] = 1, if (i-j+n)%n == 1, +// = 0, otherwise. +// For example, for n=5, +// [ . . . . 1 ] +// [ 1 . . . . ] +// A = [ . 1 . . . ] +// [ . . 1 . . ] +// [ . . . 1 . ] +// Its eigenvalues are the complex roots of unity. +type Downshift int + +func (d Downshift) Matrix() blas64.General { + n := int(d) + a := zeros(n, n, n) + a.Data[n-1] = 1 + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = 1 + } + return a +} + +func (d Downshift) Eigenvalues() []complex128 { + return rootsOfUnity(int(d)) +} + +// Fibonacci is an upper Hessenberg matrix with 3 distinct real eigenvalues. For +// example, for n=5, +// [ . 1 . . . ] +// [ 1 1 . . . ] +// A = [ . 1 1 . . ] +// [ . . 1 1 . ] +// [ . . . 1 1 ] +type Fibonacci int + +func (f Fibonacci) Matrix() blas64.General { + n := int(f) + a := zeros(n, n, n) + if n > 1 { + a.Data[1] = 1 + } + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = 1 + a.Data[i*a.Stride+i] = 1 + } + return a +} + +func (f Fibonacci) Eigenvalues() []complex128 { + n := int(f) + ev := make([]complex128, n) + if n == 0 || n == 1 { + return ev + } + phi := 0.5 * (1 + math.Sqrt(5)) + ev[0] = complex(phi, 0) + for i := 1; i < n-1; i++ { + ev[i] = 1 + 0i + } + ev[n-1] = complex(1-phi, 0) + return ev +} + +// Gear is a singular non-symmetric matrix with real eigenvalues. For example, +// for n=5, +// [ . 1 . . 1 ] +// [ 1 . 1 . . ] +// A = [ . 1 . 1 . ] +// [ . . 1 . 1 ] +// [-1 . . 1 . ] +type Gear int + +func (g Gear) Matrix() blas64.General { + n := int(g) + a := zeros(n, n, n) + if n == 1 { + return a + } + for i := 0; i < n-1; i++ { + a.Data[i*a.Stride+i+1] = 1 + } + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = 1 + } + a.Data[n-1] = 1 + a.Data[(n-1)*a.Stride] = -1 + return a +} + +func (g Gear) Eigenvalues() []complex128 { + n := int(g) + ev := make([]complex128, n) + if n == 0 || n == 1 { + return ev + } + if n == 2 { + ev[0] = complex(0, 1) + ev[1] = complex(0, -1) + return ev + } + w := 0 + ev[w] = math.Pi / 2 + w++ + phi := (n - 1) / 2 + for p := 1; p <= phi; p++ { + ev[w] = complex(float64(2*p)*math.Pi/float64(n), 0) + w++ + } + phi = n / 2 + for p := 1; p <= phi; p++ { + ev[w] = complex(float64(2*p-1)*math.Pi/float64(n), 0) + w++ + } + for i, v := range ev { + ev[i] = complex(2*math.Cos(real(v)), 0) + } + return ev +} + +// Grcar is an upper Hessenberg matrix given by +// A[i,j] = -1 if i == j+1, +// = 1 if i <= j and j <= i+k, +// = 0 otherwise. +// For example, for n=5 and k=2, +// [ 1 1 1 . . ] +// [ -1 1 1 1 . ] +// A = [ . -1 1 1 1 ] +// [ . . -1 1 1 ] +// [ . . . -1 1 ] +// The matrix has sensitive eigenvalues but they are not given explicitly. +type Grcar struct { + N int + K int +} + +func (g Grcar) Matrix() blas64.General { + n := g.N + a := zeros(n, n, n) + for k := 0; k <= g.K; k++ { + for i := 0; i < n-k; i++ { + a.Data[i*a.Stride+i+k] = 1 + } + } + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = -1 + } + return a +} + +func (Grcar) Eigenvalues() []complex128 { + return nil +} + +// Hanowa is a non-symmetric non-singular matrix of even order given by +// A[i,j] = alpha if i == j, +// = -i-1 if i < n/2 and j == i + n/2, +// = i+1-n/2 if i >= n/2 and j == i - n/2, +// = 0 otherwise. +// The matrix has complex eigenvalues. +type Hanowa struct { + N int // Order of the matrix, must be even. + Alpha float64 +} + +func (h Hanowa) Matrix() blas64.General { + if h.N&0x1 != 0 { + panic("lapack: matrix order must be even") + } + n := h.N + a := zeros(n, n, n) + for i := 0; i < n; i++ { + a.Data[i*a.Stride+i] = h.Alpha + } + for i := 0; i < n/2; i++ { + a.Data[i*a.Stride+i+n/2] = float64(-i - 1) + } + for i := n / 2; i < n; i++ { + a.Data[i*a.Stride+i-n/2] = float64(i + 1 - n/2) + } + return a +} + +func (h Hanowa) Eigenvalues() []complex128 { + if h.N&0x1 != 0 { + panic("lapack: matrix order must be even") + } + n := int(h.N) + ev := make([]complex128, n) + for i := 0; i < n/2; i++ { + ev[2*i] = complex(h.Alpha, float64(-i-1)) + ev[2*i+1] = complex(h.Alpha, float64(i+1)) + } + return ev +} + +// Lesp is a tridiagonal, generally non-symmetric matrix given by +// A[i,j] = -2*i-5 if i == j, +// = 1/(i+1) if i == j-1, +// = j+1 if i == j+1. +// For example, for n=5, +// [ -5 2 . . . ] +// [ 1/2 -7 3 . . ] +// A = [ . 1/3 -9 4 . ] +// [ . . 1/4 -11 5 ] +// [ . . . 1/5 -13 ]. +// The matrix has sensitive eigenvalues but they are not given explicitly. +type Lesp int + +func (l Lesp) Matrix() blas64.General { + n := int(l) + a := zeros(n, n, n) + for i := 0; i < n; i++ { + a.Data[i*a.Stride+i] = float64(-2*i - 5) + } + for i := 0; i < n-1; i++ { + a.Data[i*a.Stride+i+1] = float64(i + 2) + } + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = 1 / float64(i+1) + } + return a +} + +func (Lesp) Eigenvalues() []complex128 { + return nil +} + +// Rutis is the 4×4 non-symmetric matrix +// [ 4 -5 0 3 ] +// A = [ 0 4 -3 -5 ] +// [ 5 -3 4 0 ] +// [ 3 0 5 4 ] +// It has two distinct real eigenvalues and a pair of complex eigenvalues. +type Rutis struct{} + +func (Rutis) Matrix() blas64.General { + return blas64.General{ + Rows: 4, + Cols: 4, + Stride: 4, + Data: []float64{ + 4, -5, 0, 3, + 0, 4, -3, -5, + 5, -3, 4, 0, + 3, 0, 5, 4, + }, + } +} + +func (Rutis) Eigenvalues() []complex128 { + return []complex128{12, 1 + 5i, 1 - 5i, 2} +} + +// Tris is a tridiagonal matrix given by +// A[i,j] = x if i == j-1, +// = y if i == j, +// = z if i == j+1. +// If x*z is negative, the matrix has complex eigenvalues. +type Tris struct { + N int + X, Y, Z float64 +} + +func (t Tris) Matrix() blas64.General { + n := t.N + a := zeros(n, n, n) + for i := 1; i < n; i++ { + a.Data[i*a.Stride+i-1] = t.X + } + for i := 0; i < n; i++ { + a.Data[i*a.Stride+i] = t.Y + } + for i := 0; i < n-1; i++ { + a.Data[i*a.Stride+i+1] = t.Z + } + return a +} + +func (t Tris) Eigenvalues() []complex128 { + n := int(t.N) + ev := make([]complex128, n) + for i := range ev { + angle := float64(i+1) * math.Pi / float64(n+1) + arg := t.X * t.Z + if arg >= 0 { + ev[i] = complex(t.Y+2*math.Sqrt(arg)*math.Cos(angle), 0) + } else { + ev[i] = complex(t.Y, 2*math.Sqrt(-arg)*math.Cos(angle)) + } + } + return ev +} + +// Wilk4 is a 4×4 lower triangular matrix with 4 distinct real eigenvalues. +type Wilk4 struct{} + +func (Wilk4) Matrix() blas64.General { + return blas64.General{ + Rows: 4, + Cols: 4, + Stride: 4, + Data: []float64{ + 0.9143e-4, 0.0, 0.0, 0.0, + 0.8762, 0.7156e-4, 0.0, 0.0, + 0.7943, 0.8143, 0.9504e-4, 0.0, + 0.8017, 0.6123, 0.7165, 0.7123e-4, + }, + } +} + +func (Wilk4) Eigenvalues() []complex128 { + return []complex128{ + 0.9504e-4, 0.9143e-4, 0.7156e-4, 0.7123e-4, + } +} + +// Wilk12 is a 12×12 lower Hessenberg matrix with 12 distinct real eigenvalues. +type Wilk12 struct{} + +func (Wilk12) Matrix() blas64.General { + return blas64.General{ + Rows: 12, + Cols: 12, + Stride: 12, + Data: []float64{ + 12, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 8, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 6, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 5, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 4, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, + } +} + +func (Wilk12) Eigenvalues() []complex128 { + return []complex128{ + 32.2288915015722210, + 20.1989886458770691, + 12.3110774008685340, + 6.9615330855671154, + 3.5118559485807528, + 1.5539887091319704, + 0.6435053190136506, + 0.2847497205488856, + 0.1436465181918488, + 0.0812276683076552, + 0.0495074140194613, + 0.0310280683208907, + } +} + +// Wilk20 is a 20×20 lower Hessenberg matrix. If the parameter is 0, the matrix +// has 20 distinct real eigenvalues. If the parameter is 1e-10, the matrix has 6 +// real eigenvalues and 7 pairs of complex eigenvalues. +type Wilk20 float64 + +func (w Wilk20) Matrix() blas64.General { + a := zeros(20, 20, 20) + for i := 0; i < 20; i++ { + a.Data[i*a.Stride+i] = float64(i + 1) + } + for i := 0; i < 19; i++ { + a.Data[i*a.Stride+i+1] = 20 + } + a.Data[19*a.Stride] = float64(w) + return a +} + +func (w Wilk20) Eigenvalues() []complex128 { + if float64(w) == 0 { + ev := make([]complex128, 20) + for i := range ev { + ev[i] = complex(float64(i+1), 0) + } + return ev + } + return nil +} + +// Zero is a matrix with all elements equal to zero. +type Zero int + +func (z Zero) Matrix() blas64.General { + n := int(z) + return zeros(n, n, n) +} + +func (z Zero) Eigenvalues() []complex128 { + n := int(z) + return make([]complex128, n) +} diff --git a/lapack/testlapack/testdata/dlahr2data.json.gz b/lapack/testlapack/testdata/dlahr2data.json.gz new file mode 100644 index 00000000..7652126a Binary files /dev/null and b/lapack/testlapack/testdata/dlahr2data.json.gz differ diff --git a/lapack/testlapack/testdata/dlaqr5data.json.gz b/lapack/testlapack/testdata/dlaqr5data.json.gz new file mode 100644 index 00000000..9e629480 Binary files /dev/null and b/lapack/testlapack/testdata/dlaqr5data.json.gz differ