jorgensd / dolfinx_mpc

Extension for dolfinx to handle multi-point constraints.
https://jorgensd.github.io/dolfinx_mpc/
MIT License
32 stars 12 forks source link

TypeError when running periodic demos with dolfinx/dolfinx_mpc v0.8.0 #131

Open bnherrerac opened 1 month ago

bnherrerac commented 1 month ago

Hello, I am unable to run the periodic demos using dolfinx 0.8.0 and dolfinx_mpc 0.8.0, with Python 3.12.6. The demos I can't run are the following:

In both cases I get a similar error, here's the error for demo_periodic_geometrical.py:

  File "/home/bnherrerac/p2/demos/demo_periodic_geometrical.py", line 81, in <module>
    mpc.create_periodic_constraint_geometrical(V, periodic_boundary, periodic_relation, bcs)
  File "/home/bnherrerac/anaconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx_mpc/multipointconstraint.py", line 286, in create_periodic_constraint_geometrical
    mpc_data = dolfinx_mpc.cpp.mpc.create_periodic_constraint_geometrical(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: create_periodic_constraint_geometrical(): incompatible function arguments. The following argument types are supported:
    1. create_periodic_constraint_geometrical(V: dolfinx::fem::FunctionSpace<float>, indicator: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], ndarray[dtype=bool, shape=(*), order='C']], relation: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float32, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<float, float>], scale: float, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_float
    2. create_periodic_constraint_geometrical(V: dolfinx::fem::FunctionSpace<float>, indicator: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], ndarray[dtype=bool, shape=(*), order='C']], relation: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float32, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<std::complex<float>, float>], scale: complex, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_float
    3. create_periodic_constraint_geometrical(V: dolfinx::fem::FunctionSpace<double>, indicator: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], ndarray[dtype=bool, shape=(*), order='C']], relation: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float64, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<double, double>], scale: float, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_double
    4. create_periodic_constraint_geometrical(V: dolfinx::fem::FunctionSpace<double>, indicator: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], ndarray[dtype=bool, shape=(*), order='C']], relation: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float64, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<std::complex<double>, double>], scale: complex, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_double

Invoked with types: dolfinx.cpp.fem.FunctionSpace_float64, function, function, list, float, bool 

And the error for demo_periodic3d_topological.py:

Traceback (most recent call last):
  File "/home/bnherrerac/p2/demos/demo_periodic3d_topological.py", line 187, in <module>
    demo_periodic3D(celltype)
  File "/home/bnherrerac/p2/demos/demo_periodic3d_topological.py", line 97, in demo_periodic3D
    mpc.create_periodic_constraint_topological(V.sub(0), mt, 2, periodic_relation, bcs, default_scalar_type(1))
  File "/home/bnherrerac/anaconda3/envs/fenicsx-env/lib/python3.12/site-packages/dolfinx_mpc/multipointconstraint.py", line 254, in create_periodic_constraint_topological
    mpc_data = dolfinx_mpc.cpp.mpc.create_periodic_constraint_topological(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: create_periodic_constraint_topological(): incompatible function arguments. The following argument types are supported:
    1. create_periodic_constraint_topological(V: dolfinx::fem::FunctionSpace<float>, meshtags: dolfinx::mesh::MeshTags<int>, dim: int, relation: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float32, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<float, float>], scale: float, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_float
    2. create_periodic_constraint_topological(V: dolfinx::fem::FunctionSpace<float>, meshtags: dolfinx::mesh::MeshTags<int>, dim: int, relation: Callable[[numpy.ndarray[dtype=float32, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float32, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<std::complex<float>, float>], scale: complex, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_float
    3. create_periodic_constraint_topological(V: dolfinx::fem::FunctionSpace<double>, meshtags: dolfinx::mesh::MeshTags<int>, dim: int, relation: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float64, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<double, double>], scale: float, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_double
    4. create_periodic_constraint_topological(V: dolfinx::fem::FunctionSpace<double>, meshtags: dolfinx::mesh::MeshTags<int>, dim: int, relation: Callable[[numpy.ndarray[dtype=float64, writable=False, shape=(*, *), ]], numpy.ndarray[dtype=float64, shape=(*, *), ]], bcs: list[dolfinx::fem::DirichletBC<std::complex<double>, double>], scale: complex, collapse: bool) -> dolfinx_mpc.cpp.mpc.mpc_data_complex_double

Invoked with types: dolfinx.cpp.fem.FunctionSpace_float64, dolfinx.cpp.mesh.MeshTags_int32, int, function, list, float, bool

I installed dolfinx and dolfinx_mpc via conda install, and made sure that both versions are 0.8.0. I am trying to run a similar code, where I impose periodic boundary conditions in opposite faces of an unit cell, but I get stuck when calling create_periodic_constraint_geometrical, as in the demo. If you have any idea how I could get around this, it would be very helpful. Thanks in advance!

jorgensd commented 1 month ago

Could you try with 0.8.1: https://github.com/jorgensd/dolfinx_mpc/tree/v0.8.1 and also give me the conda commands you ran to create your environment ?

bnherrerac commented 1 month ago

Tried with 0.8.1 keeping dolfinx 0.8.0, the same error happened. I rerun these conda commands to create the env and install all the dependencies:

conda create -n fenicsx-env
conda activate fenicsx-env
conda install -c conda-forge fenics-dolfinx mpich pyvista
conda install conda-forge::dolfinx_mpc
conda install conda-forge::pytest
conda install scipy

which leaves me with dolfinx 0.8.0 and dolfinx-mpc 0.8.1. Here is a MWE that reproduces the error after this installation:

import numpy as np
from mpi4py import MPI
from dolfinx import fem, mesh
from dolfinx.common import Timer
from dolfinx_mpc import MultiPointConstraint

dolfinx_mesh = mesh.create_unit_cube(MPI.COMM_WORLD, 10, 10, 10)
V = fem.functionspace(dolfinx_mesh, ("Lagrange", 1, (dolfinx_mesh.geometry.dim, )))

def x_periodic_boundary(x):
    return np.isclose(x[0], 1.0, atol=1e-8)

def x_periodic_relation(x):
    out_x = np.zeros_like(x)
    out_x[0] = 1 - x[0]
    out_x[1] = x[1]
    out_x[2] = x[2]
    return out_x

with Timer("~PERIODIC: Initialize MPC"):
    mpc = MultiPointConstraint(V)
    mpc.create_periodic_constraint_geometrical(V, x_periodic_boundary, x_periodic_relation, bcs=[])
    mpc.finalize()

Thank you for your help!

jorgensd commented 1 month ago

I can reproduce this. I think this is an issue with an incompatibility with nanobind versions. I will ask @minrk for guidance as he is a wizard at this!

minrk commented 1 month ago

This is almost certainly an incompatibility in nanobind (likely a compiler version mismatch) that should be pinned but apparently isn't. Can you share the output of conda env export?

minrk commented 1 month ago

Yup, it's the same nanobind abi pinning issue that I believe I've fixed in dolfinx itself, but didn't realize it extended to mpc as well. The quickest workaround is to add gxx=12 to your list of packages, and it should pick the right compatible version of everything.

When this PR is merged, the latest builds of everything should work together again.

bnherrerac commented 1 month ago

Thank you both for looking into this. The command conda install gxx=12 worked well as a workaround. I am having a similar issue in scifem too, the exact same as here.

This is the output of conda env export:

```name: fenicsx-env channels: - conda-forge - defaults dependencies: - _libgcc_mutex=0.1=conda_forge - _openmp_mutex=4.5=2_gnu - aiohappyeyeballs=2.4.2=pyhd8ed1ab_0 - aiohttp=3.10.6=py312h66e93f0_0 - aiosignal=1.3.1=pyhd8ed1ab_0 - alsa-lib=1.2.12=h4ab18f5_0 - aom=3.9.1=hac33072_0 - attrs=24.2.0=pyh71513ae_0 - binutils_impl_linux-64=2.43=h4bf12b8_1 - binutils_linux-64=2.43=h4852527_1 - blosc=1.21.6=hef167b5_0 - brotli=1.1.0=hb9d3cd8_2 - brotli-bin=1.1.0=hb9d3cd8_2 - brotli-python=1.1.0=py312h2ec8cdc_2 - bzip2=1.0.8=h4bc722e_7 - c-ares=1.33.1=heb4867d_0 - c-blosc2=2.15.1=hc57e6cf_0 - ca-certificates=2024.8.30=hbcca054_0 - cairo=1.18.0=hebfffa5_3 - certifi=2024.8.30=pyhd8ed1ab_0 - cffi=1.17.1=py312h06ac9bb_0 - charset-normalizer=3.3.2=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_0 - contourpy=1.3.0=py312h68727a3_2 - cycler=0.12.1=pyhd8ed1ab_0 - dav1d=1.2.1=hd590300_0 - dbus=1.13.6=h5008d03_3 - distro=1.9.0=pyhd8ed1ab_0 - dolfinx_mpc=0.8.1=py312h369e91a_0 - double-conversion=3.3.0=h59595ed_0 - eigen=3.4.0=h00ab1b0_0 - exceptiongroup=1.2.2=pyhd8ed1ab_0 - expat=2.6.3=h5888daf_0 - fenics-basix=0.8.0=py312h2492b07_1 - fenics-dolfinx=0.8.0=py312h66e9945_105 - fenics-ffcx=0.8.0=pyh4af843d_0 - fenics-libbasix=0.8.0=h9187eef_1 - fenics-libdolfinx=0.8.0=h17dcdb5_105 - fenics-ufcx=0.8.0=h22f594c_0 - fenics-ufl=2024.1.0=pyhd8ed1ab_0 - ffmpeg=6.1.2=gpl_h8657690_705 - fftw=3.3.10=mpi_mpich_hbcf76dd_10 - fltk=1.3.9=h9305793_1 - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - font-ttf-inconsolata=3.000=h77eed37_0 - font-ttf-source-code-pro=2.038=h77eed37_0 - font-ttf-ubuntu=0.83=h77eed37_3 - fontconfig=2.14.2=h14ed4e7_0 - fonts-conda-ecosystem=1=0 - fonts-conda-forge=1=0 - fonttools=4.54.1=py312h66e93f0_0 - freeimage=3.18.0=h4bd6248_21 - freetype=2.12.1=h267a509_2 - fribidi=1.0.10=h36c2ea0_0 - frozenlist=1.4.1=py312h66e93f0_1 - gcc=12.4.0=h236703b_1 - gcc_impl_linux-64=12.4.0=hb2e57f8_1 - gcc_linux-64=12.4.0=h6b7512a_4 - gl2ps=1.4.2=hae5d5c5_1 - glew=2.1.0=h9c3ff4c_2 - gmp=6.3.0=hac33072_2 - gmsh=4.12.2=h6b98cf8_0 - graphite2=1.3.13=h59595ed_1003 - gxx=12.4.0=h236703b_1 - gxx_impl_linux-64=12.4.0=h613a52c_1 - gxx_linux-64=12.4.0=h8489865_4 - h2=4.1.0=pyhd8ed1ab_0 - harfbuzz=9.0.0=hda332d3_1 - hdf4=4.2.15=h2a13503_7 - hdf5=1.14.3=mpi_mpich_h0f54ddc_5 - hpack=4.0.0=pyh9f0ad1d_0 - hyperframe=6.0.1=pyhd8ed1ab_0 - hypre=2.31.0=mpi_mpich_hd1da18f_1 - icu=75.1=he02047a_0 - idna=3.10=pyhd8ed1ab_0 - imath=3.1.12=h7955e40_0 - importlib-metadata=8.5.0=pyha770c72_0 - importlib-resources=6.4.5=pyhd8ed1ab_0 - importlib_resources=6.4.5=pyhd8ed1ab_0 - iniconfig=2.0.0=pyhd8ed1ab_0 - jsoncpp=1.9.6=h84d6215_0 - jxrlib=1.1=hd590300_3 - kahip=3.16=h2fbc463_4 - kahip-python=3.16=py312ha7be871_4 - kernel-headers_linux-64=3.10.0=he073ed8_17 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.7=py312h68727a3_0 - krb5=1.21.3=h659f571_0 - lame=3.100=h166bdaf_1003 - lcms2=2.16=hb7c19ff_0 - ld_impl_linux-64=2.43=h712a8e2_1 - lerc=4.0.0=h27087fc_0 - libabseil=20240116.2=cxx17_he02047a_1 - libadios2=2.10.1=mpi_mpich_hb885cfe_3 - libaec=1.1.3=h59595ed_0 - libass=0.17.3=h1dc1e6a_0 - libblas=3.9.0=24_linux64_openblas - libboost=1.86.0=hb8260a3_2 - libboost-devel=1.86.0=h1a2810e_2 - libboost-headers=1.86.0=ha770c72_2 - libbrotlicommon=1.1.0=hb9d3cd8_2 - libbrotlidec=1.1.0=hb9d3cd8_2 - libbrotlienc=1.1.0=hb9d3cd8_2 - libcblas=3.9.0=24_linux64_openblas - libclang-cpp19.1=19.1.0=default_hb5137d0_0 - libclang13=19.1.0=default_h9c6a7e4_0 - libcups=2.3.3=h4637d8d_4 - libcurl=8.10.1=hbbe4b11_0 - libdeflate=1.21=h4bc722e_0 - libdolfinx_mpc=0.8.1=h641d226_0 - libdrm=2.4.123=hb9d3cd8_0 - libedit=3.1.20191231=he28a2e2_2 - libegl=1.7.0=ha4b6fd6_0 - libev=4.33=hd590300_2 - libexpat=2.6.3=h5888daf_0 - libffi=3.4.2=h7f98852_5 - libgcc=14.1.0=h77fa898_1 - libgcc-devel_linux-64=12.4.0=ha4f9413_101 - libgcc-ng=14.1.0=h69a702a_1 - libgfortran=14.1.0=h69a702a_1 - libgfortran-ng=14.1.0=h69a702a_1 - libgfortran5=14.1.0=hc5f4f2c_1 - libgl=1.7.0=ha4b6fd6_0 - libglib=2.82.1=h2ff4ddf_0 - libglu=9.0.0=ha6d2627_1004 - libglvnd=1.7.0=ha4b6fd6_0 - libglx=1.7.0=ha4b6fd6_0 - libgomp=14.1.0=h77fa898_1 - libhwloc=2.11.1=default_hecaa2ac_1000 - libiconv=1.17=hd590300_2 - libjpeg-turbo=3.0.0=hd590300_1 - liblapack=3.9.0=24_linux64_openblas - libllvm19=19.1.0=ha7bfdaf_0 - libnetcdf=4.9.2=nompi_h135f659_114 - libnghttp2=1.58.0=h47da74e_1 - libnsl=2.0.1=hd590300_0 - libogg=1.3.5=h4ab18f5_0 - libopenblas=0.3.27=pthreads_hac2b453_1 - libopenvino=2024.4.0=hac27bb2_0 - libopenvino-auto-batch-plugin=2024.4.0=h4d9b6c2_0 - libopenvino-auto-plugin=2024.4.0=h4d9b6c2_0 - libopenvino-hetero-plugin=2024.4.0=h3f63f65_0 - libopenvino-intel-cpu-plugin=2024.4.0=hac27bb2_0 - libopenvino-intel-gpu-plugin=2024.4.0=hac27bb2_0 - libopenvino-intel-npu-plugin=2024.4.0=hac27bb2_0 - libopenvino-ir-frontend=2024.4.0=h3f63f65_0 - libopenvino-onnx-frontend=2024.4.0=h56242b0_0 - libopenvino-paddle-frontend=2024.4.0=h56242b0_0 - libopenvino-pytorch-frontend=2024.4.0=h5888daf_0 - libopenvino-tensorflow-frontend=2024.4.0=h358ae18_0 - libopenvino-tensorflow-lite-frontend=2024.4.0=h5888daf_0 - libopus=1.3.1=h7f98852_1 - libpciaccess=0.18=hd590300_0 - libpng=1.6.44=hadc24fc_0 - libpq=16.4=h2d7952a_1 - libprotobuf=4.25.3=hd5b35b9_1 - libptscotch=7.0.4=h2376d02_5 - libraw=0.21.3=hca62329_0 - libsanitizer=12.4.0=h46f95d5_1 - libscotch=7.0.4=h3055ed5_5 - libsodium=1.0.20=h4ab18f5_0 - libsqlite=3.46.1=hadc24fc_0 - libssh2=1.11.0=h0841786_0 - libstdcxx=14.1.0=hc0a3c3a_1 - libstdcxx-devel_linux-64=12.4.0=ha4f9413_101 - libstdcxx-ng=14.1.0=h4852527_1 - libtheora=1.1.1=h4ab18f5_1006 - libtiff=4.7.0=h6565414_0 - libuuid=2.38.1=h0b41bf4_0 - libva=2.22.0=h8a09558_1 - libvorbis=1.3.7=h9c3ff4c_0 - libvpx=1.14.1=hac33072_0 - libwebp-base=1.4.0=hd590300_0 - libxcb=1.17.0=h8a09558_0 - libxcrypt=4.4.36=hd590300_1 - libxkbcommon=1.7.0=h2c5496b_1 - libxml2=2.12.7=he7c6b58_4 - libzip=1.11.1=hf83b1b0_0 - libzlib=1.3.1=h4ab18f5_1 - loguru=0.7.2=py312h7900ff3_2 - lz4-c=1.9.4=hcb278e6_0 - matplotlib-base=3.9.2=py312hd3ec401_1 - metis=5.1.0=h59595ed_1007 - mpfr=4.2.1=h90cbb55_3 - mpi=1.0=mpich - mpi4py=4.0.0=py312h0068001_3 - mpich=4.2.2=h670b19f_101 - msgpack-python=1.1.0=py312h68727a3_0 - multidict=6.1.0=py312h66e93f0_0 - mumps-include=5.7.3=ha770c72_0 - mumps-mpi=5.7.3=hd6ed86c_0 - munkres=1.1.4=pyh9f0ad1d_0 - mysql-common=9.0.1=h266115a_1 - mysql-libs=9.0.1=he0572af_1 - ncurses=6.5=he02047a_1 - nlohmann_json=3.11.3=he02047a_1 - numpy=2.1.1=py312h58c1407_0 - occt=7.7.2=novtk_h130ccc2_101 - ocl-icd=2.3.2=hd590300_1 - openexr=3.2.2=h04e0de5_2 - openh264=2.4.1=h59595ed_0 - openjpeg=2.5.2=h488ebb8_0 - openssl=3.3.2=hb9d3cd8_0 - packaging=24.1=pyhd8ed1ab_0 - parmetis=4.0.3=h583469f_1006 - pathspec=0.12.1=pyhd8ed1ab_0 - pcre2=10.44=hba22ea6_2 - petsc=3.21.5=real_hbe534a9_101 - petsc4py=3.21.5=py312h23142ab_1 - pillow=10.4.0=py312h56024de_1 - pip=24.2=pyh8b19718_1 - pixman=0.43.2=h59595ed_0 - pkg-config=0.29.2=h4bc722e_1009 - platformdirs=4.3.6=pyhd8ed1ab_0 - pluggy=1.5.0=pyhd8ed1ab_0 - pooch=1.8.2=pyhd8ed1ab_0 - proj=9.5.0=h12925eb_0 - pthread-stubs=0.4=hb9d3cd8_1002 - pugixml=1.14=h59595ed_0 - pycparser=2.22=pyhd8ed1ab_0 - pyparsing=3.1.4=pyhd8ed1ab_0 - pysocks=1.7.1=pyha2e5f31_6 - pytest=8.3.3=pyhd8ed1ab_0 - python=3.12.6=hc5c86c4_1_cpython - python-dateutil=2.9.0=pyhd8ed1ab_0 - python-gmsh=4.12.2=h57928b3_0 - python_abi=3.12=5_cp312 - pyvista=0.44.1=pyhd8ed1ab_0 - qhull=2020.2=h434a139_5 - qt6-main=6.7.3=h20baabe_0 - rapidjson=1.1.0.post20240409=hac33072_1 - readline=8.2=h8228510_1 - requests=2.32.3=pyhd8ed1ab_0 - scalapack=2.2.0=h417d24c_2 - scikit-build=0.18.1=pyh4afc917_0 - scikit-build-core=0.10.7=pyh4afc917_0 - scipy=1.14.1=py312h7d485d2_0 - scooby=0.10.0=pyhd8ed1ab_0 - setuptools=75.1.0=pyhd8ed1ab_0 - six=1.16.0=pyh6c4a22f_0 - slepc=3.21.1=real_h97ad6bc_302 - slepc4py=3.21.1=py312hf817a4c_104 - snappy=1.2.1=ha2e4443_0 - sqlite=3.46.1=h9eae976_0 - suitesparse=7.8.2=hb42a789_0 - superlu=5.2.2=h00795ac_0 - superlu_dist=9.0.0=h3feb4ed_1 - svt-av1=2.2.1=h5888daf_0 - sysroot_linux-64=2.17=h4a8ded7_17 - tbb=2021.13.0=h84d6215_0 - tbb-devel=2021.13.0=h94b29a5_0 - tk=8.6.13=noxft_h4845f30_101 - tomli=2.0.1=pyhd8ed1ab_0 - typing-extensions=4.12.2=hd8ed1ab_0 - typing_extensions=4.12.2=pyha770c72_0 - tzdata=2024a=h8827d51_1 - urllib3=2.2.3=pyhd8ed1ab_0 - utfcpp=4.0.5=ha770c72_0 - vtk=9.3.1=qt_py312he5e186c_208 - vtk-base=9.3.1=qt_py312h2768b8c_208 - vtk-io-ffmpeg=9.3.1=qt_py312hc8241c7_208 - wayland=1.23.1=h3e06ad9_0 - wayland-protocols=1.37=hd8ed1ab_0 - wheel=0.44.0=pyhd8ed1ab_0 - wslink=2.2.1=pyhd8ed1ab_0 - x264=1!164.3095=h166bdaf_2 - x265=3.5=h924138e_3 - xcb-util=0.4.1=hb711507_2 - xcb-util-cursor=0.1.5=hb9d3cd8_0 - xcb-util-image=0.4.0=hb711507_2 - xcb-util-keysyms=0.4.1=hb711507_0 - xcb-util-renderutil=0.3.10=hb711507_0 - xcb-util-wm=0.4.2=hb711507_0 - xkeyboard-config=2.42=h4ab18f5_0 - xorg-inputproto=2.3.2=hb9d3cd8_1003 - xorg-kbproto=1.0.7=hb9d3cd8_1003 - xorg-libice=1.1.1=hb9d3cd8_1 - xorg-libsm=1.2.4=h7391055_0 - xorg-libx11=1.8.10=h4f16b4b_0 - xorg-libxau=1.0.11=hb9d3cd8_1 - xorg-libxdmcp=1.1.3=hb9d3cd8_1 - xorg-libxext=1.3.4=hb9d3cd8_3 - xorg-libxfixes=5.0.3=hb9d3cd8_1005 - xorg-libxi=1.7.10=h4bc722e_1 - xorg-libxmu=1.1.3=h4ab18f5_1 - xorg-libxrender=0.9.11=hb9d3cd8_1 - xorg-libxt=1.3.0=hd590300_1 - xorg-libxtst=1.2.5=h4bc722e_0 - xorg-libxxf86vm=1.1.5=hb9d3cd8_2 - xorg-recordproto=1.14.2=hb9d3cd8_1003 - xorg-xextproto=7.3.0=hb9d3cd8_1004 - xorg-xorgproto=2024.1=hb9d3cd8_1 - xorg-xproto=7.0.31=hb9d3cd8_1008 - xz=5.2.6=h166bdaf_0 - yaml=0.2.5=h7f98852_2 - yarl=1.13.1=py312h66e93f0_0 - zeromq=4.3.5=ha4adb4c_5 - zfp=0.5.5=h9c3ff4c_8 - zipp=3.20.2=pyhd8ed1ab_0 - zlib=1.3.1=h4ab18f5_1 - zlib-ng=2.2.2=h5888daf_0 - zstandard=0.23.0=py312hef9b889_1 - zstd=1.5.6=ha6fb4c9_0 - pip: - nanobind==2.1.0 - scifem==0.2.5 prefix: /home/bnherrerac/anaconda3/envs/fenicsx-env```