예제 #1
0
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
예제 #2
0
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)
예제 #3
0
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)>'
예제 #4
0
파일: main.py 프로젝트: tomasbm07/AED
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)
예제 #5
0
파일: consty.py 프로젝트: pda898/plumbum
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
예제 #6
0
 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'))
예제 #7
0
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
예제 #8
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
예제 #9
0
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
예제 #10
0
파일: main.py 프로젝트: chrisvm/pylogic
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()
예제 #11
0
파일: main.py 프로젝트: chrisvm/pylogic
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()
예제 #12
0
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'
예제 #13
0
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")
예제 #14
0
        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'))
예제 #15
0
파일: evaluate.py 프로젝트: chrisvm/pylogic
		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'))