示例#1
0
 def _script(self, p):
     if len(p) == 3:
         p[0] = MultiplicativeScript(substance=AdditiveScript(p[1]))
     elif len(p) == 4:
         p[0] = MultiplicativeScript(substance=AdditiveScript(p[1]),
                                     attribute=AdditiveScript(p[2]))
     else:
         p[0] = MultiplicativeScript(substance=AdditiveScript(p[1]),
                                     attribute=AdditiveScript(p[2]),
                                     mode=AdditiveScript(p[3]))
示例#2
0
 def p_script_lvl_1(self, p):
     """ script_lvl_1 : additive_script_lvl_0 LAYER1_MARK
                     | additive_script_lvl_0 additive_script_lvl_0 LAYER1_MARK
                     | additive_script_lvl_0 additive_script_lvl_0 additive_script_lvl_0 LAYER1_MARK
                     | REMARKABLE_MULTIPLICATION LAYER1_MARK"""
     if isinstance(p[1], AdditiveScript):
         if len(p) == 3:
             p[0] = MultiplicativeScript(substance=p[1])
         elif len(p) == 4:
             p[0] = MultiplicativeScript(substance=p[1], attribute=p[2])
         else:
             p[0] = MultiplicativeScript(substance=p[1],
                                         attribute=p[2],
                                         mode=p[3])
     else:
         p[0] = MultiplicativeScript(character=p[1])
示例#3
0
 def p_script_lvl_0(self, p):
     """ script_lvl_0 : PRIMITIVE LAYER0_MARK
                         | REMARKABLE_ADDITION LAYER0_MARK"""
     if p[1] == 'E':
         p[0] = NullScript(layer=0)
     elif p[1] in REMARKABLE_ADDITION:
         p[0] = AdditiveScript(character=p[1])
     else:
         p[0] = MultiplicativeScript(character=p[1])
示例#4
0
def promote(script: Script, layer: int):
    """
    Promote script to layer by multiplying it with null scripts (E:)
    :param script:
    :param layer:
    :return:
    """
    old_layer = script.layer

    for l in range(old_layer, layer):
        script = MultiplicativeScript(children=[script])

    return script
示例#5
0
def pack_factorisation(facto_list):
    """
    :param facto_list: list of script or tuple of factorisation
    :return:
    """
    _sum = []
    for f in facto_list:
        if isinstance(f, Script):
            _sum.append(f)
        else:
            # tuple of factorisation
            _sum.append(
                MultiplicativeScript(children=(pack_factorisation(l_f)
                                               for l_f in f)))

    if len(_sum) == 1:
        return _sum[0]
    else:
        return AdditiveScript(children=_sum)
示例#6
0
    def test_duplicate_addition(self):
        script = AdditiveScript(children=[
            AdditiveScript(children=[
                MultiplicativeScript(character='wa'),
                MultiplicativeScript(character='wo')
            ]),
            AdditiveScript(children=[
                MultiplicativeScript(character='j'),
                AdditiveScript(children=[
                    MultiplicativeScript(character='i'),
                    MultiplicativeScript(attribute=AdditiveScript(
                        character='M'),
                                         substance=AdditiveScript(
                                             character='O'),
                                         mode=MultiplicativeScript(
                                             character='U'))
                ])
            ])
        ])

        self.assertTrue(
            all(isinstance(s, MultiplicativeScript) for s in script.children))
示例#7
0
 def test_reduction_single_add(self):
     script = self.parser.parse("M:.-',M:.-',S:.-'B:.-'n.-S:.U:.-',_")
     self.assertIsInstance(script, MultiplicativeScript)
     script = MultiplicativeScript(substance=AdditiveScript(
         children=[script]))
     self.assertIsInstance(script.children[0], MultiplicativeScript)
示例#8
0
def m(substance, attribute=None, mode=None):
    children = (substance, attribute, mode)
    if all(isinstance(s, (Script, None.__class__)) for s in children):
        return MultiplicativeScript(children=children)
    else:
        raise NotImplemented
示例#9
0
 def test_str(self):
     self.assertIsNotNone(MultiplicativeScript(character='A')._str)
     self.assertIsNotNone(AdditiveScript(character='O')._str)