Skip to content

Commit 44e5c7a

Browse files
authored
Fix test file locations on OSX (dotnet#235)
* fix test file locations on OSX * changing to Path.Combine() * Additional Path.Combine() * Remove ConsoleCodeGeneratorTests.GeneratedTrainCodeTest.received.txt * Additional Path.Combine() * add back in double comparison fix * remove metrics agent NaN returns * test fix * test format fix * mock out path Thanks to @daholste for additional fixes!
1 parent 20d45db commit 44e5c7a

19 files changed

+113
-57
lines changed

src/Microsoft.ML.Auto/Experiment/MetricsAgents/BinaryMetricsAgent.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
56
using Microsoft.ML.Data;
67

78
namespace Microsoft.ML.Auto
@@ -17,7 +18,7 @@ public BinaryMetricsAgent(BinaryClassificationMetric optimizingMetric)
1718

1819
public double GetScore(BinaryClassificationMetrics metrics)
1920
{
20-
switch(_optimizingMetric)
21+
switch (_optimizingMetric)
2122
{
2223
case BinaryClassificationMetric.Accuracy:
2324
return metrics.Accuracy;

src/Microsoft.ML.Auto/Experiment/MetricsAgents/RegressionMetricsAgent.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public RegressionMetricsAgent(RegressionMetric optimizingMetric)
1717

1818
public double GetScore(RegressionMetrics metrics)
1919
{
20-
switch(_optimizingMetric)
20+
switch (_optimizingMetric)
2121
{
2222
case RegressionMetric.L1:
2323
return metrics.L1;

src/Microsoft.ML.Auto/Experiment/SuggestedPipeline.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,19 @@ public IEstimator<ITransformer> ToEstimator()
9595
{
9696
IEstimator<ITransformer> pipeline = new EstimatorChain<ITransformer>();
9797

98-
// append each transformer to the pipeline
98+
// Append each transformer to the pipeline
9999
foreach (var transform in Transforms)
100100
{
101-
if(transform.Estimator != null)
101+
if (transform.Estimator != null)
102102
{
103103
pipeline = pipeline.Append(transform.Estimator);
104104
}
105105
}
106106

107-
// get learner
107+
// Get learner
108108
var learner = Trainer.BuildTrainer();
109109

110-
// append learner to pipeline
110+
// Append learner to pipeline
111111
pipeline = pipeline.Append(learner);
112112

113113
return pipeline;

src/Microsoft.ML.Auto/Utils/RunResultUtil.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
56
using System.Collections.Generic;
67
using System.Linq;
78

@@ -15,7 +16,7 @@ public static RunResult<T> GetBestRunResult<T>(IEnumerable<RunResult<T>> results
1516
results = results.Where(r => r.ValidationMetrics != null);
1617
if (!results.Any()) { return null; }
1718
double maxScore = results.Select(r => metricsAgent.GetScore(r.ValidationMetrics)).Max();
18-
return results.First(r => metricsAgent.GetScore(r.ValidationMetrics) == maxScore);
19+
return results.First(r => Math.Abs(metricsAgent.GetScore(r.ValidationMetrics) - maxScore) < 1E-20);
1920
}
2021
}
2122
}

src/Samples/AutoTrainBinaryClassification.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ namespace Samples
1616
{
1717
public class AutoTrainBinaryClassification
1818
{
19-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
20-
private static string TrainDataPath = $"{BaseDatasetsLocation}/wikipedia-detox-250-line-data.tsv";
21-
private static string TestDataPath = $"{BaseDatasetsLocation}/wikipedia-detox-250-line-test.tsv";
22-
private static string ModelPath = $"{BaseDatasetsLocation}/SentimentModel.zip";
19+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
20+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "wikipedia-detox-250-line-data.tsv");
21+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "wikipedia-detox-250-line-test.tsv");
22+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "SentimentModel.zip");
2323
private static string LabelColumn = "Sentiment";
2424
private static uint ExperimentTime = 60;
2525

src/Samples/AutoTrainMulticlassClassification.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ namespace Samples
1616
{
1717
public class AutoTrainMulticlassClassification
1818
{
19-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
20-
private static string TrainDataPath = $"{BaseDatasetsLocation}/optdigits-train.csv";
21-
private static string TestDataPath = $"{BaseDatasetsLocation}/optdigits-test.csv";
22-
private static string ModelPath = $"{BaseDatasetsLocation}/OptDigits.zip";
19+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
20+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "optdigits-train.csv");
21+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "optdigits-test.csv");
22+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "OptDigits.zip");
2323
private static uint ExperimentTime = 60;
2424

2525
public static void Run()

src/Samples/AutoTrainRegression.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ namespace Samples
1616
{
1717
static class AutoTrainRegression
1818
{
19-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
20-
private static string TrainDataPath = $"{BaseDatasetsLocation}/taxi-fare-train.csv";
21-
private static string TestDataPath = $"{BaseDatasetsLocation}/taxi-fare-test.csv";
22-
private static string ModelPath = $"{BaseDatasetsLocation}/TaxiFareModel.zip";
19+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
20+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-train.csv");
21+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-test.csv");
22+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "TaxiFareModel.zip");
2323
private static string LabelColumn = "fare_amount";
2424
private static uint ExperimentTime = 60;
2525

src/Samples/Cancellation.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6+
using System.IO;
67
using System.Collections.Generic;
78
using System.Diagnostics;
89
using System.Linq;
@@ -17,10 +18,10 @@ namespace Samples
1718
{
1819
static class Cancellation
1920
{
20-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
21-
private static string TrainDataPath = $"{BaseDatasetsLocation}/taxi-fare-train.csv";
22-
private static string TestDataPath = $"{BaseDatasetsLocation}/taxi-fare-test.csv";
23-
private static string ModelPath = $"{BaseDatasetsLocation}/TaxiFareModel.zip";
21+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
22+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-train.csv");
23+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-test.csv");
24+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "TaxiFareModel.zip");
2425
private static string LabelColumn = "fare_amount";
2526

2627
public static void Run()

src/Samples/CustomizeTraining.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6+
using System.IO;
67
using Microsoft.Data.DataView;
78
using Microsoft.ML;
89
using Microsoft.ML.Auto;
@@ -13,10 +14,10 @@ namespace Samples
1314
{
1415
static class CustomizeTraining
1516
{
16-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
17-
private static string TrainDataPath = $"{BaseDatasetsLocation}/taxi-fare-train.csv";
18-
private static string TestDataPath = $"{BaseDatasetsLocation}/taxi-fare-test.csv";
19-
private static string ModelPath = $"{BaseDatasetsLocation}/TaxiFareModel.zip";
17+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
18+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-train.csv");
19+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-test.csv");
20+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "TaxiFareModel.zip");
2021
private static string LabelColumn = "fare_amount";
2122

2223
public static void Run()

src/Samples/ObserveProgress.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6+
using System.IO;
67
using Microsoft.Data.DataView;
78
using Microsoft.ML;
89
using Microsoft.ML.Auto;
@@ -12,10 +13,10 @@ namespace Samples
1213
{
1314
static class ObserveProgress
1415
{
15-
private static string BaseDatasetsLocation = @"../../../../src/Samples/Data";
16-
private static string TrainDataPath = $"{BaseDatasetsLocation}/taxi-fare-train.csv";
17-
private static string TestDataPath = $"{BaseDatasetsLocation}/taxi-fare-test.csv";
18-
private static string ModelPath = $"{BaseDatasetsLocation}/TaxiFareModel.zip";
16+
private static string BaseDatasetsLocation = Path.Combine("..", "..", "..", "..", "src", "Samples", "Data");
17+
private static string TrainDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-train.csv");
18+
private static string TestDataPath = Path.Combine(BaseDatasetsLocation, "taxi-fare-test.csv");
19+
private static string ModelPath = Path.Combine(BaseDatasetsLocation, "TaxiFareModel.zip");
1920
private static string LabelColumn = "fare_amount";
2021

2122
public static void Run()

src/Test/ColumnInferenceTests.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
34
using Microsoft.ML.Data;
45
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -62,15 +63,15 @@ public void IdentifyLabelColumnThroughIndexWithoutHeader()
6263
[TestMethod]
6364
public void DatasetWithEmptyColumn()
6465
{
65-
var result = new MLContext().Auto().InferColumns(@".\TestData\DatasetWithEmptyColumn.txt", DefaultColumnNames.Label);
66+
var result = new MLContext().Auto().InferColumns(Path.Combine("TestData", "DatasetWithEmptyColumn.txt"), DefaultColumnNames.Label);
6667
var emptyColumn = result.TextLoaderArgs.Columns.First(c => c.Name == "Empty");
6768
Assert.AreEqual(DataKind.TX, emptyColumn.Type);
6869
}
6970

7071
[TestMethod]
7172
public void DatasetWithBoolColumn()
7273
{
73-
var result = new MLContext().Auto().InferColumns(@".\TestData\BinaryDatasetWithBoolColumn.txt", DefaultColumnNames.Label);
74+
var result = new MLContext().Auto().InferColumns(Path.Combine("TestData", "BinaryDatasetWithBoolColumn.txt"), DefaultColumnNames.Label);
7475
Assert.AreEqual(2, result.TextLoaderArgs.Columns.Count());
7576

7677
var boolColumn = result.TextLoaderArgs.Columns.First(c => c.Name == "Bool");
@@ -88,7 +89,7 @@ public void DatasetWithBoolColumn()
8889
[TestMethod]
8990
public void WhereNameColumnIsOnlyFeature()
9091
{
91-
var result = new MLContext().Auto().InferColumns(@".\TestData\NameColumnIsOnlyFeatureDataset.txt", DefaultColumnNames.Label);
92+
var result = new MLContext().Auto().InferColumns(Path.Combine("TestData", "NameColumnIsOnlyFeatureDataset.txt"), DefaultColumnNames.Label);
9293
Assert.AreEqual(2, result.TextLoaderArgs.Columns.Count());
9394

9495
var nameColumn = result.TextLoaderArgs.Columns.First(c => c.Name == "Username");
@@ -104,7 +105,7 @@ public void WhereNameColumnIsOnlyFeature()
104105
[TestMethod]
105106
public void DefaultColumnNamesInferredCorrectly()
106107
{
107-
var result = new MLContext().Auto().InferColumns(@".\TestData\DatasetWithDefaultColumnNames.txt",
108+
var result = new MLContext().Auto().InferColumns(Path.Combine("TestData", "DatasetWithDefaultColumnNames.txt"),
108109
new ColumnInformation()
109110
{
110111
LabelColumn = DefaultColumnNames.Label,
@@ -120,7 +121,7 @@ public void DefaultColumnNamesInferredCorrectly()
120121
[TestMethod]
121122
public void DefaultColumnNamesNoGrouping()
122123
{
123-
var result = new MLContext().Auto().InferColumns(@".\TestData\DatasetWithDefaultColumnNames.txt",
124+
var result = new MLContext().Auto().InferColumns(Path.Combine("TestData", "DatasetWithDefaultColumnNames.txt"),
124125
new ColumnInformation()
125126
{
126127
LabelColumn = DefaultColumnNames.Label,

src/Test/DatasetUtil.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal static class DatasetUtil
1717
public const string MlNetGeneratedRegressionLabel = "target";
1818
public const int IrisDatasetLabelColIndex = 0;
1919

20-
public const string TrivialMulticlassDatasetPath = @"TestData\TrivialMulticlassDataset.txt";
20+
public static string TrivialMulticlassDatasetPath = Path.Combine("TestData", "TrivialMulticlassDataset.txt");
2121

2222
private static IDataView _uciAdultDataView;
2323

src/mlnet.Test/ApprovalTests/ConsoleCodeGeneratorTests.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Collections.Generic;
6-
using System.IO;
76
using ApprovalTests;
87
using ApprovalTests.Reporters;
98
using Microsoft.ML;
109
using Microsoft.ML.Auto;
1110
using Microsoft.ML.CLI.CodeGenerator.CSharp;
1211
using Microsoft.ML.Data;
1312
using Microsoft.VisualStudio.TestTools.UnitTesting;
13+
using mlnet.Test.Utilities;
1414

1515
namespace mlnet.Test
1616
{
@@ -33,10 +33,10 @@ public void GeneratedTrainCodeTest()
3333
MlTask = TaskKind.BinaryClassification,
3434
OutputBaseDir = null,
3535
OutputName = "MyNamespace",
36-
TrainDataset = new FileInfo("x:\\dummypath\\dummy_train.csv"),
37-
TestDataset = new FileInfo("x:\\dummypath\\dummy_test.csv"),
36+
TrainDataset = new MockFileInfo("x:\\dummypath\\dummy_train.csv"),
37+
TestDataset = new MockFileInfo("x:\\dummypath\\dummy_test.csv"),
3838
LabelName = "Label",
39-
ModelPath = new FileInfo("x:\\models\\model.zip")
39+
ModelPath = new MockFileInfo("x:\\models\\model.zip")
4040
});
4141

4242
(string trainCode, string projectCode, string helperCode) = consoleCodeGen.GenerateCode();
@@ -57,10 +57,10 @@ public void GeneratedProjectCodeTest()
5757
MlTask = TaskKind.BinaryClassification,
5858
OutputBaseDir = null,
5959
OutputName = "MyNamespace",
60-
TrainDataset = new FileInfo("x:\\dummypath\\dummy_train.csv"),
61-
TestDataset = new FileInfo("x:\\dummypath\\dummy_test.csv"),
60+
TrainDataset = new MockFileInfo("x:\\dummypath\\dummy_train.csv"),
61+
TestDataset = new MockFileInfo("x:\\dummypath\\dummy_test.csv"),
6262
LabelName = "Label",
63-
ModelPath = new FileInfo("x:\\models\\model.zip")
63+
ModelPath = new MockFileInfo("x:\\models\\model.zip")
6464
});
6565

6666
(string trainCode, string projectCode, string helperCode) = consoleCodeGen.GenerateCode();
@@ -81,10 +81,10 @@ public void GeneratedHelperCodeTest()
8181
MlTask = TaskKind.BinaryClassification,
8282
OutputBaseDir = null,
8383
OutputName = "MyNamespace",
84-
TrainDataset = new FileInfo("x:\\dummypath\\dummy_train.csv"),
85-
TestDataset = new FileInfo("x:\\dummypath\\dummy_test.csv"),
84+
TrainDataset = new MockFileInfo("x:\\dummypath\\dummy_train.csv"),
85+
TestDataset = new MockFileInfo("x:\\dummypath\\dummy_test.csv"),
8686
LabelName = "Label",
87-
ModelPath = new FileInfo("x:\\models\\model.zip")
87+
ModelPath = new MockFileInfo("x:\\models\\model.zip")
8888
});
8989

9090
(string trainCode, string projectCode, string helperCode) = consoleCodeGen.GenerateCode();
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using Microsoft.ML.CLI.Utilities.File;
6+
7+
namespace mlnet.Test.Utilities
8+
{
9+
internal class MockFileInfo : IFileInfo
10+
{
11+
public string FullName { get; }
12+
13+
public MockFileInfo(string filePath)
14+
{
15+
FullName = filePath;
16+
}
17+
}
18+
}

src/mlnet/CodeGenerator/CSharp/CodeGeneratorSettings.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
using System.IO;
2-
using Microsoft.ML.Auto;
1+
using Microsoft.ML.Auto;
2+
using Microsoft.ML.CLI.Utilities.File;
33

44
namespace Microsoft.ML.CLI.CodeGenerator.CSharp
55
{
66
internal class CodeGeneratorSettings
77
{
88
internal string LabelName { get; set; }
99

10-
internal FileInfo ModelPath { get; set; }
10+
internal IFileInfo ModelPath { get; set; }
1111

1212
internal string OutputName { get; set; }
1313

1414
internal string OutputBaseDir { get; set; }
1515

16-
internal FileInfo TrainDataset { get; set; }
16+
internal IFileInfo TrainDataset { get; set; }
1717

18-
internal FileInfo TestDataset { get; set; }
18+
internal IFileInfo TestDataset { get; set; }
1919

2020
internal TaskKind MlTask { get; set; }
2121

src/mlnet/Commands/New/NewCommandHandler.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Microsoft.ML.CLI.CodeGenerator.CSharp;
1010
using Microsoft.ML.CLI.Data;
1111
using Microsoft.ML.CLI.Utilities;
12+
using Microsoft.ML.CLI.Utilities.File;
1213
using Microsoft.ML.Data;
1314
using NLog;
1415

@@ -76,7 +77,7 @@ public void Execute()
7677

7778
// Save the model
7879
logger.Log(LogLevel.Info, Strings.SavingBestModel);
79-
var modelPath = new FileInfo(Path.Combine(settings.OutputPath.FullName, $"model.zip"));
80+
var modelPath = new FileInfo(Path.Combine(settings.OutputPath.FullName, "model.zip"));
8081
Utils.SaveModel(model, modelPath, context);
8182

8283
// Generate the Project
@@ -110,13 +111,13 @@ internal void GenerateProject(ColumnInferenceResults columnInference, Pipeline p
110111
columnInference,
111112
new CodeGeneratorSettings()
112113
{
113-
TrainDataset = settings.Dataset,
114+
TrainDataset = new SystemFileInfo(settings.Dataset),
114115
MlTask = taskKind,
115-
TestDataset = settings.TestDataset,
116+
TestDataset = new SystemFileInfo(settings.TestDataset),
116117
OutputName = settings.Name,
117118
OutputBaseDir = settings.OutputPath.FullName,
118119
LabelName = labelName,
119-
ModelPath = modelPath
120+
ModelPath = new SystemFileInfo(modelPath)
120121
});
121122
codeGenerator.GenerateOutput();
122123
}

src/mlnet/Utilities/File/IFileInfo.cs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
namespace Microsoft.ML.CLI.Utilities.File
6+
{
7+
internal interface IFileInfo
8+
{
9+
string FullName { get; }
10+
}
11+
}

0 commit comments

Comments
 (0)