public void NestedRelationalAttributes() { string arff = @"@relation relationName @attribute a1 relational @attribute a2 numeric @attribute a3 relational @attribute a4 string @attribute a5 numeric @end a3 @attribute a4 string @end a1 "; AssertWriter(arff, arffWriter => { arffWriter.WriteRelationName("relationName"); arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Relational( new ArffAttribute("a2", ArffAttributeType.Numeric), new ArffAttribute("a3", ArffAttributeType.Relational( new ArffAttribute("a4", ArffAttributeType.String), new ArffAttribute("a5", ArffAttributeType.Numeric))), new ArffAttribute("a4", ArffAttributeType.String)))); }); }
public void NestedRelationalValues() { string arff = @"@relation relationName @attribute a1 relational @attribute a2 numeric @attribute a3 relational @attribute a4 {v1,v2,v3} @attribute a5 numeric @end a3 @attribute a6 string @end a1 @attribute a7 numeric @data '1,\'v1,2\\r\\nv2,3\',abc\r\n4,\'v3,5\\r\\nv1,6\',def',7 "; object[] instance = { new object[][] { new object[] { 1.0, new object[][] { new object[] { 0, 2.0 }, new object[] { 1, 3.0 } }, "abc" }, new object[] { 4.0, new object[][] { new object[] { 2, 5.0 }, new object[] { 0, 6.0 } }, "def" } }, 7.0 }; AssertWriter(arff, arffWriter => { arffWriter.WriteRelationName("relationName"); arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Relational( new ArffAttribute("a2", ArffAttributeType.Numeric), new ArffAttribute("a3", ArffAttributeType.Relational( new ArffAttribute("a4", ArffAttributeType.Nominal("v1", "v2", "v3")), new ArffAttribute("a5", ArffAttributeType.Numeric))), new ArffAttribute("a6", ArffAttributeType.String)))); arffWriter.WriteAttribute(new ArffAttribute("a7", ArffAttributeType.Numeric)); arffWriter.WriteInstance(instance); }); }
public void SimpleAttributes() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 string @attribute a3 {v1,v2,v3} @attribute a4 date @attribute a5 date hh:mm:ss @attribute a6 relational @attribute a7 numeric @attribute a8 string @end a6 "; AssertWriter(arff, arffWriter => { arffWriter.WriteRelationName("relationName"); arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric)); arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String)); arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3"))); arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date())); arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss"))); arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational( new ArffAttribute("a7", ArffAttributeType.Numeric), new ArffAttribute("a8", ArffAttributeType.String)))); }); }
public void MissingValues() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 integer @attribute a3 real @attribute a4 string @attribute a5 date @attribute a6 date yyyy-MM-dd @attribute a7 {v1,'v2',""v3""} @attribute a8 string @data ?,?,?,?,?,?,?,'?'"; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Numeric), new ArffAttribute("a2", ArffAttributeType.Numeric), new ArffAttribute("a3", ArffAttributeType.Numeric), new ArffAttribute("a4", ArffAttributeType.String), new ArffAttribute("a5", ArffAttributeType.Date()), new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")), new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3")), new ArffAttribute("a8", ArffAttributeType.String) }, expectedInstances: new object[][] { new object[] { null, null, null, null, null, null, null, "?" } }); }
public void RelationalInstancesReadCorrectly() { string arff = @"@relation relationName @attribute a1 relational @attribute a2 {v1,v2,v3} @attribute a3 relational @attribute a4 string @attribute a5 {v4,v5,v6} @end a3 @end a1 @data 'v1,\'abc,v6,{1.5}\\r\\ndef,v5\'\r\nv2,\'ghi,v4\\r\\njkl,v6\',{2.5}'"; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Relational( new ArffAttribute("a2", ArffAttributeType.Nominal("v1", "v2", "v3")), new ArffAttribute("a3", ArffAttributeType.Relational( new ArffAttribute("a4", ArffAttributeType.String), new ArffAttribute("a5", ArffAttributeType.Nominal("v4", "v5", "v6")))))) }, expectedInstances: new object[][] { new object[] { new object[][] { new object[] { 0, new object[][] { new object[] { "abc", 2 }, new object[] { "def", 1 } } }, new object[] { 1, new object[][] { new object[] { "ghi", 0 }, new object[] { "jkl", 2 } } } } } }); }
public void InstancesReadCorrectly() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 integer @attribute a3 real @attribute a4 string @attribute a5 date @attribute a6 date yyyy-MM-dd @attribute a7 {v1,'v2',""v3""} @data -6.54,42,0.0,string,2016-06-11T19:30:05,2016-06-11,v3"; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Numeric), new ArffAttribute("a2", ArffAttributeType.Numeric), new ArffAttribute("a3", ArffAttributeType.Numeric), new ArffAttribute("a4", ArffAttributeType.String), new ArffAttribute("a5", ArffAttributeType.Date()), new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")), new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3")) }, expectedInstances: new object[][] { new object[] { -6.54, 42.0, 0.0, "string", DateTime.ParseExact("2016-06-11T19:30:05", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture), DateTime.ParseExact("2016-06-11", "yyyy-MM-dd", CultureInfo.InvariantCulture), 2 } }); }
public void AttributesReadCorrectly() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 integer @attribute a3 real @attribute a4 string @attribute a5 date @attribute a6 date yyyy-MM-dd @attribute a7 {v1,'v2',""v3""} @attribute a8 relational @attribute a9 numeric @attribute a10 relational @attribute a11 string @end a10 @end a8 @data"; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Numeric), new ArffAttribute("a2", ArffAttributeType.Numeric), new ArffAttribute("a3", ArffAttributeType.Numeric), new ArffAttribute("a4", ArffAttributeType.String), new ArffAttribute("a5", ArffAttributeType.Date()), new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")), new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3")), new ArffAttribute("a8", ArffAttributeType.Relational( new ArffAttribute("a9", ArffAttributeType.Numeric), new ArffAttribute("a10", ArffAttributeType.Relational( new ArffAttribute("a11", ArffAttributeType.String))))) }); }
public void Whitespace() { string arff = "\r\n\n\t @relation\t'\\trelation Name'\n\r\n \r\n@attribute a1\t \tnumeric\t\r@attribute a2{ 'v1' , v2,v3 }\n @data \r\n \r\n"; AssertReader(arff, expectedRelationName: "\trelation Name", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Numeric), new ArffAttribute("a2", ArffAttributeType.Nominal("v1", "v2", "v3")) }); }
public void EmptyNominalAttribute() { string arff = @"@relation relationName @attribute a1 {} @data"; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Nominal()) }); }
public void SparseInstancesWithInstanceWeightsWrittenCorrectly() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 string @attribute a3 {v1,v2,v3} @attribute a4 date @attribute a5 date hh:mm:ss @attribute a6 relational @attribute a7 numeric @attribute a8 numeric @end a6 @data {0 1.5,1 'abc,def',2 v3,3 2017-01-29T18:39:18,4 06:39:18,5 '2,-3.5\r\n3,4.5'},{0.44} {1 '',3 1970-01-01T00:00:00,4 12:00:00,5 '0,0\r\n0,0'},{0.87} "; DateTime date1 = DateTime.ParseExact("2017-01-29T18:39:18", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture); DateTime date2 = new DateTime(1970, 1, 1, 0, 0, 0); object[] instance1 = { 1.5, "abc,def", 2, date1, date1, new[] { new object[] { 2.0, -3.5 }, new object[] { 3.0, 4.5 } } }; object[] instance2 = { 0.0, string.Empty, 0, date2, date2, new[] { new object[] { 0.0, 0.0 }, new object[] { 0.0, 0.0 } } }; AssertWriter(arff, arffWriter => { arffWriter.WriteRelationName("relationName"); arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric)); arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String)); arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3"))); arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date())); arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss"))); arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational( new ArffAttribute("a7", ArffAttributeType.Numeric), new ArffAttribute("a8", ArffAttributeType.Numeric)))); arffWriter.WriteInstance(instance1, true, 0.44); arffWriter.WriteInstance(instance2, true, 0.87); }); }
public void InstancesWrittenCorrectly() { string arff = @"@relation relationName @attribute a1 numeric @attribute a2 string @attribute a3 {v1,v2,v3} @attribute a4 date @attribute a5 date hh:mm:ss @attribute a6 relational @attribute a7 numeric @attribute a8 numeric @end a6 @data 1.5,'abc,def',v3,2017-01-29T18:39:18,06:39:18,'2,-3.5\r\n3,4.5' "; DateTime date = DateTime.ParseExact("2017-01-29T18:39:18", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture); object[] instance = { 1.5, "abc,def", 2, date, date, new[] { new object[] { 2.0, -3.5 }, new object[] { 3.0, 4.5 } } }; AssertWriter(arff, arffWriter => { arffWriter.WriteRelationName("relationName"); arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric)); arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String)); arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3"))); arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date())); arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss"))); arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational( new ArffAttribute("a7", ArffAttributeType.Numeric), new ArffAttribute("a8", ArffAttributeType.Numeric)))); arffWriter.WriteInstance(instance); }); }
public void QuotingHandledCorrectly() { string arff = @"@relation relationName @attribute a1 {',',""{"",'}','?'} @attribute a2 {',',""{"",'}','?'} @attribute a3 string @attribute a4 string @data ',',""?"","","",' ' ?,?,'?',""?"""; AssertReader(arff, expectedRelationName: "relationName", expectedAttributes: new[] { new ArffAttribute("a1", ArffAttributeType.Nominal(",", "{", "}", "?")), new ArffAttribute("a2", ArffAttributeType.Nominal(",", "{", "}", "?")), new ArffAttribute("a3", ArffAttributeType.String), new ArffAttribute("a4", ArffAttributeType.String) }, expectedInstances: new object[][] { new object[] { 0, 3, ",", " " }, new object[] { null, null, "?", "?" } }); }