public void ProductWithLogOverrideNarrow() { for (var i = 0; i < 2; i++) { var dist1 = DiscreteChar.LetterOrDigit(); var dist2 = DiscreteChar.OneOf('1', '3', '5', '6'); var logOverrideProbability = Math.Log(0.9); dist1.SetToPartialUniformOf(dist1, logOverrideProbability); Xunit.Assert.True(dist1.HasLogProbabilityOverride); Xunit.Assert.False(dist2.IsBroad); if (i == 1) { Util.Swap(ref dist1, ref dist2); } var dist3 = DiscreteChar.Uniform(); dist3.SetToProduct(dist1, dist2); Xunit.Assert.False(dist3.HasLogProbabilityOverride); Assert.Equal(Math.Log(0.25), dist3.GetLogProb('5'), Eps); Xunit.Assert.True(double.IsNegativeInfinity(dist3.GetLogProb('a'))); } }
public void PartialUniformWithLogProbabilityOverride() { var dist = DiscreteChar.LetterOrDigit(); var probLetter = Math.Exp(dist.GetLogProb('j')); var probNumber = Math.Exp(dist.GetLogProb('5')); var logProbabilityOverride = Math.Log(0.7); var scaledDist = DiscreteChar.Uniform(); scaledDist.SetToPartialUniformOf(dist, logProbabilityOverride); var scaledLogProbLetter = scaledDist.GetLogProb('j'); var scaledLogProbNumber = scaledDist.GetLogProb('5'); Assert.Equal(scaledLogProbLetter, logProbabilityOverride, Eps); Assert.Equal(scaledLogProbNumber, logProbabilityOverride, Eps); // Check that cache has not been compromised. Assert.Equal(probLetter, Math.Exp(dist.GetLogProb('j')), Eps); Assert.Equal(probNumber, Math.Exp(dist.GetLogProb('5')), Eps); // Check that an exception is thrown if a bad maximumProbability is passed down. Xunit.Assert.Throws <ArgumentException>(() => { var badDist = DiscreteChar.Uniform(); badDist.SetToPartialUniformOf(dist, Math.Log(1.2)); }); }
public void HasLogOverride() { var dist1 = DiscreteChar.LetterOrDigit(); Xunit.Assert.False(dist1.HasLogProbabilityOverride); dist1.SetToPartialUniformOf(dist1, Math.Log(0.9)); Xunit.Assert.True(dist1.HasLogProbabilityOverride); }
public void CommonChars() { TestSupport("digit", DiscreteChar.Digit(), "0123456789", "Ab !Ј"); TestSupport("lower", DiscreteChar.Lower(), "abcdefghixyz", "ABC0123, "); TestSupport("upper", DiscreteChar.Upper(), "ABCDEFGHUXYZ", "abc0123, "); TestSupport("letter", DiscreteChar.Letter(), "aBcDeFgGhxyzXYZ", "0123! ,"); TestSupport("letterOrDigit", DiscreteChar.LetterOrDigit(), "abcABC0123xyzXYZ789", " !Ј$,"); TestSupport("wordChar", DiscreteChar.WordChar(), "abc_ABC_0123s", " !:.,"); TestSupport("whitespace", DiscreteChar.Whitespace(), " \t", "abcABC0123,:!"); }
public void Sum() { StringTransducer replace = StringTransducer.Sum( StringTransducer.Replace(DiscreteChar.Lower(), DiscreteChar.Digit()), StringTransducer.Replace(DiscreteChar.Lower(), DiscreteChar.LetterOrDigit())); StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "123", 2.0); StringInferenceTestUtilities.TestTransducerValue(replace, "w", "1337", 2.0); StringInferenceTestUtilities.TestTransducerValue(replace, "w", string.Empty, 2.0); StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, "17", 2.0); StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, string.Empty, 2.0); StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "worlds", 1.0); StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "WORLDS111", 1.0); StringInferenceTestUtilities.TestTransducerValue(replace, "123", "worlds", 0.0); StringInferenceTestUtilities.TestTransducerValue(replace, "123", "123", 0.0); StringInferenceTestUtilities.TestTransducerValue(replace, "1", string.Empty, 0.0); }
public void ReplaceAutomaton() { StringAutomaton automaton1 = StringAutomaton.Constant(2.0, DiscreteChar.Lower()); automaton1 = automaton1.Sum(StringAutomaton.ConstantOnElement(3.0, 'a')); StringAutomaton automaton2 = StringAutomaton.Constant(0.5, DiscreteChar.Digit()); automaton2 = automaton2.Sum(StringAutomaton.Constant(2.5, DiscreteChar.LetterOrDigit())); StringTransducer replace = StringTransducer.Replace(automaton1, automaton2); StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, "123", 6.0); StringInferenceTestUtilities.TestTransducerValue(replace, "a", "123", 15.0); StringInferenceTestUtilities.TestTransducerValue(replace, "ax", "AbC", 5.0); StringInferenceTestUtilities.TestTransducerValue(replace, "a", "a", 12.5); StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, string.Empty, 6.0); StringInferenceTestUtilities.TestTransducerValue(replace, "123", string.Empty, 0.0); StringInferenceTestUtilities.TestTransducerValue(replace, "AbC", "ax", 0.0); StringInferenceTestUtilities.TestTransducerValue(replace, "1", "1", 0.0); }