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]))
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])
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])
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
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)
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))
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)
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
def test_str(self): self.assertIsNotNone(MultiplicativeScript(character='A')._str) self.assertIsNotNone(AdditiveScript(character='O')._str)