From 8accea16287115b29092990103cac5ce4c0ff23e Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Tue, 1 Nov 2016 19:44:46 +0100 Subject: [PATCH] LA: explicitly demand a fully mutable matrix on SameAs in a few places #446 --- .../LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs | 2 +- src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs | 4 ++-- .../LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs | 2 +- src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs | 4 ++-- src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs | 2 +- .../LinearAlgebra/Double/Factorization/UserGramSchmidt.cs | 2 +- src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs | 4 ++-- src/Numerics/LinearAlgebra/Factorization/Cholesky.cs | 2 +- src/Numerics/LinearAlgebra/Factorization/Evd.cs | 2 +- src/Numerics/LinearAlgebra/Factorization/LU.cs | 2 +- src/Numerics/LinearAlgebra/Factorization/QR.cs | 2 +- src/Numerics/LinearAlgebra/Factorization/Svd.cs | 2 +- src/Numerics/LinearAlgebra/Matrix.Solve.cs | 2 +- src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs | 2 +- .../LinearAlgebra/Single/Factorization/UserGramSchmidt.cs | 2 +- src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs | 4 ++-- 20 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs index a023712b..eb280ac9 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs @@ -64,7 +64,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization } var q = matrix.Clone(); - var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount); + var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true); for (var k = 0; k < q.ColumnCount; k++) { diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs index a5aac6f6..dea5cb1a 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs @@ -76,7 +76,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization if (method == QRMethod.Full) { r = matrix.Clone(); - q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount); + q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true); for (var i = 0; i < matrix.RowCount; i++) { diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs index 519ac89d..0a5ff5c5 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs @@ -69,8 +69,8 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization var matrixCopy = matrix.Clone(); var s = Vector.Build.SameAs(matrixCopy, nm); - var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount); - var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount); + var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true); + var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true); const int maxiter = 1000; var e = new Complex[matrixCopy.ColumnCount]; diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs index 92c59d4c..aab36498 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs @@ -59,7 +59,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization } var q = matrix.Clone(); - var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount); + var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true); for (var k = 0; k < q.ColumnCount; k++) { diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs index 9dd2d014..f7b9ad0a 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs @@ -71,7 +71,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization if (method == QRMethod.Full) { r = matrix.Clone(); - q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount); + q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true); for (var i = 0; i < matrix.RowCount; i++) { diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs index 54207005..b4fca51c 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs @@ -64,8 +64,8 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization var matrixCopy = matrix.Clone(); var s = Vector.Build.SameAs(matrixCopy, nm); - var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount); - var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount); + var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true); + var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true); const int maxiter = 1000; var e = new Complex32[matrixCopy.ColumnCount]; diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs index 45336c69..f254b7cf 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs @@ -74,7 +74,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization var order = matrix.RowCount; // Initialize matricies for eigenvalues and eigenvectors - var eigenVectors = Matrix.Build.SameAs(matrix, order, order); + var eigenVectors = Matrix.Build.SameAs(matrix, order, order, fullyMutable: true); var blockDiagonal = Matrix.Build.SameAs(matrix, order, order); var eigenValues = new LinearAlgebra.Complex.DenseVector(order); diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs index dc746ace..d4112dfe 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs @@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization } var q = matrix.Clone(); - var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount); + var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true); for (var k = 0; k < q.ColumnCount; k++) { diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs index 963c290d..68315db6 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs @@ -69,7 +69,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization if (method == QRMethod.Full) { r = matrix.Clone(); - q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount); + q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true); for (var i = 0; i < matrix.RowCount; i++) { diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs index c382c4d1..e7e5022f 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs @@ -62,8 +62,8 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization var matrixCopy = matrix.Clone(); var s = Vector.Build.SameAs(matrixCopy, nm); - var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount); - var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount); + var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true); + var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true); const int maxiter = 1000; var e = new double[matrixCopy.ColumnCount]; diff --git a/src/Numerics/LinearAlgebra/Factorization/Cholesky.cs b/src/Numerics/LinearAlgebra/Factorization/Cholesky.cs index 4e9ee595..0710efbd 100644 --- a/src/Numerics/LinearAlgebra/Factorization/Cholesky.cs +++ b/src/Numerics/LinearAlgebra/Factorization/Cholesky.cs @@ -71,7 +71,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization /// The left hand side , X. public virtual Matrix Solve(Matrix input) { - var x = Matrix.Build.SameAs(input, input.RowCount, input.ColumnCount); + var x = Matrix.Build.SameAs(input, input.RowCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Factorization/Evd.cs b/src/Numerics/LinearAlgebra/Factorization/Evd.cs index 7c50de85..1820dbe0 100644 --- a/src/Numerics/LinearAlgebra/Factorization/Evd.cs +++ b/src/Numerics/LinearAlgebra/Factorization/Evd.cs @@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization /// The left hand side , X. public virtual Matrix Solve(Matrix input) { - var x = Matrix.Build.SameAs(EigenVectors, EigenVectors.ColumnCount, input.ColumnCount); + var x = Matrix.Build.SameAs(EigenVectors, EigenVectors.ColumnCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Factorization/LU.cs b/src/Numerics/LinearAlgebra/Factorization/LU.cs index 5c0c0373..3c6956e7 100644 --- a/src/Numerics/LinearAlgebra/Factorization/LU.cs +++ b/src/Numerics/LinearAlgebra/Factorization/LU.cs @@ -110,7 +110,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization /// The left hand side , X. public virtual Matrix Solve(Matrix input) { - var x = Matrix.Build.SameAs(input, input.RowCount, input.ColumnCount); + var x = Matrix.Build.SameAs(input, input.RowCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Factorization/QR.cs b/src/Numerics/LinearAlgebra/Factorization/QR.cs index d40e99df..e8ff0df4 100644 --- a/src/Numerics/LinearAlgebra/Factorization/QR.cs +++ b/src/Numerics/LinearAlgebra/Factorization/QR.cs @@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization /// The left hand side , X. public virtual Matrix Solve(Matrix input) { - var x = Matrix.Build.SameAs(input, FullR.ColumnCount, input.ColumnCount); + var x = Matrix.Build.SameAs(input, FullR.ColumnCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Factorization/Svd.cs b/src/Numerics/LinearAlgebra/Factorization/Svd.cs index bfbea0d9..58d513dd 100644 --- a/src/Numerics/LinearAlgebra/Factorization/Svd.cs +++ b/src/Numerics/LinearAlgebra/Factorization/Svd.cs @@ -144,7 +144,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization throw new InvalidOperationException(Resources.SingularVectorsNotComputed); } - var x = Matrix.Build.SameAs(U, VT.ColumnCount, input.ColumnCount); + var x = Matrix.Build.SameAs(U, VT.ColumnCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Matrix.Solve.cs b/src/Numerics/LinearAlgebra/Matrix.Solve.cs index e43cee00..e46f6d64 100644 --- a/src/Numerics/LinearAlgebra/Matrix.Solve.cs +++ b/src/Numerics/LinearAlgebra/Matrix.Solve.cs @@ -126,7 +126,7 @@ namespace MathNet.Numerics.LinearAlgebra /// The left hand side , X. public Matrix Solve(Matrix input) { - var x = Build.SameAs(this, ColumnCount, input.ColumnCount); + var x = Build.SameAs(this, ColumnCount, input.ColumnCount, fullyMutable: true); Solve(input, x); return x; } diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs index 81c44fd7..bb2a21ae 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs @@ -73,7 +73,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization var order = matrix.RowCount; // Initialize matricies for eigenvalues and eigenvectors - var eigenVectors = Matrix.Build.SameAs(matrix, order, order); + var eigenVectors = Matrix.Build.SameAs(matrix, order, order, fullyMutable: true); var blockDiagonal = Matrix.Build.SameAs(matrix, order, order); var eigenValues = new LinearAlgebra.Complex.DenseVector(order); diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs index 3031a8ec..e9ec4d1a 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs @@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization } var q = matrix.Clone(); - var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount); + var r = Matrix.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true); for (var k = 0; k < q.ColumnCount; k++) { diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs index 243db111..faa7e06d 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs @@ -69,7 +69,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization if (method == QRMethod.Full) { r = matrix.Clone(); - q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount); + q = Matrix.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true); for (var i = 0; i < matrix.RowCount; i++) { diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs index e27cbb35..f0cf4480 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs @@ -62,8 +62,8 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization var matrixCopy = matrix.Clone(); var s = Vector.Build.SameAs(matrixCopy, nm); - var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount); - var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount); + var u = Matrix.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true); + var vt = Matrix.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true); const int maxiter = 1000; var e = new float[matrixCopy.ColumnCount];