~ruther/guix-local

c63083b2a14bbeb973c20c2a00d1cc58b19ad5f3 — Nicolas Graves 4 months ago 99e0ae2
gnu: fenics: Switch to pyproject.

* gnu/packages/simulation.scm (fenics):
[build-system]: Switch to pyproject-build-system.
[arguments]: Relocate field, improve style.
<#:test-flags>: Use them, and skip flaky tests.
[native-inputs]: Add python-setuptools.

Change-Id: I85825ec6aa2a68db74cb7b5864103bbf34c33031
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
1 files changed, 61 insertions(+), 60 deletions(-)

M gnu/packages/simulation.scm
M gnu/packages/simulation.scm => gnu/packages/simulation.scm +61 -60
@@ 902,22 902,21 @@ user interface to the FEniCS core components and external libraries.")
(define-public fenics
  (package/inherit fenics-dolfin
    (name "fenics")
    (build-system python-build-system)
    (inputs
     (modify-inputs (package-inputs fenics-dolfin)
       (delete "python")
       (prepend pybind11 python-matplotlib)))
    (native-inputs
     (modify-inputs (package-native-inputs fenics-dolfin)
       (prepend cmake-minimal python-ply python-pytest python-decorator)))
    (propagated-inputs
     (list fenics-dolfin
           python-petsc4py
           python-slepc4py
           ;; 'dolfin/jit/jit.py' parses 'dolfin.pc' at runtime.
           python-pkgconfig))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      #~(list
         "unit"
         ;; This test fails and is ignored.
         "--deselect"
         "unit/nls/test_PETScSNES_solver.py::test_snes_set_from_options"
         ;; These tests are flaky.
         "--deselect=unit/common/test_timer.py::test_context_manager_named"
         "--deselect=unit/common/test_timer.py::test_context_manager_anonymous"
         ;; FIXME: Tests with binary encoded hdf5 files fail with a
         ;; segfault.  See fenics-project DOLFIN commit 6fbc9fb.
         "--ignore=unit/io/test_XDMF.py")
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'relax-requirements


@@ 929,7 928,7 @@ user interface to the FEniCS core components and external libraries.")
              ;; Instead of cluttering the user's PKG_CONFIG_PATH environment
              ;; variable, hard-code the 'dolfin.pc' absolute file name.
              (let ((pc-file (search-input-file inputs
                              "/lib/pkgconfig/dolfin.pc")))
                                                "/lib/pkgconfig/dolfin.pc")))
                (substitute* "python/dolfin/jit/jit.py"
                  (("pkgconfig\\.parse\\(\"dolfin\"\\)")
                   (string-append "pkgconfig.parse(\"" pc-file "\")"))))))


@@ 939,8 938,7 @@ user interface to the FEniCS core components and external libraries.")
              (setenv "PYBIND11_DIR" #$(this-package-input "pybind11"))
              ;; Move to python sub-directory.
              (chdir "python")))
          (add-after 'build 'mpi-setup
            #$%openmpi-setup)
          (add-after 'build 'mpi-setup #$%openmpi-setup)
          (add-before 'check 'pre-check
            (lambda _
              ;; Exclude three tests that generate 'NotImplementedError' in


@@ 949,34 947,32 @@ user interface to the FEniCS core components and external libraries.")
              ;; Also exclude tests that require meshes supplied by git-lfs.
              (substitute* "demo/test.py"
                (("(.*stem !.*)" line)
                 (string-append line
                  "\n"
                  "excludeList = [\n"
                  "'built-in-meshes', \n"
                  "'hyperelasticity', \n"
                  "'elasticity', \n"
                  "'multimesh-quadrature', \n"
                  "'multimesh-marking', \n"
                  "'mixed-poisson-sphere', \n"
                  "'mesh-quality', \n"
                  "'lift-drag', \n"
                  "'elastodynamics', \n"
                  "'dg-advection-diffusion', \n"
                  "'curl-curl', \n"
                  "'contact-vi-tao', \n"
                  "'contact-vi-snes', \n"
                  "'collision-detection', \n"
                  "'buckling-tao', \n"
                  "'auto-adaptive-navier-stokes', \n"
                  "'advection-diffusion', \n"
                  "'subdomains', \n"
                  "'stokes-taylor-hood', \n"
                  "'stokes-mini', \n"
                  "'navier-stokes', \n"
                  "'eigenvalue']\n"
                  "demos = ["
                  "d for d in demos if d[0].stem not "
                  "in excludeList]\n")))
                 (format #f "~a
excludeList = [~{ '~a',~% ~}]
demos = [d for d in demos if d[0].stem not in excludeList]~%"
                         line
                         (list "built-in-meshes"
                               "hyperelasticity"
                               "elasticity"
                               "multimesh-quadrature"
                               "multimesh-marking"
                               "mixed-poisson-sphere"
                               "mesh-quality"
                               "lift-drag"
                               "elastodynamics"
                               "dg-advection-diffusion"
                               "curl-curl"
                               "contact-vi-tao"
                               "contact-vi-snes"
                               "collision-detection"
                               "buckling-tao"
                               "auto-adaptive-navier-stokes"
                               "advection-diffusion"
                               "subdomains"
                               "stokes-taylor-hood"
                               "stokes-mini"
                               "navier-stokes"
                               "eigenvalue"))))
              ;; Do not test for expired numpy aliases.
              (substitute* "test/unit/la/test_vector.py"
                ((" numpy.float\\(42.0\\),") "")


@@ 988,32 984,37 @@ user interface to the FEniCS core components and external libraries.")
              ;; Restrict OpenBLAS to MPI-only in preference to MPI+OpenMP.
              (setenv "OPENBLAS_NUM_THREADS" "1")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
            (lambda* (#:key tests? test-flags #:allow-other-keys)
              (when tests?
                (with-directory-excursion "test"
                  (invoke "pytest"
                   "unit"
                   ;; This test fails and is ignored.
                   "--deselect"
                   "unit/nls/test_PETScSNES_solver.py::test_snes_set_from_options"
                   ;; FIXME: Tests with binary encoded hdf5 files fail with a
                   ;; segfault.  See fenics-project DOLFIN commit 6fbc9fb.
                   "--ignore"
                   "unit/io/test_XDMF.py")))))
                  (apply invoke "pytest" test-flags)))))
          (add-after 'install 'install-demo-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((demos (string-append (assoc-ref outputs "out")
                             "/share/python-dolfin/demo")))
            (lambda _
              (let* ((demos (string-append #$output
                                           "/share/python-dolfin/demo")))
                (mkdir-p demos)
                (with-directory-excursion "demo"
                  (for-each (lambda (file)
                              (let* ((dir (dirname file))
                                     (tgt-dir (string-append demos
                                               "/" dir)))
                                     (tgt-dir (string-append demos "/" dir)))
                                (unless (equal? "." dir)
                                  (mkdir-p tgt-dir)
                                  (install-file file tgt-dir))))
                            (find-files "." ".*\\.(py|gz|xdmf)$")))))))))
    (inputs
     (modify-inputs (package-inputs fenics-dolfin)
       (delete "python")
       (prepend pybind11 python-matplotlib)))
    (native-inputs
     (modify-inputs (package-native-inputs fenics-dolfin)
       (prepend cmake-minimal python-ply python-pytest python-decorator
                python-setuptools)))
    (propagated-inputs
     (list fenics-dolfin
           python-petsc4py
           python-slepc4py
           ;; 'dolfin/jit/jit.py' parses 'dolfin.pc' at runtime.
           python-pkgconfig))
    (home-page "https://fenicsproject.org/")
    (synopsis "High-level environment for solving differential equations")
    (description