Here are the non-cli test failures on Python3.7. I think >3.8 is fine for a tool like this. The ast
module has improved a lot and trying to be backwards compatible doesnt seem sensible, as the output will degrade due to less semantic info.
========================================================================================================================= FAILURES =========================================================================================================================
___________________________________________________________________________________________________________ TestValueType.test_direct_assignment ___________________________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueType object at 0x110940fd0>
def test_direct_assignment(self):
source = parse("x = 3")
x = source.body[0]
t = value_type(x)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
py14/tests/test_tracer.py:20: AssertionError
_________________________________________________________________________________________________ TestValueType.test_list_assignment_based_on_later_append _________________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueType object at 0x11096b510>
def test_list_assignment_based_on_later_append(self):
source = parse("x = 3", "results = []", "results.append(x)")
add_list_calls(source)
results = source.body[1]
t = value_type(results)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
py14/tests/test_tracer.py:51: AssertionError
_______________________________________________________________________________________________ TestValueType.test_list_assignment_with_append_unknown_value _______________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueType object at 0x11096bad0>
def test_list_assignment_with_append_unknown_value(self):
source = parse("results = []", "x = 3", "results.append(x)")
add_list_calls(source)
results = source.body[0]
t = value_type(results)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
py14/tests/test_tracer.py:58: AssertionError
_______________________________________________________________________________________________ TestValueType.test_global_list_assignment_with_later_append ________________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueType object at 0x110999210>
def test_global_list_assignment_with_later_append(self):
source = parse("results = []", "def add_x():", " results.append(2)")
add_list_calls(source)
results = source.body[0]
t = value_type(results)
> assert t == "2"
E AssertionError: assert None == '2'
E +None
E -'2'
py14/tests/test_tracer.py:65: AssertionError
______________________________________________________________________________________________________ TestValueExpr.test_catch_long_expression_chain ______________________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueExpr object at 0x1109bb5d0>
def test_catch_long_expression_chain(self):
source = parse("x = 3 * 1", "y = x - 5", "z = y + 2")
z = source.body[2]
t = value_expr(z)
> assert t == "3 * 1 - 5 + 2"
E AssertionError: assert 'None * None - None + None' == '3 * 1 - 5 + 2'
E - 3 * 1 - 5 + 2
E + None * None - None + None
py14/tests/test_tracer.py:73: AssertionError
_________________________________________________________________________________________________ TestValueExpr.test_catch_expression_chain_with_functions _________________________________________________________________________________________________
self = <py14.tests.test_tracer.TestValueExpr object at 0x11099db10>
def test_catch_expression_chain_with_functions(self):
source = parse("x = 3 * 1", "y = foo(x)", "z = y + 2")
z = source.body[2]
t = value_expr(z)
> assert t == "foo(3 * 1) + 2"
E AssertionError: assert 'foo(None * None) + None' == 'foo(3 * 1) + 2'
E - foo(3 * 1) + 2
E + foo(None * None) + None
py14/tests/test_tracer.py:79: AssertionError
__________________________________________________________________________________________________________________ test_decltype_list_var __________________________________________________________________________________________________________________
def test_decltype_list_var():
source = parse("results = []", "x = 3", "results.append(x)")
add_list_calls(source)
results = source.body[0]
t = decltype(results)
> assert t == "std::vector<decltype(3)>"
E AssertionError: assert 'std::vector<decltype(None)>' == 'std::vector<decltype(3)>'
E - std::vector<decltype(3)>
E ? ^
E + std::vector<decltype(None)>
E ? ^^^^
py14/tests/test_tracer.py:94: AssertionError
_______________________________________________________________________________________________________________________ test_declare _______________________________________________________________________________________________________________________
def test_declare():
source = parse("x = 3")
cpp = transpile(source)
> assert cpp == "auto x = 3;"
E AssertionError: assert 'auto x = None;' == 'auto x = 3;'
E - auto x = 3;
E ? ^
E + auto x = None;
E ? ^^^^
py14/tests/test_transpiler.py:13: AssertionError
_________________________________________________________________________________________________________________ test_print_multiple_vars _________________________________________________________________________________________________________________
def test_print_multiple_vars():
if sys.version_info[0] >= 3:
source = parse('print(("hi", "there" ))')
else:
source = parse('print("hi", "there" )')
> cpp = transpile(source)
py14/tests/test_transpiler.py:27:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:175: in visit_Expr
s = self.visit(node.value)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:129: in visit_Call
args = [self.visit(a) for a in node.args]
py14/transpiler.py:129: in <listcomp>
args = [self.visit(a) for a in node.args]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:317: in visit_Tuple
elts = [self.visit(e) for e in node.elts]
py14/transpiler.py:317: in <listcomp>
elts = [self.visit(e) for e in node.elts]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:212: in visit_Str
return "std::string {" + super(CppTranspiler, self).visit_Str(node) + "}"
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x1105fc4d0>, node = <_ast.Str object at 0x1109cbcd0>
def visit_Str(self, node):
> return f'"{node.value}"'
E AttributeError: 'Str' object has no attribute 'value'
py2many/clike.py:88: AttributeError
_______________________________________________________________________________________________________________________ test_assert ________________________________________________________________________________________________________________________
def test_assert():
source = parse("assert 1 == foo(3)")
> cpp = transpile(source)
py14/tests/test_transpiler.py:35:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:346: in visit_Assert
return "REQUIRE({0});".format(self.visit(node.test))
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py2many/clike.py:135: in visit_Compare
right = self.visit(node.comparators[0])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x110a749d0>, node = <_ast.Call object at 0x110a748d0>
def visit_Call(self, node):
fname = self.visit(node.func)
if node.args:
args = [self.visit(a) for a in node.args]
> args = ", ".join(args)
E TypeError: sequence item 0: expected str instance, NoneType found
py14/transpiler.py:130: TypeError
___________________________________________________________________________________________________________ test_augmented_assigns_with_counter ____________________________________________________________________________________________________________
def test_augmented_assigns_with_counter():
source = parse(
"counter = 0", "counter += 5", "counter -= 2", "counter *= 2", "counter /= 3"
)
cpp = transpile(source)
> assert cpp == parse(
"auto counter = 0;",
"counter += 5;",
"counter -= 2;",
"counter *= 2;",
"counter /= 3;",
)
E AssertionError: assert 'auto counter...nter /= None;' == 'auto counter...counter /= 3;'
E - auto counter = 0;
E ? ^
E + auto counter = None;
E ? ^^^^
E - counter += 5;
E ? ^
E + counter += None;...
E
E ...Full output truncated (14 lines hidden), use '-vv' to show
py14/tests/test_transpiler.py:44: AssertionError
_____________________________________________________________________________________________________ test_declare_vars_inside_if_as_long_as_possible ______________________________________________________________________________________________________
def test_declare_vars_inside_if_as_long_as_possible():
source = parse("x = 5", "if True:", " y = 10", " x *= y")
cpp = transpile(source)
> assert cpp == parse("auto x = 5;", "if(true) {", "auto y = 10;", "x *= y;", "}")
E AssertionError: assert 'auto x = Non...;\nx *= y;\n}' == 'auto x = 5;\...;\nx *= y;\n}'
E - auto x = 5;
E ? ^
E + auto x = None;
E ? ^^^^
E if(true) {
E - auto y = 10;
E ? ^^...
E
E ...Full output truncated (5 lines hidden), use '-vv' to show
py14/tests/test_transpiler.py:70: AssertionError
_________________________________________________________________________________________________________________ test_print_program_args __________________________________________________________________________________________________________________
def test_print_program_args():
source = parse(
'if __name__ == "__main__":', " for arg in sys.argv:", " print(arg)"
)
> cpp = transpile(source)
py14/tests/test_transpiler.py:77:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:241: in visit_If
if self.visit(node.test) == '__name__ == std::string {"__main__"}':
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py2many/clike.py:135: in visit_Compare
right = self.visit(node.comparators[0])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:212: in visit_Str
return "std::string {" + super(CppTranspiler, self).visit_Str(node) + "}"
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x11057e810>, node = <_ast.Str object at 0x110a3e850>
def visit_Str(self, node):
> return f'"{node.value}"'
E AttributeError: 'Str' object has no attribute 'value'
py2many/clike.py:88: AttributeError
_____________________________________________________________________________________________________________________ test_tuple_swap ______________________________________________________________________________________________________________________
def test_tuple_swap():
source = parse("x = 3", "y = 1", "x, y = y, x")
cpp = transpile(source)
> assert cpp == parse(
"auto x = 3;", "auto y = 1;", "std::tie(x, y) = std::make_tuple(y, x);"
)
E AssertionError: assert 'auto x = Non..._tuple(y, x);' == 'auto x = 3;\..._tuple(y, x);'
E - auto x = 3;
E ? ^
E + auto x = None;
E ? ^^^^
E - auto y = 1;
E ? ^
E + auto y = None;...
E
E ...Full output truncated (3 lines hidden), use '-vv' to show
py14/tests/test_transpiler.py:91: AssertionError
_______________________________________________________________________________________________________________________ test_assign ________________________________________________________________________________________________________________________
def test_assign():
source = parse("x = 3", "x = 1")
cpp = transpile(source)
> assert cpp == parse("auto x = 3;", "x = 1;")
E AssertionError: assert 'auto x = None;\nx = None;' == 'auto x = 3;\nx = 1;'
E - auto x = 3;
E ? ^
E + auto x = None;
E ? ^^^^
E - x = 1;
E + x = None;
py14/tests/test_transpiler.py:99: AssertionError
___________________________________________________________________________________________________________________ test_list_as_vector ____________________________________________________________________________________________________________________
def test_list_as_vector():
source = parse("values = [0, 1, 2, 3]")
> cpp = transpile(source)
py14/tests/test_transpiler.py:124:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x11057e350>, node = <_ast.Assign object at 0x1109bbbd0>
def visit_Assign(self, node):
target = node.targets[0]
if isinstance(target, ast.Tuple):
elts = [self.visit(e) for e in target.elts]
value = self.visit(node.value)
return "std::tie({0}) = {1};".format(", ".join(elts), value)
if isinstance(node.scopes[-1], ast.If):
outer_if = node.scopes[-1]
if target.id in outer_if.common_vars:
value = self.visit(node.value)
return "{0} = {1};".format(target.id, value)
if isinstance(target, ast.Subscript):
target = self.visit(target)
value = self.visit(node.value)
return "{0} = {1};".format(target, value)
definition = node.scopes.find(target.id)
if isinstance(target, ast.Name) and defined_before(definition, node):
target = self.visit(target)
value = self.visit(node.value)
return "{0} = {1};".format(target, value)
elif isinstance(node.value, ast.List):
elements = [self.visit(e) for e in node.value.elts]
return "{0} {1} {{{2}}};".format(
> decltype(node), self.visit(target), ", ".join(elements)
)
E TypeError: sequence item 0: expected str instance, NoneType found
py14/transpiler.py:375: TypeError
________________________________________________________________________________________________________________ test_vector_find_out_type _________________________________________________________________________________________________________________
def test_vector_find_out_type():
source = parse("values = []", "values.append(1)")
> cpp = transpile(source)
py14/tests/test_transpiler.py:130:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:175: in visit_Expr
s = self.visit(node.value)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x110a03250>, node = <_ast.Call object at 0x110a03110>
def visit_Call(self, node):
fname = self.visit(node.func)
if node.args:
args = [self.visit(a) for a in node.args]
> args = ", ".join(args)
E TypeError: sequence item 0: expected str instance, NoneType found
py14/transpiler.py:130: TypeError
_____________________________________________________________________________________________________________________ test_bubble_sort _____________________________________________________________________________________________________________________
def test_bubble_sort():
source = parse(
"def sort(seq):",
" L = len(seq)",
" for _ in range(L):",
" for n in range(1, L):",
" if seq[n] < seq[n - 1]:",
" seq[n - 1], seq[n] = seq[n], seq[n - 1]",
" return seq",
)
> cpp = transpile(source)
py14/tests/test_transpiler.py:166:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:89: in visit_FunctionDef
body = "\n".join([self.visit(n) for n in node.body])
py14/transpiler.py:89: in <listcomp>
body = "\n".join([self.visit(n) for n in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:170: in visit_For
buf.extend([self.visit(c) for c in node.body])
py14/transpiler.py:170: in <listcomp>
buf.extend([self.visit(c) for c in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:167: in visit_For
it = self.visit(node.iter)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x11099d750>, node = <_ast.Call object at 0x1109402d0>
def visit_Call(self, node):
fname = self.visit(node.func)
if node.args:
args = [self.visit(a) for a in node.args]
> args = ", ".join(args)
E TypeError: sequence item 0: expected str instance, NoneType found
py14/transpiler.py:130: TypeError
_________________________________________________________________________________________________________________________ test_fib _________________________________________________________________________________________________________________________
def test_fib():
source = parse(
"def fib(n):",
" if n == 1:",
" return 1",
" elif n == 0:",
" return 0",
" else:",
" return fib(n-1) + fib(n-2)",
)
> cpp = transpile(source)
py14/tests/test_transpiler.py:194:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:89: in visit_FunctionDef
body = "\n".join([self.visit(n) for n in node.body])
py14/transpiler.py:89: in <listcomp>
body = "\n".join([self.visit(n) for n in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:250: in visit_If
return "".join(var_definitions) + super(CppTranspiler, self).visit_If(node)
py2many/clike.py:103: in visit_If
orelse = [self.visit(child) for child in node.orelse]
py2many/clike.py:103: in <listcomp>
orelse = [self.visit(child) for child in node.orelse]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:250: in visit_If
return "".join(var_definitions) + super(CppTranspiler, self).visit_If(node)
py2many/clike.py:103: in visit_If
orelse = [self.visit(child) for child in node.orelse]
py2many/clike.py:103: in <listcomp>
orelse = [self.visit(child) for child in node.orelse]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py2many/clike.py:92: in visit_Return
return "return {0};".format(self.visit(node.value))
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
py14/clike.py:32: in visit_BinOp
[self.visit(node.left), self.visit(node.op), self.visit(node.right)]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:129: in visit_Call
args = [self.visit(a) for a in node.args]
py14/transpiler.py:129: in <listcomp>
args = [self.visit(a) for a in node.args]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x11095fb50>, node = <_ast.BinOp object at 0x110aa50d0>
def visit_BinOp(self, node):
if isinstance(node.op, ast.Pow):
return "std::pow({0}, {1})".format(
self.visit(node.left), self.visit(node.right)
)
return " ".join(
> [self.visit(node.left), self.visit(node.op), self.visit(node.right)]
)
E TypeError: sequence item 2: expected str instance, NoneType found
py14/clike.py:32: TypeError
______________________________________________________________________________________________________________________ test_comb_sort ______________________________________________________________________________________________________________________
def test_comb_sort():
source = parse(
"def sort(seq):",
" gap = len(seq)",
" swap = True",
" while gap > 1 or swap:",
" gap = max(1, int(gap / 1.25))",
" swap = False",
" for i in range(len(seq) - gap):",
" if seq[i] > seq[i + gap]:",
" seq[i], seq[i + gap] = seq[i + gap], seq[i]",
" swap = True",
" return seq",
)
> cpp = transpile(source)
py14/tests/test_transpiler.py:225:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:89: in visit_FunctionDef
body = "\n".join([self.visit(n) for n in node.body])
py14/transpiler.py:89: in <listcomp>
body = "\n".join([self.visit(n) for n in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py2many/clike.py:125: in visit_While
buf.extend([self.visit(n) for n in node.body])
py2many/clike.py:125: in <listcomp>
buf.extend([self.visit(n) for n in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:370: in visit_Assign
value = self.visit(node.value)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:129: in visit_Call
args = [self.visit(a) for a in node.args]
py14/transpiler.py:129: in <listcomp>
args = [self.visit(a) for a in node.args]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:129: in visit_Call
args = [self.visit(a) for a in node.args]
py14/transpiler.py:129: in <listcomp>
args = [self.visit(a) for a in node.args]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x11099d410>, node = <_ast.BinOp object at 0x1109eafd0>
def visit_BinOp(self, node):
if isinstance(node.op, ast.Pow):
return "std::pow({0}, {1})".format(
self.visit(node.left), self.visit(node.right)
)
return " ".join(
> [self.visit(node.left), self.visit(node.op), self.visit(node.right)]
)
E TypeError: sequence item 2: expected str instance, NoneType found
py14/clike.py:32: TypeError
_____________________________________________________________________________________________________________________ test_normal_pdf ______________________________________________________________________________________________________________________
def test_normal_pdf():
source = parse(
"def pdf(x, mean, std_dev):",
" term1 = 1.0 / ((2 * math.pi) ** 0.5)",
" term2 = (math.e ** (-1.0 * (x-mean) ** 2.0 / 2.0",
" * (std_dev ** 2.0)))",
" return term1 * term2",
)
> cpp = transpile(source)
py14/tests/test_transpiler.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
py14/transpiler.py:39: in transpile
cpp = transpiler.visit(tree)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:275: in visit_Module
buf = [self.visit(b) for b in node.body]
py14/transpiler.py:275: in <listcomp>
buf = [self.visit(b) for b in node.body]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:89: in visit_FunctionDef
body = "\n".join([self.visit(n) for n in node.body])
py14/transpiler.py:89: in <listcomp>
body = "\n".join([self.visit(n) for n in node.body])
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:385: in visit_Assign
value = self.visit(node.value)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
py14/clike.py:32: in visit_BinOp
[self.visit(node.left), self.visit(node.op), self.visit(node.right)]
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
py14/clike.py:29: in visit_BinOp
self.visit(node.left), self.visit(node.right)
py2many/clike.py:61: in visit
return super(CLikeTranspiler, self).visit(node)
/usr/local/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py:271: in visit
return visitor(node)
py14/transpiler.py:272: in visit_BinOp
return super(CppTranspiler, self).visit_BinOp(node)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <py14.transpiler.CppTranspiler object at 0x110af8550>, node = <_ast.BinOp object at 0x110a86dd0>
def visit_BinOp(self, node):
if isinstance(node.op, ast.Pow):
return "std::pow({0}, {1})".format(
self.visit(node.left), self.visit(node.right)
)
return " ".join(
> [self.visit(node.left), self.visit(node.op), self.visit(node.right)]
)
E TypeError: sequence item 0: expected str instance, NoneType found
py14/clike.py:32: TypeError
___________________________________________________________________________________________________________ TestValueType.test_direct_assignment ___________________________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueType object at 0x110b0c310>
def test_direct_assignment(self):
source = parse("x = 3")
x = source.body[0]
t = value_type(x)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
pyrs/tests/test_tracer.py:19: AssertionError
_________________________________________________________________________________________________ TestValueType.test_list_assignment_based_on_later_append _________________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueType object at 0x110999510>
def test_list_assignment_based_on_later_append(self):
source = parse("x = 3", "results = []", "results.append(x)")
add_list_calls(source)
results = source.body[1]
t = value_type(results)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
pyrs/tests/test_tracer.py:50: AssertionError
_______________________________________________________________________________________________ TestValueType.test_list_assignment_with_append_unknown_value _______________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueType object at 0x1109cebd0>
def test_list_assignment_with_append_unknown_value(self):
source = parse("results = []", "x = 3", "results.append(x)")
add_list_calls(source)
results = source.body[0]
t = value_type(results)
> assert t == "3"
E AssertionError: assert None == '3'
E +None
E -'3'
pyrs/tests/test_tracer.py:57: AssertionError
_______________________________________________________________________________________________ TestValueType.test_global_list_assignment_with_later_append ________________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueType object at 0x1109cb590>
def test_global_list_assignment_with_later_append(self):
source = parse("results = []", "def add_x():", " results.append(2)")
add_list_calls(source)
results = source.body[0]
t = value_type(results)
> assert t == "2"
E AssertionError: assert None == '2'
E +None
E -'2'
pyrs/tests/test_tracer.py:64: AssertionError
______________________________________________________________________________________________________ TestValueExpr.test_catch_long_expression_chain ______________________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueExpr object at 0x110a26b50>
def test_catch_long_expression_chain(self):
source = parse("x = 3 * 1", "y = x - 5", "z = y + 2")
z = source.body[2]
t = value_expr(z)
> assert t == "3 * 1 - 5 + 2"
E AssertionError: assert 'None * None - None + None' == '3 * 1 - 5 + 2'
E - 3 * 1 - 5 + 2
E + None * None - None + None
pyrs/tests/test_tracer.py:72: AssertionError
_________________________________________________________________________________________________ TestValueExpr.test_catch_expression_chain_with_functions _________________________________________________________________________________________________
self = <pyrs.tests.test_tracer.TestValueExpr object at 0x11095fc50>
def test_catch_expression_chain_with_functions(self):
source = parse("x = 3 * 1", "y = foo(x)", "z = y + 2")
z = source.body[2]
t = value_expr(z)
> assert t == "foo(3 * 1) + 2"
E AssertionError: assert 'foo(None * None) + None' == 'foo(3 * 1) + 2'
E - foo(3 * 1) + 2
E + foo(None * None) + None
pyrs/tests/test_tracer.py:78: AssertionError