0

I have a simple project directory and some simple files which failed to compile.

Directory structure:

cythonize: ROOT
|___ cythonize
    |___ __init__.pxd
    |___ __init__.py
    |___ first.pxd
    |___ first.pyx
    |___ second.pxd
    |___ second.pyx
|___ README.md
|___ setup.py

Let me show what are the exact content in every file.

__init__.pxd:

<EMPTY FILE>

__init__.py:

<EMPTY FILE>

first.pxd:

cdef class MyClass:
    cdef str good
    cdef str bad

    cdef str say(self, str x, str y)

first.pyx:

cdef class MyClass:

    cdef str say(self, str x, str y):
        return x

second.pxd:

from . cimport first # removing this does not help

second.pyx:

#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    return first(a, b)

Objective

I am simply trying to cimport first from first.pxd into second.pyx in order to use first in second.pyx.

Compilation Errors

>>> cythonize -i -k -3 cythonize/second.pyx
Compiling C:\...\cythonize\cythonize\second.pyx because it changed.
[1/1] Cythonizing C:\...\cythonize\cythonize\second.pyx

Error compiling Cython file:
------------------------------------------------------------
...
#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    ^
------------------------------------------------------------

cythonize\second.pyx:5:5: 'first' is not a type identifier

Error compiling Cython file:
------------------------------------------------------------
...
#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    return first(a, b)          ^
------------------------------------------------------------

cythonize\second.pyx:6:11: 'first' is not a constant, variable or function identifier
Failed compilations: cythonize.second

Maybe one can show what is the minimum viable example that can make this work?

Jim
  • 450
  • 2
  • 10

1 Answers1

-2

This error message:

cythonize\second.pyx:5:5: 'first' is not a type identifier

Tells you that 'first' is not the name of an object type. It is the name of the file. You are importing the file and its objects, but you cannot build an object of the entire file.

For example, you could do

cdef first.MyClass1

as a type.

Nabeel
  • 47
  • 4