def test_value_is_not_a_term_or_is_a_multiple_term(self): """ Param value should be a term other than Multiplier instance. """ for invalid_value in ( [], (), {}, None, grammar.Multiplier(grammar.SingleTerm('t')), ): with self.assertRaises(ValueError): grammar.Multiplier(invalid_value)
def test_correct_construction_with_term_with_lower_upper_and_p(self): """ Correct construction with all params and a term instance. """ value = grammar.SingleTerm('t') lower = 1 upper = 7 p = 0.75 multiplier = grammar.Multiplier(value, lower=lower, upper=upper, p=p) self.assertEquals(value, multiplier.value) self.assertEquals(lower, multiplier.lower) self.assertEquals(upper, multiplier.upper) self.assertAlmostEqual(p, multiplier.p)
def test_correct_construction_with_term_without_anything(self): """ Correct construction without optional params and a term instance. That means that "lower", "upper" and "p" take the correct values. """ value = grammar.SingleTerm('t') multiplier = grammar.Multiplier(value) self.assertEquals(value, multiplier.value) self.assertEquals(self.__default_lower, multiplier.lower) self.assertEquals(self.__default_upper, multiplier.upper) self.assertAlmostEqual(self.__default_p, multiplier.p)
def test_correct_construction_with_term_with_only_p(self): """ Correct construction with only "p" param and a term instance. That means that "lower" and "upper" take the correct values. """ value = grammar.SingleTerm('t') p = 0.2 multiplier = grammar.Multiplier(value, p=p) self.assertEquals(value, multiplier.value) self.assertEquals(self.__default_lower, multiplier.lower) self.assertEquals(self.__default_upper, multiplier.upper) self.assertAlmostEqual(p, multiplier.p)
def test_correct_construction_with_string_with_only_upper(self): """ Correct construction with only "upper" param and a string term. That means that "lower" and "p" take the correct values. """ str_value = 't' value = grammar.SingleTerm(str_value) upper = 1 multiplier = grammar.Multiplier(str_value, upper=upper) self.assertEquals(value, multiplier.value) self.assertEquals(self.__default_lower, multiplier.lower) self.assertEquals(upper, multiplier.upper) self.assertAlmostEqual(self.__default_p, multiplier.p)
def test_p_should_be_an_int_or_float(self): """ Value p should be a number between 0.0 and 1.0 both incl. """ for invalid_p in ( [], (), {}, None, '7', -0.1, 1.1, ): with self.assertRaises(ValueError): grammar.Multiplier(grammar.SingleTerm('t'), p=invalid_p)
def test_correct_construction_with_term_with_lower_and_upper(self): """ Correct construction with only "lower" and "upper" params and a term instance. That means that "p" takes the correct value. """ value = grammar.SingleTerm('t') lower = 3 upper = 5 multiplier = grammar.Multiplier(value, lower=lower, upper=upper) self.assertEquals(value, multiplier.value) self.assertEquals(lower, multiplier.lower) self.assertEquals(upper, multiplier.upper) self.assertAlmostEqual(self.__default_p, multiplier.p)
def test_correct_construction_with_string_with_lower_and_p(self): """ Correct construction with only "lower" and "p" param and a string term. That means that "upper" takes the correct value. """ str_value = 't' value = grammar.SingleTerm(str_value) lower = 7 p = 0.75 multiplier = grammar.Multiplier(str_value, lower=lower, p=p) self.assertEquals(value, multiplier.value) self.assertEquals(lower, multiplier.lower) self.assertEquals(self.__default_upper, multiplier.upper) self.assertAlmostEqual(p, multiplier.p)
def test_correct_construction_with_string_with_lower_upper_and_p(self): """ Correct construction with all optional params and a string term. """ str_value = 't' value = grammar.SingleTerm(str_value) lower = 1 upper = 7 p = 0.75 multiplier = grammar.Multiplier( str_value, lower=lower, upper=upper, p=p ) self.assertEquals(value, multiplier.value) self.assertEquals(lower, multiplier.lower) self.assertEquals(upper, multiplier.upper) self.assertAlmostEqual(p, multiplier.p)
def test_different_instances_with_same_content_are_equal(self): """ If two different instances has the same content are equal. """ self.assertEquals( grammar.Multiplier('t'), grammar.Multiplier('t'), )
from pprint import pprint from pynetics.gggp import grammar awesome_grammar = grammar.Grammar( start_symbol='frase', productions=[ grammar.Production( 'frase', grammar.And( grammar.Multiplier('sujeto', upper=1), 'predicado', grammar.Multiplier( grammar.And('conjuncion', grammar.Multiplier('sujeto', upper=1), 'predicado'), )), ), grammar.Production('conjuncion', grammar.Or(('y', 4), ('o', 6))), grammar.Production('sujeto', grammar.Or('sujeto_masc', 'sujeto_fem')), grammar.Production( 'sujeto_masc', grammar.Or( grammar.And('el', 'nombre_comun_masc'), grammar.And(grammar.Multiplier('el', upper=1), 'nombre_propio_masc'), )), grammar.Production( 'sujeto_fem', grammar.Or( grammar.And('la', 'nombre_comun_fem'), grammar.And(grammar.Multiplier('la', upper=1), 'nombre_propio_fem'),