+++ /dev/null
-// Copyright ©2013 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 mat
-
-// CMatrix is the basic matrix interface type for complex matrices.
-type CMatrix interface {
- // Dims returns the dimensions of a Matrix.
- Dims() (r, c int)
-
- // At returns the value of a matrix element at row i, column j.
- // It will panic if i or j are out of bounds for the matrix.
- At(i, j int) complex128
-
- // H returns the conjugate transpose of the Matrix. Whether H
- // returns a copy of the underlying data is implementation dependent.
- // This method may be implemented using the Conjugate type, which
- // provides an implicit matrix conjugate transpose.
- H() CMatrix
-}
-
-var (
- _ CMatrix = Conjugate{}
- _ Unconjugator = Conjugate{}
-)
-
-// Conjugate is a type for performing an implicit matrix conjugate transpose.
-// It implements the Matrix interface, returning values from the conjugate
-// transpose of the matrix within.
-type Conjugate struct {
- CMatrix CMatrix
-}
-
-// At returns the value of the element at row i and column j of the transposed
-// matrix, that is, row j and column i of the Matrix field.
-func (t Conjugate) At(i, j int) complex128 {
- z := t.CMatrix.At(j, i)
- return complex(real(z), -imag(z))
-}
-
-// Dims returns the dimensions of the transposed matrix. The number of rows returned
-// is the number of columns in the Matrix field, and the number of columns is
-// the number of rows in the Matrix field.
-func (t Conjugate) Dims() (r, c int) {
- c, r = t.CMatrix.Dims()
- return r, c
-}
-
-// H performs an implicit conjugate transpose by returning the Matrix field.
-func (t Conjugate) H() CMatrix {
- return t.CMatrix
-}
-
-// Unconjugate returns the Matrix field.
-func (t Conjugate) Unconjugate() CMatrix {
- return t.CMatrix
-}
-
-// Unconjugator is a type that can undo an implicit conjugate transpose.
-type Unconjugator interface {
- // Note: This interface is needed to unify all of the Conjugate types. In
- // the cmat128 methods, we need to test if the Matrix has been implicitly
- // transposed. If this is checked by testing for the specific Conjugate type
- // then the behavior will be different if the user uses H() or HTri() for a
- // triangular matrix.
-
- // Unconjugate returns the underlying Matrix stored for the implicit
- // conjugate transpose.
- Unconjugate() CMatrix
-}