Пример #1
0
    def test_message_to_child(self):
        """
        Test the message to child of Concatenate node.
        """

        # Two parents without shapes
        X1 = GaussianARD(0, 1, plates=(2, ), shape=())
        X2 = GaussianARD(0, 1, plates=(3, ), shape=())
        Y = Concatenate(X1, X2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0] * np.ones((5, )))[:2], u1[0] * np.ones(
            (2, )))
        self.assertAllClose((u[1] * np.ones((5, )))[:2], u1[1] * np.ones(
            (2, )))
        self.assertAllClose((u[0] * np.ones((5, )))[2:], u2[0] * np.ones(
            (3, )))
        self.assertAllClose((u[1] * np.ones((5, )))[2:], u2[1] * np.ones(
            (3, )))

        # Two parents with shapes
        X1 = GaussianARD(0, 1, plates=(2, ), shape=(4, ))
        X2 = GaussianARD(0, 1, plates=(3, ), shape=(4, ))
        Y = Concatenate(X1, X2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0] * np.ones((5, 4)))[:2], u1[0] * np.ones(
            (2, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4, 4)))[:2], u1[1] * np.ones(
            (2, 4, 4)))
        self.assertAllClose((u[0] * np.ones((5, 4)))[2:], u2[0] * np.ones(
            (3, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4, 4)))[2:], u2[1] * np.ones(
            (3, 4, 4)))

        # Test with non-constant axis
        X1 = GaussianARD(0, 1, plates=(2, 4), shape=())
        X2 = GaussianARD(0, 1, plates=(3, 4), shape=())
        Y = Concatenate(X1, X2, axis=-2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0] * np.ones((5, 4)))[:2], u1[0] * np.ones(
            (2, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4)))[:2], u1[1] * np.ones(
            (2, 4)))
        self.assertAllClose((u[0] * np.ones((5, 4)))[2:], u2[0] * np.ones(
            (3, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4)))[2:], u2[1] * np.ones(
            (3, 4)))

        # Test with constant parent
        X1 = np.random.randn(2, 4)
        X2 = GaussianARD(0, 1, plates=(3, ), shape=(4, ))
        Y = Concatenate(X1, X2)
        u1 = Y.parents[0].get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0] * np.ones((5, 4)))[:2], u1[0] * np.ones(
            (2, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4, 4)))[:2], u1[1] * np.ones(
            (2, 4, 4)))
        self.assertAllClose((u[0] * np.ones((5, 4)))[2:], u2[0] * np.ones(
            (3, 4)))
        self.assertAllClose((u[1] * np.ones((5, 4, 4)))[2:], u2[1] * np.ones(
            (3, 4, 4)))

        pass
Пример #2
0
    def test_message_to_child(self):
        """
        Test the message to child of Concatenate node.
        """

        # Two parents without shapes
        X1 = GaussianARD(0, 1, plates=(2,), shape=())
        X2 = GaussianARD(0, 1, plates=(3,), shape=())
        Y = Concatenate(X1, X2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0]*np.ones((5,)))[:2],
                            u1[0]*np.ones((2,)))
        self.assertAllClose((u[1]*np.ones((5,)))[:2],
                            u1[1]*np.ones((2,)))
        self.assertAllClose((u[0]*np.ones((5,)))[2:],
                            u2[0]*np.ones((3,)))
        self.assertAllClose((u[1]*np.ones((5,)))[2:],
                            u2[1]*np.ones((3,)))

        # Two parents with shapes
        X1 = GaussianARD(0, 1, plates=(2,), shape=(4,))
        X2 = GaussianARD(0, 1, plates=(3,), shape=(4,))
        Y = Concatenate(X1, X2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0]*np.ones((5,4)))[:2],
                            u1[0]*np.ones((2,4)))
        self.assertAllClose((u[1]*np.ones((5,4,4)))[:2],
                            u1[1]*np.ones((2,4,4)))
        self.assertAllClose((u[0]*np.ones((5,4)))[2:],
                            u2[0]*np.ones((3,4)))
        self.assertAllClose((u[1]*np.ones((5,4,4)))[2:],
                            u2[1]*np.ones((3,4,4)))

        # Test with non-constant axis
        X1 = GaussianARD(0, 1, plates=(2,4), shape=())
        X2 = GaussianARD(0, 1, plates=(3,4), shape=())
        Y = Concatenate(X1, X2, axis=-2)
        u1 = X1.get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0]*np.ones((5,4)))[:2],
                            u1[0]*np.ones((2,4)))
        self.assertAllClose((u[1]*np.ones((5,4)))[:2],
                            u1[1]*np.ones((2,4)))
        self.assertAllClose((u[0]*np.ones((5,4)))[2:],
                            u2[0]*np.ones((3,4)))
        self.assertAllClose((u[1]*np.ones((5,4)))[2:],
                            u2[1]*np.ones((3,4)))

        # Test with constant parent
        X1 = np.random.randn(2, 4)
        X2 = GaussianARD(0, 1, plates=(3,), shape=(4,))
        Y = Concatenate(X1, X2)
        u1 = Y.parents[0].get_moments()
        u2 = X2.get_moments()
        u = Y.get_moments()
        self.assertAllClose((u[0]*np.ones((5,4)))[:2],
                            u1[0]*np.ones((2,4)))
        self.assertAllClose((u[1]*np.ones((5,4,4)))[:2],
                            u1[1]*np.ones((2,4,4)))
        self.assertAllClose((u[0]*np.ones((5,4)))[2:],
                            u2[0]*np.ones((3,4)))
        self.assertAllClose((u[1]*np.ones((5,4,4)))[2:],
                            u2[1]*np.ones((3,4,4)))


        pass