diff --git a/src/Numerics/Numerics-Net35.csproj b/src/Numerics/Numerics-Net35.csproj index 3101288b..6140c1a1 100644 --- a/src/Numerics/Numerics-Net35.csproj +++ b/src/Numerics/Numerics-Net35.csproj @@ -40,7 +40,7 @@ pdbonly true - TRACE;NET35;NOSYSNUMERICS + TRACE;NET35;NOSYSNUMERICS;NATIVE prompt 4 AllRules.ruleset @@ -54,7 +54,7 @@ true full false - TRACE;DEBUG;NET35;NOSYSNUMERICS + TRACE;DEBUG;NET35;NOSYSNUMERICS;NATIVE prompt 4 AllRules.ruleset @@ -69,7 +69,7 @@ pdbonly AnyCPU true - TRACE;NET35;NOSYSNUMERICS;STRONGNAME + TRACE;NET35;NOSYSNUMERICS;NATIVE;STRONGNAME prompt 4 AllRules.ruleset @@ -111,4 +111,4 @@ - \ No newline at end of file + diff --git a/src/Numerics/Providers/Common/Cuda/CudaProvider.cs b/src/Numerics/Providers/Common/Cuda/CudaProvider.cs index 14c21127..299e627a 100644 --- a/src/Numerics/Providers/Common/Cuda/CudaProvider.cs +++ b/src/Numerics/Providers/Common/Cuda/CudaProvider.cs @@ -103,7 +103,7 @@ namespace MathNet.Numerics.Providers.Common.Cuda if (_nativeIA64) parts.Add("IA64"); parts.Add("revision " + _nativeRevision); - return string.Concat("Nvidia CUDA (", string.Join("; ", parts), ")"); + return string.Concat("Nvidia CUDA (", string.Join("; ", parts.ToArray()), ")"); } } } diff --git a/src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs b/src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs index 59c553de..f2a0fa66 100644 --- a/src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs +++ b/src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs @@ -29,13 +29,16 @@ #if NATIVE using System; -using System.Numerics; using System.Runtime.InteropServices; using System.Security; using MathNet.Numerics.Providers.LinearAlgebra; namespace MathNet.Numerics.Providers.Common.Cuda { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// P/Invoke methods to the native math libraries. /// diff --git a/src/Numerics/Providers/Common/Mkl/MklProvider.cs b/src/Numerics/Providers/Common/Mkl/MklProvider.cs index 6e23e63e..b91d0c7e 100644 --- a/src/Numerics/Providers/Common/Mkl/MklProvider.cs +++ b/src/Numerics/Providers/Common/Mkl/MklProvider.cs @@ -234,7 +234,7 @@ namespace MathNet.Numerics.Providers.Common.Mkl : string.Concat("MKL ", _mklVersion.ToString(2), " Update ", _mklVersion.Build)); } - return string.Concat("Intel MKL (", string.Join("; ", parts), ")"); + return string.Concat("Intel MKL (", string.Join("; ", parts.ToArray()), ")"); } enum MklMemoryRequestMode : int diff --git a/src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs b/src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs index f6c51c2b..bf883400 100644 --- a/src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs +++ b/src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs @@ -29,13 +29,16 @@ #if NATIVE using System; -using System.Numerics; using System.Runtime.InteropServices; using System.Security; using MathNet.Numerics.Providers.LinearAlgebra; namespace MathNet.Numerics.Providers.Common.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// P/Invoke methods to the native math libraries. /// diff --git a/src/Numerics/Providers/Common/NativeProviderLoader.cs b/src/Numerics/Providers/Common/NativeProviderLoader.cs index 1d040a1f..42bcb50f 100644 --- a/src/Numerics/Providers/Common/NativeProviderLoader.cs +++ b/src/Numerics/Providers/Common/NativeProviderLoader.cs @@ -79,10 +79,15 @@ namespace MathNet.Numerics.Providers.Common static string EvaluateArchitectureKey() { +#if NET35 + return (IntPtr.Size == 8) ? X64 : X86; +#else if (IsUnix) { + // Only support x86 and amd64 on Unix as there isn't a reliable way to detect the architecture return Environment.Is64BitProcess ? X64 : X86; + } var architecture = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); @@ -110,6 +115,7 @@ namespace MathNet.Numerics.Providers.Common // Fallback if unknown return architecture; +#endif } /// @@ -162,7 +168,7 @@ namespace MathNet.Numerics.Providers.Common // If we have a know architecture, try the matching subdirectory first var architecture = ArchitectureKey.Value; - if (!string.IsNullOrEmpty(architecture) && TryLoadFile(new FileInfo(Path.Combine(directory, architecture, fileName)))) + if (!string.IsNullOrEmpty(architecture) && TryLoadFile(new FileInfo(Path.Combine(Path.Combine(directory, architecture), fileName)))) { return true; } diff --git a/src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs b/src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs index 0261ee1b..1e9321ea 100644 --- a/src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs +++ b/src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs @@ -117,7 +117,7 @@ namespace MathNet.Numerics.Providers.Common.OpenBlas if (_nativeARM) parts.Add("ARM"); parts.Add("revision " + _nativeRevision); - return string.Concat("OpenBLAS (", string.Join("; ", parts), ")"); + return string.Concat("OpenBLAS (", string.Join("; ", parts.ToArray()), ")"); } } } diff --git a/src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs b/src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs index c8952151..8aea6173 100644 --- a/src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs +++ b/src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs @@ -28,7 +28,6 @@ #if NATIVE -using System.Numerics; using System.Runtime.InteropServices; using System.Security; using MathNet.Numerics.Providers.LinearAlgebra; @@ -36,6 +35,10 @@ using MathNet.Numerics.Providers.LinearAlgebra.OpenBlas; namespace MathNet.Numerics.Providers.Common.OpenBlas { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// P/Invoke methods to the native math libraries. /// diff --git a/src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs b/src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs index 514d99f9..23515319 100644 --- a/src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs +++ b/src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs @@ -29,12 +29,15 @@ #if NATIVE using System; -using System.Numerics; using System.Threading; using MathNet.Numerics.Providers.Common.Mkl; namespace MathNet.Numerics.Providers.FourierTransform.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + public class MklFourierTransformProvider : IFourierTransformProvider, IDisposable { class Kernel @@ -230,7 +233,7 @@ namespace MathNet.Numerics.Providers.FourierTransform.Mkl { SafeNativeMethods.z_fft_create_multidim(out kernel.Handle, dimensions.Length, dimensions, ForwardScaling(scaling, length), BackwardScaling(scaling, length)); } - + return kernel; } @@ -406,4 +409,4 @@ namespace MathNet.Numerics.Providers.FourierTransform.Mkl } } -#endif \ No newline at end of file +#endif diff --git a/src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs index 28ae3741..8191a13c 100644 --- a/src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs @@ -30,13 +30,16 @@ #if NATIVE using System; -using System.Numerics; using System.Security; using MathNet.Numerics.Properties; using MathNet.Numerics.Providers.Common.Cuda; namespace MathNet.Numerics.Providers.LinearAlgebra.Cuda { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// NVidia's CUDA Toolkit linear algebra provider. /// diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs index d04d6a87..e13bc58f 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs @@ -30,7 +30,6 @@ #if NATIVE using System; -using System.Numerics; using System.Security; using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; @@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl; namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// Intel's Math Kernel Library (MKL) linear algebra provider. /// @@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl if (info > 0) { throw new SingularUMatrixException(info); - } + } } /// diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs index 135c0a86..98d648ff 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs @@ -30,7 +30,6 @@ #if NATIVE using System; -using System.Numerics; using System.Security; using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; @@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl; namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// Intel's Math Kernel Library (MKL) linear algebra provider. /// @@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl if (info > 0) { throw new SingularUMatrixException(info); - } + } } /// diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs index 6002b7ec..d77994f6 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs @@ -30,7 +30,6 @@ #if NATIVE using System; -using System.Numerics; using System.Security; using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; @@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl; namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// Intel's Math Kernel Library (MKL) linear algebra provider. /// @@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl if (info > 0) { throw new SingularUMatrixException(info); - } + } } /// diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs index be0b0666..0dc1d1c1 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs @@ -30,7 +30,6 @@ #if NATIVE using System; -using System.Numerics; using System.Security; using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; @@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl; namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// Intel's Math Kernel Library (MKL) linear algebra provider. /// @@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl if (info > 0) { throw new SingularUMatrixException(info); - } + } } /// @@ -812,7 +815,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl if (method == QRMethod.Full) { var info = SafeNativeMethods.s_qr_solve_factored(rowsA, columnsA, columnsB, r, b, tau, x); - + if (info == (int)MklError.MemoryAllocation) { throw new MemoryAllocationException(); diff --git a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs index 88c15144..3b70a81e 100644 --- a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs @@ -32,12 +32,15 @@ using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; using System; -using System.Numerics; using System.Security; using MathNet.Numerics.Providers.Common.OpenBlas; namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// OpenBLAS linear algebra provider. /// diff --git a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs index d49562cf..4ced017a 100644 --- a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs +++ b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs @@ -32,12 +32,15 @@ using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; using System; -using System.Numerics; using System.Security; using MathNet.Numerics.Providers.Common.OpenBlas; namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// OpenBLAS linear algebra provider. /// diff --git a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs index 4cd9888c..1efce075 100644 --- a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs +++ b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs @@ -32,12 +32,15 @@ using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; using System; -using System.Numerics; using System.Security; using MathNet.Numerics.Providers.Common.OpenBlas; namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// OpenBLAS linear algebra provider. /// diff --git a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs index 2752606f..fac06e34 100644 --- a/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs +++ b/src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs @@ -32,12 +32,15 @@ using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.Properties; using System; -using System.Numerics; using System.Security; using MathNet.Numerics.Providers.Common.OpenBlas; namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas { +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + /// /// OpenBLAS linear algebra provider. ///