Merge pull request #87088 from dims/switch-to-newer-gonum

Drop random SHA and update gonum.org/v1/gonum to v0.6.2
This commit is contained in:
Kubernetes Prow Robot
2020-01-13 13:59:29 -08:00
committed by GitHub
190 changed files with 3451 additions and 1557 deletions

10
go.mod
View File

@@ -126,7 +126,7 @@ require (
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 gonum.org/v1/gonum v0.6.2
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 google.golang.org/api v0.6.1-0.20190607001116-5213b8090861
google.golang.org/grpc v1.23.1 google.golang.org/grpc v1.23.1
gopkg.in/gcfg.v1 v1.2.0 gopkg.in/gcfg.v1 v1.2.0
@@ -194,6 +194,7 @@ replace (
github.com/Rican7/retry => github.com/Rican7/retry v0.1.0 github.com/Rican7/retry => github.com/Rican7/retry v0.1.0
github.com/StackExchange/wmi => github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 github.com/StackExchange/wmi => github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6
github.com/agnivade/levenshtein => github.com/agnivade/levenshtein v1.0.1 github.com/agnivade/levenshtein => github.com/agnivade/levenshtein v1.0.1
github.com/ajstarks/svgo => github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af
github.com/alecthomas/template => github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc github.com/alecthomas/template => github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc
github.com/alecthomas/units => github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf github.com/alecthomas/units => github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf
github.com/andreyvit/diff => github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 github.com/andreyvit/diff => github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
@@ -256,6 +257,7 @@ replace (
github.com/fatih/camelcase => github.com/fatih/camelcase v1.0.0 github.com/fatih/camelcase => github.com/fatih/camelcase v1.0.0
github.com/fatih/color => github.com/fatih/color v1.7.0 github.com/fatih/color => github.com/fatih/color v1.7.0
github.com/flynn/go-shlex => github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 github.com/flynn/go-shlex => github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568
github.com/fogleman/gg => github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90
github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.7 github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.7
github.com/ghodss/yaml => github.com/ghodss/yaml v1.0.0 github.com/ghodss/yaml => github.com/ghodss/yaml v1.0.0
github.com/gliderlabs/ssh => github.com/gliderlabs/ssh v0.1.1 github.com/gliderlabs/ssh => github.com/gliderlabs/ssh v0.1.1
@@ -291,6 +293,7 @@ replace (
github.com/gobwas/glob => github.com/gobwas/glob v0.2.3 github.com/gobwas/glob => github.com/gobwas/glob v0.2.3
github.com/godbus/dbus => github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f github.com/godbus/dbus => github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f
github.com/gogo/protobuf => github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d github.com/gogo/protobuf => github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
github.com/golang/freetype => github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/golang/glog => github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/glog => github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
github.com/golang/groupcache => github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 github.com/golang/groupcache => github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903
github.com/golang/mock => github.com/golang/mock v1.2.0 github.com/golang/mock => github.com/golang/mock v1.2.0
@@ -353,6 +356,7 @@ replace (
github.com/jstemmer/go-junit-report => github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 github.com/jstemmer/go-junit-report => github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024
github.com/jtolds/gls => github.com/jtolds/gls v4.20.0+incompatible github.com/jtolds/gls => github.com/jtolds/gls v4.20.0+incompatible
github.com/julienschmidt/httprouter => github.com/julienschmidt/httprouter v1.2.0 github.com/julienschmidt/httprouter => github.com/julienschmidt/httprouter v1.2.0
github.com/jung-kurt/gofpdf => github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5
github.com/karrick/godirwalk => github.com/karrick/godirwalk v1.7.5 github.com/karrick/godirwalk => github.com/karrick/godirwalk v1.7.5
github.com/kisielk/errcheck => github.com/kisielk/errcheck v1.2.0 github.com/kisielk/errcheck => github.com/kisielk/errcheck v1.2.0
github.com/kisielk/gotool => github.com/kisielk/gotool v1.0.0 github.com/kisielk/gotool => github.com/kisielk/gotool v1.0.0
@@ -497,8 +501,9 @@ replace (
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13
golang.org/x/xerrors => golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 golang.org/x/xerrors => golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
gonum.org/v1/gonum => gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 gonum.org/v1/gonum => gonum.org/v1/gonum v0.6.2
gonum.org/v1/netlib => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e gonum.org/v1/netlib => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e
gonum.org/v1/plot => gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b
google.golang.org/api => google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 google.golang.org/api => google.golang.org/api v0.6.1-0.20190607001116-5213b8090861
google.golang.org/appengine => google.golang.org/appengine v1.5.0 google.golang.org/appengine => google.golang.org/appengine v1.5.0
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 google.golang.org/genproto => google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873
@@ -562,6 +567,7 @@ replace (
mvdan.cc/interfacer => mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed mvdan.cc/interfacer => mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed
mvdan.cc/lint => mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b mvdan.cc/lint => mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b
mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34
rsc.io/pdf => rsc.io/pdf v0.1.1
sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible
sigs.k8s.io/structured-merge-diff => sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 sigs.k8s.io/structured-merge-diff => sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06
sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.1.0 sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.1.0

10
go.sum
View File

@@ -46,6 +46,7 @@ github.com/Rican7/retry v0.1.0 h1:FqK94z34ly8Baa6K+G8Mmza9rYWTKOJk+yckIBB5qVk=
github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
@@ -156,6 +157,7 @@ github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwo
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
@@ -208,6 +210,7 @@ github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f h1:zlOR3rOlPAVvtfuxGKo
github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
@@ -303,6 +306,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M= github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
@@ -538,10 +542,11 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 h1:ppLucX0K/60T3t6LPZQzTOkt5PytkEbQLIaSteq+TpE= google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 h1:ppLucX0K/60T3t6LPZQzTOkt5PytkEbQLIaSteq+TpE=
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
@@ -604,6 +609,7 @@ modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY= mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0=
sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU=
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=

View File

@@ -22,6 +22,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
@@ -74,6 +75,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -151,6 +153,7 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
@@ -214,6 +217,7 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -357,10 +361,13 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -411,11 +418,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -475,6 +486,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=

View File

@@ -16,7 +16,7 @@ require (
github.com/stretchr/testify v1.4.0 // indirect github.com/stretchr/testify v1.4.0 // indirect
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 // indirect golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 // indirect
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 // indirect golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 // indirect
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 gonum.org/v1/gonum v0.6.2
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect
gopkg.in/yaml.v2 v2.2.7 // indirect gopkg.in/yaml.v2 v2.2.7 // indirect
k8s.io/gengo v0.0.0-20190822140433-26a664648505 k8s.io/gengo v0.0.0-20190822140433-26a664648505

View File

@@ -6,6 +6,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -13,6 +14,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
@@ -35,6 +37,7 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -42,6 +45,7 @@ github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsC
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -82,9 +86,12 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -103,11 +110,15 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -130,5 +141,6 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

View File

@@ -20,6 +20,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -67,6 +68,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -97,6 +99,7 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
@@ -160,6 +163,7 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -290,10 +294,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -342,11 +349,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -405,6 +416,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=

View File

@@ -21,6 +21,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -58,6 +59,7 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwC
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -88,6 +90,7 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -144,6 +147,7 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
@@ -248,9 +252,12 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -292,9 +299,12 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZe
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -339,6 +349,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0=
sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=

View File

@@ -17,6 +17,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -30,6 +31,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -54,6 +56,7 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -87,6 +90,7 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -140,10 +144,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -183,11 +190,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -232,6 +243,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

View File

@@ -17,6 +17,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -30,6 +31,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -54,6 +56,7 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -91,6 +94,7 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -144,10 +148,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -187,11 +194,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -236,6 +247,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

View File

@@ -20,6 +20,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -65,6 +66,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -95,6 +97,7 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
@@ -158,6 +161,7 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -287,10 +291,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -339,11 +346,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -402,6 +413,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=

View File

@@ -17,6 +17,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -30,6 +31,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -54,6 +56,7 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -92,6 +95,7 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -145,10 +149,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -188,11 +195,15 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 h1:PVCvyir09Xgta5zksNZDkrL+eSm/Y+gQxRG3IfqNQ3A=
golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -237,6 +248,7 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

8
vendor/gonum.org/v1/gonum/AUTHORS generated vendored
View File

@@ -20,10 +20,14 @@ Christophe Meessen <christophe.meessen@gmail.com>
Clayton Northey <clayton.northey@gmail.com> Clayton Northey <clayton.northey@gmail.com>
Dan Kortschak <dan.kortschak@adelaide.edu.au> <dan@kortschak.io> Dan Kortschak <dan.kortschak@adelaide.edu.au> <dan@kortschak.io>
Daniel Fireman <danielfireman@gmail.com> Daniel Fireman <danielfireman@gmail.com>
Dario Heinisch <dario.heinisch@gmail.com>
David Kleiven <davidkleiven446@gmail.com>
David Samborski <bloggingarrow@gmail.com> David Samborski <bloggingarrow@gmail.com>
Davor Kapsa <davor.kapsa@gmail.com> Davor Kapsa <davor.kapsa@gmail.com>
DeepMind Technologies DeepMind Technologies
Delaney Gillilan <delaneygillilan@gmail.com>
Dezmond Goff <goff.dezmond@gmail.com> Dezmond Goff <goff.dezmond@gmail.com>
Dong-hee Na <donghee.na92@gmail.com>
Egon Elbre <egonelbre@gmail.com> Egon Elbre <egonelbre@gmail.com>
Ekaterina Efimova <katerina.efimova@gmail.com> Ekaterina Efimova <katerina.efimova@gmail.com>
Ethan Burns <burns.ethan@gmail.com> Ethan Burns <burns.ethan@gmail.com>
@@ -46,6 +50,7 @@ Jeremy Atkinson <jchatkinson@gmail.com>
Jonas Kahler <jonas@derkahler.de> Jonas Kahler <jonas@derkahler.de>
Jonas Schulze <jonas.schulze@ovgu.de> Jonas Schulze <jonas.schulze@ovgu.de>
Jonathan J Lawlor <jonathan.lawlor@gmail.com> Jonathan J Lawlor <jonathan.lawlor@gmail.com>
Jonathan Reiter <jonreiter@gmail.com>
Jonathan Schroeder <jd.schroeder@gmail.com> Jonathan Schroeder <jd.schroeder@gmail.com>
Joseph Watson <jtwatson@linux-consulting.us> Joseph Watson <jtwatson@linux-consulting.us>
Josh Wilson <josh.craig.wilson@gmail.com> Josh Wilson <josh.craig.wilson@gmail.com>
@@ -61,7 +66,9 @@ Martin Diz <github@martindiz.com.ar>
Matthieu Di Mercurio <matthieu.dimercurio@gmail.com> Matthieu Di Mercurio <matthieu.dimercurio@gmail.com>
Max Halford <maxhalford25@gmail.com> Max Halford <maxhalford25@gmail.com>
MinJae Kwon <k239507@gmail.com> MinJae Kwon <k239507@gmail.com>
Nathan Edwards <etaoinshrdluwho@gmail.com>
Nick Potts <nick@the-potts.com> Nick Potts <nick@the-potts.com>
Nils Wogatzky <odog@netcologne.de>
Olivier Wulveryck <olivier.wulveryck@gmail.com> Olivier Wulveryck <olivier.wulveryck@gmail.com>
Or Rikon <rikonor@gmail.com> Or Rikon <rikonor@gmail.com>
Pontus Melke <pontusmelke@gmail.com> Pontus Melke <pontusmelke@gmail.com>
@@ -87,3 +94,4 @@ Tobin Harding <me@tobin.cc>
Vincent Thiery <vjmthiery@gmail.com> Vincent Thiery <vjmthiery@gmail.com>
Vladimír Chalupecký <vladimir.chalupecky@gmail.com> Vladimír Chalupecký <vladimir.chalupecky@gmail.com>
Yevgeniy Vahlis <evahlis@gmail.com> Yevgeniy Vahlis <evahlis@gmail.com>
Yucheng Zhu <zyctc000@gmail.com>

View File

@@ -28,9 +28,13 @@ Christophe Meessen <christophe.meessen@gmail.com>
Clayton Northey <clayton.northey@gmail.com> Clayton Northey <clayton.northey@gmail.com>
Dan Kortschak <dan.kortschak@adelaide.edu.au> <dan@kortschak.io> Dan Kortschak <dan.kortschak@adelaide.edu.au> <dan@kortschak.io>
Daniel Fireman <danielfireman@gmail.com> Daniel Fireman <danielfireman@gmail.com>
Dario Heinisch <dario.heinisch@gmail.com>
David Kleiven <davidkleiven446@gmail.com>
David Samborski <bloggingarrow@gmail.com> David Samborski <bloggingarrow@gmail.com>
Davor Kapsa <davor.kapsa@gmail.com> Davor Kapsa <davor.kapsa@gmail.com>
Delaney Gillilan <delaneygillilan@gmail.com>
Dezmond Goff <goff.dezmond@gmail.com> Dezmond Goff <goff.dezmond@gmail.com>
Dong-hee Na <donghee.na92@gmail.com>
Egon Elbre <egonelbre@gmail.com> Egon Elbre <egonelbre@gmail.com>
Ekaterina Efimova <katerina.efimova@gmail.com> Ekaterina Efimova <katerina.efimova@gmail.com>
Ethan Burns <burns.ethan@gmail.com> Ethan Burns <burns.ethan@gmail.com>
@@ -52,6 +56,7 @@ Jeremy Atkinson <jchatkinson@gmail.com>
Jonas Kahler <jonas@derkahler.de> Jonas Kahler <jonas@derkahler.de>
Jonas Schulze <jonas.schulze@ovgu.de> Jonas Schulze <jonas.schulze@ovgu.de>
Jonathan J Lawlor <jonathan.lawlor@gmail.com> Jonathan J Lawlor <jonathan.lawlor@gmail.com>
Jonathan Reiter <jonreiter@gmail.com>
Jonathan Schroeder <jd.schroeder@gmail.com> Jonathan Schroeder <jd.schroeder@gmail.com>
Joseph Watson <jtwatson@linux-consulting.us> Joseph Watson <jtwatson@linux-consulting.us>
Josh Wilson <josh.craig.wilson@gmail.com> Josh Wilson <josh.craig.wilson@gmail.com>
@@ -67,7 +72,9 @@ Martin Diz <github@martindiz.com.ar>
Matthieu Di Mercurio <matthieu.dimercurio@gmail.com> Matthieu Di Mercurio <matthieu.dimercurio@gmail.com>
Max Halford <maxhalford25@gmail.com> Max Halford <maxhalford25@gmail.com>
MinJae Kwon <k239507@gmail.com> MinJae Kwon <k239507@gmail.com>
Nathan Edwards <etaoinshrdluwho@gmail.com>
Nick Potts <nick@the-potts.com> Nick Potts <nick@the-potts.com>
Nils Wogatzky <odog@netcologne.de>
Olivier Wulveryck <olivier.wulveryck@gmail.com> Olivier Wulveryck <olivier.wulveryck@gmail.com>
Or Rikon <rikonor@gmail.com> Or Rikon <rikonor@gmail.com>
Pontus Melke <pontusmelke@gmail.com> Pontus Melke <pontusmelke@gmail.com>
@@ -89,3 +96,4 @@ Tobin Harding <me@tobin.cc>
Vincent Thiery <vjmthiery@gmail.com> Vincent Thiery <vjmthiery@gmail.com>
Vladimír Chalupecký <vladimir.chalupecky@gmail.com> Vladimír Chalupecký <vladimir.chalupecky@gmail.com>
Yevgeniy Vahlis <evahlis@gmail.com> Yevgeniy Vahlis <evahlis@gmail.com>
Yucheng Zhu <zyctc000@gmail.com>

View File

@@ -106,6 +106,7 @@ const (
// Dot computes the dot product of the two vectors: // Dot computes the dot product of the two vectors:
// \sum_i x[i]*y[i]. // \sum_i x[i]*y[i].
// Dot will panic if the lengths of x and y do not match.
func Dot(x, y Vector) float64 { func Dot(x, y Vector) float64 {
if x.N != y.N { if x.N != y.N {
panic(badLength) panic(badLength)
@@ -149,6 +150,7 @@ func Iamax(x Vector) int {
// Swap exchanges the elements of the two vectors: // Swap exchanges the elements of the two vectors:
// x[i], y[i] = y[i], x[i] for all i. // x[i], y[i] = y[i], x[i] for all i.
// Swap will panic if the lengths of x and y do not match.
func Swap(x, y Vector) { func Swap(x, y Vector) {
if x.N != y.N { if x.N != y.N {
panic(badLength) panic(badLength)
@@ -158,7 +160,7 @@ func Swap(x, y Vector) {
// Copy copies the elements of x into the elements of y: // Copy copies the elements of x into the elements of y:
// y[i] = x[i] for all i. // y[i] = x[i] for all i.
// Copy requires that the lengths of x and y match and will panic otherwise. // Copy will panic if the lengths of x and y do not match.
func Copy(x, y Vector) { func Copy(x, y Vector) {
if x.N != y.N { if x.N != y.N {
panic(badLength) panic(badLength)
@@ -168,6 +170,7 @@ func Copy(x, y Vector) {
// Axpy adds x scaled by alpha to y: // Axpy adds x scaled by alpha to y:
// y[i] += alpha*x[i] for all i. // y[i] += alpha*x[i] for all i.
// Axpy will panic if the lengths of x and y do not match.
func Axpy(alpha float64, x, y Vector) { func Axpy(alpha float64, x, y Vector) {
if x.N != y.N { if x.N != y.N {
panic(badLength) panic(badLength)
@@ -232,48 +235,48 @@ func Scal(alpha float64, x Vector) {
// Level 2 // Level 2
// Gemv computes // Gemv computes
// y = alpha * A * x + beta * y, if t == blas.NoTrans, // y = alpha * A * x + beta * y if t == blas.NoTrans,
// y = alpha * A^T * x + beta * y, if t == blas.Trans or blas.ConjTrans, // y = alpha * A * x + beta * y if t == blas.Trans or blas.ConjTrans,
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars.
func Gemv(t blas.Transpose, alpha float64, a General, x Vector, beta float64, y Vector) { func Gemv(t blas.Transpose, alpha float64, a General, x Vector, beta float64, y Vector) {
blas64.Dgemv(t, a.Rows, a.Cols, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) blas64.Dgemv(t, a.Rows, a.Cols, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc)
} }
// Gbmv computes // Gbmv computes
// y = alpha * A * x + beta * y, if t == blas.NoTrans, // y = alpha * A * x + beta * y if t == blas.NoTrans,
// y = alpha * A^T * x + beta * y, if t == blas.Trans or blas.ConjTrans, // y = alpha * A * x + beta * y if t == blas.Trans or blas.ConjTrans,
// where A is an m×n band matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n band matrix, x and y are vectors, and alpha and beta are scalars.
func Gbmv(t blas.Transpose, alpha float64, a Band, x Vector, beta float64, y Vector) { func Gbmv(t blas.Transpose, alpha float64, a Band, x Vector, beta float64, y Vector) {
blas64.Dgbmv(t, a.Rows, a.Cols, a.KL, a.KU, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) blas64.Dgbmv(t, a.Rows, a.Cols, a.KL, a.KU, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc)
} }
// Trmv computes // Trmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans or blas.ConjTrans, // x = A * x if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular matrix, and x is a vector. // where A is an n×n triangular matrix, and x is a vector.
func Trmv(t blas.Transpose, a Triangular, x Vector) { func Trmv(t blas.Transpose, a Triangular, x Vector) {
blas64.Dtrmv(a.Uplo, t, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc) blas64.Dtrmv(a.Uplo, t, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc)
} }
// Tbmv computes // Tbmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans or blas.ConjTrans, // x = A * x if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular band matrix, and x is a vector. // where A is an n×n triangular band matrix, and x is a vector.
func Tbmv(t blas.Transpose, a TriangularBand, x Vector) { func Tbmv(t blas.Transpose, a TriangularBand, x Vector) {
blas64.Dtbmv(a.Uplo, t, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc) blas64.Dtbmv(a.Uplo, t, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc)
} }
// Tpmv computes // Tpmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans or blas.ConjTrans, // x = A * x if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular matrix in packed format, and x is a vector. // where A is an n×n triangular matrix in packed format, and x is a vector.
func Tpmv(t blas.Transpose, a TriangularPacked, x Vector) { func Tpmv(t blas.Transpose, a TriangularPacked, x Vector) {
blas64.Dtpmv(a.Uplo, t, a.Diag, a.N, a.Data, x.Data, x.Inc) blas64.Dtpmv(a.Uplo, t, a.Diag, a.N, a.Data, x.Data, x.Inc)
} }
// Trsv solves // Trsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans or blas.ConjTrans, // A * x = b if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular matrix, and x and b are vectors. // where A is an n×n triangular matrix, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -286,8 +289,8 @@ func Trsv(t blas.Transpose, a Triangular, x Vector) {
} }
// Tbsv solves // Tbsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans or blas.ConjTrans, // A * x = b if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular band matrix, and x and b are vectors. // where A is an n×n triangular band matrix, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -300,8 +303,8 @@ func Tbsv(t blas.Transpose, a TriangularBand, x Vector) {
} }
// Tpsv solves // Tpsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans or blas.ConjTrans, // A * x = b if t == blas.Trans or blas.ConjTrans,
// where A is an n×n triangular matrix in packed format, and x and b are // where A is an n×n triangular matrix in packed format, and x and b are
// vectors. // vectors.
// //
@@ -339,21 +342,21 @@ func Spmv(alpha float64, a SymmetricPacked, x Vector, beta float64, y Vector) {
} }
// Ger performs a rank-1 update // Ger performs a rank-1 update
// A += alpha * x * y^T, // A += alpha * x * y,
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Ger(alpha float64, x, y Vector, a General) { func Ger(alpha float64, x, y Vector, a General) {
blas64.Dger(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) blas64.Dger(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride)
} }
// Syr performs a rank-1 update // Syr performs a rank-1 update
// A += alpha * x * x^T, // A += alpha * x * x,
// where A is an n×n symmetric matrix, x is a vector, and alpha is a scalar. // where A is an n×n symmetric matrix, x is a vector, and alpha is a scalar.
func Syr(alpha float64, x Vector, a Symmetric) { func Syr(alpha float64, x Vector, a Symmetric) {
blas64.Dsyr(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data, a.Stride) blas64.Dsyr(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data, a.Stride)
} }
// Spr performs the rank-1 update // Spr performs the rank-1 update
// A += alpha * x * x^T, // A += alpha * x * x,
// where A is an n×n symmetric matrix in packed format, x is a vector, and // where A is an n×n symmetric matrix in packed format, x is a vector, and
// alpha is a scalar. // alpha is a scalar.
func Spr(alpha float64, x Vector, a SymmetricPacked) { func Spr(alpha float64, x Vector, a SymmetricPacked) {
@@ -361,14 +364,14 @@ func Spr(alpha float64, x Vector, a SymmetricPacked) {
} }
// Syr2 performs a rank-2 update // Syr2 performs a rank-2 update
// A += alpha * x * y^T + alpha * y * x^T, // A += alpha * x * y + alpha * y * x,
// where A is a symmetric n×n matrix, x and y are vectors, and alpha is a scalar. // where A is a symmetric n×n matrix, x and y are vectors, and alpha is a scalar.
func Syr2(alpha float64, x, y Vector, a Symmetric) { func Syr2(alpha float64, x, y Vector, a Symmetric) {
blas64.Dsyr2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) blas64.Dsyr2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride)
} }
// Spr2 performs a rank-2 update // Spr2 performs a rank-2 update
// A += alpha * x * y^T + alpha * y * x^T, // A += alpha * x * y + alpha * y * x,
// where A is an n×n symmetric matrix in packed format, x and y are vectors, // where A is an n×n symmetric matrix in packed format, x and y are vectors,
// and alpha is a scalar. // and alpha is a scalar.
func Spr2(alpha float64, x, y Vector, a SymmetricPacked) { func Spr2(alpha float64, x, y Vector, a SymmetricPacked) {
@@ -397,8 +400,8 @@ func Gemm(tA, tB blas.Transpose, alpha float64, a, b General, beta float64, c Ge
} }
// Symm performs // Symm performs
// C = alpha * A * B + beta * C, if s == blas.Left, // C = alpha * A * B + beta * C if s == blas.Left,
// C = alpha * B * A + beta * C, if s == blas.Right, // C = alpha * B * A + beta * C if s == blas.Right,
// where A is an n×n or m×m symmetric matrix, B and C are m×n matrices, and // where A is an n×n or m×m symmetric matrix, B and C are m×n matrices, and
// alpha is a scalar. // alpha is a scalar.
func Symm(s blas.Side, alpha float64, a Symmetric, b General, beta float64, c General) { func Symm(s blas.Side, alpha float64, a Symmetric, b General, beta float64, c General) {
@@ -412,8 +415,8 @@ func Symm(s blas.Side, alpha float64, a Symmetric, b General, beta float64, c Ge
} }
// Syrk performs a symmetric rank-k update // Syrk performs a symmetric rank-k update
// C = alpha * A * A^T + beta * C, if t == blas.NoTrans, // C = alpha * A * A + beta * C if t == blas.NoTrans,
// C = alpha * A^T * A + beta * C, if t == blas.Trans or blas.ConjTrans, // C = alpha * A * A + beta * C if t == blas.Trans or blas.ConjTrans,
// where C is an n×n symmetric matrix, A is an n×k matrix if t == blas.NoTrans and // where C is an n×n symmetric matrix, A is an n×k matrix if t == blas.NoTrans and
// a k×n matrix otherwise, and alpha and beta are scalars. // a k×n matrix otherwise, and alpha and beta are scalars.
func Syrk(t blas.Transpose, alpha float64, a General, beta float64, c Symmetric) { func Syrk(t blas.Transpose, alpha float64, a General, beta float64, c Symmetric) {
@@ -427,8 +430,8 @@ func Syrk(t blas.Transpose, alpha float64, a General, beta float64, c Symmetric)
} }
// Syr2k performs a symmetric rank-2k update // Syr2k performs a symmetric rank-2k update
// C = alpha * A * B^T + alpha * B * A^T + beta * C, if t == blas.NoTrans, // C = alpha * A * B + alpha * B * A + beta * C if t == blas.NoTrans,
// C = alpha * A^T * B + alpha * B^T * A + beta * C, if t == blas.Trans or blas.ConjTrans, // C = alpha * A * B + alpha * B * A + beta * C if t == blas.Trans or blas.ConjTrans,
// where C is an n×n symmetric matrix, A and B are n×k matrices if t == NoTrans // where C is an n×n symmetric matrix, A and B are n×k matrices if t == NoTrans
// and k×n matrices otherwise, and alpha and beta are scalars. // and k×n matrices otherwise, and alpha and beta are scalars.
func Syr2k(t blas.Transpose, alpha float64, a, b General, beta float64, c Symmetric) { func Syr2k(t blas.Transpose, alpha float64, a, b General, beta float64, c Symmetric) {
@@ -442,10 +445,10 @@ func Syr2k(t blas.Transpose, alpha float64, a, b General, beta float64, c Symmet
} }
// Trmm performs // Trmm performs
// B = alpha * A * B, if tA == blas.NoTrans and s == blas.Left, // B = alpha * A * B if tA == blas.NoTrans and s == blas.Left,
// B = alpha * A^T * B, if tA == blas.Trans or blas.ConjTrans, and s == blas.Left, // B = alpha * A * B if tA == blas.Trans or blas.ConjTrans, and s == blas.Left,
// B = alpha * B * A, if tA == blas.NoTrans and s == blas.Right, // B = alpha * B * A if tA == blas.NoTrans and s == blas.Right,
// B = alpha * B * A^T, if tA == blas.Trans or blas.ConjTrans, and s == blas.Right, // B = alpha * B * A if tA == blas.Trans or blas.ConjTrans, and s == blas.Right,
// where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is // where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is
// a scalar. // a scalar.
func Trmm(s blas.Side, tA blas.Transpose, alpha float64, a Triangular, b General) { func Trmm(s blas.Side, tA blas.Transpose, alpha float64, a Triangular, b General) {
@@ -453,10 +456,10 @@ func Trmm(s blas.Side, tA blas.Transpose, alpha float64, a Triangular, b General
} }
// Trsm solves // Trsm solves
// A * X = alpha * B, if tA == blas.NoTrans and s == blas.Left, // A * X = alpha * B if tA == blas.NoTrans and s == blas.Left,
// A^T * X = alpha * B, if tA == blas.Trans or blas.ConjTrans, and s == blas.Left, // A * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and s == blas.Left,
// X * A = alpha * B, if tA == blas.NoTrans and s == blas.Right, // X * A = alpha * B if tA == blas.NoTrans and s == blas.Right,
// X * A^T = alpha * B, if tA == blas.Trans or blas.ConjTrans, and s == blas.Right, // X * A = alpha * B if tA == blas.Trans or blas.ConjTrans, and s == blas.Right,
// where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and // where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and
// alpha is a scalar. // alpha is a scalar.
// //

View File

@@ -169,7 +169,7 @@ func (t Band) From(a BandCols) {
} }
} }
// TriangularBandCols represents a symmetric matrix using the band column-major storage scheme. // TriangularBandCols represents a triangular matrix using the band column-major storage scheme.
type TriangularBandCols TriangularBand type TriangularBandCols TriangularBand
// From fills the receiver with elements from a. The receiver // From fills the receiver with elements from a. The receiver

View File

@@ -28,6 +28,7 @@ func Implementation() blas.Complex128 {
// Vector represents a vector with an associated element increment. // Vector represents a vector with an associated element increment.
type Vector struct { type Vector struct {
N int
Inc int Inc int
Data []complex128 Data []complex128
} }
@@ -107,31 +108,42 @@ type HermitianPacked SymmetricPacked
// Level 1 // Level 1
const negInc = "cblas128: negative vector increment" const (
negInc = "cblas128: negative vector increment"
badLength = "cblas128: vector length mismatch"
)
// Dotu computes the dot product of the two vectors without // Dotu computes the dot product of the two vectors without
// complex conjugation: // complex conjugation:
// x^T * y. // x * y.
func Dotu(n int, x, y Vector) complex128 { // Dotu will panic if the lengths of x and y do not match.
return cblas128.Zdotu(n, x.Data, x.Inc, y.Data, y.Inc) func Dotu(x, y Vector) complex128 {
if x.N != y.N {
panic(badLength)
}
return cblas128.Zdotu(x.N, x.Data, x.Inc, y.Data, y.Inc)
} }
// Dotc computes the dot product of the two vectors with // Dotc computes the dot product of the two vectors with
// complex conjugation: // complex conjugation:
// x^H * y. // x * y.
func Dotc(n int, x, y Vector) complex128 { // Dotc will panic if the lengths of x and y do not match.
return cblas128.Zdotc(n, x.Data, x.Inc, y.Data, y.Inc) func Dotc(x, y Vector) complex128 {
if x.N != y.N {
panic(badLength)
}
return cblas128.Zdotc(x.N, x.Data, x.Inc, y.Data, y.Inc)
} }
// Nrm2 computes the Euclidean norm of the vector x: // Nrm2 computes the Euclidean norm of the vector x:
// sqrt(\sum_i x[i] * x[i]). // sqrt(\sum_i x[i] * x[i]).
// //
// Nrm2 will panic if the vector increment is negative. // Nrm2 will panic if the vector increment is negative.
func Nrm2(n int, x Vector) float64 { func Nrm2(x Vector) float64 {
if x.Inc < 0 { if x.Inc < 0 {
panic(negInc) panic(negInc)
} }
return cblas128.Dznrm2(n, x.Data, x.Inc) return cblas128.Dznrm2(x.N, x.Data, x.Inc)
} }
// Asum computes the sum of magnitudes of the real and imaginary parts of // Asum computes the sum of magnitudes of the real and imaginary parts of
@@ -139,11 +151,11 @@ func Nrm2(n int, x Vector) float64 {
// \sum_i (|Re x[i]| + |Im x[i]|). // \sum_i (|Re x[i]| + |Im x[i]|).
// //
// Asum will panic if the vector increment is negative. // Asum will panic if the vector increment is negative.
func Asum(n int, x Vector) float64 { func Asum(x Vector) float64 {
if x.Inc < 0 { if x.Inc < 0 {
panic(negInc) panic(negInc)
} }
return cblas128.Dzasum(n, x.Data, x.Inc) return cblas128.Dzasum(x.N, x.Data, x.Inc)
} }
// Iamax returns the index of an element of x with the largest sum of // Iamax returns the index of an element of x with the largest sum of
@@ -153,30 +165,42 @@ func Asum(n int, x Vector) float64 {
// Iamax returns -1 if n == 0. // Iamax returns -1 if n == 0.
// //
// Iamax will panic if the vector increment is negative. // Iamax will panic if the vector increment is negative.
func Iamax(n int, x Vector) int { func Iamax(x Vector) int {
if x.Inc < 0 { if x.Inc < 0 {
panic(negInc) panic(negInc)
} }
return cblas128.Izamax(n, x.Data, x.Inc) return cblas128.Izamax(x.N, x.Data, x.Inc)
} }
// Swap exchanges the elements of two vectors: // Swap exchanges the elements of two vectors:
// x[i], y[i] = y[i], x[i] for all i. // x[i], y[i] = y[i], x[i] for all i.
func Swap(n int, x, y Vector) { // Swap will panic if the lengths of x and y do not match.
cblas128.Zswap(n, x.Data, x.Inc, y.Data, y.Inc) func Swap(x, y Vector) {
if x.N != y.N {
panic(badLength)
}
cblas128.Zswap(x.N, x.Data, x.Inc, y.Data, y.Inc)
} }
// Copy copies the elements of x into the elements of y: // Copy copies the elements of x into the elements of y:
// y[i] = x[i] for all i. // y[i] = x[i] for all i.
func Copy(n int, x, y Vector) { // Copy will panic if the lengths of x and y do not match.
cblas128.Zcopy(n, x.Data, x.Inc, y.Data, y.Inc) func Copy(x, y Vector) {
if x.N != y.N {
panic(badLength)
}
cblas128.Zcopy(x.N, x.Data, x.Inc, y.Data, y.Inc)
} }
// Axpy computes // Axpy computes
// y = alpha * x + y, // y = alpha * x + y,
// where x and y are vectors, and alpha is a scalar. // where x and y are vectors, and alpha is a scalar.
func Axpy(n int, alpha complex128, x, y Vector) { // Axpy will panic if the lengths of x and y do not match.
cblas128.Zaxpy(n, alpha, x.Data, x.Inc, y.Data, y.Inc) func Axpy(alpha complex128, x, y Vector) {
if x.N != y.N {
panic(badLength)
}
cblas128.Zaxpy(x.N, alpha, x.Data, x.Inc, y.Data, y.Inc)
} }
// Scal computes // Scal computes
@@ -184,11 +208,11 @@ func Axpy(n int, alpha complex128, x, y Vector) {
// where x is a vector, and alpha is a scalar. // where x is a vector, and alpha is a scalar.
// //
// Scal will panic if the vector increment is negative. // Scal will panic if the vector increment is negative.
func Scal(n int, alpha complex128, x Vector) { func Scal(alpha complex128, x Vector) {
if x.Inc < 0 { if x.Inc < 0 {
panic(negInc) panic(negInc)
} }
cblas128.Zscal(n, alpha, x.Data, x.Inc) cblas128.Zscal(x.N, alpha, x.Data, x.Inc)
} }
// Dscal computes // Dscal computes
@@ -196,19 +220,19 @@ func Scal(n int, alpha complex128, x Vector) {
// where x is a vector, and alpha is a real scalar. // where x is a vector, and alpha is a real scalar.
// //
// Dscal will panic if the vector increment is negative. // Dscal will panic if the vector increment is negative.
func Dscal(n int, alpha float64, x Vector) { func Dscal(alpha float64, x Vector) {
if x.Inc < 0 { if x.Inc < 0 {
panic(negInc) panic(negInc)
} }
cblas128.Zdscal(n, alpha, x.Data, x.Inc) cblas128.Zdscal(x.N, alpha, x.Data, x.Inc)
} }
// Level 2 // Level 2
// Gemv computes // Gemv computes
// y = alpha * A * x + beta * y, if t == blas.NoTrans, // y = alpha * A * x + beta * y if t == blas.NoTrans,
// y = alpha * A^T * x + beta * y, if t == blas.Trans, // y = alpha * A * x + beta * y if t == blas.Trans,
// y = alpha * A^H * x + beta * y, if t == blas.ConjTrans, // y = alpha * A * x + beta * y if t == blas.ConjTrans,
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are
// scalars. // scalars.
func Gemv(t blas.Transpose, alpha complex128, a General, x Vector, beta complex128, y Vector) { func Gemv(t blas.Transpose, alpha complex128, a General, x Vector, beta complex128, y Vector) {
@@ -216,9 +240,9 @@ func Gemv(t blas.Transpose, alpha complex128, a General, x Vector, beta complex1
} }
// Gbmv computes // Gbmv computes
// y = alpha * A * x + beta * y, if t == blas.NoTrans, // y = alpha * A * x + beta * y if t == blas.NoTrans,
// y = alpha * A^T * x + beta * y, if t == blas.Trans, // y = alpha * A * x + beta * y if t == blas.Trans,
// y = alpha * A^H * x + beta * y, if t == blas.ConjTrans, // y = alpha * A * x + beta * y if t == blas.ConjTrans,
// where A is an m×n band matrix, x and y are vectors, and alpha and beta are // where A is an m×n band matrix, x and y are vectors, and alpha and beta are
// scalars. // scalars.
func Gbmv(t blas.Transpose, alpha complex128, a Band, x Vector, beta complex128, y Vector) { func Gbmv(t blas.Transpose, alpha complex128, a Band, x Vector, beta complex128, y Vector) {
@@ -226,36 +250,36 @@ func Gbmv(t blas.Transpose, alpha complex128, a Band, x Vector, beta complex128,
} }
// Trmv computes // Trmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans, // x = A * x if t == blas.Trans,
// x = A^H * x, if t == blas.ConjTrans, // x = A * x if t == blas.ConjTrans,
// where A is an n×n triangular matrix, and x is a vector. // where A is an n×n triangular matrix, and x is a vector.
func Trmv(t blas.Transpose, a Triangular, x Vector) { func Trmv(t blas.Transpose, a Triangular, x Vector) {
cblas128.Ztrmv(a.Uplo, t, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc) cblas128.Ztrmv(a.Uplo, t, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc)
} }
// Tbmv computes // Tbmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans, // x = A * x if t == blas.Trans,
// x = A^H * x, if t == blas.ConjTrans, // x = A * x if t == blas.ConjTrans,
// where A is an n×n triangular band matrix, and x is a vector. // where A is an n×n triangular band matrix, and x is a vector.
func Tbmv(t blas.Transpose, a TriangularBand, x Vector) { func Tbmv(t blas.Transpose, a TriangularBand, x Vector) {
cblas128.Ztbmv(a.Uplo, t, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc) cblas128.Ztbmv(a.Uplo, t, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc)
} }
// Tpmv computes // Tpmv computes
// x = A * x, if t == blas.NoTrans, // x = A * x if t == blas.NoTrans,
// x = A^T * x, if t == blas.Trans, // x = A * x if t == blas.Trans,
// x = A^H * x, if t == blas.ConjTrans, // x = A * x if t == blas.ConjTrans,
// where A is an n×n triangular matrix in packed format, and x is a vector. // where A is an n×n triangular matrix in packed format, and x is a vector.
func Tpmv(t blas.Transpose, a TriangularPacked, x Vector) { func Tpmv(t blas.Transpose, a TriangularPacked, x Vector) {
cblas128.Ztpmv(a.Uplo, t, a.Diag, a.N, a.Data, x.Data, x.Inc) cblas128.Ztpmv(a.Uplo, t, a.Diag, a.N, a.Data, x.Data, x.Inc)
} }
// Trsv solves // Trsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans, // A * x = b if t == blas.Trans,
// A^H * x = b, if t == blas.ConjTrans, // A * x = b if t == blas.ConjTrans,
// where A is an n×n triangular matrix and x is a vector. // where A is an n×n triangular matrix and x is a vector.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -268,9 +292,9 @@ func Trsv(t blas.Transpose, a Triangular, x Vector) {
} }
// Tbsv solves // Tbsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans, // A * x = b if t == blas.Trans,
// A^H * x = b, if t == blas.ConjTrans, // A * x = b if t == blas.ConjTrans,
// where A is an n×n triangular band matrix, and x is a vector. // where A is an n×n triangular band matrix, and x is a vector.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -283,9 +307,9 @@ func Tbsv(t blas.Transpose, a TriangularBand, x Vector) {
} }
// Tpsv solves // Tpsv solves
// A * x = b, if t == blas.NoTrans, // A * x = b if t == blas.NoTrans,
// A^T * x = b, if t == blas.Trans, // A * x = b if t == blas.Trans,
// A^H * x = b, if t == blas.ConjTrans, // A * x = b if t == blas.ConjTrans,
// where A is an n×n triangular matrix in packed format and x is a vector. // where A is an n×n triangular matrix in packed format and x is a vector.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -322,28 +346,28 @@ func Hpmv(alpha complex128, a HermitianPacked, x Vector, beta complex128, y Vect
} }
// Geru performs a rank-1 update // Geru performs a rank-1 update
// A += alpha * x * y^T, // A += alpha * x * y,
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Geru(alpha complex128, x, y Vector, a General) { func Geru(alpha complex128, x, y Vector, a General) {
cblas128.Zgeru(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) cblas128.Zgeru(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride)
} }
// Gerc performs a rank-1 update // Gerc performs a rank-1 update
// A += alpha * x * y^H, // A += alpha * x * y,
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Gerc(alpha complex128, x, y Vector, a General) { func Gerc(alpha complex128, x, y Vector, a General) {
cblas128.Zgerc(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) cblas128.Zgerc(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride)
} }
// Her performs a rank-1 update // Her performs a rank-1 update
// A += alpha * x * y^T, // A += alpha * x * y,
// where A is an m×n Hermitian matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n Hermitian matrix, x and y are vectors, and alpha is a scalar.
func Her(alpha float64, x Vector, a Hermitian) { func Her(alpha float64, x Vector, a Hermitian) {
cblas128.Zher(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data, a.Stride) cblas128.Zher(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data, a.Stride)
} }
// Hpr performs a rank-1 update // Hpr performs a rank-1 update
// A += alpha * x * x^H, // A += alpha * x * x,
// where A is an n×n Hermitian matrix in packed format, x is a vector, and // where A is an n×n Hermitian matrix in packed format, x is a vector, and
// alpha is a scalar. // alpha is a scalar.
func Hpr(alpha float64, x Vector, a HermitianPacked) { func Hpr(alpha float64, x Vector, a HermitianPacked) {
@@ -351,14 +375,14 @@ func Hpr(alpha float64, x Vector, a HermitianPacked) {
} }
// Her2 performs a rank-2 update // Her2 performs a rank-2 update
// A += alpha * x * y^H + conj(alpha) * y * x^H, // A += alpha * x * y + conj(alpha) * y * x,
// where A is an n×n Hermitian matrix, x and y are vectors, and alpha is a scalar. // where A is an n×n Hermitian matrix, x and y are vectors, and alpha is a scalar.
func Her2(alpha complex128, x, y Vector, a Hermitian) { func Her2(alpha complex128, x, y Vector, a Hermitian) {
cblas128.Zher2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) cblas128.Zher2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride)
} }
// Hpr2 performs a rank-2 update // Hpr2 performs a rank-2 update
// A += alpha * x * y^H + conj(alpha) * y * x^H, // A += alpha * x * y + conj(alpha) * y * x,
// where A is an n×n Hermitian matrix in packed format, x and y are vectors, // where A is an n×n Hermitian matrix in packed format, x and y are vectors,
// and alpha is a scalar. // and alpha is a scalar.
func Hpr2(alpha complex128, x, y Vector, a HermitianPacked) { func Hpr2(alpha complex128, x, y Vector, a HermitianPacked) {
@@ -387,8 +411,8 @@ func Gemm(tA, tB blas.Transpose, alpha complex128, a, b General, beta complex128
} }
// Symm performs // Symm performs
// C = alpha * A * B + beta * C, if s == blas.Left, // C = alpha * A * B + beta * C if s == blas.Left,
// C = alpha * B * A + beta * C, if s == blas.Right, // C = alpha * B * A + beta * C if s == blas.Right,
// where A is an n×n or m×m symmetric matrix, B and C are m×n matrices, and // where A is an n×n or m×m symmetric matrix, B and C are m×n matrices, and
// alpha and beta are scalars. // alpha and beta are scalars.
func Symm(s blas.Side, alpha complex128, a Symmetric, b General, beta complex128, c General) { func Symm(s blas.Side, alpha complex128, a Symmetric, b General, beta complex128, c General) {
@@ -402,8 +426,8 @@ func Symm(s blas.Side, alpha complex128, a Symmetric, b General, beta complex128
} }
// Syrk performs a symmetric rank-k update // Syrk performs a symmetric rank-k update
// C = alpha * A * A^T + beta * C, if t == blas.NoTrans, // C = alpha * A * A + beta * C if t == blas.NoTrans,
// C = alpha * A^T * A + beta * C, if t == blas.Trans, // C = alpha * A * A + beta * C if t == blas.Trans,
// where C is an n×n symmetric matrix, A is an n×k matrix if t == blas.NoTrans // where C is an n×n symmetric matrix, A is an n×k matrix if t == blas.NoTrans
// and a k×n matrix otherwise, and alpha and beta are scalars. // and a k×n matrix otherwise, and alpha and beta are scalars.
func Syrk(t blas.Transpose, alpha complex128, a General, beta complex128, c Symmetric) { func Syrk(t blas.Transpose, alpha complex128, a General, beta complex128, c Symmetric) {
@@ -417,8 +441,8 @@ func Syrk(t blas.Transpose, alpha complex128, a General, beta complex128, c Symm
} }
// Syr2k performs a symmetric rank-2k update // Syr2k performs a symmetric rank-2k update
// C = alpha * A * B^T + alpha * B * A^T + beta * C, if t == blas.NoTrans, // C = alpha * A * B + alpha * B * A + beta * C if t == blas.NoTrans,
// C = alpha * A^T * B + alpha * B^T * A + beta * C, if t == blas.Trans, // C = alpha * A * B + alpha * B * A + beta * C if t == blas.Trans,
// where C is an n×n symmetric matrix, A and B are n×k matrices if // where C is an n×n symmetric matrix, A and B are n×k matrices if
// t == blas.NoTrans and k×n otherwise, and alpha and beta are scalars. // t == blas.NoTrans and k×n otherwise, and alpha and beta are scalars.
func Syr2k(t blas.Transpose, alpha complex128, a, b General, beta complex128, c Symmetric) { func Syr2k(t blas.Transpose, alpha complex128, a, b General, beta complex128, c Symmetric) {
@@ -432,12 +456,12 @@ func Syr2k(t blas.Transpose, alpha complex128, a, b General, beta complex128, c
} }
// Trmm performs // Trmm performs
// B = alpha * A * B, if tA == blas.NoTrans and s == blas.Left, // B = alpha * A * B if tA == blas.NoTrans and s == blas.Left,
// B = alpha * A^T * B, if tA == blas.Trans and s == blas.Left, // B = alpha * A * B if tA == blas.Trans and s == blas.Left,
// B = alpha * A^H * B, if tA == blas.ConjTrans and s == blas.Left, // B = alpha * A * B if tA == blas.ConjTrans and s == blas.Left,
// B = alpha * B * A, if tA == blas.NoTrans and s == blas.Right, // B = alpha * B * A if tA == blas.NoTrans and s == blas.Right,
// B = alpha * B * A^T, if tA == blas.Trans and s == blas.Right, // B = alpha * B * A if tA == blas.Trans and s == blas.Right,
// B = alpha * B * A^H, if tA == blas.ConjTrans and s == blas.Right, // B = alpha * B * A if tA == blas.ConjTrans and s == blas.Right,
// where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is // where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is
// a scalar. // a scalar.
func Trmm(s blas.Side, tA blas.Transpose, alpha complex128, a Triangular, b General) { func Trmm(s blas.Side, tA blas.Transpose, alpha complex128, a Triangular, b General) {
@@ -445,12 +469,12 @@ func Trmm(s blas.Side, tA blas.Transpose, alpha complex128, a Triangular, b Gene
} }
// Trsm solves // Trsm solves
// A * X = alpha * B, if tA == blas.NoTrans and s == blas.Left, // A * X = alpha * B if tA == blas.NoTrans and s == blas.Left,
// A^T * X = alpha * B, if tA == blas.Trans and s == blas.Left, // A * X = alpha * B if tA == blas.Trans and s == blas.Left,
// A^H * X = alpha * B, if tA == blas.ConjTrans and s == blas.Left, // A * X = alpha * B if tA == blas.ConjTrans and s == blas.Left,
// X * A = alpha * B, if tA == blas.NoTrans and s == blas.Right, // X * A = alpha * B if tA == blas.NoTrans and s == blas.Right,
// X * A^T = alpha * B, if tA == blas.Trans and s == blas.Right, // X * A = alpha * B if tA == blas.Trans and s == blas.Right,
// X * A^H = alpha * B, if tA == blas.ConjTrans and s == blas.Right, // X * A = alpha * B if tA == blas.ConjTrans and s == blas.Right,
// where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and // where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and
// alpha is a scalar. // alpha is a scalar.
// //
@@ -463,8 +487,8 @@ func Trsm(s blas.Side, tA blas.Transpose, alpha complex128, a Triangular, b Gene
} }
// Hemm performs // Hemm performs
// C = alpha * A * B + beta * C, if s == blas.Left, // C = alpha * A * B + beta * C if s == blas.Left,
// C = alpha * B * A + beta * C, if s == blas.Right, // C = alpha * B * A + beta * C if s == blas.Right,
// where A is an n×n or m×m Hermitian matrix, B and C are m×n matrices, and // where A is an n×n or m×m Hermitian matrix, B and C are m×n matrices, and
// alpha and beta are scalars. // alpha and beta are scalars.
func Hemm(s blas.Side, alpha complex128, a Hermitian, b General, beta complex128, c General) { func Hemm(s blas.Side, alpha complex128, a Hermitian, b General, beta complex128, c General) {
@@ -478,8 +502,8 @@ func Hemm(s blas.Side, alpha complex128, a Hermitian, b General, beta complex128
} }
// Herk performs the Hermitian rank-k update // Herk performs the Hermitian rank-k update
// C = alpha * A * A^H + beta*C, if t == blas.NoTrans, // C = alpha * A * A + beta*C if t == blas.NoTrans,
// C = alpha * A^H * A + beta*C, if t == blas.ConjTrans, // C = alpha * A * A + beta*C if t == blas.ConjTrans,
// where C is an n×n Hermitian matrix, A is an n×k matrix if t == blas.NoTrans // where C is an n×n Hermitian matrix, A is an n×k matrix if t == blas.NoTrans
// and a k×n matrix otherwise, and alpha and beta are scalars. // and a k×n matrix otherwise, and alpha and beta are scalars.
func Herk(t blas.Transpose, alpha float64, a General, beta float64, c Hermitian) { func Herk(t blas.Transpose, alpha float64, a General, beta float64, c Hermitian) {
@@ -493,8 +517,8 @@ func Herk(t blas.Transpose, alpha float64, a General, beta float64, c Hermitian)
} }
// Her2k performs the Hermitian rank-2k update // Her2k performs the Hermitian rank-2k update
// C = alpha * A * B^H + conj(alpha) * B * A^H + beta * C, if t == blas.NoTrans, // C = alpha * A * B + conj(alpha) * B * A + beta * C if t == blas.NoTrans,
// C = alpha * A^H * B + conj(alpha) * B^H * A + beta * C, if t == blas.ConjTrans, // C = alpha * A * B + conj(alpha) * B * A + beta * C if t == blas.ConjTrans,
// where C is an n×n Hermitian matrix, A and B are n×k matrices if t == NoTrans // where C is an n×n Hermitian matrix, A and B are n×k matrices if t == NoTrans
// and k×n matrices otherwise, and alpha and beta are scalars. // and k×n matrices otherwise, and alpha and beta are scalars.
func Her2k(t blas.Transpose, alpha complex128, a, b General, beta float64, c Hermitian) { func Her2k(t blas.Transpose, alpha complex128, a, b General, beta float64, c Hermitian) {

View File

@@ -171,7 +171,7 @@ func (t Band) From(a BandCols) {
} }
} }
// TriangularBandCols represents a symmetric matrix using the band column-major storage scheme. // TriangularBandCols represents a triangular matrix using the band column-major storage scheme.
type TriangularBandCols TriangularBand type TriangularBandCols TriangularBand
// From fills the receiver with elements from a. The receiver // From fills the receiver with elements from a. The receiver

View File

@@ -14,9 +14,9 @@ import (
// Dgemm performs one of the matrix-matrix operations // Dgemm performs one of the matrix-matrix operations
// C = alpha * A * B + beta * C // C = alpha * A * B + beta * C
// C = alpha * A^T * B + beta * C // C = alpha * A * B + beta * C
// C = alpha * A * B^T + beta * C // C = alpha * A * B + beta * C
// C = alpha * A^T * B^T + beta * C // C = alpha * A * B + beta * C
// where A is an m×k or k×m dense matrix, B is an n×k or k×n dense matrix, C is // where A is an m×k or k×m dense matrix, B is an n×k or k×n dense matrix, C is
// an m×n matrix, and alpha and beta are scalars. tA and tB specify whether A or // an m×n matrix, and alpha and beta are scalars. tA and tB specify whether A or
// B are transposed. // B are transposed.
@@ -134,9 +134,9 @@ func dgemmParallel(aTrans, bTrans bool, m, n, k int, a []float64, lda int, b []f
// In all cases, there is one dimension for each matrix along which // In all cases, there is one dimension for each matrix along which
// C must be updated sequentially. // C must be updated sequentially.
// Cij = \sum_k Aik Bki, (A * B) // Cij = \sum_k Aik Bki, (A * B)
// Cij = \sum_k Aki Bkj, (A^T * B) // Cij = \sum_k Aki Bkj, (A * B)
// Cij = \sum_k Aik Bjk, (A * B^T) // Cij = \sum_k Aik Bjk, (A * B)
// Cij = \sum_k Aki Bjk, (A^T * B^T) // Cij = \sum_k Aki Bjk, (A * B)
// //
// This code computes one {i, j} block sequentially along the k dimension, // This code computes one {i, j} block sequentially along the k dimension,
// and computes all of the {i, j} blocks concurrently. This // and computes all of the {i, j} blocks concurrently. This

View File

@@ -14,7 +14,7 @@ import (
// Dgemv computes // Dgemv computes
// y = alpha * A * x + beta * y if tA = blas.NoTrans // y = alpha * A * x + beta * y if tA = blas.NoTrans
// y = alpha * A^T * x + beta * y if tA = blas.Trans or blas.ConjTrans // y = alpha * A * x + beta * y if tA = blas.Trans or blas.ConjTrans
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars.
func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) {
if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans {
@@ -84,7 +84,7 @@ func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []floa
// Sgemv computes // Sgemv computes
// y = alpha * A * x + beta * y if tA = blas.NoTrans // y = alpha * A * x + beta * y if tA = blas.NoTrans
// y = alpha * A^T * x + beta * y if tA = blas.Trans or blas.ConjTrans // y = alpha * A * x + beta * y if tA = blas.Trans or blas.ConjTrans
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.

View File

@@ -240,7 +240,7 @@ func (Implementation) Zcopy(n int, x []complex128, incX int, y []complex128, inc
} }
// Zdotc computes the dot product // Zdotc computes the dot product
// x^H · y // x · y
// of two complex vectors x and y. // of two complex vectors x and y.
func (Implementation) Zdotc(n int, x []complex128, incX int, y []complex128, incY int) complex128 { func (Implementation) Zdotc(n int, x []complex128, incX int, y []complex128, incY int) complex128 {
if incX == 0 { if incX == 0 {
@@ -281,7 +281,7 @@ func (Implementation) Zdotc(n int, x []complex128, incX int, y []complex128, inc
} }
// Zdotu computes the dot product // Zdotu computes the dot product
// x^T · y // x · y
// of two complex vectors x and y. // of two complex vectors x and y.
func (Implementation) Zdotu(n int, x []complex128, incX int, y []complex128, incY int) complex128 { func (Implementation) Zdotu(n int, x []complex128, incX int, y []complex128, incY int) complex128 {
if incX == 0 { if incX == 0 {

View File

@@ -252,7 +252,7 @@ func (Implementation) Ccopy(n int, x []complex64, incX int, y []complex64, incY
} }
// Cdotc computes the dot product // Cdotc computes the dot product
// x^H · y // x · y
// of two complex vectors x and y. // of two complex vectors x and y.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.
@@ -295,7 +295,7 @@ func (Implementation) Cdotc(n int, x []complex64, incX int, y []complex64, incY
} }
// Cdotu computes the dot product // Cdotu computes the dot product
// x^T · y // x · y
// of two complex vectors x and y. // of two complex vectors x and y.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.

View File

@@ -15,8 +15,8 @@ var _ blas.Complex128Level2 = Implementation{}
// Zgbmv performs one of the matrix-vector operations // Zgbmv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if trans = blas.NoTrans // y = alpha * A * x + beta * y if trans = blas.NoTrans
// y = alpha * A^T * x + beta * y if trans = blas.Trans // y = alpha * A * x + beta * y if trans = blas.Trans
// y = alpha * A^H * x + beta * y if trans = blas.ConjTrans // y = alpha * A * x + beta * y if trans = blas.ConjTrans
// where alpha and beta are scalars, x and y are vectors, and A is an m×n band matrix // where alpha and beta are scalars, x and y are vectors, and A is an m×n band matrix
// with kL sub-diagonals and kU super-diagonals. // with kL sub-diagonals and kU super-diagonals.
func (Implementation) Zgbmv(trans blas.Transpose, m, n, kL, kU int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) { func (Implementation) Zgbmv(trans blas.Transpose, m, n, kL, kU int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) {
@@ -210,8 +210,8 @@ func (Implementation) Zgbmv(trans blas.Transpose, m, n, kL, kU int, alpha comple
// Zgemv performs one of the matrix-vector operations // Zgemv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if trans = blas.NoTrans // y = alpha * A * x + beta * y if trans = blas.NoTrans
// y = alpha * A^T * x + beta * y if trans = blas.Trans // y = alpha * A * x + beta * y if trans = blas.Trans
// y = alpha * A^H * x + beta * y if trans = blas.ConjTrans // y = alpha * A * x + beta * y if trans = blas.ConjTrans
// where alpha and beta are scalars, x and y are vectors, and A is an m×n dense matrix. // where alpha and beta are scalars, x and y are vectors, and A is an m×n dense matrix.
func (Implementation) Zgemv(trans blas.Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) { func (Implementation) Zgemv(trans blas.Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) {
switch trans { switch trans {
@@ -322,7 +322,7 @@ func (Implementation) Zgemv(trans blas.Transpose, m, n int, alpha complex128, a
return return
case blas.Trans: case blas.Trans:
// Form y = alpha*A^T*x + y. // Form y = alpha*A*x + y.
ix := kx ix := kx
if incY == 1 { if incY == 1 {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
@@ -338,7 +338,7 @@ func (Implementation) Zgemv(trans blas.Transpose, m, n int, alpha complex128, a
return return
case blas.ConjTrans: case blas.ConjTrans:
// Form y = alpha*A^H*x + y. // Form y = alpha*A*x + y.
ix := kx ix := kx
if incY == 1 { if incY == 1 {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
@@ -364,7 +364,7 @@ func (Implementation) Zgemv(trans blas.Transpose, m, n int, alpha complex128, a
} }
// Zgerc performs the rank-one operation // Zgerc performs the rank-one operation
// A += alpha * x * y^H // A += alpha * x * y
// where A is an m×n dense matrix, alpha is a scalar, x is an m element vector, // where A is an m×n dense matrix, alpha is a scalar, x is an m element vector,
// and y is an n element vector. // and y is an n element vector.
func (Implementation) Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) { func (Implementation) Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) {
@@ -422,7 +422,7 @@ func (Implementation) Zgerc(m, n int, alpha complex128, x []complex128, incX int
} }
// Zgeru performs the rank-one operation // Zgeru performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, alpha is a scalar, x is an m element vector, // where A is an m×n dense matrix, alpha is a scalar, x is an m element vector,
// and y is an n element vector. // and y is an n element vector.
func (Implementation) Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) { func (Implementation) Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) {
@@ -822,7 +822,7 @@ func (Implementation) Zhemv(uplo blas.Uplo, n int, alpha complex128, a []complex
} }
// Zher performs the Hermitian rank-one operation // Zher performs the Hermitian rank-one operation
// A += alpha * x * x^H // A += alpha * x * x
// where A is an n×n Hermitian matrix, alpha is a real scalar, and x is an n // where A is an n×n Hermitian matrix, alpha is a real scalar, and x is an n
// element vector. On entry, the imaginary parts of the diagonal elements of A // element vector. On entry, the imaginary parts of the diagonal elements of A
// are ignored and assumed to be zero, on return they will be set to zero. // are ignored and assumed to be zero, on return they will be set to zero.
@@ -944,7 +944,7 @@ func (Implementation) Zher(uplo blas.Uplo, n int, alpha float64, x []complex128,
} }
// Zher2 performs the Hermitian rank-two operation // Zher2 performs the Hermitian rank-two operation
// A += alpha * x * y^H + conj(alpha) * y * x^H // A += alpha * x * y + conj(alpha) * y * x
// where alpha is a scalar, x and y are n element vectors and A is an n×n // where alpha is a scalar, x and y are n element vectors and A is an n×n
// Hermitian matrix. On entry, the imaginary parts of the diagonal elements are // Hermitian matrix. On entry, the imaginary parts of the diagonal elements are
// ignored and assumed to be zero. On return they will be set to zero. // ignored and assumed to be zero. On return they will be set to zero.
@@ -1248,7 +1248,7 @@ func (Implementation) Zhpmv(uplo blas.Uplo, n int, alpha complex128, ap []comple
} }
// Zhpr performs the Hermitian rank-1 operation // Zhpr performs the Hermitian rank-1 operation
// A += alpha * x * x^H // A += alpha * x * x
// where alpha is a real scalar, x is a vector, and A is an n×n hermitian matrix // where alpha is a real scalar, x is a vector, and A is an n×n hermitian matrix
// in packed form. On entry, the imaginary parts of the diagonal elements are // in packed form. On entry, the imaginary parts of the diagonal elements are
// assumed to be zero, and on return they are set to zero. // assumed to be zero, and on return they are set to zero.
@@ -1382,7 +1382,7 @@ func (Implementation) Zhpr(uplo blas.Uplo, n int, alpha float64, x []complex128,
} }
// Zhpr2 performs the Hermitian rank-2 operation // Zhpr2 performs the Hermitian rank-2 operation
// A += alpha * x * y^H + conj(alpha) * y * x^H // A += alpha * x * y + conj(alpha) * y * x
// where alpha is a complex scalar, x and y are n element vectors, and A is an // where alpha is a complex scalar, x and y are n element vectors, and A is an
// n×n Hermitian matrix, supplied in packed form. On entry, the imaginary parts // n×n Hermitian matrix, supplied in packed form. On entry, the imaginary parts
// of the diagonal elements are assumed to be zero, and on return they are set to zero. // of the diagonal elements are assumed to be zero, and on return they are set to zero.
@@ -1530,8 +1530,8 @@ func (Implementation) Zhpr2(uplo blas.Uplo, n int, alpha complex128, x []complex
// Ztbmv performs one of the matrix-vector operations // Ztbmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is an n element vector and A is an n×n triangular band matrix, with // where x is an n element vector and A is an n×n triangular band matrix, with
// (k+1) diagonals. // (k+1) diagonals.
func (Implementation) Ztbmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, k int, a []complex128, lda int, x []complex128, incX int) { func (Implementation) Ztbmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, k int, a []complex128, lda int, x []complex128, incX int) {
@@ -1766,8 +1766,8 @@ func (Implementation) Ztbmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ztbsv solves one of the systems of equations // Ztbsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular band matrix // where b and x are n element vectors and A is an n×n triangular band matrix
// with (k+1) diagonals. // with (k+1) diagonals.
// //
@@ -2008,8 +2008,8 @@ func (Implementation) Ztbsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ztpmv performs one of the matrix-vector operations // Ztpmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is an n element vector and A is an n×n triangular matrix, supplied in // where x is an n element vector and A is an n×n triangular matrix, supplied in
// packed form. // packed form.
func (Implementation) Ztpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, ap []complex128, x []complex128, incX int) { func (Implementation) Ztpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, ap []complex128, x []complex128, incX int) {
@@ -2116,7 +2116,7 @@ func (Implementation) Ztpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = A^T*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
// kk points to the current diagonal element in ap. // kk points to the current diagonal element in ap.
kk := n*(n+1)/2 - 1 kk := n*(n+1)/2 - 1
@@ -2176,7 +2176,7 @@ func (Implementation) Ztpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = A^H*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
// kk points to the current diagonal element in ap. // kk points to the current diagonal element in ap.
kk := n*(n+1)/2 - 1 kk := n*(n+1)/2 - 1
@@ -2246,8 +2246,8 @@ func (Implementation) Ztpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ztpsv solves one of the systems of equations // Ztpsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular matrix in // where b and x are n element vectors and A is an n×n triangular matrix in
// packed form. // packed form.
// //
@@ -2359,7 +2359,7 @@ func (Implementation) Ztpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = inv(A^T)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
kk := 0 kk := 0
if incX == 1 { if incX == 1 {
@@ -2414,7 +2414,7 @@ func (Implementation) Ztpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = inv(A^H)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
kk := 0 kk := 0
if incX == 1 { if incX == 1 {
@@ -2482,8 +2482,8 @@ func (Implementation) Ztpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ztrmv performs one of the matrix-vector operations // Ztrmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is a vector, and A is an n×n triangular matrix. // where x is a vector, and A is an n×n triangular matrix.
func (Implementation) Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, a []complex128, lda int, x []complex128, incX int) { func (Implementation) Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n int, a []complex128, lda int, x []complex128, incX int) {
switch trans { switch trans {
@@ -2583,7 +2583,7 @@ func (Implementation) Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = A^T*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for i := n - 1; i >= 0; i-- { for i := n - 1; i >= 0; i-- {
@@ -2634,7 +2634,7 @@ func (Implementation) Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = A^H*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for i := n - 1; i >= 0; i-- { for i := n - 1; i >= 0; i-- {
@@ -2690,8 +2690,8 @@ func (Implementation) Ztrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ztrsv solves one of the systems of equations // Ztrsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular matrix. // where b and x are n element vectors and A is an n×n triangular matrix.
// //
// On entry, x contains the values of b, and the solution is // On entry, x contains the values of b, and the solution is
@@ -2799,7 +2799,7 @@ func (Implementation) Ztrsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = inv(A^T)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
@@ -2849,7 +2849,7 @@ func (Implementation) Ztrsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = inv(A^H)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {

View File

@@ -17,8 +17,8 @@ var _ blas.Complex64Level2 = Implementation{}
// Cgbmv performs one of the matrix-vector operations // Cgbmv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if trans = blas.NoTrans // y = alpha * A * x + beta * y if trans = blas.NoTrans
// y = alpha * A^T * x + beta * y if trans = blas.Trans // y = alpha * A * x + beta * y if trans = blas.Trans
// y = alpha * A^H * x + beta * y if trans = blas.ConjTrans // y = alpha * A * x + beta * y if trans = blas.ConjTrans
// where alpha and beta are scalars, x and y are vectors, and A is an m×n band matrix // where alpha and beta are scalars, x and y are vectors, and A is an m×n band matrix
// with kL sub-diagonals and kU super-diagonals. // with kL sub-diagonals and kU super-diagonals.
// //
@@ -214,8 +214,8 @@ func (Implementation) Cgbmv(trans blas.Transpose, m, n, kL, kU int, alpha comple
// Cgemv performs one of the matrix-vector operations // Cgemv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if trans = blas.NoTrans // y = alpha * A * x + beta * y if trans = blas.NoTrans
// y = alpha * A^T * x + beta * y if trans = blas.Trans // y = alpha * A * x + beta * y if trans = blas.Trans
// y = alpha * A^H * x + beta * y if trans = blas.ConjTrans // y = alpha * A * x + beta * y if trans = blas.ConjTrans
// where alpha and beta are scalars, x and y are vectors, and A is an m×n dense matrix. // where alpha and beta are scalars, x and y are vectors, and A is an m×n dense matrix.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.
@@ -328,7 +328,7 @@ func (Implementation) Cgemv(trans blas.Transpose, m, n int, alpha complex64, a [
return return
case blas.Trans: case blas.Trans:
// Form y = alpha*A^T*x + y. // Form y = alpha*A*x + y.
ix := kx ix := kx
if incY == 1 { if incY == 1 {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
@@ -344,7 +344,7 @@ func (Implementation) Cgemv(trans blas.Transpose, m, n int, alpha complex64, a [
return return
case blas.ConjTrans: case blas.ConjTrans:
// Form y = alpha*A^H*x + y. // Form y = alpha*A*x + y.
ix := kx ix := kx
if incY == 1 { if incY == 1 {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
@@ -370,7 +370,7 @@ func (Implementation) Cgemv(trans blas.Transpose, m, n int, alpha complex64, a [
} }
// Cgerc performs the rank-one operation // Cgerc performs the rank-one operation
// A += alpha * x * y^H // A += alpha * x * y
// where A is an m×n dense matrix, alpha is a scalar, x is an m element vector, // where A is an m×n dense matrix, alpha is a scalar, x is an m element vector,
// and y is an n element vector. // and y is an n element vector.
// //
@@ -430,7 +430,7 @@ func (Implementation) Cgerc(m, n int, alpha complex64, x []complex64, incX int,
} }
// Cgeru performs the rank-one operation // Cgeru performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, alpha is a scalar, x is an m element vector, // where A is an m×n dense matrix, alpha is a scalar, x is an m element vector,
// and y is an n element vector. // and y is an n element vector.
// //
@@ -836,7 +836,7 @@ func (Implementation) Chemv(uplo blas.Uplo, n int, alpha complex64, a []complex6
} }
// Cher performs the Hermitian rank-one operation // Cher performs the Hermitian rank-one operation
// A += alpha * x * x^H // A += alpha * x * x
// where A is an n×n Hermitian matrix, alpha is a real scalar, and x is an n // where A is an n×n Hermitian matrix, alpha is a real scalar, and x is an n
// element vector. On entry, the imaginary parts of the diagonal elements of A // element vector. On entry, the imaginary parts of the diagonal elements of A
// are ignored and assumed to be zero, on return they will be set to zero. // are ignored and assumed to be zero, on return they will be set to zero.
@@ -960,7 +960,7 @@ func (Implementation) Cher(uplo blas.Uplo, n int, alpha float32, x []complex64,
} }
// Cher2 performs the Hermitian rank-two operation // Cher2 performs the Hermitian rank-two operation
// A += alpha * x * y^H + conj(alpha) * y * x^H // A += alpha * x * y + conj(alpha) * y * x
// where alpha is a scalar, x and y are n element vectors and A is an n×n // where alpha is a scalar, x and y are n element vectors and A is an n×n
// Hermitian matrix. On entry, the imaginary parts of the diagonal elements are // Hermitian matrix. On entry, the imaginary parts of the diagonal elements are
// ignored and assumed to be zero. On return they will be set to zero. // ignored and assumed to be zero. On return they will be set to zero.
@@ -1268,7 +1268,7 @@ func (Implementation) Chpmv(uplo blas.Uplo, n int, alpha complex64, ap []complex
} }
// Chpr performs the Hermitian rank-1 operation // Chpr performs the Hermitian rank-1 operation
// A += alpha * x * x^H // A += alpha * x * x
// where alpha is a real scalar, x is a vector, and A is an n×n hermitian matrix // where alpha is a real scalar, x is a vector, and A is an n×n hermitian matrix
// in packed form. On entry, the imaginary parts of the diagonal elements are // in packed form. On entry, the imaginary parts of the diagonal elements are
// assumed to be zero, and on return they are set to zero. // assumed to be zero, and on return they are set to zero.
@@ -1404,7 +1404,7 @@ func (Implementation) Chpr(uplo blas.Uplo, n int, alpha float32, x []complex64,
} }
// Chpr2 performs the Hermitian rank-2 operation // Chpr2 performs the Hermitian rank-2 operation
// A += alpha * x * y^H + conj(alpha) * y * x^H // A += alpha * x * y + conj(alpha) * y * x
// where alpha is a complex scalar, x and y are n element vectors, and A is an // where alpha is a complex scalar, x and y are n element vectors, and A is an
// n×n Hermitian matrix, supplied in packed form. On entry, the imaginary parts // n×n Hermitian matrix, supplied in packed form. On entry, the imaginary parts
// of the diagonal elements are assumed to be zero, and on return they are set to zero. // of the diagonal elements are assumed to be zero, and on return they are set to zero.
@@ -1554,8 +1554,8 @@ func (Implementation) Chpr2(uplo blas.Uplo, n int, alpha complex64, x []complex6
// Ctbmv performs one of the matrix-vector operations // Ctbmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is an n element vector and A is an n×n triangular band matrix, with // where x is an n element vector and A is an n×n triangular band matrix, with
// (k+1) diagonals. // (k+1) diagonals.
// //
@@ -1792,8 +1792,8 @@ func (Implementation) Ctbmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ctbsv solves one of the systems of equations // Ctbsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular band matrix // where b and x are n element vectors and A is an n×n triangular band matrix
// with (k+1) diagonals. // with (k+1) diagonals.
// //
@@ -2036,8 +2036,8 @@ func (Implementation) Ctbsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ctpmv performs one of the matrix-vector operations // Ctpmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is an n element vector and A is an n×n triangular matrix, supplied in // where x is an n element vector and A is an n×n triangular matrix, supplied in
// packed form. // packed form.
// //
@@ -2146,7 +2146,7 @@ func (Implementation) Ctpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = A^T*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
// kk points to the current diagonal element in ap. // kk points to the current diagonal element in ap.
kk := n*(n+1)/2 - 1 kk := n*(n+1)/2 - 1
@@ -2206,7 +2206,7 @@ func (Implementation) Ctpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = A^H*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
// kk points to the current diagonal element in ap. // kk points to the current diagonal element in ap.
kk := n*(n+1)/2 - 1 kk := n*(n+1)/2 - 1
@@ -2276,8 +2276,8 @@ func (Implementation) Ctpmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ctpsv solves one of the systems of equations // Ctpsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular matrix in // where b and x are n element vectors and A is an n×n triangular matrix in
// packed form. // packed form.
// //
@@ -2391,7 +2391,7 @@ func (Implementation) Ctpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = inv(A^T)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
kk := 0 kk := 0
if incX == 1 { if incX == 1 {
@@ -2446,7 +2446,7 @@ func (Implementation) Ctpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = inv(A^H)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
kk := 0 kk := 0
if incX == 1 { if incX == 1 {
@@ -2514,8 +2514,8 @@ func (Implementation) Ctpsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ctrmv performs one of the matrix-vector operations // Ctrmv performs one of the matrix-vector operations
// x = A * x if trans = blas.NoTrans // x = A * x if trans = blas.NoTrans
// x = A^T * x if trans = blas.Trans // x = A * x if trans = blas.Trans
// x = A^H * x if trans = blas.ConjTrans // x = A * x if trans = blas.ConjTrans
// where x is a vector, and A is an n×n triangular matrix. // where x is a vector, and A is an n×n triangular matrix.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.
@@ -2617,7 +2617,7 @@ func (Implementation) Ctrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = A^T*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for i := n - 1; i >= 0; i-- { for i := n - 1; i >= 0; i-- {
@@ -2668,7 +2668,7 @@ func (Implementation) Ctrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = A^H*x. // Form x = A*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for i := n - 1; i >= 0; i-- { for i := n - 1; i >= 0; i-- {
@@ -2724,8 +2724,8 @@ func (Implementation) Ctrmv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
// Ctrsv solves one of the systems of equations // Ctrsv solves one of the systems of equations
// A * x = b if trans == blas.NoTrans // A * x = b if trans == blas.NoTrans
// A^T * x = b if trans == blas.Trans // A * x = b if trans == blas.Trans
// A^H * x = b if trans == blas.ConjTrans // A * x = b if trans == blas.ConjTrans
// where b and x are n element vectors and A is an n×n triangular matrix. // where b and x are n element vectors and A is an n×n triangular matrix.
// //
// On entry, x contains the values of b, and the solution is // On entry, x contains the values of b, and the solution is
@@ -2835,7 +2835,7 @@ func (Implementation) Ctrsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
} }
if trans == blas.Trans { if trans == blas.Trans {
// Form x = inv(A^T)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
@@ -2885,7 +2885,7 @@ func (Implementation) Ctrsv(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag
return return
} }
// Form x = inv(A^H)*x. // Form x = inv(A)*x.
if uplo == blas.Upper { if uplo == blas.Upper {
if incX == 1 { if incX == 1 {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {

View File

@@ -14,7 +14,7 @@ import (
var _ blas.Float32Level2 = Implementation{} var _ blas.Float32Level2 = Implementation{}
// Sger performs the rank-one operation // Sger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -64,7 +64,7 @@ func (Implementation) Sger(m, n int, alpha float32, x []float32, incX int, y []f
// Sgbmv performs one of the matrix-vector operations // Sgbmv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if tA == blas.NoTrans // y = alpha * A * x + beta * y if tA == blas.NoTrans
// y = alpha * A^T * x + beta * y if tA == blas.Trans or blas.ConjTrans // y = alpha * A * x + beta * y if tA == blas.Trans or blas.ConjTrans
// where A is an m×n band matrix with kL sub-diagonals and kU super-diagonals, // where A is an m×n band matrix with kL sub-diagonals and kU super-diagonals,
// x and y are vectors, and alpha and beta are scalars. // x and y are vectors, and alpha and beta are scalars.
// //
@@ -231,7 +231,7 @@ func (Implementation) Sgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float32,
// Strmv performs one of the matrix-vector operations // Strmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix, and x is a vector. // where A is an n×n triangular matrix, and x is a vector.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -385,7 +385,7 @@ func (Implementation) Strmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int,
// Strsv solves one of the systems of equations // Strsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or blas.ConjTrans // A * x = b if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix, and x and b are vectors. // where A is an n×n triangular matrix, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -738,7 +738,7 @@ func (Implementation) Ssymv(ul blas.Uplo, n int, alpha float32, a []float32, lda
// Stbmv performs one of the matrix-vector operations // Stbmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular band matrix with k+1 diagonals, and x is a vector. // where A is an n×n triangular band matrix with k+1 diagonals, and x is a vector.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -949,7 +949,7 @@ func (Implementation) Stbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k i
// Stpmv performs one of the matrix-vector operations // Stpmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix in packed format, and x is a vector. // where A is an n×n triangular matrix in packed format, and x is a vector.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -1130,7 +1130,7 @@ func (Implementation) Stpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int,
// Stbsv solves one of the systems of equations // Stbsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or tA == blas.ConjTrans // A * x = b if tA == blas.Trans or tA == blas.ConjTrans
// where A is an n×n triangular band matrix with k+1 diagonals, // where A is an n×n triangular band matrix with k+1 diagonals,
// and x and b are vectors. // and x and b are vectors.
// //
@@ -1525,7 +1525,7 @@ func (Implementation) Ssbmv(ul blas.Uplo, n, k int, alpha float32, a []float32,
} }
// Ssyr performs the symmetric rank-one update // Ssyr performs the symmetric rank-one update
// A += alpha * x * x^T // A += alpha * x * x
// where A is an n×n symmetric matrix, and x is a vector. // where A is an n×n symmetric matrix, and x is a vector.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -1625,7 +1625,7 @@ func (Implementation) Ssyr(ul blas.Uplo, n int, alpha float32, x []float32, incX
} }
// Ssyr2 performs the symmetric rank-two update // Ssyr2 performs the symmetric rank-two update
// A += alpha * x * y^T + alpha * y * x^T // A += alpha * x * y + alpha * y * x
// where A is an n×n symmetric matrix, x and y are vectors, and alpha is a scalar. // where A is an n×n symmetric matrix, x and y are vectors, and alpha is a scalar.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.
@@ -1735,7 +1735,7 @@ func (Implementation) Ssyr2(ul blas.Uplo, n int, alpha float32, x []float32, inc
// Stpsv solves one of the systems of equations // Stpsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or blas.ConjTrans // A * x = b if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix in packed format, and x and b are vectors. // where A is an n×n triangular matrix in packed format, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -2089,7 +2089,7 @@ func (Implementation) Sspmv(ul blas.Uplo, n int, alpha float32, ap []float32, x
} }
// Sspr performs the symmetric rank-one operation // Sspr performs the symmetric rank-one operation
// A += alpha * x * x^T // A += alpha * x * x
// where A is an n×n symmetric matrix in packed format, x is a vector, and // where A is an n×n symmetric matrix in packed format, x is a vector, and
// alpha is a scalar. // alpha is a scalar.
// //
@@ -2183,7 +2183,7 @@ func (Implementation) Sspr(ul blas.Uplo, n int, alpha float32, x []float32, incX
} }
// Sspr2 performs the symmetric rank-2 update // Sspr2 performs the symmetric rank-2 update
// A += alpha * x * y^T + alpha * y * x^T // A += alpha * x * y + alpha * y * x
// where A is an n×n symmetric matrix in packed format, x and y are vectors, // where A is an n×n symmetric matrix in packed format, x and y are vectors,
// and alpha is a scalar. // and alpha is a scalar.
// //

View File

@@ -12,7 +12,7 @@ import (
var _ blas.Float64Level2 = Implementation{} var _ blas.Float64Level2 = Implementation{}
// Dger performs the rank-one operation // Dger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) {
if m < 0 { if m < 0 {
@@ -60,7 +60,7 @@ func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []f
// Dgbmv performs one of the matrix-vector operations // Dgbmv performs one of the matrix-vector operations
// y = alpha * A * x + beta * y if tA == blas.NoTrans // y = alpha * A * x + beta * y if tA == blas.NoTrans
// y = alpha * A^T * x + beta * y if tA == blas.Trans or blas.ConjTrans // y = alpha * A * x + beta * y if tA == blas.Trans or blas.ConjTrans
// where A is an m×n band matrix with kL sub-diagonals and kU super-diagonals, // where A is an m×n band matrix with kL sub-diagonals and kU super-diagonals,
// x and y are vectors, and alpha and beta are scalars. // x and y are vectors, and alpha and beta are scalars.
func (Implementation) Dgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { func (Implementation) Dgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) {
@@ -225,7 +225,7 @@ func (Implementation) Dgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float64,
// Dtrmv performs one of the matrix-vector operations // Dtrmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix, and x is a vector. // where A is an n×n triangular matrix, and x is a vector.
func (Implementation) Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) { func (Implementation) Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) {
if ul != blas.Lower && ul != blas.Upper { if ul != blas.Lower && ul != blas.Upper {
@@ -377,7 +377,7 @@ func (Implementation) Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int,
// Dtrsv solves one of the systems of equations // Dtrsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or blas.ConjTrans // A * x = b if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix, and x and b are vectors. // where A is an n×n triangular matrix, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -726,7 +726,7 @@ func (Implementation) Dsymv(ul blas.Uplo, n int, alpha float64, a []float64, lda
// Dtbmv performs one of the matrix-vector operations // Dtbmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular band matrix with k+1 diagonals, and x is a vector. // where A is an n×n triangular band matrix with k+1 diagonals, and x is a vector.
func (Implementation) Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) { func (Implementation) Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) {
if ul != blas.Lower && ul != blas.Upper { if ul != blas.Lower && ul != blas.Upper {
@@ -935,7 +935,7 @@ func (Implementation) Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k i
// Dtpmv performs one of the matrix-vector operations // Dtpmv performs one of the matrix-vector operations
// x = A * x if tA == blas.NoTrans // x = A * x if tA == blas.NoTrans
// x = A^T * x if tA == blas.Trans or blas.ConjTrans // x = A * x if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix in packed format, and x is a vector. // where A is an n×n triangular matrix in packed format, and x is a vector.
func (Implementation) Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) { func (Implementation) Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) {
if ul != blas.Lower && ul != blas.Upper { if ul != blas.Lower && ul != blas.Upper {
@@ -1114,7 +1114,7 @@ func (Implementation) Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int,
// Dtbsv solves one of the systems of equations // Dtbsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or tA == blas.ConjTrans // A * x = b if tA == blas.Trans or tA == blas.ConjTrans
// where A is an n×n triangular band matrix with k+1 diagonals, // where A is an n×n triangular band matrix with k+1 diagonals,
// and x and b are vectors. // and x and b are vectors.
// //
@@ -1505,7 +1505,7 @@ func (Implementation) Dsbmv(ul blas.Uplo, n, k int, alpha float64, a []float64,
} }
// Dsyr performs the symmetric rank-one update // Dsyr performs the symmetric rank-one update
// A += alpha * x * x^T // A += alpha * x * x
// where A is an n×n symmetric matrix, and x is a vector. // where A is an n×n symmetric matrix, and x is a vector.
func (Implementation) Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) { func (Implementation) Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) {
if ul != blas.Lower && ul != blas.Upper { if ul != blas.Lower && ul != blas.Upper {
@@ -1603,7 +1603,7 @@ func (Implementation) Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX
} }
// Dsyr2 performs the symmetric rank-two update // Dsyr2 performs the symmetric rank-two update
// A += alpha * x * y^T + alpha * y * x^T // A += alpha * x * y + alpha * y * x
// where A is an n×n symmetric matrix, x and y are vectors, and alpha is a scalar. // where A is an n×n symmetric matrix, x and y are vectors, and alpha is a scalar.
func (Implementation) Dsyr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { func (Implementation) Dsyr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) {
if ul != blas.Lower && ul != blas.Upper { if ul != blas.Lower && ul != blas.Upper {
@@ -1711,7 +1711,7 @@ func (Implementation) Dsyr2(ul blas.Uplo, n int, alpha float64, x []float64, inc
// Dtpsv solves one of the systems of equations // Dtpsv solves one of the systems of equations
// A * x = b if tA == blas.NoTrans // A * x = b if tA == blas.NoTrans
// A^T * x = b if tA == blas.Trans or blas.ConjTrans // A * x = b if tA == blas.Trans or blas.ConjTrans
// where A is an n×n triangular matrix in packed format, and x and b are vectors. // where A is an n×n triangular matrix in packed format, and x and b are vectors.
// //
// At entry to the function, x contains the values of b, and the result is // At entry to the function, x contains the values of b, and the result is
@@ -2061,7 +2061,7 @@ func (Implementation) Dspmv(ul blas.Uplo, n int, alpha float64, ap []float64, x
} }
// Dspr performs the symmetric rank-one operation // Dspr performs the symmetric rank-one operation
// A += alpha * x * x^T // A += alpha * x * x
// where A is an n×n symmetric matrix in packed format, x is a vector, and // where A is an n×n symmetric matrix in packed format, x is a vector, and
// alpha is a scalar. // alpha is a scalar.
func (Implementation) Dspr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, ap []float64) { func (Implementation) Dspr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, ap []float64) {
@@ -2153,7 +2153,7 @@ func (Implementation) Dspr(ul blas.Uplo, n int, alpha float64, x []float64, incX
} }
// Dspr2 performs the symmetric rank-2 update // Dspr2 performs the symmetric rank-2 update
// A += alpha * x * y^T + alpha * y * x^T // A += alpha * x * y + alpha * y * x
// where A is an n×n symmetric matrix in packed format, x and y are vectors, // where A is an n×n symmetric matrix in packed format, x and y are vectors,
// and alpha is a scalar. // and alpha is a scalar.
func (Implementation) Dspr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, ap []float64) { func (Implementation) Dspr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, ap []float64) {

View File

@@ -16,7 +16,7 @@ var _ blas.Complex128Level3 = Implementation{}
// Zgemm performs one of the matrix-matrix operations // Zgemm performs one of the matrix-matrix operations
// C = alpha * op(A) * op(B) + beta * C // C = alpha * op(A) * op(B) + beta * C
// where op(X) is one of // where op(X) is one of
// op(X) = X or op(X) = X^T or op(X) = X^H, // op(X) = X or op(X) = X or op(X) = X,
// alpha and beta are scalars, and A, B and C are matrices, with op(A) an m×k matrix, // alpha and beta are scalars, and A, B and C are matrices, with op(A) an m×k matrix,
// op(B) a k×n matrix and C an m×n matrix. // op(B) a k×n matrix and C an m×n matrix.
func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) { func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) {
@@ -118,7 +118,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
switch { switch {
case beta == 0: case beta == 0:
@@ -138,7 +138,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
switch { switch {
case beta == 0: case beta == 0:
@@ -161,7 +161,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
case blas.Trans: case blas.Trans:
switch tB { switch tB {
case blas.NoTrans: case blas.NoTrans:
// Form C = alpha * A^T * B + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -176,7 +176,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A^T * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -191,7 +191,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A^T * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -209,7 +209,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
case blas.ConjTrans: case blas.ConjTrans:
switch tB { switch tB {
case blas.NoTrans: case blas.NoTrans:
// Form C = alpha * A^H * B + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -224,7 +224,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A^H * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -239,7 +239,7 @@ func (Implementation) Zgemm(tA, tB blas.Transpose, m, n, k int, alpha complex128
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A^H * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex128 var tmp complex128
@@ -405,8 +405,8 @@ func (Implementation) Zhemm(side blas.Side, uplo blas.Uplo, m, n int, alpha comp
} }
// Zherk performs one of the hermitian rank-k operations // Zherk performs one of the hermitian rank-k operations
// C = alpha*A*A^H + beta*C if trans == blas.NoTrans // C = alpha*A*A + beta*C if trans == blas.NoTrans
// C = alpha*A^H*A + beta*C if trans == blas.ConjTrans // C = alpha*A*A + beta*C if trans == blas.ConjTrans
// where alpha and beta are real scalars, C is an n×n hermitian matrix and A is // where alpha and beta are real scalars, C is an n×n hermitian matrix and A is
// an n×k matrix in the first case and a k×n matrix in the second case. // an n×k matrix in the first case and a k×n matrix in the second case.
// //
@@ -494,7 +494,7 @@ func (Implementation) Zherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
calpha := complex(alpha, 0) calpha := complex(alpha, 0)
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*A^H + beta*C. // Form C = alpha*A*A + beta*C.
cbeta := complex(beta, 0) cbeta := complex(beta, 0)
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
@@ -553,7 +553,7 @@ func (Implementation) Zherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
} }
} else { } else {
// Form C = alpha*A^H*A + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -603,8 +603,8 @@ func (Implementation) Zherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
// Zher2k performs one of the hermitian rank-2k operations // Zher2k performs one of the hermitian rank-2k operations
// C = alpha*A*B^H + conj(alpha)*B*A^H + beta*C if trans == blas.NoTrans // C = alpha*A*B + conj(alpha)*B*A + beta*C if trans == blas.NoTrans
// C = alpha*A^H*B + conj(alpha)*B^H*A + beta*C if trans == blas.ConjTrans // C = alpha*A*B + conj(alpha)*B*A + beta*C if trans == blas.ConjTrans
// where alpha and beta are scalars with beta real, C is an n×n hermitian matrix // where alpha and beta are scalars with beta real, C is an n×n hermitian matrix
// and A and B are n×k matrices in the first case and k×n matrices in the second case. // and A and B are n×k matrices in the first case and k×n matrices in the second case.
// //
@@ -698,7 +698,7 @@ func (Implementation) Zher2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
conjalpha := cmplx.Conj(alpha) conjalpha := cmplx.Conj(alpha)
cbeta := complex(beta, 0) cbeta := complex(beta, 0)
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*B^H + conj(alpha)*B*A^H + beta*C. // Form C = alpha*A*B + conj(alpha)*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i+1 : i*ldc+n] ci := c[i*ldc+i+1 : i*ldc+n]
@@ -741,7 +741,7 @@ func (Implementation) Zher2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
} }
} else { } else {
// Form C = alpha*A^H*B + conj(alpha)*B^H*A + beta*C. // Form C = alpha*A*B + conj(alpha)*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -943,8 +943,8 @@ func (Implementation) Zsymm(side blas.Side, uplo blas.Uplo, m, n int, alpha comp
} }
// Zsyrk performs one of the symmetric rank-k operations // Zsyrk performs one of the symmetric rank-k operations
// C = alpha*A*A^T + beta*C if trans == blas.NoTrans // C = alpha*A*A + beta*C if trans == blas.NoTrans
// C = alpha*A^T*A + beta*C if trans == blas.Trans // C = alpha*A*A + beta*C if trans == blas.Trans
// where alpha and beta are scalars, C is an n×n symmetric matrix and A is // where alpha and beta are scalars, C is an n×n symmetric matrix and A is
// an n×k matrix in the first case and a k×n matrix in the second case. // an n×k matrix in the first case and a k×n matrix in the second case.
func (Implementation) Zsyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int) { func (Implementation) Zsyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int) {
@@ -1022,7 +1022,7 @@ func (Implementation) Zsyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*A^T + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1042,7 +1042,7 @@ func (Implementation) Zsyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
} }
} else { } else {
// Form C = alpha*A^T*A + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1088,8 +1088,8 @@ func (Implementation) Zsyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
// Zsyr2k performs one of the symmetric rank-2k operations // Zsyr2k performs one of the symmetric rank-2k operations
// C = alpha*A*B^T + alpha*B*A^T + beta*C if trans == blas.NoTrans // C = alpha*A*B + alpha*B*A + beta*C if trans == blas.NoTrans
// C = alpha*A^T*B + alpha*B^T*A + beta*C if trans == blas.Trans // C = alpha*A*B + alpha*B*A + beta*C if trans == blas.Trans
// where alpha and beta are scalars, C is an n×n symmetric matrix and A and B // where alpha and beta are scalars, C is an n×n symmetric matrix and A and B
// are n×k matrices in the first case and k×n matrices in the second case. // are n×k matrices in the first case and k×n matrices in the second case.
func (Implementation) Zsyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) { func (Implementation) Zsyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) {
@@ -1172,7 +1172,7 @@ func (Implementation) Zsyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*B^T + alpha*B*A^T + beta*C. // Form C = alpha*A*B + alpha*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1207,7 +1207,7 @@ func (Implementation) Zsyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
} }
} else { } else {
// Form C = alpha*A^T*B + alpha*B^T*A + beta*C. // Form C = alpha*A*B + alpha*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1266,8 +1266,8 @@ func (Implementation) Zsyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
// where alpha is a scalar, B is an m×n matrix, A is a unit, or non-unit, // where alpha is a scalar, B is an m×n matrix, A is a unit, or non-unit,
// upper or lower triangular matrix and op(A) is one of // upper or lower triangular matrix and op(A) is one of
// op(A) = A if trans == blas.NoTrans, // op(A) = A if trans == blas.NoTrans,
// op(A) = A^T if trans == blas.Trans, // op(A) = A if trans == blas.Trans,
// op(A) = A^H if trans == blas.ConjTrans. // op(A) = A if trans == blas.ConjTrans.
func (Implementation) Ztrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) { func (Implementation) Ztrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) {
na := m na := m
if side == blas.Right { if side == blas.Right {
@@ -1356,7 +1356,7 @@ func (Implementation) Ztrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
} }
} }
} else { } else {
// Form B = alpha*A^T*B or B = alpha*A^H*B. // Form B = alpha*A*B or B = alpha*A*B.
if uplo == blas.Upper { if uplo == blas.Upper {
for k := m - 1; k >= 0; k-- { for k := m - 1; k >= 0; k-- {
bk := b[k*ldb : k*ldb+n] bk := b[k*ldb : k*ldb+n]
@@ -1445,7 +1445,7 @@ func (Implementation) Ztrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
} }
} }
} else { } else {
// Form B = alpha*B*A^T or B = alpha*B*A^H. // Form B = alpha*B*A or B = alpha*B*A.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]
@@ -1494,8 +1494,8 @@ func (Implementation) Ztrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
// where alpha is a scalar, X and B are m×n matrices, A is a unit or // where alpha is a scalar, X and B are m×n matrices, A is a unit or
// non-unit, upper or lower triangular matrix and op(A) is one of // non-unit, upper or lower triangular matrix and op(A) is one of
// op(A) = A if transA == blas.NoTrans, // op(A) = A if transA == blas.NoTrans,
// op(A) = A^T if transA == blas.Trans, // op(A) = A if transA == blas.Trans,
// op(A) = A^H if transA == blas.ConjTrans. // op(A) = A if transA == blas.ConjTrans.
// On return the matrix X is overwritten on B. // On return the matrix X is overwritten on B.
func (Implementation) Ztrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpose, diag blas.Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) { func (Implementation) Ztrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpose, diag blas.Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) {
na := m na := m
@@ -1581,7 +1581,7 @@ func (Implementation) Ztrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpos
} }
} }
} else { } else {
// Form B = alpha*inv(A^T)*B or B = alpha*inv(A^H)*B. // Form B = alpha*inv(A)*B or B = alpha*inv(A)*B.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]
@@ -1670,7 +1670,7 @@ func (Implementation) Ztrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpos
} }
} }
} else { } else {
// Form B = alpha*B*inv(A^T) or B = alpha*B*inv(A^H). // Form B = alpha*B*inv(A) or B = alpha*B*inv(A).
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]

View File

@@ -18,7 +18,7 @@ var _ blas.Complex64Level3 = Implementation{}
// Cgemm performs one of the matrix-matrix operations // Cgemm performs one of the matrix-matrix operations
// C = alpha * op(A) * op(B) + beta * C // C = alpha * op(A) * op(B) + beta * C
// where op(X) is one of // where op(X) is one of
// op(X) = X or op(X) = X^T or op(X) = X^H, // op(X) = X or op(X) = X or op(X) = X,
// alpha and beta are scalars, and A, B and C are matrices, with op(A) an m×k matrix, // alpha and beta are scalars, and A, B and C are matrices, with op(A) an m×k matrix,
// op(B) a k×n matrix and C an m×n matrix. // op(B) a k×n matrix and C an m×n matrix.
// //
@@ -122,7 +122,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
switch { switch {
case beta == 0: case beta == 0:
@@ -142,7 +142,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
switch { switch {
case beta == 0: case beta == 0:
@@ -165,7 +165,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
case blas.Trans: case blas.Trans:
switch tB { switch tB {
case blas.NoTrans: case blas.NoTrans:
// Form C = alpha * A^T * B + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -180,7 +180,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A^T * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -195,7 +195,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A^T * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -213,7 +213,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
case blas.ConjTrans: case blas.ConjTrans:
switch tB { switch tB {
case blas.NoTrans: case blas.NoTrans:
// Form C = alpha * A^H * B + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -228,7 +228,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.Trans: case blas.Trans:
// Form C = alpha * A^H * B^T + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -243,7 +243,7 @@ func (Implementation) Cgemm(tA, tB blas.Transpose, m, n, k int, alpha complex64,
} }
} }
case blas.ConjTrans: case blas.ConjTrans:
// Form C = alpha * A^H * B^H + beta * C. // Form C = alpha * A * B + beta * C.
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
var tmp complex64 var tmp complex64
@@ -411,8 +411,8 @@ func (Implementation) Chemm(side blas.Side, uplo blas.Uplo, m, n int, alpha comp
} }
// Cherk performs one of the hermitian rank-k operations // Cherk performs one of the hermitian rank-k operations
// C = alpha*A*A^H + beta*C if trans == blas.NoTrans // C = alpha*A*A + beta*C if trans == blas.NoTrans
// C = alpha*A^H*A + beta*C if trans == blas.ConjTrans // C = alpha*A*A + beta*C if trans == blas.ConjTrans
// where alpha and beta are real scalars, C is an n×n hermitian matrix and A is // where alpha and beta are real scalars, C is an n×n hermitian matrix and A is
// an n×k matrix in the first case and a k×n matrix in the second case. // an n×k matrix in the first case and a k×n matrix in the second case.
// //
@@ -502,7 +502,7 @@ func (Implementation) Cherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
calpha := complex(alpha, 0) calpha := complex(alpha, 0)
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*A^H + beta*C. // Form C = alpha*A*A + beta*C.
cbeta := complex(beta, 0) cbeta := complex(beta, 0)
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
@@ -561,7 +561,7 @@ func (Implementation) Cherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
} }
} else { } else {
// Form C = alpha*A^H*A + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -611,8 +611,8 @@ func (Implementation) Cherk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
// Cher2k performs one of the hermitian rank-2k operations // Cher2k performs one of the hermitian rank-2k operations
// C = alpha*A*B^H + conj(alpha)*B*A^H + beta*C if trans == blas.NoTrans // C = alpha*A*B + conj(alpha)*B*A + beta*C if trans == blas.NoTrans
// C = alpha*A^H*B + conj(alpha)*B^H*A + beta*C if trans == blas.ConjTrans // C = alpha*A*B + conj(alpha)*B*A + beta*C if trans == blas.ConjTrans
// where alpha and beta are scalars with beta real, C is an n×n hermitian matrix // where alpha and beta are scalars with beta real, C is an n×n hermitian matrix
// and A and B are n×k matrices in the first case and k×n matrices in the second case. // and A and B are n×k matrices in the first case and k×n matrices in the second case.
// //
@@ -708,7 +708,7 @@ func (Implementation) Cher2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
conjalpha := cmplx.Conj(alpha) conjalpha := cmplx.Conj(alpha)
cbeta := complex(beta, 0) cbeta := complex(beta, 0)
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*B^H + conj(alpha)*B*A^H + beta*C. // Form C = alpha*A*B + conj(alpha)*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i+1 : i*ldc+n] ci := c[i*ldc+i+1 : i*ldc+n]
@@ -751,7 +751,7 @@ func (Implementation) Cher2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
} }
} else { } else {
// Form C = alpha*A^H*B + conj(alpha)*B^H*A + beta*C. // Form C = alpha*A*B + conj(alpha)*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -955,8 +955,8 @@ func (Implementation) Csymm(side blas.Side, uplo blas.Uplo, m, n int, alpha comp
} }
// Csyrk performs one of the symmetric rank-k operations // Csyrk performs one of the symmetric rank-k operations
// C = alpha*A*A^T + beta*C if trans == blas.NoTrans // C = alpha*A*A + beta*C if trans == blas.NoTrans
// C = alpha*A^T*A + beta*C if trans == blas.Trans // C = alpha*A*A + beta*C if trans == blas.Trans
// where alpha and beta are scalars, C is an n×n symmetric matrix and A is // where alpha and beta are scalars, C is an n×n symmetric matrix and A is
// an n×k matrix in the first case and a k×n matrix in the second case. // an n×k matrix in the first case and a k×n matrix in the second case.
// //
@@ -1036,7 +1036,7 @@ func (Implementation) Csyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*A^T + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1056,7 +1056,7 @@ func (Implementation) Csyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
} }
} else { } else {
// Form C = alpha*A^T*A + beta*C. // Form C = alpha*A*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1102,8 +1102,8 @@ func (Implementation) Csyrk(uplo blas.Uplo, trans blas.Transpose, n, k int, alph
} }
// Csyr2k performs one of the symmetric rank-2k operations // Csyr2k performs one of the symmetric rank-2k operations
// C = alpha*A*B^T + alpha*B*A^T + beta*C if trans == blas.NoTrans // C = alpha*A*B + alpha*B*A + beta*C if trans == blas.NoTrans
// C = alpha*A^T*B + alpha*B^T*A + beta*C if trans == blas.Trans // C = alpha*A*B + alpha*B*A + beta*C if trans == blas.Trans
// where alpha and beta are scalars, C is an n×n symmetric matrix and A and B // where alpha and beta are scalars, C is an n×n symmetric matrix and A and B
// are n×k matrices in the first case and k×n matrices in the second case. // are n×k matrices in the first case and k×n matrices in the second case.
// //
@@ -1188,7 +1188,7 @@ func (Implementation) Csyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
if trans == blas.NoTrans { if trans == blas.NoTrans {
// Form C = alpha*A*B^T + alpha*B*A^T + beta*C. // Form C = alpha*A*B + alpha*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1223,7 +1223,7 @@ func (Implementation) Csyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
} }
} }
} else { } else {
// Form C = alpha*A^T*B + alpha*B^T*A + beta*C. // Form C = alpha*A*B + alpha*B*A + beta*C.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
ci := c[i*ldc+i : i*ldc+n] ci := c[i*ldc+i : i*ldc+n]
@@ -1282,8 +1282,8 @@ func (Implementation) Csyr2k(uplo blas.Uplo, trans blas.Transpose, n, k int, alp
// where alpha is a scalar, B is an m×n matrix, A is a unit, or non-unit, // where alpha is a scalar, B is an m×n matrix, A is a unit, or non-unit,
// upper or lower triangular matrix and op(A) is one of // upper or lower triangular matrix and op(A) is one of
// op(A) = A if trans == blas.NoTrans, // op(A) = A if trans == blas.NoTrans,
// op(A) = A^T if trans == blas.Trans, // op(A) = A if trans == blas.Trans,
// op(A) = A^H if trans == blas.ConjTrans. // op(A) = A if trans == blas.ConjTrans.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.
func (Implementation) Ctrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int) { func (Implementation) Ctrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int) {
@@ -1374,7 +1374,7 @@ func (Implementation) Ctrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
} }
} }
} else { } else {
// Form B = alpha*A^T*B or B = alpha*A^H*B. // Form B = alpha*A*B or B = alpha*A*B.
if uplo == blas.Upper { if uplo == blas.Upper {
for k := m - 1; k >= 0; k-- { for k := m - 1; k >= 0; k-- {
bk := b[k*ldb : k*ldb+n] bk := b[k*ldb : k*ldb+n]
@@ -1463,7 +1463,7 @@ func (Implementation) Ctrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
} }
} }
} else { } else {
// Form B = alpha*B*A^T or B = alpha*B*A^H. // Form B = alpha*B*A or B = alpha*B*A.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]
@@ -1512,8 +1512,8 @@ func (Implementation) Ctrmm(side blas.Side, uplo blas.Uplo, trans blas.Transpose
// where alpha is a scalar, X and B are m×n matrices, A is a unit or // where alpha is a scalar, X and B are m×n matrices, A is a unit or
// non-unit, upper or lower triangular matrix and op(A) is one of // non-unit, upper or lower triangular matrix and op(A) is one of
// op(A) = A if transA == blas.NoTrans, // op(A) = A if transA == blas.NoTrans,
// op(A) = A^T if transA == blas.Trans, // op(A) = A if transA == blas.Trans,
// op(A) = A^H if transA == blas.ConjTrans. // op(A) = A if transA == blas.ConjTrans.
// On return the matrix X is overwritten on B. // On return the matrix X is overwritten on B.
// //
// Complex64 implementations are autogenerated and not directly tested. // Complex64 implementations are autogenerated and not directly tested.
@@ -1601,7 +1601,7 @@ func (Implementation) Ctrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpos
} }
} }
} else { } else {
// Form B = alpha*inv(A^T)*B or B = alpha*inv(A^H)*B. // Form B = alpha*inv(A)*B or B = alpha*inv(A)*B.
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]
@@ -1690,7 +1690,7 @@ func (Implementation) Ctrsm(side blas.Side, uplo blas.Uplo, transA blas.Transpos
} }
} }
} else { } else {
// Form B = alpha*B*inv(A^T) or B = alpha*B*inv(A^H). // Form B = alpha*B*inv(A) or B = alpha*B*inv(A).
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
bi := b[i*ldb : i*ldb+n] bi := b[i*ldb : i*ldb+n]

View File

@@ -15,9 +15,9 @@ var _ blas.Float32Level3 = Implementation{}
// Strsm solves one of the matrix equations // Strsm solves one of the matrix equations
// A * X = alpha * B if tA == blas.NoTrans and side == blas.Left // A * X = alpha * B if tA == blas.NoTrans and side == blas.Left
// A^T * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left // A * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left
// X * A = alpha * B if tA == blas.NoTrans and side == blas.Right // X * A = alpha * B if tA == blas.NoTrans and side == blas.Right
// X * A^T = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right // X * A = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right
// where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and alpha is a // where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and alpha is a
// scalar. // scalar.
// //
@@ -362,8 +362,8 @@ func (Implementation) Ssymm(s blas.Side, ul blas.Uplo, m, n int, alpha float32,
} }
// Ssyrk performs one of the symmetric rank-k operations // Ssyrk performs one of the symmetric rank-k operations
// C = alpha * A * A^T + beta * C if tA == blas.NoTrans // C = alpha * A * A + beta * C if tA == blas.NoTrans
// C = alpha * A^T * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans // C = alpha * A * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans
// where A is an n×k or k×n matrix, C is an n×n symmetric matrix, and alpha and // where A is an n×k or k×n matrix, C is an n×n symmetric matrix, and alpha and
// beta are scalars. // beta are scalars.
// //
@@ -514,8 +514,8 @@ func (Implementation) Ssyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha flo
} }
// Ssyr2k performs one of the symmetric rank 2k operations // Ssyr2k performs one of the symmetric rank 2k operations
// C = alpha * A * B^T + alpha * B * A^T + beta * C if tA == blas.NoTrans // C = alpha * A * B + alpha * B * A + beta * C if tA == blas.NoTrans
// C = alpha * A^T * B + alpha * B^T * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans // C = alpha * A * B + alpha * B * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans
// where A and B are n×k or k×n matrices, C is an n×n symmetric matrix, and // where A and B are n×k or k×n matrices, C is an n×n symmetric matrix, and
// alpha and beta are scalars. // alpha and beta are scalars.
// //
@@ -679,9 +679,9 @@ func (Implementation) Ssyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha fl
// Strmm performs one of the matrix-matrix operations // Strmm performs one of the matrix-matrix operations
// B = alpha * A * B if tA == blas.NoTrans and side == blas.Left // B = alpha * A * B if tA == blas.NoTrans and side == blas.Left
// B = alpha * A^T * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left // B = alpha * A * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left
// B = alpha * B * A if tA == blas.NoTrans and side == blas.Right // B = alpha * B * A if tA == blas.NoTrans and side == blas.Right
// B = alpha * B * A^T if tA == blas.Trans or blas.ConjTrans, and side == blas.Right // B = alpha * B * A if tA == blas.Trans or blas.ConjTrans, and side == blas.Right
// where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is a scalar. // where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is a scalar.
// //
// Float32 implementations are autogenerated and not directly tested. // Float32 implementations are autogenerated and not directly tested.

View File

@@ -13,9 +13,9 @@ var _ blas.Float64Level3 = Implementation{}
// Dtrsm solves one of the matrix equations // Dtrsm solves one of the matrix equations
// A * X = alpha * B if tA == blas.NoTrans and side == blas.Left // A * X = alpha * B if tA == blas.NoTrans and side == blas.Left
// A^T * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left // A * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left
// X * A = alpha * B if tA == blas.NoTrans and side == blas.Right // X * A = alpha * B if tA == blas.NoTrans and side == blas.Right
// X * A^T = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right // X * A = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right
// where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and alpha is a // where A is an n×n or m×m triangular matrix, X and B are m×n matrices, and alpha is a
// scalar. // scalar.
// //
@@ -356,8 +356,8 @@ func (Implementation) Dsymm(s blas.Side, ul blas.Uplo, m, n int, alpha float64,
} }
// Dsyrk performs one of the symmetric rank-k operations // Dsyrk performs one of the symmetric rank-k operations
// C = alpha * A * A^T + beta * C if tA == blas.NoTrans // C = alpha * A * A + beta * C if tA == blas.NoTrans
// C = alpha * A^T * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans // C = alpha * A * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans
// where A is an n×k or k×n matrix, C is an n×n symmetric matrix, and alpha and // where A is an n×k or k×n matrix, C is an n×n symmetric matrix, and alpha and
// beta are scalars. // beta are scalars.
func (Implementation) Dsyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int) { func (Implementation) Dsyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int) {
@@ -506,8 +506,8 @@ func (Implementation) Dsyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha flo
} }
// Dsyr2k performs one of the symmetric rank 2k operations // Dsyr2k performs one of the symmetric rank 2k operations
// C = alpha * A * B^T + alpha * B * A^T + beta * C if tA == blas.NoTrans // C = alpha * A * B + alpha * B * A + beta * C if tA == blas.NoTrans
// C = alpha * A^T * B + alpha * B^T * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans // C = alpha * A * B + alpha * B * A + beta * C if tA == blas.Trans or tA == blas.ConjTrans
// where A and B are n×k or k×n matrices, C is an n×n symmetric matrix, and // where A and B are n×k or k×n matrices, C is an n×n symmetric matrix, and
// alpha and beta are scalars. // alpha and beta are scalars.
func (Implementation) Dsyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { func (Implementation) Dsyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) {
@@ -669,9 +669,9 @@ func (Implementation) Dsyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha fl
// Dtrmm performs one of the matrix-matrix operations // Dtrmm performs one of the matrix-matrix operations
// B = alpha * A * B if tA == blas.NoTrans and side == blas.Left // B = alpha * A * B if tA == blas.NoTrans and side == blas.Left
// B = alpha * A^T * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left // B = alpha * A * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left
// B = alpha * B * A if tA == blas.NoTrans and side == blas.Right // B = alpha * B * A if tA == blas.NoTrans and side == blas.Right
// B = alpha * B * A^T if tA == blas.Trans or blas.ConjTrans, and side == blas.Right // B = alpha * B * A if tA == blas.Trans or blas.ConjTrans, and side == blas.Right
// where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is a scalar. // where A is an n×n or m×m triangular matrix, B is an m×n matrix, and alpha is a scalar.
func (Implementation) Dtrmm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) { func (Implementation) Dtrmm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) {
if s != blas.Left && s != blas.Right { if s != blas.Left && s != blas.Right {

View File

@@ -16,9 +16,9 @@ import (
// Sgemm performs one of the matrix-matrix operations // Sgemm performs one of the matrix-matrix operations
// C = alpha * A * B + beta * C // C = alpha * A * B + beta * C
// C = alpha * A^T * B + beta * C // C = alpha * A * B + beta * C
// C = alpha * A * B^T + beta * C // C = alpha * A * B + beta * C
// C = alpha * A^T * B^T + beta * C // C = alpha * A * B + beta * C
// where A is an m×k or k×m dense matrix, B is an n×k or k×n dense matrix, C is // where A is an m×k or k×m dense matrix, B is an n×k or k×n dense matrix, C is
// an m×n matrix, and alpha and beta are scalars. tA and tB specify whether A or // an m×n matrix, and alpha and beta are scalars. tA and tB specify whether A or
// B are transposed. // B are transposed.
@@ -138,9 +138,9 @@ func sgemmParallel(aTrans, bTrans bool, m, n, k int, a []float32, lda int, b []f
// In all cases, there is one dimension for each matrix along which // In all cases, there is one dimension for each matrix along which
// C must be updated sequentially. // C must be updated sequentially.
// Cij = \sum_k Aik Bki, (A * B) // Cij = \sum_k Aik Bki, (A * B)
// Cij = \sum_k Aki Bkj, (A^T * B) // Cij = \sum_k Aki Bkj, (A * B)
// Cij = \sum_k Aik Bjk, (A * B^T) // Cij = \sum_k Aik Bjk, (A * B)
// Cij = \sum_k Aki Bjk, (A^T * B^T) // Cij = \sum_k Aki Bjk, (A * B)
// //
// This code computes one {i, j} block sequentially along the k dimension, // This code computes one {i, j} block sequentially along the k dimension,
// and computes all of the {i, j} blocks concurrently. This // and computes all of the {i, j} blocks concurrently. This

View File

@@ -135,8 +135,6 @@ type printer struct {
prefix string prefix string
indent string indent string
depth int depth int
err error
} }
type edge struct { type edge struct {
@@ -291,7 +289,7 @@ func (p *simpleGraphPrinter) print(g graph.Graph, name string, needsIndent, isSu
return nil return nil
} }
func (p *printer) printFrontMatter(name string, needsIndent, isSubgraph, isDirected, isStrict bool) error { func (p *printer) printFrontMatter(name string, needsIndent, isSubgraph, isDirected, isStrict bool) {
p.buf.WriteString(p.prefix) p.buf.WriteString(p.prefix)
if needsIndent { if needsIndent {
for i := 0; i < p.depth; i++ { for i := 0; i < p.depth; i++ {
@@ -316,7 +314,6 @@ func (p *printer) printFrontMatter(name string, needsIndent, isSubgraph, isDirec
} }
p.openBlock(" {") p.openBlock(" {")
return nil
} }
func (p *printer) writeNode(n graph.Node) { func (p *printer) writeNode(n graph.Node) {

View File

@@ -4,7 +4,11 @@
package iterator package iterator
import "gonum.org/v1/gonum/graph" import (
"reflect"
"gonum.org/v1/gonum/graph"
)
// OrderedNodes implements the graph.Nodes and graph.NodeSlicer interfaces. // OrderedNodes implements the graph.Nodes and graph.NodeSlicer interfaces.
// The iteration order of OrderedNodes is the order of nodes passed to // The iteration order of OrderedNodes is the order of nodes passed to
@@ -123,3 +127,54 @@ func (n *ImplicitNodes) NodeSlice() []graph.Node {
} }
return nodes return nodes
} }
// Nodes implements the graph.Nodes interfaces.
// The iteration order of Nodes is randomized.
type Nodes struct {
nodes reflect.Value
iter *reflect.MapIter
pos int
curr graph.Node
}
// NewNodes returns a Nodes initialized with the provided nodes, a
// map of node IDs to graph.Nodes. No check is made that the keys
// match the graph.Node IDs, and the map keys are not used.
//
// Behavior of the Nodes is unspecified if nodes is mutated after
// the call the NewNodes.
func NewNodes(nodes map[int64]graph.Node) *Nodes {
rv := reflect.ValueOf(nodes)
return &Nodes{nodes: rv, iter: rv.MapRange()}
}
// Len returns the remaining number of nodes to be iterated over.
func (n *Nodes) Len() int {
return n.nodes.Len() - n.pos
}
// Next returns whether the next call of Node will return a valid node.
func (n *Nodes) Next() bool {
if n.pos >= n.nodes.Len() {
return false
}
ok := n.iter.Next()
if ok {
n.pos++
n.curr = n.iter.Value().Interface().(graph.Node)
}
return ok
}
// Node returns the current node of the iterator. Next must have been
// called prior to a call to Node.
func (n *Nodes) Node() graph.Node {
return n.curr
}
// Reset returns the iterator to its initial state.
func (n *Nodes) Reset() {
n.curr = nil
n.pos = 0
n.iter = n.nodes.MapRange()
}

View File

@@ -49,8 +49,6 @@ func (g *DirectedGraph) AddNode(n graph.Node) {
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID())) panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
} }
g.nodes[n.ID()] = n g.nodes[n.ID()] = n
g.from[n.ID()] = make(map[int64]graph.Edge)
g.to[n.ID()] = make(map[int64]graph.Edge)
g.nodeIDs.Use(n.ID()) g.nodeIDs.Use(n.ID())
} }
@@ -212,13 +210,21 @@ func (g *DirectedGraph) SetEdge(e graph.Edge) {
g.nodes[tid] = to g.nodes[tid] = to
} }
g.from[fid][tid] = e if fm, ok := g.from[fid]; ok {
g.to[tid][fid] = e fm[tid] = e
} else {
g.from[fid] = map[int64]graph.Edge{tid: e}
}
if tm, ok := g.to[tid]; ok {
tm[fid] = e
} else {
g.to[tid] = map[int64]graph.Edge{fid: e}
}
} }
// To returns all nodes in g that can reach directly to n. // To returns all nodes in g that can reach directly to n.
func (g *DirectedGraph) To(id int64) graph.Nodes { func (g *DirectedGraph) To(id int64) graph.Nodes {
if _, ok := g.from[id]; !ok { if _, ok := g.to[id]; !ok {
return graph.Empty return graph.Empty
} }

View File

@@ -47,7 +47,6 @@ func (g *UndirectedGraph) AddNode(n graph.Node) {
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID())) panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
} }
g.nodes[n.ID()] = n g.nodes[n.ID()] = n
g.edges[n.ID()] = make(map[int64]graph.Edge)
g.nodeIDs.Use(n.ID()) g.nodeIDs.Use(n.ID())
} }
@@ -211,6 +210,14 @@ func (g *UndirectedGraph) SetEdge(e graph.Edge) {
g.nodes[tid] = to g.nodes[tid] = to
} }
g.edges[fid][tid] = e if fm, ok := g.edges[fid]; ok {
g.edges[tid][fid] = e fm[tid] = e
} else {
g.edges[fid] = map[int64]graph.Edge{tid: e}
}
if tm, ok := g.edges[tid]; ok {
tm[fid] = e
} else {
g.edges[tid] = map[int64]graph.Edge{fid: e}
}
} }

View File

@@ -57,8 +57,6 @@ func (g *WeightedDirectedGraph) AddNode(n graph.Node) {
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID())) panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
} }
g.nodes[n.ID()] = n g.nodes[n.ID()] = n
g.from[n.ID()] = make(map[int64]graph.WeightedEdge)
g.to[n.ID()] = make(map[int64]graph.WeightedEdge)
g.nodeIDs.Use(n.ID()) g.nodeIDs.Use(n.ID())
} }
@@ -143,7 +141,7 @@ func (g *WeightedDirectedGraph) Node(id int64) graph.Node {
// Nodes returns all the nodes in the graph. // Nodes returns all the nodes in the graph.
func (g *WeightedDirectedGraph) Nodes() graph.Nodes { func (g *WeightedDirectedGraph) Nodes() graph.Nodes {
if len(g.from) == 0 { if len(g.nodes) == 0 {
return graph.Empty return graph.Empty
} }
nodes := make([]graph.Node, len(g.nodes)) nodes := make([]graph.Node, len(g.nodes))
@@ -216,13 +214,21 @@ func (g *WeightedDirectedGraph) SetWeightedEdge(e graph.WeightedEdge) {
g.nodes[tid] = to g.nodes[tid] = to
} }
g.from[fid][tid] = e if fm, ok := g.from[fid]; ok {
g.to[tid][fid] = e fm[tid] = e
} else {
g.from[fid] = map[int64]graph.WeightedEdge{tid: e}
}
if tm, ok := g.to[tid]; ok {
tm[fid] = e
} else {
g.to[tid] = map[int64]graph.WeightedEdge{fid: e}
}
} }
// To returns all nodes in g that can reach directly to n. // To returns all nodes in g that can reach directly to n.
func (g *WeightedDirectedGraph) To(id int64) graph.Nodes { func (g *WeightedDirectedGraph) To(id int64) graph.Nodes {
if _, ok := g.from[id]; !ok { if _, ok := g.to[id]; !ok {
return graph.Empty return graph.Empty
} }

View File

@@ -55,7 +55,6 @@ func (g *WeightedUndirectedGraph) AddNode(n graph.Node) {
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID())) panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
} }
g.nodes[n.ID()] = n g.nodes[n.ID()] = n
g.edges[n.ID()] = make(map[int64]graph.WeightedEdge)
g.nodeIDs.Use(n.ID()) g.nodeIDs.Use(n.ID())
} }
@@ -212,8 +211,16 @@ func (g *WeightedUndirectedGraph) SetWeightedEdge(e graph.WeightedEdge) {
g.nodes[tid] = to g.nodes[tid] = to
} }
g.edges[fid][tid] = e if fm, ok := g.edges[fid]; ok {
g.edges[tid][fid] = e fm[tid] = e
} else {
g.edges[fid] = map[int64]graph.WeightedEdge{tid: e}
}
if tm, ok := g.edges[tid]; ok {
tm[fid] = e
} else {
g.edges[tid] = map[int64]graph.WeightedEdge{fid: e}
}
} }
// Weight returns the weight for the edge between x and y if Edge(x, y) returns a non-nil Edge. // Weight returns the weight for the edge between x and y if Edge(x, y) returns a non-nil Edge.

View File

@@ -7,7 +7,7 @@
package f32 package f32
// Ger performs the rank-one operation // Ger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Ger(m, n uintptr, alpha float32, func Ger(m, n uintptr, alpha float32,
x []float32, incX uintptr, x []float32, incX uintptr,

View File

@@ -7,7 +7,7 @@
package f32 package f32
// Ger performs the rank-one operation // Ger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Ger(m, n uintptr, alpha float32, x []float32, incX uintptr, y []float32, incY uintptr, a []float32, lda uintptr) { func Ger(m, n uintptr, alpha float32, x []float32, incX uintptr, y []float32, incY uintptr, a []float32, lda uintptr) {

View File

@@ -7,7 +7,7 @@
package f64 package f64
// Ger performs the rank-one operation // Ger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Ger(m, n uintptr, alpha float64, x []float64, incX uintptr, y []float64, incY uintptr, a []float64, lda uintptr) func Ger(m, n uintptr, alpha float64, x []float64, incX uintptr, y []float64, incY uintptr, a []float64, lda uintptr)
@@ -17,6 +17,6 @@ func Ger(m, n uintptr, alpha float64, x []float64, incX uintptr, y []float64, in
func GemvN(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr) func GemvN(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr)
// GemvT computes // GemvT computes
// y = alpha * A^T * x + beta * y // y = alpha * A * x + beta * y
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars.
func GemvT(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr) func GemvT(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr)

View File

@@ -7,7 +7,7 @@
package f64 package f64
// Ger performs the rank-one operation // Ger performs the rank-one operation
// A += alpha * x * y^T // A += alpha * x * y
// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. // where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar.
func Ger(m, n uintptr, alpha float64, x []float64, incX uintptr, y []float64, incY uintptr, a []float64, lda uintptr) { func Ger(m, n uintptr, alpha float64, x []float64, incX uintptr, y []float64, incY uintptr, a []float64, lda uintptr) {
if incX == 1 && incY == 1 { if incX == 1 && incY == 1 {
@@ -73,7 +73,7 @@ func GemvN(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, i
} }
// GemvT computes // GemvT computes
// y = alpha * A^T * x + beta * y // y = alpha * A * x + beta * y
// where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars. // where A is an m×n dense matrix, x and y are vectors, and alpha and beta are scalars.
func GemvT(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr) { func GemvT(m, n uintptr, alpha float64, a []float64, lda uintptr, x []float64, incX uintptr, beta float64, y []float64, incY uintptr) {
var kx, ky, i uintptr var kx, ky, i uintptr

View File

@@ -4,6 +4,7 @@ go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = [
"dbdsqr.go", "dbdsqr.go",
"dcombssq.go",
"dgebak.go", "dgebak.go",
"dgebal.go", "dgebal.go",
"dgebd2.go", "dgebd2.go",
@@ -40,6 +41,7 @@ go_library(
"dlahr2.go", "dlahr2.go",
"dlaln2.go", "dlaln2.go",
"dlange.go", "dlange.go",
"dlansb.go",
"dlanst.go", "dlanst.go",
"dlansy.go", "dlansy.go",
"dlantr.go", "dlantr.go",
@@ -74,6 +76,7 @@ go_library(
"dlasv2.go", "dlasv2.go",
"dlaswp.go", "dlaswp.go",
"dlasy2.go", "dlasy2.go",
"dlatbs.go",
"dlatrd.go", "dlatrd.go",
"dlatrs.go", "dlatrs.go",
"dlauu2.go", "dlauu2.go",
@@ -95,7 +98,10 @@ go_library(
"dormlq.go", "dormlq.go",
"dormqr.go", "dormqr.go",
"dormr2.go", "dormr2.go",
"dpbcon.go",
"dpbtf2.go", "dpbtf2.go",
"dpbtrf.go",
"dpbtrs.go",
"dpocon.go", "dpocon.go",
"dpotf2.go", "dpotf2.go",
"dpotrf.go", "dpotrf.go",

View File

@@ -15,19 +15,19 @@ import (
// Dbdsqr performs a singular value decomposition of a real n×n bidiagonal matrix. // Dbdsqr performs a singular value decomposition of a real n×n bidiagonal matrix.
// //
// The SVD of the bidiagonal matrix B is // The SVD of the bidiagonal matrix B is
// B = Q * S * P^T // B = Q * S * P
// where S is a diagonal matrix of singular values, Q is an orthogonal matrix of // 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. // 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, // 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 // this routine returns U * Q instead of Q, and if right singular vectors are
// requested P^T * VT is returned instead of P^T. // requested P * VT is returned instead of P.
// //
// Frequently Dbdsqr is used in conjunction with Dgebrd which reduces a general // 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 // matrix A into bidiagonal form. In this case, the SVD of A is
// A = (U * Q) * S * (P^T * VT) // A = (U * Q) * S * (P * VT)
// //
// This routine may also compute Q^T * C. // This routine may also compute Q * C.
// //
// d and e contain the elements of the bidiagonal matrix b. d must have length at // 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 // least n, and e must have length at least n-1. Dbdsqr will panic if there is
@@ -35,13 +35,13 @@ import (
// order. // order.
// //
// VT is a matrix of size n×ncvt whose elements are stored in vt. The elements // 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. // of vt are modified to contain P * 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 // 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. // 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 // 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. // of c are modified to contain Q * C on exit. C is not used if ncc == 0.
// //
// work contains temporary storage and must have length at least 4*(n-1). Dbdsqr // work contains temporary storage and must have length at least 4*(n-1). Dbdsqr
// will panic if there is insufficient working memory. // will panic if there is insufficient working memory.

21
vendor/gonum.org/v1/gonum/lapack/gonum/dcombssq.go generated vendored Normal file
View File

@@ -0,0 +1,21 @@
// Copyright ©2019 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 gonum
// Dcombssq adds two scaled sum-of-squares quantities, V := V1 + V2,
// V_scale^2 * V_ssq := V1_scale^2 * V1_ssq + V2_scale^2 * V2_ssq
// and returns the result V.
//
// Dcombssq is an internal routine. It is exported for testing purposes.
func (Implementation) Dcombssq(scale1, ssq1, scale2, ssq2 float64) (scale, ssq float64) {
if scale1 >= scale2 {
if scale1 != 0 {
return scale1, ssq1 + (scale2/scale1)*(scale2/scale1)*ssq2
}
// If the input is non-negative and we are here, then scale2 must inevitably be 0, too.
return 0, 0
}
return scale2, ssq2 + (scale1/scale2)*(scale1/scale2)*ssq1
}

View File

@@ -10,8 +10,8 @@ import (
) )
// Dgebak updates an n×m matrix V as // Dgebak updates an n×m matrix V as
// V = P D V, if side == lapack.EVRight, // V = P D V if side == lapack.EVRight,
// V = P D^{-1} V, if side == lapack.EVLeft, // V = P D^{-1} V if side == lapack.EVLeft,
// where P and D are n×n permutation and scaling matrices, respectively, // where P and D are n×n permutation and scaling matrices, respectively,
// implicitly represented by job, scale, ilo and ihi as returned by Dgebal. // implicitly represented by job, scale, ilo and ihi as returned by Dgebal.
// //

View File

@@ -15,9 +15,9 @@ import (
// and scaling. Both steps are optional and depend on the value of job. // 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 // 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 // that results from P*A*P takes the upper block triangular form
// [ T1 X Y ] // [ T1 X Y ]
// P^T A P = [ 0 B Z ], // P A P = [ 0 B Z ],
// [ 0 0 T2 ] // [ 0 0 T2 ]
// where T1 and T2 are upper triangular matrices and B contains at least one // 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 // nonzero off-diagonal element in each row and column. The indices ilo and ihi

View File

@@ -8,7 +8,7 @@ import "gonum.org/v1/gonum/blas"
// Dgebd2 reduces an m×n matrix A to upper or lower bidiagonal form by an orthogonal // Dgebd2 reduces an m×n matrix A to upper or lower bidiagonal form by an orthogonal
// transformation. // transformation.
// Q^T * A * P = B // Q * A * P = B
// if m >= n, B is upper diagonal, otherwise B is lower bidiagonal. // if m >= n, B is upper diagonal, otherwise B is lower bidiagonal.
// d is the diagonal, len = min(m,n) // d is the diagonal, len = min(m,n)
// e is the off-diagonal len = min(m,n)-1 // e is the off-diagonal len = min(m,n)-1

View File

@@ -11,7 +11,7 @@ import (
// Dgebrd reduces a general m×n matrix A to upper or lower bidiagonal form B by // Dgebrd reduces a general m×n matrix A to upper or lower bidiagonal form B by
// an orthogonal transformation: // an orthogonal transformation:
// Q^T * A * P = B. // Q * A * P = B.
// The diagonal elements of B are stored in d and the off-diagonal elements are stored // 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 // 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 // of A. If m >= n B is an upper-bidiagonal matrix, and if m < n B is a
@@ -24,8 +24,8 @@ import (
// if m < n, Q = H_0 * H_1 * ... * H_{m-2}, // if m < n, Q = H_0 * H_1 * ... * H_{m-2},
// P = G_0 * G_1 * ... * G_{m-1}, // P = G_0 * G_1 * ... * G_{m-1},
// where // where
// H_i = I - tauQ[i] * v_i * v_i^T, // H_i = I - tauQ[i] * v_i * v_i,
// G_i = I - tauP[i] * u_i * u_i^T. // G_i = I - tauP[i] * u_i * u_i.
// //
// As an example, on exit the entries of A when m = 6, and n = 5 // As an example, on exit the entries of A when m = 6, and n = 5
// [ d e u1 u1 u1] // [ d e u1 u1 u1]

View File

@@ -19,8 +19,8 @@ import (
// is defined by // is defined by
// A v_j = λ_j v_j, // A v_j = λ_j v_j,
// and the left eigenvector u_j corresponding to an eigenvalue λ_j is defined by // and the left eigenvector u_j corresponding to an eigenvalue λ_j is defined by
// u_j^H A = λ_j u_j^H, // u_j A = λ_j u_j,
// where u_j^H is the conjugate transpose of u_j. // where u_j is the conjugate transpose of u_j.
// //
// On return, A will be overwritten and the left and right eigenvectors will be // 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 // stored, respectively, in the columns of the n×n matrices VL and VR in the

View File

@@ -7,13 +7,13 @@ package gonum
import "gonum.org/v1/gonum/blas" import "gonum.org/v1/gonum/blas"
// Dgehd2 reduces a block of a general n×n matrix A to upper Hessenberg form H // 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. // by an orthogonal similarity transformation Q * A * Q = H.
// //
// The matrix Q is represented as a product of (ihi-ilo) elementary // The matrix Q is represented as a product of (ihi-ilo) elementary
// reflectors // reflectors
// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. // Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}.
// Each H_i has the form // Each H_i has the form
// H_i = I - tau[i] * v * v^T // H_i = I - tau[i] * v * v
// where v is a real vector with v[0:i+1] = 0, v[i+1] = 1 and v[ihi+1:n] = 0. // 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]. // v[i+2:ihi+1] is stored on exit in A[i+2:ihi+1,i].
// //

View File

@@ -11,13 +11,13 @@ import (
) )
// Dgehrd reduces a block of a real n×n general matrix A to upper Hessenberg // 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. // form H by an orthogonal similarity transformation Q * A * Q = H.
// //
// The matrix Q is represented as a product of (ihi-ilo) elementary // The matrix Q is represented as a product of (ihi-ilo) elementary
// reflectors // reflectors
// Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}. // Q = H_{ilo} H_{ilo+1} ... H_{ihi-1}.
// Each H_i has the form // Each H_i has the form
// H_i = I - tau[i] * v * v^T // H_i = I - tau[i] * v * v
// where v is a real vector with v[0:i+1] = 0, v[i+1] = 1 and v[ihi+1:n] = 0. // 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]. // v[i+2:ihi+1] is stored on exit in A[i+2:ihi+1,i].
// //
@@ -158,12 +158,12 @@ func (impl Implementation) Dgehrd(n, ilo, ihi int, a []float64, lda int, tau, wo
ib := min(nb, ihi-i) ib := min(nb, ihi-i)
// Reduce columns [i:i+ib] to Hessenberg form, returning the // Reduce columns [i:i+ib] to Hessenberg form, returning the
// matrices V and T of the block reflector H = I - V*T*V^T // matrices V and T of the block reflector H = I - V*T*V
// which performs the reduction, and also the matrix Y = A*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) 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 // 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 // right, computing A := A - Y * V. V[i+ib,i+ib-1] must be set
// to 1. // to 1.
ei := a[(i+ib)*lda+i+ib-1] ei := a[(i+ib)*lda+i+ib-1]
a[(i+ib)*lda+i+ib-1] = 1 a[(i+ib)*lda+i+ib-1] = 1

View File

@@ -20,7 +20,7 @@ import (
// 2. If m < n and trans == blas.NoTrans, Dgels finds the minimum norm solution of // 2. If m < n and trans == blas.NoTrans, Dgels finds the minimum norm solution of
// A * X = B. // A * X = B.
// 3. If m >= n and trans == blas.Trans, Dgels finds the minimum norm solution of // 3. If m >= n and trans == blas.Trans, Dgels finds the minimum norm solution of
// A^T * X = B. // A * X = B.
// 4. If m < n and trans == blas.Trans, Dgels finds X such that || A*X - B||_2 // 4. If m < n and trans == blas.Trans, Dgels finds X such that || A*X - B||_2
// is minimized. // is minimized.
// Note that the least-squares solutions (cases 1 and 3) perform the minimization // Note that the least-squares solutions (cases 1 and 3) perform the minimization

View File

@@ -14,7 +14,7 @@ import "gonum.org/v1/gonum/blas"
// Q is represented as a product of elementary reflectors, // Q is represented as a product of elementary reflectors,
// Q = H_{k-1} * ... * H_1 * H_0 // Q = H_{k-1} * ... * H_1 * H_0
// where k = min(m,n) and each H_i has the form // where k = min(m,n) and each H_i has the form
// H_i = I - tau[i] * v_i * v_i^T // H_i = I - tau[i] * v_i * v_i
// 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 // 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]. // exit in A[0:m-k+i-1, n-k+i].
// //

View File

@@ -15,7 +15,7 @@ import (
// The matrix Q is represented as a product of elementary reflectors // The matrix Q is represented as a product of elementary reflectors
// Q = H_0 H_1 . . . H_{k-1}, where k = min(m,n). // Q = H_0 H_1 . . . H_{k-1}, where k = min(m,n).
// Each H_i has the form // Each H_i has the form
// H_i = I - tau * v * v^T // H_i = I - tau * v * v
// where tau and v are real vectors with v[0:i-1] = 0 and v[i] = 1; // 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]. // v[i:m] is stored on exit in A[i:m, i], and tau in tau[i].
// //

View File

@@ -22,7 +22,7 @@ import "gonum.org/v1/gonum/blas"
// v[j] = 0 j < i // v[j] = 0 j < i
// v[j] = 1 j == i // v[j] = 1 j == i
// v[j] = a[j*lda+i] j > i // v[j] = a[j*lda+i] j > i
// and computing H_i = I - tau[i] * v * v^T. // and computing H_i = I - tau[i] * v * v.
// //
// The orthonormal matrix Q can be constructed from a product of these elementary // 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). // reflectors, Q = H_0 * H_1 * ... * H_{k-1}, where k = min(m,n).

View File

@@ -85,7 +85,7 @@ func (impl Implementation) Dgeqrf(m, n int, a []float64, lda int, tau, work []fl
// Compute the QR factorization of the current block. // Compute the QR factorization of the current block.
impl.Dgeqr2(m-i, ib, a[i*lda+i:], lda, tau[i:], work) impl.Dgeqr2(m-i, ib, a[i*lda+i:], lda, tau[i:], work)
if i+ib < n { if i+ib < n {
// Form the triangular factor of the block reflector and apply H^T // Form the triangular factor of the block reflector and apply H
// In Dlarft, work becomes the T matrix. // In Dlarft, work becomes the T matrix.
impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib,
a[i*lda+i:], lda, a[i*lda+i:], lda,

View File

@@ -19,7 +19,7 @@ import "gonum.org/v1/gonum/blas"
// The matrix Q is represented as a product of elementary reflectors // The matrix Q is represented as a product of elementary reflectors
// Q = H_0 H_1 . . . H_{min(m,n)-1}. // Q = H_0 H_1 . . . H_{min(m,n)-1}.
// Each H(i) has the form // Each H(i) has the form
// H_i = I - tau_i * v * v^T // H_i = I - tau_i * v * v
// where v is a vector with v[0:n-k+i-1] stored in A[m-k+i, 0:n-k+i-1], // 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. // v[n-k+i:n] = 0 and v[n-k+i] = 1.
// //

View File

@@ -22,7 +22,7 @@ import (
// The matrix Q is represented as a product of elementary reflectors // The matrix Q is represented as a product of elementary reflectors
// Q = H_0 H_1 . . . H_{min(m,n)-1}. // Q = H_0 H_1 . . . H_{min(m,n)-1}.
// Each H(i) has the form // Each H(i) has the form
// H_i = I - tau_i * v * v^T // H_i = I - tau_i * v * v
// where v is a vector with v[0:n-k+i-1] stored in A[m-k+i, 0:n-k+i-1], // 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. // v[n-k+i:n] = 0 and v[n-k+i] = 1.
// //

View File

@@ -17,7 +17,7 @@ const noSVDO = "dgesvd: not coded for overwrite"
// Dgesvd computes the singular value decomposition of the input matrix A. // Dgesvd computes the singular value decomposition of the input matrix A.
// //
// The singular value decomposition is // The singular value decomposition is
// A = U * Sigma * V^T // A = U * Sigma * V
// where Sigma is an m×n diagonal matrix containing the singular values of A, // 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 // 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 // min(m,n) columns of U and V are the left and right singular vectors of A
@@ -29,7 +29,7 @@ const noSVDO = "dgesvd: not coded for overwrite"
// jobU == lapack.SVDStore The first min(m,n) columns are returned in u // jobU == lapack.SVDStore 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.SVDOverwrite The first min(m,n) columns of U are written into a
// jobU == lapack.SVDNone The columns of U are not computed. // 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 // The behavior is the same for jobVT and the rows of V. At most one of jobU
// and jobVT can equal lapack.SVDOverwrite, and Dgesvd will panic otherwise. // 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 // On entry, a contains the data for the m×n matrix A. During the call to Dgesvd

View File

@@ -12,7 +12,7 @@ import (
// Dgetrs solves a system of equations using an LU factorization. // Dgetrs solves a system of equations using an LU factorization.
// The system of equations solved is // The system of equations solved is
// A * X = B if trans == blas.Trans // A * X = B if trans == blas.Trans
// A^T * X = B if trans == blas.NoTrans // A * 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. // 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 // On entry b contains the elements of the matrix B. On exit, b contains the
@@ -61,11 +61,11 @@ func (impl Implementation) Dgetrs(trans blas.Transpose, n, nrhs int, a []float64
n, nrhs, 1, a, lda, b, ldb) n, nrhs, 1, a, lda, b, ldb)
return return
} }
// Solve A^T * X = B. // Solve A * X = B.
// Solve U^T * X = B, updating b. // Solve U * X = B, updating b.
bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit,
n, nrhs, 1, a, lda, b, ldb) n, nrhs, 1, a, lda, b, ldb)
// Solve L^T * X = B, updating b. // Solve L * X = B, updating b.
bi.Dtrsm(blas.Left, blas.Lower, blas.Trans, blas.Unit, bi.Dtrsm(blas.Left, blas.Lower, blas.Trans, blas.Unit,
n, nrhs, 1, a, lda, b, ldb) n, nrhs, 1, a, lda, b, ldb)
impl.Dlaswp(nrhs, b, ldb, 0, n-1, ipiv, -1) impl.Dlaswp(nrhs, b, ldb, 0, n-1, ipiv, -1)

View File

@@ -13,13 +13,13 @@ import (
// Dggsvd3 computes the generalized singular value decomposition (GSVD) // Dggsvd3 computes the generalized singular value decomposition (GSVD)
// of an m×n matrix A and p×n matrix B: // of an m×n matrix A and p×n matrix B:
// U^T*A*Q = D1*[ 0 R ] // U*A*Q = D1*[ 0 R ]
// //
// V^T*B*Q = D2*[ 0 R ] // V*B*Q = D2*[ 0 R ]
// where U, V and Q are orthogonal matrices. // where U, V and Q are orthogonal matrices.
// //
// Dggsvd3 returns k and l, the dimensions of the sub-blocks. k+l // 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. // is the effective numerical rank of the (m+p)×n matrix [ Aᵀ Bᵀ ]ᵀ.
// R is a (k+l)×(k+l) nonsingular upper triangular matrix, D1 and // 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 // D2 are m×(k+l) and p×(k+l) diagonal matrices and of the following
// structures, respectively: // structures, respectively:

View File

@@ -14,16 +14,16 @@ import (
// Dggsvp3 computes orthogonal matrices U, V and Q such that // Dggsvp3 computes orthogonal matrices U, V and Q such that
// //
// n-k-l k l // n-k-l k l
// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l >= 0; // U*A*Q = k [ 0 A12 A13 ] if m-k-l >= 0;
// l [ 0 0 A23 ] // l [ 0 0 A23 ]
// m-k-l [ 0 0 0 ] // m-k-l [ 0 0 0 ]
// //
// n-k-l k l // n-k-l k l
// U^T*A*Q = k [ 0 A12 A13 ] if m-k-l < 0; // U*A*Q = k [ 0 A12 A13 ] if m-k-l < 0;
// m-k [ 0 0 A23 ] // m-k [ 0 0 A23 ]
// //
// n-k-l k l // n-k-l k l
// V^T*B*Q = l [ 0 0 B13 ] // V*B*Q = l [ 0 0 B13 ]
// p-l [ 0 0 0 ] // p-l [ 0 0 0 ]
// //
// where the k×k matrix A12 and l×l matrix B13 are non-singular // where the k×k matrix A12 and l×l matrix B13 are non-singular
@@ -31,7 +31,7 @@ import (
// otherwise A23 is (m-k)×l upper trapezoidal. // otherwise A23 is (m-k)×l upper trapezoidal.
// //
// Dggsvp3 returns k and l, the dimensions of the sub-blocks. k+l // 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. // is the effective numerical rank of the (m+p)×n matrix [ Aᵀ Bᵀ ]ᵀ.
// //
// jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior // jobU, jobV and jobQ are options for computing the orthogonal matrices. The behavior
// is as follows // is as follows
@@ -174,11 +174,11 @@ func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int,
// RQ factorization of [ S11 S12 ]: [ S11 S12 ] = [ 0 S12 ]*Z. // RQ factorization of [ S11 S12 ]: [ S11 S12 ] = [ 0 S12 ]*Z.
impl.Dgerq2(l, n, b, ldb, tau, work) impl.Dgerq2(l, n, b, ldb, tau, work)
// Update A := A*Z^T. // Update A := A*Z.
impl.Dormr2(blas.Right, blas.Trans, m, n, l, b, ldb, tau, a, lda, work) impl.Dormr2(blas.Right, blas.Trans, m, n, l, b, ldb, tau, a, lda, work)
if wantq { if wantq {
// Update Q := Q*Z^T. // Update Q := Q*Z.
impl.Dormr2(blas.Right, blas.Trans, n, n, l, b, ldb, tau, q, ldq, work) impl.Dormr2(blas.Right, blas.Trans, n, n, l, b, ldb, tau, q, ldq, work)
} }
@@ -197,7 +197,7 @@ func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int,
// //
// then the following does the complete QR decomposition of A11: // then the following does the complete QR decomposition of A11:
// //
// A11 = U*[ 0 T12 ]*P1^T. // A11 = U*[ 0 T12 ]*P1.
// [ 0 0 ] // [ 0 0 ]
for i := range iwork[:n-l] { for i := range iwork[:n-l] {
iwork[i] = 0 iwork[i] = 0
@@ -211,7 +211,7 @@ func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int,
} }
} }
// Update A12 := U^T*A12, where A12 = A[0:m, n-l:n]. // Update A12 := U*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) impl.Dorm2r(blas.Left, blas.Trans, m, l, min(m, n-l), a, lda, tau, a[n-l:], lda, work)
if wantu { if wantu {
@@ -245,7 +245,7 @@ func (impl Implementation) Dggsvp3(jobU, jobV, jobQ lapack.GSVDJob, m, p, n int,
impl.Dgerq2(k, n-l, a, lda, tau, work) impl.Dgerq2(k, n-l, a, lda, tau, work)
if wantq { if wantq {
// Update Q[0:n, 0:n-l] := Q[0:n, 0:n-l]*Z1^T. // Update Q[0:n, 0:n-l] := Q[0:n, 0:n-l]*Z1.
impl.Dorm2r(blas.Right, blas.Trans, n, n-l, k, a, lda, tau, q, ldq, work) impl.Dorm2r(blas.Right, blas.Trans, n, n-l, k, a, lda, tau, q, ldq, work)
} }

View File

@@ -13,14 +13,14 @@ import (
// Dhseqr computes the eigenvalues of an n×n Hessenberg matrix H and, // Dhseqr computes the eigenvalues of an n×n Hessenberg matrix H and,
// optionally, the matrices T and Z from the Schur decomposition // optionally, the matrices T and Z from the Schur decomposition
// H = Z T Z^T, // H = Z T Z,
// where T is an n×n upper quasi-triangular matrix (the Schur form), and Z is // where T is an n×n upper quasi-triangular matrix (the Schur form), and Z is
// the n×n orthogonal matrix of Schur vectors. // the n×n orthogonal matrix of Schur vectors.
// //
// Optionally Z may be postmultiplied into an input orthogonal matrix Q so that // 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 // 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: // reduced to the Hessenberg form H by the orthogonal matrix Q:
// A = Q H Q^T = (QZ) T (QZ)^T. // A = Q H Q = (QZ) T (QZ).
// //
// If job == lapack.EigenvaluesOnly, only the eigenvalues will be computed. // If job == lapack.EigenvaluesOnly, only the eigenvalues will be computed.
// If job == lapack.EigenvaluesAndSchur, the eigenvalues and the Schur form T will // If job == lapack.EigenvaluesAndSchur, the eigenvalues and the Schur form T will
@@ -43,8 +43,8 @@ import (
// and Dhseqr will panic otherwise. ilo and ihi are typically set by a previous // 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 // call to Dgebal, otherwise they should be set to 0 and n-1, respectively. It
// must hold that // must hold that
// 0 <= ilo <= ihi < n, if n > 0, // 0 <= ilo <= ihi < n if n > 0,
// ilo == 0 and ihi == -1, if n == 0. // ilo == 0 and ihi == -1 if n == 0.
// //
// wr and wi must have length n. // wr and wi must have length n.
// //

View File

@@ -25,8 +25,8 @@ import (
// Q = H_0 * H_1 * ... * H_{nb-1} // Q = H_0 * H_1 * ... * H_{nb-1}
// P = G_0 * G_1 * ... * G_{nb-1} // P = G_0 * G_1 * ... * G_{nb-1}
// where // where
// H_i = I - tauQ[i] * v_i * v_i^T // H_i = I - tauQ[i] * v_i * v_i
// G_i = I - tauP[i] * u_i * u_i^T // G_i = I - tauP[i] * u_i * u_i
// //
// As an example, on exit the entries of A when m = 6, n = 5, and nb = 2 // As an example, on exit the entries of A when m = 6, n = 5, and nb = 2
// [ 1 1 u1 u1 u1] // [ 1 1 u1 u1 u1]
@@ -44,7 +44,7 @@ import (
// //
// Dlabrd also returns the matrices X and Y which are used with U and V to // 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 // apply the transformation to the unreduced part of the matrix
// A := A - V*Y^T - X*U^T // A := A - V*Y - X*U
// and returns the matrices X and Y which are needed to apply the // and returns the matrices X and Y which are needed to apply the
// transformation to the unreduced part of A. // transformation to the unreduced part of A.
// //

View File

@@ -18,7 +18,7 @@ import (
// On the initial call, kase must be 0. // On the initial call, kase must be 0.
// In between calls, x must be overwritten by // In between calls, x must be overwritten by
// A * X if kase was returned as 1, // A * X if kase was returned as 1,
// A^T * X if kase was returned as 2, // A * X if kase was returned as 2,
// and all other parameters must not be changed. // 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 // 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. // vector, and est = norm(V)/norm(W) is a lower bound for 1-norm of A.

View File

@@ -11,18 +11,18 @@ import "math"
// //
// If upper is true // If upper is true
// //
// U^T*A*Q = U^T*[ a1 a2 ]*Q = [ x 0 ] // U*A*Q = U*[ a1 a2 ]*Q = [ x 0 ]
// [ 0 a3 ] [ x x ] // [ 0 a3 ] [ x x ]
// and // and
// V^T*B*Q = V^T*[ b1 b2 ]*Q = [ x 0 ] // V*B*Q = V*[ b1 b2 ]*Q = [ x 0 ]
// [ 0 b3 ] [ x x ] // [ 0 b3 ] [ x x ]
// //
// otherwise // otherwise
// //
// U^T*A*Q = U^T*[ a1 0 ]*Q = [ x x ] // U*A*Q = U*[ a1 0 ]*Q = [ x x ]
// [ a2 a3 ] [ 0 x ] // [ a2 a3 ] [ 0 x ]
// and // and
// V^T*B*Q = V^T*[ b1 0 ]*Q = [ x x ] // V*B*Q = V*[ b1 0 ]*Q = [ x x ]
// [ b2 b3 ] [ 0 x ]. // [ b2 b3 ] [ 0 x ].
// //
// The rows of the transformed A and B are parallel, where // The rows of the transformed A and B are parallel, where
@@ -48,8 +48,8 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
_, _, snr, csr, snl, csl := impl.Dlasv2(a, b, d) _, _, snr, csr, snl, csl := impl.Dlasv2(a, b, d)
if math.Abs(csl) >= math.Abs(snl) || math.Abs(csr) >= math.Abs(snr) { 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, // Compute the [0, 0] and [0, 1] elements of U*A and V*B,
// and [0, 1] element of |U|^T*|A| and |V|^T*|B|. // and [0, 1] element of |U|*|A| and |V|*|B|.
ua11r := csl * a1 ua11r := csl * a1
ua12 := csl*a2 + snl*a3 ua12 := csl*a2 + snl*a3
@@ -60,7 +60,7 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
aua12 := math.Abs(csl)*math.Abs(a2) + math.Abs(snl)*math.Abs(a3) 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) 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. // Zero [0, 1] elements of U*A and V*B.
if math.Abs(ua11r)+math.Abs(ua12) != 0 { if math.Abs(ua11r)+math.Abs(ua12) != 0 {
if aua12/(math.Abs(ua11r)+math.Abs(ua12)) <= avb12/(math.Abs(vb11r)+math.Abs(vb12)) { if aua12/(math.Abs(ua11r)+math.Abs(ua12)) <= avb12/(math.Abs(vb11r)+math.Abs(vb12)) {
csq, snq, _ = impl.Dlartg(-ua11r, ua12) csq, snq, _ = impl.Dlartg(-ua11r, ua12)
@@ -76,8 +76,8 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
csv = csr csv = csr
snv = -snr snv = -snr
} else { } else {
// Compute the [1, 0] and [1, 1] elements of U^T*A and V^T*B, // Compute the [1, 0] and [1, 1] elements of U*A and V*B,
// and [1, 1] element of |U|^T*|A| and |V|^T*|B|. // and [1, 1] element of |U|*|A| and |V|*|B|.
ua21 := -snl * a1 ua21 := -snl * a1
ua22 := -snl*a2 + csl*a3 ua22 := -snl*a2 + csl*a3
@@ -88,7 +88,7 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
aua22 := math.Abs(snl)*math.Abs(a2) + math.Abs(csl)*math.Abs(a3) 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) 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. // Zero [1, 1] elements of U*A and V*B, and then swap.
if math.Abs(ua21)+math.Abs(ua22) != 0 { if math.Abs(ua21)+math.Abs(ua22) != 0 {
if aua22/(math.Abs(ua21)+math.Abs(ua22)) <= avb22/(math.Abs(vb21)+math.Abs(vb22)) { if aua22/(math.Abs(ua21)+math.Abs(ua22)) <= avb22/(math.Abs(vb21)+math.Abs(vb22)) {
csq, snq, _ = impl.Dlartg(-ua21, ua22) csq, snq, _ = impl.Dlartg(-ua21, ua22)
@@ -120,8 +120,8 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
_, _, snr, csr, snl, csl := impl.Dlasv2(a, c, d) _, _, snr, csr, snl, csl := impl.Dlasv2(a, c, d)
if math.Abs(csr) >= math.Abs(snr) || math.Abs(csl) >= math.Abs(snl) { 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, // Compute the [1, 0] and [1, 1] elements of U*A and V*B,
// and [1, 0] element of |U|^T*|A| and |V|^T*|B|. // and [1, 0] element of |U|*|A| and |V|*|B|.
ua21 := -snr*a1 + csr*a2 ua21 := -snr*a1 + csr*a2
ua22r := csr * a3 ua22r := csr * a3
@@ -132,7 +132,7 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
aua21 := math.Abs(snr)*math.Abs(a1) + math.Abs(csr)*math.Abs(a2) 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) 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. // Zero [1, 0] elements of U*A and V*B.
if (math.Abs(ua21) + math.Abs(ua22r)) != 0 { if (math.Abs(ua21) + math.Abs(ua22r)) != 0 {
if aua21/(math.Abs(ua21)+math.Abs(ua22r)) <= avb21/(math.Abs(vb21)+math.Abs(vb22r)) { if aua21/(math.Abs(ua21)+math.Abs(ua22r)) <= avb21/(math.Abs(vb21)+math.Abs(vb22r)) {
csq, snq, _ = impl.Dlartg(ua22r, ua21) csq, snq, _ = impl.Dlartg(ua22r, ua21)
@@ -148,8 +148,8 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
csv = csl csv = csl
snv = -snl snv = -snl
} else { } else {
// Compute the [0, 0] and [0, 1] elements of U^T *A and V^T *B, // Compute the [0, 0] and [0, 1] elements of U *A and V *B,
// and [0, 0] element of |U|^T*|A| and |V|^T*|B|. // and [0, 0] element of |U|*|A| and |V|*|B|.
ua11 := csr*a1 + snr*a2 ua11 := csr*a1 + snr*a2
ua12 := snr * a3 ua12 := snr * a3
@@ -160,7 +160,7 @@ func (impl Implementation) Dlags2(upper bool, a1, a2, a3, b1, b2, b3 float64) (c
aua11 := math.Abs(csr)*math.Abs(a1) + math.Abs(snr)*math.Abs(a2) 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) 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. // Zero [0, 0] elements of U*A and V*B, and then swap.
if (math.Abs(ua11) + math.Abs(ua12)) != 0 { if (math.Abs(ua11) + math.Abs(ua12)) != 0 {
if aua11/(math.Abs(ua11)+math.Abs(ua12)) <= avb11/(math.Abs(vb11)+math.Abs(vb12)) { if aua11/(math.Abs(ua11)+math.Abs(ua12)) <= avb11/(math.Abs(vb11)+math.Abs(vb12)) {
csq, snq, _ = impl.Dlartg(ua12, ua11) csq, snq, _ = impl.Dlartg(ua12, ua11)

View File

@@ -11,21 +11,21 @@ import (
// Dlahr2 reduces the first nb columns of a real general n×(n-k+1) matrix A so // 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 // 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 // by an orthogonal similarity transformation Q * A * Q. Dlahr2 returns the
// matrices V and T which determine Q as a block reflector I - V*T*V^T, and // matrices V and T which determine Q as a block reflector I - V*T*V, and
// also the matrix Y = A * V * T. // also the matrix Y = A * V * T.
// //
// The matrix Q is represented as a product of nb elementary reflectors // The matrix Q is represented as a product of nb elementary reflectors
// Q = H_0 * H_1 * ... * H_{nb-1}. // Q = H_0 * H_1 * ... * H_{nb-1}.
// Each H_i has the form // Each H_i has the form
// H_i = I - tau[i] * v * v^T, // H_i = I - tau[i] * v * v,
// where v is a real vector with v[0:i+k-1] = 0 and v[i+k-1] = 1. v[i+k:n] is // 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]. // stored on exit in A[i+k+1:n,i].
// //
// The elements of the vectors v together form the (n-k+1)×nb matrix // 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 // 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 // unreduced part of the matrix, using an update of the form
// A = (I - V*T*V^T) * (A - Y*V^T). // A = (I - V*T*V) * (A - Y*V).
// //
// On entry, a contains the n×(n-k+1) general matrix A. On return, the elements // 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 // on and above the k-th subdiagonal in the first nb columns are overwritten
@@ -109,31 +109,31 @@ func (impl Implementation) Dlahr2(n, k, nb int, a []float64, lda int, tau, t []f
if i > 0 { if i > 0 {
// Update A[k:n,i]. // Update A[k:n,i].
// Update i-th column of A - Y * V^T. // Update i-th column of A - Y * V.
bi.Dgemv(blas.NoTrans, n-k, i, bi.Dgemv(blas.NoTrans, n-k, i,
-1, y[k*ldy:], ldy, -1, y[k*ldy:], ldy,
a[(k+i-1)*lda:], 1, a[(k+i-1)*lda:], 1,
1, a[k*lda+i:], lda) 1, a[k*lda+i:], lda)
// Apply I - V * T^T * V^T to this column (call it b) // Apply I - V * T * V to this column (call it b)
// from the left, using the last column of T as // from the left, using the last column of T as
// workspace. // workspace.
// Let V = [ V1 ] and b = [ b1 ] (first i rows) // Let V = [ V1 ] and b = [ b1 ] (first i rows)
// [ V2 ] [ b2 ] // [ V2 ] [ b2 ]
// where V1 is unit lower triangular. // where V1 is unit lower triangular.
// //
// w := V1^T * b1. // w := V1 * b1.
bi.Dcopy(i, a[k*lda+i:], lda, t[nb-1:], ldt) bi.Dcopy(i, a[k*lda+i:], lda, t[nb-1:], ldt)
bi.Dtrmv(blas.Lower, blas.Trans, blas.Unit, i, bi.Dtrmv(blas.Lower, blas.Trans, blas.Unit, i,
a[k*lda:], lda, t[nb-1:], ldt) a[k*lda:], lda, t[nb-1:], ldt)
// w := w + V2^T * b2. // w := w + V2 * b2.
bi.Dgemv(blas.Trans, n-k-i, i, bi.Dgemv(blas.Trans, n-k-i, i,
1, a[(k+i)*lda:], lda, 1, a[(k+i)*lda:], lda,
a[(k+i)*lda+i:], lda, a[(k+i)*lda+i:], lda,
1, t[nb-1:], ldt) 1, t[nb-1:], ldt)
// w := T^T * w. // w := T * w.
bi.Dtrmv(blas.Upper, blas.Trans, blas.NonUnit, i, bi.Dtrmv(blas.Upper, blas.Trans, blas.NonUnit, i,
t, ldt, t[nb-1:], ldt) t, ldt, t[nb-1:], ldt)

View File

@@ -7,8 +7,8 @@ package gonum
import "math" import "math"
// Dlaln2 solves a linear equation or a system of 2 linear equations of the form // 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 - w D) X = scale B if trans == false,
// (ca A^T - w D) X = scale B, if trans == true, // (ca A - 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 // 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 // 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. // are na×1 matrices, real if w is real, complex if w is complex.
@@ -147,7 +147,7 @@ func (impl Implementation) Dlaln2(trans bool, na, nw int, smin, ca float64, a []
// Compute the real part of // Compute the real part of
// C = ca A - w D // C = ca A - w D
// or // or
// C = ca A^T - w D. // C = ca A - w D.
crv := [4]float64{ crv := [4]float64{
ca*a[0] - wr*d1, ca*a[0] - wr*d1,
ca * a[1], ca * a[1],

View File

@@ -10,19 +10,22 @@ import (
"gonum.org/v1/gonum/lapack" "gonum.org/v1/gonum/lapack"
) )
// Dlange computes the matrix norm of the general m×n matrix a. The input norm // Dlange returns the value of the specified norm of a general m×n matrix A:
// specifies the norm computed. // lapack.MaxAbs: the maximum absolute value of any element.
// lapack.MaxAbs: the maximum absolute value of an element. // lapack.MaxColumnSum: the maximum column sum of the absolute values of the elements (1-norm).
// 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 elements (infinity-norm).
// 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 elements (Frobenius norm).
// 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
// If norm == lapack.MaxColumnSum, work must be of length n, and this function will panic otherwise. // panic otherwise. There are no restrictions on work for the other matrix norms.
// 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 { 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. // TODO(btracey): These should probably be refactored to use BLAS calls.
switch { switch {
case norm != lapack.MaxRowSum && norm != lapack.MaxColumnSum && norm != lapack.Frobenius && norm != lapack.MaxAbs: case norm != lapack.MaxRowSum && norm != lapack.MaxColumnSum && norm != lapack.Frobenius && norm != lapack.MaxAbs:
panic(badNorm) panic(badNorm)
case m < 0:
panic(mLT0)
case n < 0:
panic(nLT0)
case lda < max(1, n): case lda < max(1, n):
panic(badLdA) panic(badLdA)
} }
@@ -39,7 +42,8 @@ func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64,
panic(shortWork) panic(shortWork)
} }
if norm == lapack.MaxAbs { switch norm {
case lapack.MaxAbs:
var value float64 var value float64
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
@@ -47,11 +51,7 @@ func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64,
} }
} }
return value return value
} case lapack.MaxColumnSum:
if norm == lapack.MaxColumnSum {
if len(work) < n {
panic(shortWork)
}
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
work[i] = 0 work[i] = 0
} }
@@ -65,8 +65,7 @@ func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64,
value = math.Max(value, work[i]) value = math.Max(value, work[i])
} }
return value return value
} case lapack.MaxRowSum:
if norm == lapack.MaxRowSum {
var value float64 var value float64
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
var sum float64 var sum float64
@@ -76,14 +75,14 @@ func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64,
value = math.Max(value, sum) value = math.Max(value, sum)
} }
return value return value
} default:
// norm == lapack.Frobenius // lapack.Frobenius
var value float64
scale := 0.0 scale := 0.0
sum := 1.0 sum := 1.0
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
scale, sum = impl.Dlassq(n, a[i*lda:], 1, scale, sum) rowscale, rowsum := impl.Dlassq(n, a[i*lda:], 1, 0, 1)
scale, sum = impl.Dcombssq(scale, sum, rowscale, rowsum)
}
return scale * math.Sqrt(sum)
} }
value = scale * math.Sqrt(sum)
return value
} }

135
vendor/gonum.org/v1/gonum/lapack/gonum/dlansb.go generated vendored Normal file
View File

@@ -0,0 +1,135 @@
// Copyright ©2019 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 gonum
import (
"math"
"gonum.org/v1/gonum/blas"
"gonum.org/v1/gonum/lapack"
)
// Dlansb returns the given norm of an n×n symmetric band matrix with kd
// super-diagonals.
//
// When norm is lapack.MaxColumnSum or lapack.MaxRowSum, the length of work must
// be at least n.
func (impl Implementation) Dlansb(norm lapack.MatrixNorm, uplo blas.Uplo, n, kd int, ab []float64, ldab int, work []float64) float64 {
switch {
case norm != lapack.MaxAbs && norm != lapack.MaxRowSum && norm != lapack.MaxColumnSum && norm != lapack.Frobenius:
panic(badNorm)
case uplo != blas.Upper && uplo != blas.Lower:
panic(badUplo)
case n < 0:
panic(nLT0)
case kd < 0:
panic(kdLT0)
case ldab < kd+1:
panic(badLdA)
}
// Quick return if possible.
if n == 0 {
return 0
}
switch {
case len(ab) < (n-1)*ldab+kd+1:
panic(shortAB)
case len(work) < n && (norm == lapack.MaxColumnSum || norm == lapack.MaxRowSum):
panic(shortWork)
}
var value float64
switch norm {
case lapack.MaxAbs:
if uplo == blas.Upper {
for i := 0; i < n; i++ {
for j := 0; j < min(n-i, kd+1); j++ {
aij := math.Abs(ab[i*ldab+j])
if aij > value || math.IsNaN(aij) {
value = aij
}
}
}
} else {
for i := 0; i < n; i++ {
for j := max(0, kd-i); j < kd+1; j++ {
aij := math.Abs(ab[i*ldab+j])
if aij > value || math.IsNaN(aij) {
value = aij
}
}
}
}
case lapack.MaxColumnSum, lapack.MaxRowSum:
work = work[:n]
var sum float64
if uplo == blas.Upper {
for i := range work {
work[i] = 0
}
for i := 0; i < n; i++ {
sum := work[i] + math.Abs(ab[i*ldab])
for j := i + 1; j < min(i+kd+1, n); j++ {
aij := math.Abs(ab[i*ldab+j-i])
sum += aij
work[j] += aij
}
if sum > value || math.IsNaN(sum) {
value = sum
}
}
} else {
for i := 0; i < n; i++ {
sum = 0
for j := max(0, i-kd); j < i; j++ {
aij := math.Abs(ab[i*ldab+kd+j-i])
sum += aij
work[j] += aij
}
work[i] = sum + math.Abs(ab[i*ldab+kd])
}
for _, sum := range work {
if sum > value || math.IsNaN(sum) {
value = sum
}
}
}
case lapack.Frobenius:
scale := 0.0
ssq := 1.0
if uplo == blas.Upper {
if kd > 0 {
// Sum off-diagonals.
for i := 0; i < n-1; i++ {
ilen := min(n-i-1, kd)
rowscale, rowssq := impl.Dlassq(ilen, ab[i*ldab+1:], 1, 0, 1)
scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
}
ssq *= 2
}
// Sum diagonal.
dscale, dssq := impl.Dlassq(n, ab, ldab, 0, 1)
scale, ssq = impl.Dcombssq(scale, ssq, dscale, dssq)
} else {
if kd > 0 {
// Sum off-diagonals.
for i := 1; i < n; i++ {
ilen := min(i, kd)
rowscale, rowssq := impl.Dlassq(ilen, ab[i*ldab+kd-ilen:], 1, 0, 1)
scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
}
ssq *= 2
}
// Sum diagonal.
dscale, dssq := impl.Dlassq(n, ab[kd:], ldab, 0, 1)
scale, ssq = impl.Dcombssq(scale, ssq, dscale, dssq)
}
value = scale * math.Sqrt(ssq)
}
return value
}

View File

@@ -11,8 +11,8 @@ import (
"gonum.org/v1/gonum/lapack" "gonum.org/v1/gonum/lapack"
) )
// Dlansy computes the specified norm of an n×n symmetric matrix. If // Dlansy returns the value of the specified norm of an n×n symmetric matrix. If
// norm == lapack.MaxColumnSum or norm == lapackMaxRowSum work must have length // norm == lapack.MaxColumnSum or norm == lapack.MaxRowSum, work must have length
// at least n, otherwise work is unused. // 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 { func (impl Implementation) Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64 {
switch { switch {
@@ -39,8 +39,6 @@ func (impl Implementation) Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int,
} }
switch norm { switch norm {
default:
panic(badNorm)
case lapack.MaxAbs: case lapack.MaxAbs:
if uplo == blas.Upper { if uplo == blas.Upper {
var max float64 var max float64
@@ -105,28 +103,26 @@ func (impl Implementation) Dlansy(norm lapack.MatrixNorm, uplo blas.Uplo, n int,
} }
} }
return max return max
case lapack.Frobenius: default:
// lapack.Frobenius:
scale := 0.0
ssq := 1.0
// Sum off-diagonals.
if uplo == blas.Upper { if uplo == blas.Upper {
var sum float64 for i := 0; i < n-1; i++ {
for i := 0; i < n; i++ { rowscale, rowssq := impl.Dlassq(n-i-1, a[i*lda+i+1:], 1, 0, 1)
v := a[i*lda+i] scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
sum += v * v }
for j := i + 1; j < n; j++ { } else {
v := a[i*lda+j] for i := 1; i < n; i++ {
sum += 2 * v * v rowscale, rowssq := impl.Dlassq(i, a[i*lda:], 1, 0, 1)
scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
} }
} }
return math.Sqrt(sum) ssq *= 2
} // Sum diagonal.
var sum float64 dscale, dssq := impl.Dlassq(n, a, lda+1, 0, 1)
for i := 0; i < n; i++ { scale, ssq = impl.Dcombssq(scale, ssq, dscale, dssq)
for j := 0; j < i; j++ { return scale * math.Sqrt(ssq)
v := a[i*lda+j]
sum += 2 * v * v
}
v := a[i*lda+i]
sum += v * v
}
return math.Sqrt(sum)
} }
} }

View File

@@ -22,6 +22,8 @@ func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag b
panic(badUplo) panic(badUplo)
case diag != blas.Unit && diag != blas.NonUnit: case diag != blas.Unit && diag != blas.NonUnit:
panic(badDiag) panic(badDiag)
case m < 0:
panic(mLT0)
case n < 0: case n < 0:
panic(nLT0) panic(nLT0)
case lda < max(1, n): case lda < max(1, n):
@@ -42,8 +44,6 @@ func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag b
} }
switch norm { switch norm {
default:
panic(badNorm)
case lapack.MaxAbs: case lapack.MaxAbs:
if diag == blas.Unit { if diag == blas.Unit {
value := 1.0 value := 1.0
@@ -171,7 +171,7 @@ func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag b
} }
return maxsum return maxsum
} else { } else {
for i := 1; i < m; i++ { for i := 0; i < m; i++ {
var sum float64 var sum float64
if i < minmn { if i < minmn {
sum = 1 sum = 1
@@ -219,42 +219,38 @@ func (impl Implementation) Dlantr(norm lapack.MatrixNorm, uplo blas.Uplo, diag b
return maxsum return maxsum
} }
} }
case lapack.Frobenius: default:
var nrm float64 // lapack.Frobenius:
var scale, ssq float64
if diag == blas.Unit { if diag == blas.Unit {
scale = 1
ssq = float64(min(m, n))
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < min(m, n); i++ {
for j := i + 1; j < n; j++ { rowscale, rowssq := impl.Dlassq(n-i-1, a[i*lda+i+1:], 1, 0, 1)
tmp := a[i*lda+j] scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
nrm += tmp * tmp
}
} }
} else { } else {
for i := 1; i < m; i++ { for i := 1; i < m; i++ {
for j := 0; j < min(i, n); j++ { rowscale, rowssq := impl.Dlassq(min(i, n), a[i*lda:], 1, 0, 1)
tmp := a[i*lda+j] scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
nrm += tmp * tmp
} }
} }
}
nrm += float64(minmn)
} else { } else {
scale = 0
ssq = 1
if uplo == blas.Upper { if uplo == blas.Upper {
for i := 0; i < m; i++ { for i := 0; i < min(m, n); i++ {
for j := i; j < n; j++ { rowscale, rowssq := impl.Dlassq(n-i, a[i*lda+i:], 1, 0, 1)
tmp := math.Abs(a[i*lda+j]) scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
nrm += tmp * tmp
}
} }
} else { } else {
for i := 0; i < m; i++ { for i := 0; i < m; i++ {
for j := 0; j <= min(i, n-1); j++ { rowscale, rowssq := impl.Dlassq(min(i+1, n), a[i*lda:], 1, 0, 1)
tmp := math.Abs(a[i*lda+j]) scale, ssq = impl.Dcombssq(scale, ssq, rowscale, rowssq)
nrm += tmp * tmp
} }
} }
} }
} return scale * math.Sqrt(ssq)
return math.Sqrt(nrm)
} }
} }

View File

@@ -93,7 +93,7 @@ func (impl Implementation) Dlaqp2(m, n, offset int, a []float64, lda int, jpvt [
} }
if i < n-1 { if i < n-1 {
// Apply H_i^T to A[offset+i:m, i:n] from the left. // Apply H_i to A[offset+i:m, i:n] from the left.
aii := a[offpi*lda+i] aii := a[offpi*lda+i]
a[offpi*lda+i] = 1 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) impl.Dlarf(blas.Left, m-offpi, n-i-1, a[offpi*lda+i:], lda, tau[i], a[offpi*lda+i+1:], lda, work)

View File

@@ -122,7 +122,7 @@ func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jp
// Apply previous Householder reflectors to column 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. // A[rk:m, k] = A[rk:m, k] - A[rk:m, 0:k-1]*F[k, 0:k-1].
if k > 0 { if k > 0 {
bi.Dgemv(blas.NoTrans, m-rk, k, -1, bi.Dgemv(blas.NoTrans, m-rk, k, -1,
a[rk*lda:], lda, a[rk*lda:], lda,
@@ -143,7 +143,7 @@ func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jp
// Compute kth column of F: // Compute kth column of F:
// //
// Compute F[k+1:n, k] = tau[k]*A[rk:m, k+1:n]^T*A[rk:m, k]. // Compute F[k+1:n, k] = tau[k]*A[rk:m, k+1:n]*A[rk:m, k].
if k < n-1 { if k < n-1 {
bi.Dgemv(blas.Trans, m-rk, n-k-1, tau[k], bi.Dgemv(blas.Trans, m-rk, n-k-1, tau[k],
a[rk*lda+k+1:], lda, a[rk*lda+k+1:], lda,
@@ -159,7 +159,7 @@ func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jp
// Incremental updating of F: // 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]. // F[0:n, k] := F[0:n, k] - tau[k]*F[0:n, 0:k-1]*A[rk:m, 0:k-1]*A[rk:m,k].
if k > 0 { if k > 0 {
bi.Dgemv(blas.Trans, m-rk, k, -tau[k], bi.Dgemv(blas.Trans, m-rk, k, -tau[k],
a[rk*lda:], lda, a[rk*lda:], lda,
@@ -175,7 +175,7 @@ func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jp
// Update the current row of A: // 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. // A[rk, k+1:n] = A[rk, k+1:n] - A[rk, 0:k]*F[k+1:n, 0:k].
if k < n-1 { if k < n-1 {
bi.Dgemv(blas.NoTrans, n-k-1, k+1, -1, bi.Dgemv(blas.NoTrans, n-k-1, k+1, -1,
f[(k+1)*ldf:], ldf, f[(k+1)*ldf:], ldf,
@@ -216,7 +216,7 @@ func (impl Implementation) Dlaqps(m, n, offset, nb int, a []float64, lda int, jp
// Apply the block reflector to the rest of the matrix: // 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. // 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].
if kb < min(n, m-offset) { if kb < min(n, m-offset) {
bi.Dgemm(blas.NoTrans, blas.Trans, bi.Dgemm(blas.NoTrans, blas.Trans,
m-rk, n-kb, kb, -1, m-rk, n-kb, kb, -1,

View File

@@ -12,7 +12,7 @@ import (
// Dlaqr04 computes the eigenvalues of a block of an n×n upper Hessenberg matrix // 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, and optionally the matrices T and Z from the Schur decomposition
// H = Z T Z^T // H = Z T Z
// where T is an upper quasi-triangular matrix (the Schur form), and Z is the // where T is an upper quasi-triangular matrix (the Schur form), and Z is the
// orthogonal matrix of Schur vectors. // orthogonal matrix of Schur vectors.
// //
@@ -24,8 +24,8 @@ import (
// Z[iloz:ihiz+1,ilo:ihi+1], otherwise Z will not be referenced. // 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 // ilo and ihi determine the block of H on which Dlaqr04 operates. It must hold that
// 0 <= ilo <= ihi < n, if n > 0, // 0 <= ilo <= ihi < n if n > 0,
// ilo == 0 and ihi == -1, if n == 0, // ilo == 0 and ihi == -1 if n == 0,
// and the block must be isolated, that is, // and the block must be isolated, that is,
// ilo == 0 or H[ilo,ilo-1] == 0, // ilo == 0 or H[ilo,ilo-1] == 0,
// ihi == n-1 or H[ihi+1,ihi] == 0, // ihi == n-1 or H[ihi+1,ihi] == 0,
@@ -39,8 +39,8 @@ import (
// otherwise Dlaqr04 will panic. // otherwise Dlaqr04 will panic.
// //
// work must have length at least lwork and lwork must be // work must have length at least lwork and lwork must be
// lwork >= 1, if n <= 11, // lwork >= 1 if n <= 11,
// lwork >= n, if n > 11, // lwork >= n if n > 11,
// otherwise Dlaqr04 will panic. lwork as large as 6*n may be required for // 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 // optimal performance. On return, work[0] will contain the optimal value of
// lwork. // lwork.

View File

@@ -29,8 +29,8 @@ import (
// //
// ktop and kbot determine a block [ktop:kbot+1,ktop:kbot+1] along the diagonal // ktop and kbot determine a block [ktop:kbot+1,ktop:kbot+1] along the diagonal
// of H. It must hold that // of H. It must hold that
// 0 <= ilo <= ihi < n, if n > 0, // 0 <= ilo <= ihi < n if n > 0,
// ilo == 0 and ihi == -1, if n == 0, // ilo == 0 and ihi == -1 if n == 0,
// and the block must be isolated, that is, it must hold that // and the block must be isolated, that is, it must hold that
// ktop == 0 or H[ktop,ktop-1] == 0, // ktop == 0 or H[ktop,ktop-1] == 0,
// kbot == n-1 or H[kbot+1,kbot] == 0, // kbot == n-1 or H[kbot+1,kbot] == 0,

View File

@@ -544,12 +544,12 @@ func (impl Implementation) Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot,
// rows get multiplied by zero). // rows get multiplied by zero).
impl.Dlacpy(blas.All, knz, jlen, h[(incol+1+j2)*ldh+jcol:], ldh, wh[kzs*ldwh:], ldwh) impl.Dlacpy(blas.All, knz, jlen, h[(incol+1+j2)*ldh+jcol:], ldh, wh[kzs*ldwh:], ldwh)
// Multiply by U21^T. // Multiply by U21.
impl.Dlaset(blas.All, kzs, jlen, 0, 0, wh, ldwh) impl.Dlaset(blas.All, kzs, jlen, 0, 0, wh, ldwh)
bi.Dtrmm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, knz, jlen, bi.Dtrmm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, knz, jlen,
1, u[j2*ldu+kzs:], ldu, wh[kzs*ldwh:], ldwh) 1, u[j2*ldu+kzs:], ldu, wh[kzs*ldwh:], ldwh)
// Multiply top of H by U11^T. // Multiply top of H by U11.
bi.Dgemm(blas.Trans, blas.NoTrans, i2, jlen, j2, bi.Dgemm(blas.Trans, blas.NoTrans, i2, jlen, j2,
1, u, ldu, h[(incol+1)*ldh+jcol:], ldh, 1, u, ldu, h[(incol+1)*ldh+jcol:], ldh,
1, wh, ldwh) 1, wh, ldwh)
@@ -557,7 +557,7 @@ func (impl Implementation) Dlaqr5(wantt, wantz bool, kacc22 int, n, ktop, kbot,
// Copy top of H to bottom of WH. // Copy top of H to bottom of WH.
impl.Dlacpy(blas.All, j2, jlen, h[(incol+1)*ldh+jcol:], ldh, wh[i2*ldwh:], ldwh) impl.Dlacpy(blas.All, j2, jlen, h[(incol+1)*ldh+jcol:], ldh, wh[i2*ldwh:], ldwh)
// Multiply by U21^T. // Multiply by U21.
bi.Dtrmm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit, j2, jlen, bi.Dtrmm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit, j2, jlen,
1, u[i2:], ldu, wh[i2*ldwh:], ldwh) 1, u[i2:], ldu, wh[i2*ldwh:], ldwh)

View File

@@ -14,7 +14,7 @@ import (
// c = h * c if side == Left // c = h * c if side == Left
// c = c * h if side == right // c = c * h if side == right
// where // where
// h = 1 - tau * v * v^T // h = 1 - tau * v * v
// and c is an m * n matrix. // and c is an m * n matrix.
// //
// work is temporary storage of length at least m if side == Left and at least // work is temporary storage of length at least m if side == Left and at least
@@ -87,15 +87,15 @@ func (impl Implementation) Dlarf(side blas.Side, m, n int, v []float64, incv int
bi := blas64.Implementation() bi := blas64.Implementation()
if applyleft { if applyleft {
// Form H * C // Form H * C
// w[0:lastc+1] = c[1:lastv+1, 1:lastc+1]^T * v[1:lastv+1,1] // w[0:lastc+1] = c[1:lastv+1, 1:lastc+1] * v[1:lastv+1,1]
bi.Dgemv(blas.Trans, lastv+1, lastc+1, 1, c, ldc, v, incv, 0, work, 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 // c[0: lastv, 0: lastc] = c[...] - w[0:lastv, 1] * v[1:lastc, 1]
bi.Dger(lastv+1, lastc+1, -tau, v, incv, work, 1, c, ldc) bi.Dger(lastv+1, lastc+1, -tau, v, incv, work, 1, c, ldc)
return return
} }
// Form C*H // Form C*H
// w[0:lastc+1,1] := c[0:lastc+1,0:lastv+1] * v[0:lastv+1,1] // 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) 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 // c[0:lastc+1,0:lastv+1] = c[...] - w[0:lastc+1,0] * v[0:lastv+1,0]
bi.Dger(lastc+1, lastv+1, -tau, work, 1, v, incv, c, ldc) bi.Dger(lastc+1, lastv+1, -tau, work, 1, v, incv, c, ldc)
} }

View File

@@ -15,8 +15,8 @@ import (
// In the call to Dlarfb, the mxn c is multiplied by the implicitly defined matrix h as follows: // 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 = h * c if side == Left and trans == NoTrans
// c = c * h if side == Right and trans == NoTrans // c = c * h if side == Right and trans == NoTrans
// c = h^T * c if side == Left and trans == Trans // c = h * c if side == Left and trans == Trans
// c = c * h^T if side == Right and trans == Trans // c = c * h if side == Right and trans == Trans
// h is a product of elementary reflectors. direct sets the direction of multiplication // 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_1 * h_2 * ... * h_k if direct == Forward
// h = h_k * h_k-1 * ... * h_1 if direct == Backward // h = h_k * h_k-1 * ... * h_1 if direct == Backward
@@ -118,13 +118,13 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
// elements are copied into the columns of the working array. The // elements are copied into the columns of the working array. The
// loops should go in the other direction so the data is written // 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 // 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 // would be to replace work with work, but benchmarks would be
// needed to see if the change is merited. // needed to see if the change is merited.
if store == lapack.ColumnWise { if store == lapack.ColumnWise {
if direct == lapack.Forward { if direct == lapack.Forward {
// V1 is the first k rows of C. V2 is the remaining rows. // V1 is the first k rows of C. V2 is the remaining rows.
if side == blas.Left { if side == blas.Left {
// W = C^T V = C1^T V1 + C2^T V2 (stored in work). // W = C V = C1 V1 + C2 V2 (stored in work).
// W = C1. // W = C1.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
@@ -136,27 +136,27 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
v, ldv, v, ldv,
work, ldwork) work, ldwork)
if m > k { if m > k {
// W = W + C2^T V2. // W = W + C2 V2.
bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k,
1, c[k*ldc:], ldc, v[k*ldv:], ldv, 1, c[k*ldc:], ldc, v[k*ldv:], ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W = W * T^T or W * T. // W = W * T or W * T.
bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
// C -= V * W^T. // C -= V * W.
if m > k { if m > k {
// C2 -= V2 * W^T. // C2 -= V2 * W.
bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k,
-1, v[k*ldv:], ldv, work, ldwork, -1, v[k*ldv:], ldv, work, ldwork,
1, c[k*ldc:], ldc) 1, c[k*ldc:], ldc)
} }
// W *= V1^T. // W *= V1.
bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k,
1, v, ldv, 1, v, ldv,
work, ldwork) work, ldwork)
// C1 -= W^T. // C1 -= W.
// TODO(btracey): This should use blas.Axpy. // TODO(btracey): This should use blas.Axpy.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
@@ -165,7 +165,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
} }
return return
} }
// Form C = C * H or C * H^T, where C = (C1 C2). // Form C = C * H or C * H, where C = (C1 C2).
// W = C1. // W = C1.
for i := 0; i < k; i++ { for i := 0; i < k; i++ {
@@ -180,7 +180,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c[k:], ldc, v[k*ldv:], ldv, 1, c[k:], ldc, v[k*ldv:], ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
@@ -189,7 +189,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
-1, work, ldwork, v[k*ldv:], ldv, -1, work, ldwork, v[k*ldv:], ldv,
1, c[k:], ldc) 1, c[k:], ldc)
} }
// C -= W * V^T. // C -= W * V.
bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k,
1, v, ldv, 1, v, ldv,
work, ldwork) work, ldwork)
@@ -207,9 +207,9 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
// Where V2 is unit upper triangular. // Where V2 is unit upper triangular.
if side == blas.Left { if side == blas.Left {
// Form H * C or // Form H * C or
// W = C^T V. // W = C V.
// W = C2^T. // W = C2.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork)
} }
@@ -218,26 +218,26 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, v[(m-k)*ldv:], ldv, 1, v[(m-k)*ldv:], ldv,
work, ldwork) work, ldwork)
if m > k { if m > k {
// W += C1^T * V1. // W += C1 * V1.
bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k,
1, c, ldc, v, ldv, 1, c, ldc, v, ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
// C -= V * W^T. // C -= V * W.
if m > k { if m > k {
bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k,
-1, v, ldv, work, ldwork, -1, v, ldv, work, ldwork,
1, c, ldc) 1, c, ldc)
} }
// W *= V2^T. // W *= V2.
bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k,
1, v[(m-k)*ldv:], ldv, 1, v[(m-k)*ldv:], ldv,
work, ldwork) work, ldwork)
// C2 -= W^T. // C2 -= W.
// TODO(btracey): This should use blas.Axpy. // TODO(btracey): This should use blas.Axpy.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
@@ -246,7 +246,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
} }
return return
} }
// Form C * H or C * H^T where C = (C1 C2). // Form C * H or C * H where C = (C1 C2).
// W = C * V. // W = C * V.
// W = C2. // W = C2.
@@ -263,18 +263,18 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c, ldc, v, ldv, 1, c, ldc, v, ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
// C -= W * V^T. // C -= W * V.
if n > k { if n > k {
// C1 -= W * V1^T. // C1 -= W * V1.
bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k, bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k,
-1, work, ldwork, v, ldv, -1, work, ldwork, v, ldv,
1, c, ldc) 1, c, ldc)
} }
// W *= V2^T. // W *= V2.
bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k,
1, v[(n-k)*ldv:], ldv, 1, v[(n-k)*ldv:], ldv,
work, ldwork) work, ldwork)
@@ -291,14 +291,14 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
if direct == lapack.Forward { if direct == lapack.Forward {
// V = (V1 V2) where v1 is unit upper triangular. // V = (V1 V2) where v1 is unit upper triangular.
if side == blas.Left { if side == blas.Left {
// Form H * C or H^T * C where C = (C1; C2). // Form H * C or H * C where C = (C1; C2).
// W = C^T * V^T. // W = C * V.
// W = C1^T. // W = C1.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork) bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork)
} }
// W *= V1^T. // W *= V1.
bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k,
1, v, ldv, 1, v, ldv,
work, ldwork) work, ldwork)
@@ -307,11 +307,11 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c[k*ldc:], ldc, v[k:], ldv, 1, c[k*ldc:], ldc, v[k:], ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
// C -= V^T * W^T. // C -= V * W.
if m > k { if m > k {
bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k,
-1, v[k:], ldv, work, ldwork, -1, v[k:], ldv, work, ldwork,
@@ -321,7 +321,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k,
1, v, ldv, 1, v, ldv,
work, ldwork) work, ldwork)
// C1 -= W^T. // C1 -= W.
// TODO(btracey): This should use blas.Axpy. // TODO(btracey): This should use blas.Axpy.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
@@ -330,14 +330,14 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
} }
return return
} }
// Form C * H or C * H^T where C = (C1 C2). // Form C * H or C * H where C = (C1 C2).
// W = C * V^T. // W = C * V.
// W = C1. // W = C1.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
bi.Dcopy(m, c[j:], ldc, work[j:], ldwork) bi.Dcopy(m, c[j:], ldc, work[j:], ldwork)
} }
// W *= V1^T. // W *= V1.
bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k,
1, v, ldv, 1, v, ldv,
work, ldwork) work, ldwork)
@@ -346,7 +346,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c[k:], ldc, v[k:], ldv, 1, c[k:], ldc, v[k:], ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
@@ -371,14 +371,14 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
} }
// V = (V1 V2) where V2 is the last k columns and is lower unit triangular. // V = (V1 V2) where V2 is the last k columns and is lower unit triangular.
if side == blas.Left { if side == blas.Left {
// Form H * C or H^T C where C = (C1 ; C2). // Form H * C or H C where C = (C1 ; C2).
// W = C^T * V^T. // W = C * V.
// W = C2^T. // W = C2.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork)
} }
// W *= V2^T. // W *= V2.
bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k,
1, v[m-k:], ldv, 1, v[m-k:], ldv,
work, ldwork) work, ldwork)
@@ -387,11 +387,11 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c, ldc, v, ldv, 1, c, ldc, v, ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)
// C -= V^T * W^T. // C -= V * W.
if m > k { if m > k {
bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k,
-1, v, ldv, work, ldwork, -1, v, ldv, work, ldwork,
@@ -401,7 +401,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, n, k, bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, n, k,
1, v[m-k:], ldv, 1, v[m-k:], ldv,
work, ldwork) work, ldwork)
// C2 -= W^T. // C2 -= W.
// TODO(btracey): This should use blas.Axpy. // TODO(btracey): This should use blas.Axpy.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
@@ -410,13 +410,13 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
} }
return return
} }
// Form C * H or C * H^T where C = (C1 C2). // Form C * H or C * H where C = (C1 C2).
// W = C * V^T. // W = C * V.
// W = C2. // W = C2.
for j := 0; j < k; j++ { for j := 0; j < k; j++ {
bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork) bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork)
} }
// W *= V2^T. // W *= V2.
bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k,
1, v[n-k:], ldv, 1, v[n-k:], ldv,
work, ldwork) work, ldwork)
@@ -425,7 +425,7 @@ func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack
1, c, ldc, v, ldv, 1, c, ldc, v, ldv,
1, work, ldwork) 1, work, ldwork)
} }
// W *= T or T^T. // W *= T or T.
bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k,
1, t, ldt, 1, t, ldt,
work, ldwork) work, ldwork)

View File

@@ -14,9 +14,9 @@ import (
// a real elementary reflector of order n such that // a real elementary reflector of order n such that
// H * (alpha) = (beta) // H * (alpha) = (beta)
// ( x) ( 0) // ( x) ( 0)
// H^T * H = I // H * H = I
// H is represented in the form // H is represented in the form
// H = 1 - tau * (1; v) * (1 v^T) // H = 1 - tau * (1; v) * (1 v)
// where tau is a real scalar. // where tau is a real scalar.
// //
// On entry, x contains the vector x, on exit it contains v. // On entry, x contains the vector x, on exit it contains v.

View File

@@ -12,8 +12,8 @@ import (
// Dlarft forms the triangular factor T of a block reflector H, storing the answer // Dlarft forms the triangular factor T of a block reflector H, storing the answer
// in t. // in t.
// H = I - V * T * V^T if store == lapack.ColumnWise // H = I - V * T * V if store == lapack.ColumnWise
// H = I - V^T * T * V if store == lapack.RowWise // H = I - V * T * V if store == lapack.RowWise
// H is defined by a product of the elementary reflectors where // 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_0 * H_1 * ... * H_{k-1} if direct == lapack.Forward
// H = H_{k-1} * ... * H_1 * H_0 if direct == lapack.Backward // H = H_{k-1} * ... * H_1 * H_0 if direct == lapack.Backward

View File

@@ -11,7 +11,7 @@ import "gonum.org/v1/gonum/blas"
// than 11. // than 11.
// //
// H is represented in the form // H is represented in the form
// H = I - tau * v * v^T, // H = I - tau * v * v,
// where tau is a real scalar and v is a real vector. If tau = 0, then H is // where tau is a real scalar and v is a real vector. If tau = 0, then H is
// taken to be the identity matrix. // taken to be the identity matrix.
// //

View File

@@ -12,7 +12,7 @@ import (
// Dlasr applies a sequence of plane rotations to the m×n matrix A. This series // 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 // 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, // by a depending on the value of side -- A = P * A if side == lapack.Left,
// A = A * P^T if side == lapack.Right. // A = A * P if side == lapack.Right.
// //
// The exact value of P depends on the value of pivot, but in all cases P is // 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 // implicitly represented by a series of 2×2 rotation matrices. The entries of

View File

@@ -12,10 +12,10 @@ import (
// Dlasy2 solves the Sylvester matrix equation where the matrices are of order 1 // 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 // 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*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 = scale*B if tranl == true and tranr == false,
// TL*X + sgn*X*TR^T = scale*B, if tranl == false and tranr == true, // TL*X + sgn*X*TR = scale*B if tranl == false and tranr == true,
// TL^T*X + sgn*X*TR^T = scale*B, if tranl == true and tranr == true, // TL*X + sgn*X*TR = 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. // 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 // isgn must be 1 or -1, and n1 and n2 must be 0, 1, or 2, but these conditions

452
vendor/gonum.org/v1/gonum/lapack/gonum/dlatbs.go generated vendored Normal file
View File

@@ -0,0 +1,452 @@
// Copyright ©2019 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 gonum
import (
"math"
"gonum.org/v1/gonum/blas"
"gonum.org/v1/gonum/blas/blas64"
)
// Dlatbs solves a triangular banded system of equations
// A * x = s*b if trans == blas.NoTrans
// Aᵀ * x = s*b if trans == blas.Trans or blas.ConjTrans
// where A is an upper or lower triangular band matrix, x and b are n-element
// vectors, and s is a scaling factor chosen so that the components of x will be
// less than the overflow threshold.
//
// On entry, x contains the right-hand side b of the triangular system.
// On return, x is overwritten by the solution vector x.
//
// normin specifies whether the cnorm parameter contains the column norms of A on
// entry. If it is true, cnorm[j] contains the norm of the off-diagonal part of
// the j-th column of A. If it is false, the norms will be computed and stored
// in cnorm.
//
// Dlatbs returns the scaling factor s for the triangular system. If the matrix
// A is singular (A[j,j]==0 for some j), then scale is set to 0 and a
// non-trivial solution to A*x = 0 is returned.
//
// Dlatbs is an internal routine. It is exported for testing purposes.
func (Implementation) Dlatbs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, normin bool, n, kd int, ab []float64, ldab int, x, cnorm []float64) (scale float64) {
noTran := trans == blas.NoTrans
switch {
case uplo != blas.Upper && uplo != blas.Lower:
panic(badUplo)
case !noTran && trans != blas.Trans && trans != blas.ConjTrans:
panic(badTrans)
case diag != blas.NonUnit && diag != blas.Unit:
panic(badDiag)
case n < 0:
panic(nLT0)
case kd < 0:
panic(kdLT0)
case ldab < kd+1:
panic(badLdA)
}
// Quick return if possible.
if n == 0 {
return 0
}
switch {
case len(ab) < (n-1)*ldab+kd+1:
panic(shortAB)
case len(x) < n:
panic(shortX)
case len(cnorm) < n:
panic(shortCNorm)
}
// Parameters to control overflow.
smlnum := dlamchS / dlamchP
bignum := 1 / smlnum
bi := blas64.Implementation()
kld := max(1, ldab-1)
if !normin {
// Compute the 1-norm of each column, not including the diagonal.
if uplo == blas.Upper {
for j := 0; j < n; j++ {
jlen := min(j, kd)
if jlen > 0 {
cnorm[j] = bi.Dasum(jlen, ab[(j-jlen)*ldab+jlen:], kld)
} else {
cnorm[j] = 0
}
}
} else {
for j := 0; j < n; j++ {
jlen := min(n-j-1, kd)
if jlen > 0 {
cnorm[j] = bi.Dasum(jlen, ab[(j+1)*ldab+kd-1:], kld)
} else {
cnorm[j] = 0
}
}
}
}
// Set up indices and increments for loops below.
var (
jFirst, jLast, jInc int
maind int
)
if noTran {
if uplo == blas.Upper {
jFirst = n - 1
jLast = -1
jInc = -1
maind = 0
} else {
jFirst = 0
jLast = n
jInc = 1
maind = kd
}
} else {
if uplo == blas.Upper {
jFirst = 0
jLast = n
jInc = 1
maind = 0
} else {
jFirst = n - 1
jLast = -1
jInc = -1
maind = kd
}
}
// Scale the column norms by tscal if the maximum element in cnorm is
// greater than bignum.
tmax := cnorm[bi.Idamax(n, cnorm, 1)]
tscal := 1.0
if tmax > bignum {
tscal = 1 / (smlnum * tmax)
bi.Dscal(n, tscal, cnorm, 1)
}
// Compute a bound on the computed solution vector to see if the Level 2
// BLAS routine Dtbsv can be used.
xMax := math.Abs(x[bi.Idamax(n, x, 1)])
xBnd := xMax
grow := 0.0
// Compute the growth only if the maximum element in cnorm is NOT greater
// than bignum.
if tscal != 1 {
goto skipComputeGrow
}
if noTran {
// Compute the growth in A * x = b.
if diag == blas.NonUnit {
// A is non-unit triangular.
//
// Compute grow = 1/G_j and xBnd = 1/M_j.
// Initially, G_0 = max{x(i), i=1,...,n}.
grow = 1 / math.Max(xBnd, smlnum)
xBnd = grow
for j := jFirst; j != jLast; j += jInc {
if grow <= smlnum {
// Exit the loop because the growth factor is too small.
goto skipComputeGrow
}
// M_j = G_{j-1} / abs(A[j,j])
tjj := math.Abs(ab[j*ldab+maind])
xBnd = math.Min(xBnd, math.Min(1, tjj)*grow)
if tjj+cnorm[j] >= smlnum {
// G_j = G_{j-1}*( 1 + cnorm[j] / abs(A[j,j]) )
grow *= tjj / (tjj + cnorm[j])
} else {
// G_j could overflow, set grow to 0.
grow = 0
}
}
grow = xBnd
} else {
// A is unit triangular.
//
// Compute grow = 1/G_j, where G_0 = max{x(i), i=1,...,n}.
grow = math.Min(1, 1/math.Max(xBnd, smlnum))
for j := jFirst; j != jLast; j += jInc {
if grow <= smlnum {
// Exit the loop because the growth factor is too small.
goto skipComputeGrow
}
// G_j = G_{j-1}*( 1 + cnorm[j] )
grow /= 1 + cnorm[j]
}
}
} else {
// Compute the growth in Aᵀ * x = b.
if diag == blas.NonUnit {
// A is non-unit triangular.
//
// Compute grow = 1/G_j and xBnd = 1/M_j.
// Initially, G_0 = max{x(i), i=1,...,n}.
grow = 1 / math.Max(xBnd, smlnum)
xBnd = grow
for j := jFirst; j != jLast; j += jInc {
if grow <= smlnum {
// Exit the loop because the growth factor is too small.
goto skipComputeGrow
}
// G_j = max( G_{j-1}, M_{j-1}*( 1 + cnorm[j] ) )
xj := 1 + cnorm[j]
grow = math.Min(grow, xBnd/xj)
// M_j = M_{j-1}*( 1 + cnorm[j] ) / abs(A[j,j])
tjj := math.Abs(ab[j*ldab+maind])
if xj > tjj {
xBnd *= tjj / xj
}
}
grow = math.Min(grow, xBnd)
} else {
// A is unit triangular.
//
// Compute grow = 1/G_j, where G_0 = max{x(i), i=1,...,n}.
grow = math.Min(1, 1/math.Max(xBnd, smlnum))
for j := jFirst; j != jLast; j += jInc {
if grow <= smlnum {
// Exit the loop because the growth factor is too small.
goto skipComputeGrow
}
// G_j = G_{j-1}*( 1 + cnorm[j] )
grow /= 1 + cnorm[j]
}
}
}
skipComputeGrow:
if grow*tscal > smlnum {
// The reciprocal of the bound on elements of X is not too small, use
// the Level 2 BLAS solve.
bi.Dtbsv(uplo, trans, diag, n, kd, ab, ldab, x, 1)
// Scale the column norms by 1/tscal for return.
if tscal != 1 {
bi.Dscal(n, 1/tscal, cnorm, 1)
}
return 1
}
// Use a Level 1 BLAS solve, scaling intermediate results.
scale = 1
if xMax > bignum {
// Scale x so that its components are less than or equal to bignum in
// absolute value.
scale = bignum / xMax
bi.Dscal(n, scale, x, 1)
xMax = bignum
}
if noTran {
// Solve A * x = b.
for j := jFirst; j != jLast; j += jInc {
// Compute x[j] = b[j] / A[j,j], scaling x if necessary.
xj := math.Abs(x[j])
tjjs := tscal
if diag == blas.NonUnit {
tjjs *= ab[j*ldab+maind]
}
tjj := math.Abs(tjjs)
switch {
case tjj > smlnum:
// smlnum < abs(A[j,j])
if tjj < 1 && xj > tjj*bignum {
// Scale x by 1/b[j].
rec := 1 / xj
bi.Dscal(n, rec, x, 1)
scale *= rec
xMax *= rec
}
x[j] /= tjjs
xj = math.Abs(x[j])
case tjj > 0:
// 0 < abs(A[j,j]) <= smlnum
if xj > tjj*bignum {
// Scale x by (1/abs(x[j]))*abs(A[j,j])*bignum to avoid
// overflow when dividing by A[j,j].
rec := tjj * bignum / xj
if cnorm[j] > 1 {
// Scale by 1/cnorm[j] to avoid overflow when
// multiplying x[j] times column j.
rec /= cnorm[j]
}
bi.Dscal(n, rec, x, 1)
scale *= rec
xMax *= rec
}
x[j] /= tjjs
xj = math.Abs(x[j])
default:
// A[j,j] == 0: Set x[0:n] = 0, x[j] = 1, and scale = 0, and
// compute a solution to A*x = 0.
for i := range x[:n] {
x[i] = 0
}
x[j] = 1
xj = 1
scale = 0
xMax = 0
}
// Scale x if necessary to avoid overflow when adding a multiple of
// column j of A.
switch {
case xj > 1:
rec := 1 / xj
if cnorm[j] > (bignum-xMax)*rec {
// Scale x by 1/(2*abs(x[j])).
rec *= 0.5
bi.Dscal(n, rec, x, 1)
scale *= rec
}
case xj*cnorm[j] > bignum-xMax:
// Scale x by 1/2.
bi.Dscal(n, 0.5, x, 1)
scale *= 0.5
}
if uplo == blas.Upper {
if j > 0 {
// Compute the update
// x[max(0,j-kd):j] := x[max(0,j-kd):j] - x[j] * A[max(0,j-kd):j,j]
jlen := min(j, kd)
if jlen > 0 {
bi.Daxpy(jlen, -x[j]*tscal, ab[(j-jlen)*ldab+jlen:], kld, x[j-jlen:], 1)
}
i := bi.Idamax(j, x, 1)
xMax = math.Abs(x[i])
}
} else if j < n-1 {
// Compute the update
// x[j+1:min(j+kd,n)] := x[j+1:min(j+kd,n)] - x[j] * A[j+1:min(j+kd,n),j]
jlen := min(kd, n-j-1)
if jlen > 0 {
bi.Daxpy(jlen, -x[j]*tscal, ab[(j+1)*ldab+kd-1:], kld, x[j+1:], 1)
}
i := j + 1 + bi.Idamax(n-j-1, x[j+1:], 1)
xMax = math.Abs(x[i])
}
}
} else {
// Solve Aᵀ * x = b.
for j := jFirst; j != jLast; j += jInc {
// Compute x[j] = b[j] - sum A[k,j]*x[k].
// k!=j
xj := math.Abs(x[j])
tjjs := tscal
if diag == blas.NonUnit {
tjjs *= ab[j*ldab+maind]
}
tjj := math.Abs(tjjs)
rec := 1 / math.Max(1, xMax)
uscal := tscal
if cnorm[j] > (bignum-xj)*rec {
// If x[j] could overflow, scale x by 1/(2*xMax).
rec *= 0.5
if tjj > 1 {
// Divide by A[j,j] when scaling x if A[j,j] > 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 the scaling needed for A in the dot product is 1, call
// Ddot to perform the dot product...
if uplo == blas.Upper {
jlen := min(j, kd)
if jlen > 0 {
sumj = bi.Ddot(jlen, ab[(j-jlen)*ldab+jlen:], kld, x[j-jlen:], 1)
}
} else {
jlen := min(n-j-1, kd)
if jlen > 0 {
sumj = bi.Ddot(jlen, ab[(j+1)*ldab+kd-1:], kld, x[j+1:], 1)
}
}
} else {
// ...otherwise, use in-line code for the dot product.
if uplo == blas.Upper {
jlen := min(j, kd)
for i := 0; i < jlen; i++ {
sumj += (ab[(j-jlen+i)*ldab+jlen-i] * uscal) * x[j-jlen+i]
}
} else {
jlen := min(n-j-1, kd)
for i := 0; i < jlen; i++ {
sumj += (ab[(j+1+i)*ldab+kd-1-i] * uscal) * x[j+i+1]
}
}
}
if uscal == tscal {
// Compute x[j] := ( x[j] - sumj ) / A[j,j]
// if 1/A[j,j] was not used to scale the dot product.
x[j] -= sumj
xj = math.Abs(x[j])
// Compute x[j] = x[j] / A[j,j], scaling if necessary.
// Note: the reference implementation skips this step for blas.Unit matrices
// when tscal is equal to 1 but it complicates the logic and only saves
// the comparison and division in the first switch-case. Not skipping it
// is also consistent with the NoTrans case above.
switch {
case tjj > smlnum:
// smlnum < abs(A[j,j]):
if tjj < 1 && xj > tjj*bignum {
// Scale x by 1/abs(x[j]).
rec := 1 / xj
bi.Dscal(n, rec, x, 1)
scale *= rec
xMax *= rec
}
x[j] /= tjjs
case tjj > 0:
// 0 < abs(A[j,j]) <= smlnum:
if xj > tjj*bignum {
// Scale x by (1/abs(x[j]))*abs(A[j,j])*bignum.
rec := (tjj * bignum) / xj
bi.Dscal(n, rec, x, 1)
scale *= rec
xMax *= rec
}
x[j] /= tjjs
default:
// A[j,j] == 0: Set x[0:n] = 0, x[j] = 1, and scale = 0, and
// compute a solution Aᵀ * x = 0.
for i := range x[:n] {
x[i] = 0
}
x[j] = 1
scale = 0
xMax = 0
}
} else {
// Compute x[j] := x[j] / A[j,j] - sumj
// if the dot product has already been divided by 1/A[j,j].
x[j] = x[j]/tjjs - sumj
}
xMax = math.Max(xMax, math.Abs(x[j]))
}
scale /= tscal
}
// Scale the column norms by 1/tscal for return.
if tscal != 1 {
bi.Dscal(n, 1/tscal, cnorm, 1)
}
return scale
}

View File

@@ -11,7 +11,7 @@ import (
// Dlatrd reduces nb rows and columns of a real n×n symmetric matrix A to symmetric // Dlatrd reduces nb rows and columns of a real n×n symmetric matrix A to symmetric
// tridiagonal form. It computes the orthonormal similarity transformation // tridiagonal form. It computes the orthonormal similarity transformation
// Q^T * A * Q // Q * A * Q
// and returns the matrices V and W to apply to the unreduced part of A. If // 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 // 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 // reduced. If uplo == blas.Lower, the lower triangle is supplied and the first
@@ -51,7 +51,7 @@ import (
// //
// The matrix Q is represented as a product of elementary reflectors. Each reflector // The matrix Q is represented as a product of elementary reflectors. Each reflector
// H has the form // H has the form
// I - tau * v * v^T // I - tau * v * v
// If uplo == blas.Upper, // If uplo == blas.Upper,
// Q = H_{n-1} * H_{n-2} * ... * H_{n-nb} // 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. // where v[:i-1] is stored in A[:i-1,i], v[i-1] = 1, and v[i:n] = 0.
@@ -62,7 +62,7 @@ import (
// //
// The vectors v form the n×nb matrix V which is used with W to apply a // 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 // symmetric rank-2 update to the unreduced part of A
// A = A - V * W^T - W * V^T // A = A - V * W - W * V
// //
// Dlatrd is an internal routine. It is exported for testing purposes. // 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) { func (impl Implementation) Dlatrd(uplo blas.Uplo, n, nb int, a []float64, lda int, e, tau, w []float64, ldw int) {

View File

@@ -14,7 +14,7 @@ import (
// Dlatrs solves a triangular system of equations scaled to prevent overflow. It // Dlatrs solves a triangular system of equations scaled to prevent overflow. It
// solves // solves
// A * x = scale * b if trans == blas.NoTrans // A * x = scale * b if trans == blas.NoTrans
// A^T * x = scale * b if trans == blas.Trans // A * x = scale * b if trans == blas.Trans
// where the scale s is set for numeric stability. // 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 // A is an n×n triangular matrix. On entry, the slice x contains the values of

View File

@@ -10,8 +10,8 @@ import (
) )
// Dlauu2 computes the product // Dlauu2 computes the product
// U * U^T if uplo is blas.Upper // U * U if uplo is blas.Upper
// L^T * L if uplo is blas.Lower // L * L if uplo is blas.Lower
// where U or L is stored in the upper or lower triangular part of A. // where U or L is stored in the upper or lower triangular part of A.
// Only the upper or lower triangle of the result is stored, overwriting // Only the upper or lower triangle of the result is stored, overwriting
// the corresponding factor in A. // the corresponding factor in A.
@@ -37,7 +37,7 @@ func (impl Implementation) Dlauu2(uplo blas.Uplo, n int, a []float64, lda int) {
bi := blas64.Implementation() bi := blas64.Implementation()
if uplo == blas.Upper { if uplo == blas.Upper {
// Compute the product U*U^T. // Compute the product U*U.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
aii := a[i*lda+i] aii := a[i*lda+i]
if i < n-1 { if i < n-1 {
@@ -49,7 +49,7 @@ func (impl Implementation) Dlauu2(uplo blas.Uplo, n int, a []float64, lda int) {
} }
} }
} else { } else {
// Compute the product L^T*L. // Compute the product L*L.
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
aii := a[i*lda+i] aii := a[i*lda+i]
if i < n-1 { if i < n-1 {

View File

@@ -10,8 +10,8 @@ import (
) )
// Dlauum computes the product // Dlauum computes the product
// U * U^T if uplo is blas.Upper // U * U if uplo is blas.Upper
// L^T * L if uplo is blas.Lower // L * L if uplo is blas.Lower
// where U or L is stored in the upper or lower triangular part of A. // where U or L is stored in the upper or lower triangular part of A.
// Only the upper or lower triangle of the result is stored, overwriting // Only the upper or lower triangle of the result is stored, overwriting
// the corresponding factor in A. // the corresponding factor in A.
@@ -50,7 +50,7 @@ func (impl Implementation) Dlauum(uplo blas.Uplo, n int, a []float64, lda int) {
// Use blocked code. // Use blocked code.
bi := blas64.Implementation() bi := blas64.Implementation()
if uplo == blas.Upper { if uplo == blas.Upper {
// Compute the product U*U^T. // Compute the product U*U.
for i := 0; i < n; i += nb { for i := 0; i < n; i += nb {
ib := min(nb, n-i) ib := min(nb, n-i)
bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.NonUnit, bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.NonUnit,
@@ -64,7 +64,7 @@ func (impl Implementation) Dlauum(uplo blas.Uplo, n int, a []float64, lda int) {
} }
} }
} else { } else {
// Compute the product L^T*L. // Compute the product L*L.
for i := 0; i < n; i += nb { for i := 0; i < n; i += nb {
ib := min(nb, n-i) ib := min(nb, n-i)
bi.Dtrmm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit, bi.Dtrmm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit,

View File

@@ -6,17 +6,17 @@ package gonum
import "gonum.org/v1/gonum/lapack" import "gonum.org/v1/gonum/lapack"
// Dorgbr generates one of the matrices Q or P^T computed by Dgebrd // Dorgbr generates one of the matrices Q or P computed by Dgebrd
// computed from the decomposition Dgebrd. See Dgebd2 for the description of // computed from the decomposition Dgebrd. See Dgebd2 for the description of
// Q and P^T. // Q and P.
// //
// If vect == lapack.GenerateQ, then a is assumed to have been an m×k matrix and // If vect == lapack.GenerateQ, 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 // 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. // where m >= n >= k. If m < k, then Dorgbr returns Q as an m×m matrix.
// //
// If vect == lapack.GeneratePT, then A is assumed to have been a k×n matrix, and // If vect == lapack.GeneratePT, 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, // P is of order n. If k < n, then Dorgbr returns the first m rows of P,
// where n >= m >= k. If k >= n, then Dorgbr returns P^T as an n×n matrix. // where n >= m >= k. If k >= n, then Dorgbr returns P as an n×n matrix.
// //
// Dorgbr is an internal routine. It is exported for testing purposes. // Dorgbr is an internal routine. It is exported for testing purposes.
func (impl Implementation) Dorgbr(vect lapack.GenOrtho, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) { func (impl Implementation) Dorgbr(vect lapack.GenOrtho, m, n, k int, a []float64, lda int, tau, work []float64, lwork int) {
@@ -112,12 +112,12 @@ func (impl Implementation) Dorgbr(vect lapack.GenOrtho, m, n, k int, a []float64
} }
} }
} else { } else {
// Form P^T, determined by a call to Dgebrd to reduce a k×n matrix. // Form P, determined by a call to Dgebrd to reduce a k×n matrix.
if k < n { if k < n {
impl.Dorglq(m, n, k, a, lda, tau, work, lwork) impl.Dorglq(m, n, k, a, lda, tau, work, lwork)
} else { } else {
// Shift the vectors which define the elementary reflectors one // Shift the vectors which define the elementary reflectors one
// row downward, and set the first row and column of P^T to // row downward, and set the first row and column of P to
// those of the unit matrix. // those of the unit matrix.
a[0] = 1 a[0] = 1
for i := 1; i < n; i++ { for i := 1; i < n; i++ {

View File

@@ -15,8 +15,8 @@ package gonum
// //
// ilo and ihi must have the same values as in the previous call of Dgehrd. It // ilo and ihi must have the same values as in the previous call of Dgehrd. It
// must hold that // must hold that
// 0 <= ilo <= ihi < n, if n > 0, // 0 <= ilo <= ihi < n if n > 0,
// ilo = 0, ihi = -1, if n == 0. // ilo = 0, ihi = -1 if n == 0.
// //
// tau contains the scalar factors of the elementary reflectors, as returned by // tau contains the scalar factors of the elementary reflectors, as returned by
// Dgehrd. tau must have length n-1. // Dgehrd. tau must have length n-1.

View File

@@ -9,9 +9,9 @@ import "gonum.org/v1/gonum/blas"
// Dorm2r multiplies a general matrix C by an orthogonal matrix from a QR factorization // Dorm2r multiplies a general matrix C by an orthogonal matrix from a QR factorization
// determined by Dgeqrf. // determined by Dgeqrf.
// C = Q * C if side == blas.Left and trans == blas.NoTrans // C = Q * C if side == blas.Left and trans == blas.NoTrans
// C = Q^T * C if side == blas.Left and trans == blas.Trans // C = Q * C if side == blas.Left and trans == blas.Trans
// C = C * Q if side == blas.Right and trans == blas.NoTrans // C = C * Q if side == blas.Right and trans == blas.NoTrans
// C = C * Q^T if side == blas.Right and trans == blas.Trans // C = C * Q 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 // If side == blas.Left, a is a matrix of size m×k, and if side == blas.Right
// a is of size n×k. // a is of size n×k.
// //

View File

@@ -15,15 +15,15 @@ import (
// Dormbr overwrites the m×n matrix C with // Dormbr overwrites the m×n matrix C with
// Q * C if vect == lapack.ApplyQ, side == blas.Left, and trans == blas.NoTrans // 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 // 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 // Q * 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 // C * Q if vect == lapack.ApplyQ, side == blas.Right, and trans == blas.Trans
// //
// P * C if vect == lapack.ApplyP, side == blas.Left, and trans == blas.NoTrans // 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 // 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 // P * 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 // C * P if vect == lapack.ApplyP, side == blas.Right, and trans == blas.Trans
// where P and Q are the orthogonal matrices determined by Dgebrd when reducing // 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 // a matrix A to bidiagonal form: A = Q * B * P. See Dgebrd for the
// definitions of Q and P. // definitions of Q and P.
// //
// If vect == lapack.ApplyQ, A is assumed to have been an nq×k matrix, while if // If vect == lapack.ApplyQ, A is assumed to have been an nq×k matrix, while if

View File

@@ -7,10 +7,10 @@ package gonum
import "gonum.org/v1/gonum/blas" import "gonum.org/v1/gonum/blas"
// Dormhr multiplies an m×n general matrix C with an nq×nq orthogonal matrix Q // 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 * C if side == blas.Left and trans == blas.NoTrans,
// Q^T * C, if side == blas.Left and trans == blas.Trans, // Q * C if side == blas.Left and trans == blas.Trans,
// C * Q, if side == blas.Right and trans == blas.NoTrans, // C * Q if side == blas.Right and trans == blas.NoTrans,
// C * Q^T, if side == blas.Right and trans == blas.Trans, // C * Q if side == blas.Right and trans == blas.Trans,
// where nq == m if side == blas.Left and nq == n if side == blas.Right. // 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 // Q is defined implicitly as the product of ihi-ilo elementary reflectors, as
@@ -21,10 +21,10 @@ import "gonum.org/v1/gonum/blas"
// //
// ilo and ihi must have the same values as in the previous call of Dgehrd. It // ilo and ihi must have the same values as in the previous call of Dgehrd. It
// must hold that // must hold that
// 0 <= ilo <= ihi < m, if m > 0 and side == blas.Left, // 0 <= ilo <= ihi < m if m > 0 and side == blas.Left,
// ilo = 0 and ihi = -1, 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, // 0 <= ilo <= ihi < n if n > 0 and side == blas.Right,
// ilo = 0 and ihi = -1, 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 // 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 // side == blas.Right. The matrix contains vectors which define the elementary

View File

@@ -9,9 +9,9 @@ import "gonum.org/v1/gonum/blas"
// Dorml2 multiplies a general matrix C by an orthogonal matrix from an LQ factorization // Dorml2 multiplies a general matrix C by an orthogonal matrix from an LQ factorization
// determined by Dgelqf. // determined by Dgelqf.
// C = Q * C if side == blas.Left and trans == blas.NoTrans // C = Q * C if side == blas.Left and trans == blas.NoTrans
// C = Q^T * C if side == blas.Left and trans == blas.Trans // C = Q * C if side == blas.Left and trans == blas.Trans
// C = C * Q if side == blas.Right and trans == blas.NoTrans // C = C * Q if side == blas.Right and trans == blas.NoTrans
// C = C * Q^T if side == blas.Right and trans == blas.Trans // C = C * Q 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 // If side == blas.Left, a is a matrix of side k×m, and if side == blas.Right
// a is of size k×n. // a is of size k×n.
// //

View File

@@ -12,9 +12,9 @@ import (
// Dormlq multiplies the matrix C by the orthogonal matrix Q defined by the // 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. // 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 * C if side == blas.Left and trans == blas.NoTrans
// C = Q^T * C if side == blas.Left and trans == blas.Trans // C = Q * C if side == blas.Left and trans == blas.Trans
// C = C * Q if side == blas.Right and trans == blas.NoTrans // C = C * Q if side == blas.Right and trans == blas.NoTrans
// C = C * Q^T if side == blas.Right and trans == blas.Trans // C = C * Q 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 // 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. // A is of size k×n. This uses a blocked algorithm.
// //

View File

@@ -10,10 +10,10 @@ import (
) )
// Dormqr multiplies an m×n matrix C by an orthogonal matrix Q as // 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 * C if side == blas.Left and trans == blas.NoTrans,
// C = Q^T * C, if side == blas.Left and trans == blas.Trans, // C = Q * C if side == blas.Left and trans == blas.Trans,
// C = C * Q, if side == blas.Right and trans == blas.NoTrans, // C = C * Q if side == blas.Right and trans == blas.NoTrans,
// C = C * Q^T, if side == blas.Right and trans == blas.Trans, // C = C * Q if side == blas.Right and trans == blas.Trans,
// where Q is defined as the product of k elementary reflectors // where Q is defined as the product of k elementary reflectors
// Q = H_0 * H_1 * ... * H_{k-1}. // Q = H_0 * H_1 * ... * H_{k-1}.
// //

View File

@@ -9,9 +9,9 @@ import "gonum.org/v1/gonum/blas"
// Dormr2 multiplies a general matrix C by an orthogonal matrix from a RQ factorization // Dormr2 multiplies a general matrix C by an orthogonal matrix from a RQ factorization
// determined by Dgerqf. // determined by Dgerqf.
// C = Q * C if side == blas.Left and trans == blas.NoTrans // C = Q * C if side == blas.Left and trans == blas.NoTrans
// C = Q^T * C if side == blas.Left and trans == blas.Trans // C = Q * C if side == blas.Left and trans == blas.Trans
// C = C * Q if side == blas.Right and trans == blas.NoTrans // C = C * Q if side == blas.Right and trans == blas.NoTrans
// C = C * Q^T if side == blas.Right and trans == blas.Trans // C = C * Q 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 // If side == blas.Left, a is a matrix of size k×m, and if side == blas.Right
// a is of size k×n. // a is of size k×n.
// //

108
vendor/gonum.org/v1/gonum/lapack/gonum/dpbcon.go generated vendored Normal file
View File

@@ -0,0 +1,108 @@
// Copyright ©2019 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 gonum
import (
"math"
"gonum.org/v1/gonum/blas"
"gonum.org/v1/gonum/blas/blas64"
)
// Dpbcon returns an estimate of the reciprocal of the condition number (in the
// 1-norm) of an n×n symmetric positive definite band matrix using the Cholesky
// factorization
// A = Uᵀ*U if uplo == blas.Upper
// A = L*Lᵀ if uplo == blas.Lower
// computed by Dpbtrf. The estimate is obtained for norm(inv(A)), and the
// reciprocal of the condition number is computed as
// rcond = 1 / (anorm * norm(inv(A))).
//
// The length of work must be at least 3*n and the length of iwork must be at
// least n.
func (impl Implementation) Dpbcon(uplo blas.Uplo, n, kd int, ab []float64, ldab int, anorm float64, work []float64, iwork []int) (rcond float64) {
switch {
case uplo != blas.Upper && uplo != blas.Lower:
panic(badUplo)
case n < 0:
panic(nLT0)
case kd < 0:
panic(kdLT0)
case ldab < kd+1:
panic(badLdA)
case anorm < 0:
panic(badNorm)
}
// Quick return if possible.
if n == 0 {
return 1
}
switch {
case len(ab) < (n-1)*ldab+kd+1:
panic(shortAB)
case len(work) < 3*n:
panic(shortWork)
case len(iwork) < n:
panic(shortIWork)
}
// Quick return if possible.
if anorm == 0 {
return 0
}
const smlnum = dlamchS
var (
ainvnm float64
kase int
isave [3]int
normin bool
// Denote work slices.
x = work[:n]
v = work[n : 2*n]
cnorm = work[2*n : 3*n]
)
// Estimate the 1-norm of the inverse.
bi := blas64.Implementation()
for {
ainvnm, kase = impl.Dlacn2(n, v, x, iwork, ainvnm, kase, &isave)
if kase == 0 {
break
}
var op1, op2 blas.Transpose
if uplo == blas.Upper {
// Multiply x by inv(Uᵀ),
op1 = blas.Trans
// then by inv(Uᵀ).
op2 = blas.NoTrans
} else {
// Multiply x by inv(L),
op1 = blas.NoTrans
// then by inv(Lᵀ).
op2 = blas.Trans
}
scaleL := impl.Dlatbs(uplo, op1, blas.NonUnit, normin, n, kd, ab, ldab, x, cnorm)
normin = true
scaleU := impl.Dlatbs(uplo, op2, blas.NonUnit, normin, n, kd, ab, ldab, x, cnorm)
// Multiply x by 1/scale if doing so will not cause overflow.
scale := scaleL * scaleU
if scale != 1 {
ix := bi.Idamax(n, x, 1)
if scale < math.Abs(x[ix])*smlnum || scale == 0 {
return 0
}
impl.Drscl(n, scale, x, 1)
}
}
if ainvnm == 0 {
return 0
}
// Return the estimate of the reciprocal condition number.
return (1 / ainvnm) / anorm
}

View File

@@ -14,8 +14,8 @@ import (
// Dpbtf2 computes the Cholesky factorization of a symmetric positive banded // Dpbtf2 computes the Cholesky factorization of a symmetric positive banded
// matrix ab. The matrix ab is n×n with kd diagonal bands. The Cholesky // matrix ab. The matrix ab is n×n with kd diagonal bands. The Cholesky
// factorization computed is // factorization computed is
// A = U^T * U if ul == blas.Upper // A = U * U if ul == blas.Upper
// A = L * L^T if ul == blas.Lower // A = L * L if ul == blas.Lower
// ul also specifies the storage of ab. If ul == blas.Upper, then // ul also specifies the storage of ab. If ul == blas.Upper, then
// ab is stored as an upper-triangular banded matrix with kd super-diagonals, // ab is stored as an upper-triangular banded matrix with kd super-diagonals,
// and if ul == blas.Lower, ab is stored as a lower-triangular banded matrix // and if ul == blas.Lower, ab is stored as a lower-triangular banded matrix
@@ -47,9 +47,9 @@ import (
// version. // version.
// //
// Dpbtf2 is an internal routine, exported for testing purposes. // Dpbtf2 is an internal routine, exported for testing purposes.
func (Implementation) Dpbtf2(ul blas.Uplo, n, kd int, ab []float64, ldab int) (ok bool) { func (Implementation) Dpbtf2(uplo blas.Uplo, n, kd int, ab []float64, ldab int) (ok bool) {
switch { switch {
case ul != blas.Upper && ul != blas.Lower: case uplo != blas.Upper && uplo != blas.Lower:
panic(badUplo) panic(badUplo)
case n < 0: case n < 0:
panic(nLT0) panic(nLT0)
@@ -59,27 +59,29 @@ func (Implementation) Dpbtf2(ul blas.Uplo, n, kd int, ab []float64, ldab int) (o
panic(badLdA) panic(badLdA)
} }
// Quick return if possible.
if n == 0 { if n == 0 {
return return true
} }
if len(ab) < (n-1)*ldab+kd { if len(ab) < (n-1)*ldab+kd+1 {
panic(shortAB) panic(shortAB)
} }
bi := blas64.Implementation() bi := blas64.Implementation()
kld := max(1, ldab-1) kld := max(1, ldab-1)
if ul == blas.Upper { if uplo == blas.Upper {
// Compute the Cholesky factorization A = Uᵀ * U.
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
// Compute U(J,J) and test for non positive-definiteness. // Compute U(j,j) and test for non-positive-definiteness.
ajj := ab[j*ldab] ajj := ab[j*ldab]
if ajj <= 0 { if ajj <= 0 {
return false return false
} }
ajj = math.Sqrt(ajj) ajj = math.Sqrt(ajj)
ab[j*ldab] = ajj ab[j*ldab] = ajj
// Compute elements j+1:j+kn of row J and update the trailing submatrix // Compute elements j+1:j+kn of row j and update the trailing submatrix
// within the band. // within the band.
kn := min(kd, n-j-1) kn := min(kd, n-j-1)
if kn > 0 { if kn > 0 {
@@ -89,16 +91,16 @@ func (Implementation) Dpbtf2(ul blas.Uplo, n, kd int, ab []float64, ldab int) (o
} }
return true return true
} }
// Compute the Cholesky factorization A = L * Lᵀ.
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
// Compute L(J,J) and test for non positive-definiteness. // Compute L(j,j) and test for non-positive-definiteness.
ajj := ab[j*ldab+kd] ajj := ab[j*ldab+kd]
if ajj <= 0 { if ajj <= 0 {
return false return false
} }
ajj = math.Sqrt(ajj) ajj = math.Sqrt(ajj)
ab[j*ldab+kd] = ajj ab[j*ldab+kd] = ajj
// Compute elements j+1:j+kn of column j and update the trailing submatrix
// Compute elements J+1:J+KN of column J and update the trailing submatrix
// within the band. // within the band.
kn := min(kd, n-j-1) kn := min(kd, n-j-1)
if kn > 0 { if kn > 0 {

214
vendor/gonum.org/v1/gonum/lapack/gonum/dpbtrf.go generated vendored Normal file
View File

@@ -0,0 +1,214 @@
// Copyright ©2019 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 gonum
import (
"gonum.org/v1/gonum/blas"
"gonum.org/v1/gonum/blas/blas64"
)
// Dpbtrf computes the Cholesky factorization of an n×n symmetric positive
// definite band matrix
// A = Uᵀ * U if uplo == blas.Upper
// A = L * Lᵀ if uplo == blas.Lower
// where U is an upper triangular band matrix and L is lower triangular. kd is
// the number of super- or sub-diagonals of A.
//
// The band storage scheme is illustrated below when n = 6 and kd = 2. Elements
// marked * are not used by the function.
//
// uplo == blas.Upper
// On entry: On return:
// a00 a01 a02 u00 u01 u02
// a11 a12 a13 u11 u12 u13
// a22 a23 a24 u22 u23 u24
// a33 a34 a35 u33 u34 u35
// a44 a45 * u44 u45 *
// a55 * * u55 * *
//
// uplo == blas.Lower
// On entry: On return:
// * * a00 * * l00
// * a10 a11 * l10 l11
// a20 a21 a22 l20 l21 l22
// a31 a32 a33 l31 l32 l33
// a42 a43 a44 l42 l43 l44
// a53 a54 a55 l53 l54 l55
func (impl Implementation) Dpbtrf(uplo blas.Uplo, n, kd int, ab []float64, ldab int) (ok bool) {
const nbmax = 32
switch {
case uplo != blas.Upper && uplo != blas.Lower:
panic(badUplo)
case n < 0:
panic(nLT0)
case kd < 0:
panic(kdLT0)
case ldab < kd+1:
panic(badLdA)
}
// Quick return if possible.
if n == 0 {
return true
}
if len(ab) < (n-1)*ldab+kd+1 {
panic(shortAB)
}
opts := string(blas.Upper)
if uplo == blas.Lower {
opts = string(blas.Lower)
}
nb := impl.Ilaenv(1, "DPBTRF", opts, n, kd, -1, -1)
// The block size must not exceed the semi-bandwidth kd, and must not
// exceed the limit set by the size of the local array work.
nb = min(nb, nbmax)
if nb <= 1 || kd < nb {
// Use unblocked code.
return impl.Dpbtf2(uplo, n, kd, ab, ldab)
}
// Use blocked code.
ldwork := nb
work := make([]float64, nb*ldwork)
bi := blas64.Implementation()
if uplo == blas.Upper {
// Compute the Cholesky factorization of a symmetric band
// matrix, given the upper triangle of the matrix in band
// storage.
// Process the band matrix one diagonal block at a time.
for i := 0; i < n; i += nb {
ib := min(nb, n-i)
// Factorize the diagonal block.
ok := impl.Dpotf2(uplo, ib, ab[i*ldab:], ldab-1)
if !ok {
return false
}
if i+ib >= n {
continue
}
// Update the relevant part of the trailing submatrix.
// If A11 denotes the diagonal block which has just been
// factorized, then we need to update the remaining
// blocks in the diagram:
//
// A11 A12 A13
// A22 A23
// A33
//
// The numbers of rows and columns in the partitioning
// are ib, i2, i3 respectively. The blocks A12, A22 and
// A23 are empty if ib = kd. The upper triangle of A13
// lies outside the band.
i2 := min(kd-ib, n-i-ib)
if i2 > 0 {
// Update A12.
bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, ib, i2,
1, ab[i*ldab:], ldab-1, ab[i*ldab+ib:], ldab-1)
// Update A22.
bi.Dsyrk(blas.Upper, blas.Trans, i2, ib,
-1, ab[i*ldab+ib:], ldab-1, 1, ab[(i+ib)*ldab:], ldab-1)
}
i3 := min(ib, n-i-kd)
if i3 > 0 {
// Copy the lower triangle of A13 into the work array.
for ii := 0; ii < ib; ii++ {
for jj := 0; jj <= min(ii, i3-1); jj++ {
work[ii*ldwork+jj] = ab[(i+ii)*ldab+kd-ii+jj]
}
}
// Update A13 (in the work array).
bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, ib, i3,
1, ab[i*ldab:], ldab-1, work, ldwork)
// Update A23.
if i2 > 0 {
bi.Dgemm(blas.Trans, blas.NoTrans, i2, i3, ib,
-1, ab[i*ldab+ib:], ldab-1, work, ldwork,
1, ab[(i+ib)*ldab+kd-ib:], ldab-1)
}
// Update A33.
bi.Dsyrk(blas.Upper, blas.Trans, i3, ib,
-1, work, ldwork, 1, ab[(i+kd)*ldab:], ldab-1)
// Copy the lower triangle of A13 back into place.
for ii := 0; ii < ib; ii++ {
for jj := 0; jj <= min(ii, i3-1); jj++ {
ab[(i+ii)*ldab+kd-ii+jj] = work[ii*ldwork+jj]
}
}
}
}
} else {
// Compute the Cholesky factorization of a symmetric band
// matrix, given the lower triangle of the matrix in band
// storage.
// Process the band matrix one diagonal block at a time.
for i := 0; i < n; i += nb {
ib := min(nb, n-i)
// Factorize the diagonal block.
ok := impl.Dpotf2(uplo, ib, ab[i*ldab+kd:], ldab-1)
if !ok {
return false
}
if i+ib >= n {
continue
}
// Update the relevant part of the trailing submatrix.
// If A11 denotes the diagonal block which has just been
// factorized, then we need to update the remaining
// blocks in the diagram:
//
// A11
// A21 A22
// A31 A32 A33
//
// The numbers of rows and columns in the partitioning
// are ib, i2, i3 respectively. The blocks A21, A22 and
// A32 are empty if ib = kd. The lowr triangle of A31
// lies outside the band.
i2 := min(kd-ib, n-i-ib)
if i2 > 0 {
// Update A21.
bi.Dtrsm(blas.Right, blas.Lower, blas.Trans, blas.NonUnit, i2, ib,
1, ab[i*ldab+kd:], ldab-1, ab[(i+ib)*ldab+kd-ib:], ldab-1)
// Update A22.
bi.Dsyrk(blas.Lower, blas.NoTrans, i2, ib,
-1, ab[(i+ib)*ldab+kd-ib:], ldab-1, 1, ab[(i+ib)*ldab+kd:], ldab-1)
}
i3 := min(ib, n-i-kd)
if i3 > 0 {
// Copy the upper triangle of A31 into the work array.
for ii := 0; ii < i3; ii++ {
for jj := ii; jj < ib; jj++ {
work[ii*ldwork+jj] = ab[(ii+i+kd)*ldab+jj-ii]
}
}
// Update A31 (in the work array).
bi.Dtrsm(blas.Right, blas.Lower, blas.Trans, blas.NonUnit, i3, ib,
1, ab[i*ldab+kd:], ldab-1, work, ldwork)
// Update A32.
if i2 > 0 {
bi.Dgemm(blas.NoTrans, blas.Trans, i3, i2, ib,
-1, work, ldwork, ab[(i+ib)*ldab+kd-ib:], ldab-1,
1, ab[(i+kd)*ldab+ib:], ldab-1)
}
// Update A33.
bi.Dsyrk(blas.Lower, blas.NoTrans, i3, ib,
-1, work, ldwork, 1, ab[(i+kd)*ldab+kd:], ldab-1)
// Copy the upper triangle of A31 back into place.
for ii := 0; ii < i3; ii++ {
for jj := ii; jj < ib; jj++ {
ab[(ii+i+kd)*ldab+jj-ii] = work[ii*ldwork+jj]
}
}
}
}
}
return true
}

Some files were not shown because too many files have changed in this diff Show More