public void ConstrainEqualRandomFactorInfo() { FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new MethodReference(typeof(Constrain), "EqualRandom<,>", typeof(bool), typeof(Bernoulli)).GetMethodInfo()); Assert.Equal(2, info.ParameterNames.Count); Console.WriteLine(info); IDictionary <string, Type> parameterTypes = new Dictionary <string, Type>(); parameterTypes["value"] = typeof(Bernoulli); parameterTypes["dist"] = typeof(Bernoulli); parameterTypes["result"] = typeof(Bernoulli); MessageFcnInfo fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "value", parameterTypes); Console.WriteLine(fcninfo); Assert.False(fcninfo.PassResult); Assert.False(fcninfo.PassResultIndex); Assert.Equal(1, fcninfo.Dependencies.Count); Assert.Equal(1, fcninfo.Requirements.Count); Console.WriteLine(); Console.WriteLine("All MessageFcnInfos:"); int count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos()) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); count++; } //Assert.Equal(4, count); }
public void IsPositiveFactorInfo() { FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new Func <double, bool>(Factor.IsPositive)); Assert.True(info.IsDeterministicFactor); var parameterTypes = new Dictionary <string, Type> { ["isPositive"] = typeof(bool), ["x"] = typeof(Gaussian) }; MessageFcnInfo fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "x", parameterTypes); Assert.True(fcninfo.NotSupportedMessage == null); CheckMessageFcnInfo(fcninfo, info); DependencyInformation depInfo = FactorManager.GetDependencyInfo(fcninfo.Method); Assert.Throws <NotSupportedException>(() => { fcninfo = info.GetMessageFcnInfo(factorManager, "AverageLogarithm", "x", parameterTypes); }); bool found = false; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos("AverageLogarithm", null, null)) { CheckMessageFcnInfo(fcninfo2, info); if (fcninfo2.TargetParameter.Equals("x")) { Assert.True(fcninfo2.NotSupportedMessage != null); found = true; } } Assert.True(found); fcninfo = info.GetMessageFcnInfo(factorManager, "LogAverageFactor", "", parameterTypes); CheckMessageFcnInfo(fcninfo, info); }
public void ReplicateFactorInfo() { DependencyInformation depInfo; FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new MethodReference(typeof(Clone), "Replicate<>", typeof(bool)).GetMethodInfo()); Assert.True(info.IsDeterministicFactor); var parameterTypes = new Dictionary <string, Type> { ["Uses"] = typeof(Bernoulli[]), ["Def"] = typeof(Bernoulli), ["resultIndex"] = typeof(int), ["result"] = typeof(Bernoulli) }; for (int i = 0; i < 3; i++) { MessageFcnInfo fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "Uses", parameterTypes); Assert.True(fcninfo.PassResult); Assert.True(fcninfo.PassResultIndex); Assert.Equal(2, fcninfo.Dependencies.Count); Assert.Equal(1, fcninfo.Requirements.Count); Assert.True(fcninfo.SkipIfAllUniform); if (i == 0) { depInfo = FactorManager.GetDependencyInfo(fcninfo.Method); } } parameterTypes.Remove("resultIndex"); MessageFcnInfo fcninfo3 = info.GetMessageFcnInfo(factorManager, "AverageConditional", "Def", parameterTypes); Assert.True(fcninfo3.SkipIfAllUniform); bool verbose = false; if (verbose) { Console.WriteLine("All AverageConditional MessageFcnInfos:"); } int count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos("AverageConditional", null, null)) { if (verbose) { Console.WriteLine(fcninfo2); } CheckMessageFcnInfo(fcninfo2, info); count++; } //Assert.Equal(4, count); }
public void ConstrainEqualRandomOpenFactorInfo() { FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new MethodReference(typeof(Constrain), "EqualRandom<,>").GetMethodInfo()); Console.WriteLine(info); Console.WriteLine(); Console.WriteLine("All AverageConditionals:"); foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos("AverageConditional", null, null)) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); } }
public void IsPositiveFactorInfo() { FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new Func <double, bool>(Factor.IsPositive)); Console.WriteLine(info); Assert.True(info.IsDeterministicFactor); IDictionary <string, Type> parameterTypes = new Dictionary <string, Type>(); parameterTypes["isPositive"] = typeof(bool); parameterTypes["x"] = typeof(Gaussian); MessageFcnInfo fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "x", parameterTypes); Assert.True(fcninfo.NotSupportedMessage == null); CheckMessageFcnInfo(fcninfo, info); DependencyInformation depInfo = FactorManager.GetDependencyInfo(fcninfo.Method); Console.WriteLine("Dependencies:"); Console.WriteLine(StringUtil.ToString(depInfo.Dependencies)); Console.WriteLine("Requirements:"); Console.WriteLine(StringUtil.ToString(depInfo.Requirements)); try { fcninfo = info.GetMessageFcnInfo(factorManager, "AverageLogarithm", "x", parameterTypes); Assert.True(false, "did not throw exception"); } catch (NotSupportedException ex) { Console.WriteLine("Correctly failed with exception: " + ex); } bool found = false; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos("AverageLogarithm", null, null)) { CheckMessageFcnInfo(fcninfo2, info); if (fcninfo2.TargetParameter.Equals("x")) { Assert.True(fcninfo2.NotSupportedMessage != null); found = true; } } Assert.True(found); fcninfo = info.GetMessageFcnInfo(factorManager, "LogAverageFactor", "", parameterTypes); CheckMessageFcnInfo(fcninfo, info); }
public void DifferenceFactorInfo() { FactorManager.FactorInfo info = FactorManager.GetFactorInfo(new MethodReference(typeof(Factor), "Difference").GetMethodInfo()); Console.WriteLine(info); Assert.True(info.IsDeterministicFactor); IDictionary <string, Type> parameterTypes = new Dictionary <string, Type>(); parameterTypes["Difference"] = typeof(Gaussian); parameterTypes["A"] = typeof(Gaussian); parameterTypes["B"] = typeof(Gaussian); //parameterTypes["result"] = typeof(Gaussian); MessageFcnInfo fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "Difference", parameterTypes); Assert.False(fcninfo.PassResult); Assert.False(fcninfo.PassResultIndex); Assert.Equal(2, fcninfo.Dependencies.Count); Assert.Equal(2, fcninfo.Requirements.Count); Console.WriteLine(fcninfo); Console.WriteLine("Parameter types:"); Console.WriteLine(StringUtil.CollectionToString(fcninfo.GetParameterTypes(), ",")); Console.WriteLine(); try { fcninfo = info.GetMessageFcnInfo(factorManager, "Rubbish", "Difference", parameterTypes); Assert.True(false, "Did not throw an exception"); } catch (ArgumentException ex) { if (!ex.Message.Contains("MissingMethodException")) { Assert.True(false, "Correctly threw exception, but with wrong message"); } Console.WriteLine("Different exception: " + ex); } Console.WriteLine(); try { parameterTypes["result"] = typeof(double); fcninfo = info.GetMessageFcnInfo(factorManager, "AverageConditional", "Difference", parameterTypes); Assert.True(false, "Did not throw an exception"); } catch (ArgumentException ex) { Console.WriteLine("Correctly failed with exception: " + ex); } Console.WriteLine(); Console.WriteLine("All messages to A:"); int count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos(null, "A", null)) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); count++; } //Assert.Equal(8, count); Console.WriteLine(); Console.WriteLine("All messages to Difference:"); count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos(null, "Difference", null)) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); count++; } Assert.Equal(8, count); Console.WriteLine(); Console.WriteLine("All AverageConditionals:"); count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos("AverageConditional", null, null)) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); count++; } Assert.Equal(12, count); Console.WriteLine(); Console.WriteLine("All MessageFcnInfos:"); count = 0; foreach (MessageFcnInfo fcninfo2 in info.GetMessageFcnInfos()) { Console.WriteLine(fcninfo2); CheckMessageFcnInfo(fcninfo2, info); count++; } //Assert.Equal(26, count); }