diff --git a/src/Data/Matlab/Adler32.cs b/src/Data/Matlab/Adler32.cs index 0879dd9e..7fcfb120 100644 --- a/src/Data/Matlab/Adler32.cs +++ b/src/Data/Matlab/Adler32.cs @@ -28,7 +28,7 @@ // OTHER DEALINGS IN THE SOFTWARE. // -/* This code is a port and simplification of +/* This code is a port and simplification of adler32.c -- compute the Adler-32 checksum of a data stream Copyright (C) 1995-2011 Mark Adler zlib license: @@ -60,7 +60,7 @@ namespace MathNet.Numerics.Data.Matlab internal static class Adler32 { /* largest prime smaller than 65536 */ - const int Base = 65521; + const int Base = 65521; /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ const int Nmax = 5552; @@ -84,11 +84,13 @@ namespace MathNet.Numerics.Data.Matlab { adler += data[offset++]; sum2 += adler; - } while (--tlen > 0); + } + while (--tlen > 0); adler %= Base; sum2 %= Base; } + return adler | (sum2 << 16); } } diff --git a/src/Data/Matlab/ArrayClass.cs b/src/Data/Matlab/ArrayClass.cs index 11c045c5..13d48cde 100644 --- a/src/Data/Matlab/ArrayClass.cs +++ b/src/Data/Matlab/ArrayClass.cs @@ -38,13 +38,13 @@ namespace MathNet.Numerics.Data.Matlab /// /// mxUNKNOWN CLASS /// - Unknown = 0, + Unknown = 0, /// /// mxCELL CLASS /// - Cell = 1, - + Cell = 1, + /// /// mxSTRUCT CLASS /// @@ -53,7 +53,7 @@ namespace MathNet.Numerics.Data.Matlab /// /// mxOBJECT CLASS /// - Object = 3, + Object = 3, /// /// mxCHAR CLASS @@ -73,37 +73,37 @@ namespace MathNet.Numerics.Data.Matlab /// /// mxSINGLE CLASS /// - Single = 7, + Single = 7, /// /// mxINT8 CLASS /// - Int8 = 8, + Int8 = 8, /// /// mxUINT8 CLASS /// - UInt8 = 9, + UInt8 = 9, /// /// mxINT16 CLASS /// - Int16 = 10, + Int16 = 10, /// /// mxUINT16 CLASS /// - UInt16 = 11, + UInt16 = 11, /// /// mxINT32 CLASS /// - Int32 = 12, + Int32 = 12, /// /// mxUINT32 CLASS /// - UInt32 = 13, + UInt32 = 13, /// /// mxINT64 CLASS @@ -113,11 +113,11 @@ namespace MathNet.Numerics.Data.Matlab /// /// mxUINT64 CLASS /// - UInt64 = 15, + UInt64 = 15, /// /// mxFUNCTION CLASS /// - Function = 16 + Function = 16 } } diff --git a/src/Data/Matlab/ArrayFlags.cs b/src/Data/Matlab/ArrayFlags.cs index 9fb40976..d46b7d1e 100644 --- a/src/Data/Matlab/ArrayFlags.cs +++ b/src/Data/Matlab/ArrayFlags.cs @@ -46,7 +46,7 @@ namespace MathNet.Numerics.Data.Matlab /// /// Global flag /// - Global = 4, + Global = 4, /// /// Logical flag diff --git a/src/Data/Matlab/DataType.cs b/src/Data/Matlab/DataType.cs index bcf3b5db..e3ef4dac 100644 --- a/src/Data/Matlab/DataType.cs +++ b/src/Data/Matlab/DataType.cs @@ -63,7 +63,7 @@ namespace MathNet.Numerics.Data.Matlab /// /// miINT32 type /// - Int32 = 5, + Int32 = 5, /// /// miUINT32 type @@ -73,13 +73,13 @@ namespace MathNet.Numerics.Data.Matlab /// /// miSINGLE type /// - Single = 7, + Single = 7, /// /// miDOUBLE type /// - Double = 9, - + Double = 9, + /// /// miINT64 type /// @@ -88,8 +88,8 @@ namespace MathNet.Numerics.Data.Matlab /// /// miUINT6 4type /// - UInt64 = 13, - + UInt64 = 13, + /// /// miMATRIX type /// @@ -98,21 +98,21 @@ namespace MathNet.Numerics.Data.Matlab /// /// miCOMPRESSED type /// - Compressed = 15, + Compressed = 15, /// /// miUTF8 type /// - Utf8 = 16, + Utf8 = 16, /// /// miUTF16 type /// - Utf16 = 17, - + Utf16 = 17, + /// /// miUTF32 type /// - Utf32 = 18 + Utf32 = 18 } } diff --git a/src/Data/Matlab/MatlabFile.cs b/src/Data/Matlab/MatlabFile.cs index b352576d..46322ec6 100644 --- a/src/Data/Matlab/MatlabFile.cs +++ b/src/Data/Matlab/MatlabFile.cs @@ -38,13 +38,13 @@ namespace MathNet.Numerics.Data.Matlab /// Represents a Matlab file /// /// The data type of the matrix to return. - internal class MatlabFile where TDataType : struct, IEquatable, IFormattable + internal class MatlabFile where TDataType : struct, IEquatable, IFormattable { /// /// Matrices in a matlab file stored as 1-D arrays /// - private readonly IDictionary> _matrices = new SortedList>(); - + readonly IDictionary> _matrices = new SortedList>(); + /// /// Gets or sets the header text. /// diff --git a/src/Data/Matlab/MatlabParser.cs b/src/Data/Matlab/MatlabParser.cs index 6415c593..31f44b9b 100644 --- a/src/Data/Matlab/MatlabParser.cs +++ b/src/Data/Matlab/MatlabParser.cs @@ -160,7 +160,7 @@ namespace MathNet.Numerics.Data.Matlab // for each data block add a Matlab object to the file. while (reader.BaseStream.Position < length) { - var type = (DataType) reader.ReadInt16(); + var type = (DataType)reader.ReadInt16(); int size = reader.ReadInt16(); var smallBlock = true; if (size == 0) @@ -232,7 +232,7 @@ namespace MathNet.Numerics.Data.Matlab decompressed.Position = 0; var buf = new byte[4]; decompressed.Read(buf, 0, 4); - type = (DataType) BitConverter.ToInt32(buf, 0); + type = (DataType)BitConverter.ToInt32(buf, 0); decompressed.Read(buf, 0, 4); var size = BitConverter.ToInt32(buf, 0); data = new byte[size]; @@ -257,9 +257,9 @@ namespace MathNet.Numerics.Data.Matlab // skip tag - doesn't tell us anything we don't already know reader.BaseStream.Seek(8, SeekOrigin.Current); - var arrayClass = (ArrayClass) reader.ReadByte(); + var arrayClass = (ArrayClass)reader.ReadByte(); var flags = reader.ReadByte(); - var isComplex = (flags & (byte) ArrayFlags.Complex) == (byte) ArrayFlags.Complex; + var isComplex = (flags & (byte)ArrayFlags.Complex) == (byte)ArrayFlags.Complex; // skip unneeded bytes reader.BaseStream.Seek(10, SeekOrigin.Current); @@ -292,7 +292,7 @@ namespace MathNet.Numerics.Data.Matlab return; } - var type = (DataType) reader.ReadInt16(); + var type = (DataType)reader.ReadInt16(); size = reader.ReadInt16(); if (size == 0) { @@ -359,7 +359,7 @@ namespace MathNet.Numerics.Data.Matlab AlignData(reader.BaseStream, jcsize, false); - var type = (DataType) reader.ReadInt32(); + var type = (DataType)reader.ReadInt32(); var dataSize = reader.ReadInt32(); var matrix = Matrix.Build.Sparse(rows, columns); @@ -372,7 +372,7 @@ namespace MathNet.Numerics.Data.Matlab throw new ArgumentException("Invalid TDataType. Matrix is stored as a complex matrix, but a real data type was given."); } - PopulateDoubleSparseMatrix((Matrix) (object) matrix, type, ir, jc, reader); + PopulateDoubleSparseMatrix((Matrix)(object)matrix, type, ir, jc, reader); } else if (dataType == typeof (float)) { @@ -381,15 +381,15 @@ namespace MathNet.Numerics.Data.Matlab throw new ArgumentException("Invalid TDataType. Matrix is stored as a complex matrix, but a real data type was given."); } - PopulateSingleSparseMatrix((Matrix) (object) matrix, type, ir, jc, reader); + PopulateSingleSparseMatrix((Matrix)(object)matrix, type, ir, jc, reader); } else if (dataType == typeof (Complex)) { - PopulateComplexSparseMatrix((Matrix) (object) matrix, type, isComplex, ir, jc, reader, dataSize); + PopulateComplexSparseMatrix((Matrix)(object)matrix, type, isComplex, ir, jc, reader, dataSize); } else if (dataType == typeof (Complex32)) { - PopulateComplex32SparseMatrix((Matrix) (object) matrix, type, isComplex, ir, jc, reader, dataSize); + PopulateComplex32SparseMatrix((Matrix)(object)matrix, type, isComplex, ir, jc, reader, dataSize); } else { @@ -579,7 +579,7 @@ namespace MathNet.Numerics.Data.Matlab reader.ReadBytes(skip); // skip header - type = (DataType) reader.ReadInt32(); + type = (DataType)reader.ReadInt32(); reader.ReadInt32(); col = 0; for (var i = 0; i < ir.Count; i++) @@ -696,7 +696,7 @@ namespace MathNet.Numerics.Data.Matlab reader.ReadBytes(skip); // skip header - type = (DataType) reader.ReadInt32(); + type = (DataType)reader.ReadInt32(); reader.ReadInt32(); col = 0; @@ -767,14 +767,14 @@ namespace MathNet.Numerics.Data.Matlab var count = rows*columns; var data = new double[count]; Buffer.BlockCopy(reader.ReadBytes(count*Constants.SizeOfDouble), 0, data, 0, count*Constants.SizeOfDouble); - matrix = (Matrix) (object) new LinearAlgebra.Double.DenseMatrix(rows, columns, data); + matrix = (Matrix)(object)new LinearAlgebra.Double.DenseMatrix(rows, columns, data); } else if (type == DataType.Single && dataType == typeof (float)) { var count = rows*columns; var data = new float[count]; Buffer.BlockCopy(reader.ReadBytes(count*Constants.SizeOfFloat), 0, data, 0, count*Constants.SizeOfFloat); - matrix = (Matrix) (object) new LinearAlgebra.Single.DenseMatrix(rows, columns, data); + matrix = (Matrix)(object)new LinearAlgebra.Single.DenseMatrix(rows, columns, data); } else { @@ -787,7 +787,7 @@ namespace MathNet.Numerics.Data.Matlab throw new ArgumentException("Invalid TDataType. Matrix is stored as a complex matrix, but a real data type was given."); } - PopulateDoubleDenseMatrix((Matrix) (object) matrix, type, reader, rows, columns); + PopulateDoubleDenseMatrix((Matrix)(object)matrix, type, reader, rows, columns); } else if (dataType == typeof (float)) { @@ -796,21 +796,22 @@ namespace MathNet.Numerics.Data.Matlab throw new ArgumentException("Invalid TDataType. Matrix is stored as a complex matrix, but a real data type was given."); } - PopulateSingleDenseMatrix((Matrix) (object) matrix, type, reader, rows, columns); + PopulateSingleDenseMatrix((Matrix)(object)matrix, type, reader, rows, columns); } else if (dataType == typeof (Complex)) { - PopulateComplexDenseMatrix((Matrix) (object) matrix, type, isComplex, reader, rows, columns, size); + PopulateComplexDenseMatrix((Matrix)(object)matrix, type, isComplex, reader, rows, columns, size); } else if (dataType == typeof (Complex32)) { - PopulateComplex32DenseMatrix((Matrix) (object) matrix, type, isComplex, reader, rows, columns, size); + PopulateComplex32DenseMatrix((Matrix)(object)matrix, type, isComplex, reader, rows, columns, size); } else { throw new NotSupportedException(); } } + return matrix; } @@ -836,6 +837,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -846,6 +848,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -856,6 +859,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -866,6 +870,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -876,6 +881,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -886,6 +892,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -896,6 +903,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -906,6 +914,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -916,6 +925,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -926,6 +936,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } @@ -955,6 +966,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -965,6 +977,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -975,6 +988,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -985,6 +999,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -995,6 +1010,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -1005,6 +1021,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -1015,6 +1032,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -1025,6 +1043,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -1035,6 +1054,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -1045,6 +1065,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } @@ -1057,7 +1078,7 @@ namespace MathNet.Numerics.Data.Matlab reader.ReadBytes(skip); // skip header - type = (DataType) reader.ReadInt32(); + type = (DataType)reader.ReadInt32(); reader.ReadInt32(); switch (type) @@ -1072,6 +1093,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -1082,6 +1104,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -1092,6 +1115,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -1102,6 +1126,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -1112,6 +1137,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -1122,6 +1148,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -1132,6 +1159,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -1142,6 +1170,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -1152,6 +1181,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -1162,6 +1192,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } @@ -1192,6 +1223,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -1202,6 +1234,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -1212,6 +1245,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -1222,6 +1256,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -1232,6 +1267,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -1242,6 +1278,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -1252,6 +1289,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -1262,6 +1300,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -1272,6 +1311,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -1282,6 +1322,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } @@ -1294,7 +1335,7 @@ namespace MathNet.Numerics.Data.Matlab reader.ReadBytes(skip); // skip header - type = (DataType) reader.ReadInt32(); + type = (DataType)reader.ReadInt32(); reader.ReadInt32(); switch (type) @@ -1309,6 +1350,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -1319,6 +1361,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -1329,6 +1372,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -1339,6 +1383,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -1349,6 +1394,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -1359,6 +1405,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -1369,6 +1416,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -1379,6 +1427,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -1389,6 +1438,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -1399,6 +1449,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } @@ -1427,6 +1478,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt8: for (var j = 0; j < columns; j++) { @@ -1437,6 +1489,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int16: for (var j = 0; j < columns; j++) { @@ -1447,6 +1500,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt16: for (var j = 0; j < columns; j++) { @@ -1457,6 +1511,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int32: for (var j = 0; j < columns; j++) { @@ -1467,6 +1522,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt32: for (var j = 0; j < columns; j++) { @@ -1477,6 +1533,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Single: for (var j = 0; j < columns; j++) { @@ -1487,6 +1544,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Int64: for (var j = 0; j < columns; j++) { @@ -1497,6 +1555,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.UInt64: for (var j = 0; j < columns; j++) { @@ -1507,6 +1566,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + case DataType.Double: for (var j = 0; j < columns; j++) { @@ -1517,6 +1577,7 @@ namespace MathNet.Numerics.Data.Matlab } break; + default: throw new NotSupportedException(); } diff --git a/src/Data/Matlab/MatlabReader.cs b/src/Data/Matlab/MatlabReader.cs index 5ebafa5d..d4043df4 100644 --- a/src/Data/Matlab/MatlabReader.cs +++ b/src/Data/Matlab/MatlabReader.cs @@ -53,10 +53,12 @@ namespace MathNet.Numerics.Data.Matlab { return file.FirstMatrix; } + if (!file.Matrices.ContainsKey(matrixName)) { throw new KeyNotFoundException("Matrix with the provided name was not found."); } + return file.Matrices[matrixName]; } diff --git a/src/Data/Matlab/MatlabWriter.cs b/src/Data/Matlab/MatlabWriter.cs index 55fbc634..bb9967ae 100644 --- a/src/Data/Matlab/MatlabWriter.cs +++ b/src/Data/Matlab/MatlabWriter.cs @@ -126,7 +126,7 @@ namespace MathNet.Numerics.Data.Matlab } // write datatype - _writer.Write((int) DataType.Compressed); + _writer.Write((int)DataType.Compressed); byte[] data; @@ -134,29 +134,29 @@ namespace MathNet.Numerics.Data.Matlab { var o = matrix as LinearAlgebra.Double.SparseMatrix; data = o != null - ? GetSparseDataArray((LinearAlgebra.Double.SparseMatrix) (object) matrix, name) - : GetDenseDataArray((LinearAlgebra.Double.Matrix) (object) matrix, name); + ? GetSparseDataArray((LinearAlgebra.Double.SparseMatrix)(object)matrix, name) + : GetDenseDataArray((LinearAlgebra.Double.Matrix)(object)matrix, name); } else if (typeof (TDataType) == typeof (float)) { var o = matrix as LinearAlgebra.Single.SparseMatrix; data = o != null - ? GetSparseDataArray((LinearAlgebra.Single.SparseMatrix) (object) matrix, name) - : GetDenseDataArray((LinearAlgebra.Single.Matrix) (object) matrix, name); + ? GetSparseDataArray((LinearAlgebra.Single.SparseMatrix)(object)matrix, name) + : GetDenseDataArray((LinearAlgebra.Single.Matrix)(object)matrix, name); } else if (typeof (TDataType) == typeof (Complex)) { var o = matrix as LinearAlgebra.Complex.SparseMatrix; data = o != null - ? GetSparseDataArray((LinearAlgebra.Complex.SparseMatrix) (object) matrix, name) - : GetDenseDataArray((LinearAlgebra.Complex.Matrix) (object) matrix, name); + ? GetSparseDataArray((LinearAlgebra.Complex.SparseMatrix)(object)matrix, name) + : GetDenseDataArray((LinearAlgebra.Complex.Matrix)(object)matrix, name); } else if (typeof (TDataType) == typeof (Complex32)) { var o = matrix as LinearAlgebra.Complex32.SparseMatrix; data = o != null - ? GetSparseDataArray((LinearAlgebra.Complex32.SparseMatrix) (object) matrix, name) - : GetDenseDataArray((LinearAlgebra.Complex32.Matrix) (object) matrix, name); + ? GetSparseDataArray((LinearAlgebra.Complex32.SparseMatrix)(object)matrix, name) + : GetDenseDataArray((LinearAlgebra.Complex32.Matrix)(object)matrix, name); } else { @@ -219,31 +219,31 @@ namespace MathNet.Numerics.Data.Matlab static void WriteMatrixTagAndName(BinaryWriter writer, ArrayClass arrayClass, bool isComplex, string name, int rows, int columns, int nzmax) { - writer.Write((int) DataType.Matrix); + writer.Write((int)DataType.Matrix); // add place holder for data size writer.Write(0); // write flag, data type and size - writer.Write((int) DataType.UInt32); + writer.Write((int)DataType.UInt32); writer.Write(8); // write array class and flags - writer.Write((byte) arrayClass); + writer.Write((byte)arrayClass); if (isComplex) { - writer.Write((byte) ArrayFlags.Complex); + writer.Write((byte)ArrayFlags.Complex); } else { - writer.Write((byte) 0); + writer.Write((byte)0); } - writer.Write((short) 0); + writer.Write((short)0); writer.Write(nzmax); // write dimensions - writer.Write((int) DataType.Int32); + writer.Write((int)DataType.Int32); writer.Write(8); writer.Write(rows); writer.Write(columns); @@ -253,7 +253,7 @@ namespace MathNet.Numerics.Data.Matlab // write name if (nameBytes.Length > 4) { - writer.Write((int) DataType.Int8); + writer.Write((int)DataType.Int8); writer.Write(nameBytes.Length); writer.Write(nameBytes); var pad = 8 - (nameBytes.Length%8); @@ -261,8 +261,8 @@ namespace MathNet.Numerics.Data.Matlab } else { - writer.Write((short) DataType.Int8); - writer.Write((short) nameBytes.Length); + writer.Write((short)DataType.Int8); + writer.Write((short)nameBytes.Length); writer.Write(nameBytes); PadData(writer, 4 - nameBytes.Length); } @@ -284,6 +284,7 @@ namespace MathNet.Numerics.Data.Matlab { outputStream.Write(data, 0, data.Length); } + compressedStream.WriteByte(adler[3]); compressedStream.WriteByte(adler[2]); compressedStream.WriteByte(adler[1]); @@ -307,7 +308,7 @@ namespace MathNet.Numerics.Data.Matlab WriteMatrixTagAndName(dataWriter, ArrayClass.Double, false, name, matrix.RowCount, matrix.ColumnCount, 0); // write data - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*8); for (var j = 0; j < matrix.ColumnCount; j++) @@ -340,7 +341,7 @@ namespace MathNet.Numerics.Data.Matlab WriteMatrixTagAndName(dataWriter, ArrayClass.Single, false, name, matrix.RowCount, matrix.ColumnCount, 0); // write data - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*4); @@ -377,7 +378,7 @@ namespace MathNet.Numerics.Data.Matlab WriteMatrixTagAndName(dataWriter, ArrayClass.Double, true, name, matrix.RowCount, matrix.ColumnCount, 0); // write data - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*8); for (var j = 0; j < matrix.ColumnCount; j++) @@ -389,7 +390,7 @@ namespace MathNet.Numerics.Data.Matlab } } - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*8); for (var j = 0; j < matrix.ColumnCount; j++) @@ -422,7 +423,7 @@ namespace MathNet.Numerics.Data.Matlab WriteMatrixTagAndName(dataWriter, ArrayClass.Single, true, name, matrix.RowCount, matrix.ColumnCount, 0); // write data - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*4); for (var j = 0; j < matrix.ColumnCount; j++) @@ -437,7 +438,7 @@ namespace MathNet.Numerics.Data.Matlab var pad = (matrix.RowCount*matrix.ColumnCount*4)%8; PadData(dataWriter, pad); - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(matrix.RowCount*matrix.ColumnCount*4); for (var j = 0; j < matrix.ColumnCount; j++) @@ -474,7 +475,7 @@ namespace MathNet.Numerics.Data.Matlab nzmax); // write ir - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -492,13 +493,13 @@ namespace MathNet.Numerics.Data.Matlab } // write jc - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write((matrix.ColumnCount + 1)*4); dataWriter.Write(0); var count = 0; foreach (var column in matrix.EnumerateColumns()) { - count += ((SparseVectorStorage) column.Storage).ValueCount; + count += ((SparseVectorStorage)column.Storage).ValueCount; dataWriter.Write(count); } @@ -509,7 +510,7 @@ namespace MathNet.Numerics.Data.Matlab } // write data - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(nzmax*8); foreach (var column in matrix.EnumerateColumns()) @@ -543,7 +544,7 @@ namespace MathNet.Numerics.Data.Matlab nzmax); // write ir - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -561,13 +562,13 @@ namespace MathNet.Numerics.Data.Matlab } // write jc - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write((matrix.ColumnCount + 1)*4); dataWriter.Write(0); var count = 0; foreach (var column in matrix.EnumerateColumns()) { - count += ((SparseVectorStorage) column.Storage).ValueCount; + count += ((SparseVectorStorage)column.Storage).ValueCount; dataWriter.Write(count); } @@ -578,7 +579,7 @@ namespace MathNet.Numerics.Data.Matlab } // write data - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -615,7 +616,7 @@ namespace MathNet.Numerics.Data.Matlab nzmax); // write ir - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -633,13 +634,13 @@ namespace MathNet.Numerics.Data.Matlab } // write jc - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write((matrix.ColumnCount + 1)*4); dataWriter.Write(0); var count = 0; foreach (var column in matrix.EnumerateColumns()) { - count += ((SparseVectorStorage) column.Storage).ValueCount; + count += ((SparseVectorStorage)column.Storage).ValueCount; dataWriter.Write(count); } @@ -650,7 +651,7 @@ namespace MathNet.Numerics.Data.Matlab } // write data - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(nzmax*8); foreach (var column in matrix.EnumerateColumns()) @@ -661,7 +662,7 @@ namespace MathNet.Numerics.Data.Matlab } } - dataWriter.Write((int) DataType.Double); + dataWriter.Write((int)DataType.Double); dataWriter.Write(nzmax*8); foreach (var column in matrix.EnumerateColumns()) @@ -695,7 +696,7 @@ namespace MathNet.Numerics.Data.Matlab nzmax); // write ir - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -713,13 +714,13 @@ namespace MathNet.Numerics.Data.Matlab } // write jc - dataWriter.Write((int) DataType.Int32); + dataWriter.Write((int)DataType.Int32); dataWriter.Write((matrix.ColumnCount + 1)*4); dataWriter.Write(0); var count = 0; foreach (var column in matrix.EnumerateColumns()) { - count += ((SparseVectorStorage) column.Storage).ValueCount; + count += ((SparseVectorStorage)column.Storage).ValueCount; dataWriter.Write(count); } @@ -730,7 +731,7 @@ namespace MathNet.Numerics.Data.Matlab } // write data - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -744,7 +745,7 @@ namespace MathNet.Numerics.Data.Matlab var pad = (nzmax*4)%8; PadData(dataWriter, pad); - dataWriter.Write((int) DataType.Single); + dataWriter.Write((int)DataType.Single); dataWriter.Write(nzmax*4); foreach (var column in matrix.EnumerateColumns()) @@ -794,11 +795,11 @@ namespace MathNet.Numerics.Data.Matlab PadData(_writer, HeaderTextLength - header.Length + 8, 32); // write version - _writer.Write((short) 0x100); + _writer.Write((short)0x100); // write little endian indicator - _writer.Write((byte) 0x49); - _writer.Write((byte) 0x4D); + _writer.Write((byte)0x49); + _writer.Write((byte)0x4D); } /// @@ -807,7 +808,7 @@ namespace MathNet.Numerics.Data.Matlab /// Where to write the pad values. /// The number of bytes to pad. /// What value to pad with. - static void PadData(BinaryWriter writer, int bytes, byte pad = (byte) 0) + static void PadData(BinaryWriter writer, int bytes, byte pad = (byte)0) { for (var i = 0; i < bytes; i++) { diff --git a/src/Data/Matlab/Settings.StyleCop b/src/Data/Matlab/Settings.StyleCop new file mode 100644 index 00000000..34b30a8c --- /dev/null +++ b/src/Data/Matlab/Settings.StyleCop @@ -0,0 +1,395 @@ + + + NoMerge + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + False + + + + + False + + + + + + x + y + z + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + True + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/src/Data/Text/DelimitedReader.cs b/src/Data/Text/DelimitedReader.cs index 47cf312d..3f54bad3 100644 --- a/src/Data/Text/DelimitedReader.cs +++ b/src/Data/Text/DelimitedReader.cs @@ -49,7 +49,7 @@ namespace MathNet.Numerics.Data.Text /// /// The base regular expression. /// - private const string RegexTemplate = "\\([^\\)]*\\)|'[^']*'|\"[^\"]*\"|[^{0}]*"; + const string RegexTemplate = "\\([^\\)]*\\)|'[^']*'|\"[^\"]*\"|[^{0}]*"; /// /// Cached compiled regular expressions for various delimiters, as needed. @@ -134,10 +134,11 @@ namespace MathNet.Numerics.Data.Text public static Matrix Read(TextReader reader, bool sparse = false, string delimiter = @"\s", bool hasHeaders = false, IFormatProvider formatProvider = null) where TDataType : struct, IEquatable, IFormattable { - if (String.IsNullOrEmpty(delimiter)) + if (string.IsNullOrEmpty(delimiter)) { delimiter = @"\s"; } + var regex = RegexCache.GetOrAdd(delimiter, d => new Regex(string.Format(RegexTemplate, d), RegexOptions.Compiled)); var data = new List(); @@ -147,7 +148,7 @@ namespace MathNet.Numerics.Data.Text // 3,4,5,6 // 7 // this creates a 3x4 matrix: - // 1, 2, 0 ,0 + // 1, 2, 0 ,0 // 3, 4, 5, 6 // 7, 0, 0, 0 var max = -1; @@ -235,21 +236,25 @@ namespace MathNet.Numerics.Data.Text { if (typeof (T) == typeof (double)) { - return number => (T) (object) double.Parse(number, NumberStyles.Any, formatProvider); + return number => (T)(object)double.Parse(number, NumberStyles.Any, formatProvider); } + if (typeof (T) == typeof (float)) { - return number => (T) (object) float.Parse(number, NumberStyles.Any, formatProvider); + return number => (T)(object)float.Parse(number, NumberStyles.Any, formatProvider); } + if (typeof (T) == typeof (Complex)) { - return number => (T) (object) number.ToComplex(formatProvider); + return number => (T)(object)number.ToComplex(formatProvider); } + if (typeof (T) == typeof (Complex32)) { - return number => (T) (object) number.ToComplex32(formatProvider); + return number => (T)(object)number.ToComplex32(formatProvider); } + throw new NotSupportedException(); } } -} \ No newline at end of file +} diff --git a/src/Data/Text/MatrixMarketReader.cs b/src/Data/Text/MatrixMarketReader.cs index 48b6fafd..a1df5509 100644 --- a/src/Data/Text/MatrixMarketReader.cs +++ b/src/Data/Text/MatrixMarketReader.cs @@ -66,12 +66,14 @@ namespace MathNet.Numerics.Data.Text { return ReadMatrix(reader); } + case Compression.GZip: using (var decompressed = new GZipStream(stream, CompressionMode.Decompress)) using (var reader = new StreamReader(decompressed)) { return ReadMatrix(reader); } + default: throw new NotSupportedException("Compression not supported: " + compression); } @@ -89,12 +91,14 @@ namespace MathNet.Numerics.Data.Text { return ReadVector(reader); } + case Compression.GZip: using (var decompressed = new GZipStream(stream, CompressionMode.Decompress)) using (var reader = new StreamReader(decompressed)) { return ReadVector(reader); } + default: throw new NotSupportedException("Compression not supported: " + compression); } @@ -142,6 +146,7 @@ namespace MathNet.Numerics.Data.Text { return Matrix.Build.DenseOfColumnMajor(rows, cols, columnMajor); } + case MatrixMarketSymmetry.Symmetric: { var m = Matrix.Build.Dense(rows, cols); @@ -153,8 +158,10 @@ namespace MathNet.Numerics.Data.Text m.SetRow(k, k, cols - k, vector); k++; } + return m; } + case MatrixMarketSymmetry.Hermitian: { var m = Matrix.Build.Dense(rows, cols); @@ -166,8 +173,10 @@ namespace MathNet.Numerics.Data.Text m.SetRow(k, k, cols - k, vector.Conjugate()); k++; } + return m; } + case MatrixMarketSymmetry.SkewSymmetric: { var m = Matrix.Build.Dense(rows, cols); @@ -179,8 +188,10 @@ namespace MathNet.Numerics.Data.Text m.SetRow(k, k + 1, cols - 1 - k, vector); k++; } + return m; } + default: throw new NotSupportedException("Symmetry type not supported."); } @@ -220,10 +231,12 @@ namespace MathNet.Numerics.Data.Text { throw new FormatException(@"Expected MatrixMarket Header with 2-4 attributes: object format [field] [symmetry]; see http://math.nist.gov/MatrixMarket/ for details."); } + if (tokens[0] != (matrix ? "matrix" : "vector")) { throw new FormatException("Expected matrix content."); } + switch (tokens[1]) { case "array": @@ -235,6 +248,7 @@ namespace MathNet.Numerics.Data.Text default: throw new NotSupportedException("Format type not supported."); } + if (tokens.Length < 3) { complex = false; @@ -255,6 +269,7 @@ namespace MathNet.Numerics.Data.Text throw new NotSupportedException("Field type not supported."); } } + if (tokens.Length < 4) { symmetry = MatrixMarketSymmetry.General; @@ -279,9 +294,11 @@ namespace MathNet.Numerics.Data.Text throw new NotSupportedException("Symmetry type not supported"); } } + return; } } + throw new FormatException(@"Expected MatrixMarket Header, see http://math.nist.gov/MatrixMarket/ for details."); } @@ -338,8 +355,10 @@ namespace MathNet.Numerics.Data.Text slice = new T[--initialLength]; nextIndex = 0; } + slice[nextIndex++] = value; } + yield return slice; } @@ -350,32 +369,52 @@ namespace MathNet.Numerics.Data.Text // ignore imaginary part if source is complex return (offset, tokens) => (T)(object)double.Parse(tokens[offset], NumberStyles.Any, Format); } + if (typeof (T) == typeof (float)) { // ignore imaginary part if source is complex return (offset, tokens) => (T)(object)float.Parse(tokens[offset], NumberStyles.Any, Format); } + if (typeof (T) == typeof (Complex)) { return sourceIsComplex ? ((offset, tokens) => (T)(object)new Complex(double.Parse(tokens[offset], NumberStyles.Any, Format), double.Parse(tokens[offset + 1], NumberStyles.Any, Format))) : (Func)((offset, tokens) => (T)(object)new Complex(double.Parse(tokens[offset], NumberStyles.Any, Format), 0d)); } + if (typeof (T) == typeof (Complex32)) { return sourceIsComplex ? ((offset, tokens) => (T)(object)new Complex32(float.Parse(tokens[offset], NumberStyles.Any, Format), float.Parse(tokens[offset + 1], NumberStyles.Any, Format))) : (Func)((offset, tokens) => (T)(object)new Complex32(float.Parse(tokens[offset], NumberStyles.Any, Format), 0f)); } + throw new NotSupportedException(); } static Func CreateSymmetryMap(MatrixMarketSymmetry symmetry) { - if (symmetry != MatrixMarketSymmetry.Hermitian) return x => x; - if (typeof (T) == typeof (double) || typeof (T) == typeof (float)) return x => x; - if (typeof (T) == typeof (Complex)) return x => (T)(object)((Complex)(object)x).Conjugate(); - if (typeof (T) == typeof (Complex32)) return x => (T)(object)((Complex32)(object)x).Conjugate(); + if (symmetry != MatrixMarketSymmetry.Hermitian) + { + return x => x; + } + + if (typeof (T) == typeof (double) || typeof (T) == typeof (float)) + { + return x => x; + } + + if (typeof (T) == typeof (Complex)) + { + return x => (T)(object)((Complex)(object)x).Conjugate(); + } + + if (typeof (T) == typeof (Complex32)) + { + return x => (T)(object)((Complex32)(object)x).Conjugate(); + } + throw new NotSupportedException(); } } diff --git a/src/Data/Text/MatrixMarketWriter.cs b/src/Data/Text/MatrixMarketWriter.cs index 7e15b808..bcc51529 100644 --- a/src/Data/Text/MatrixMarketWriter.cs +++ b/src/Data/Text/MatrixMarketWriter.cs @@ -56,7 +56,9 @@ namespace MathNet.Numerics.Data.Text { WriteMatrix(writer, matrix); } + break; + case Compression.GZip: using (var compressed = new GZipStream(stream, CompressionMode.Compress)) using (var buffered = new BufferedStream(compressed, 4096)) @@ -64,7 +66,9 @@ namespace MathNet.Numerics.Data.Text { WriteMatrix(writer, matrix); } + break; + default: throw new NotSupportedException("Compression not supported: " + compression); } @@ -82,7 +86,9 @@ namespace MathNet.Numerics.Data.Text { WriteVector(writer, vector); } + break; + case Compression.GZip: using (var compressed = new GZipStream(stream, CompressionMode.Compress)) using (var buffered = new BufferedStream(compressed, 4096)) @@ -90,7 +96,9 @@ namespace MathNet.Numerics.Data.Text { WriteVector(writer, vector); } + break; + default: throw new NotSupportedException("Compression not supported: " + compression); } @@ -132,6 +140,7 @@ namespace MathNet.Numerics.Data.Text writer.WriteLine("{0} {1} {2}", row + 1, sparse.ColumnIndices[j] + 1, format(sparse.Values[j])); } } + return; } @@ -144,6 +153,7 @@ namespace MathNet.Numerics.Data.Text { writer.WriteLine("{0} {1} {2}", k + 1, k + 1, format(diagonal.Data[k])); } + return; } @@ -156,6 +166,7 @@ namespace MathNet.Numerics.Data.Text { writer.WriteLine(format(value)); } + return; } @@ -182,6 +193,7 @@ namespace MathNet.Numerics.Data.Text { writer.WriteLine("{0} {1}", k + 1, format(sparse.Values[k])); } + return; } @@ -194,6 +206,7 @@ namespace MathNet.Numerics.Data.Text { writer.WriteLine(format(value)); } + return; } @@ -211,10 +224,12 @@ namespace MathNet.Numerics.Data.Text { return value => string.Format(Format, "{0:G14}", value); } + if (typeof (T) == typeof (float)) { return value => string.Format(Format, "{0:G7}", value); } + if (typeof (T) == typeof (Complex)) { return value => @@ -223,6 +238,7 @@ namespace MathNet.Numerics.Data.Text return string.Format(Format, "{0:G14} {1:G14}", c.Real, c.Imaginary); }; } + if (typeof (T) == typeof (Complex32)) { return value => @@ -231,6 +247,7 @@ namespace MathNet.Numerics.Data.Text return string.Format(Format, "{0:G7} {1:G7}", c.Real, c.Imaginary); }; } + throw new NotSupportedException(); } } diff --git a/src/Data/Text/Settings.StyleCop b/src/Data/Text/Settings.StyleCop new file mode 100644 index 00000000..34b30a8c --- /dev/null +++ b/src/Data/Text/Settings.StyleCop @@ -0,0 +1,395 @@ + + + NoMerge + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + False + + + + + False + + + + + + x + y + z + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + True + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file