I'm running SageMath 10.4, which was installed using mamba. When trying the example of load("power2.spyx") in Coding in Cython documentation on the SageMath website, I get the following error. I tried to avoid the error by installing libgd3 and libgd-dev via apt, but the error remains.
$ sage ┌────────────────────────────────────────────────────────────────────┐ │ SageMath version 10.4, Release Date: 2024-07-19 │ │ Using Python 3.10.15. Type "help()" for help. │ └────────────────────────────────────────────────────────────────────┘ sage: load("power2.spyx")
Compiling power2.spyx...
KeyError Traceback (most recent call last) File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/misc/cachefunc.pyx:1010, in sage.misc.cachefunc.CachedFunction.__call__ (build/cythonized/sage/misc/cachefunc.c:8371)() 1009 try: -> 1010 return self.cache[k] 1011 except TypeError: # k is not hashable
KeyError: ((), ())
During handling of the above exception, another exception occurred:
PackageNotFoundError Traceback (most recent call last) Cell In[1], line 1 ----> 1 load("power2.spyx")
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/misc/persist.pyx:176, in sage.misc.persist.load (build/cythonized/sage/misc/persist.c:4564)() 174 175 if sage.repl.load.is_loadable_filename(filename): --> 176 sage.repl.load.load(filename, globals()) 177 return 178
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/repl/load.py:282, in load(filename, globals, attach) 280 if attach: 281 add_attached_file(fpath) --> 282 exec(load_cython(fpath), globals) 283 elif ext in ['.f', '.f90']: 284 from sage.misc.inline_fortran import fortran
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/repl/load.py:73, in load_cython(name) 60 """ 61 Helper function to load a Cython file. 62 (...) 70 module. 71 """ 72 from sage.misc.cython import cython ---> 73 mod, dir = cython(str(name), compile_message=True, use_cache=True) 74 import sys 75 sys.path.append(dir)
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/misc/cython.py:317, in cython(filename, verbose, compile_message, use_cache, create_local_c_file, annotate, sage_namespace, create_local_so_file) 313 shutil.copy(filename, pyxfile) 315 # Add current working directory to includes. This is needed because 316 # we cythonize from a different directory. See Issue #24764. --> 317 standard_libs, standard_libdirs, standard_includes, aliases = _standard_libs_libdirs_incdirs_aliases() 318 includes = [os.getcwd()] + standard_includes 320 # Now do the actual build, directly calling Cython and distutils
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/misc/cachefunc.pyx:1015, in sage.misc.cachefunc.CachedFunction.__call__ (build/cythonized/sage/misc/cachefunc.c:8499)() 1013 return self.cache[k] 1014 except KeyError: -> 1015 w = self.f(args, *kwds) 1016 self.cache[k] = w 1017 return w
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/misc/cython.py:51, in _standard_libs_libdirs_incdirs_aliases() 37 @cached_function 38 def _standard_libs_libdirs_incdirs_aliases(): 39 r""" 40 Return the list of libraries and library directories. 41 (...) 49 {...}) 50 """ ---> 51 aliases = cython_aliases() 52 standard_libs = [ 53 'mpfr', 'gmp', 'gmpxx', 'pari', 'm', 54 'ec', 'gsl', 55 ] + aliases["CBLAS_LIBRARIES"] + [ 56 'ntl'] 57 standard_libdirs = []
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/sage/env.py:442, in cython_aliases(required_modules, optional_modules) 440 else: 441 try: --> 442 aliases[var + "CFLAGS"] = pkgconfig.cflags(lib).split() 443 pc = pkgconfig.parse(lib) 444 libs = pkgconfig.libs(lib)
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/pkgconfig/pkgconfig.py:144, in cflags(package)
138 def cflags(package):
139 """
140 Return the CFLAGS string returned by pkg-config.
141
142 If pkg-config
is not on path, raises EnvironmentError
.
143 """
--> 144 _raise_if_not_exists(package)
145 return _query(package, '--cflags')
File ~/mambaforge/envs/sage104/lib/python3.10/site-packages/pkgconfig/pkgconfig.py:103, in _raise_if_not_exists(package) 101 def _raise_if_not_exists(package): 102 if not exists(package): --> 103 raise PackageNotFoundError(package)
PackageNotFoundError: gdlib not found