mirror of
https://github.com/gonum/gonum.git
synced 2025-10-15 19:50:48 +08:00
lapack: imported lapack as a subtree
This commit is contained in:
15
lapack/cgo/bench_test.go
Normal file
15
lapack/cgo/bench_test.go
Normal file
@@ -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) }
|
2982
lapack/cgo/lapack.go
Normal file
2982
lapack/cgo/lapack.go
Normal file
File diff suppressed because it is too large
Load Diff
273
lapack/cgo/lapack_test.go
Normal file
273
lapack/cgo/lapack_test.go
Normal file
@@ -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)
|
||||
}
|
7
lapack/cgo/lapacke/generate.go
Normal file
7
lapack/cgo/lapacke/generate.go
Normal file
@@ -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
|
551
lapack/cgo/lapacke/generate_lapacke.go
Normal file
551
lapack/cgo/lapacke/generate_lapacke.go
Normal file
@@ -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("<unknown %q>", 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 }
|
||||
`
|
31444
lapack/cgo/lapacke/lapacke.go
Normal file
31444
lapack/cgo/lapacke/lapacke.go
Normal file
File diff suppressed because it is too large
Load Diff
17553
lapack/cgo/lapacke/lapacke.h
Normal file
17553
lapack/cgo/lapacke/lapacke.h
Normal file
File diff suppressed because it is too large
Load Diff
119
lapack/cgo/lapacke/lapacke_config.h
Normal file
119
lapack/cgo/lapacke/lapacke_config.h
Normal file
@@ -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 <complex>
|
||||
#endif
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#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 <complex.h>
|
||||
#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<float>
|
||||
#define lapack_complex_double std::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())
|
||||
|
||||
#else
|
||||
|
||||
#include <complex.h>
|
||||
#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_ */
|
17
lapack/cgo/lapacke/lapacke_mangling.h
Normal file
17
lapack/cgo/lapacke/lapacke_mangling.h
Normal file
@@ -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
|
||||
|
579
lapack/cgo/lapacke/lapacke_utils.h
Normal file
579
lapack/cgo/lapacke/lapacke_utils.h
Normal file
@@ -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_ */
|
Reference in New Issue
Block a user