How to install cython package before cythonizing?

558 views
Skip to first unread message

Naotoshi Seo

unread,
Aug 14, 2017, 2:56:22 AM8/14/17
to cython-users, son...@gmail.com
Hi, I have a cython module which depends on a cython module and its pxd file https://github.com/scoder/fastrlock.

Referring http://cython.readthedocs.io/en/latest/src/reference/compilation.html, I am trying to write a setup.py as:

```
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [
    Extension("cupy.cuda.memory", ["cupy/cuda/memory.pyx"],
        include_dirs = ['/usr/local/cuda/include'],
        libraries = ['cublas', 'cuda', 'cudart', 'curand', 'cusparse', 'nvrtc', 'nvToolsExt'],
        library_dirs = ['/usr/local/cuda/lib64']),
]
setup(
    name = "cupy",
    install_requires = ['fastrlock>=3.0'],
    ext_modules = cythonize(extensions),
)
```

But, this fails because it tries to cythonize before fastrlock is installed.
How can I install cython package before cythonizing?






Naotoshi Seo

unread,
Aug 14, 2017, 7:13:51 AM8/14/17
to cython-users, son...@gmail.com
My Cython version is 0.25.2

Naotoshi Seo

unread,
Aug 14, 2017, 11:30:59 AM8/14/17
to Jason Madden, cython...@googlegroups.com
Thank you, but setup_requires also does not work.
The problem I have here is

setup(
    name = "cupy",
    install_requires = ['fastrlock>=3.0'],
    ext_modules = cythonize(extensions),
)

cythonize() is executed before setup() is executed.

I want to know standard way to cythonize() modules which depend on another cython module.

Regards,
Naotoshi

2017-08-14 20:38 GMT+09:00 Jason Madden <jason....@nextthought.com>:

> On Aug 14, 2017, at 01:21, Naotoshi Seo <son...@gmail.com> wrote:
>
> How can I install cython package before cythonizing?

Have you tried listing it in the `setup_requires` argument?

From http://setuptools.readthedocs.io/en/latest/setuptools.html#new-and-changed-setup-keywords :

  setup_requires

    A string or list of strings specifying what other distributions need to be present in order for the setup script to run.  setuptools will attempt to obtain these (even going so far as to download them using EasyInstall) before processing the rest of the setup script or commands. This argument is needed if you are using distutils extensions as part of your build process; for example, extensions that process setup() arguments and turn them into EGG-INFO metadata files.

    Note: projects listed in setup_requires will NOT be automatically installed on the system where the setup script is being run.

Jason

Jason Madden

unread,
Aug 14, 2017, 11:31:20 AM8/14/17
to Naotoshi Seo, cython...@googlegroups.com

> On Aug 14, 2017, at 08:35, Naotoshi Seo <son...@gmail.com> wrote:
>
> cythonize() is executed before setup() is executed.

Ah, I see now.

> I want to know standard way to cythonize() modules which depend on another cython module.

Perhaps what you want is `Cython.Build.build_ext` which runs as part of the build process, after the `setup_requires` has been processed.

From http://docs.cython.org/en/latest/src/reference/compilation.html#distributing-cython-modules :

Another option is to make Cython a setup dependency of your system and use Cython’s build_ext module which runs cythonize as part of the build process:

setup(
setup_requires=[
'cython>=0.x',
'your dependency here', # <<<
],
extensions = [Extension("*", ["*.pyx"])],
cmdclass={'build_ext': Cython.Build.build_ext},
...
)

Naotoshi Seo

unread,
Aug 14, 2017, 11:31:43 AM8/14/17
to Jason Madden, cython...@googlegroups.com
Thanks, I'll check it out.

2017年8月14日(月) 22:44 Jason Madden <jason....@nextthought.com>:

Jason Madden

unread,
Aug 14, 2017, 11:32:05 AM8/14/17
to cython...@googlegroups.com, son...@gmail.com

> On Aug 14, 2017, at 01:21, Naotoshi Seo <son...@gmail.com> wrote:
>
> How can I install cython package before cythonizing?

Stefan Behnel

unread,
Aug 14, 2017, 11:39:06 AM8/14/17
to cython...@googlegroups.com
What I recommend is to not depend on Cython at all, and instead include the generated C files in the sdist.

Recent versions of setuptools should handle that case for you, but all you really have to do is to replace the source extension .pyx by .c if Cython is not used.

Stefan


Nikolaus Rath

unread,
Aug 14, 2017, 12:59:14 PM8/14/17
to cython...@googlegroups.com
On Aug 14 2017, Stefan Behnel <stef...@behnel.de> wrote:
> What I recommend is to not depend on Cython at all, and instead include the generated C files in the sdist.

This is what I am doing at the moment, but I can't really recommend
it. It becomes a major hassle to keep the generated C code platform
independent. If you depend on Cython for the build, you can simply use
Cython-time 'IF' to handle platform differences. If you ship a .c file
instead, you really want pre-processor directives - but Cython isn't
able to generate them. So what you end up is a mess of hand-written
macros that you #include and use as pseudo-functions in the Cython code.

For example:

// macros.c

#if PLATFORM == PLATFORM_LINUX || PLATFORM == PLATFORM_BSD
#define ASSIGN_DARWIN(x,y)
#define ASSIGN_NOT_DARWIN(x,y) ((x) = (y))
#elif PLATFORM == PLATFORM_DARWIN
#define ASSIGN_DARWIN(x,y) ((x) = (y))
#define ASSIGN_NOT_DARWIN(x,y)
#endif

// blabla.pyx
cdef extern from "macros.c" nogil:
void ASSIGN_DARWIN(void*, void*)
void ASSIGN_NOT_DARWIN(void*, void*)

# ...

fuse_ops.fsyncdir = fuse_fsyncdir
fuse_ops.statfs = fuse_statfs
ASSIGN_DARWIN(fuse_ops.setxattr, &fuse_setxattr_darwin)
ASSIGN_DARWIN(fuse_ops.getxattr, &fuse_getxattr_darwin)
ASSIGN_NOT_DARWIN(fuse_ops.setxattr, &fuse_setxattr)
ASSIGN_NOT_DARWIN(fuse_ops.getxattr, &fuse_getxattr)
fuse_ops.listxattr = fuse_listxattr
fuse_ops.removexattr = fuse_removexattr


It would be much nicer to write just (approximate, forgot the exact syntax):


IF platform == 'darwin':
fuse_ops.setxattr = fuse_setxattr_darwin
fuse_ops.getxattr = fuse_getxattr_darwin
ELSE:
fuse_ops.setxattr = fuse_setxattr
fuse_ops.getxattr = fuse_getxattr


Best,
-Nikolaus
--
GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

»Time flies like an arrow, fruit flies like a Banana.«

Jason Madden

unread,
Aug 14, 2017, 5:23:49 PM8/14/17
to cython...@googlegroups.com, Nikolaus Rath

> On Aug 14, 2017, at 11:59, Nikolaus Rath <Niko...@rath.org> wrote:
>
> On Aug 14 2017, Stefan Behnel <stef...@behnel.de> wrote:
>> What I recommend is to not depend on Cython at all, and instead include the generated C files in the sdist.
>
> This is what I am doing at the moment, but I can't really recommend
> it. It becomes a major hassle to keep the generated C code platform
> independent. If you depend on Cython for the build, you can simply use
> Cython-time 'IF' to handle platform differences. If you ship a .c file
> instead, you really want pre-processor directives - but Cython isn't
> able to generate them.

gevent has that same problem, but we wanted to distribute the generated .c files and not require end-users to have cython. Our solution was to write a cython pre-processer called cythonpp. It handles expanding all possible combinations of #if/#else/#ifdef that it finds in the source code, handing each one off to cython in turn, and then merging the results together into the final .c file.

So, for example, `corecext.ppyx`[1] contains a bunch of `#if _WIN32`, so it gets run through the tool with both _WIN32 defined and undefined to produce a `corecext.pyx` which is then handed to cython to produce `corecext.c`, and the resulting two files are merged to produce the final .c file, with the correct #if directives in place. (We manage the dependencies with an old-school Makefile.)

It's not entirely general (it only handles a subset of preprocessor conditions, I don't remember if/how it deals with nesting, etc), but it works for gevent. Maybe others will find it useful too. It's distributed in the gevent sources on PyPI or it lives on github at https://github.com/gevent/gevent/blob/master/util/cythonpp.py

Jason

[1] https://github.com/gevent/gevent/blob/master/src/gevent/libev/corecext.ppyx

Nikolaus Rath

unread,
Aug 15, 2017, 4:38:11 AM8/15/17
to cython...@googlegroups.com
On Aug 14 2017, Jason Madden <jason....@nextthought.com> wrote:
>> On Aug 14, 2017, at 11:59, Nikolaus Rath <Niko...@rath.org> wrote:
>>
>> On Aug 14 2017, Stefan Behnel <stef...@behnel.de> wrote:
>>> What I recommend is to not depend on Cython at all, and instead include the generated C files in the sdist.
>>
>> This is what I am doing at the moment, but I can't really recommend
>> it. It becomes a major hassle to keep the generated C code platform
>> independent. If you depend on Cython for the build, you can simply use
>> Cython-time 'IF' to handle platform differences. If you ship a .c file
>> instead, you really want pre-processor directives - but Cython isn't
>> able to generate them.
>
> gevent has that same problem, but we wanted to distribute the
> generated .c files and not require end-users to have cython. Our
> solution was to write a cython pre-processer called cythonpp. It
> handles expanding all possible combinations of #if/#else/#ifdef that
> it finds in the source code, handing each one off to cython in turn,
> and then merging the results together into the final .c file.

Yeah, that'd be another solution. What I dislike about it is the sheer
size of all the generated .c files, and that you loose editor support
for the .pyx files because they're not proper Cython anymore.

I guess what I'm saying is: can we pretty please translate 'IF' in .pyx
to '#if' in .c? :-).

Naotoshi Seo

unread,
Aug 15, 2017, 9:41:09 AM8/15/17
to cython-users
Thank you all. It looked following was fine for me.

custom_setup_build.py

```
def make_extensions(ext):
    """Make Extension objects here. ext is .pyx or .c"""    

class custom_build_ext(build_ext.build_ext):
    def run(self):
        cythonize(make_extensions('.pyx'))
        build_ext.build_ext.run(self)
```

```
import custom_setup_build

setup( 
    setup_requires=[ 
        'fastrlock>=0.3',
    ], 
    ext_modules = make_extensions('.c'),
    cmdclass={'build_ext': custom_build_ext}, 
  )
```

Regards,
Naotoshi

Naotoshi Seo

unread,
Aug 29, 2017, 12:05:43 PM8/29/17
to cython-users
Hi, I once thought I could resolve my problem, but I now got another issue.

# Symptom

On running `python setup.py develop`, I get SEGV.
Running `python setup.py develop` twice, SEGV is resolved.

It means that
1. install fastrlock cython module, then run `python setup.py develop` => No Error
2. install fastrlock during running `python setup.py develop` with `setup_requires` => SEGV


# How to reproduce


$ cd cupy
$ git checkout -b cythonize-segv origin/cythonize-segv
$ python --version
Python 3.4.6
$ pip install -U pip wheel
$ pip install cython
Successfully installed cython-0.26
$ python setup.py develop --cupy-no-cuda

# Question

Is it bad idea to install cython modules with `setup_requires`?
Any ways to resolve this issue?

# PS

I attached backtrace from core file below.

#0  0x000000000046eb84 in PyObject_GetAttr (v=0x7ffff2b13548, name=<optimized out>) at Objects/object.c:878                                                                                       [269/1100]

#1  0x00007ffff1e6262f in __Pyx_CLineForTraceback (c_line=17508) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:92801

#2  __Pyx_AddTraceback (funcname=funcname@entry=0x7ffff1f70c30 "Cython.Compiler.Code.sub_tempita", c_line=17508, py_line=526, filename=0x7ffff1f73ce2 "Cython/Compiler/Code.py")

    at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:27428

#3  0x00007ffff1e718b3 in __pyx_pf_6Cython_8Compiler_4Code_2sub_tempita (__pyx_self=<optimized out>, __pyx_v_name=<optimized out>, __pyx_v_file=<optimized out>, __pyx_v_context=<optimized out>,

    __pyx_v_s=<optimized out>) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:17563

#4  __pyx_pw_6Cython_8Compiler_4Code_3sub_tempita (__pyx_self=<optimized out>, __pyx_args=<optimized out>, __pyx_kwds=<optimized out>) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:17376

#5  0x00007ffff1e9daf6 in __Pyx_PyObject_Call (kw=0x0, arg=<optimized out>, func=0x7ffff21c7df0) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:89878

#6  __pyx_pf_6Cython_8Compiler_4Code_18TempitaUtilityCode___init__ (__pyx_self=<optimized out>, __pyx_v_kwargs=0x7ffff1aa6ac8, __pyx_v_context=0x7ffff1aa69c8, __pyx_v_file=0x7ffff1dd22b8,

    __pyx_v_init=0x84a6e0 <_Py_NoneStruct>, __pyx_v_impl=0x1033040, __pyx_v_proto=<optimized out>, __pyx_v_name=0x7ffff1dce670, __pyx_v_self=0x7ffff1aa1cf8)

    at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:17819

#7  __pyx_pw_6Cython_8Compiler_4Code_18TempitaUtilityCode_1__init__ (__pyx_self=<optimized out>, __pyx_args=<optimized out>, __pyx_kwds=<optimized out>)

    at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:17708

#8  0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff21c7ea8, arg=arg@entry=0x7ffff1aa1cc0, kw=kw@entry=0x7ffff1aa6a48) at Objects/abstract.c:2058

#9  0x00000000005832ed in method_call (func=0x7ffff21c7ea8, arg=0x7ffff1aa1cc0, kw=0x7ffff1aa6a48) at Objects/classobject.c:347

#10 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff2223748, arg=arg@entry=0x7ffff7e22048, kw=kw@entry=0x7ffff1aa6a48) at Objects/abstract.c:2058

#11 0x00000000004838ab in slot_tp_init (self=0x7ffff1aa1cf8, args=0x7ffff7e22048, kwds=0x7ffff1aa6a48) at Objects/typeobject.c:6195

#12 0x000000000048099a in type_call (type=<optimized out>, args=0x7ffff7e22048, kwds=0x7ffff1aa6a48) at Objects/typeobject.c:898

#13 0x00007ffff1f0112e in __Pyx_PyObject_Call (kw=0x7ffff1aa6a48, arg=<optimized out>, func=0x1108ee8) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:89878

#14 __pyx_pf_6Cython_8Compiler_4Code_15UtilityCodeBase_4load (__pyx_v_cls=0x1108ee8, __pyx_v_util_code_name=0x7ffff1dce670, __pyx_v_from_file=0x7ffff1dd22b8,

    __pyx_v_kwargs=__pyx_v_kwargs@entry=0x7ffff1aa6a48, __pyx_self=<optimized out>) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:10536

#15 0x00007ffff1f078c4 in __pyx_pw_6Cython_8Compiler_4Code_15UtilityCodeBase_5load (__pyx_self=<optimized out>, __pyx_args=0x7ffff1b1a8b8, __pyx_kwds=0x7ffff1aa6a08)

    at /tmp/pip-reiy4xj5-build/Cython/Compiler/Code.c:8625

#16 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff21c7328, arg=arg@entry=0x7ffff1b1a8b8, kw=kw@entry=0x7ffff1aa6a08) at Objects/abstract.c:2058

#17 0x00000000004e1ef0 in do_call (nk=<optimized out>, na=<optimized out>, pp_stack=0x7fffffff6510, func=0x7ffff21c7328) at Python/ceval.c:4466

#18 call_function (oparg=<optimized out>, pp_stack=0x7fffffff6510) at Python/ceval.c:4264

#19 PyEval_EvalFrameEx (f=f@entry=0x7ffff2cc85d0, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#20 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff1dd1ed0, globals=<optimized out>, locals=locals@entry=0x7ffff2cb8bc8, args=args@entry=0x0, argcount=argcount@entry=0, kws=kws@entry=0x0,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=kwdefs@entry=0x0, closure=0x0) at Python/ceval.c:3588

#21 0x00000000004dbd26 in builtin___build_class__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:173

#22 0x00000000004e5e3d in call_function (oparg=<optimized out>, pp_stack=0x7fffffff6780) at Python/ceval.c:4237

#23 PyEval_EvalFrameEx (f=f@entry=0x1274178, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#24 0x00000000004e6d2a in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, globals=<optimized out>, _co=0x7ffff1af3c90)

    at Python/ceval.c:3588

#25 PyEval_EvalCode (co=0x7ffff1af3c90, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:775

#26 0x00000000004db35a in builtin_exec (self=<optimized out>, args=<optimized out>) at Python/bltinmodule.c:897

#27 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffff69a0, func=0x7ffff7e51788) at Python/ceval.c:4558

#28 PyEval_EvalFrameEx (f=f@entry=0x1151658, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#29 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=3, kws=0x7ffff2e08cd8, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#30 0x00000000004e3680 in fast_function (nk=<optimized out>, na=3, n=3, pp_stack=0x7fffffff6b90, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#31 call_function (oparg=<optimized out>, pp_stack=0x7fffffff6b90) at Python/ceval.c:4262

#32 PyEval_EvalFrameEx (f=f@entry=0x7ffff2e08b28, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#33 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff6ce0, func=0x7ffff706f0d0) at Python/ceval.c:4334

#34 call_function (oparg=<optimized out>, pp_stack=0x7fffffff6ce0) at Python/ceval.c:4262

#35 PyEval_EvalFrameEx (f=f@entry=0x7ffff2de68e0, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#36 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff6e30, func=0x7ffff7068e18) at Python/ceval.c:4334                                                      [222/1100]

#37 call_function (oparg=<optimized out>, pp_stack=0x7fffffff6e30) at Python/ceval.c:4262

#38 PyEval_EvalFrameEx (f=f@entry=0x7ffff21dca48, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#39 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffff6f80, func=0x7ffff706b048) at Python/ceval.c:4334

#40 call_function (oparg=<optimized out>, pp_stack=0x7fffffff6f80) at Python/ceval.c:4262

#41 PyEval_EvalFrameEx (f=f@entry=0x1077e08, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#42 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff70d0, func=0x7ffff7073598) at Python/ceval.c:4334

#43 call_function (oparg=<optimized out>, pp_stack=0x7fffffff70d0) at Python/ceval.c:4262

#44 PyEval_EvalFrameEx (f=f@entry=0x7ffff21eb048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#45 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e14b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff22341a0, argcount=2, kws=kws@entry=0x0, kwcount=kwcount@entry=0,

    defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#46 0x000000000058e66c in function_call (func=0x7ffff7073620, arg=0x7ffff2234188, kw=0x0) at Objects/funcobject.c:632

#47 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073620, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#48 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073620, name=name@entry=0x858be0 <PyId__find_and_load.12724>) at Objects/abstract.c:2328

#49 0x0000000000502421 in PyImport_ImportModuleLevelObject (name=0x7ffff2c98990, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=0) at Python/import.c:1641

#50 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#51 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffff75b0, func=0x7ffff7e513c8) at Python/ceval.c:4558

#52 PyEval_EvalFrameEx (f=f@entry=0x7ffff22173d8, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#53 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=2, kws=0x1077d70, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#54 0x00000000004e3680 in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff77a0, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#55 call_function (oparg=<optimized out>, pp_stack=0x7fffffff77a0) at Python/ceval.c:4262

#56 PyEval_EvalFrameEx (f=f@entry=0x1077ba8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#57 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e1660, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff2c32f00, argcount=3, kws=kws@entry=0x0, kwcount=kwcount@entry=0,

    defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#58 0x000000000058e66c in function_call (func=0x7ffff7073730, arg=0x7ffff2c32ee8, kw=0x0) at Objects/funcobject.c:632

#59 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073730, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#60 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073730, name=name@entry=0x858bc0 <PyId__handle_fromlist.12725>) at Objects/abstract.c:2328

#61 0x0000000000502223 in PyImport_ImportModuleLevelObject (name=name@entry=0x7ffff7e48848, given_globals=given_globals@entry=0x7ffff2ddde88, locals=locals@entry=0x7ffff2c181c8,

    given_fromlist=given_fromlist@entry=0x7ffff2dd6d08, level=level@entry=1) at Python/import.c:1713

#62 0x00007ffff1b66f05 in __Pyx_Import (name=0x7ffff7e48848, from_list=from_list@entry=0x7ffff2dd6d08, level=level@entry=1) at /tmp/pip-reiy4xj5-build/Cython/Compiler/Visitor.c:29953

#63 0x00007ffff1bac0bb in PyInit_Visitor () at /tmp/pip-reiy4xj5-build/Cython/Compiler/Visitor.c:28035

#64 0x0000000000503987 in _PyImport_LoadDynamicModule (name=name@entry=0x7ffff2c964b0, path=path@entry=0x7ffff2dfc750, fp=fp@entry=0x0) at ./Python/importdl.c:88

#65 0x00000000004ffa8d in _imp_load_dynamic_impl (module=<optimized out>, file=<optimized out>, path=0x7ffff2dfc750, name=0x7ffff2c964b0) at Python/import.c:2271

#66 _imp_load_dynamic (module=<optimized out>, args=<optimized out>) at Python/import.c:2247

#67 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffff7e50, func=0x7ffff7070748) at Python/ceval.c:4558

#68 PyEval_EvalFrameEx (f=f@entry=0x7ffff1dc4210, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#69 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=3, kws=0x10e5e48, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#70 0x00000000004e3680 in fast_function (nk=<optimized out>, na=3, n=3, pp_stack=0x7fffffff8040, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#71 call_function (oparg=<optimized out>, pp_stack=0x7fffffff8040) at Python/ceval.c:4262

#72 PyEval_EvalFrameEx (f=f@entry=0x10e5c88, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#73 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70d74b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff3759660, argcount=2, kws=kws@entry=0x7ffff7e22060,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#74 0x000000000058e757 in function_call (func=0x7ffff706fd90, arg=0x7ffff3759648, kw=0x7ffff2dddd08) at Objects/funcobject.c:632

#75 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff706fd90, arg=arg@entry=0x7ffff3759648, kw=kw@entry=0x7ffff2dddd08) at Objects/abstract.c:2058

#76 0x00000000004df3d7 in ext_do_call (nk=<optimized out>, na=2, flags=<optimized out>, pp_stack=0x7fffffff8310, func=0x7ffff706fd90) at Python/ceval.c:4561                                      [175/1100]

#77 PyEval_EvalFrameEx (f=f@entry=0x7ffff706d600, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#78 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70bac00, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=2, kws=0x10e5b98, kwcount=0, defs=0x7ffff706e418,

    defcount=1, kwdefs=0x0, closure=0x7ffff706e3c8) at Python/ceval.c:3588

#79 0x00000000004e3680 in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff8500, func=0x7ffff706fe18) at Python/ceval.c:4344

#80 call_function (oparg=<optimized out>, pp_stack=0x7fffffff8500) at Python/ceval.c:4262

#81 PyEval_EvalFrameEx (f=f@entry=0x10e59f8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#82 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffff8650, func=0x7ffff7068f28) at Python/ceval.c:4334

#83 call_function (oparg=<optimized out>, pp_stack=0x7fffffff8650) at Python/ceval.c:4262

#84 PyEval_EvalFrameEx (f=f@entry=0x7ffff21a5c48, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#85 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffff87a0, func=0x7ffff706b048) at Python/ceval.c:4334

#86 call_function (oparg=<optimized out>, pp_stack=0x7fffffff87a0) at Python/ceval.c:4262

#87 PyEval_EvalFrameEx (f=f@entry=0x10bda78, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#88 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff88f0, func=0x7ffff7073598) at Python/ceval.c:4334

#89 call_function (oparg=<optimized out>, pp_stack=0x7fffffff88f0) at Python/ceval.c:4262

#90 PyEval_EvalFrameEx (f=f@entry=0x7ffff2b41828, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#91 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e14b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff1dc84e0, argcount=2, kws=kws@entry=0x0, kwcount=kwcount@entry=0,

    defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#92 0x000000000058e66c in function_call (func=0x7ffff7073620, arg=0x7ffff1dc84c8, kw=0x0) at Objects/funcobject.c:632

#93 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073620, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#94 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073620, name=name@entry=0x858be0 <PyId__find_and_load.12724>) at Objects/abstract.c:2328

#95 0x0000000000502421 in PyImport_ImportModuleLevelObject (name=0x7ffff2dfae68, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=1) at Python/import.c:1641

#96 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#97 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff7e513c8, arg=arg@entry=0x7ffff2c92468, kw=kw@entry=0x0) at Objects/abstract.c:2058

#98 0x00000000004e22b4 in PyEval_CallObjectWithKeywords (kw=0x0, arg=0x7ffff2c92468, func=0x7ffff7e513c8) at Python/ceval.c:4114

#99 PyEval_EvalFrameEx (f=f@entry=0x7ffff2e083e8, throwflag=throwflag@entry=0) at Python/ceval.c:2478

#100 0x00000000004e6d2a in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, globals=<optimized out>, _co=0x7ffff2ddfae0)

    at Python/ceval.c:3588

#101 PyEval_EvalCode (co=0x7ffff2ddfae0, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:775

#102 0x00000000004db35a in builtin_exec (self=<optimized out>, args=<optimized out>) at Python/bltinmodule.c:897

#103 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffff9010, func=0x7ffff7e51788) at Python/ceval.c:4558

#104 PyEval_EvalFrameEx (f=f@entry=0x7ffff2ce9cc0, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#105 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=3, kws=0x7ffff2e081f8, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#106 0x00000000004e3680 in fast_function (nk=<optimized out>, na=3, n=3, pp_stack=0x7fffffff9200, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#107 call_function (oparg=<optimized out>, pp_stack=0x7fffffff9200) at Python/ceval.c:4262

#108 PyEval_EvalFrameEx (f=f@entry=0x7ffff2e08048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#109 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff9350, func=0x7ffff706f0d0) at Python/ceval.c:4334

#110 call_function (oparg=<optimized out>, pp_stack=0x7fffffff9350) at Python/ceval.c:4262

#111 PyEval_EvalFrameEx (f=f@entry=0x7ffff2de6048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#112 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff94a0, func=0x7ffff7068e18) at Python/ceval.c:4334

#113 call_function (oparg=<optimized out>, pp_stack=0x7fffffff94a0) at Python/ceval.c:4262

#114 PyEval_EvalFrameEx (f=f@entry=0x7ffff21a5848, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#115 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffff95f0, func=0x7ffff706b048) at Python/ceval.c:4334

#116 call_function (oparg=<optimized out>, pp_stack=0x7fffffff95f0) at Python/ceval.c:4262

#117 PyEval_EvalFrameEx (f=f@entry=0x1006078, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#118 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffff9740, func=0x7ffff7073598) at Python/ceval.c:4334                                                     [128/1100]

#119 call_function (oparg=<optimized out>, pp_stack=0x7fffffff9740) at Python/ceval.c:4262

#120 PyEval_EvalFrameEx (f=f@entry=0x7ffff2b41240, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#121 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e14b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff1dc8460, argcount=2, kws=kws@entry=0x0,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#122 0x000000000058e66c in function_call (func=0x7ffff7073620, arg=0x7ffff1dc8448, kw=0x0) at Objects/funcobject.c:632

#123 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073620, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#124 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073620, name=name@entry=0x858be0 <PyId__find_and_load.12724>) at Objects/abstract.c:2328

#125 0x0000000000502421 in PyImport_ImportModuleLevelObject (name=0x7ffff2ddd330, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=1) at Python/import.c:1641

#126 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#127 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff7e513c8, arg=arg@entry=0x7ffff2239eb8, kw=kw@entry=0x0) at Objects/abstract.c:2058

#128 0x00000000004e22b4 in PyEval_CallObjectWithKeywords (kw=0x0, arg=0x7ffff2239eb8, func=0x7ffff7e513c8) at Python/ceval.c:4114

#129 PyEval_EvalFrameEx (f=f@entry=0x7ffff2dcde08, throwflag=throwflag@entry=0) at Python/ceval.c:2478

#130 0x00000000004e6d2a in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, globals=<optimized out>, _co=0x7ffff2b42f60)

    at Python/ceval.c:3588

#131 PyEval_EvalCode (co=0x7ffff2b42f60, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:775

#132 0x00000000004db35a in builtin_exec (self=<optimized out>, args=<optimized out>) at Python/bltinmodule.c:897

#133 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffff9e60, func=0x7ffff7e51788) at Python/ceval.c:4558

#134 PyEval_EvalFrameEx (f=f@entry=0x7ffff2ce9768, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#135 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=3, kws=0x7ffff2252ea8, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#136 0x00000000004e3680 in fast_function (nk=<optimized out>, na=3, n=3, pp_stack=0x7fffffffa050, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#137 call_function (oparg=<optimized out>, pp_stack=0x7fffffffa050) at Python/ceval.c:4262

#138 PyEval_EvalFrameEx (f=f@entry=0x7ffff2252cf8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#139 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffa1a0, func=0x7ffff706f0d0) at Python/ceval.c:4334

#140 call_function (oparg=<optimized out>, pp_stack=0x7fffffffa1a0) at Python/ceval.c:4262

#141 PyEval_EvalFrameEx (f=f@entry=0x7ffff2dcda98, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#142 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffa2f0, func=0x7ffff7068e18) at Python/ceval.c:4334

#143 call_function (oparg=<optimized out>, pp_stack=0x7fffffffa2f0) at Python/ceval.c:4262

#144 PyEval_EvalFrameEx (f=f@entry=0x7ffff21a5648, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#145 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffa440, func=0x7ffff706b048) at Python/ceval.c:4334

#146 call_function (oparg=<optimized out>, pp_stack=0x7fffffffa440) at Python/ceval.c:4262

#147 PyEval_EvalFrameEx (f=f@entry=0xf86598, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#148 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffa590, func=0x7ffff7073598) at Python/ceval.c:4334

#149 call_function (oparg=<optimized out>, pp_stack=0x7fffffffa590) at Python/ceval.c:4262

#150 PyEval_EvalFrameEx (f=f@entry=0x7ffff2b41048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#151 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e14b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff2cb9320, argcount=2, kws=kws@entry=0x0,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#152 0x000000000058e66c in function_call (func=0x7ffff7073620, arg=0x7ffff2cb9308, kw=0x0) at Objects/funcobject.c:632

#153 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073620, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#154 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073620, name=name@entry=0x858be0 <PyId__find_and_load.12724>) at Objects/abstract.c:2328

#155 0x0000000000502421 in PyImport_ImportModuleLevelObject (name=0x7ffff223bb30, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=1) at Python/import.c:1641

#156 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#157 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff7e513c8, arg=arg@entry=0x7ffff2b649e8, kw=kw@entry=0x0) at Objects/abstract.c:2058

#158 0x00000000004e22b4 in PyEval_CallObjectWithKeywords (kw=0x0, arg=0x7ffff2b649e8, func=0x7ffff7e513c8) at Python/ceval.c:4114

#159 PyEval_EvalFrameEx (f=f@entry=0x7ffff2252b28, throwflag=throwflag@entry=0) at Python/ceval.c:2478

#160 0x00000000004e6d2a in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, globals=<optimized out>, _co=0x7ffff[81/1100]

    at Python/ceval.c:3588

#161 PyEval_EvalCode (co=0x7ffff2b55db0, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:775

#162 0x00000000004db35a in builtin_exec (self=<optimized out>, args=<optimized out>) at Python/bltinmodule.c:897

#163 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffffacb0, func=0x7ffff7e51788) at Python/ceval.c:4558

#164 PyEval_EvalFrameEx (f=f@entry=0x7ffff2dcf438, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#165 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=3, kws=0x7ffff1e3bb08, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#166 0x00000000004e3680 in fast_function (nk=<optimized out>, na=3, n=3, pp_stack=0x7fffffffaea0, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#167 call_function (oparg=<optimized out>, pp_stack=0x7fffffffaea0) at Python/ceval.c:4262

#168 PyEval_EvalFrameEx (f=f@entry=0x7ffff1e3b958, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#169 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffaff0, func=0x7ffff706f0d0) at Python/ceval.c:4334

#170 call_function (oparg=<optimized out>, pp_stack=0x7fffffffaff0) at Python/ceval.c:4262

#171 PyEval_EvalFrameEx (f=f@entry=0x7ffff2bd3048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#172 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffb140, func=0x7ffff7068e18) at Python/ceval.c:4334

#173 call_function (oparg=<optimized out>, pp_stack=0x7fffffffb140) at Python/ceval.c:4262

#174 PyEval_EvalFrameEx (f=f@entry=0x7ffff21dc648, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#175 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffb290, func=0x7ffff706b048) at Python/ceval.c:4334

#176 call_function (oparg=<optimized out>, pp_stack=0x7fffffffb290) at Python/ceval.c:4262

#177 PyEval_EvalFrameEx (f=f@entry=0xe66bb8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#178 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffb3e0, func=0x7ffff7073598) at Python/ceval.c:4334

#179 call_function (oparg=<optimized out>, pp_stack=0x7fffffffb3e0) at Python/ceval.c:4262

#180 PyEval_EvalFrameEx (f=f@entry=0x7ffff2b41438, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#181 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e14b0, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff2cc7e20, argcount=2, kws=kws@entry=0x0,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#182 0x000000000058e66c in function_call (func=0x7ffff7073620, arg=0x7ffff2cc7e08, kw=0x0) at Objects/funcobject.c:632

#183 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073620, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#184 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073620, name=name@entry=0x858be0 <PyId__find_and_load.12724>) at Objects/abstract.c:2328

#185 0x0000000000502421 in PyImport_ImportModuleLevelObject (name=0x7ffff2b46030, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=0) at Python/import.c:1641

#186 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#187 0x00000000004e392b in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0x7fffffffb8c0, func=0x7ffff7e513c8) at Python/ceval.c:4558

#188 PyEval_EvalFrameEx (f=f@entry=0x7ffff21a5048, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#189 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70ba810, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=2, kws=0x10c73b0, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#190 0x00000000004e3680 in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffbab0, func=0x7ffff70e5ae8) at Python/ceval.c:4344

#191 call_function (oparg=<optimized out>, pp_stack=0x7fffffffbab0) at Python/ceval.c:4262

#192 PyEval_EvalFrameEx (f=f@entry=0x10c71e8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#193 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff70e1660, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff22417b0, argcount=3, kws=kws@entry=0x0,

    kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#194 0x000000000058e66c in function_call (func=0x7ffff7073730, arg=0x7ffff2241798, kw=0x0) at Objects/funcobject.c:632

#195 0x0000000000426a9a in PyObject_Call (func=0x7ffff7073730, arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2058

#196 0x0000000000427ce6 in _PyObject_CallMethodIdObjArgs (callable=0x7ffff7073730, name=name@entry=0x858bc0 <PyId__handle_fromlist.12725>) at Objects/abstract.c:2328

#197 0x0000000000502223 in PyImport_ImportModuleLevelObject (name=0x7ffff7e48848, given_globals=<optimized out>, locals=<optimized out>, given_fromlist=<optimized out>, level=1) at Python/import.c:1713

#198 0x00000000004dbb9b in builtin___import__ (self=<optimized out>, args=<optimized out>, kwds=<optimized out>) at Python/bltinmodule.c:210

#199 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff7e513c8, arg=arg@entry=0x7ffff2d295c8, kw=kw@entry=0x0) at Objects/abstract.c:2058

#200 0x00000000004e22b4 in PyEval_CallObjectWithKeywords (kw=0x0, arg=0x7ffff2d295c8, func=0x7ffff7e513c8) at Python/ceval.c:4114

#201 PyEval_EvalFrameEx (f=f@entry=0xb22bc8, throwflag=throwflag@entry=0) at Python/ceval.c:2478                                                                                                   [34/1100]

#202 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff2ce4e40, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff2d67320, argcount=5, kws=kws@entry=0x7ffff2ca2ba0,

    kwcount=kwcount@entry=1, defs=defs@entry=0x7ffff343a4c0, defcount=defcount@entry=4, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#203 0x000000000058e757 in function_call (func=0x7ffff223ed90, arg=0x7ffff2d67308, kw=0x7ffff2cc7a08) at Objects/funcobject.c:632

#204 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff223ed90, arg=arg@entry=0x7ffff2d67308, kw=kw@entry=0x7ffff2cc7a08) at Objects/abstract.c:2058

#205 0x00000000005832ed in method_call (func=0x7ffff223ed90, arg=0x7ffff2d67308, kw=0x7ffff2cc7a08) at Objects/classobject.c:347

#206 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff708a188, arg=arg@entry=0x7ffff2be04a8, kw=kw@entry=0x7ffff2cc7a08) at Objects/abstract.c:2058

#207 0x00000000004838ab in slot_tp_init (self=0x7ffff221ff60, args=0x7ffff2be04a8, kwds=0x7ffff2cc7a08) at Objects/typeobject.c:6195

#208 0x000000000048099a in type_call (type=<optimized out>, args=0x7ffff2be04a8, kwds=0x7ffff2cc7a08) at Objects/typeobject.c:898

#209 0x0000000000426a9a in PyObject_Call (func=func@entry=0xf57048, arg=arg@entry=0x7ffff2be04a8, kw=kw@entry=0x7ffff2cc7a08) at Objects/abstract.c:2058

#210 0x00000000004e1ef0 in do_call (nk=<optimized out>, na=<optimized out>, pp_stack=0x7fffffffc390, func=0xf57048) at Python/ceval.c:4466

#211 call_function (oparg=<optimized out>, pp_stack=0x7fffffffc390) at Python/ceval.c:4264

#212 PyEval_EvalFrameEx (f=f@entry=0x10cbbd8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#213 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffc4e0, func=0x7ffff222ec80) at Python/ceval.c:4334

#214 call_function (oparg=<optimized out>, pp_stack=0x7fffffffc4e0) at Python/ceval.c:4262

#215 PyEval_EvalFrameEx (f=f@entry=0xf5a098, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#216 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff2d27c90, globals=<optimized out>, locals=locals@entry=0x0, args=args@entry=0x7ffff2bc1798, argcount=1, kws=kws@entry=0x7ffff220e7e0,

    kwcount=kwcount@entry=3, defs=defs@entry=0x7ffff2b97c28, defcount=defcount@entry=7, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#217 0x000000000058e757 in function_call (func=0x7ffff225ae18, arg=0x7ffff2bc1780, kw=0x7ffff2232e88) at Objects/funcobject.c:632

#218 0x0000000000426a9a in PyObject_Call (func=func@entry=0x7ffff225ae18, arg=arg@entry=0x7ffff2bc1780, kw=kw@entry=0x7ffff2232e88) at Objects/abstract.c:2058

#219 0x00000000004df3d7 in ext_do_call (nk=<optimized out>, na=1, flags=<optimized out>, pp_stack=0x7fffffffc7b0, func=0x7ffff225ae18) at Python/ceval.c:4561

#220 PyEval_EvalFrameEx (f=f@entry=0xf126a8, throwflag=throwflag@entry=0) at Python/ceval.c:2878

#221 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff6c776f0, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=2, kws=0xc52658, kwcount=0, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#222 0x00000000004e3680 in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffc9a0, func=0x7ffff43ef048) at Python/ceval.c:4344

#223 call_function (oparg=<optimized out>, pp_stack=0x7fffffffc9a0) at Python/ceval.c:4262

#224 PyEval_EvalFrameEx (f=f@entry=0xc524a8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#225 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff6c77930, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=1, kws=0x7ffff2bdd1d8, kwcount=0, defs=0x7ffff4394178,

    defcount=1, kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#226 0x00000000004e3680 in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffcba0, func=0x7ffff43ef158) at Python/ceval.c:4344

#227 call_function (oparg=<optimized out>, pp_stack=0x7fffffffcba0) at Python/ceval.c:4262

#228 PyEval_EvalFrameEx (f=f@entry=0x7ffff2bdd048, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#229 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffccf0, func=0x7ffff43ef488) at Python/ceval.c:4334

#230 call_function (oparg=<optimized out>, pp_stack=0x7fffffffccf0) at Python/ceval.c:4262

#231 PyEval_EvalFrameEx (f=f@entry=0x7ffff2dcecf8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#232 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffce40, func=0x7ffff65a29d8) at Python/ceval.c:4334

#233 call_function (oparg=<optimized out>, pp_stack=0x7fffffffce40) at Python/ceval.c:4262

#234 PyEval_EvalFrameEx (f=f@entry=0xc81838, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#235 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffcf90, func=0x7ffff43e89d8) at Python/ceval.c:4334

#236 call_function (oparg=<optimized out>, pp_stack=0x7fffffffcf90) at Python/ceval.c:4262

#237 PyEval_EvalFrameEx (f=f@entry=0x7ffff1e43da0, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#238 0x00000000004e59cb in fast_function (nk=<optimized out>, na=2, n=2, pp_stack=0x7fffffffd0e0, func=0x7ffff6a0cb70) at Python/ceval.c:4334

#239 call_function (oparg=<optimized out>, pp_stack=0x7fffffffd0e0) at Python/ceval.c:4262

#240 PyEval_EvalFrameEx (f=f@entry=0xebf288, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#241 0x00000000004e59cb in fast_function (nk=<optimized out>, na=1, n=1, pp_stack=0x7fffffffd230, func=0x7ffff6a0cae8) at Python/ceval.c:4334

#242 call_function (oparg=<optimized out>, pp_stack=0x7fffffffd230) at Python/ceval.c:4262

#243 PyEval_EvalFrameEx (f=f@entry=0xc7dbd8, throwflag=throwflag@entry=0) at Python/ceval.c:2838

#244 0x00000000004e6904 in PyEval_EvalCodeEx (_co=0x7ffff6f96f60, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=0, kws=0x969418, kwcount=15, defs=0x0, defcount=0,

    kwdefs=0x0, closure=0x0) at Python/ceval.c:3588

#245 0x00000000004e3680 in fast_function (nk=<optimized out>, na=0, n=30, pp_stack=0x7fffffffd430, func=0x7ffff5f18ae8) at Python/ceval.c:4344

#246 call_function (oparg=<optimized out>, pp_stack=0x7fffffffd430) at Python/ceval.c:4262

#247 PyEval_EvalFrameEx (f=f@entry=0x969298, throwflag=throwflag@entry=0) at Python/ceval.c:2838


#248 0x00000000004e6d2a in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=locals@entry=0x0, globals=globals@entry=0x100000000,

    _co=0x7ffff701d780, _co@entry=0x8ae510) at Python/ceval.c:3588

#249 PyEval_EvalCode (co=co@entry=0x7ffff701d780, globals=globals@entry=0x7ffff70892c8, locals=locals@entry=0x7ffff70892c8) at Python/ceval.c:775

#250 0x0000000000516698 in run_mod (arena=0x8c10e0, flags=0x7fffffffd680, locals=0x7ffff70892c8, globals=0x7ffff70892c8, filename=0x7ffff6f814f0, mod=0x978188) at Python/pythonrun.c:2175

#251 PyRun_FileExFlags (fp=0x90fc70, filename_str=<optimized out>, start=<optimized out>, globals=0x7ffff70892c8, locals=0x7ffff70892c8, closeit=1, flags=0x7fffffffd680) at Python/pythonrun.c:2128

#252 0x0000000000518f75 in PyRun_SimpleFileExFlags (fp=0x90fc70, filename=<optimized out>, closeit=1, flags=0x7fffffffd680) at Python/pythonrun.c:1601

#253 0x000000000041ee74 in run_file (p_cf=0x7fffffffd680, filename=0x8ae310 L"setup.py", fp=0x90fc70) at Modules/main.c:319

#254 Py_Main (argc=argc@entry=4, argv=argv@entry=0x8ad010) at Modules/main.c:751

#255 0x000000000041b287 in main (argc=4, argv=<optimized out>) at ./Modules/python.c:69

Naotoshi Seo

unread,
Aug 29, 2017, 12:06:09 PM8/29/17
to cython...@googlegroups.com
I noticed that the solution I posted was not working actually.

My custom_build_ext cythonizes (and creates c files) during setup process, but the generated tar ball did not include c files. It seemed that c files have to exist before running `setup`.

Regards,
Naotoshi


--

---
You received this message because you are subscribed to a topic in the Google Groups "cython-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/cython-users/H7eAJSIebx0/unsubscribe.
To unsubscribe from this group and all its topics, send an email to cython-users+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Stefan Behnel

unread,
Aug 29, 2017, 12:41:03 PM8/29/17
to Cython-users
No, it's quite normal.


> I attached backtrace from core file below.
> [...]

The trace looks like a stack overflow to me. It could be recursively trying
(and retrying) to import the same module over and over. Does that only
happen with a specific Python version or with any?

Stefan

Naotoshi Seo

unread,
Aug 29, 2017, 12:43:31 PM8/29/17
to cython...@googlegroups.com
I tried with python 3.6.1 and 3.4.6.


2017年8月30日(水) 1:41 Stefan Behnel <stef...@behnel.de>:
--

---
You received this message because you are subscribed to a topic in the Google Groups "cython-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/cython-users/H7eAJSIebx0/unsubscribe.
To unsubscribe from this group and all its topics, send an email to cython-users...@googlegroups.com.

Naotoshi Seo

unread,
Aug 30, 2017, 5:07:22 PM8/30/17
to cython-users
> My custom_build_ext cythonizes (and creates c files) during setup process, but the generated tar ball did not include c files. It seemed that c files have to exist before running `setup`.

I needed to tweak sdist, too. `python setup.py sdist` generated a nice tar ball include c files with following:

custom_setup_build.py

```
def make_extensions(ext):
    """Make Extension objects here. ext is .pyx or .c"""    

class custom_build_ext(build_ext.build_ext):
    def run(self):
        cythonize(make_extensions('.pyx'))
        build_ext.build_ext.run(self)

class custom_sdist(sdist.sdit):
    def __init__(self, *args, **kwargs):
        cythonize(make_extensions('.pyx'))
        sdist.sdist.__init__(self, *args, **kwargs)
```

```
import custom_setup_build

setup( 
    setup_requires=[ 
        'fastrlock>=0.3',
    ], 
    ext_modules = make_extensions('.c'),
    cmdclass={'build_ext': custom_build_ext, 'sdist': custom_sdist}, 
  )
```

The SEGV issue still occurs for me, though.

Naotoshi Seo

unread,
Sep 1, 2017, 4:38:04 AM9/1/17
to cython-users
Sometimes I get Compiler crash error instead of SEGV.


Traceback (most recent call last):
  File "Cython/Compiler/Visitor.py", line 180, in Cython.Compiler.Visitor.TreeVisitor._visit (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5262)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/ParseTreeTransforms.py", line 2253, in visit_StatListNode
    if not self.current_directives['remove_unreachable']:
TypeError: 'NoneType' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup.py", line 97, in <module>
    'sdist': sdist},
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/distutils/dist.py", line 972, in run_command
    cmd_obj = self.get_command_obj(command)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/distutils/dist.py", line 847, in get_command_obj
    cmd_obj = self.command_obj[command] = klass(self)
  File "/home/ubuntu/src/github.com/cupy/cupy/cupy_setup_build.py", line 518, in __init__
    get_ext_modules(True)  # convert Cython files to cpp files
  File "/home/ubuntu/src/github.com/cupy/cupy/cupy_setup_build.py", line 373, in get_ext_modules
    extensions = cythonize(extensions, arg_options)
  File "/home/ubuntu/src/github.com/cupy/cupy/cupy_setup_build.py", line 346, in cythonize
    compiler_directives=directives, **cythonize_options)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Build/Dependencies.py", line 925, in cythonize
    cythonize_one(*args)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Build/Dependencies.py", line 1030, in cythonize_one
    result = compile([pyx_file], options)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Main.py", line 687, in compile
    return compile_multiple(source, options)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Main.py", line 665, in compile_multiple
    result = run_pipeline(source, options, context=context)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Main.py", line 495, in run_pipeline
    err, enddata = Pipeline.run_pipeline(pipeline, source)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Pipeline.py", line 340, in run_pipeline
    data = phase(data)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Pipeline.py", line 33, in parse
    scope = context.find_module(full_module_name, pos = initial_pos, need_pxd = 0)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Main.py", line 221, in find_module
    err, result = self.process_pxd(source_desc, scope, qualified_name)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Main.py", line 135, in process_pxd
    result = Pipeline.run_pipeline(pipeline, source_desc)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/Pipeline.py", line 340, in run_pipeline
    data = phase(data)
  File "Cython/Compiler/Visitor.py", line 286, in Cython.Compiler.Visitor.CythonTransform.__call__ (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:7424)
  File "Cython/Compiler/Visitor.py", line 269, in Cython.Compiler.Visitor.VisitorTransform.__call__ (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:7096)
  File "Cython/Compiler/Visitor.py", line 182, in Cython.Compiler.Visitor.TreeVisitor._visit (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5340)
  File "Cython/Compiler/Visitor.py", line 180, in Cython.Compiler.Visitor.TreeVisitor._visit (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5282)
  File "Cython/Compiler/Visitor.py", line 296, in Cython.Compiler.Visitor.CythonTransform.visit_Node (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:7630)
  File "Cython/Compiler/Visitor.py", line 247, in Cython.Compiler.Visitor.VisitorTransform.visitchildren (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:6415)
  File "Cython/Compiler/Visitor.py", line 247, in Cython.Compiler.Visitor.VisitorTransform.visitchildren (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:6847)
  File "Cython/Compiler/Visitor.py", line 248, in Cython.Compiler.Visitor.VisitorTransform.visitchildren (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:6435)
  File "Cython/Compiler/Visitor.py", line 221, in Cython.Compiler.Visitor.TreeVisitor._visitchildren (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:6118)
  File "Cython/Compiler/Visitor.py", line 193, in Cython.Compiler.Visitor.TreeVisitor._visitchild (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5603)
  File "Cython/Compiler/Visitor.py", line 188, in Cython.Compiler.Visitor.TreeVisitor._visit (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5484)
  File "Cython/Compiler/Visitor.py", line 147, in Cython.Compiler.Visitor.TreeVisitor._raise_compiler_error (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:4490)
Cython.Compiler.Errors.CompilerCrash:
Error compiling Cython file:
------------------------------------------------------------
...
from libcpp cimport vector
^
------------------------------------------------------------

cupy/core/core.pxd:1:0: Compiler crash in RemoveUnreachableCode

ModuleNode.body = StatListNode(core.pxd:1:0)

Compiler crash traceback from this point on:
  File "Cython/Compiler/Visitor.py", line 180, in Cython.Compiler.Visitor.TreeVisitor._visit (/tmp/pip-kc4htp7t-build/Cython/Compiler/Visitor.c:5262)
  File "/home/ubuntu/.pyenv/versions/3.4.6/lib/python3.4/site-packages/Cython/Compiler/ParseTreeTransforms.py", line 2253, in visit_StatListNode
    if not self.current_directives['remove_unreachable']:
TypeError: 'NoneType' object is not subscriptable

Naotoshi Seo

unread,
Sep 4, 2017, 12:39:56 AM9/4/17
to cython-users
I could resolve this problem with a commit https://github.com/cupy/cupy/pull/446/commits/a56c04df131e2364eb470f5f0358b39d9385006f.

It seemed `import Cython.Build` in sdist was doing something band.
I changed to do `import Cython.Build` at the top of script, and the issues was resolved.

Stefan Behnel

unread,
Sep 4, 2017, 12:56:33 AM9/4/17
to cython...@googlegroups.com
Hi!

Naotoshi Seo schrieb am 04.09.2017 um 06:27:
> I could resolve this problem with a
> commit https://github.com/cupy/cupy/pull/446/commits/a56c04df131e2364eb470f5f0358b39d9385006f.
>
> It seemed `import Cython.Build` in sdist was doing something band.
> I changed to do `import Cython.Build` at the top of script, and the issues
> was resolved.

Thanks for your investigations. I've seen that you opened a ticket for
this. I'll respond over there.

https://github.com/cython/cython/issues/1855

Stefan
Reply all
Reply to author
Forward
0 new messages