From a4a3a5f5bae603079252a527a3a796774d471450 Mon Sep 17 00:00:00 2001 From: hzhang Date: Thu, 12 Dec 2024 11:08:29 +0000 Subject: [PATCH] refactor: remove unnecessary class static access --- src/Algebra/Matrices/Matrix.cs | 27 ++++++++++--------- .../Matrices/MatrixProperty/MatrixProperty.cs | 10 +++---- .../NormalMatrices/FDiagonalMatrix.cs | 4 +-- .../Matrices/NormalMatrices/FNormalMatrix.cs | 4 +-- .../ScalarFieldStructure/FieldStructure.cs | 11 ++------ ...eProvider.cs => FieldStructureRegistry.cs} | 21 ++++++++++----- .../ScalarFieldStructure/StaticAccess.cs | 23 ---------------- src/Algebra/Vectors/FVector.cs | 2 +- src/Algebra/Vectors/Vector.cs | 20 +++++++------- 9 files changed, 50 insertions(+), 72 deletions(-) rename src/Algebra/ScalarFieldStructure/{ScalarFieldStructureProvider.cs => FieldStructureRegistry.cs} (54%) delete mode 100644 src/Algebra/ScalarFieldStructure/StaticAccess.cs diff --git a/src/Algebra/Matrices/Matrix.cs b/src/Algebra/Matrices/Matrix.cs index 76654a2..862606f 100644 --- a/src/Algebra/Matrices/Matrix.cs +++ b/src/Algebra/Matrices/Matrix.cs @@ -489,7 +489,7 @@ public abstract class Matrix : Matrix public virtual TScalar Trace() { - TScalar res = StaticAccess.AdditionUnit; + TScalar res = Structure.AdditionUnit; for (int i = 1; i <= Dim; i++) res = Structure.Addition(res, this[i, i]); return res; @@ -932,9 +932,10 @@ public abstract class Matrix : Matrix.AdditionUnit)) + + while (p < Dim && Structure.IsEqualApprox(res[r, p], Structure.AdditionUnit)) p += 1; - if (!Structure.IsEqualApprox(res[r, p], StaticAccess.AdditionUnit)) + if (!Structure.IsEqualApprox(res[r, p], Structure.AdditionUnit)) { pivotCol.Add(p); conj[r] = conj[r] / res[r, p]; @@ -1090,7 +1091,7 @@ public abstract class Matrix : Matrix.AdditionUnit)) + if (Structure.IsEqualApprox(scale, Structure.AdditionUnit)) return; u[i] /= scale; l[i, false] *= scale; @@ -1101,7 +1102,7 @@ public abstract class Matrix : Matrix.AdditionUnit + Structure.AdditionUnit ); for (int j = i; j <= Dim; j++) { @@ -1110,7 +1111,7 @@ public abstract class Matrix : Matrix.AdditionUnit + Structure.AdditionUnit ) ) { @@ -1120,10 +1121,10 @@ public abstract class Matrix : Matrix.AdditionUnit; + det = Structure.AdditionUnit; for (int j = i + 1; j <= Dim; j++) { - if (Structure.IsEqualApprox(u[j, i], StaticAccess.AdditionUnit)) + if (Structure.IsEqualApprox(u[j, i], Structure.AdditionUnit)) continue; u[j] -= u[i]; l[i, false] += l[j, false]; @@ -1149,7 +1150,7 @@ public abstract class Matrix : Matrix.AdditionUnit) + Structure.IsEqualApprox(Structure.Abs(x[i]), Structure.AdditionUnit) ? Structure.MultiplicationUnit : Structure.Division(x[i], Structure.Abs(x[i])); alpha = Structure.RealMul(alpha, x.Magnitude); @@ -1157,7 +1158,7 @@ public abstract class Matrix : Matrix.AdditionUnit)) + if (Structure.IsEqualApprox(dm, Structure.AdditionUnit)) omg = Structure.MultiplicationUnit; TMatrix qi = id - Structure.Addition( @@ -1207,7 +1208,7 @@ public abstract class Matrix : Matrix.AdditionUnit; + res[i, j] = Structure.AdditionUnit; return res; } @@ -1223,7 +1224,7 @@ public abstract class Matrix : Matrix.AdditionUnit; + res[i, j] = Structure.AdditionUnit; return res; } @@ -1238,7 +1239,7 @@ public abstract class Matrix : Matrix= 1; r--) { if (Structure.IsEqualApprox(this[i, i], this[r, r])) - col[r] = StaticAccess.MultiplicationUnit; + col[r] = Structure.MultiplicationUnit; else col[r] = Structure.Division( Structure.AdditionInverse(col * this[r]), diff --git a/src/Algebra/Matrices/MatrixProperty/MatrixProperty.cs b/src/Algebra/Matrices/MatrixProperty/MatrixProperty.cs index f74ee09..01075ab 100644 --- a/src/Algebra/Matrices/MatrixProperty/MatrixProperty.cs +++ b/src/Algebra/Matrices/MatrixProperty/MatrixProperty.cs @@ -22,13 +22,13 @@ public class MatrixProperty /// M[i, j] = 0 if i!= j /// public bool IsDiagonal => Mat.OffDiagonals - .All(x => Structure.IsEqualApprox(x, StaticAccess.AdditionUnit)); + .All(x => Structure.IsEqualApprox(x, Structure.AdditionUnit)); /// /// exist of inv(M) /// /// - public bool IsInvertible => !Structure.IsEqualApprox(Mat.Det(), StaticAccess.AdditionUnit); + public bool IsInvertible => !Structure.IsEqualApprox(Mat.Det(), Structure.AdditionUnit); /// /// M M* = M* M @@ -49,7 +49,7 @@ public class MatrixProperty { for (int i = 2; i <= Mat.Dim; i++) for (int j = 1; j < i; j++) - if (!Structure.IsEqualApprox(Mat[i, j], StaticAccess.AdditionUnit)) + if (!Structure.IsEqualApprox(Mat[i, j], Structure.AdditionUnit)) return false; return true; } @@ -64,7 +64,7 @@ public class MatrixProperty { for (int i = 1; i <= Mat.Dim; i++) for (int j = i + 1; j <= Mat.Dim; j++) - if (!Structure.IsEqualApprox(Mat[i, j], StaticAccess.AdditionUnit)) + if (!Structure.IsEqualApprox(Mat[i, j], Structure.AdditionUnit)) return false; return true; } @@ -83,7 +83,7 @@ public class MatrixProperty /// /// tr(M) = 0 /// - public bool IsTraceless => Structure.IsEqualApprox(Mat.Trace(), StaticAccess.AdditionUnit); + public bool IsTraceless => Structure.IsEqualApprox(Mat.Trace(), Structure.AdditionUnit); /// /// M M^T = I diff --git a/src/Algebra/Matrices/NormalMatrices/FDiagonalMatrix.cs b/src/Algebra/Matrices/NormalMatrices/FDiagonalMatrix.cs index b7a6bb4..735b758 100644 --- a/src/Algebra/Matrices/NormalMatrices/FDiagonalMatrix.cs +++ b/src/Algebra/Matrices/NormalMatrices/FDiagonalMatrix.cs @@ -41,8 +41,8 @@ public partial class CategoryOf { for (int j = i + 1; j <= Dim; j++) { - this[i, j] = StaticAccess.AdditionUnit; - this[j, i] = StaticAccess.AdditionUnit; + this[i, j] = Structure.AdditionUnit; + this[j, i] = Structure.AdditionUnit; } } base.Fix(); diff --git a/src/Algebra/Matrices/NormalMatrices/FNormalMatrix.cs b/src/Algebra/Matrices/NormalMatrices/FNormalMatrix.cs index 7f6f996..ac0c066 100644 --- a/src/Algebra/Matrices/NormalMatrices/FNormalMatrix.cs +++ b/src/Algebra/Matrices/NormalMatrices/FNormalMatrix.cs @@ -80,8 +80,8 @@ public partial class CategoryOf { for (int j = 1 + 1; j <= FDim; j++) { - this[i, j] = StaticAccess.AdditionUnit; - this[j, i] = StaticAccess.AdditionUnit; + this[i, j] = Structure.AdditionUnit; + this[j, i] = Structure.AdditionUnit; } } InternalFix(); diff --git a/src/Algebra/ScalarFieldStructure/FieldStructure.cs b/src/Algebra/ScalarFieldStructure/FieldStructure.cs index c26783f..c48b969 100644 --- a/src/Algebra/ScalarFieldStructure/FieldStructure.cs +++ b/src/Algebra/ScalarFieldStructure/FieldStructure.cs @@ -26,16 +26,9 @@ public abstract class FieldStructure : FieldStructure return (RealFieldStructure.Structure as FieldStructure)!; if (typeof(TScalar) == typeof(Complex)) return (ComplexFieldStructure.Structure as FieldStructure)!; - return ScalarFieldStructureProvider.GetOperation(); - } - - /// - public FieldStructure() - { - StaticAccess.AdditionUnit = AdditionUnit; - StaticAccess.MultiplicationUnit = MultiplicationUnit; - StaticAccess.Structure = this; + return FieldStructureRegistry.GetOperation(); } + /// /// addition in field diff --git a/src/Algebra/ScalarFieldStructure/ScalarFieldStructureProvider.cs b/src/Algebra/ScalarFieldStructure/FieldStructureRegistry.cs similarity index 54% rename from src/Algebra/ScalarFieldStructure/ScalarFieldStructureProvider.cs rename to src/Algebra/ScalarFieldStructure/FieldStructureRegistry.cs index 4b7ba0c..f35fdcd 100644 --- a/src/Algebra/ScalarFieldStructure/ScalarFieldStructureProvider.cs +++ b/src/Algebra/ScalarFieldStructure/FieldStructureRegistry.cs @@ -3,17 +3,24 @@ namespace Skeleton.Algebra.ScalarFieldStructure; /// /// /// -public static class ScalarFieldStructureProvider +public static class FieldStructureRegistry { /// /// Register customer field structure /// /// /// - public static void Register(FieldStructure structure) - => Cache[typeof(TScalar)] = structure; + public static void Register(FieldStructure structure) + => FieldStructureRegistry.Structure = structure; + + internal static FieldStructure GetOperation() + => FieldStructureRegistry.Structure; + +} + +internal static class FieldStructureRegistry +{ + internal static FieldStructure Structure { get; set; } +} + - internal static FieldStructure GetOperation() - => (Cache[typeof(TScalar)] as FieldStructure)!; - private static readonly Dictionary Cache = new (); -} \ No newline at end of file diff --git a/src/Algebra/ScalarFieldStructure/StaticAccess.cs b/src/Algebra/ScalarFieldStructure/StaticAccess.cs deleted file mode 100644 index cfce9d0..0000000 --- a/src/Algebra/ScalarFieldStructure/StaticAccess.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace Skeleton.Algebra.ScalarFieldStructure; - -/// -/// -/// -/// -public static class StaticAccess -{ - /// - /// - /// - public static T AdditionUnit { get; set; } - /// - /// - /// - public static T MultiplicationUnit { get; set; } - - /// - /// - /// - public static FieldStructure Structure { get; set; } - -} \ No newline at end of file diff --git a/src/Algebra/Vectors/FVector.cs b/src/Algebra/Vectors/FVector.cs index 06a42d9..50073af 100644 --- a/src/Algebra/Vectors/FVector.cs +++ b/src/Algebra/Vectors/FVector.cs @@ -115,7 +115,7 @@ public static partial class CategoryOf protected override TScalar Dot(FVector other) { - TScalar res = StaticAccess.AdditionUnit; + TScalar res = Structure.AdditionUnit; for (int i = 1; i <= FDim; i++) res = FieldStructure.Addition(res, FieldStructure.Multiplication(this[i], other[i])); return res; diff --git a/src/Algebra/Vectors/Vector.cs b/src/Algebra/Vectors/Vector.cs index 224b892..bd8e98e 100644 --- a/src/Algebra/Vectors/Vector.cs +++ b/src/Algebra/Vectors/Vector.cs @@ -197,7 +197,7 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit; + Elements[i] = Structure.AdditionUnit; } @@ -272,15 +272,15 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit; + TScalar comDiv = Structure.AdditionUnit; for (int i = 1; i <= v.Dim; i++) { if ( - Structure.IsEqualApprox(v[i], StaticAccess.AdditionUnit) && - Structure.IsEqualApprox(this[i], StaticAccess.AdditionUnit) + Structure.IsEqualApprox(v[i], Structure.AdditionUnit) && + Structure.IsEqualApprox(this[i], Structure.AdditionUnit) ) continue; - if (Structure.IsEqualApprox(v[i], StaticAccess.AdditionUnit)) + if (Structure.IsEqualApprox(v[i], Structure.AdditionUnit)) return false; TScalar ratio = Structure.Division(this[i], v[i]); if (!started) @@ -345,7 +345,7 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit)) + if (!Structure.IsEqualApprox(Elements[^(i + 1)], Structure.AdditionUnit)) return i; return Dim; } @@ -356,7 +356,7 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit)) + if (!Structure.IsEqualApprox(Elements[i], Structure.AdditionUnit)) return i; return Dim; } @@ -462,7 +462,7 @@ public abstract class Vector : Vector, IEnumerable StaticAccess.AdditionUnit).ToArray(); + res.Elements = Enumerable.Range(0, Dim).Select(_ => Structure.AdditionUnit).ToArray(); return res; } } @@ -478,7 +478,7 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit; + res[i] = Structure.AdditionUnit; return res; } @@ -492,7 +492,7 @@ public abstract class Vector : Vector, IEnumerable.AdditionUnit; + res[i] = Structure.AdditionUnit; return res; }