def test_random_rule_table(self): table, _, _ = cpl.random_rule_table(k=2, r=1) self.assertTrue(0 <= table['000'] <= 1) self.assertTrue(0 <= table['001'] <= 1) self.assertTrue(0 <= table['010'] <= 1) self.assertTrue(0 <= table['100'] <= 1) self.assertTrue(0 <= table['110'] <= 1) self.assertTrue(0 <= table['011'] <= 1) self.assertTrue(0 <= table['101'] <= 1) self.assertTrue(0 <= table['111'] <= 1)
def test_table_walk_through_decreasing_isotropic(self): table, actual_lambda, quiescent_state = cpl.random_rule_table( k=3, r=1, lambda_val=1.0, isotropic=True) table, new_lambda = cpl.table_walk_through( table, lambda_val=0.0, k=3, r=1, quiescent_state=quiescent_state, isotropic=True) self.assertEqual(new_lambda, 0.0)
def test_table_walk_through_decreasing_strong_quiescence(self): table, actual_lambda, quiescent_state = cpl.random_rule_table( k=3, r=1, lambda_val=1.0, strong_quiescence=True) table, new_lambda = cpl.table_walk_through( table, lambda_val=0.0, k=3, r=1, quiescent_state=quiescent_state, strong_quiescence=True) np.testing.assert_almost_equal(new_lambda, 0.07, decimal=2)
def test_random_rule_table_lambda1(self): table, actual_lambda, quiescent_val = cpl.random_rule_table( k=2, r=1, lambda_val=1.0, quiescent_state=1) self.assertEqual(table['000'], 0) self.assertEqual(table['001'], 0) self.assertEqual(table['010'], 0) self.assertEqual(table['100'], 0) self.assertEqual(table['110'], 0) self.assertEqual(table['011'], 0) self.assertEqual(table['101'], 0) self.assertEqual(table['111'], 0) self.assertEqual(actual_lambda, 1.0) self.assertEqual(quiescent_val, 1)
def test_random_rule_table_isotropic(self): table, _, _ = cpl.random_rule_table(k=3, r=1, isotropic=True) self.assertTrue(0 <= table['000'] <= 2) self.assertTrue(0 <= table['111'] <= 2) self.assertTrue(0 <= table['222'] <= 2) self.assertTrue(0 <= table['010'] <= 2) self.assertTrue(0 <= table['020'] <= 2) self.assertTrue(0 <= table['101'] <= 2) self.assertTrue(0 <= table['202'] <= 2) self.assertTrue(0 <= table['121'] <= 2) self.assertTrue(0 <= table['212'] <= 2) self.assertEqual(table['001'], table['100']) self.assertEqual(table['002'], table['200']) self.assertEqual(table['110'], table['011']) self.assertEqual(table['220'], table['022']) self.assertEqual(table['120'], table['021']) self.assertEqual(table['210'], table['012']) self.assertEqual(table['211'], table['112']) self.assertEqual(table['122'], table['221']) self.assertEqual(table['102'], table['201'])
import cellpylib as cpl # Glider cellular_automaton = cpl.init_simple2d(60, 60) cellular_automaton[:, [28, 29, 30, 30], [30, 31, 29, 31]] = 1 # Blinker cellular_automaton[:, [40, 40, 40], [15, 16, 17]] = 1 # Light Weight Space Ship (LWSS) cellular_automaton[:, [18, 18, 19, 20, 21, 21, 21, 21, 20], [45, 48, 44, 44, 44, 45, 46, 47, 48]] = 1 # evolve the cellular automaton for 60 time steps cellular_automaton = cpl.evolve2d(cellular_automaton, timesteps=60, neighbourhood='Moore', apply_rule=cpl.game_of_life_rule) cpl.plot2d_animate(cellular_automaton) #%% rule table import cellpylib as cpl rule_table, actual_lambda, quiescent_state = cpl.random_rule_table( lambda_val=0.45, k=4, r=2, strong_quiescence=True, isotropic=True) cellular_automaton = cpl.init_random(128, k=4) # use the built-in table_rule to use the generated rule table cellular_automaton = cpl.evolve( cellular_automaton, timesteps=200, apply_rule=lambda n, c, t: cpl.table_rule(n, rule_table), r=2)
def test_table_walk_through_increasing(self): table, actual_lambda, quiescent_state = cpl.random_rule_table( k=3, r=1, lambda_val=0.0) table, new_lambda = cpl.table_walk_through( table, lambda_val=1.0, k=3, r=1, quiescent_state=quiescent_state) self.assertEqual(new_lambda, 1.0)
def test_random_rule_table_strong_quiescence(self): table, _, _ = cpl.random_rule_table(k=4, r=1, strong_quiescence=True) self.assertEqual(table['000'], 0) self.assertEqual(table['111'], 1) self.assertEqual(table['222'], 2) self.assertEqual(table['333'], 3)