Hi Matthew,

On 2025-03-14 13:09, Matthew Knepley wrote:
On Fri, Mar 14, 2025 at 12:53 PM Eric Chamberland <eric.chamberl...@giref.ulaval.ca> wrote:

    Thanks Matthew!

    I hope you're doing well.


Hi! I know there is still a Plex bug submitted, but this is the busiest time of the year. I will fix it soon.
No rush, we are working on 2D examples for now, take your time!

    I have a question regarding a change I did on our code: I modified
    the code to call |PetscPythonInitialize(PETSC_NULLPTR,
    PETSC_NULLPTR)| after |SlepcInitialize|.

    Our CI ran successfully across 20 different environments
    (including Valgrind), but we encountered a segmentation fault on
    Ubuntu 24.04 when calling |PetscPythonInitialize| within our
    Python module (built using Pybind11 bindings).

    On Ubuntu, calling |PetscPythonInitialize| from within our Python
    3 module results in a segfault with the following backtrace:

This is weird. When I have seen things like this before, it is because someone is not dynamically linking properly, so that
static variables are duplicated, and they get out of sync.

This is why I always use  -python to have PETSc do that initialization automatically, and it guaranteed to be linked to the same
libpython that the SNESPYTHON is using.

Ok, my colleague René and I have built a reproducer, see https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/issues/1717__;!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQMXT6pFI$ .

Thanks,

Eric


  Thanks,

     Matt

    Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
    0x00001555339b372ain PyList_New() from
    /lib/x86_64-linux-gnu/libpython3.12.so.1.0
    (gdb) bt
    #0 0x00001555339b372ain PyList_New() from
    /lib/x86_64-linux-gnu/libpython3.12.so.1.0
    #1 0x0000155533ad89d7in PyImport_Import() from
    /lib/x86_64-linux-gnu/libpython3.12.so.1.0
    #2 0x0000155533ad8c80in PyImport_ImportModule() from
    /lib/x86_64-linux-gnu/libpython3.12.so.1.0
    #3 0x000015553f437c0cin PetscPythonInitialize(pyexe=0x0,
    pylib=0x0) at
    
/tmp/build_openmpi-4.1.6-opt/petsc-3.21.6-debug/src/sys/python/pythonsys.c:242

    I am puzzled by this segfault...

    Some relevant details:

    grep -r PETSC_PYTHON_EXE
    /opt/petsc-3.21.6_debug_openmpi-4.1.6/include/
    /opt/petsc-3.21.6_debug_openmpi-4.1.6/include/petscconf.h:#define
    PETSC_PYTHON_EXE"/usr/bin/python3"

    ls -la /lib/x86_64-linux-gnu/libpython3.12*
    lrwxrwxrwx 1 root root       58 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12.a ->
    ../python3.12/config-3.12-x86_64-linux-gnu/libpython3.12.a
    lrwxrwxrwx 1 root root       60 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12d.a ->
    ../python3.12/config-3.12d-x86_64-linux-gnu/libpython3.12d.a
    lrwxrwxrwx 1 root root       19 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12d.so 
<https://urldefense.us/v3/__http://libpython3.12d.so__;!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQHADXm5h$
 >
    -> libpython3.12d.so.1
    lrwxrwxrwx 1 root root       21 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12d.so.1 -> libpython3.12d.so.1.0
    -rw-r--r-- 1 root root 34018416 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12d.so.1.0
    lrwxrwxrwx 1 root root       18 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12.so 
<https://urldefense.us/v3/__http://libpython3.12.so__;!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQI5lkBGY$
 >
    -> libpython3.12.so.1
    lrwxrwxrwx 1 root root       20 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12.so.1 -> libpython3.12.so.1.0
    -rw-r--r-- 1 root root  9055112 Feb  4 09:48
    /lib/x86_64-linux-gnu/libpython3.12.so.1.0

    (I installed the debug ("d") versions to get debug symbols, but
    the segfault occurs even without them.)

    Interestingly, on the same Ubuntu setup, calling
    |PetscPythonInitialize| within our /pure C++/ code works fine, and
    the |"pc_type python"| example runs successfully.

    This issue only occurs when calling |PetscPythonInitialize| from
    our /Python module/.

    Any ideas?

    Could this be something that has already been fixed in PETSc 3.22.x?

    Thanks,

    Eric


    On 2025-03-12 16:48, Matthew Knepley wrote:
    On Wed, Mar 12, 2025 at 4:34 PM Eric Chamberland via petsc-users
    <petsc-users@mcs.anl.gov> wrote:

        Hi,

        just a naive question: looking at KSPPYTHON and PCPYTHON, we
        saw that
        there is only 1 example available.

        We are asking ourself: is it still supported and can we start
        developping ou PCs and KSPs on top of it?

        Or is there a "new" replacement for these?


    I think the reason that there are so few examples is that many
    examples exist in other packages, such as Firedrake, and they are
    the main consumers. KSPPYTHON is a way to write KSPSHELL using
    Python rather than C, and we mostly write C.

    I will say that recently we fixed everything so that PETSc errors
    and Python exceptions are passed correctly up the stack, and
    debugging these things should be easy. I have been debugging the
    PyVista visualization, and I can change the Python in one window
    and run in the other. It is easy.

      Thanks,

         Matt

        Thanks,

        Eric

-- Eric Chamberland, ing., M. Ing
        Professionnel de recherche
        GIREF/Université Laval
        (418) 656-2131 poste 41 22 42



-- What most experimenters take for granted before they begin their
    experiments is infinitely more interesting than any results to
    which their experiments lead.
    -- Norbert Wiener

https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQF9A_dJh$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQC9gNDOK$ >

-- Eric Chamberland, ing., M. Ing
    Professionnel de recherche
    GIREF/Université Laval
    (418) 656-2131 poste 41 22 42



--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQF9A_dJh$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y9u6eJnvOw3IsoL2l2NE4TRAuerg63WS_QF4KnevrJSvCcetF4dyqWweHkPeGbZJ27D_p1cH1cvdr5RhjeMhZ82J5axUqPoNQC9gNDOK$ >

--
Eric Chamberland, ing., M. Ing
Professionnel de recherche
GIREF/Université Laval
(418) 656-2131 poste 41 22 42

Reply via email to