def test_assemble(symops, symops_sec): """Test, which checks correctness of function parser.assemble, which reverses what parser.Parser does""" for nr, symop in enumerate(symops): #reverting parsing result back = parser.assemble(parser.Parser(symop)) assert any([ back == symops[nr], back == symops_sec[nr]])
def invert_symop(symb): """ 'x,y,z' --> '-x,-y,-z'""" issymbol = lambda s: re.compile(r"[A-Za-z]+").search(s) isnumber = lambda s: re.compile(r"[+-]?\d+[./]?(\d+)?").search(s) iszero = lambda s: re.compile(r"[+-]*0").search(s) minus = "-" plus = "+" parsed_list = parser.Parser(symb) def invert_symbol(symb): """x -> -x""" if iszero(symb): return "0" if issymbol(symb): return symb if isnumber(symb): if minus in symb: return symb[1:] if plus in symb: return "-{}".format(symb[1:]) else: return "-{}".format(symb) def invert_line(line): return map(invert_symbol, line) return parser.assemble(map(invert_line, parser.Parser(symb)))