Esempio n. 1
0
 def test_update_pin_invalid_indicies(self):
     net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                     theta=WTNetwork.positive_threshold)
     with self.assertRaises(IndexError):
         net.update([0, 0], values={-3: 0})
     with self.assertRaises(IndexError):
         net.update([0, 0], values={2: 0})
Esempio n. 2
0
 def test_update_values_none(self):
     net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                     theta=WTNetwork.positive_threshold)
     xs = [0, 0]
     self.assertEqual([0, 1], net.update(xs, values=None))
     xs = [0, 0]
     self.assertEqual([0, 1], net.update(xs, values={}))
Esempio n. 3
0
 def test_update_invalid_values(self):
     net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                     theta=WTNetwork.positive_threshold)
     with self.assertRaises(ValueError):
         net.update([0, 0], values={0: 2})
     with self.assertRaises(ValueError):
         net.update([0, 0], values={0: -1})
Esempio n. 4
0
    def test_update_values(self):
        net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                        theta=WTNetwork.negative_threshold)

        xs = [1, 1]
        self.assertEqual([1, 1], net.update(xs, values={1: 1}))

        net.theta = WTNetwork.positive_threshold
        xs = [0, 0]
        self.assertEqual([1, 1], net.update(xs, values={0: 1}))
Esempio n. 5
0
    def test_update_pin(self):
        net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0])

        net.theta = WTNetwork.negative_threshold
        xs = [1, 1]
        self.assertEqual([1, 0], net.update(xs, pin=[0]))

        net.theta = WTNetwork.positive_threshold
        xs = [0, 0]
        self.assertEqual([0, 0], net.update(xs, pin=[1]))
Esempio n. 6
0
    def test_fission_yeast(self):
        net = WTNetwork(
            [[-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
             [0.0, 0.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0],
             [-1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0],
             [-1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0],
             [0.0, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 0.0],
             [0.0, 0.0, -1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0],
             [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
             [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0],
             [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0]],
            [0.0, -0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0])

        self.assertEqual(9, net.size)
        self.assertEqual(512, len(list(net)))

        init = [1, 0, 1, 1, 0, 0, 1, 0, 0]
        bio_sequence = [[0, 0, 0, 0, 0, 0, 1, 0, 0],
                        [0, 1, 0, 0, 0, 0, 1, 0, 0],
                        [0, 1, 0, 0, 0, 0, 0, 1, 0],
                        [0, 1, 0, 0, 0, 1, 0, 1, 0],
                        [0, 1, 0, 0, 1, 1, 0, 1, 0],
                        [0, 0, 0, 0, 1, 0, 0, 1, 1],
                        [0, 0, 1, 1, 0, 0, 1, 0, 1],
                        [0, 0, 1, 1, 0, 0, 1, 0, 0]]

        for expected in bio_sequence:
            self.assertEqual(expected, net.update(init))
Esempio n. 7
0
    def test_fission_yeast_numpy(self):
        net = WTNetwork(
            [[-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
             [0.0, 0.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0],
             [-1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0],
             [-1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0],
             [0.0, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 0.0],
             [0.0, 0.0, -1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0],
             [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
             [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0],
             [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0]],
            [0.0, -0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0])

        self.assertEqual(9, net.size)
        self.assertEqual(512, len(list(net)))

        init = np.asarray([1, 0, 1, 1, 0, 0, 1, 0, 0])
        bio_sequence = np.asarray([[0, 0, 0, 0, 0, 0, 1, 0, 0],
                                   [0, 1, 0, 0, 0, 0, 1, 0, 0],
                                   [0, 1, 0, 0, 0, 0, 0, 1, 0],
                                   [0, 1, 0, 0, 0, 1, 0, 1, 0],
                                   [0, 1, 0, 0, 1, 1, 0, 1, 0],
                                   [0, 0, 0, 0, 1, 0, 0, 1, 1],
                                   [0, 0, 1, 1, 0, 0, 1, 0, 1],
                                   [0, 0, 1, 1, 0, 0, 1, 0, 0]])

        for expected in bio_sequence:
            self.assertTrue(np.array_equal(expected, net.update(init)))
Esempio n. 8
0
 def test_update_values_pin_clash(self):
     net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                     theta=WTNetwork.positive_threshold)
     with self.assertRaises(ValueError):
         net.update([0, 0], pin=[0], values={0: 1})
     with self.assertRaises(ValueError):
         net.update([0, 0], pin=[1], values={1: 0})
     with self.assertRaises(ValueError):
         net.update([0, 0], pin=[1], values={0: 0, 1: 0})
     with self.assertRaises(ValueError):
         net.update([0, 0], pin=[1, 0], values={0: 0})
Esempio n. 9
0
 def test_update_pin_index_clash(self):
     net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                     theta=WTNetwork.positive_threshold)
     with self.assertRaises(ValueError):
         net.update([0, 0], index=0, pin=[1])
     with self.assertRaises(ValueError):
         net.update([0, 0], index=1, pin=[1])
     with self.assertRaises(ValueError):
         net.update([0, 0], index=1, pin=[0, 1])
Esempio n. 10
0
    def test_user_defined_threshold(self):
        def reverse_negative(values, states):
            if isinstance(values, list) or isinstance(values, np.ndarray):
                for i, x in enumerate(values):
                    if x <= 0:
                        states[i] = 1
                    else:
                        states[i] = 0
                return states
            else:
                if values <= 0:
                    return 1
                else:
                    return 0

        net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0],
                        theta=reverse_negative)
        xs = [0, 0]
        self.assertEqual([1, 1], net.update(xs))
        self.assertEqual([1, 1], xs)

        xs = [0, 0]
        self.assertEqual([1, 0], net.update(xs, 0))
        self.assertEqual([1, 0], xs)

        xs = [0, 0]
        self.assertEqual([0, 1], net.update(xs, 1))
        self.assertEqual([0, 1], xs)

        xs = [1, 0]
        self.assertEqual([0, 1], net.update(xs))
        self.assertEqual([0, 1], xs)

        xs = [1, 0]
        self.assertEqual([0, 0], net.update(xs, 0))
        self.assertEqual([0, 0], xs)

        xs = [1, 0]
        self.assertEqual([1, 1], net.update(xs, 1))
        self.assertEqual([1, 1], xs)

        xs = [0, 1]
        self.assertEqual([1, 0], net.update(xs))
        self.assertEqual([1, 0], xs)

        xs = [0, 1]
        self.assertEqual([1, 1], net.update(xs, 0))
        self.assertEqual([1, 1], xs)

        xs = [0, 1]
        self.assertEqual([0, 0], net.update(xs, 1))
        self.assertEqual([0, 0], xs)

        xs = [1, 1]
        self.assertEqual([0, 1], net.update(xs))
        self.assertEqual([0, 1], xs)

        xs = [1, 1]
        self.assertEqual([0, 1], net.update(xs, 0))
        self.assertEqual([0, 1], xs)

        xs = [1, 1]
        self.assertEqual([1, 1], net.update(xs, 1))
        self.assertEqual([1, 1], xs)
Esempio n. 11
0
    def test_update_index(self):
        net = WTNetwork([[1, 0], [-1, 1]], [0.5, 0.0])

        self.assertEqual(WTNetwork.split_threshold, net.theta)

        xs = [0, 0]
        self.assertEqual([0, 0], net.update(xs, 0))
        self.assertEqual([0, 0], net.update(xs, 1))
        self.assertEqual([0, 0], xs)

        xs = [1, 0]
        self.assertEqual([1, 0], net.update(xs, 0))
        self.assertEqual([1, 0], net.update(xs, 1))
        self.assertEqual([1, 0], xs)

        xs = [0, 1]
        self.assertEqual([0, 1], net.update(xs, 0))
        self.assertEqual([0, 1], net.update(xs, 1))
        self.assertEqual([0, 1], xs)

        xs = [1, 1]
        self.assertEqual([1, 1], net.update(xs, 0))
        self.assertEqual([1, 1], net.update(xs, 1))
        self.assertEqual([1, 1], xs)

        net.theta = WTNetwork.negative_threshold

        xs = [0, 0]
        self.assertEqual([0, 0], net.update(xs, 0))
        self.assertEqual([0, 0], net.update(xs, 1))
        self.assertEqual([0, 0], xs)

        xs = [1, 0]
        self.assertEqual([1, 0], net.update(xs, 0))
        self.assertEqual([1, 0], net.update(xs, 1))
        self.assertEqual([1, 0], xs)

        xs = [0, 1]
        self.assertEqual([0, 1], net.update(xs, 0))
        self.assertEqual([0, 1], net.update(xs, 1))
        self.assertEqual([0, 1], xs)

        xs = [1, 1]
        self.assertEqual([1, 1], net.update(xs, 0))
        self.assertEqual([1, 0], net.update(xs, 1))
        self.assertEqual([1, 0], xs)

        net.theta = WTNetwork.positive_threshold

        xs = [0, 0]
        self.assertEqual([0, 0], net.update(xs, 0))
        self.assertEqual([0, 1], net.update(xs, 1))
        self.assertEqual([0, 1], xs)

        xs = [1, 0]
        self.assertEqual([1, 0], net.update(xs, 0))
        self.assertEqual([1, 0], net.update(xs, 1))
        self.assertEqual([1, 0], xs)

        xs = [0, 1]
        self.assertEqual([0, 1], net.update(xs, 0))
        self.assertEqual([0, 1], net.update(xs, 1))
        self.assertEqual([0, 1], xs)

        xs = [1, 1]
        self.assertEqual([1, 1], net.update(xs, 0))
        self.assertEqual([1, 1], net.update(xs, 1))
        self.assertEqual([1, 1], xs)
Esempio n. 12
0
 def test_update_invalid_index(self):
     net = WTNetwork([[1, 0], [1, 1]])
     with self.assertRaises(IndexError):
         net.update([0, 0], 2)
Esempio n. 13
0
    def test_update_invalid_states(self):
        net = WTNetwork([[1, 0], [1, 1]])
        with self.assertRaises(ValueError):
            net.update([-1, 0])

        with self.assertRaises(ValueError):
            net.update([1, -1])

        with self.assertRaises(ValueError):
            net.update([2, 0])

        with self.assertRaises(ValueError):
            net.update([1, 2])

        with self.assertRaises(ValueError):
            net.update([[1], [0]])

        with self.assertRaises(ValueError):
            net.update("101")
Esempio n. 14
0
 def test_update_empty_states(self):
     net = WTNetwork([[1, 0], [1, 1]])
     with self.assertRaises(ValueError):
         net.update([])