Example #1
0
def test_do_not_cache_phi_zero_mice():
    s = examples.basic_subsystem()
    mechanism = ()  # zero phi
    mice = s.find_mice(Direction.CAUSE, mechanism)
    assert mice.phi == 0
    # don't cache anything because mice.phi == 0
    assert s._mice_cache.size() == 0
Example #2
0
def test_do_not_cache_phi_zero_mice():
    s = examples.basic_subsystem()
    mechanism = ()  # zero phi
    mice = s.find_mice('past', mechanism)
    assert mice.phi == 0
    # don't cache anything because mice.phi == 0
    assert s._mice_cache.size() == 0
Example #3
0
def test_inherited_cache_must_come_from_uncut_subsystem(redis_cache):
    s = examples.basic_subsystem()
    cut_s = Subsystem(s.network,
                      s.state,
                      s.node_indices,
                      cut=models.Cut((0, 2), (1, )))
    with pytest.raises(ValueError):
        cache.MICECache(s, cut_s._mice_cache)
Example #4
0
def test_inherited_mice_cache_keeps_unaffected_mice(redis_cache):
    """Cached MICE are saved from the parent cache if both
    the mechanism and the relevant connections are not cut."""
    s = examples.basic_subsystem()
    mechanism = (1,)
    mice = s.find_mice(Direction.CAUSE, mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (2,)

    # Does not cut from 0 -> 1 or split mechanism
    cut = models.Cut((0, 1), (2,))
    cut_s = Subsystem(s.network, s.state, s.node_indices,
                      cut=cut, mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key(Direction.CAUSE, mechanism)
    assert cut_s._mice_cache.get(key) == mice
Example #5
0
def test_cut_relevant_connections_mice_is_not_reusable(redis_cache):
    """If relevant connections are cut, cached mice are not usable
    when a cache is built from a parent cache."""
    s = examples.basic_subsystem()
    mechanism = (1,)
    mice = s.find_mice(Direction.CAUSE, mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (2,)

    # Cuts connections from 2 -> 1
    cut = models.Cut((0, 2), (1,))
    cut_s = Subsystem(s.network, s.state, s.node_indices,
                      cut=cut, mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key(Direction.CAUSE, mechanism)
    assert cut_s._mice_cache.get(key) is None
Example #6
0
def test_split_mechanism_mice_is_not_reusable(redis_cache):
    """If mechanism is split, then cached mice are not usable
    when a cache is built from a parent cache."""
    s = examples.basic_subsystem()
    mechanism = (0, 1)
    mice = s.find_mice(Direction.CAUSE, mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (1, 2)

    # Splits mechanism, but not relevant connections:
    cut = models.Cut((0,), (1, 2))
    cut_s = Subsystem(s.network, s.state, s.node_indices,
                      cut=cut, mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key(Direction.CAUSE, mechanism)
    assert cut_s._mice_cache.get(key) is None
Example #7
0
def test_inherited_mice_cache_keeps_unaffected_mice(redis_cache, flush_redis):
    """Cached Mice are saved from the parent cache if both
    the mechanism and the relevant connections are not cut."""
    s = examples.basic_subsystem()
    mechanism = (1, )
    mice = s.find_mice('past', mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (2, )

    # Does not cut from 0 -> 1 or split mechanism
    cut = models.Cut((0, 1), (2, ))
    cut_s = Subsystem(s.network,
                      s.state,
                      s.node_indices,
                      cut=cut,
                      mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key('past', mechanism)
    assert cut_s._mice_cache.get(key) == mice
Example #8
0
def test_cut_relevant_connections_mice_is_not_reusable(redis_cache):
    """If relevant connections are cut, cached mice are not usable
    when a cache is built from a parent cache."""
    s = examples.basic_subsystem()
    mechanism = (1, )
    mice = s.find_mice(Direction.CAUSE, mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (2, )

    # Cuts connections from 2 -> 1
    cut = models.Cut((0, 2), (1, ))
    cut_s = Subsystem(s.network,
                      s.state,
                      s.node_indices,
                      cut=cut,
                      mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key(Direction.CAUSE, mechanism)
    assert cut_s._mice_cache.get(key) is None
Example #9
0
def test_split_mechanism_mice_is_not_reusable(redis_cache, flush_redis):
    """If mechanism is split, then cached mice are not usable
    when a cache is built from a parent cache."""
    s = examples.basic_subsystem()
    mechanism = (0, 1)
    mice = s.find_mice('past', mechanism)
    assert s._mice_cache.size() == 1  # cached
    assert mice.purview == (1, 2)

    # Splits mechanism, but not relevant connections:
    cut = models.Cut((0, ), (1, 2))
    cut_s = Subsystem(s.network,
                      s.state,
                      s.node_indices,
                      cut=cut,
                      mice_cache=s._mice_cache)
    key = cut_s._mice_cache.key('past', mechanism)
    assert cut_s._mice_cache.get(key) is None
Example #10
0
    def setup(self, mode, network):
        if network == 'basic':
            self.subsys = examples.basic_subsystem()
        elif network == 'rule154':
            network = examples.rule154_network()
            state = (1,) * 5
            self.subsys = Subsystem(network, state, network.node_indices)
        elif network == 'fig16':
            network = examples.fig16()
            state = (0,) * 7
            self.subsys = Subsystem(network, state, network.node_indices)
        else:
            raise ValueError(network)

        if mode == 'parallel':
            config.PARALLEL_CONCEPT_EVALUATION = True
        elif mode == 'sequential':
            config.PARALLEL_CONCEPT_EVALUATION = False
        else:
            raise ValueError(mode)
Example #11
0
    def setup(self, mode, network):
        if network == 'basic':
            self.subsys = examples.basic_subsystem()
        elif network == 'rule154':
            network = examples.rule154_network()
            state = (1,) * 5
            self.subsys = Subsystem(network, state, network.node_indices)
        elif network == 'fig16':
            network = examples.fig16()
            state = (0,) * 7
            self.subsys = Subsystem(network, state, network.node_indices)
        else:
            raise ValueError(network)

        if mode == 'parallel':
            config.PARALLEL_CONCEPT_EVALUATION = True
        elif mode == 'sequential':
            config.PARALLEL_CONCEPT_EVALUATION = False
        else:
            raise ValueError(mode)
Example #12
0
def test_mice_cache_respects_cache_memory_limits():
    s = examples.basic_subsystem()
    c = cache.MiceCache(s)
    mice = mock.Mock(phi=1)  # dummy Mice
    c.set(c.key('past', ()), mice)
    assert c.size() == 0
Example #13
0
def test_inherited_cache_must_come_from_uncut_subsystem(redis_cache):
    s = examples.basic_subsystem()
    cut_s = Subsystem(s.network, s.state, s.node_indices,
                      cut=models.Cut((0, 2), (1,)))
    with pytest.raises(ValueError):
        cache.MICECache(s, cut_s._mice_cache)
Example #14
0
def test_mice_cache(redis_cache, flush_redis):
    s = examples.basic_subsystem()
    mechanism = (1, )  # has a core cause
    mice = s.find_mice('past', mechanism)
    key = s._mice_cache.key('past', mechanism)
    assert s._mice_cache.get(key) == mice
Example #15
0
def test_mice_cache_respects_cache_memory_limits():
    s = examples.basic_subsystem()
    c = cache.MICECache(s)
    mice = mock.Mock(phi=1)  # dummy MICE
    c.set(c.key(Direction.CAUSE, ()), mice)
    assert c.size() == 0
Example #16
0
def test_mice_cache(redis_cache):
    s = examples.basic_subsystem()
    mechanism = (1,)  # has a MIC
    mice = s.find_mice(Direction.CAUSE, mechanism)
    key = s._mice_cache.key(Direction.CAUSE, mechanism)
    assert s._mice_cache.get(key) == mice
Example #17
0
def test_mice_cache(redis_cache, flush_redis):
    s = examples.basic_subsystem()
    mechanism = (1,)  # has a core cause
    mice = s.find_mice('past', mechanism)
    key = s._mice_cache.key('past', mechanism)
    assert s._mice_cache.get(key) == mice
Example #18
0
def test_mice_cache(redis_cache):
    s = examples.basic_subsystem()
    mechanism = (1, )  # has a MIC
    mice = s.find_mice(Direction.CAUSE, mechanism)
    key = s._mice_cache.key(Direction.CAUSE, mechanism)
    assert s._mice_cache.get(key) == mice
Example #19
0
def test_mice_cache_respects_cache_memory_limits():
    s = examples.basic_subsystem()
    c = cache.MiceCache(s)
    mice = mock.Mock(phi=1)  # dummy Mice
    c.set(c.key('past', ()), mice)
    assert c.size() == 0
Example #20
0
def test_mice_cache_respects_cache_memory_limits():
    s = examples.basic_subsystem()
    c = cache.MICECache(s)
    mice = mock.Mock(phi=1)  # dummy MICE
    c.set(c.key(Direction.CAUSE, ()), mice)
    assert c.size() == 0