New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codegen: More AST nodes #13100

Merged
merged 94 commits into from Jul 2, 2018

Conversation

Projects
None yet
10 participants
@bjodah
Member

bjodah commented Aug 9, 2017

Goals of this PR:

  • Introduces more AST nodes (While, FunctionDefinition etc.).
  • C-code printing of new nodes
  • Internal utility package (.utilities._compilation) for compiling C code for "on-the-fly" for testing (based on pycompilation).
  • .codegen.algorithms module for collecting functions which generate ast trees for common algorithms (right now only Newton's method)
  • Fortran & Python printing of new nodes
  • Testing of printing of new nodes

TODO:
Using attributes with ast nodes should also support the attributes having arguments, e.g.:

  • change attrs from FiniteSet to Tuple
  • see if I can make things work without none it's useful and needed to represent None in pycode.
  • revert change of CodeBlock signature
  • dimension (Fortran)
  • implement pretty printing of AST.
  • Store all optional arguments as attrs (which is stored last in .args)
    • Change .type to be an attribute Untyped variables will have .type == untyped.
    • Provide sensible defaults in __new__ or other classmethod (i.e. wrap arguments and put them in attrs when needed)
New classes in .codegen.ast
While, Scope, PrintStatement, FunctionPrototype, FunctionDefinition, FunctionCall
@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Aug 10, 2017

Member

@moorepants just FYI, I've ported most parts of pycompilation into .utilities._compilation in this PR. (I needed to test the C code generated by .codegen.algorithms)

Member

bjodah commented Aug 10, 2017

@moorepants just FYI, I've ported most parts of pycompilation into .utilities._compilation in this PR. (I needed to test the C code generated by .codegen.algorithms)

Show outdated Hide outdated sympy/codegen/algorithms.py
expr : expression
wrt : Symbol
With respect to, i.e. what is the variable

This comment has been minimized.

@asmeurer

asmeurer Aug 11, 2017

Member

Add a doctest here

@asmeurer

asmeurer Aug 11, 2017

Member

Add a doctest here

Show outdated Hide outdated sympy/codegen/ast.py
args = args + tuple([kwargs[k] for k in cls.__slots__[len(args):]])
args = args + tuple([kwargs.pop(k) for k in cls.__slots__[len(args):]])
if kwargs:
raise ValueError("Unknown kwargs: %s" % kwargs)
obj = Basic.__new__(cls)

This comment has been minimized.

@asmeurer

asmeurer Aug 11, 2017

Member

I was playing with this and it's a bit odd that the typical ast node is completely atomic from a SymPy point of view, because nothing is stored in .args. I think .args should be used wherever possible to store the ast node expression tree.

@asmeurer

asmeurer Aug 11, 2017

Member

I was playing with this and it's a bit odd that the typical ast node is completely atomic from a SymPy point of view, because nothing is stored in .args. I think .args should be used wherever possible to store the ast node expression tree.

This comment has been minimized.

@bjodah

bjodah Aug 11, 2017

Member

ok, it's usually str or None that causes problems, (e.g. Variable.type can now be None), representing type through attributes would change that though.

@bjodah

bjodah Aug 11, 2017

Member

ok, it's usually str or None that causes problems, (e.g. Variable.type can now be None), representing type through attributes would change that though.

This comment has been minimized.

@asmeurer

asmeurer Aug 11, 2017

Member

Well those specific objects would have empty args (the ones that emulate Symbol). The other nodes that contain other nodes should do so with .args.

@asmeurer

asmeurer Aug 11, 2017

Member

Well those specific objects would have empty args (the ones that emulate Symbol). The other nodes that contain other nodes should do so with .args.

return super(Token, self).__hash__()
none = NoneToken()

This comment has been minimized.

@bjodah

bjodah Aug 15, 2017

Member

Using this "trick" (together with class String) allowed me to use Basic.args throughout―now SymPy's replace works as expected. @asmeurer I hope this is acceptable (it only lives in .codegen.ast after all)?

@bjodah

bjodah Aug 15, 2017

Member

Using this "trick" (together with class String) allowed me to use Basic.args throughout―now SymPy's replace works as expected. @asmeurer I hope this is acceptable (it only lives in .codegen.ast after all)?

This comment has been minimized.

@bjodah

bjodah Aug 26, 2017

Member

Turns out this is also useful for representing the value None when printing Python code using pycode.

@bjodah

bjodah Aug 26, 2017

Member

Turns out this is also useful for representing the value None when printing Python code using pycode.

Show outdated Hide outdated sympy/codegen/ast.py
@classmethod
def _construct_attrs(cls, arg):
if arg is None:
return Tuple()

This comment has been minimized.

@asmeurer

asmeurer Aug 15, 2017

Member

Why can't the default just be Tuple()?

@asmeurer

asmeurer Aug 15, 2017

Member

Why can't the default just be Tuple()?

This comment has been minimized.

@bjodah

bjodah Aug 16, 2017

Member

You're right (I think I missed this one when introducing none)

@bjodah

bjodah Aug 16, 2017

Member

You're right (I think I missed this one when introducing none)

Show outdated Hide outdated sympy/codegen/fnodes.py
class dsign(FFunction):
""" Fortran sign intrinsic with for double precision arguments. """

This comment has been minimized.

@asmeurer

asmeurer Aug 23, 2017

Member

Remove "with"

@asmeurer

asmeurer Aug 23, 2017

Member

Remove "with"

Show outdated Hide outdated sympy/utilities/_compilation/__init__.py
from .compilation import compile_link_import_strings, compile_run_strings
def has_fortran():

This comment has been minimized.

@asmeurer

asmeurer Aug 23, 2017

Member

It's better to have these functions in the submodule than in __init__.py

@asmeurer

asmeurer Aug 23, 2017

Member

It's better to have these functions in the submodule than in __init__.py

@bjodah bjodah changed the title from [WIP] Codegen: More AST nodes to Codegen: More AST nodes Aug 26, 2017

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Sep 7, 2017

Member

There was a PR merged which caused a merge conflict with this PR. I merged with master and resolved the conflict. But now Travis is complaining about the use of an invalid escape sequence.

Is there a way to locate where this offending escape sequence is?

Member

bjodah commented Sep 7, 2017

There was a PR merged which caused a merge conflict with this PR. I merged with master and resolved the conflict. But now Travis is complaining about the use of an invalid escape sequence.

Is there a way to locate where this offending escape sequence is?

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Sep 7, 2017

Member

It was actually me missing a merge conflict. I found it by running this script (stops at the first file which fails to compile):

#!/bin/bash
for f in $(find sympy -name "*.py"); do
    output=$(python3 -We:invalid -m compileall -f $f)
    if [ $? -ne 0 ]; then
       echo $output
       break;
    fi
done

And this was the output:

File "sympy/printing/str.py", line 731 <<<<<<< HEAD ^ SyntaxError: invalid syntax
Member

bjodah commented Sep 7, 2017

It was actually me missing a merge conflict. I found it by running this script (stops at the first file which fails to compile):

#!/bin/bash
for f in $(find sympy -name "*.py"); do
    output=$(python3 -We:invalid -m compileall -f $f)
    if [ $? -ne 0 ]; then
       echo $output
       break;
    fi
done

And this was the output:

File "sympy/printing/str.py", line 731 <<<<<<< HEAD ^ SyntaxError: invalid syntax
@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jun 30, 2018

Member

Will use printer._context (I'll initialize it in CodePrinter.__init__)

I'm not really familiar enough with Fortran. Why do you need to store the return value?

Functions in fortran returns by assigning to the name of the function by default. The user may override the name of the return variable though.

Member

bjodah commented Jun 30, 2018

Will use printer._context (I'll initialize it in CodePrinter.__init__)

I'm not really familiar enough with Fortran. Why do you need to store the return value?

Functions in fortran returns by assigning to the name of the function by default. The user may override the name of the return variable though.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jun 30, 2018

Member

Removed **kwargs throughout from def _print_Class(expr, **kwargs).

Member

bjodah commented Jun 30, 2018

Removed **kwargs throughout from def _print_Class(expr, **kwargs).

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jun 30, 2018

Member

Great. Let's merge it as soon as the tests pass. This is the last thing blocking the release candidate.

Re: the wurlitzer thing. It occurs to me that conda-forge might be backed up right now because of the Python 3.7 release. So let's just make sure to switch that over once it gets built.

I hope that Python 3.7 packages can get built on conda-forge over the next week, so that I can properly test the final release against it.

Member

asmeurer commented Jun 30, 2018

Great. Let's merge it as soon as the tests pass. This is the last thing blocking the release candidate.

Re: the wurlitzer thing. It occurs to me that conda-forge might be backed up right now because of the Python 3.7 release. So let's just make sure to switch that over once it gets built.

I hope that Python 3.7 packages can get built on conda-forge over the next week, so that I can properly test the final release against it.

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jun 30, 2018

Member

Looks like there are some test failures.

Member

asmeurer commented Jun 30, 2018

Looks like there are some test failures.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jun 30, 2018

Member

Thanks, I'm on it (looks like I forgot to run doctests locally).

Member

bjodah commented Jun 30, 2018

Thanks, I'm on it (looks like I forgot to run doctests locally).

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jun 30, 2018

Member

More test failures.

Member

asmeurer commented Jun 30, 2018

More test failures.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 1, 2018

Member

Deprecation warnings about imp:

DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

Could we ignore those somehow? (I seem to remember that the version of importlib shipped with py27 lacks too many features to be a useful replacement).

Member

bjodah commented Jul 1, 2018

Deprecation warnings about imp:

DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

Could we ignore those somehow? (I seem to remember that the version of importlib shipped with py27 lacks too many features to be a useful replacement).

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 1, 2018

Member

Can you use imp only in Python 2? That way when we drop Python 2 support it will also drop the usage of imp.

Member

asmeurer commented Jul 1, 2018

Can you use imp only in Python 2? That way when we drop Python 2 support it will also drop the usage of imp.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 1, 2018

Member

Gave it a shot. (tests pass locally under py27 & py35). Going to bed now so won't be able to fix any test failures immediately. Feel free to push directly if anything minor is still missing.

Member

bjodah commented Jul 1, 2018

Gave it a shot. (tests pass locally under py27 & py35). Going to bed now so won't be able to fix any test failures immediately. Feel free to push directly if anything minor is still missing.

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 1, 2018

Member

I don't know how to fix the latest errors.

________________ sympy/codegen/tests/test_fnodes.py:test_bind_C ________________
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/runtests.py", line 1259, in _timeout
    function()
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/codegen/tests/test_fnodes.py", line 200, in test_bind_C
    ], build_dir=folder)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 578, in compile_link_import_strings
    mod = compile_link_import_py_ext(source_files, build_dir=build_dir, **kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 527, in compile_link_import_py_ext
    cplus=any_cplus_src(sources), **link_kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 248, in link_py_so
    libraries=libraries, library_dirs=library_dirs, **kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 188, in link
    runner.run()
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/runners.py", line 193, in run
    raise CompileError(msg)
distutils.errors.CompileError: Error executing '/usr/bin/gfortran -pthread -shared -o /tmp/tmpjchf3cva/_rms.cpython-36m-x86_64-linux-gnu.so ./rms.o ./_rms.o -lpython3.6m' in /tmp/tmpjchf3cva (exited status 1):
 /usr/bin/ld: cannot find -lpython3.6m
collect2: error: ld returned 1 exit status
Member

asmeurer commented Jul 1, 2018

I don't know how to fix the latest errors.

________________ sympy/codegen/tests/test_fnodes.py:test_bind_C ________________
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/runtests.py", line 1259, in _timeout
    function()
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/codegen/tests/test_fnodes.py", line 200, in test_bind_C
    ], build_dir=folder)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 578, in compile_link_import_strings
    mod = compile_link_import_py_ext(source_files, build_dir=build_dir, **kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 527, in compile_link_import_py_ext
    cplus=any_cplus_src(sources), **link_kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 248, in link_py_so
    libraries=libraries, library_dirs=library_dirs, **kwargs)
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/compilation.py", line 188, in link
    runner.run()
  File "/home/travis/miniconda/envs/test-environment/lib/python3.6/site-packages/sympy-1.2rc1-py3.6.egg/sympy/utilities/_compilation/runners.py", line 193, in run
    raise CompileError(msg)
distutils.errors.CompileError: Error executing '/usr/bin/gfortran -pthread -shared -o /tmp/tmpjchf3cva/_rms.cpython-36m-x86_64-linux-gnu.so ./rms.o ./_rms.o -lpython3.6m' in /tmp/tmpjchf3cva (exited status 1):
 /usr/bin/ld: cannot find -lpython3.6m
collect2: error: ld returned 1 exit status
@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 1, 2018

Member

Needed to set LD_LIBRARY_PATH.
Tests are now passing.

Member

bjodah commented Jul 1, 2018

Needed to set LD_LIBRARY_PATH.
Tests are now passing.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 1, 2018

Member

Looks like test_fnodes.py has a bunch of skipped tests though:

sympy/codegen/tests/test_fnodes.py[12] .sssss.....s

due to has_fortran returning False. Not sure why since gfortran should be installed.

Member

bjodah commented Jul 1, 2018

Looks like test_fnodes.py has a bunch of skipped tests though:

sympy/codegen/tests/test_fnodes.py[12] .sssss.....s

due to has_fortran returning False. Not sure why since gfortran should be installed.

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 1, 2018

Member

I'm not sure about setting LD_LIBRARY_PATH. It's generally only for debugging or development. It shouldn't be required for sympy to work. Will this work outside of Travis when it isn't set?

Member

asmeurer commented Jul 1, 2018

I'm not sure about setting LD_LIBRARY_PATH. It's generally only for debugging or development. It shouldn't be required for sympy to work. Will this work outside of Travis when it isn't set?

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 1, 2018

Member
Member

bjodah commented Jul 1, 2018

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 2, 2018

Member

I get some test failures on my Mac

_________________________________________ sympy/codegen/tests/test_algorithms.py:test_newtons_method_function__ccode _________________________________________
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/codegen/tests/test_algorithms.py", line 44, in test_newtons_method_function__ccode
    ], build_dir=folder, compile_kwargs=compile_kw)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 578, in compile_link_import_strings
    mod = compile_link_import_py_ext(source_files, build_dir=build_dir, **kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 525, in compile_link_import_py_ext
    cwd=build_dir, **compile_kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 97, in compile_sources
    dstpaths.append(src2obj(f, Runner, cwd=cwd, **file_kwargs))
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 358, in src2obj
    **kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 437, in pyx2obj
    interm_c_file = simple_cythonize(pyxpath, destdir=destdir, cwd=cwd, **cy_kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 295, in simple_cythonize
    shutil.move(os.path.join(os.path.dirname(src), c_name), destdir)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 558, in move
    copy_function(src, real_dst)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 257, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/wc/dppcpmxs1tlb36nqcw853wkm0000gn/T/tmpy9g_47kd/_newton.c'
Member

asmeurer commented Jul 2, 2018

I get some test failures on my Mac

_________________________________________ sympy/codegen/tests/test_algorithms.py:test_newtons_method_function__ccode _________________________________________
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/codegen/tests/test_algorithms.py", line 44, in test_newtons_method_function__ccode
    ], build_dir=folder, compile_kwargs=compile_kw)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 578, in compile_link_import_strings
    mod = compile_link_import_py_ext(source_files, build_dir=build_dir, **kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 525, in compile_link_import_py_ext
    cwd=build_dir, **compile_kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 97, in compile_sources
    dstpaths.append(src2obj(f, Runner, cwd=cwd, **file_kwargs))
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 358, in src2obj
    **kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 437, in pyx2obj
    interm_c_file = simple_cythonize(pyxpath, destdir=destdir, cwd=cwd, **cy_kwargs)
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/utilities/_compilation/compilation.py", line 295, in simple_cythonize
    shutil.move(os.path.join(os.path.dirname(src), c_name), destdir)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 558, in move
    copy_function(src, real_dst)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 257, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/Users/aaronmeurer/anaconda3/lib/python3.5/shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/wc/dppcpmxs1tlb36nqcw853wkm0000gn/T/tmpy9g_47kd/_newton.c'
@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 2, 2018

Member

Strange, but not surprising since I haven't tested it on macOS. Windows will probably not work either. I did however (naively) expect the "has_fortran" and "has_c" functions to catch any problems.

Should we add conditional SKIPs to the test cases based on sys.platform.lower() == 'darwin' and os.name == 'nt'? (I simply don't really have the time necessary to fix this right now -- things such as scipy2017codegen/template.pyxbld are probably necessary, and that took a considerable amount of time and testing to get right).

The most important thing is that the generated code gets tested, though it would be nice if that could be done locally on windows/macOS machines with compilers.

Member

bjodah commented Jul 2, 2018

Strange, but not surprising since I haven't tested it on macOS. Windows will probably not work either. I did however (naively) expect the "has_fortran" and "has_c" functions to catch any problems.

Should we add conditional SKIPs to the test cases based on sys.platform.lower() == 'darwin' and os.name == 'nt'? (I simply don't really have the time necessary to fix this right now -- things such as scipy2017codegen/template.pyxbld are probably necessary, and that took a considerable amount of time and testing to get right).

The most important thing is that the generated code gets tested, though it would be nice if that could be done locally on windows/macOS machines with compilers.

@bjodah

This comment has been minimized.

Show comment
Hide comment
@bjodah

bjodah Jul 2, 2018

Member

An alternative would be to drop .util._compilation completely until we have something "perfect", but then the generated code would have to be tested manually (something I think is worse than having it Linux/Travis only to start with).

Member

bjodah commented Jul 2, 2018

An alternative would be to drop .util._compilation completely until we have something "perfect", but then the generated code would have to be tested manually (something I think is worse than having it Linux/Travis only to start with).

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 2, 2018

Member

So the point of the file is only for testing, not for actual end-user usage?

Member

asmeurer commented Jul 2, 2018

So the point of the file is only for testing, not for actual end-user usage?

@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 2, 2018

Member

@bjodah can you pop onto gitter (the main sympy/sympy channel)? I think we could get this resolved faster there.

Member

asmeurer commented Jul 2, 2018

@bjodah can you pop onto gitter (the main sympy/sympy channel)? I think we could get this resolved faster there.

Fixes to compilation
- may_xfail on macOS & Windows
- Fix link_py_so for python built without shared library
- More fine grained skips in tests of codegen
@asmeurer

This comment has been minimized.

Show comment
Hide comment
@asmeurer

asmeurer Jul 2, 2018

Member

OK, I am +1 to merge as soon as Travis passes.

Member

asmeurer commented Jul 2, 2018

OK, I am +1 to merge as soon as Travis passes.

@asmeurer asmeurer merged commit 3413b5f into sympy:1.2 Jul 2, 2018

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment