From: Ondrej C. <on...@ce...> - 2008-11-07 00:48:15
|
Hi, so I rewrote our parsing module in sympy from the "parser" module to "ast" and currently only test it with python2.6. All tests pass. Here is my branch: http://github.com/certik/sympy/tree/ast However, if you do: $ cat q.py import sympy sympy.test("sympy/core") $ jython q.py ============================= test process starts ============================== py.test like reporting. sympy/core/tests/test_arit.py[41] ...ff.................................... sympy/core/tests/test_assumptions.py[27] ..f........................ sympy/core/tests/test_basic.py[38] .............................E......E. sympy/core/tests/test_complex.py[10] .......... sympy/core/tests/test_count_ops.py[1] . sympy/core/tests/test_diff.py[4] .... sympy/core/tests/test_equal.py[4] .... sympy/core/tests/test_eval.py[8] ...f.... sympy/core/tests/test_eval_power.py[8] ........ sympy/core/tests/test_evalf.py[19] .E.E.EE..EEE.E..... sympy/core/tests/test_facts.py[11] ........... sympy/core/tests/test_functions.py[25] ....ff................... sympy/core/tests/test_logic.py[10] .......... sympy/core/tests/test_match.py[26] ..f....E.Ignoring redefinition of f: <class 'sympy.core.function.f'> defined earlier than <class 'sympy.core.function.f'> ...Ignoring redefinition of n: <class 'sympy.core.function.n'> defined earlier than <class 'sympy.core.function.n'> Ignoring redefinition of l: <class 'sympy.core.function.l'> defined earlier than <class 'sympy.core.function.l'> .............. sympy/core/tests/test_multidimensional.py[4] .... sympy/core/tests/test_numbers.py[27] ........................... sympy/core/tests/test_relational.py[4] .... sympy/core/tests/test_subs.py[18] .................. sympy/core/tests/test_symbol.py[4] .... sympy/core/tests/test_sympify.py[17] EE.E.EE..E....E.. sympy/core/tests/test_truediv.py[3] ... sympy/core/tests/test_var.py[3] ... _______________________ These tests raised an exception ________________________ sympy/core/tests/test_basic.py:test_is_number Traceback (most recent call last): File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line 143, in test_file f() File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line 508, in test_is_number g = WildFunction('g') File "/home/ondra/repos/sympy/sympy/core/function.py", line 386, in __new__ obj = Function.__new__(cls, name, **assumptions) File "/home/ondra/repos/sympy/sympy/core/multidimensional.py", line 127, in wrapper return f(*args, **kwargs) File "/home/ondra/repos/sympy/sympy/core/cache.py", line 85, in wrapper func_cache_it_cache[k] = r = func(*args, **kw_args) File "/home/ondra/repos/sympy/sympy/core/function.py", line 125, in __new__ args = map(sympify, args) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser2.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, in visit_Name return fix_missing_locations(Call(Name('Symbol', Load()), AttributeError: expr_contextType instance has no attribute '__call__' sympy/core/tests/test_basic.py:test_integrate Traceback (most recent call last): File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line 143, in test_file f() File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line 602, in test_integrate assert sin(x).integrate(('x',0,1)) == 1 - cos(1) File "/home/ondra/repos/sympy/sympy/core/basic.py", line 1936, in integrate return integrate(self, *args, **kwargs) File "/home/ondra/repos/sympy/sympy/utilities/decorator.py", line 55, in threaded_decorator return func(expr, *args, **kwargs) File "/home/ondra/repos/sympy/sympy/integrals/integrals.py", line 373, in integrate new_args = [sympify(arg) for arg in args] File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 74, in sympify return type(a)([sympify(x) for x in a]) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser2.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, in visit_Name return fix_missing_locations(Call(Name('Symbol', Load()), AttributeError: expr_contextType instance has no attribute '__call__' And all the other errors are the same. Any ideas what this missing __call__ is? Looks like something is not callable. Ondrej |
From: Ondrej C. <on...@ce...> - 2008-11-07 00:50:55
|
On Fri, Nov 7, 2008 at 1:48 AM, Ondrej Certik <on...@ce...> wrote: > Hi, > > so I rewrote our parsing module in sympy from the "parser" module to > "ast" and currently only test it with python2.6. All tests pass. Here > is my branch: > > http://github.com/certik/sympy/tree/ast > > However, if you do: > > $ cat q.py > import sympy > sympy.test("sympy/core") > $ jython q.py > ============================= test process starts ============================== > py.test like reporting. > > sympy/core/tests/test_arit.py[41] ...ff.................................... > sympy/core/tests/test_assumptions.py[27] ..f........................ > sympy/core/tests/test_basic.py[38] .............................E......E. > sympy/core/tests/test_complex.py[10] .......... > sympy/core/tests/test_count_ops.py[1] . > sympy/core/tests/test_diff.py[4] .... > sympy/core/tests/test_equal.py[4] .... > sympy/core/tests/test_eval.py[8] ...f.... > sympy/core/tests/test_eval_power.py[8] ........ > sympy/core/tests/test_evalf.py[19] .E.E.EE..EEE.E..... > sympy/core/tests/test_facts.py[11] ........... > sympy/core/tests/test_functions.py[25] ....ff................... > sympy/core/tests/test_logic.py[10] .......... > sympy/core/tests/test_match.py[26] ..f....E.Ignoring redefinition of > f: <class 'sympy.core.function.f'> defined earlier than <class > 'sympy.core.function.f'> > ...Ignoring redefinition of n: <class 'sympy.core.function.n'> defined > earlier than <class 'sympy.core.function.n'> > Ignoring redefinition of l: <class 'sympy.core.function.l'> defined > earlier than <class 'sympy.core.function.l'> > .............. > sympy/core/tests/test_multidimensional.py[4] .... > sympy/core/tests/test_numbers.py[27] ........................... > sympy/core/tests/test_relational.py[4] .... > sympy/core/tests/test_subs.py[18] .................. > sympy/core/tests/test_symbol.py[4] .... > sympy/core/tests/test_sympify.py[17] EE.E.EE..E....E.. > sympy/core/tests/test_truediv.py[3] ... > sympy/core/tests/test_var.py[3] ... > > _______________________ These tests raised an exception ________________________ > sympy/core/tests/test_basic.py:test_is_number > Traceback (most recent call last): > File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line > 143, in test_file > f() > File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line > 508, in test_is_number > g = WildFunction('g') > File "/home/ondra/repos/sympy/sympy/core/function.py", line 386, in __new__ > obj = Function.__new__(cls, name, **assumptions) > File "/home/ondra/repos/sympy/sympy/core/multidimensional.py", line > 127, in wrapper > return f(*args, **kwargs) > File "/home/ondra/repos/sympy/sympy/core/cache.py", line 85, in wrapper > func_cache_it_cache[k] = r = func(*args, **kw_args) > File "/home/ondra/repos/sympy/sympy/core/function.py", line 125, in __new__ > args = map(sympify, args) > File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser2.parse_expr(a, locals) > File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, > in parse_expr > a = Transform(local_dict, global_dict).visit(a) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit > new_node = self.visit(old_value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, > in visit_Name > return fix_missing_locations(Call(Name('Symbol', Load()), > AttributeError: expr_contextType instance has no attribute '__call__' > sympy/core/tests/test_basic.py:test_integrate > Traceback (most recent call last): > File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line > 143, in test_file > f() > File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line > 602, in test_integrate > assert sin(x).integrate(('x',0,1)) == 1 - cos(1) > File "/home/ondra/repos/sympy/sympy/core/basic.py", line 1936, in integrate > return integrate(self, *args, **kwargs) > File "/home/ondra/repos/sympy/sympy/utilities/decorator.py", line > 55, in threaded_decorator > return func(expr, *args, **kwargs) > File "/home/ondra/repos/sympy/sympy/integrals/integrals.py", line > 373, in integrate > new_args = [sympify(arg) for arg in args] > File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 74, in sympify > return type(a)([sympify(x) for x in a]) > File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser2.parse_expr(a, locals) > File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, > in parse_expr > a = Transform(local_dict, global_dict).visit(a) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit > new_node = self.visit(old_value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, > in visit_Name > return fix_missing_locations(Call(Name('Symbol', Load()), > AttributeError: expr_contextType instance has no attribute '__call__' > > > And all the other errors are the same. Any ideas what this missing > __call__ is? Looks like something is not callable. pdb.set_trace() is my friend. Here is the bug: $ python2.6 Python 2.6rc2 (r26rc2:66504, Sep 29 2008, 12:42:04) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from ast import Load >>> Load() <_ast.Load object at 0xb7d14dac> >>> $ jython Jython 2.5a3+ (trunk:5524M, Oct 28 2008, 17:41:30) [OpenJDK Client VM (Sun Microsystems Inc.)] on java1.6.0_0 Type "help", "copyright", "credits" or "license" for more information. >>> from ast import Load >>> Load() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: expr_contextType instance has no attribute '__call__' >>> Ondrej |
From: Ondrej C. <on...@ce...> - 2008-11-07 00:55:26
|
On Fri, Nov 7, 2008 at 1:50 AM, Ondrej Certik <on...@ce...> wrote: > On Fri, Nov 7, 2008 at 1:48 AM, Ondrej Certik <on...@ce...> wrote: >> Hi, >> >> so I rewrote our parsing module in sympy from the "parser" module to >> "ast" and currently only test it with python2.6. All tests pass. Here >> is my branch: >> >> http://github.com/certik/sympy/tree/ast >> >> However, if you do: >> >> $ cat q.py >> import sympy >> sympy.test("sympy/core") >> $ jython q.py >> ============================= test process starts ============================== >> py.test like reporting. >> >> sympy/core/tests/test_arit.py[41] ...ff.................................... >> sympy/core/tests/test_assumptions.py[27] ..f........................ >> sympy/core/tests/test_basic.py[38] .............................E......E. >> sympy/core/tests/test_complex.py[10] .......... >> sympy/core/tests/test_count_ops.py[1] . >> sympy/core/tests/test_diff.py[4] .... >> sympy/core/tests/test_equal.py[4] .... >> sympy/core/tests/test_eval.py[8] ...f.... >> sympy/core/tests/test_eval_power.py[8] ........ >> sympy/core/tests/test_evalf.py[19] .E.E.EE..EEE.E..... >> sympy/core/tests/test_facts.py[11] ........... >> sympy/core/tests/test_functions.py[25] ....ff................... >> sympy/core/tests/test_logic.py[10] .......... >> sympy/core/tests/test_match.py[26] ..f....E.Ignoring redefinition of >> f: <class 'sympy.core.function.f'> defined earlier than <class >> 'sympy.core.function.f'> >> ...Ignoring redefinition of n: <class 'sympy.core.function.n'> defined >> earlier than <class 'sympy.core.function.n'> >> Ignoring redefinition of l: <class 'sympy.core.function.l'> defined >> earlier than <class 'sympy.core.function.l'> >> .............. >> sympy/core/tests/test_multidimensional.py[4] .... >> sympy/core/tests/test_numbers.py[27] ........................... >> sympy/core/tests/test_relational.py[4] .... >> sympy/core/tests/test_subs.py[18] .................. >> sympy/core/tests/test_symbol.py[4] .... >> sympy/core/tests/test_sympify.py[17] EE.E.EE..E....E.. >> sympy/core/tests/test_truediv.py[3] ... >> sympy/core/tests/test_var.py[3] ... >> >> _______________________ These tests raised an exception ________________________ >> sympy/core/tests/test_basic.py:test_is_number >> Traceback (most recent call last): >> File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line >> 143, in test_file >> f() >> File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line >> 508, in test_is_number >> g = WildFunction('g') >> File "/home/ondra/repos/sympy/sympy/core/function.py", line 386, in __new__ >> obj = Function.__new__(cls, name, **assumptions) >> File "/home/ondra/repos/sympy/sympy/core/multidimensional.py", line >> 127, in wrapper >> return f(*args, **kwargs) >> File "/home/ondra/repos/sympy/sympy/core/cache.py", line 85, in wrapper >> func_cache_it_cache[k] = r = func(*args, **kw_args) >> File "/home/ondra/repos/sympy/sympy/core/function.py", line 125, in __new__ >> args = map(sympify, args) >> File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify >> return ast_parser2.parse_expr(a, locals) >> File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, >> in parse_expr >> a = Transform(local_dict, global_dict).visit(a) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit >> return visitor(node) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit >> new_node = self.visit(old_value) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit >> return visitor(node) >> File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, >> in visit_Name >> return fix_missing_locations(Call(Name('Symbol', Load()), >> AttributeError: expr_contextType instance has no attribute '__call__' >> sympy/core/tests/test_basic.py:test_integrate >> Traceback (most recent call last): >> File "/home/ondra/repos/sympy/sympy/utilities/runtests.py", line >> 143, in test_file >> f() >> File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line >> 602, in test_integrate >> assert sin(x).integrate(('x',0,1)) == 1 - cos(1) >> File "/home/ondra/repos/sympy/sympy/core/basic.py", line 1936, in integrate >> return integrate(self, *args, **kwargs) >> File "/home/ondra/repos/sympy/sympy/utilities/decorator.py", line >> 55, in threaded_decorator >> return func(expr, *args, **kwargs) >> File "/home/ondra/repos/sympy/sympy/integrals/integrals.py", line >> 373, in integrate >> new_args = [sympify(arg) for arg in args] >> File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 74, in sympify >> return type(a)([sympify(x) for x in a]) >> File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify >> return ast_parser2.parse_expr(a, locals) >> File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 57, >> in parse_expr >> a = Transform(local_dict, global_dict).visit(a) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit >> return visitor(node) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit >> new_node = self.visit(old_value) >> File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit >> return visitor(node) >> File "/home/ondra/repos/sympy/sympy/core/ast_parser2.py", line 46, >> in visit_Name >> return fix_missing_locations(Call(Name('Symbol', Load()), >> AttributeError: expr_contextType instance has no attribute '__call__' >> >> >> And all the other errors are the same. Any ideas what this missing >> __call__ is? Looks like something is not callable. > > pdb.set_trace() is my friend. Here is the bug: > > $ python2.6 > Python 2.6rc2 (r26rc2:66504, Sep 29 2008, 12:42:04) > [GCC 4.3.2] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> from ast import Load >>>> Load() > <_ast.Load object at 0xb7d14dac> >>>> > > $ jython > Jython 2.5a3+ (trunk:5524M, Oct 28 2008, 17:41:30) > [OpenJDK Client VM (Sun Microsystems Inc.)] on java1.6.0_0 > Type "help", "copyright", "credits" or "license" for more information. >>>> from ast import Load >>>> Load() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: expr_contextType instance has no attribute '__call__' >>>> Hm, looking at jython's ast parser, it is very different to cpython2.6. Ah -- I think Philip that you said that it is not yet fully implemented in jython, right? So here you have a little code that I need to work: http://github.com/certik/sympy/tree/ast/sympy/core/ast_parser2.py especially the line: http://github.com/certik/sympy/tree/ast/sympy/core/ast_parser2.py#L46 return fix_missing_locations(Call(Name('Symbol', Load()), [Str(node.id)], [], None, None)) i.e. I need a way to construct the Python expression. Ondrej |
From: Ondrej C. <on...@ce...> - 2008-11-08 22:56:56
|
>> $ python2.6 >> Python 2.6rc2 (r26rc2:66504, Sep 29 2008, 12:42:04) >> [GCC 4.3.2] on linux2 >> Type "help", "copyright", "credits" or "license" for more information. >>>>> from ast import Load >>>>> Load() >> <_ast.Load object at 0xb7d14dac> >>>>> >> >> $ jython >> Jython 2.5a3+ (trunk:5524M, Oct 28 2008, 17:41:30) >> [OpenJDK Client VM (Sun Microsystems Inc.)] on java1.6.0_0 >> Type "help", "copyright", "credits" or "license" for more information. >>>>> from ast import Load >>>>> Load() >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> AttributeError: expr_contextType instance has no attribute '__call__' >>>>> Any comments to this? I am implementing this in SymPy in the way that I check if the "ast" module is available (i.e. python2.6 and later) and use it, if not, I use the compiler module. However, neither way works with jython. So how should we get around it? Ondrej |
From: Ondrej C. <on...@ce...> - 2008-11-09 01:54:13
Attachments:
ast_test.py
|
Hi Tobias! On Sun, Nov 9, 2008 at 2:20 AM, Tobias Ivarsson <th...@gm...> wrote: > Hi, > > These objects [1] are constants in Jython, but they seem to be classes in > CPython. > We could have them be factory functions returning the constants, but that > would still meen that: > Jython: >>> ast.Load() == ast.Load() > CPython: >>> ast.Load() != ast.Load() > is that an acceptable deviation? If it is then this could be easily fixed by > modifying the Jython _ast.py. > > How does it work if you replace Lib/_ast.py with the patched version I have > attached with this e-mail before compiling Jython? If that works I can clean > it up a bit and check it in. I tried that, unfortunately, it doesn't. Attached find a pure python script (with no external dependecies) that reproduces the problem. python2.6: $ python2.6 ast_test.py <__main__.Integer object at 0xb7bcf96c> <__main__.Div object at 0xb7bcfbac> <__main__.Mul object at 0xb7bcfbec> jython (compiled with our _ast.py) $ jython ast_test.py Traceback (most recent call last): File "ast_test.py", line 79, in <module> print parse_expr("1", {}) File "ast_test.py", line 75, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "ast_test.py", line 36, in visit_Num return fix_missing_locations(Call(Name('Integer', Load()), TypeError: org.python.antlr.ast.Name(): expected 3-4 args; got 2 Ondrej |
From: Ondrej C. <on...@ce...> - 2008-11-09 01:58:34
|
On Sun, Nov 9, 2008 at 2:53 AM, Ondrej Certik <on...@ce...> wrote: > Hi Tobias! > > On Sun, Nov 9, 2008 at 2:20 AM, Tobias Ivarsson <th...@gm...> wrote: >> Hi, >> >> These objects [1] are constants in Jython, but they seem to be classes in >> CPython. >> We could have them be factory functions returning the constants, but that >> would still meen that: >> Jython: >>> ast.Load() == ast.Load() >> CPython: >>> ast.Load() != ast.Load() >> is that an acceptable deviation? If it is then this could be easily fixed by >> modifying the Jython _ast.py. >> >> How does it work if you replace Lib/_ast.py with the patched version I have >> attached with this e-mail before compiling Jython? If that works I can clean >> it up a bit and check it in. > > I tried that, unfortunately, it doesn't. Attached find a pure python > script (with no external dependecies) that reproduces the problem. > > python2.6: > > $ python2.6 ast_test.py > <__main__.Integer object at 0xb7bcf96c> > <__main__.Div object at 0xb7bcfbac> > <__main__.Mul object at 0xb7bcfbec> > > > jython (compiled with our _ast.py) > > $ jython ast_test.py > Traceback (most recent call last): > File "ast_test.py", line 79, in <module> > print parse_expr("1", {}) > File "ast_test.py", line 75, in parse_expr > a = Transform(local_dict, global_dict).visit(a) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit > new_node = self.visit(old_value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "ast_test.py", line 36, in visit_Num > return fix_missing_locations(Call(Name('Integer', Load()), > TypeError: org.python.antlr.ast.Name(): expected 3-4 args; got 2 I made it: http://bugs.jython.org/issue1168 Ondrej |
From: Tobias I. <th...@gm...> - 2008-11-09 09:59:39
|
Ah, these classes expect to get an additional first argument with the token from the parser, to get line number information and such things. I think fixing this on Franks ToDo-list. However it looks like the modified _ast module got you at least part of the way. The main problem I see with this solution is that isinstance-checks will not work, that might be important, so we will probably want to fix that. Anyway, I think these further issues will be resolved soon, but it might take up to a week. /Tobias On Sun, Nov 9, 2008 at 2:53 AM, Ondrej Certik <on...@ce...> wrote: > Hi Tobias! > > On Sun, Nov 9, 2008 at 2:20 AM, Tobias Ivarsson <th...@gm...> wrote: > > Hi, > > > > These objects [1] are constants in Jython, but they seem to be classes in > > CPython. > > We could have them be factory functions returning the constants, but that > > would still meen that: > > Jython: >>> ast.Load() == ast.Load() > > CPython: >>> ast.Load() != ast.Load() > > is that an acceptable deviation? If it is then this could be easily fixed > by > > modifying the Jython _ast.py. > > > > How does it work if you replace Lib/_ast.py with the patched version I > have > > attached with this e-mail before compiling Jython? If that works I can > clean > > it up a bit and check it in. > > I tried that, unfortunately, it doesn't. Attached find a pure python > script (with no external dependecies) that reproduces the problem. > > python2.6: > > $ python2.6 ast_test.py > <__main__.Integer object at 0xb7bcf96c> > <__main__.Div object at 0xb7bcfbac> > <__main__.Mul object at 0xb7bcfbec> > > > jython (compiled with our _ast.py) > > $ jython ast_test.py > Traceback (most recent call last): > File "ast_test.py", line 79, in <module> > print parse_expr("1", {}) > File "ast_test.py", line 75, in parse_expr > a = Transform(local_dict, global_dict).visit(a) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in > generic_visit > new_node = self.visit(old_value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "ast_test.py", line 36, in visit_Num > return fix_missing_locations(Call(Name('Integer', Load()), > TypeError: org.python.antlr.ast.Name(): expected 3-4 args; got 2 > > > Ondrej > |
From: Frank W. <fwi...@gm...> - 2008-11-09 15:02:55
|
On Sun, Nov 9, 2008 at 4:59 AM, Tobias Ivarsson <th...@gm...> wrote: > Ah, these classes expect to get an additional first argument with the token > from the parser, to get line number information and such things. I think > fixing this on Franks ToDo-list. Providing a constructor that doesn't need a token should be fairly easy -- I'll take a look at that tonight. -Frank |
From: Frank W. <fwi...@gm...> - 2008-11-10 03:22:43
|
I'm regression testing enough change to the ast generation to allow ast_test.py to run. It looks like I didn't need to alter _ast.py at all -- though maybe I'm missing something. I'll check it in later tonight. -Frank |
From: Frank W. <fwi...@gm...> - 2008-11-10 03:37:20
|
The AST tweaks are now checked in as of r5565. _ast.py did not need changes -- I think because I added behavior to the enums, they now get working constructors. -Frank |
From: Ondrej C. <on...@ce...> - 2008-11-10 07:18:52
|
Thanks Frank! On Mon, Nov 10, 2008 at 4:37 AM, Frank Wierzbicki <fwi...@gm...> wrote: > The AST tweaks are now checked in as of r5565. _ast.py did not need > changes -- I think because I added behavior to the enums, they now get > working constructors. Indeed, my simple script now works. Unfortunately I found more problems, so I "improved" my script here: http://bugs.jython.org/issue1168 and there are more bugs, that I haven't isolated yet. Besides the problem in the issue 1168, I am also getting this stacktrace all over the place: File "/home/ondra/repos/sympy/sympy/core/tests/test_sympify.py", line 234, in test_issue1034 a = sympify('Integer(4)') File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 312, in generic_visit value = self.visit(value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 47, in visit_Num return fix_missing_locations(Call(Name('Integer', Load()), AttributeError: expr_contextType instance has no attribute '__call__' Any idea why? If you want to play with it yourself, just get the code from here: http://github.com/certik/sympy/tree/division3 (either using git, or click the download button and download tar.gz or zip) and execute: $ python bin/test sympy/core/ [.... no stack trace] and $ jython bin/test sympy/core/ [... lots of stacktraces, like above] Thanks, Ondrej |
From: Frank W. <fwi...@gm...> - 2008-11-10 13:55:16
|
On Mon, Nov 10, 2008 at 2:18 AM, Ondrej Certik <on...@ce...> wrote: > Thanks Frank! > > On Mon, Nov 10, 2008 at 4:37 AM, Frank Wierzbicki <fwi...@gm...> wrote: >> The AST tweaks are now checked in as of r5565. _ast.py did not need >> changes -- I think because I added behavior to the enums, they now get >> working constructors. > > Indeed, my simple script now works. Unfortunately I found more > problems, so I "improved" my script here: > > http://bugs.jython.org/issue1168 > > and there are more bugs, that I haven't isolated yet. Besides the > problem in the issue 1168, I am also getting this stacktrace all over > the place: > > File "/home/ondra/repos/sympy/sympy/core/tests/test_sympify.py", > line 234, in test_issue1034 > a = sympify('Integer(4)') > File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser.parse_expr(a, locals) > File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in > parse_expr > a = Transform(local_dict, global_dict).visit(a) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit > new_node = self.visit(old_value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 312, in generic_visit > value = self.visit(value) > File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit > return visitor(node) > File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 47, in visit_Num > return fix_missing_locations(Call(Name('Integer', Load()), > AttributeError: expr_contextType instance has no attribute '__call__' > > Any idea why? It may be that we do indeed need Tobias' improved _ast.py -- at least that would be my first guess. I will give the new script a try -- and definitely during this week I will try out the real thing. Thanks for the bug reports! A writable ast is definitely one of the things we'd really like to squeak into Jython before it goes final. -Frank |
From: Tobias I. <th...@gm...> - 2008-11-10 17:03:52
|
On Mon, Nov 10, 2008 at 2:55 PM, Frank Wierzbicki <fwi...@gm...>wrote: > > It may be that we do indeed need Tobias' improved _ast.py -- at least > that would be my first guess. I will give the new script a try -- and > definitely during this week I will try out the real thing. No, your fix looks better. Does it support isinstance checks? Because then it would be perfect. /Tobias |
From: Ondrej C. <on...@ce...> - 2008-11-12 11:48:20
|
On Mon, Nov 10, 2008 at 6:03 PM, Tobias Ivarsson <th...@gm...> wrote: > > > On Mon, Nov 10, 2008 at 2:55 PM, Frank Wierzbicki <fwi...@gm...> > wrote: >> >> It may be that we do indeed need Tobias' improved _ast.py -- at least >> that would be my first guess. I will give the new script a try -- and >> definitely during this week I will try out the real thing. > > No, your fix looks better. Does it support isinstance checks? Because then > it would be perfect. We committed all our latest changes to our main repository: http://git.sympy.org/?p=sympy.git;a=summary you can clone it with: git clone git://git.sympy.org/sympy.git And execute the sympy core tests with: $ jython bin/test sympy/core/ ============================= test process starts ============================== py.test like reporting. sympy/core/tests/test_arit.py[41] ...ff.................................... [OK] sympy/core/tests/test_assumptions.py[27] ..f........................ [OK] sympy/core/tests/test_basic.py[38] .............................E......E. [FAIL] sympy/core/tests/test_complex.py[10] .......... [OK] sympy/core/tests/test_count_ops.py[1] . [OK] sympy/core/tests/test_diff.py[4] .... [OK] sympy/core/tests/test_equal.py[4] .... [OK] sympy/core/tests/test_eval.py[8] ...f.... [OK] sympy/core/tests/test_eval_power.py[8] ........ [OK] sympy/core/tests/test_evalf.py[19] .E.E.EE..EEE.E..... [FAIL] sympy/core/tests/test_facts.py[11] ........... [OK] sympy/core/tests/test_functions.py[25] ....ff................... [OK] sympy/core/tests/test_logic.py[10] .......... [OK] sympy/core/tests/test_match.py[26] ..f....E.................. [FAIL] sympy/core/tests/test_multidimensional.py[4] .... [OK] sympy/core/tests/test_numbers.py[27] ........................... [OK] sympy/core/tests/test_relational.py[4] .... [OK] sympy/core/tests/test_subs.py[18] .................. [OK] sympy/core/tests/test_symbol.py[5] ..... [OK] sympy/core/tests/test_sympify.py[18] EE.E.EE..EE....E.. [FAIL] sympy/core/tests/test_truediv.py[3] ... [OK] sympy/core/tests/test_var.py[4] .... [OK] ________________________________________________________________________________ ________________ sympy/core/tests/test_basic.py:test_is_number _________________ File "/home/ondra/repos/sympy/sympy/core/tests/test_basic.py", line 514, in test_is_number g = WildFunction('g') File "/home/ondra/repos/sympy/sympy/core/function.py", line 393, in __new__ obj = Function.__new__(cls, name, **assumptions) File "/home/ondra/repos/sympy/sympy/core/multidimensional.py", line 127, in wrapper return f(*args, **kwargs) File "/home/ondra/repos/sympy/sympy/core/cache.py", line 85, in wrapper func_cache_it_cache[k] = r = func(*args, **kw_args) File "/home/ondra/repos/sympy/sympy/core/function.py", line 132, in __new__ args = map(sympify, args) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 64, in visit_Name return fix_missing_locations(Call(Name('Symbol', Load()), AttributeError: expr_contextType instance has no attribute '__call__' ________________________________________________________________________________ And more errors of the same type. There is also this error: ___________ sympy/core/tests/test_evalf.py:test_evalf_complex_powers ___________ File "/home/ondra/repos/sympy/sympy/core/tests/test_evalf.py", line 55, in test_evalf_complex_powers assert NS('(E+pi*I)**100000000000000000') == \ File "/home/ondra/repos/sympy/sympy/core/tests/test_evalf.py", line 14, in NS return str(sympify(e).evalf(n, **options)) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 306, in generic_visit for field, old_value in iter_fields(node): File "/home/ondra/repos/jython/dist/Lib/ast.py", line 181, in iter_fields for field in node._fields: AttributeError: operatorType instance has no attribute '_fields' ________________________________________________________________________________ And also this one: _________________ sympy/core/tests/test_sympify.py:test_lambda _________________ File "/home/ondra/repos/sympy/sympy/core/tests/test_sympify.py", line 87, in test_lambda assert sympify('lambda : 1') == Lambda(x, 1) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 321, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 256, in visit return visitor(node) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 69, in visit_Lambda args = [Str("x")] TypeError: org.python.antlr.ast.Str(): expected 2-3 args; got 1 ________________________________________________________________________________ But we are improving --- no dead locks, no infinite recursion, no other errors. When we fix this, I think it could start working. Ondrej |
From: Frank W. <fwi...@gm...> - 2008-11-12 15:24:00
|
On Wed, Nov 12, 2008 at 6:48 AM, Ondrej Certik <on...@ce...> wrote: > But we are improving --- no dead locks, no infinite recursion, no > other errors. When we fix this, I think it could start working. Cool! The next step will take a bit longer. Currently Jython's nodes represent any sequences (for example, FunctionDef.body) as Java arrays, which can't grow or shrink. The next step will be to replace the arrays with List types (Java List types not Python List types). This is a bigger change compared to the others, so it will probably be a few days coming. -Frank |
From: Frank W. <fwi...@gm...> - 2008-12-03 23:42:41
|
I have been working on a branch of Jython where I turned Jython's ast objects into true Python objects instead of auto-wrapped Java objects. Things are definitely getting better. [frank@frank-wierzbickis-macbook-pro sympy]$ ~/src/jython/branches/astwrite/dist/bin/jython bin/test sympy/core/ ============================= test process starts ============================== executable: /Users/frank/src/jython/branches/astwrite/dist/bin/jython (2.5.0-beta-0) sympy/core/tests/test_arit.py[41] ...ff.................................... [OK] sympy/core/tests/test_assumptions.py[27] ..f........................ [OK] sympy/core/tests/test_basic.py[38] ...................................... [OK] sympy/core/tests/test_complex.py[10] .......... [OK] sympy/core/tests/test_count_ops.py[1] . [OK] sympy/core/tests/test_diff.py[4] .... [OK] sympy/core/tests/test_equal.py[4] .... [OK] sympy/core/tests/test_eval.py[8] ...f.... [OK] sympy/core/tests/test_eval_power.py[8] ........ [OK] sympy/core/tests/test_evalf.py[19] .............E..... [FAIL] sympy/core/tests/test_facts.py[11] F.......... [FAIL] sympy/core/tests/test_functions.py[25] ....ff................... [OK] sympy/core/tests/test_logic.py[10] .......... [OK] sympy/core/tests/test_match.py[26] ..f....................... [OK] sympy/core/tests/test_multidimensional.py[4] .... [OK] sympy/core/tests/test_numbers.py[27] ........................... [OK] sympy/core/tests/test_relational.py[4] .... [OK] sympy/core/tests/test_subs.py[18] .................. [OK] sympy/core/tests/test_symbol.py[5] ..... [OK] sympy/core/tests/test_sympify.py[18] E.....E........... [FAIL] sympy/core/tests/test_truediv.py[3] ... [OK] sympy/core/tests/test_var.py[4] .... [OK] ________________________________________________________________________________ ________________ sympy/core/tests/test_evalf.py:test_evalf_bugs ________________ File "/Users/frank/git/sympy/sympy/core/tests/test_evalf.py", line 138, in test_evalf_bugs assert NS('(sin(x)-x)/x**3', 15, subs={x:'1/10**50'}) == '-0.166666666666667' File "/Users/frank/git/sympy/sympy/core/tests/test_evalf.py", line 14, in NS return str(sympify(e).evalf(n, **options)) File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr return eval(e, local_dict, global_dict) File "<string>", line 1, in <module> NameError: name 'x' is not defined ________________________________________________________________________________ __________________ sympy/core/tests/test_sympify.py:test_439 ___________________ File "/Users/frank/git/sympy/sympy/core/tests/test_sympify.py", line 8, in test_439 v = sympify("exp(x)") File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr return eval(e, local_dict, global_dict) File "<string>", line 1, in <module> NameError: name 'x' is not defined ________________________________________________________________________________ ____________ sympy/core/tests/test_sympify.py:test_sympify_function ____________ File "/Users/frank/git/sympy/sympy/core/tests/test_sympify.py", line 60, in test_sympify_function assert sympify('factor(x**2-1, x)') == -(1-x)*(x+1) File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr return eval(e, local_dict, global_dict) File "<string>", line 1, in <module> NameError: name 'x' is not defined ________________________________________________________________________________ ________ sympy/core/tests/test_facts.py:test_deduce_alpha_implications _________ File "/Users/frank/git/sympy/sympy/core/tests/test_facts.py", line 20, in test_deduce_alpha_implications assert P == {'b': ['a'], 'c': ['a', 'b']} # XXX a,b order unstable AssertionError tests finished: 304 passed, 1 failed, 7 xfailed, 3 exceptions in 9.43 seconds = DO *NOT* COMMIT! |
From: Ondrej C. <on...@ce...> - 2008-12-04 09:29:34
|
On Thu, Dec 4, 2008 at 12:42 AM, Frank Wierzbicki <fwi...@gm...> wrote: > I have been working on a branch of Jython where I turned Jython's ast > objects into true Python objects instead of auto-wrapped Java objects. Great job! > Things are definitely getting better. > > [frank@frank-wierzbickis-macbook-pro sympy]$ > ~/src/jython/branches/astwrite/dist/bin/jython bin/test sympy/core/ > ============================= test process starts ============================== > executable: /Users/frank/src/jython/branches/astwrite/dist/bin/jython > (2.5.0-beta-0) > > sympy/core/tests/test_arit.py[41] ...ff.................................... [OK] > sympy/core/tests/test_assumptions.py[27] ..f........................ [OK] > sympy/core/tests/test_basic.py[38] ...................................... [OK] > sympy/core/tests/test_complex.py[10] .......... [OK] > sympy/core/tests/test_count_ops.py[1] . [OK] > sympy/core/tests/test_diff.py[4] .... [OK] > sympy/core/tests/test_equal.py[4] .... [OK] > sympy/core/tests/test_eval.py[8] ...f.... [OK] > sympy/core/tests/test_eval_power.py[8] ........ [OK] > sympy/core/tests/test_evalf.py[19] .............E..... [FAIL] > sympy/core/tests/test_facts.py[11] F.......... [FAIL] > sympy/core/tests/test_functions.py[25] ....ff................... [OK] > sympy/core/tests/test_logic.py[10] .......... [OK] > sympy/core/tests/test_match.py[26] ..f....................... [OK] > sympy/core/tests/test_multidimensional.py[4] .... [OK] > sympy/core/tests/test_numbers.py[27] ........................... [OK] > sympy/core/tests/test_relational.py[4] .... [OK] > sympy/core/tests/test_subs.py[18] .................. [OK] > sympy/core/tests/test_symbol.py[5] ..... [OK] > sympy/core/tests/test_sympify.py[18] E.....E........... [FAIL] > sympy/core/tests/test_truediv.py[3] ... [OK] > sympy/core/tests/test_var.py[4] .... [OK] > > ________________________________________________________________________________ > ________________ sympy/core/tests/test_evalf.py:test_evalf_bugs ________________ > File "/Users/frank/git/sympy/sympy/core/tests/test_evalf.py", line > 138, in test_evalf_bugs > assert NS('(sin(x)-x)/x**3', 15, subs={x:'1/10**50'}) == > '-0.166666666666667' > File "/Users/frank/git/sympy/sympy/core/tests/test_evalf.py", line 14, in NS > return str(sympify(e).evalf(n, **options)) > File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser.parse_expr(a, locals) > File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr > return eval(e, local_dict, global_dict) > File "<string>", line 1, in <module> > NameError: name 'x' is not defined > ________________________________________________________________________________ > __________________ sympy/core/tests/test_sympify.py:test_439 ___________________ > File "/Users/frank/git/sympy/sympy/core/tests/test_sympify.py", line > 8, in test_439 > v = sympify("exp(x)") > File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser.parse_expr(a, locals) > File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr > return eval(e, local_dict, global_dict) > File "<string>", line 1, in <module> > NameError: name 'x' is not defined > ________________________________________________________________________________ > ____________ sympy/core/tests/test_sympify.py:test_sympify_function ____________ > File "/Users/frank/git/sympy/sympy/core/tests/test_sympify.py", line > 60, in test_sympify_function > assert sympify('factor(x**2-1, x)') == -(1-x)*(x+1) > File "/Users/frank/git/sympy/sympy/core/sympify.py", line 121, in sympify > return ast_parser.parse_expr(a, locals) > File "/Users/frank/git/sympy/sympy/core/ast_parser.py", line 94, in parse_expr > return eval(e, local_dict, global_dict) > File "<string>", line 1, in <module> > NameError: name 'x' is not defined All the 3 errors above seem to be the same bug, seems like sympify("exp(x)") doesn't work for some reason. > > ________________________________________________________________________________ > ________ sympy/core/tests/test_facts.py:test_deduce_alpha_implications _________ > File "/Users/frank/git/sympy/sympy/core/tests/test_facts.py", line > 20, in test_deduce_alpha_implications > assert P == {'b': ['a'], 'c': ['a', 'b']} # XXX a,b order unstable > AssertionError ^^^ ignore this failure, this needs to be fixed in sympy. Ondrej |
From: Frank W. <fwi...@gm...> - 2008-12-06 14:19:47
|
On Thu, Dec 4, 2008 at 4:29 AM, Ondrej Certik <on...@ce...> wrote: > All the 3 errors above seem to be the same bug, seems like > > sympify("exp(x)") > > doesn't work for some reason. This is now fixed on trunk. Incredibly, I managed to implement setslice as a no-op. That's fixed now :). -Frank |
From: Ondrej C. <on...@ce...> - 2008-12-06 14:42:04
|
On Sat, Dec 6, 2008 at 3:19 PM, Frank Wierzbicki <fwi...@gm...> wrote: > On Thu, Dec 4, 2008 at 4:29 AM, Ondrej Certik <on...@ce...> wrote: >> All the 3 errors above seem to be the same bug, seems like >> >> sympify("exp(x)") >> >> doesn't work for some reason. > This is now fixed on trunk. Incredibly, I managed to implement > setslice as a no-op. That's fixed now :). This is great news, all sympy core tests now pass! Now, if you want to get more bugs, try to execute the full sympy test suite by the command: $ jython bin/test sympy/ [...] tests finished: 1190 passed, 23 failed, 33 xfailed, 1 xpassed, 6 exceptions in 194.93 seconds There are 23 failures and 6 exceptions, but 1190 tests pass. That's excellent. I am pasting the failures below. Most of them need to be investigated by sympy, to determine if our code/tests are broken, but I can see already that some problems seems to be with jython (search for ast.py below): ________________________________________________________________________________ __________ sympy/mpmath/tests/test_convert.py:test_conversion_methods __________ File "/home/ondra/repos/sympy/sympy/mpmath/tests/test_convert.py", line 112, in test_conversion_methods assert (y+x).ae(mpf('4.3')) AttributeError: 'NoneType' object has no attribute 'ae' ________________________________________________________________________________ _____________ sympy/mpmath/tests/test_rootfinding.py:test_findroot _____________ File "/home/ondra/repos/sympy/sympy/mpmath/tests/test_rootfinding.py", line 25, in test_findroot assert isinstance(findroot(f, 1, force_type=complex, tol=1e-10), complex) File "/home/ondra/repos/sympy/sympy/mpmath/settings.py", line 135, in g return f(*args, **kwargs) File "/home/ondra/repos/sympy/sympy/mpmath/optimization.py", line 554, in findroot if verify and abs(f(x))**2 > tol: # TODO: better condition? UnboundLocalError: local variable 'x' referenced before assignment ________________________________________________________________________________ ___________ sympy/parsing/tests/test_mathematica.py:test_mathematica ___________ File "/home/ondra/repos/sympy/sympy/parsing/tests/test_mathematica.py", line 18, in test_mathematica assert mathematica(e) == sympify(d[e]) File "/home/ondra/repos/sympy/sympy/parsing/mathematica.py", line 5, in mathematica return sympify(parse(s)) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 231, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 296, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 231, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 294, in generic_visit old_value[:] = new_values ClassCastException: java.lang.ClassCastException: org.python.antlr.ast.cmpopType cannot be cast to org.python.core.PyObject ________________________________________________________________________________ _____________ sympy/simplify/tests/test_simplify.py:test_nsimplify _____________ File "/home/ondra/repos/sympy/sympy/simplify/tests/test_simplify.py", line 266, in test_nsimplify assert nsimplify(1-GoldenRatio) == (1-sqrt(5))/2 File "/home/ondra/repos/sympy/sympy/simplify/simplify.py", line 1064, in nsimplify if re: re = nsimplify_real(re) File "/home/ondra/repos/sympy/sympy/simplify/simplify.py", line 1060, in nsimplify_real return sympify(newexpr) File "/home/ondra/repos/sympy/sympy/core/sympify.py", line 121, in sympify return ast_parser.parse_expr(a, locals) File "/home/ondra/repos/sympy/sympy/core/ast_parser.py", line 92, in parse_expr a = Transform(local_dict, global_dict).visit(a) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 231, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 296, in generic_visit new_node = self.visit(old_value) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 231, in visit return visitor(node) File "/home/ondra/repos/jython/dist/Lib/ast.py", line 300, in generic_visit setattr(node, field, new_node) TypeError: Can't convert org.python.antlr.op.USub to unaryop node ________________________________________________________________________________ _______________ sympy/utilities/tests/test_lambdify.py:test_trig _______________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_lambdify.py", line 150, in test_trig d = f(pi) File "<string>", line 1, in <lambda> TypeError: cos(): 1st arg can't be coerced to double ________________________________________________________________________________ __________ sympy/utilities/tests/test_lambdify.py:test_trig_symbolic ___________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_lambdify.py", line 182, in test_trig_symbolic d = f(pi) File "<string>", line 1, in <lambda> TypeError: cos(): 1st arg can't be coerced to double ________________________________________________________________________________ _______________ sympy/matrices/tests/test_matrices.py:test_eigen _______________ File "/home/ondra/repos/sympy/sympy/matrices/tests/test_matrices.py", line 429, in test_eigen assert M.eigenvects() == \ AssertionError ________________________________________________________________________________ ______ sympy/mpmath/tests/test_compatibility.py:test_double_compatibility ______ File "/home/ondra/repos/sympy/sympy/mpmath/tests/test_compatibility.py", line 54, in test_double_compatibility assert mpf(repr(x)) == x AssertionError ________________________________________________________________________________ _____________ sympy/mpmath/tests/test_convert.py:test_custom_class _____________ File "/home/ondra/repos/sympy/sympy/mpmath/tests/test_convert.py", line 88, in test_custom_class assert mympf() + mpf(2) == 5.5 AssertionError ________________________________________________________________________________ _______________ sympy/ntheory/tests/test_ntheory.py:test_isprime _______________ File "/home/ondra/repos/sympy/sympy/ntheory/tests/test_ntheory.py", line 19, in test_isprime assert isprime(2**61 - 1) AssertionError ________________________________________________________________________________ ___________ sympy/parsing/tests/test_maxima.py:test_maxima_functions ___________ File "/home/ondra/repos/sympy/sympy/parsing/tests/test_maxima.py", line 26, in test_maxima_functions assert parse_maxima('solve(x^2-4,x)') == [2, -2] AssertionError ________________________________________________________________________________ _______________ sympy/polys/tests/test_polynomial.py:test_roots ________________ File "/home/ondra/repos/sympy/sympy/polys/tests/test_polynomial.py", line 1079, in test_roots assert roots(x**4-1, x, domain='Z', multiple=True) == [S.One, -S.One] AssertionError ________________________________________________________________________________ ____________ sympy/polys/tests/test_polynomial.py:test_root_factors ____________ File "/home/ondra/repos/sympy/sympy/polys/tests/test_polynomial.py", line 1089, in test_root_factors assert poly_root_factors(x**2-1, x) == [Poly(x-1, x), Poly(x+1, x)] AssertionError ________________________________________________________________________________ ________________ sympy/printing/tests/test_str.py:test_Function ________________ File "/home/ondra/repos/sympy/sympy/printing/tests/test_str.py", line 87, in test_Function assert str(f) == "f" AssertionError ________________________________________________________________________________ _____________ sympy/solvers/tests/test_recurr.py:test_rsolve_hyper _____________ File "/home/ondra/repos/sympy/sympy/solvers/tests/test_recurr.py", line 26, in test_rsolve_hyper assert rsolve_hyper([-1, -1, 1], 0, n) == C0*(S.Half + S.Half*sqrt(5))**n + C1*(S.Half - S.Half*sqrt(5))**n AssertionError ________________________________________________________________________________ ________ sympy/solvers/tests/test_solvers.py:test_solve_polynomial_cv_2 ________ File "/home/ondra/repos/sympy/sympy/solvers/tests/test_solvers.py", line 112, in test_solve_polynomial_cv_2 assert solve( x + 1/x - 1, x) == [Rational(1,2) + I*sqrt(3)/2, Rational(1,2) - I*sqrt(3)/2] AssertionError ________________________________________________________________________________ _______________ sympy/solvers/tests/test_solvers.py:test_tsolve ________________ File "/home/ondra/repos/sympy/sympy/solvers/tests/test_solvers.py", line 191, in test_tsolve assert solve(exp(x)+exp(-x)-y,x) == [-log(4) + log(2*y + 2*(-4 + y**2)**Rational(1,2)), AssertionError ________________________________________________________________________________ ____________ sympy/utilities/tests/test_pickling.py:test_core_basic ____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 55, in test_core_basic check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ __________ sympy/utilities/tests/test_pickling.py:test_core_function ___________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 99, in test_core_function check(f) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ __________ sympy/utilities/tests/test_pickling.py:test_core_interval ___________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 109, in test_core_interval check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ ____________ sympy/utilities/tests/test_pickling.py:test_functions _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 137, in test_functions check(cls) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ _____________ sympy/utilities/tests/test_pickling.py:test_geometry _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 163, in test_geometry check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ ____________ sympy/utilities/tests/test_pickling.py:test_integrals _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 174, in test_integrals check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ _____________ sympy/utilities/tests/test_pickling.py:test_matrices _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 181, in test_matrices check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ ______________ sympy/utilities/tests/test_pickling.py:test_polys _______________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 258, in test_polys check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ _____________ sympy/utilities/tests/test_pickling.py:test_printing _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 275, in test_printing check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ ______________ sympy/utilities/tests/test_pickling.py:test_series ______________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 294, in test_series check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ ____________ sympy/utilities/tests/test_pickling.py:test_statistics ____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 304, in test_statistics check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError ________________________________________________________________________________ _____________ sympy/utilities/tests/test_pickling.py:test_concrete _____________ File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 315, in test_concrete check(c) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 41, in check c(a,b,d1) File "/home/ondra/repos/sympy/sympy/utilities/tests/test_pickling.py", line 40, in c assert getattr(b,i)==attr AssertionError tests finished: 1190 passed, 23 failed, 33 xfailed, 1 xpassed, 6 exceptions in 194.93 seconds DO *NOT* COMMIT! |
From: Philip J. <pj...@un...> - 2008-12-10 05:22:51
|
On Dec 6, 2008, at 6:41 AM, Ondrej Certik wrote: > > There are 23 failures and 6 exceptions, but 1190 tests pass. That's > excellent. I am pasting the failures below. Most of them need to be > investigated by sympy, to determine if our code/tests are broken, but > I can see already that some problems seems to be with jython (search > for ast.py below): I diagnosed a couple of these a little while back.. > ________________________________________________________________________________ > __________ sympy/mpmath/tests/ > test_convert.py:test_conversion_methods __________ > File "/home/ondra/repos/sympy/sympy/mpmath/tests/test_convert.py", > line 112, in test_conversion_methods > assert (y+x).ae(mpf('4.3')) > AttributeError: 'NoneType' object has no attribute 'ae' This is: http://bugs.jython.org/issue1197 Possibly that issue is involved in other failures, but I kinda doubt it > _______________ sympy/utilities/tests/test_lambdify.py:test_trig > _______________ > File "/home/ondra/repos/sympy/sympy/utilities/tests/ > test_lambdify.py", > line 150, in test_trig > d = f(pi) > File "<string>", line 1, in <lambda> > TypeError: cos(): 1st arg can't be coerced to double > ________________________________________________________________________________ > __________ sympy/utilities/tests/test_lambdify.py:test_trig_symbolic > ___________ > File "/home/ondra/repos/sympy/sympy/utilities/tests/ > test_lambdify.py", > line 182, in test_trig_symbolic > d = f(pi) > File "<string>", line 1, in <lambda> > TypeError: cos(): 1st arg can't be coerced to double These two are: http://bugs.jython.org/issue1198 We're looking forward to hearing more info about the others =] -- Philip Jenvey |
From: Frank W. <fwi...@gm...> - 2008-12-08 01:02:52
|
On Sat, Dec 6, 2008 at 9:41 AM, Ondrej Certik <on...@ce...> wrote: > This is great news, all sympy core tests now pass! > > Now, if you want to get more bugs, try to execute the full sympy test > suite by the command: Okay, I have fixed a handful of bugs in Jython revealed by sympy. I don't think I reduced the number of errors in sympy's test suite, but they don't lead obviously back to Jython's ast.py anymore. -Frank |
From: Ondrej C. <on...@ce...> - 2008-12-08 07:46:10
|
On Mon, Dec 8, 2008 at 2:02 AM, Frank Wierzbicki <fwi...@gm...> wrote: > On Sat, Dec 6, 2008 at 9:41 AM, Ondrej Certik <on...@ce...> wrote: >> This is great news, all sympy core tests now pass! >> >> Now, if you want to get more bugs, try to execute the full sympy test >> suite by the command: > Okay, I have fixed a handful of bugs in Jython revealed by sympy. I > don't think I reduced the number of errors in sympy's test suite, but > they don't lead obviously back to Jython's ast.py anymore. I'll have a look at it and try to figure out where the bugs are. Thanks for all the work you did! Ondrej |
From: Frank W. <fwi...@gm...> - 2008-12-08 14:38:32
|
On Mon, Dec 8, 2008 at 2:45 AM, Ondrej Certik <on...@ce...> wrote: > I'll have a look at it and try to figure out where the bugs are. > > Thanks for all the work you did! No problem! Really we should be thanking you for such a great set of test cases for our ast support. test_ast.py tests just a tiny sliver of the functionality. -Frank |