Exemplo n.º 1
0
class TestExtensionCalculation(TestCase):
    def setUp(self):
        self.assumptions = {'alpha', 'beta', 'gamma', 'delta'}
        self.language = self.assumptions.union({'phi', 'psi', 'chi'})
        self.assumptions_to_contrary_mapping = {
            'alpha': 'beta',
            'beta': 'phi',
            'gamma': 'psi',
            'delta': 'chi'
        }

        rule_1 = Rule('alpha', 'phi')
        rule_2 = Rule('gamma', 'beta')
        rule_3 = Rule('delta', 'chi')
        rule_4 = Rule('alpha', 'chi')

        self.rules = {rule_1, rule_2, rule_3, rule_4}

        self.bipolar_aba_framework = BipolarABA(
            self.language, self.rules, self.assumptions,
            self.assumptions_to_contrary_mapping)

    def test_simple_preferred_extension_calculation(self):
        preferred_extensions = list(
            self.bipolar_aba_framework.get_preferred_extensions())
        assert {'beta', 'gamma'} in preferred_extensions
        assert {'alpha'} in preferred_extensions
        assert len(preferred_extensions) == 2

    def test_simple_set_stable_extension_calculation(self):
        set_stable_extensions = list(
            self.bipolar_aba_framework.get_set_stable_extensions())
        assert {'alpha'} in set_stable_extensions
        assert len(set_stable_extensions) == 1
Exemplo n.º 2
0
def test_bipolar_aba_creation(language, rules, assumptions):

    contrary_symbols = {a.contrary_symbol for a in assumptions}
    try:
        bipolar_aba_framework = BipolarABA(language, rules, assumptions)
        assert bipolar_aba_framework.language == language
        assert bipolar_aba_framework.rules == rules
        assert bipolar_aba_framework.assumptions == assumptions
        assert {c.symbol
                for c in bipolar_aba_framework.contraries} == contrary_symbols
        preferred_extensions = list(
            bipolar_aba_framework.get_preferred_extensions())
        for extension in preferred_extensions:
            assert bipolar_aba_framework.is_closed(extension)
            assert bipolar_aba_framework.is_conflict_free(extension)
            assert bipolar_aba_framework.is_admissible_extension(extension)
            for subset in strict_subsets(extension):
                assert subset not in preferred_extensions
        set_stable_extensions = list(
            bipolar_aba_framework.get_set_stable_extensions())
        for extension in set_stable_extensions:
            assert extension in preferred_extensions
            assert bipolar_aba_framework.is_closed(extension)
            assert bipolar_aba_framework.is_conflict_free(extension)
            assert bipolar_aba_framework.is_admissible_extension(extension)
            for subset in strict_subsets(extension):
                assert subset not in set_stable_extensions
                assert subset not in preferred_extensions
    except NonBipolarException as e:
        if e.message == "The head of a rule in a BipolarABA framework must be an assumption or " \
                        "the contrary of an assumption.":
            # assert any(r.consequent not in assumptions and r.consequent.symbol not in contrary_symbols for r in rules)
            pass
        elif e.message == "The body of a rule in a BipolarABA framework can only contain assumptions.":
            assert any(a not in assumptions for r in rules
                       for a in r.antecedent)
        elif e.message == "The body of a rule in a BipolarABA framework can only contain one sentence.":
            assert any(len(r.antecedent) != 1 for r in rules)
        elif e.message == "Assumptions in a BipolarABA framework should be part of the language.":
            assert not assumptions <= language
        elif e.message == "Contraries in a BipolarABA framework should be part of the language.":
            symbols = {s.symbol for s in language}
            assert not contrary_symbols <= symbols
        else:
            pytest.fail("Unexpected exception: " + e.message)