Ask Your Question

failure to compile cython .pyx when cimporting some function from sage

asked 2021-08-24 17:17:33 +0200

pierre gravatar image

updated 2021-08-25 09:47:21 +0200


I am working on a Sage graph project, and for optimization, I have chosen to move it to Cython. The code compiles just fine as is, but for further optimization I will need to use a union find data structure in my cdef function. So far, I was using DisjointSet from sage.sets.disjoint_set in a separate function: my issue is I do not know how to cdef such an object.

My initial attempt to solve this was to cimport the disjoint set class from the sage/sets/disjoint_set.pyx file, and use it to cdef.

This would in summary be something like this :


from sage.sets.disjoint_set cimport DisjointSet_of_hashables

cdef DisjointSet_of_hashables D

D = DisjointSet(10)


Though this does not compile : I get an error related to a library (that I assumed was included in the install of Sage). Just in case it was not, I manually installed GAP (which did not solve the problem).

/usr/bin/ld : ne peut trouver -lgap
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-g++' failed with exit status 1

This message is partly in French but it translates exactly to

/usr/bin/ld: cannot find -lgap

I believe this is mostly likely due to me misunderstanding how to import a class from the Sage Cython files. I had a similar problem when trying to work with bitsets (although the error was on the library PARI instead of GAP).

In case it is relevant, I am working on Ubuntu 20.04, installed Sage with apt (Sage version is 9.0).

Thank you in advance for any help.


edit retag flag offensive close merge delete



Welcome to Ask Sage! Thank you for your question!

slelievre gravatar imageslelievre ( 2021-08-24 17:45:41 +0200 )edit

On ne peut pas cimporter quelque chose qui est une def. Ca marche seulement pour les cdef.

FrédéricC gravatar imageFrédéricC ( 2021-08-24 18:18:58 +0200 )edit

Merci pour votre réponse Frédéric, effectivement j'ai mal renseigné mon exemple ; mais même si j'utilise ... cimport DisjointSet_Class (qui est bien cdef dans le fichier source) ou DisjointSet_of_hashables j'ai la même erreur.

Est-il possible de cdef un DisjointSet ?

pierre gravatar imagepierre ( 2021-08-25 09:46:27 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2021-08-25 15:24:47 +0200

pierre gravatar image

updated 2021-08-25 15:25:42 +0200

As an update, I have decided to make my own union find class in my code considering it is a fairly simple object - but I would still like an answer to this slighty more general question : was "from xyz cimport some_cdef_class" not the correct way to import a class from a sage cython file [included in the source code] ? Do I need to specify something more in my file perhaps ?

And most importantly, is this error due to my installation or to my code ?

edit flag offensive delete link more


Ca serait bien de ré-essayer avec une nouvelle installation propre de sage 9.4.

FrédéricC gravatar imageFrédéricC ( 2021-08-25 17:04:38 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2021-08-24 17:17:33 +0200

Seen: 108 times

Last updated: Aug 25 '21