示例#1
0
 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)
示例#2
0
 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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
 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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
 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)
示例#10
0
 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'),
     )
示例#11
0
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'),