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.
///