1// Copyright ©2015 The Gonum Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package mat
6
7import "gonum.org/v1/gonum/blas/blas64"
8
9func asBasicMatrix(d *Dense) *basicMatrix              { return (*basicMatrix)(d) }
10func asBasicVector(d *VecDense) *basicVector           { return (*basicVector)(d) }
11func asBasicSymmetric(s *SymDense) *basicSymmetric     { return (*basicSymmetric)(s) }
12func asBasicTriangular(t *TriDense) *basicTriangular   { return (*basicTriangular)(t) }
13func asBasicBanded(b *BandDense) *basicBanded          { return (*basicBanded)(b) }
14func asBasicSymBanded(s *SymBandDense) *basicSymBanded { return (*basicSymBanded)(s) }
15func asBasicTriBanded(t *TriBandDense) *basicTriBanded { return (*basicTriBanded)(t) }
16func asBasicDiagonal(d *DiagDense) *basicDiagonal      { return (*basicDiagonal)(d) }
17
18type basicMatrix Dense
19
20var _ Matrix = &basicMatrix{}
21
22func (m *basicMatrix) At(r, c int) float64 { return (*Dense)(m).At(r, c) }
23func (m *basicMatrix) Dims() (r, c int)    { return (*Dense)(m).Dims() }
24func (m *basicMatrix) T() Matrix           { return Transpose{m} }
25
26type basicVector VecDense
27
28var _ Vector = &basicVector{}
29
30func (v *basicVector) At(r, c int) float64 { return (*VecDense)(v).At(r, c) }
31func (v *basicVector) Dims() (r, c int)    { return (*VecDense)(v).Dims() }
32func (v *basicVector) T() Matrix           { return Transpose{v} }
33func (v *basicVector) AtVec(i int) float64 { return (*VecDense)(v).AtVec(i) }
34func (v *basicVector) Len() int            { return (*VecDense)(v).Len() }
35
36type rawVector struct {
37	*basicVector
38}
39
40func (v *rawVector) RawVector() blas64.Vector {
41	return v.basicVector.mat
42}
43
44type basicSymmetric SymDense
45
46var _ Symmetric = &basicSymmetric{}
47
48func (m *basicSymmetric) At(r, c int) float64 { return (*SymDense)(m).At(r, c) }
49func (m *basicSymmetric) Dims() (r, c int)    { return (*SymDense)(m).Dims() }
50func (m *basicSymmetric) T() Matrix           { return m }
51func (m *basicSymmetric) Symmetric() int      { return (*SymDense)(m).Symmetric() }
52
53type basicTriangular TriDense
54
55var _ Triangular = &basicTriangular{}
56
57func (m *basicTriangular) At(r, c int) float64      { return (*TriDense)(m).At(r, c) }
58func (m *basicTriangular) Dims() (r, c int)         { return (*TriDense)(m).Dims() }
59func (m *basicTriangular) T() Matrix                { return Transpose{m} }
60func (m *basicTriangular) Triangle() (int, TriKind) { return (*TriDense)(m).Triangle() }
61func (m *basicTriangular) TTri() Triangular         { return TransposeTri{m} }
62
63type basicBanded BandDense
64
65var _ Banded = &basicBanded{}
66
67func (m *basicBanded) At(r, c int) float64     { return (*BandDense)(m).At(r, c) }
68func (m *basicBanded) Dims() (r, c int)        { return (*BandDense)(m).Dims() }
69func (m *basicBanded) T() Matrix               { return Transpose{m} }
70func (m *basicBanded) Bandwidth() (kl, ku int) { return (*BandDense)(m).Bandwidth() }
71func (m *basicBanded) TBand() Banded           { return TransposeBand{m} }
72
73type basicSymBanded SymBandDense
74
75var _ SymBanded = &basicSymBanded{}
76
77func (m *basicSymBanded) At(r, c int) float64     { return (*SymBandDense)(m).At(r, c) }
78func (m *basicSymBanded) Dims() (r, c int)        { return (*SymBandDense)(m).Dims() }
79func (m *basicSymBanded) T() Matrix               { return m }
80func (m *basicSymBanded) Bandwidth() (kl, ku int) { return (*SymBandDense)(m).Bandwidth() }
81func (m *basicSymBanded) TBand() Banded           { return m }
82func (m *basicSymBanded) Symmetric() int          { return (*SymBandDense)(m).Symmetric() }
83func (m *basicSymBanded) SymBand() (n, k int)     { return (*SymBandDense)(m).SymBand() }
84
85type basicTriBanded TriBandDense
86
87var _ TriBanded = &basicTriBanded{}
88
89func (m *basicTriBanded) At(r, c int) float64               { return (*TriBandDense)(m).At(r, c) }
90func (m *basicTriBanded) Dims() (r, c int)                  { return (*TriBandDense)(m).Dims() }
91func (m *basicTriBanded) T() Matrix                         { return Transpose{m} }
92func (m *basicTriBanded) Triangle() (int, TriKind)          { return (*TriBandDense)(m).Triangle() }
93func (m *basicTriBanded) TTri() Triangular                  { return TransposeTri{m} }
94func (m *basicTriBanded) Bandwidth() (kl, ku int)           { return (*TriBandDense)(m).Bandwidth() }
95func (m *basicTriBanded) TBand() Banded                     { return TransposeBand{m} }
96func (m *basicTriBanded) TriBand() (n, k int, kind TriKind) { return (*TriBandDense)(m).TriBand() }
97func (m *basicTriBanded) TTriBand() TriBanded               { return TransposeTriBand{m} }
98
99type basicDiagonal DiagDense
100
101var _ Diagonal = &basicDiagonal{}
102
103func (m *basicDiagonal) At(r, c int) float64               { return (*DiagDense)(m).At(r, c) }
104func (m *basicDiagonal) Dims() (r, c int)                  { return (*DiagDense)(m).Dims() }
105func (m *basicDiagonal) T() Matrix                         { return Transpose{m} }
106func (m *basicDiagonal) Diag() int                         { return (*DiagDense)(m).Diag() }
107func (m *basicDiagonal) Symmetric() int                    { return (*DiagDense)(m).Symmetric() }
108func (m *basicDiagonal) SymBand() (n, k int)               { return (*DiagDense)(m).SymBand() }
109func (m *basicDiagonal) Bandwidth() (kl, ku int)           { return (*DiagDense)(m).Bandwidth() }
110func (m *basicDiagonal) TBand() Banded                     { return TransposeBand{m} }
111func (m *basicDiagonal) Triangle() (int, TriKind)          { return (*DiagDense)(m).Triangle() }
112func (m *basicDiagonal) TTri() Triangular                  { return TransposeTri{m} }
113func (m *basicDiagonal) TriBand() (n, k int, kind TriKind) { return (*DiagDense)(m).TriBand() }
114func (m *basicDiagonal) TTriBand() TriBanded               { return TransposeTriBand{m} }
115