コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }