def test_atm_caching(self): bn = template_behaviour_generator(5, 2, 0.5, 0.0, 1, 0).new() t = time.perf_counter() for _ in range(10): bn.atm t_cache = time.perf_counter() - t t = time.perf_counter() for _ in range(10): bn.atm bn, *_ = bn_scramble_strategy(bn, 1) t_cache_w_changes = time.perf_counter() - t t = time.perf_counter() for _ in range(10): ATM(bn.to_ebnf()) t_creation = time.perf_counter() - t self.assertTrue(t_cache < t_creation and t_cache < t_cache_w_changes)
def test_atm(self): bn = template_behaviour_generator(5, 2, 0.5, 0.0, 1, 0).new() atm = bn.atm for row in atm.tableau: s = sum(row) print(s) self.assertTrue(s > 0.98 and s < 1.02)
def test_default_scramble_strategy(self): bn = template_behaviour_generator(5, 2, 0.5, 0.0, 1, 0).new() bn_copy = BooleanNetwork.from_json(bn.to_json()) bn_copy, flips = bn_scramble_strategy(bn_copy, 1) self.assertFalse(bn.to_json() == bn_copy.to_json()) bn_copy = edit_boolean_network(bn_copy, flips) self.assertTrue(bn.to_json() == bn_copy.to_json())
def test_bn_update(self): bn = template_behaviour_generator(5, 2, 0.5, 0.0, 1, 0).new() bn_copy = BooleanNetwork.from_json(bn.to_json()) matching_states = [] for _ in range(10): s1 = binstate(bn.update()) s2 = binstate(bn_copy.update()) matching_states.append(s1 == s2) self.assertTrue(all(matching_states))
def generate_or_load_bn(params: BNParams, path: Path, save_virgin=False): __bn = None if check_path(path, create_if_dir=True): generator = template_behaviour_generator(*params) __bn = generate_rbn(generator.new_obn, force_consistency=True) if save_virgin: p = path / 'virgin_bn_{date}.json'.format(date=FROZEN_DATE) write_json(__bn.to_json(), p) logger.info(f'Virgin BN saved to {p}.') else: __bn = OpenBooleanNetwork.from_json(read_json(path)) logger.info(f'BN loaded from {path}.') return __bn
def test_ebnf(self): bn = template_behaviour_generator(5, 2, 0.5, 0.0, 1, 0).new() bn_copy = BooleanNetwork.from_json(bn.to_json()) self.assertTrue(bn.to_ebnf(), bn_copy.to_ebnf())