def test_next_cellref(self) -> None: ca = StepCanvas([Step([4, 5, 6])]) cr0 = CellRef(ca, 0) cr1 = CellRef(ca, 1) self.assertEqual(ca.next_addr(0), 1) self.assertEqual(ca.next_cellref(cr0), cr1) self.assertEqual(cr0.next_cellref(), cr1)
def run(bricks: Sequence[int], target: int, seed: int = 1, num_slipnet_iterations: Optional[int] = None, paint_threshold: float = 0.1) -> None: global fm, ca, cr0, cr1, cr2, cr3, wa lenable(Agent, Codelet, Fizzle) #, log_pulse) fm = FARGModel(slipnet=Slipnet(Graph.augment(eqn_graph, desnaggers_graph)), seed=seed, num_slipnet_iterations=num_slipnet_iterations, paint_threshold=paint_threshold) ca = fm.build(StepCanvas([Step(tuple(bricks))])) cr0 = CellRef(ca, 0) cr1 = CellRef(ca, 1) cr2 = CellRef(ca, 2) cr3 = CellRef(ca, 3) wa = fm.build( Want(startcell=cr0, target=target, on_success=RaiseException(SolvedPuzzle))) # try: fm.do_timestep(num=40) # 20 # except Exception as exc: # print(exc) pr(fm, extra=True)
def test_vma(self) -> None: # Regression test for a bug: When a canvas cell was painted over # after a VariantMakerFromAvails was created using it as a source, # the VariantMakerFromAvails would produce an invalid Consumer # (missing an operand). fm = FARGModel( slipnet=Slipnet(Graph.with_features([VariantMakerFromAvails()]))) ca = fm.build(StepCanvas([Step([4, 5, 6])])) cr0 = CellRef(ca, 0) cr1 = CellRef(ca, 1) cr1.paint(Step([5, 2], StepDelta([6, 4], [2], '-'))) # Consumer(12+5) will snag: 5 is avail but 12 is unavail co1 = fm.build(Consumer(operator=plus, operands=(12, 5), source=cr1)) fm.run_agent(co1, num=2) vma: VariantMakerFromAvails = fm.the( VariantMakerFromAvails) # type: ignore[assignment] assert vma, 'Consumer did not produce a VariantMakerFromAvails' self.assertEqual(vma.agent, co1) # Some other agent paints over cr1, removing the avail 5 cr1.paint(Step([4, 11], StepDelta([6, 5], [11], '+'))) #lenable(Agent, Codelet, Fizzle) fm.run_agent(vma) #ldisable_all() co2: Any = fm.built_by(vma)[0] assert isinstance(co2, Consumer), \ f'built by {short(co2)}, not a Consumer' self.assertEqual(len(as_list(co2.operands)), 2) fm.run_agent(co2) # Check for crash lp: Any = fm.built_by(co2)[0] self.assertIsInstance(lp, LitPainter)
def test_stepcanvas_basics(self) -> None: ca = StepCanvas([Step([4, 5, 6])]) self.assertEqual(ca[0], Step([4, 5, 6])) self.assertEqual(ca[1], None) self.assertEqual(ca[10], None) self.assertEqual(len(ca), 1) ca[1] = Step([6], StepDelta([4, 5], [9], '+')) self.assertEqual(ca[1], Step([6], StepDelta([4, 5], [9], '+'))) self.assertEqual(len(ca), 2)
def test_last_painted_cellref(self) -> None: ca = StepCanvas([Step([4, 5, 6])]) cr0 = CellRef(ca, 0) cr1 = CellRef(ca, 1) cr2 = CellRef(ca, 2) self.assertEqual(ca.last_painted_addr(), 0) self.assertEqual(ca.last_painted_cellref(), cr0) self.assertEqual(list(ca.cellrefs()), [cr0]) self.assertEqual(cr0.last_painted_cellref(), cr0) self.assertEqual(cr1.last_painted_cellref(), cr0) self.assertEqual(cr2.last_painted_cellref(), cr0) cr1.paint(Step([6, 9], StepDelta([4, 5], [9], '+'))) self.assertEqual(ca.last_painted_addr(), 1) self.assertEqual(ca.last_painted_cellref(), cr1) self.assertEqual(list(ca.cellrefs()), [cr0, cr1]) self.assertEqual(cr0.last_painted_cellref(), cr1) self.assertEqual(cr1.last_painted_cellref(), cr1) self.assertEqual(cr2.last_painted_cellref(), cr1)
def test_fargmodel_basics(self) -> None: fm = FARGModel() self.assertEqual(fm.t, 0) # Did it initialize a random-number seed? self.assertIsInstance(fm.seed, int) # Build something ca = fm.build(StepCanvas([Step([4, 5, 6])])) # Is it there? self.assertTrue(fm.the(StepCanvas)) # Build an Agent self.assertEqual(fm.agent_state(ag), Nonexistent) agent = fm.build(ag) self.assertEqual(fm.agent_state(agent), Born) # Build and link to builder one = fm.build(1, builder=agent) self.assertEqual(fm.ae_weight(agent, one), 1.0) self.assertEqual(fm.builder_of(one), agent) self.assertCountEqual(fm.behalf_of(one), [agent]) self.assertCountEqual(fm.built_by(agent), [one])
def test_cellref_basics(self) -> None: ca = StepCanvas([Step([4, 5, 6])]) cr0 = CellRef(ca, 0) cr1 = CellRef(ca, 1) # StepCanvas[0] self.assertEqual(cr0.value, Step([4, 5, 6])) self.assertCountEqual(as_iter(cr0.avails), [4, 5, 6]) taken, remaining = cr0.take_avails([4, 5]) self.assertCountEqual(taken, [4, 5]) self.assertCountEqual(remaining, [6]) self.assertEqual(cr0.value, Step([4, 5, 6])) self.assertTrue(cr0.has_a_value()) self.assertTrue(cr0.has_avail_value(4)) self.assertFalse(cr0.has_avail_value(7)) with self.assertRaises(ValuesNotAvail) as cm: taken, remaining = cr0.take_avails([4, 7]) self.assertEqual( cm.exception, ValuesNotAvail(cellref=cr0, avails=(4, None), unavails=(None, 7))) #StepCanvas[1] self.assertEqual(cr1.value, None) self.assertFalse(cr1.has_a_value()) self.assertCountEqual(as_iter(cr1.avails), []) with self.assertRaises(ValuesNotAvail) as cm: taken, remaining = cr1.take_avails([4, 7]) self.assertEqual( cm.exception, ValuesNotAvail(cellref=cr1, avails=(4, 7), unavails=())) # paint cr1.paint(Step([6], StepDelta([4, 5], [9], '+'))) self.assertEqual(ca[1], Step([6], StepDelta([4, 5], [9], '+')))
def pons_start_canvas(self) -> StepCanvas: return StepCanvas([self.step0])