From 70f1710ae2038230cfaca8c144522b67386bd27d Mon Sep 17 00:00:00 2001 From: BMI24 Date: Tue, 29 Nov 2022 20:00:37 +0100 Subject: [PATCH 1/3] Fix parsing and ToString not using invariant culture --- src/netcore/EigenCore/Core/Dense/MatrixDenseBase.cs | 3 ++- src/netcore/EigenCore/Core/Dense/MatrixXD.cs | 3 ++- src/netcore/EigenCore/Core/Dense/VectorDenseBase.cs | 3 ++- src/netcore/EigenCore/Core/Dense/VectorXD.cs | 3 ++- src/netcore/EigenCore/Core/Sparse/MatrixSparseBase.cs | 3 ++- src/netcore/EigenCore/Core/Sparse/VectorSparseBase.cs | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/netcore/EigenCore/Core/Dense/MatrixDenseBase.cs b/src/netcore/EigenCore/Core/Dense/MatrixDenseBase.cs index 5e9a036..d4d889f 100644 --- a/src/netcore/EigenCore/Core/Dense/MatrixDenseBase.cs +++ b/src/netcore/EigenCore/Core/Dense/MatrixDenseBase.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -203,7 +204,7 @@ public override string ToString() { for (int col = 0; col < Cols; col++) { - stringBuilder.AppendFormat("{0:G3} ", Get(row, col)); + stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0:G3} ", Get(row, col)); } stringBuilder.Append('\n'); } diff --git a/src/netcore/EigenCore/Core/Dense/MatrixXD.cs b/src/netcore/EigenCore/Core/Dense/MatrixXD.cs index 4bb11a7..b1e1527 100644 --- a/src/netcore/EigenCore/Core/Dense/MatrixXD.cs +++ b/src/netcore/EigenCore/Core/Dense/MatrixXD.cs @@ -2,6 +2,7 @@ using EigenCore.Core.Dense.LinearAlgebra; using EigenCore.Core.Shared; using EigenCore.Eigen; +using System.Globalization; using System.Linq; namespace EigenCore.Core.Dense @@ -685,7 +686,7 @@ public MatrixXD(MatrixXD matrixXD) } public MatrixXD(string valuesString) - : base(valuesString, (string value) => double.Parse(value)) + : base(valuesString, (string value) => double.Parse(value, CultureInfo.InvariantCulture)) { } diff --git a/src/netcore/EigenCore/Core/Dense/VectorDenseBase.cs b/src/netcore/EigenCore/Core/Dense/VectorDenseBase.cs index 4aa4381..15b4ba8 100644 --- a/src/netcore/EigenCore/Core/Dense/VectorDenseBase.cs +++ b/src/netcore/EigenCore/Core/Dense/VectorDenseBase.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -80,7 +81,7 @@ public override string ToString() return stringBuilder.ToString().Trim(); } - stringBuilder.AppendFormat("{0:G3} ", _values[i]); + stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0:G3} ", _values[i]); } return stringBuilder.ToString().Trim(); diff --git a/src/netcore/EigenCore/Core/Dense/VectorXD.cs b/src/netcore/EigenCore/Core/Dense/VectorXD.cs index 50b560e..02c852b 100644 --- a/src/netcore/EigenCore/Core/Dense/VectorXD.cs +++ b/src/netcore/EigenCore/Core/Dense/VectorXD.cs @@ -1,6 +1,7 @@ using EigenCore.Core.Shared; using EigenCore.Eigen; using System; +using System.Globalization; using System.Linq; namespace EigenCore.Core.Dense @@ -149,7 +150,7 @@ public override int GetHashCode() } public VectorXD(string valuesString) - : base(valuesString, (string value) => double.Parse(value)) + : base(valuesString, (string value) => double.Parse(value, CultureInfo.InvariantCulture)) { } diff --git a/src/netcore/EigenCore/Core/Sparse/MatrixSparseBase.cs b/src/netcore/EigenCore/Core/Sparse/MatrixSparseBase.cs index cf88e93..e9c30c1 100644 --- a/src/netcore/EigenCore/Core/Sparse/MatrixSparseBase.cs +++ b/src/netcore/EigenCore/Core/Sparse/MatrixSparseBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; @@ -143,7 +144,7 @@ public override string ToString() { for (int col = 0; col < Cols; col++) { - stringBuilder.AppendFormat("{0:G3} ", Get(row, col)); + stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0:G3} ", Get(row, col)); } stringBuilder.Append('\n'); } diff --git a/src/netcore/EigenCore/Core/Sparse/VectorSparseBase.cs b/src/netcore/EigenCore/Core/Sparse/VectorSparseBase.cs index b1dd774..5488380 100644 --- a/src/netcore/EigenCore/Core/Sparse/VectorSparseBase.cs +++ b/src/netcore/EigenCore/Core/Sparse/VectorSparseBase.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; using System.Text; @@ -79,7 +80,7 @@ public override string ToString() return stringBuilder.ToString().Trim(); } - stringBuilder.AppendFormat("{0:G3} ", Get(i)); + stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0:G3} ", Get(i)); } return stringBuilder.ToString().Trim(); From ffedb74ebcb987bdf38fb39cd0dbd40974d2291c Mon Sep 17 00:00:00 2001 From: BMI24 Date: Wed, 25 Jan 2023 19:06:51 +0100 Subject: [PATCH 2/3] Add public property VBufferDense.Values mirroring _values --- src/netcore/EigenCore/Core/Dense/VBufferDense.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/netcore/EigenCore/Core/Dense/VBufferDense.cs b/src/netcore/EigenCore/Core/Dense/VBufferDense.cs index e55936f..b2074aa 100644 --- a/src/netcore/EigenCore/Core/Dense/VBufferDense.cs +++ b/src/netcore/EigenCore/Core/Dense/VBufferDense.cs @@ -6,6 +6,11 @@ public abstract class VBufferDense { protected readonly T[] _values; + /// + /// Use only for reading raw data efficiently. + /// + public T[] Values => _values; + public readonly int Length; public ReadOnlySpan GetValues() => _values.AsSpan(0, Length); From 6207cb49dd1e0466fb0695c3fd41e74de27403a2 Mon Sep 17 00:00:00 2001 From: BMI24 Date: Wed, 25 Jan 2023 19:07:06 +0100 Subject: [PATCH 3/3] Downgrade to notecoreapp2.1 --- src/netcore/EigenCore/Core/Dense/MatrixXD.cs | 2 +- src/netcore/EigenCore/EigenCore.csproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/netcore/EigenCore/Core/Dense/MatrixXD.cs b/src/netcore/EigenCore/Core/Dense/MatrixXD.cs index b1e1527..560040b 100644 --- a/src/netcore/EigenCore/Core/Dense/MatrixXD.cs +++ b/src/netcore/EigenCore/Core/Dense/MatrixXD.cs @@ -629,7 +629,7 @@ public FullPivLUResult FullPivLU() } - public override MatrixXD Clone() + public override MatrixDenseBase Clone() { return new MatrixXD(_values.ToArray(), Rows, Cols); } diff --git a/src/netcore/EigenCore/EigenCore.csproj b/src/netcore/EigenCore/EigenCore.csproj index 9e9b054..75f7c48 100644 --- a/src/netcore/EigenCore/EigenCore.csproj +++ b/src/netcore/EigenCore/EigenCore.csproj @@ -1,11 +1,11 @@  - net5.0 + netcoreapp2.1 modios - 1.0.0-alpha + 1.0.2-alpha .Net wrapper for the Eigen C++ library modios https://github.com/modios/EigenCore