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})
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={}))
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})
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}))
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]))
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))
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)))
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})
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])
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)
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)
def test_update_invalid_index(self): net = WTNetwork([[1, 0], [1, 1]]) with self.assertRaises(IndexError): net.update([0, 0], 2)
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")
def test_update_empty_states(self): net = WTNetwork([[1, 0], [1, 1]]) with self.assertRaises(ValueError): net.update([])