Sage Crash Report

190 views
Skip to first unread message

Matthias Goerner

unread,
May 24, 2023, 6:16:25 PM5/24/23
to sage-s...@googlegroups.com
Hi!

I can't get sage to work when installing it with conda on a new MacBook Pro with M2 chip and Ventura 13.3.

I tried
conda -n sage create sage=9.X python=3.Y
for (X,Y) = (5,10), (8,10), (8,11).
With Sage 9.5, I get the attached crash report.
With Sage 9.8, I get the following linking error below.

Cheers,
    Matthias

(sage-py310) matthias@matthiass-air-2 ~ % sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.8, Release Date: 2023-02-11                     │
│ Using Python 3.10.11. Type "help()" for help.                      │
└────────────────────────────────────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Warning: sage.all is not available; this is a limited REPL.        ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sage: import sage.all
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
Cell In[1], line 1
----> 1 import sage.all

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/all.py:168
    166 from sage.modules.all    import *
    167 from sage.monoids.all    import *
--> 168 from sage.algebras.all   import *
    169 from sage.modular.all    import *
    170 from sage.sat.all        import *

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/algebras/all.py:21
      5 #*****************************************************************************
      6 #       Copyright (C) 2005 William Stein <wst...@gmail.com>
      7 #
   (...)
     17 #                  http://www.gnu.org/licenses/
     18 #*****************************************************************************
     19 from sage.misc.lazy_import import lazy_import
---> 21 import sage.algebras.catalog as algebras
     23 from .quatalg.all import *
     24 from .steenrod.all import *

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/algebras/catalog.py:84
      1 r"""
      2 Catalog of Algebras
      3
   (...)
     80   <sage.algebras.yokonuma_hecke_algebra.YokonumaHeckeAlgebra>`
     81 """
     83 from sage.algebras.free_algebra import FreeAlgebra as Free
---> 84 from sage.algebras.quatalg.quaternion_algebra import QuaternionAlgebra as Quaternion
     85 from sage.algebras.steenrod.steenrod_algebra import SteenrodAlgebra as Steenrod
     86 from sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra import FiniteDimensionalAlgebra as FiniteDimensional

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/algebras/quatalg/quaternion_algebra.py:68
     61 from operator import itemgetter
     63 from .quaternion_algebra_element import (
     64     QuaternionAlgebraElement_abstract,
     65     QuaternionAlgebraElement_generic,
     66     QuaternionAlgebraElement_rational_field,
     67     QuaternionAlgebraElement_number_field)
---> 68 from . import quaternion_algebra_cython
     70 from sage.modular.modsym.p1list import P1List
     72 from sage.misc.cachefunc import cached_method

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/algebras/quatalg/quaternion_algebra_cython.pyx:1, in init sage.algebras.quatalg.quaternion_algebra_cython (build/cythonized/sage/algebras/quatalg/quaternion_algebra_cython.cpp:6484)()
----> 1 # distutils: language = c++
      2 # distutils: libraries = gmp m NTL_LIBRARIES
      3 # distutils: extra_compile_args = NTL_CFLAGS

File ~/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/matrix/matrix_integer_dense.pyx:1, in init sage.matrix.matrix_integer_dense (build/cythonized/sage/matrix/matrix_integer_dense.cpp:59322)()
----> 1 # -*- coding: utf-8 -*-
      2 # distutils: extra_compile_args = NTL_CFLAGS M4RI_CFLAGS
      3 # distutils: libraries = iml NTL_LIBRARIES gmp m CBLAS_LIBRARIES

ImportError: dlopen(/Users/matthias/anaconda3/envs/sage-py310/lib/python3.10/site-packages/sage/libs/linbox/linbox_flint_interface.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '__ZN6FFPACK8CharPolyIN6Givaro8Poly1DomINS1_7ModularIddvEENS1_5DenseEEEEERNT_7ElementERKS7_S9_mNS7_8Domain_t11Element_ptrEmRNSC_8RandIterENS_19FFPACK_CHARPOLY_TAGEm'
Sage_crash_report.txt

Matthias Goerner

unread,
May 24, 2023, 6:23:43 PM5/24/23
to sage-s...@googlegroups.com
9.7 with python 3.10 seems to work on Ventura 13.3 on a M2.

Matthias Koeppe

unread,
May 26, 2023, 11:05:04 AM5/26/23
to sage-support
config.log please

Matthias Goerner

unread,
May 31, 2023, 2:01:20 PM5/31/23
to sage-support
Sorry for the late reply. Here are the details about my conda environment. I am not exactly sure what other information is useful to debug this. I am familiar with the linux tools, but am struggling with otool and vmmap to figure out what is going on here and see whether I am picking up any library from something that is not in the dedicated conda environment.
condarc
conda_list.txt
conda_list_explicit.txt

Matthias Goerner

unread,
May 31, 2023, 3:01:37 PM5/31/23
to sage-support
I am focusing on the Sage 9.8 issue of the missing symbol __ZN6FFPACK8CharPolyIN6Givaro8Poly1DomINS1_7ModularIddvEENS1_5DenseEEEEERNT_7ElementERKS7_S9_mNS7_8Domain_t11Element_ptrEmRNSC_8RandIterENS_19FFPACK_CHARPOLY_TAGEm

Demangled with c++filt, the missing symbol is:
Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element& FFPACK::CharPoly<Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> >(Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> const&, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element&, unsigned long, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Domain_t::Element_ptr, unsigned long, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Domain_t::RandIter&, FFPACK::FFPACK_CHARPOLY_TAG, unsigned long)

I expect this to be in ffpack, so I made sure that ffpack is indeed picked up from the dedicated conda environment:

lsof -p 70202 | grep -i ffpack
python3.1 70202 matthias  txt      REG               1,15  1132624 5917685 /Users/matthias/anaconda3/envs/sage98-py311/lib/libffpack.1.dylib

I then looked whether similar symbols are available in ffpack with the following command:
nm /Users/matthias/anaconda3/envs/sage98-py311/lib/libffpack.1.dylib | grep __ZN6FFPACK8CharPolyIN6Givaro8Poly1DomINS1_7ModularIddvEENS1_5DenseEEEEERNT_7ElementERKS7_S9_mNS7_8Domain_t11Element_ptrEm

Which gave:
000000000004f17c T __ZN6FFPACK8CharPolyIN6Givaro8Poly1DomINS1_7ModularIddvEENS1_5DenseEEEEERNT_7ElementERKS7_S9_mNS7_8Domain_t11Element_ptrEmNS_19FFPACK_CHARPOLY_TAGEm
000000000004ec10 T __ZN6FFPACK8CharPolyIN6Givaro8Poly1DomINS1_7ModularIddvEENS1_5DenseEEEEERNT_7ElementERKS7_S9_mNS7_8Domain_t11Element_ptrEmRNS7_8Domain_t8RandIterENS_19FFPACK_CHARPOLY_TAGEm

which demangled gives:
Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element& FFPACK::CharPoly<Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> >(Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> const&, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element&, unsigned long, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Domain_t::Element_ptr, unsigned long, FFPACK::FFPACK_CHARPOLY_TAG, unsigned long)
Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element& FFPACK::CharPoly<Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> >(Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense> const&, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Element&, unsigned long, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Domain_t::Element_ptr, unsigned long, Givaro::Poly1Dom<Givaro::Modular<double, double, void>, Givaro::Dense>::Domain_t::RandIter&, FFPACK::FFPACK_CHARPOLY_TAG, unsigned long)

And then I got confused: the latter demangled method has the same signature as the missing one.

In other words: from a C++ perspective, the missing method is there, it is just that the way the name and signature get mangled is different between linbox_flint_interface.cpython-311-darwin.so and libffpack.1.dylib

So it seems it is an ABI problem where we get two different managled names for the same function signature.

I am not sure what to make out of this and have only two explanations:
1. It is a bug in the C++ compiler.
2. The two libraries were compiled with different C++ compilers or with different compiler options.

config.log please

      6 #       Copyright (C) 2005 William Stein [...]

Isuru Fernando

unread,
May 31, 2023, 3:04:53 PM5/31/23
to sage-s...@googlegroups.com
This is an ABI incompatibility with clang 14 and 15 where givaro was compiled with 14 and sage was compiled with 15.
I suggest downgrading to clang 14 or set flags like https://github.com/conda-forge/sagelib-feedstock/blob/5542b278f642b772ae243b323c7cbc7a170a5f9a/recipe/build.sh#L21-L25
until we rebuild givaro with clang 15.

Isuru

--
You received this message because you are subscribed to the Google Groups "sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sage-support...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/c028a399-8ecc-4370-9130-88b303487e50n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages