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)