Skip to content

Commit 14c9f01

Browse files
committed
SF-3656 Fix argument out of range error when using two training sources
1 parent 0c0ac28 commit 14c9f01

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

src/SIL.XForge.Scripture/Services/MachineProjectService.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,11 +1286,44 @@ .. corporaSyncInfo
12861286
{
12871287
for (int j = 0; j < trainingCorpusConfig.SourceFilters?.Count; j++)
12881288
{
1289-
if (trainingCorpusConfig.TargetFilters?[j] is not null)
1289+
if (trainingCorpusConfig.TargetFilters is not null)
12901290
{
1291-
trainingCorpusConfig.TargetFilters[j].ScriptureRange = trainingCorpusConfig
1292-
.SourceFilters[j]
1293-
.ScriptureRange;
1291+
if (
1292+
trainingCorpusConfig.TargetFilters.Count > j
1293+
&& trainingCorpusConfig.TargetFilters[j] is not null
1294+
)
1295+
{
1296+
// Set the scripture range for the matching target filter
1297+
trainingCorpusConfig.TargetFilters[j].ScriptureRange = trainingCorpusConfig
1298+
.SourceFilters[j]
1299+
.ScriptureRange;
1300+
}
1301+
else if (trainingCorpusConfig.TargetFilters[0] is not null)
1302+
{
1303+
// There is no matching target filter, so update the first target filter
1304+
if (string.IsNullOrWhiteSpace(trainingCorpusConfig.TargetFilters[0].ScriptureRange))
1305+
{
1306+
// No previous target filter
1307+
trainingCorpusConfig.TargetFilters[0].ScriptureRange = trainingCorpusConfig
1308+
.SourceFilters[j]
1309+
.ScriptureRange;
1310+
}
1311+
else if (!string.IsNullOrWhiteSpace(trainingCorpusConfig.SourceFilters[j].ScriptureRange))
1312+
{
1313+
// Merge the two scripture ranges by getting the distinct book names
1314+
// This will also preserve any chapter ranges that are specified
1315+
trainingCorpusConfig.TargetFilters[0].ScriptureRange = string.Join(
1316+
';',
1317+
string.Join(
1318+
';',
1319+
trainingCorpusConfig.TargetFilters[0].ScriptureRange,
1320+
trainingCorpusConfig.SourceFilters[j].ScriptureRange
1321+
)
1322+
.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
1323+
.Distinct()
1324+
);
1325+
}
1326+
}
12941327
}
12951328
}
12961329
}

test/SIL.XForge.Scripture.Tests/Services/MachineProjectServiceTests.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class MachineProjectServiceTests
5050
private const string Corpus02 = "corpus02";
5151
private const string Corpus03 = "corpus03";
5252
private const string Corpus04 = "corpus04";
53+
private const string Corpus05 = "corpus04";
5354
private const string Data01 = "data01";
5455
private const string File01 = "file01";
5556
private const string File02 = "file02";
@@ -1908,6 +1909,7 @@ public void GetTranslationBuildConfig_TranslationScriptureRangesAndTrainingScrip
19081909
const string project01ScriptureRange = "MAT;MRK";
19091910
// No scripture range is supported for target pre-translate translation (project02)
19101911
const string project03ScriptureRange = "LUK;JHN";
1912+
const string project04ScriptureRange = "ACT;ROM";
19111913
var buildConfig = new BuildConfig
19121914
{
19131915
TranslationScriptureRanges =
@@ -1917,6 +1919,7 @@ public void GetTranslationBuildConfig_TranslationScriptureRangesAndTrainingScrip
19171919
TrainingScriptureRanges =
19181920
[
19191921
new ProjectScriptureRange { ProjectId = Project03, ScriptureRange = project03ScriptureRange },
1922+
new ProjectScriptureRange { ProjectId = Project04, ScriptureRange = project04ScriptureRange },
19201923
],
19211924
};
19221925
List<ServalCorpusSyncInfo> corporaSyncInfo =
@@ -1945,6 +1948,13 @@ public void GetTranslationBuildConfig_TranslationScriptureRangesAndTrainingScrip
19451948
new ServalCorpusSyncInfo
19461949
{
19471950
CorpusId = Corpus04,
1951+
IsSource = true,
1952+
ParallelCorpusId = ParallelCorpus02,
1953+
ProjectId = Project04,
1954+
},
1955+
new ServalCorpusSyncInfo
1956+
{
1957+
CorpusId = Corpus05,
19481958
IsSource = false,
19491959
ParallelCorpusId = ParallelCorpus02,
19501960
ProjectId = Project02,
@@ -1973,7 +1983,7 @@ public void GetTranslationBuildConfig_TranslationScriptureRangesAndTrainingScrip
19731983
.ScriptureRange
19741984
);
19751985
Assert.AreEqual(
1976-
project03ScriptureRange,
1986+
string.Join(';', project03ScriptureRange, project04ScriptureRange),
19771987
actual
19781988
.TrainOn!.Single(c => c.ParallelCorpusId == ParallelCorpus02)
19791989
.TargetFilters!.Single(f => f.CorpusId == Corpus04)

0 commit comments

Comments
 (0)