def test_templator(): src = create(r"?(\text{a}) + ?(\text{b})")[0] dst = create(r"?(\text{a}) * 2 - ?(\text{b})")[0] eqn1 = create(r""" f(x) = x * (3 + \text{hello world}) - (6+(3*x)^2); f(10) """) eqn2 = create(r""" f(x) = x * (3 * 2 - \text{hello world}) - (6 * 2 - (3*x)^2); f(10) """) eqn1 = apply(eqn1, src, dst) assert eqn1 == eqn2 [eqn1, eqn2] = [cody(s, 'py', 'generators/latex.py') for s in [eqn1, eqn2]] assert eqn1 == eqn2
def walk(fld, trr=None): print('Start translating for <%s>...' % fld) if trr is None: trr = trr_inbuilt() elif type(trr) == tuple: trr = trr_typed(trr[0], trr[1]) cnt = 0 for (p, _, fs) in os.walk(fld): for f in fs: fd = f.split('.') if fd[-1] != 'pb': continue fp = p + os.path.sep + f try: with open(fp, 'r', encoding='utf8') as fs: s = fs.read() except UnicodeDecodeError: raise PbTranslatorError('File <%s> expected in utf8' % fp) s = create(s) s = unclosuring(fd[-2], s) s = trr(fd[-2], s, '_'.join(fd[:-2])) fp = p + os.path.sep + '.'.join(fd[:-1]) with open(fp, 'w', encoding='utf8') as fs: fs.write(s) fs.write('\n') print('Created %s' % fp) cnt += 1 print('Translate %d files' % cnt)
def test_types_series(): s = r""" \begin{cases} f_0 = 2 \\ f_1 = 3 \\ f_n = f_{n-1} + f_{n-2} \end{cases}; g = \left\{ e + 1 \mid e \in f \right\}; h = \left\{ i \mid g(i) > 100 \right\}; * = \models(g_{h_1} \equiv 145); q(a, b) = a + b; r(a, b) = a - b; w = \left\{ e + f + 0.5 \mid e \in q, f \in r \right\}; * = \models(w(2,3) \equiv 4.5); 0 """ s = create(s) anal_walk(s, False) assert s.AE[0].strtype() == 'int' # f assert s[0].AE[0].strtype() == 'function<int(int)>' # g assert s[1].AE[0].strtype() == 'function<int(int)>' # h assert s[2].AE[0].strtype() == 'function<int(int)>' # q assert s[4].AE[0].strtype() == 'function<int(int,int)>' # r assert s[5].AE[0].strtype() == 'function<int(int,int)>' # w assert s[6].AE[0].strtype() == 'function<float(int,int)>'
def main(): tempos = [] tempos2 = [] N = [] #array = "APAGA\nACRESCENTA 12340 polio 20022025\nACRESCENTA 56700 covid 10082023\nACRESCENTA 88100 tuberculose 15122030\nCONSULTA 56700\nACRESCENTA 56700 covid 10102024\nACRESCENTA 56700 papeira 12112026\nLISTAGEM\nAPAGA\nFIM\n" #array = array.split('\n') #create_tree(tree, root, array) for y in range(2): for x in range(200, 1000000, 50000): tree, root = t.create() array = generate_input(x, y) array = array.split('\n') start = time.time() create_tree(tree, root, array) total_time = time.time() - start if y == 0: tempos.append(total_time) N.append(x) else: tempos2.append(total_time) write_file(N, tempos, tempos2)
def _include(fn): import os with open(os.path.join('pbstl', fn + '.pb'), 'r', encoding='utf8') as f: s = f.read() s = create(s) s = _walk(s, []) print('-' * 50) return s
def go_js(s, q): q = unquote(q) try: q = create(q) q = cody(q, 'py', 'generators/js.py') except BaseException: print_exc() s.go_send(400, 'text/html', '<h1>Error</h1>'.encode('utf8')) return s.go_send(200, 'text/javascript', q.encode('utf8'))
def test_js_oneline_func(): s = r""" f(x,y,z) = \left\{ x, y, z \right\}; g = \left\{ 1, 2, 3 \right\}; f """ s = create(s) s = cody(s, 'py', 'generators/js.py') print(s) assert s.find('(x,y,z){') >= 0
def fastExec(s): s = create(s) s = Unclosure.bind(s) # print(s) s = cody(s, 'py', 'generators/py.py') print('-' * 20) print(s) s = execute(s) s = s() print('-' * 20) print(s) return s
def test_consty(): import os with open(os.path.join('pbtests', 'consty.pb'), 'r', encoding='utf8') as f: fd = f.read() s = create(fd) from consty import consty s = consty(s) print('-' * 10, 'CONSTY', '-' * 10) print(s) s = Unclosure.bind(s) s = cody(s, 'py', 'generators/py.py') s = execute(s) s = s() print(s) assert [s(i) for i in range(4)] == [6, 6, 11, 46] assert s(4)(4) == 7
def main(): # create the parser parser = Parser() # look for the history file hist_file = path.join(path.expanduser('~'), '.logix_history') # init history file try: readline.read_history_file(hist_file) except FileNotFoundError: pass # set histort file save at end of execution atexit.register(readline.write_history_file, hist_file) while True: # Get input try: expr = input("> ") except EOFError: print('quit') sys.exit() # If input 'quit' or 'q', exit the program if expr.lower() in {'quit', 'q'}: sys.exit() # Create the ast ast = tree.create(parser.parse(expr)) # Get the variables used in the expression # and get a printable repr of them expression_vars = evaluate.find_vars(ast) variables = '' for var in expression_vars: variables += var # Print the variables used and the results # from the truth table print('vars: %s' % str(variables)) results = evaluate.eval(ast, variables) pprint.pprint(results) sys.exit()
def test_types_classic(): s = r""" f(a) = { b = a + 3; b - 4 }; a = 4 + 1.5; b = f(4); c = b + a + 0.5; b * 3 """ s = create(s) anal_walk(s, False) # all assert s.AE[0].strtype() == 'int' # f(a) assert s[0].AE[0].strtype() == 'function<int(int)>' # a assert s[1].AE[0].strtype() == 'float' # b assert s[2].AE[0].strtype() == 'int' # c assert s[3].AE[0].strtype() == 'float'
import tree as t tree, root = t.create() root = tree.insert(10, "123", 123, root) root = tree.insert(20, "123", 123, root) root = tree.insert(130, "123", 123, root) root = tree.insert(40, "123", 123, root) root = tree.insert(150, "123", 123, root) root = tree.insert(105, "123", 123, root) utente = tree.find(200, root) if utente is None: print("n existe") else: print("ja la esta")
return var[ast.string.lower()] def find_vars(ast, d=set()): if ast.name == 'Variable': v = ast.string.lower() if not v in d: d.add(v) return d else: if ast.name in {'AndExpr', 'OrExpr', 'ThenExpr'}: find_vars(ast.lexpr, d) find_vars(ast.rexpr, d) return d elif ast.name == 'NegExpr': return find_vars(ast.expr, d) def eval(ast, vars='pq'): tt = permutations_for_variables(vars) return [{HashDict(k): reval(ast, k)} for k in tt] if __name__ == '__main__': import tree parsed = ['p', '->', 'q'] ast = tree.create(parsed) print(ast) print(eval(ast, 'pq'))
return (reval(ast.lexpr, var)) and (reval(ast.rexpr, var)) if ast.name == 'Variable': return var[ast.string.lower()] def find_vars(ast, d=set()): if ast.name == 'Variable': v = ast.string.lower() if not v in d: d.add(v) return d else: if ast.name in {'AndExpr', 'OrExpr', 'ThenExpr'}: find_vars(ast.lexpr, d) find_vars(ast.rexpr, d) return d elif ast.name == 'NegExpr': return find_vars(ast.expr, d) def eval(ast, vars='pq'): tt = permutations_for_variables(vars) return [{HashDict(k): reval(ast, k)} for k in tt] if __name__ == '__main__': import tree parsed = ['p', '->', 'q'] ast = tree.create(parsed) print(ast) print(eval(ast, 'pq'))