diff --git a/src/Numerics/Providers/SparseSolver/Managed/ManagedSparseSolverProvider.cs b/src/Numerics/Providers/SparseSolver/Managed/ManagedSparseSolverProvider.cs index ade30517..f80116b6 100644 --- a/src/Numerics/Providers/SparseSolver/Managed/ManagedSparseSolverProvider.cs +++ b/src/Numerics/Providers/SparseSolver/Managed/ManagedSparseSolverProvider.cs @@ -6,13 +6,13 @@ namespace MathNet.Numerics.Providers.SparseSolver.Managed /// /// The managed sparse solver provider /// - public partial class ManagedSparseSolverProvider : ISparseSolverProvider + internal class ManagedSparseSolverProvider : ISparseSolverProvider { /// /// Try to find out whether the provider is available, at least in principle. /// Verification may still fail if available, but it will certainly fail if unavailable. /// - public virtual bool IsAvailable() + public bool IsAvailable() { return true; } @@ -20,7 +20,7 @@ namespace MathNet.Numerics.Providers.SparseSolver.Managed /// /// Initialize and verify that the provided is indeed available. If not, fall back to alternatives like the managed provider /// - public virtual void InitializeVerify() + public void InitializeVerify() { } @@ -28,7 +28,7 @@ namespace MathNet.Numerics.Providers.SparseSolver.Managed /// Frees memory buffers, caches and handles allocated in or to the provider. /// Does not unload the provider itself, it is still usable afterwards. /// - public virtual void FreeResources() + public void FreeResources() { } @@ -37,29 +37,29 @@ namespace MathNet.Numerics.Providers.SparseSolver.Managed return "Managed"; } - public virtual DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] ColumnIndices, float[] values, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, float[] values, int nRhs, float[] rhs, float[] solution) { throw new NotImplementedException(); } - public virtual DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] ColumnIndices, double[] values, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, double[] values, int nRhs, double[] rhs, double[] solution) { throw new NotImplementedException(); } - public virtual DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] ColumnIndices, Complex32[] values, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex32[] values, int nRhs, Complex32[] rhs, Complex32[] solution) { throw new NotImplementedException(); } - public virtual DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] ColumnIndices, Complex[] values, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex[] values, int nRhs, Complex[] rhs, Complex[] solution) { throw new NotImplementedException(); diff --git a/src/Providers.MKL/FourierTransform/MklFourierTransformProvider.cs b/src/Providers.MKL/FourierTransform/MklFourierTransformProvider.cs index b211d213..a59b28c9 100644 --- a/src/Providers.MKL/FourierTransform/MklFourierTransformProvider.cs +++ b/src/Providers.MKL/FourierTransform/MklFourierTransformProvider.cs @@ -27,6 +27,7 @@ // using System; +using System.Security; using System.Threading; using MathNet.Numerics.Providers.FourierTransform; using Complex = System.Numerics.Complex; @@ -67,6 +68,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform /// /// Initialize and verify that the provided is indeed available. If not, fall back to alternatives like the managed provider /// + [SecuritySafeCritical] public void InitializeVerify() { int revision = MklProvider.Load(hintPath: _hintPath); @@ -88,6 +90,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform /// Frees memory buffers, caches and handles allocated in or to the provider. /// Does not unload the provider itself, it is still usable afterwards. /// + [SecuritySafeCritical] public virtual void FreeResources() { Kernel kernel = Interlocked.Exchange(ref _kernel, null); @@ -104,6 +107,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform return MklProvider.Describe(); } + [SecuritySafeCritical] Kernel Configure(int length, FourierTransformScaling scaling, bool real, bool single) { Kernel kernel = Interlocked.Exchange(ref _kernel, null); @@ -157,6 +161,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform return kernel; } + [SecuritySafeCritical] Kernel Configure(int[] dimensions, FourierTransformScaling scaling, bool single) { if (dimensions.Length == 1) @@ -236,6 +241,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform return kernel; } + [SecuritySafeCritical] void Release(Kernel kernel) { Kernel existing = Interlocked.Exchange(ref _kernel, kernel); @@ -245,6 +251,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform } } + [SecuritySafeCritical] public void Forward(Complex32[] samples, FourierTransformScaling scaling) { Kernel kernel = Configure(samples.Length, scaling, false, true); @@ -252,6 +259,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void Forward(Complex[] samples, FourierTransformScaling scaling) { Kernel kernel = Configure(samples.Length, scaling, false, false); @@ -259,6 +267,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void Backward(Complex32[] spectrum, FourierTransformScaling scaling) { Kernel kernel = Configure(spectrum.Length, scaling, false, true); @@ -266,6 +275,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void Backward(Complex[] spectrum, FourierTransformScaling scaling) { Kernel kernel = Configure(spectrum.Length, scaling, false, false); @@ -273,6 +283,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void ForwardReal(float[] samples, int n, FourierTransformScaling scaling) { Kernel kernel = Configure(n, scaling, true, true); @@ -280,6 +291,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void ForwardReal(double[] samples, int n, FourierTransformScaling scaling) { Kernel kernel = Configure(n, scaling, true, false); @@ -287,6 +299,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void BackwardReal(float[] spectrum, int n, FourierTransformScaling scaling) { Kernel kernel = Configure(n, scaling, true, true); @@ -296,6 +309,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform spectrum[n] = 0f; } + [SecuritySafeCritical] public void BackwardReal(double[] spectrum, int n, FourierTransformScaling scaling) { Kernel kernel = Configure(n, scaling, true, false); @@ -305,6 +319,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform spectrum[n] = 0d; } + [SecuritySafeCritical] public void ForwardMultidim(Complex32[] samples, int[] dimensions, FourierTransformScaling scaling) { Kernel kernel = Configure(dimensions, scaling, true); @@ -312,6 +327,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void ForwardMultidim(Complex[] samples, int[] dimensions, FourierTransformScaling scaling) { Kernel kernel = Configure(dimensions, scaling, false); @@ -319,6 +335,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void BackwardMultidim(Complex32[] spectrum, int[] dimensions, FourierTransformScaling scaling) { Kernel kernel = Configure(dimensions, scaling, true); @@ -326,6 +343,7 @@ namespace MathNet.Numerics.Providers.MKL.FourierTransform Release(kernel); } + [SecuritySafeCritical] public void BackwardMultidim(Complex[] spectrum, int[] dimensions, FourierTransformScaling scaling) { Kernel kernel = Configure(dimensions, scaling, false); diff --git a/src/Providers.MKL/LinearAlgebra/MklLinearAlgebraProvider.cs b/src/Providers.MKL/LinearAlgebra/MklLinearAlgebraProvider.cs index a663577c..9abfc1ec 100644 --- a/src/Providers.MKL/LinearAlgebra/MklLinearAlgebraProvider.cs +++ b/src/Providers.MKL/LinearAlgebra/MklLinearAlgebraProvider.cs @@ -28,6 +28,7 @@ // using System; +using System.Security; using MathNet.Numerics.Providers.LinearAlgebra.Managed; namespace MathNet.Numerics.Providers.MKL.LinearAlgebra @@ -88,6 +89,7 @@ namespace MathNet.Numerics.Providers.MKL.LinearAlgebra /// Initialize and verify that the provided is indeed available. /// If calling this method fails, consider to fall back to alternatives like the managed provider. /// + [SecuritySafeCritical] public override void InitializeVerify() { int revision = MklProvider.Load(_hintPath, _consistency, _precision, _accuracy); diff --git a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex.cs b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex.cs index c32a875d..b3080b39 100644 --- a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex.cs +++ b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex.cs @@ -27,7 +27,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// The left hand side matrix /// The status of the solver. [SecuritySafeCritical] - public override DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex[] values, int nRhs, Complex[] rhs, Complex[] solution) { diff --git a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex32.cs b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex32.cs index 2d80a63c..b8978838 100644 --- a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex32.cs +++ b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Complex32.cs @@ -26,7 +26,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// The left hand side matrix /// The status of the solver. [SecuritySafeCritical] - public override DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex32[] values, int nRhs, Complex32[] rhs, Complex32[] solution) { diff --git a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Double.cs b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Double.cs index 39fded7c..33fc859a 100644 --- a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Double.cs +++ b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Double.cs @@ -26,7 +26,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// The left hand side matrix /// The status of the solver. [SecuritySafeCritical] - public override DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, double[] values, int nRhs, double[] rhs, double[] solution) { diff --git a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Single.cs b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Single.cs index 968d2a37..708804c6 100644 --- a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Single.cs +++ b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.Single.cs @@ -26,7 +26,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// The left hand side matrix /// The status of the solver. [SecuritySafeCritical] - public override DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, + public DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, float[] values, int nRhs, float[] rhs, float[] solution) { diff --git a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.cs b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.cs index 26f60afe..e6922904 100644 --- a/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.cs +++ b/src/Providers.MKL/SparseSolver/MklSparseSolverProvider.cs @@ -1,12 +1,12 @@ using System; -using MathNet.Numerics.Providers.SparseSolver.Managed; +using MathNet.Numerics.Providers.SparseSolver; namespace MathNet.Numerics.Providers.MKL.SparseSolver { /// /// Intel's Math Kernel Library (MKL) sparse solver provider. /// - internal partial class MklSparseSolverProvider : ManagedSparseSolverProvider, IDisposable + internal partial class MklSparseSolverProvider : ISparseSolverProvider, IDisposable { const int MinimumCompatibleRevision = 14; @@ -25,7 +25,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// Try to find out whether the provider is available, at least in principle. /// Verification may still fail if available, but it will certainly fail if unavailable. /// - public override bool IsAvailable() + public bool IsAvailable() { return MklProvider.IsAvailable(hintPath: _hintPath); } @@ -34,7 +34,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// Initialize and verify that the provided is indeed available. /// If calling this method fails, consider to fall back to alternatives like the managed provider. /// - public override void InitializeVerify() + public void InitializeVerify() { int revision = MklProvider.Load(_hintPath); if (revision < MinimumCompatibleRevision) @@ -54,7 +54,7 @@ namespace MathNet.Numerics.Providers.MKL.SparseSolver /// Frees memory buffers, caches and handles allocated in or to the provider. /// Does not unload the provider itself, it is still usable afterwards. /// - public override void FreeResources() + public void FreeResources() { MklProvider.FreeResources(); }