projects/guix·blob python-team · refs

2075 lines · 115.0 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2025 Nigko Yerden <[email protected]>
3;;; Copyright © 2025 Vinicius Monego <[email protected]>
4;;; Copyright © 2025, 2026 Sharlatan Hellseher <[email protected]>
5;;; Copyright © 2026 Danny Milosavljevic <[email protected]>
6;;; Copyright © 2026 orahcio <[email protected]>
7;;;
8;;; This file is part of GNU Guix.
9;;;
10;;; GNU Guix is free software; you can redistribute it and/or modify it
11;;; under the terms of the GNU General Public License as published by
12;;; the Free Software Foundation; either version 3 of the License, or (at
13;;; your option) any later version.
14;;;
15;;; GNU Guix is distributed in the hope that it will be useful, but
16;;; WITHOUT ANY WARRANTY; without even the implied warranty of
17;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;;; GNU General Public License for more details.
19;;;
20;;; You should have received a copy of the GNU General Public License
21;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
22
23(define-module (gnu packages physics)
24 #:use-module ((guix licenses) #:prefix license:)
25 #:use-module (guix build-system cmake)
26 #:use-module (guix build-system copy)
27 #:use-module (guix build-system meson)
28 #:use-module (guix build-system pyproject)
29 #:use-module (guix build-system qt)
30 #:use-module (guix download)
31 #:use-module (guix gexp)
32 #:use-module (guix git-download)
33 #:use-module (guix packages)
34 #:use-module (guix utils)
35 #:use-module (gnu packages)
36 #:use-module (gnu packages algebra)
37 #:use-module (gnu packages boost)
38 #:use-module (gnu packages build-tools)
39 #:use-module (gnu packages check)
40 #:use-module (gnu packages cmake)
41 #:use-module (gnu packages compression)
42 #:use-module (gnu packages cpp)
43 #:use-module (gnu packages documentation)
44 #:use-module (gnu packages gcc)
45 #:use-module (gnu packages gl)
46 #:use-module (gnu packages graphviz)
47 #:use-module (gnu packages haskell-xyz)
48 #:use-module (gnu packages image)
49 #:use-module (gnu packages image-processing)
50 #:use-module (gnu packages jemalloc)
51 #:use-module (gnu packages jupyter)
52 #:use-module (gnu packages llvm)
53 #:use-module (gnu packages machine-learning)
54 #:use-module (gnu packages maths)
55 #:use-module (gnu packages mpi)
56 #:use-module (gnu packages networking)
57 #:use-module (gnu packages noweb)
58 #:use-module (gnu packages pkg-config)
59 #:use-module (gnu packages python)
60 #:use-module (gnu packages python-build)
61 #:use-module (gnu packages python-check)
62 #:use-module (gnu packages python-compression)
63 #:use-module (gnu packages python-crypto)
64 #:use-module (gnu packages python-graphics)
65 #:use-module (gnu packages python-science)
66 #:use-module (gnu packages sphinx)
67 #:use-module (gnu packages python-web)
68 #:use-module (gnu packages python-xyz)
69 #:use-module (gnu packages qt)
70 #:use-module (gnu packages serialization)
71 #:use-module (gnu packages tbb)
72 #:use-module (gnu packages time)
73 #:use-module (gnu packages tls)
74 #:use-module (gnu packages xml)
75 #:use-module (gnu packages xorg))
76
77(define-public alps
78 (package
79 (name "alps")
80 (version "2.3.3")
81 (source
82 (origin
83 (method git-fetch)
84 (uri (git-reference
85 (url "https://github.com/ALPSim/ALPS")
86 (commit (string-append "v" version))))
87 (file-name (git-file-name name version))
88 (sha256
89 (base32 "1dlmfl73dgw0ry7bcvdlr0p5fz0h62xn6c00vrpnjk60kj8cxsnr"))))
90 (build-system cmake-build-system)
91 (arguments
92 (list
93 #:parallel-tests? #f
94 #:configure-flags
95 #~(list "-DALPS_ENABLE_OPENMP=ON"
96 "-DALPS_BUILD_PYTHON=ON"
97 "-DALPS_BUILD_FORTRAN=ON")
98 #:phases
99 #~(modify-phases %standard-phases
100 ;; Below is a workaround borrowed from the hdf5 package
101 ;; for the problem with including <fenv.h> gfortran header
102 (add-after 'set-paths 'hide-gfortran
103 (lambda _
104 (let ((gfortran #$(this-package-input "gfortran")))
105 (setenv "CPLUS_INCLUDE_PATH"
106 (string-join
107 (delete (string-append gfortran "/include/c++")
108 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
109 ":")))))
110 (add-after 'unpack 'rewrite-find-boost-cmake
111 (lambda _
112 (let ((boost-components '("chrono" "timer" "date_time"
113 "filesystem" "iostreams"
114 "program_options" "regex"
115 "serialization" "thread"
116 "python" "mpi" "numpy")))
117 (call-with-output-file "config/FindBoostForALPS.cmake"
118 (lambda (port)
119 (display "find_package(Boost REQUIRED COMPONENTS" port)
120 (for-each (lambda (x)
121 (format port "\n~a" x)) boost-components)
122 (display ")\n" port)
123 (display "set(ALPS_HAVE_BOOST_NUMPY ON)\n" port))))))
124 (add-after 'rewrite-find-boost-cmake 'fix-cmake-cxx-flags
125 (lambda _
126 (substitute* "CMakeLists.txt"
127 (("^set\\(CMAKE_CXX_FLAGS .* -fpermissive.*\\)")
128 (string-append "set(CMAKE_CXX_FLAGS \""
129 "${CMAKE_CXX_FLAGS}"
130 " -fpermissive"
131 " -DBOOST_NO_AUTO_PTR"
132 " -DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF"
133 " -DBOOST_AC_USE_PTHREADS"
134 ;; For boost-1.89 the flag below leads
135 ;; to weird errors in tests:
136 ;; " -DBOOST_SP_USE_PTHREADS"
137 " -DBOOST_TIMER_ENABLE_DEPRECATED"
138 "\")")))))
139 (add-after 'fix-cmake-cxx-flags 'reconcile-with-boost-1.89
140 (lambda _
141 (substitute*
142 '("src/alps/numeric/matrix/matrix_element_iterator.hpp"
143 "src/alps/numeric/matrix/strided_iterator.hpp")
144 (("^#include <boost/iterator/iterator_facade.hpp>" include)
145 (string-append "#include <boost/type_traits/is_same.hpp>\n"
146 "#include <boost/type_traits/add_const.hpp>\n"
147 include)))))
148 (add-after 'reconcile-with-boost-1.89 'fix-fortran-comment
149 (lambda _
150 (substitute* "src/alps/fortran/alps_fortran.h"
151 (("^\\*") "!")))))))
152 (native-inputs
153 (list python-scipy ; only used in tests
154 python-numpy))
155 (inputs
156 (list expat
157 gfortran
158 hdf5
159 python
160 openblas))
161 (propagated-inputs
162 ;; User defined applications should use the boost and openmpi libs the
163 ;; alps package compiled with.
164 (list boost-mpi-numpy
165 openmpi))
166 (home-page "https://alps.comp-phys.org/")
167 (synopsis "Algorithms and Libraries for Physics Simulations")
168 (description
169 "The ALPS (Algorithms and Libraries for Physics Simulations) package
170provides a set of components for numerical simulations of condensed matter
171systems, including bosonic, fermionic, and spin systems with exact
172diagonalization, classical and quantum Monte Carlo, dynamical mean field
173theory, and density matrix renormalization group methods. It contains both
174ready to use applications and C++ library for simplifying the development of
175such components.")
176 (license license:expat)))
177
178(define-public cif-core
179 (package
180 (name "cif-core")
181 (version "3.0.13")
182 (source
183 (origin
184 (method git-fetch)
185 (uri (git-reference
186 (url "https://github.com/COMCIFS/cif_core")
187 (commit (string-append "v" version))))
188 (file-name (git-file-name name version))
189 (sha256
190 (base32 "0xkb3kdsqq8lsn6601m1ymqa42vr742ly2cb4izv44awfamqkzhz"))))
191 (build-system copy-build-system)
192 (arguments
193 (list
194 #:install-plan
195 #~'(("." "share/cif-core" #:include-regexp ("\\.dic$" "\\.cif$")))))
196 (home-page "https://github.com/COMCIFS/cif_core")
197 (synopsis "IUCr CIF core files")
198 (description
199 "This package provides the
200@url{http://www.iucr.org/resources/cif/comcifs, IUCr} (International Union of
201Crystallography) core CIF dictionary and supplementary dictionaries which
202COMCIFS manages. Dictionary definitions are described using DDLm attributes,
203which are themselves described in 'ddl.dic'.")
204 (license license:cc-by4.0)))
205
206(define-public cytnx
207 (package
208 (name "cytnx")
209 (version "1.1.1")
210 (source
211 (origin
212 (method git-fetch)
213 (uri (git-reference
214 (url "https://github.com/Cytnx-dev/Cytnx")
215 (commit (string-append "v" version))))
216 (file-name (git-file-name name version))
217 (sha256
218 (base32 "1vhlnq5kq4nj8prkrkb7x5xsz1dllpjf1v0lxr682ppisx4isk1j"))))
219 (build-system cmake-build-system)
220 (arguments
221 (list
222 #:configure-flags
223 #~(list "-DRUN_TESTS=ON"
224 "-DBUILD_PYTHON=ON")
225 #:phases
226 #~(modify-phases %standard-phases
227 (add-after 'unpack 'cmake-modules-dir
228 (lambda* (#:key inputs #:allow-other-keys)
229 (substitute* "CMakeLists.txt"
230 (("(set\\(_morse_modules_dir \")\\$.*modules\"\\)" all first)
231 (string-append first
232 (search-input-directory
233 inputs
234 "share/morse-cmake/modules") "\")")))))
235 ;; TODO: Enable Python tests.
236 (add-after 'install 'install-python-module
237 (lambda _
238 (let* ((py-version #$(version-major+minor
239 (package-version python)))
240 (src (string-append #$output "/cytnx"))
241 (dst (string-append #$output "/lib/python" py-version
242 "/site-packages/cytnx")))
243 (copy-recursively src dst)
244 (delete-file-recursively src)))))))
245 (native-inputs
246 (list googletest
247 morse-cmake
248 pybind11))
249 (inputs
250 (list arpack-ng
251 boost
252 openblas
253 python
254 libomp-13))
255 (propagated-inputs
256 (list python-beartype
257 python-graphviz
258 python-numpy))
259 (home-page "https://github.com/cytnx-dev/cytnx")
260 (synopsis "Quantum physics simulations using tensor network algorithms")
261 (description
262 "Cytnx is a tensor network library designed for quantum physics
263simulations using tensor network algorithms, offering the following features:
264
265@itemize
266@item Most of the APIs are identical in C++ and Python, enabling seamless
267transitions between the two for prototyping and production.
268
269@item Cytnx APIs share very similar interfaces with popular libraries such as
270NumPy, SciPy, and PyTorch, minimizing the learning curve for new users.
271
272@item Cytnx supports multi-device operations (CPUs/GPUs) directly at the base
273container level. Both the containers and linear algebra functions share
274consistent APIs regardless of the devices on which the input tensors are
275stored, similar to PyTorch.
276
277@item For algorithms in physics, Cytnx provides powerful tools such as
278UniTensor, Network, Symmetry etc. These objects are built on top of Tensor
279objects, specifically aiming to reduce the developing work of Tensor network
280algorithms by simplifying the user interfaces.
281@end itemize
282
283This library is based on papaer - The Cytnx library for tensor networks;
284Kai-Hsin Wu, Chang-Teng Lin, Ke Hsu, Hao-Ti Hung, Manuel Schneider, Chia-Min
285Chung, Ying-Jer Kao, Pochung Chen;
286@url{https://doi.org/10.21468/SciPostPhysCodeb.53-r1.0}.")
287 (license license:lgpl3+)))
288
289(define-public python-brille
290 (package
291 (name "python-brille")
292 (version "0.8.3")
293 (source
294 (origin
295 (method git-fetch)
296 (uri (git-reference
297 (url "https://github.com/brille/brille")
298 (commit (string-append "v" version))))
299 (file-name (git-file-name name version))
300 (sha256
301 (base32 "1vyxa7k6yrpxizbmljrv7bnsf7dzxsfbs4id36x09jjxwh7dysjj"))))
302 (build-system cmake-build-system)
303 (arguments
304 (list
305 #:configure-flags
306 #~(list
307 ;; Boost.System is header-only since 1.69, but FindBoost looks for
308 ;; libboost_system.so which doesn't exist.
309 "-DHIGHFIVE_USE_BOOST=OFF"
310 ;; Pretend we're doing a scikit-build build to skip Conan.
311 "-DSKBUILD=ON"
312 (string-append "-DSKBUILD_PROJECT_NAME=brille")
313 (string-append "-DSKBUILD_PROJECT_VERSION=" #$version))
314 #:imported-modules (append %cmake-build-system-modules
315 %pyproject-build-system-modules)
316 #:modules '((guix build cmake-build-system)
317 ((guix build pyproject-build-system) #:select (site-packages))
318 (guix build utils))
319 #:phases
320 #~(modify-phases %standard-phases
321 (add-after 'unpack 'create-pkg-info
322 (lambda _
323 ;; Create PKG-INFO so DynamicVersion.cmake finds version without git.
324 (call-with-output-file "PKG-INFO"
325 (lambda (port)
326 (format port "Metadata-Version: 2.1
327Name: brille
328Version: ~a
329" #$version)))))
330 (add-after 'install 'install-python
331 (lambda* (#:key inputs outputs #:allow-other-keys)
332 (let ((site-packages (site-packages inputs outputs)))
333 (mkdir-p (string-append site-packages "/brille"))
334 ;; Install Python source files and compiled extension module.
335 (for-each (lambda (file)
336 (install-file file
337 (string-append site-packages "/brille")))
338 (append
339 (find-files "../source/brille" "\\.py$")
340 (find-files "." "^_brille\\..*\\.so$")))))))))
341 (native-inputs
342 (list catch2
343 cmake-minimal
344 highfive
345 pybind11
346 python-wrapper
347 python-setuptools
348 python-setuptools-scm))
349 (inputs
350 (list hdf5-parallel-openmpi))
351 (propagated-inputs
352 (list python-numpy))
353 (home-page "https://github.com/brille/brille")
354 (synopsis "Symmetry operations and interpolation in Brillouin zones")
355 (description
356 "Brille is a C++ library for symmetry operations and linear interpolation
357within an irreducible part of the first Brillouin zone. It provides Python
358bindings via pybind11 for use in phonon calculations and inelastic neutron
359scattering simulations.")
360 (license license:agpl3+)))
361
362(define-public python-cyten
363 ;; No PyPI release or git tag.
364 (let ((commit "20393da41dba0fd524f4132fb56ce14cb2cdbe00")
365 (revision "0"))
366 (package
367 (name "python-cyten")
368 (version (git-version "0.0.0" revision commit))
369 (source
370 (origin
371 (method git-fetch)
372 (uri (git-reference
373 (url "https://github.com/tenpy/cyten")
374 (commit commit)))
375 (file-name (git-file-name name version))
376 (sha256
377 (base32 "161dpz15nc719mvcndmyhgkzb91facnxy3rs1c6gvsfksx37wx1m"))))
378 (build-system pyproject-build-system)
379 (arguments
380 (list
381 ;; tests: 6043 passed, 369 skipped, 252 deselected, 636 xfailed
382 #:phases
383 #~(modify-phases %standard-phases
384 (add-before 'check 'remove-local-source
385 (lambda _
386 (delete-file-recursively "cyten"))))))
387 (native-inputs
388 (list pybind11 ;remove when python-team is merged
389 python-h5py
390 python-pytest
391 python-scikit-build-core
392 python-sympy))
393 (propagated-inputs
394 (list python-numpy
395 python-scipy
396 python-pyyaml))
397 (home-page "https://github.com/tenpy/cyten")
398 (synopsis "Combination of Cytnx and TeNPy for quantum physics")
399 (description
400 "The name Cyten is pronounced like sci-ten, and refers to scientific
401tensor networks implmented in C++ with a focus on the provided Python
402bindings, and the python-style library in modern C++.")
403 (license license:asl2.0))))
404
405(define-public python-gofit
406 (package
407 (name "python-gofit")
408 (version "1.0.0")
409 (source
410 (origin
411 (method git-fetch)
412 (uri (git-reference
413 (url "https://github.com/ralna/gofit")
414 (commit (string-append "v" version))))
415 (file-name (git-file-name name version))
416 (sha256
417 (base32 "0x7kk97k4v1mzgs29z9i2yidjx4hmdwhng77178l564hn29k1c2b"))))
418 (build-system pyproject-build-system)
419 (arguments
420 (list
421 #:phases
422 #~(modify-phases %standard-phases
423 (add-after 'unpack 'fix-requirements
424 (lambda _
425 ;; pybind11[global] is a build-time dependency, not runtime.
426 ;; <https://github.com/pybind/python_example/issues/45>
427 (substitute* "setup.py"
428 (("install_requires=")
429 "setup_requires="))))
430 (replace 'check
431 (lambda* (#:key tests? #:allow-other-keys)
432 (when tests?
433 ;; test_multistart_ls.py needs cubic.txt in cwd
434 (copy-file "tests/cubic.txt" "cubic.txt")
435 (for-each (lambda (test)
436 (invoke "python" test))
437 (find-files "tests" "^test_.*\\.py$"))))))))
438 (native-inputs (list pybind11-2 python-setuptools cmake python-pytest
439 python-numpy))
440 (inputs (list eigen))
441 (home-page "https://github.com/ralna/gofit")
442 (synopsis "GOFit: Global Optimization for Fitting problems")
443 (description "GOFit: Global Optimization for Fitting problems.")
444 (license license:bsd-3)))
445
446(define-public python-mslice
447 (package
448 (name "python-mslice")
449 (version "2.14")
450 (source
451 (origin
452 (method git-fetch)
453 (uri (git-reference
454 (url "https://github.com/mantidproject/mslice.git")
455 (commit version)))
456 (file-name (git-file-name name version))
457 (sha256
458 (base32 "1bbg9hyl6jxyk79hshvqvcbwbx48x6va5nyhavj5kjg6ybd0n8fd"))
459 (patches
460 (search-patches "python-mslice-matplotlib-3.6-compatibility.patch"))))
461 (build-system pyproject-build-system)
462 (arguments
463 (list #:tests? #f ;require mantid
464 #:phases
465 #~(modify-phases %standard-phases
466 (add-after 'unpack 'fix-compatibility
467 (lambda _
468 ;; dedent_interpd was an alias for interpd; the alias was
469 ;; removed in
470 ;; <https://github.com/matplotlib/matplotlib/pull/28826>.
471 (substitute* "src/mslice/plotting/pyplot.py"
472 (("@_docstring\\.dedent_interpd")
473 "@_docstring.interpd"))
474 ;; self.execute("cls") fails; use widget's clear() method.
475 ;; <https://github.com/mantidproject/mslice/issues/1152>
476 (substitute* "src/mslice/widgets/ipythonconsole/ipython_widget.py"
477 (("self\\.execute\\(\"cls\"\\)")
478 "self.clear()"))))
479 (delete 'sanity-check)))) ;would require mantid
480 (propagated-inputs (list python-matplotlib python-pyqt python-qtpy
481 python-qtawesome))
482 (native-inputs (list python-pytest python-setuptools))
483 (home-page "https://github.com/mantidproject/mslice")
484 (synopsis "Performs slices and cuts of multi-dimensional data produced by Mantid")
485 (description "This package provides a tool for performing slices and cuts
486of multi-dimensional data produced by Mantid.")
487 (license license:gpl3+)))
488
489(define-public python-mvesuvio
490 (package
491 (name "python-mvesuvio")
492 (version "0.1")
493 (source
494 (origin
495 (method git-fetch)
496 (uri (git-reference
497 (url "https://github.com/mantidproject/vesuvio")
498 (commit version)))
499 (file-name (git-file-name name version))
500 (sha256
501 (base32 "1drpz41dfqlfbx9jpsgig6hv52ylxs79ghzk2a7m6109vbawksvw"))))
502 (build-system pyproject-build-system)
503 (arguments
504 (list
505 #:tests? #f ; tests require mantid
506 #:phases
507 #~(modify-phases %standard-phases
508 (add-after 'unpack 'fix-version
509 (lambda _
510 ;; versioningit needs git tags; set version via environment
511 ;; variable and create _version.py directly.
512 (mkdir-p "src/mvesuvio")
513 (call-with-output-file "src/mvesuvio/_version.py"
514 (lambda (port)
515 (format port "__version__ = \"~a\"~%" #$version))))))))
516 (native-inputs
517 (list python-setuptools))
518 (propagated-inputs
519 (list python-dill
520 python-iminuit
521 python-jacobi))
522 (home-page "https://github.com/mantidproject/vesuvio")
523 (synopsis "Analysis library for VESUVIO neutron spectrometer data")
524 (description
525 "MVesuvio provides optimized analysis procedures for neutron scattering
526data from the VESUVIO spectrometer. It is a script library meant to be
527imported in Mantid Workbench's script editor (@code{import mvesuvio as mv}),
528not a GUI application.")
529 (license license:gpl3)))
530
531(define-public python-physics-tenpy
532 (package
533 (name "python-physics-tenpy")
534 (version "1.1.0")
535 (source
536 (origin
537 (method git-fetch)
538 (uri (git-reference
539 (url "https://github.com/tenpy/tenpy")
540 (commit (string-append "v" version))
541 (recursive? #t)))
542 (file-name (git-file-name name version))
543 (sha256
544 (base32 "0b1yky4gn2s1h0yl7l3a6mq1ji2zj0a74fyflhlapii7awmwas5q"))))
545 (build-system pyproject-build-system)
546 (arguments
547 (list
548 #:phases
549 #~(modify-phases %standard-phases
550 (add-after 'build 'build-docs
551 (lambda _
552 (invoke "make" "-C" "doc" "html")))
553 (add-after 'install 'install-docs
554 (lambda _
555 (copy-recursively
556 "doc/sphinx_build/html"
557 (string-append #$output:doc "/share/doc/"
558 #$name "-" #$version)))))))
559 (native-inputs
560 (list python-cython
561 python-pytest
562 python-setuptools
563 ;; [docbuild]
564 pandoc
565 python-pybtex
566 python-sphinx
567 python-sphinx-rtd-theme
568 python-sphinxcontrib-bibtex
569 python-matplotlib
570 python-ipykernel
571 python-nbsphinx
572 python-sphinx-copybutton))
573 (propagated-inputs
574 (list python-numpy
575 python-scipy
576 ;; [optional]
577 python-matplotlib
578 python-h5py
579 python-pyyaml
580 python-psutil
581 python-bottleneck))
582 (outputs '("out" "doc"))
583 (home-page "https://github.com/xtenpy/tenpy")
584 (synopsis "Simulation of quantum many-body systems with tensor networks")
585 (description
586 "@acronym{TeNPy, Tensor Network Python} is a Python library for the
587simulation of strongly correlated quantum systems with tensor networks.
588
589The philosophy of this library is to get a new balance of a good readability
590and usability for new-comers, and at the same time powerful algorithms and
591fast development of new algorithms for experts. For good readability, we
592include an extensive documentation next to the code, both in Python doc
593strings and separately as \"user guides\", as well as simple example codes and
594even toy codes, which just demonstrate various algorithms (like TEBD and DMRG)
595in ~100 lines per file.")
596 (license license:asl2.0)))
597
598(define-public python-pycifrw
599 (package
600 (name "python-pycifrw")
601 (version "5.0.1")
602 (source
603 (origin
604 (method git-fetch)
605 (uri (git-reference
606 (url "https://github.com/jamesrhester/pycifrw")
607 (commit (string-append "v" version))))
608 (sha256
609 (base32 "14qm472gzfblwph00vhv1fpyx0azfk4fba6fwzjh1z47pmapx7kg"))))
610 (build-system pyproject-build-system)
611 (arguments
612 (list
613 ;; tests: 220 passed, 1 skipped, 5 deselected, 3 xfailed, 13752 warnings
614 #:test-flags
615 #~(list
616 ;; AssertionError: False is not true
617 "--deselect=TestPyCIFRW.py::DDLmDicTestCase::testMandatory"
618 "--deselect=TestPyCIFRW.py::DDLmDicTestCase::testProhibited"
619 ;; AssertionError: assert '_atom_site.adp_type' ==
620 ;; '_atom_site.ADP_type'
621 "--deselect=TestPyCIFRW.py::DicStructureTestCase::testCatObj2"
622 ;; KeyError: 'No such category,object in the dictionary: atom_site
623 ;; matrix_beta'
624 "--deselect=TestDrel.py::TestWithDict::test_fancy_packets"
625 "--deselect=TestDrel.py::TestWithDict::testCaptures"
626 "TestPyCIFRW.py"
627 "TestDrel.py")
628 #:phases
629 #~(modify-phases %standard-phases
630 ;; Steps are taken from project's .github/workflows/CI.yml file.
631 (add-after 'unpack 'copy-dictionaries
632 (lambda _
633 (copy-recursively
634 (string-append #$(this-package-native-input "cif-core")
635 "/share/cif-core")
636 "tests/dictionaries")))
637 (add-before 'build 'generate-sources
638 (lambda _
639 (invoke "make" "-C" "src" "package"))))))
640 (native-inputs
641 (list cif-core
642 latex2html
643 noweb
644 python-pytest
645 python-setuptools))
646 (propagated-inputs
647 (list python-numpy
648 python-prettytable
649 python-ply))
650 (home-page "https://github.com/jamesrhester/pycifrw")
651 (synopsis "CIF file reader and writer")
652 (description
653 "PyCifRW provides support for reading and writing CIF (Crystallographic
654Information File) format files. CIF is the standard format for
655crystallographic data exchange endorsed by the International Union of
656Crystallography.")
657 (license license:psfl)))
658
659(define-public python-pyoncat
660 (package
661 (name "python-pyoncat")
662 (version "2.4")
663 (source
664 (origin
665 (method url-fetch)
666 (uri (pypi-uri "pyoncat" version))
667 (sha256
668 (base32 "16lkpbkn7wyx8ag42sjmqm0c5acfs5dbglf3ahnfwpvcgcxj6jql"))))
669 (build-system pyproject-build-system)
670 (arguments
671 (list #:tests? #f ; no tests in sdist
672 #:phases
673 #~(modify-phases %standard-phases
674 (add-after 'unpack 'fix-build-system
675 (lambda _
676 ;; Upstream uses the deprecated poetry.masonry.api build
677 ;; backend which requires the full poetry package. Guix
678 ;; only has poetry-core, so switch to poetry.core.masonry.api.
679 (substitute* "pyproject.toml"
680 (("requires = \\[\"poetry\"\\]")
681 "requires = [\"poetry-core\"]")
682 (("build-backend = \"poetry\\.masonry\\.api\"")
683 "build-backend = \"poetry.core.masonry.api\"")))))))
684 (native-inputs
685 (list python-poetry-core))
686 (propagated-inputs
687 (list python-oauthlib
688 python-requests
689 python-requests-oauthlib))
690 (home-page "https://oncat.ornl.gov")
691 (synopsis "Python client for ONCat (ORNL Neutron Catalog)")
692 (description
693 "This package provides a Python client for ONCat, the Oak Ridge National
694Laboratory Neutron Catalog. ONCat is a data catalog service for neutron
695scattering facilities.")
696 (license license:expat)))
697
698(define-public python-pyoncatqt
699 (package
700 (name "python-pyoncatqt")
701 (version "1.2.1")
702 (source
703 (origin
704 (method git-fetch)
705 (uri (git-reference
706 (url "https://github.com/neutrons/pyoncatqt")
707 (commit (string-append "v" version))))
708 (file-name (git-file-name name version))
709 (sha256
710 (base32 "1wdzff1jn2jv742qm7g728yzp7axgf7nrizm5hms2w796a1zdqwv"))))
711 (build-system pyproject-build-system)
712 (arguments
713 (list
714 #:tests? #f ; tests require mantid
715 #:phases
716 #~(modify-phases %standard-phases
717 (add-after 'unpack 'fix-version
718 (lambda _
719 ;; versioningit needs git tags; patch pyproject.toml to use
720 ;; static version and create _version.py directly.
721 (substitute* "pyproject.toml"
722 (("dynamic = \\[\"version\"\\]")
723 (string-append "version = \"" #$version "\""))
724 (("source = \"versioningit\"") "")
725 (("\\[tool\\.hatch\\.build\\.hooks\\.versioningit-onbuild\\]")
726 "[tool.hatch.build.hooks.versioningit-onbuild]
727enable-by-default = false"))
728 (mkdir-p "src/pyoncatqt")
729 (call-with-output-file "src/pyoncatqt/_version.py"
730 (lambda (port)
731 (format port "__version__ = \"~a\"~%" #$version))))))))
732 (native-inputs
733 (list python-hatchling))
734 (propagated-inputs
735 (list python-oauthlib
736 python-pyoncat
737 python-qtpy))
738 (home-page "https://github.com/neutrons/pyoncatqt")
739 (synopsis "Qt GUI elements for ONCat authentication")
740 (description
741 "This package provides common Qt GUI elements for authenticating with
742ONCat (ORNL Neutron Catalog), including login dialogs and session management
743widgets.")
744 (license license:gpl3)))
745
746(define-public python-pystog
747 (package
748 (name "python-pystog")
749 (version "0.6.1")
750 (source
751 (origin
752 (method git-fetch)
753 (uri (git-reference
754 (url "https://github.com/neutrons/pystog")
755 (commit (string-append "v" version))))
756 (file-name (git-file-name name version))
757 (sha256
758 (base32 "1dwljmyp083v5a189xzdxxsdkazh5bmbm2f2k79jp7lds0y8h9lg"))))
759 (build-system pyproject-build-system)
760 (arguments
761 (list
762 #:phases
763 #~(modify-phases %standard-phases
764 (add-after 'unpack 'fix-version
765 (lambda _
766 ;; versioningit needs git tags; patch pyproject.toml to use
767 ;; static version and create _version.py directly.
768 (substitute* "pyproject.toml"
769 (("dynamic = \\[\"version\"\\]")
770 (string-append "version = \"" #$version "\""))
771 (("source = \"versioningit\"") "")
772 (("\\[tool\\.hatch\\.build\\.hooks\\.versioningit-onbuild\\]")
773 "[tool.hatch.build.hooks.versioningit-onbuild]
774enable-by-default = false"))
775 (mkdir-p "src/pystog")
776 (call-with-output-file "src/pystog/_version.py"
777 (lambda (port)
778 (format port "__version__ = \"~a\"~%" #$version))))))))
779 (propagated-inputs
780 (list python-h5py
781 python-numpy))
782 (native-inputs
783 (list python-hatchling
784 python-pytest))
785 (home-page "https://github.com/neutrons/pystog")
786 (synopsis "Total scattering function manipulator")
787 (description
788 "PyStoG is a Python package for converting between different total
789scattering functions used in crystalline and amorphous materials research.
790It handles reciprocal-space structure factors and real-space pair distribution
791functions, performing Fourier transforms between them and applying filters to
792remove spurious artifacts in the data.")
793 (license license:gpl3+)))
794
795(define-public python-quasielasticbayes
796 (package
797 (name "python-quasielasticbayes")
798 (version "0.3.0")
799 (source
800 (origin
801 (method git-fetch)
802 (uri (git-reference
803 (url "https://github.com/mantidproject/quasielasticbayes")
804 (commit (string-append "v" version))))
805 (file-name (git-file-name name version))
806 (sha256
807 (base32 "05va9qygw4a9app61spw6hqmbn9cq09w0dik9g6xvzpwcmfb7yx4"))))
808 (build-system meson-build-system)
809 (arguments
810 (list
811 #:imported-modules (append %pyproject-build-system-modules
812 %meson-build-system-modules)
813 #:modules '((guix build meson-build-system)
814 ((guix build pyproject-build-system) #:prefix py:)
815 (guix build utils))
816 #:phases
817 #~(modify-phases %standard-phases
818 (add-after 'install 'add-install-to-pythonpath
819 (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
820 (add-after 'add-install-to-pythonpath 'check
821 (lambda* (#:key tests? #:allow-other-keys)
822 ((assoc-ref py:%standard-phases 'check)
823 #:tests? tests?
824 #:test-flags `("../source/src/quasielasticbayes/test")))))))
825 (native-inputs
826 (list gfortran
827 python
828 python-numpy
829 python-pytest))
830 (propagated-inputs
831 (list python-numpy))
832 (home-page "https://github.com/mantidproject/quasielasticbayes")
833 (synopsis "Bayesian analysis for quasi-elastic neutron scattering")
834 (description
835 "This package provides Python wrappers for Fortran routines used to
836perform Bayesian analysis on quasi-elastic neutron-scattering data. The
837original Fortran code was written by Dr. Devinder Sivia in the 1980s.")
838 (license license:bsd-3)))
839
840(define-public python-quickbayes
841 (package
842 (name "python-quickbayes")
843 (version "1.0.2")
844 (source
845 (origin
846 (method url-fetch)
847 (uri (pypi-uri "quickbayes" version))
848 (sha256
849 (base32 "1w3w612cz92bkxjk2wyfcjf502vgp45ajpz92llk1d0z8q1pdn49"))))
850 (build-system pyproject-build-system)
851 (arguments
852 (list
853 #:test-flags
854 ;; Upstream runs two test configurations (see .github/workflows/run_tests.yml):
855 ;; - without gofit: test/default and test/shared
856 ;; - with gofit: test/gofit and test/shared
857 ;; Since we have gofit, run the gofit configuration.
858 #~(list "test/gofit" "test/shared")))
859 (propagated-inputs
860 (list python-joblib python-numpy python-scipy))
861 (native-inputs
862 (list python-hatchling python-pytest python-gofit))
863 (home-page "https://quickbayes.readthedocs.io/")
864 (synopsis "Bayesian analysis tools for neutron scattering")
865 (description
866 "QuickBayes provides Bayesian analysis tools for analyzing neutron
867scattering data. It is designed for use with the Mantid framework for
868neutron and muon data analysis.")
869 (license license:bsd-3)))
870
871(define-public python-qutip
872 (package
873 (name "python-qutip")
874 (version "5.3.1")
875 (source
876 (origin
877 (method git-fetch)
878 (uri (git-reference
879 (url "https://github.com/qutip/qutip")
880 (commit (string-append "v" version))))
881 (file-name (git-file-name name version))
882 (sha256
883 (base32 "0srlw6f8bg6ynps8r827y75drygbx489lcj3ay8y2yim09w0is1i"))))
884 (build-system pyproject-build-system)
885 (arguments
886 (list
887 ;; Tests: 26944 passed, 205 skipped, 135 deselected,
888 ;; 7 xfailed, 472 warnings.
889 #:test-flags
890 #~(list "-m" "not (flaky or slow)"
891 ;; Ignoring very slow tests.
892 "--ignore" "tests/solver/test_parallel.py")
893 #:phases
894 #~(modify-phases %standard-phases
895 (add-before 'check 'remove-local-source
896 (lambda _
897 (copy-recursively "qutip/tests" "tests")
898 (delete-file-recursively "qutip"))))))
899 (native-inputs
900 (list python-cython
901 python-pytest
902 python-pytest-rerunfailures
903 python-setuptools))
904 (propagated-inputs
905 (list python-numpy
906 python-packaging
907 python-scipy
908 ;; [optional]
909 python-cvxopt
910 python-cvxpy
911 python-loky
912 python-mpi4py
913 python-mpmath
914 python-tqdm))
915 (home-page "https://qutip.org")
916 (synopsis "Quantum Toolbox in Python")
917 (description
918 "QuTiP is a library for simulating the dynamics of closed and open quantum
919systems. It aims to provide numerical simulations of a wide variety of quantum
920mechanical problems, including those with Hamiltonians and/or collapse operators
921with arbitrary time-dependence, commonly found in a wide range of physics
922applications.")
923 (license license:bsd-3)))
924
925(define-public python-shiver
926 (package
927 (name "python-shiver")
928 (version "1.8.2")
929 (source
930 (origin
931 (method git-fetch)
932 (uri (git-reference
933 (url "https://github.com/neutrons/Shiver")
934 (commit (string-append "v" version))))
935 (file-name (git-file-name name version))
936 (sha256
937 (base32 "05bxn1wqqylixzkk4is9nqkcsxfiix46s8m18db4c1zj7kkjawwv"))))
938 (build-system pyproject-build-system)
939 (arguments
940 (list
941 #:tests? #f ; tests require mantid
942 #:phases
943 #~(modify-phases %standard-phases
944 (add-after 'unpack 'fix-version
945 (lambda _
946 ;; versioningit needs git tags; patch pyproject.toml to use
947 ;; static version and create _version.py directly.
948 (substitute* "pyproject.toml"
949 (("dynamic = \\[\"version\"\\]")
950 (string-append "version = \"" #$version "\""))
951 (("source = \"versioningit\"") "")
952 (("\\[tool\\.hatch\\.build\\.hooks\\.versioningit-onbuild\\]")
953 "[tool.hatch.build.hooks.versioningit-onbuild]
954enable-by-default = false"))
955 (mkdir-p "src/shiver")
956 (call-with-output-file "src/shiver/_version.py"
957 (lambda (port)
958 (format port "__version__ = \"~a\"~%" #$version))))))))
959 (native-inputs
960 (list python-hatchling))
961 (propagated-inputs
962 (list python-configupdater
963 python-pyoncatqt
964 python-qtpy))
965 (home-page "https://github.com/neutrons/Shiver")
966 (synopsis "Spectroscopy histogram visualizer for neutron event reduction")
967 (description
968 "Shiver (Spectroscopy Histogram Visualizer for Event Reduction) is a
969desktop application for examining Time of Flight inelastic neutron data from
970single crystal, direct geometry experiments. It integrates with Mantid
971Workbench and appears in the Interfaces menu when both packages are
972installed.")
973 (license license:gpl3)))
974
975(define-public python-spglib
976 (package
977 (name "python-spglib")
978 (version "2.6.0")
979 (source
980 (origin
981 (method url-fetch)
982 (uri (pypi-uri "spglib" version))
983 (sha256
984 (base32 "1sq8niay87n7hmby6hs628zzpc4apx6kp77cjvyi87hal0mxlvnn"))))
985 (build-system pyproject-build-system)
986 (propagated-inputs
987 (list python-numpy
988 python-typing-extensions))
989 (native-inputs
990 (list cmake-minimal
991 python-pytest
992 python-pyyaml
993 python-scikit-build-core
994 python-setuptools-scm))
995 (home-page "https://spglib.readthedocs.io/")
996 (synopsis "Python bindings for spglib crystal symmetry library")
997 (description
998 "Spglib is a library for finding and handling crystal symmetries written
999in C. This package provides Python bindings for spglib, allowing Python
1000programs to find symmetry operations, identify space groups, and perform
1001other symmetry-related operations on crystal structures.")
1002 (license license:bsd-3)))
1003
1004(define-public python-seekpath
1005 (package
1006 (name "python-seekpath")
1007 (version "2.1.0")
1008 (source
1009 (origin
1010 (method url-fetch)
1011 (uri (pypi-uri "seekpath" version))
1012 (sha256
1013 (base32 "1i2jhjc4ikd31v8wkxzfrvhwlv0dlzpkysf3lkafcql2c9wwbkii"))))
1014 (build-system pyproject-build-system)
1015 (arguments
1016 (list
1017 #:phases
1018 #~(modify-phases %standard-phases
1019 (replace 'check
1020 (lambda* (#:key tests? #:allow-other-keys)
1021 (when tests?
1022 (invoke "pytest" "-vv" "tests")))))))
1023 (propagated-inputs
1024 (list python-numpy
1025 python-scipy
1026 python-spglib))
1027 (native-inputs
1028 (list python-pytest
1029 python-setuptools))
1030 (home-page "https://github.com/giovannipizzi/seekpath")
1031 (synopsis "K-path finder for band structure calculations")
1032 (description
1033 "SeeK-path is a Python module to obtain band paths in the Brillouin zone
1034of crystal structures. It automatically detects Bravais lattice types and
1035generates k-point labels and band paths following crystallographic
1036conventions.")
1037 (license license:expat)))
1038
1039(define-public python-euphonic
1040 (package
1041 (name "python-euphonic")
1042 (version "2.0.0")
1043 (source
1044 (origin
1045 (method git-fetch)
1046 (uri (git-reference
1047 (url "https://github.com/pace-neutrons/Euphonic")
1048 (commit (string-append "v" version))))
1049 (file-name (git-file-name name version))
1050 (sha256
1051 (base32 "1w6rks3ipbv2dxw9kvypj2s185ysc4c3hlc6ym6x4wvr97gkx0id"))))
1052 (build-system pyproject-build-system)
1053 (arguments
1054 (list
1055 ;; tests: 1117 passed, 6 skipped, 563 warnings
1056 #:test-flags
1057 #~(list "--numprocesses" (number->string (parallel-job-count))
1058 ;; Failed: DID NOT WARN. No warnings of type (<class
1059 ;; 'UserWarning'>,) were emitted. Emitted warnings: [].
1060 #$@(map (lambda (test) (string-append "--deselect="
1061 "tests_and_analysis/"
1062 "test/euphonic_test/"
1063 test))
1064 (list
1065 (string-append "test_qpoint_frequencies.py"
1066 "::TestQpointFrequenciesCalculateDosMap"
1067 "::test_calculate_dos_map")
1068 (string-append "test_qpoint_frequencies.py"
1069 "::TestQpointFrequenciesGetDispersion"
1070 "::test_get_dispersion")
1071 (string-append "test_structure_factor.py"
1072 "::TestStructureFactorCalculateSqwMap"
1073 "::test_calculate_sqw_map_with_0_"
1074 "inv_cm_bin_doesnt_emit_runtime_warn")
1075 (string-append "test_util.py::TestGetQptLabels"
1076 "::test_get_qpt_labels"))))
1077 #:phases
1078 #~(modify-phases %standard-phases
1079 (add-before 'build 'fix-numpy-include
1080 (lambda* (#:key inputs #:allow-other-keys)
1081 (let* ((numpy (assoc-ref inputs "python-numpy"))
1082 (site (site-packages inputs `(("out" . ,numpy)))))
1083 (substitute* "meson.build"
1084 (("np_inc = include_directories\\(py\\.get_path\\('platlib'\\) / 'numpy/core/include'\\)")
1085 (string-append "np_inc = include_directories('"
1086 numpy site "/numpy/core/include')"))))))
1087 (add-before 'check 'delete-source
1088 (lambda _
1089 (delete-file-recursively "euphonic"))))))
1090 (propagated-inputs
1091 (list python-numpy
1092 python-packaging
1093 python-pint
1094 python-scipy
1095 python-seekpath
1096 python-spglib
1097 python-threadpoolctl
1098 python-toolz
1099 python-typing-extensions
1100 ;; [optional]
1101 python-brille
1102 python-h5py
1103 python-matplotlib
1104 python-pyyaml))
1105 (native-inputs
1106 (list ninja
1107 pkg-config
1108 python-meson
1109 python-pytest
1110 python-pytest-xdist
1111 python-pytest-lazy-fixtures
1112 python-pytest-mock))
1113 (home-page "https://github.com/pace-neutrons/Euphonic")
1114 (synopsis "Phonon calculations for inelastic neutron scattering")
1115 (description
1116 "Euphonic is a Python package for calculating phonon bandstructures and
1117simulating inelastic neutron scattering (INS) from force constants. It can
1118read output from CASTEP and Phonopy and calculate phonon frequencies,
1119eigenvectors, and structure factors.")
1120 (license license:gpl3+)))
1121
1122(define-public mantid
1123 (package
1124 (name "mantid")
1125 (version "6.16.0")
1126 (source
1127 (origin
1128 (method git-fetch)
1129 (uri (git-reference
1130 (url "https://github.com/mantidproject/mantid")
1131 (commit (string-append "v" version))))
1132 (file-name (git-file-name name version))
1133 (sha256
1134 (base32 "1nmkcrdba6x2fc04fgykc7iwfpqldbwrfsbvwlrfa03d5gb522ac"))
1135 (patches
1136 (search-patches "mantid-openmp-cleanup.patch"))))
1137 (build-system qt-build-system)
1138 (arguments
1139 (list
1140 #:build-type "Release"
1141 #:configure-flags
1142 #~(list "-DENABLE_MANTIDQT=ON"
1143 "-DENABLE_WORKBENCH=ON"
1144 "-DENABLE_DOCS=OFF"
1145 "-DENABLE_PRECOMMIT=OFF"
1146 "-DCMAKE_CXX_STANDARD=20"
1147 "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
1148 "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
1149 "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
1150 (string-append "-DCMAKE_PREFIX_PATH="
1151 #$(this-package-input "qtbase"))
1152 (string-append "-DPYQT5_SIP_DIR="
1153 #$(this-package-input "python-pyqt")
1154 "/lib/python"
1155 #$(version-major+minor (package-version python))
1156 "/site-packages/PyQt5/bindings"))
1157 #:modules '((guix build qt-build-system)
1158 (guix build utils)
1159 (ice-9 textual-ports))
1160 #:phases
1161 #~(modify-phases %standard-phases
1162 (add-after 'unpack 'fix-boost-system
1163 (lambda _
1164 ;; Enable core dumps.
1165 (setrlimit 'core #f #f)
1166 ;; boost_system is now header-only in modern boost (>= 1.69)
1167 ;; and not a separate cmake target. Remove from COMPONENTS.
1168 ;; Also disable HDF4 support as Guix doesn't have an hdf4 package
1169 ;; anymore.
1170 (substitute* "buildconfig/CMake/CommonSetup.cmake"
1171 (("date_time regex serialization filesystem system")
1172 "date_time regex serialization filesystem")
1173 (("find_package\\(HDF4 REQUIRED\\)")
1174 "# HDF4 disabled - no hdf4 package in Guix"))
1175 (substitute* "Framework/LegacyNexus/CMakeLists.txt"
1176 (("\\$\\{HDF4_DF_LIBRARY\\} \\$\\{HDF4_MFHDF_LIBRARY\\} ")
1177 ""))
1178 (substitute* "Framework/LegacyNexus/inc/MantidLegacyNexus/napiconfig.h"
1179 (("#define WITH_HDF4")
1180 "/* #define WITH_HDF4 - disabled, no hdf4 in Guix */"))))
1181 (add-after 'unpack 'fix-version-detection
1182 (lambda _
1183 ;; The cmake build uses versioningit with git to determine the
1184 ;; version. Since git is not available during build, we create
1185 ;; a simple cmake file that sets the version directly.
1186 (call-with-output-file "buildconfig/CMake/VersionNumber.cmake"
1187 (lambda (port)
1188 (format port "# Version information - patched for Guix build
1189 set(VERSION_MAJOR ~a)
1190 set(VERSION_MINOR ~a)
1191 set(VERSION_PATCH ~a)
1192 set(VERSION_TWEAK \"\")
1193 set(REVISION_FULL \"v~a\")
1194 set(REVISION_SHORT \"v~a\")
1195 set(REVISION_DATE \"Thu, 06 Nov 2025\")
1196 message(STATUS \"Version: ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_TWEAK}\")
1197 "
1198 #$(version-major version)
1199 #$(cadr (string-split version #\.))
1200 #$(string-drop version (+ 1 (string-length (version-major+minor version))))
1201 #$version
1202 #$version)))))
1203 (add-after 'unpack 'use-system-googletest
1204 (lambda _
1205 ;; The cmake build tries to fetch googletest from git.
1206 ;; We use the system googletest instead.
1207 ;; Also include CMakePackageConfigHelpers and GNUInstallDirs
1208 ;; which are needed by Framework/CMakeLists.txt.
1209 (with-output-to-file "buildconfig/CMake/GoogleTest.cmake"
1210 (lambda ()
1211 (display "# Use system googletest
1212 include(CMakePackageConfigHelpers)
1213 include(GNUInstallDirs)
1214
1215 find_package(GTest REQUIRED)
1216 # Create aliases that mantid expects
1217 if(NOT TARGET gmock)
1218 add_library(gmock ALIAS GTest::gmock)
1219 endif()
1220 if(NOT TARGET gtest)
1221 add_library(gtest ALIAS GTest::gtest)
1222 endif()
1223 if(NOT TARGET gmock_main)
1224 add_library(gmock_main ALIAS GTest::gmock_main)
1225 endif()
1226 if(NOT TARGET gtest_main)
1227 add_library(gtest_main ALIAS GTest::gtest_main)
1228 endif()
1229 ")))))
1230 (add-after 'unpack 'fix-sip-include-dirs
1231 (lambda* (#:key inputs #:allow-other-keys)
1232 ;; sip-build needs to find PyQt5's .sip files for %Import directives.
1233 ;; Add sip-include-dirs to the pyproject.toml template.
1234 (let ((pyqt-sip-dir (string-append
1235 (assoc-ref inputs "python-pyqt")
1236 "/lib/python"
1237 #$(version-major+minor
1238 (package-version python))
1239 "/site-packages/PyQt5/bindings")))
1240 (substitute* "buildconfig/CMake/sip-templates/pyproject.toml.in"
1241 (("\\[tool\\.sip\\.project\\]")
1242 (string-append "[tool.sip.project]\n"
1243 "sip-include-dirs = [\"" pyqt-sip-dir "\"]"))))))
1244 (add-after 'unpack 'fix-pip-no-network
1245 (lambda _
1246 ;; The build-phase editable install is only for developer convenience
1247 ;; (creates egg-links so devs can import from build dir).
1248 ;; Skip it entirely - they will just touch the stamp file.
1249 ;;
1250 ;; The install-phase pip install still runs and does the real work.
1251 (substitute* "buildconfig/CMake/PythonPackageTargetFunctions.cmake"
1252 (("\\$\\{Python_EXECUTABLE\\} -m pip install --editable \\.")
1253 "${CMAKE_COMMAND} -E true")
1254 (("pip install \\$\\{CMAKE_CURRENT_SOURCE_DIR\\}")
1255 "pip install --no-build-isolation --prefix ${CMAKE_INSTALL_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}"))))
1256 ;; Remove dependencies on UnitTestData (requires network to download).
1257 ;; Tests that need external data will be excluded from ctest.
1258 (add-after 'unpack 'remove-external-data-dependencies
1259 (lambda _
1260 (substitute* (find-files "." "CMakeLists\\.txt$")
1261 (("add_dependencies\\([A-Za-z]+Test UnitTestData\\)") ""))))
1262 (add-after 'unpack 'fix-rpath-for-guix
1263 (lambda _
1264 ;; Mantid sets INSTALL_RPATH explicitly per-target, which overrides
1265 ;; CMAKE_INSTALL_RPATH_USE_LINK_PATH. Rename the property to a
1266 ;; non-existent name so CMake ignores it and uses the global setting.
1267 ;;
1268 ;; The pattern "PROPERTIES INSTALL_RPATH" only matches the property
1269 ;; name in set_target_properties() calls, not:
1270 ;; - CMAKE_INSTALL_RPATH (variable name)
1271 ;; - CMAKE_INSTALL_RPATH_USE_LINK_PATH (variable name)
1272 ;; - LINUX_INSTALL_RPATH (function keyword parameter)
1273 ;; - PARSED_LINUX_INSTALL_RPATH (parsed argument variable)
1274 (substitute* (append (filter (lambda (f)
1275 (not (string-contains f "PythonInterface")))
1276 (find-files "." "CMakeLists\\.txt$"))
1277 (find-files "buildconfig/CMake" "\\.cmake$"))
1278 (("PROPERTIES INSTALL_RPATH")
1279 "PROPERTIES DISABLED_INSTALL_RPATH"))
1280 ;; Fix EXT_INSTALL_RPATH for Python modules - the relative path
1281 ;; is totally invalid.
1282 (substitute* "Framework/PythonInterface/CMakeLists.txt"
1283 (("set\\(EXT_INSTALL_RPATH [^)]*\\)")
1284 (string-append "set(EXT_INSTALL_RPATH \"" #$output "/lib;" #$output "/plugins\")")))))
1285 (add-after 'unpack 'remove-disable-new-dtags
1286 (lambda _
1287 ;; Remove the --disable-new-dtags flag--so it uses modern RUNPATH
1288 ;; instead of RPATH.
1289 (substitute* "buildconfig/CMake/GNUSetup.cmake"
1290 (("-Wl,--disable-new-dtags")
1291 ""))
1292 (substitute* "qt/python/mantidqt/mantidqt/widgets/codeeditor/test/test_codeeditor.py"
1293 (("exc\\.__name__") "type(exc).__name__"))
1294 ;; np.all on tuple doesn't compare - it just checks truthiness.
1295 (substitute* "scripts/test/Engineering/texture/test_TextureUtils.py"
1296 (("self\\.assertTrue\\(np\\.all\\(\\(_get_run_and_prefix_from_ws_log\\(mock_ws, ws_name\\), \\(run_number, prefix\\)\\)\\)\\)")
1297 "self.assertEqual(_get_run_and_prefix_from_ws_log(mock_ws, ws_name), (run_number, prefix))"))
1298 (substitute* "scripts/test/Engineering/common/test_texture_sample_viewer.py"
1299 (("self\\.assertTrue\\(np\\.all\\(\\(mesh\\.shape, \\(12, 3, 3\\)\\)\\)\\)")
1300 "self.assertEqual(mesh.shape, (12, 3, 3))")
1301 (("self\\.assertTrue\\(np\\.all\\(\\(np\\.unique\\(mesh\\), \\(-1, 1\\)\\)\\)\\)")
1302 "self.assertTrue(np.array_equal(np.unique(mesh), np.array([-1, 1])))")
1303 (("self\\.assertTrue\\(np\\.all\\(\\(mesh, self\\.get_cube_mesh\\(2\\)\\)\\)\\)")
1304 "self.assertTrue(np.array_equal(mesh, self.get_cube_mesh(2)))"))
1305 (substitute*
1306"qt/python/mantidqtinterfaces/mantidqtinterfaces/Engineering/gui/engineering_diffraction/tabs/texture/test/test_texture_presenter.py"
1307 (("self\\.assertTrue\\(np\\.all\\(\\(self\\.presenter\\.ws_names, \\[\"existing_ws\", \"new_ws\"\\]\\)\\)\\)")
1308 "self.assertEqual(self.presenter.ws_names, [\"existing_ws\", \"new_ws\"])")
1309 (("self\\.assertTrue\\(np\\.all\\(\\(self\\.presenter\\.ws_names, \\[\"ws2\"\\]\\)\\)\\)")
1310 "self.assertEqual(self.presenter.ws_names, [\"ws2\"])")
1311 (("self\\.assertTrue\\(np\\.all\\(\\(self\\.presenter\\.get_assigned_params\\(\\), \\[\"param2\"\\]\\)\\)\\)")
1312 "self.assertEqual(self.presenter.get_assigned_params(), [\"param2\"])"))
1313 ;; np.xrange never existed; use range() for index iteration.
1314 (substitute* "scripts/SCD_Reduction/BVGFitTools.py"
1315 (("np\\.xrange") "range"))
1316 ;; set_draggable fails with offscreen backend (KeyError: 'pick_event').
1317 (substitute* "Framework/PythonInterface/mantid/plots/utility.py"
1318 (("getattr\\(legend, SET_DRAGGABLE_METHOD\\)\\(state, use_blit, update\\)")
1319 "try:\n getattr(legend, SET_DRAGGABLE_METHOD)(state, use_blit, update)\n except KeyError:\n pass # Offscreen backend doesn't support draggable legends"))
1320 ;; legendTest.py imports matplotlib.pyplot without setting Agg backend,
1321 ;; causing Qt5Agg to fail display_is_valid() check.
1322 (substitute* "Framework/PythonInterface/test/python/mantid/plots/legendTest.py"
1323 (("import matplotlib\\.pyplot as plt")
1324 "import matplotlib
1325matplotlib.use(\"AGG\")
1326import matplotlib.pyplot as plt"))
1327 ;; tostring_rgb() was removed in matplotlib 3.9; use buffer_rgba().
1328 ;; buffer_rgba() returns RGBA (4 channels) instead of RGB (3).
1329 (substitute* "Framework/PythonInterface/test/python/mantid/plots/modest_image/test_modest_image.py"
1330 (("\\.tostring_rgb\\(\\)") ".buffer_rgba()")
1331 (("np\\.fromstring\\(") "np.frombuffer(")
1332 (("np\\.frombuffer\\(([^)]*), sep=\"\"\\)" all args)
1333 (string-append "np.frombuffer(" args ")"))
1334 (("get_width_height\\(\\)\\[::-1\\] \\+ \\(3,\\)")
1335 "get_width_height()[::-1] + (4,)"))
1336 ;; matplotlib 3.10 changed container tracking; container may
1337 ;; already be removed when mantid tries to remove it.
1338 (substitute* "Framework/PythonInterface/mantid/plots/mantidaxes.py"
1339 (("self\\.containers\\.remove\\(artist\\)")
1340 "self.containers.remove(artist) if artist in self.containers else None"))
1341 (substitute* "qt/python/mantidqt/mantidqt/widgets/plotconfigdialog/curvestabwidget/__init__.py"
1342 (("ax\\.containers\\.remove\\(curve\\)")
1343 "ax.containers.remove(curve) if curve in ax.containers else None"))))
1344 (add-after 'qt-wrap 'unwrap-non-executables
1345 (lambda _
1346 ;; qt-wrap wrapped these files thinking they were executables.
1347 ;; Restore them so mantid can read them as config/data files.
1348 (for-each
1349 (lambda (file)
1350 (let ((wrapped (string-append #$output "/bin/" file))
1351 (real (string-append #$output "/bin/." file "-real")))
1352 (when (file-exists? real)
1353 (delete-file wrapped)
1354 (rename-file real wrapped))))
1355 '("Mantid.properties" "mantid-scripts.pth"))))
1356 (add-after 'unwrap-non-executables 'wrap-python
1357 (lambda _
1358 (let* ((python-version #$(version-major+minor (package-version python)))
1359 (bin-dir (string-append #$output "/bin"))
1360 (site-packages (string-append #$output "/lib/python"
1361 python-version "/site-packages")))
1362 (for-each
1363 (lambda (prog)
1364 (wrap-program (string-append bin-dir "/" prog)
1365 `("GUIX_PYTHONPATH" prefix
1366 (,site-packages ,(getenv "GUIX_PYTHONPATH")))
1367 `("PYTHONPATH" prefix (,bin-dir))
1368 `("FORCE_QT_API" = ("PyQt5"))))
1369 '("launch_mantidworkbench" "workbench" "instrumentview")))))
1370 ;; Build test executables (they are EXCLUDE_FROM_ALL in CMake).
1371 (add-before 'check 'build-tests
1372 (lambda* (#:key parallel-build? #:allow-other-keys)
1373 (let ((job-count (if parallel-build?
1374 (number->string (parallel-job-count))
1375 "1")))
1376 (invoke "cmake" "--build" "." "--target" "AllTests"
1377 "-j" job-count))))
1378 ;; Fix PYTHONPATH in test configurations. PyUnitTest.cmake bakes
1379 ;; $ENV{PYTHONPATH} at configure time (empty), so tests can't find
1380 ;; modules. Also, we disable mantid's sitecustomize.py (which would
1381 ;; shadow Guix's), so we need to add all paths it would have added.
1382 (add-before 'check 'fix-test-pythonpath
1383 (lambda _
1384 (let* ((source-dir (string-append (dirname (getcwd)) "/source"))
1385 (build-dir (getcwd))
1386 ;; Core mantid module path (would have been in mantid.pth
1387 ;; if pip --editable was used, but we disabled that).
1388 (mantid-path (string-append source-dir "/Framework/PythonInterface"))
1389 ;; Read paths from .pth files generated by mantid's build
1390 (pth-files '("bin/mantid-scripts.pth"
1391 "bin/testhelpers.pth"))
1392 (pth-paths
1393 (apply append
1394 (map (lambda (pth-file)
1395 (if (file-exists? pth-file)
1396 (string-split
1397 (string-trim-right
1398 (call-with-input-file pth-file
1399 get-string-all))
1400 #\newline)
1401 '()))
1402 pth-files)))
1403 ;; Also add Qt Python packages (not in .pth files)
1404 (qt-paths (list (string-append source-dir "/qt/python/mantidqt")
1405 (string-append source-dir "/qt/python/mantidqtinterfaces")
1406 (string-append source-dir "/qt/python/instrumentview")))
1407 ;; Add workbench module path for tests that import from workbench
1408 (workbench-path (string-append source-dir "/qt/applications/workbench"))
1409 (all-paths (string-join (cons mantid-path (append pth-paths qt-paths (list workbench-path))) ":")))
1410 (substitute* (find-files "." "CTestTestfile\\.cmake$")
1411 ;; Prepend paths to tests that already have PYTHONPATH.
1412 (("PYTHONPATH=")
1413 (string-append "PYTHONPATH=" all-paths ":"))
1414 ;; Add PYTHONPATH to C++ tests that don't have ENVIRONMENT.
1415 ;; FindCxxTest.cmake only sets ENVIRONMENT on WIN32.
1416 ;; Match "PROPERTIES LABELS" (no ENVIRONMENT) to avoid
1417 ;; duplicating on "PROPERTIES ENVIRONMENT" lines.
1418 (("PROPERTIES +LABELS")
1419 (string-append "PROPERTIES ENVIRONMENT \"PYTHONPATH="
1420 all-paths "\" LABELS"))))
1421 ;; Disable mantid's sitecustomize.py - it shadows Guix's and
1422 ;; prevents GUIX_PYTHONPATH from being processed.
1423 (rename-file "bin/sitecustomize.py" "bin/sitecustomize.py.bak")))
1424 ;; Set HOME for tests - mantid's ConfigService needs to create
1425 ;; files in ~/.mantid during initialization. Create the directory
1426 ;; upfront to avoid race conditions when tests run in parallel.
1427 (add-before 'check 'set-home
1428 (lambda _
1429 (setenv "HOME" "/tmp")
1430 (mkdir-p "/tmp/.mantid")))
1431 ;; Start Xvfb for tests that need a display. Matplotlib's
1432 ;; Qt5Agg backend requires a valid X11 or Wayland display
1433 ;; connection because matplotlib checks XOpenDisplay() or
1434 ;; wl_display_connect() before allowing Qt backends, even
1435 ;; though Qt itself works fine with QT_QPA_PLATFORM=offscreen.
1436 ;; This is a matplotlib design decision to prevent Qt from
1437 ;; crashing when DISPLAY is set but invalid - but it also
1438 ;; blocks legitimate headless use.
1439 ;;
1440 ;; We also force Qt5Agg backend via MPLBACKEND because several
1441 ;; tests import matplotlib.pyplot at module level before
1442 ;; @start_qapplication creates a QApplication. When pyplot is
1443 ;; imported without a running Qt, it auto-selects TkAgg (the
1444 ;; default in Guix's matplotlib). Later when Qt starts and the
1445 ;; test calls plt.subplots(), matplotlib tries to use TkAgg but
1446 ;; fails with "Cannot load backend 'TkAgg' which requires the
1447 ;; 'tk' interactive framework, as 'qt' is currently running".
1448 ;; Affected tests:
1449 ;; - workbench/plotting/test/test_figuremanager.py
1450 ;; - mantidqt/widgets/colorbar/test/test_colorbar.py
1451 ;; - instrumentview/test/test_view.py (via FullInstrumentViewWindow)
1452 (add-before 'check 'prepare-x
1453 (lambda _
1454 (system "Xvfb :99 -screen 0 1024x768x24 &")
1455 (setenv "DISPLAY" ":99")
1456 (setenv "MPLBACKEND" "Agg")))
1457 ;; Exclude tests that require external data files (not available
1458 ;; in the build sandbox without network access). We exclude
1459 ;; specific tests that use FileFinder/Load to access external
1460 ;; data rather than whole modules.
1461 (replace 'check
1462 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
1463 (when tests?
1464 (setenv "OMP_NUM_THREADS" "10")
1465 (setenv "OPENBLAS_NUM_THREADS" "10")
1466 ;; They forgot to omp_pause_resource(omp_pause_soft, 0)
1467 ;; at the end of the test suite--and now random tests
1468 ;; were caught in a death race.
1469 (setenv "MALLOC_CONF" "tcache:false") ; doesn't work
1470 ;(setenv "OMP_WAIT_POLICY" "passive")
1471 ;; Exclude unit tests that need external data or have
1472 ;; other issues. System tests are excluded via -L UnitTest.
1473 (let ((exclude-pattern
1474 (string-join
1475 '(;;; C++ Kernel tests needing external data or
1476 ;;; system info not available in sandbox.
1477 "KernelTest_FileDescriptorTest" ; needs external data
1478 "KernelTest_LegacyNexusDescriptorTest" ; needs external data
1479 "KernelTest_AttenuationProfileTest" ; needs external data
1480 "KernelTest_ConfigServiceTest" ; empty username and OS version in sandbox
1481 ;;; C++ API tests needing external data.
1482 "APITest_ScriptBuilderTest" ; needs external data
1483 "APITest_ExperimentInfoTest" ; needs external data
1484 "APITest_FileBackedExperimentInfoTest" ; needs external data
1485 "APITest_FileFinderTest" ; needs external data
1486 "APITest_FileLoaderRegistryTest" ; needs external data
1487 "APITest_FilePropertyTest" ; needs external data
1488 "APITest_GroupingLoaderTest" ; needs external data
1489 "APITest_WorkspaceHistoryIOTest" ; needs external data
1490 ;;; C++ Algorithms tests needing external data.
1491 "AlgorithmsTest_AppendSpectraTest" ; needs external data
1492 "AlgorithmsTest_ApplyCalibrationTest" ; needs external data
1493 "AlgorithmsTest_ApplyTransmissionCorrectionTest" ; needs external data
1494 "AlgorithmsTest_CalculateEfficiencyTest" ; needs external data
1495 "AlgorithmsTest_CalculateTransmissionTest" ; needs external data
1496 "AlgorithmsTest_ChangeBinOffsetTest" ; needs external data
1497 "AlgorithmsTest_CloneWorkspaceTest" ; needs external data
1498 "AlgorithmsTest_ConjoinWorkspacesTest" ; needs external data
1499 "AlgorithmsTest_ConvertSpectrumAxisTest" ; needs external data
1500 "AlgorithmsTest_CorrectKiKfTest" ; needs external data
1501 "AlgorithmsTest_CorrectToFileTest" ; needs external data
1502 "AlgorithmsTest_CropToComponentTest" ; needs external data
1503 "AlgorithmsTest_DiffractionFocussing2Test" ; needs external data
1504 "AlgorithmsTest_DiffractionFocussingTest" ; needs external data
1505 "AlgorithmsTest_ExtractFFTSpectrumTest" ; needs external data
1506 "AlgorithmsTest_FFTSmooth2Test" ; needs external data
1507 "AlgorithmsTest_FilterBadPulsesTest" ; needs external data
1508 "AlgorithmsTest_FindCenterOfMassPosition2Test" ; needs external data
1509 "AlgorithmsTest_FindPeaksConvolveTest" ; needs external data
1510 "AlgorithmsTest_FindPeaksTest" ; needs external data
1511 "AlgorithmsTest_FitPeaksTest" ; needs external data
1512 "AlgorithmsTest_GetEiTest" ; needs external data
1513 "AlgorithmsTest_IdentifyNoisyDetectorsTest" ; needs external data
1514 "AlgorithmsTest_MultiplyRangeTest" ; needs external data
1515 "AlgorithmsTest_Q1D2Test" ; needs external data
1516 "AlgorithmsTest_Q1DWeightedTest" ; needs external data
1517 "AlgorithmsTest_QxyTest" ; needs external data
1518 "AlgorithmsTest_RebinRagged2Test" ; needs external data
1519 "AlgorithmsTest_RemoveSpectraTest" ; needs external data
1520 "AlgorithmsTest_SofQWCentreTest" ; needs external data (via SofQWTest.h)
1521 "AlgorithmsTest_SofQWCutTest" ; needs external data
1522 "AlgorithmsTest_SofQWNormalisedPolygonTest" ; needs external data (via SofQWTest.h)
1523 "AlgorithmsTest_SofQWPolygonTest" ; needs external data (via SofQWTest.h)
1524 "AlgorithmsTest_SofQWTest" ; needs external data
1525 "AlgorithmsTest_StripVanadiumPeaks2Test" ; needs external data
1526 "AlgorithmsTest_StripVanadiumPeaksTest" ; needs external data
1527 "AlgorithmsTest_SumEventsByLogValueTest" ; needs external data
1528 "AlgorithmsTest_SumOverlappingTubesTest" ; needs external data
1529 "AlgorithmsTest_TransposeTest" ; needs external data
1530 "AlgorithmsTest_WeightedMeanTest" ; needs external data
1531 "AlgorithmsTest_CreateGroupingWorkspaceTest" ; needs external data
1532 "AlgorithmsTest_EstimateResolutionDiffractionTest" ; needs external data
1533 "AlgorithmsTest_MaskDetectorsIfTest" ; excluded: unknown reason
1534 "AlgorithmsTest_VesuvioL1ThetaResolutionTest" ; excluded: unknown reason
1535 ;;; C++ Crystal tests needing external data.
1536 "CrystalTest_CentroidPeaksTest" ; needs external data
1537 "CrystalTest_FindUBUsingFFTTest" ; needs external data
1538 "CrystalTest_FindUBUsingIndexedPeaksTest" ; needs external data
1539 "CrystalTest_FindUBUsingLatticeParametersTest" ; needs external data
1540 "CrystalTest_GoniometerAnglesFromPhiRotationTest" ; needs external data
1541 "CrystalTest_IndexSXPeaksTest" ; needs external data
1542 "CrystalTest_LoadIsawPeaksTest" ; needs external data
1543 "CrystalTest_LoadIsawUBTest" ; needs external data
1544 "CrystalTest_OptimizeCrystalPlacementTest" ; needs external data
1545 "CrystalTest_OptimizeLatticeForCellTypeTest" ; needs external data
1546 "CrystalTest_PeakHKLErrorsTest" ; needs external data
1547 "CrystalTest_PeakIntegrationTest" ; needs external data
1548 "CrystalTest_PredictFractionalPeaksTest" ; needs external data
1549 "CrystalTest_PredictSatellitePeaksTest" ; needs external data
1550 "CrystalTest_SCDCalibratePanels2ObjFuncTest" ; needs external data
1551 "CrystalTest_SCDCalibratePanels2Test" ; needs external data
1552 "CrystalTest_SCDCalibratePanelsTest" ; needs external data
1553 "CrystalTest_SaveIsawPeaksTest" ; needs external data
1554 "CrystalTest_SaveIsawUBTest" ; needs external data
1555 "CrystalTest_SaveLauenormTest" ; needs external data
1556 "CrystalTest_SelectCellOfTypeTest" ; needs external data
1557 "CrystalTest_SelectCellWithFormTest" ; needs external data
1558 "CrystalTest_SetCrystalLocationTest" ; needs external data
1559 "CrystalTest_ShowPeakHKLOffsetsTest" ; needs external data
1560 "CrystalTest_ShowPossibleCellsTest" ; needs external data
1561 "CrystalTest_TransformHKLTest" ; needs external data
1562 "CrystalTest_LoadIsawSpectrumTest" ; needs external data
1563 ;;; C++ CurveFitting tests needing external data.
1564 "CurveFittingTest_ConvolutionFitSequentialTest" ; needs external data
1565 "CurveFittingTest_FitPowderDiffPeaksTest" ; needs external data
1566 "CurveFittingTest_FunctionQDependsTest" ; needs external data
1567 "CurveFittingTest_PlotPeakByLogValueHelperTest" ; needs external data
1568 "CurveFittingTest_ProfileChiSquared1DTest" ; needs external data
1569 "CurveFittingTest_TabulatedFunctionTest" ; needs external data
1570 ;;; C++ DataHandling tests.
1571 ;;; Most need external data files not available in
1572 ;;; the build sandbox. Additionally, ALL tests share
1573 ;;; one binary (DataHandlingTest), and Mantid's
1574 ;;; Strings::randomString() (Strings.cpp) calls
1575 ;;; rand() without srand(), so every parallel ctest
1576 ;;; process generates identical temp filenames.
1577 ;;; Under ctest -j N, parallel DataHandlingTest
1578 ;;; processes race on these files (ENOENT from
1579 ;;; prepareFile() deleting another process's file,
1580 ;;; EAGAIN from HDF5 fcntl locks).
1581 "DataHandlingTest_AlignAndFocusPowderSlimTest" ; needs external data
1582 "DataHandlingTest_DetermineChunkingTest" ; needs external data
1583 "DataHandlingTest_GroupDetectors2Test" ; needs external data
1584 "DataHandlingTest_LoadBBY2Test" ; needs external data
1585 "DataHandlingTest_LoadBBYTest" ; needs external data
1586 "DataHandlingTest_LoadCSNSNexusTest" ; needs external data
1587 "DataHandlingTest_LoadCalFileTest" ; needs external data
1588 "DataHandlingTest_LoadCanSAS1dTest" ; needs external data
1589 "DataHandlingTest_LoadDNSEventTest" ; needs external data
1590 "DataHandlingTest_LoadDaveGrpTest" ; needs external data
1591 "DataHandlingTest_LoadDetectorInfoTest" ; needs external data
1592 "DataHandlingTest_LoadDetectorsGroupingFileTest" ; needs external data
1593 "DataHandlingTest_LoadEMUauTest" ; needs external data
1594 "DataHandlingTest_LoadErrorEventsNexusTest" ; needs external data
1595 "DataHandlingTest_LoadEventNexusTest" ; needs external data
1596 "DataHandlingTest_LoadEventPreNexus2Test" ; needs external data
1597 "DataHandlingTest_LoadFITSTest" ; needs external data
1598 "DataHandlingTest_LoadGSSTest" ; needs external data
1599 "DataHandlingTest_LoadHFIRSANSTest" ; needs external data
1600 "DataHandlingTest_LoadIDFFromNexusTest" ; needs external data
1601 "DataHandlingTest_LoadILLDiffractionTest" ; needs external data
1602 "DataHandlingTest_LoadILLIndirect2Test" ; needs external data
1603 "DataHandlingTest_LoadILLLagrangeTest" ; needs external data
1604 "DataHandlingTest_LoadILLPolarizationFactorsTest" ; needs external data
1605 "DataHandlingTest_LoadILLPolarizedDiffractionTest" ; needs external data
1606 "DataHandlingTest_LoadILLReflectometryTest" ; needs external data
1607 "DataHandlingTest_LoadILLSALSATest" ; needs external data
1608 "DataHandlingTest_LoadILLSANSTest" ; needs external data
1609 "DataHandlingTest_LoadILLTOF2Test" ; needs external data
1610 "DataHandlingTest_LoadILLTOF3Test" ; needs external data
1611 "DataHandlingTest_LoadILLTest" ; needs external data
1612 "DataHandlingTest_LoadISISNexusTest" ; needs external data
1613 "DataHandlingTest_LoadInstrumentFromRawTest" ; needs external data
1614 "DataHandlingTest_LoadIsawDetCalTest" ; needs external data
1615 "DataHandlingTest_LoadLogTest" ; needs external data
1616 "DataHandlingTest_LoadMLZTest" ; needs external data
1617 "DataHandlingTest_LoadMappingTableTest" ; needs external data
1618 "DataHandlingTest_LoadMaskTest" ; needs external data
1619 "DataHandlingTest_LoadMcStasNexusTest" ; needs external data
1620 "DataHandlingTest_LoadMcStasTest" ; needs external data
1621 "DataHandlingTest_LoadMuonNexusV2Test" ; needs external data
1622 "DataHandlingTest_LoadNGEMTest" ; needs external data
1623 "DataHandlingTest_LoadNXSPETest" ; needs external data
1624 "DataHandlingTest_LoadNXcanSASTest" ; needs external data
1625 "DataHandlingTest_LoadNexusLogsTest" ; needs external data
1626 "DataHandlingTest_LoadNexusMonitorsTest" ; needs external data
1627 "DataHandlingTest_LoadNexusProcessedTest" ; needs external data
1628 "DataHandlingTest_LoadNexusTest" ; needs external data
1629 "DataHandlingTest_LoadPDFgetNFileTest" ; needs external data
1630 "DataHandlingTest_LoadPLNTest" ; needs external data
1631 "DataHandlingTest_LoadPLNnxsTest" ; needs external data
1632 "DataHandlingTest_LoadPreNexusMonitorsTest" ; needs external data
1633 "DataHandlingTest_LoadPreNexusTest" ; needs external data
1634 "DataHandlingTest_LoadQKKTest" ; needs external data
1635 "DataHandlingTest_LoadRKHTest" ; needs external data
1636 "DataHandlingTest_LoadRawBin0Test" ; needs external data
1637 "DataHandlingTest_LoadRawSaveNxsLoadNxsTest" ; needs external data
1638 "DataHandlingTest_LoadRawSpectrum0Test" ; needs external data
1639 "DataHandlingTest_LoadSINQFocusTest" ; needs external data
1640 "DataHandlingTest_LoadSPETest" ; needs external data
1641 "DataHandlingTest_LoadSampleDetailsFromRawTest" ; needs external data
1642 "DataHandlingTest_LoadSampleShapeTest" ; needs external data
1643 "DataHandlingTest_LoadSassenaTest" ; needs external data
1644 "DataHandlingTest_LoadSpecTest" ; needs external data
1645 "DataHandlingTest_LoadSpice2dTest" ; needs external data
1646 "DataHandlingTest_LoadSpiceAsciiTest" ; needs external data
1647 "DataHandlingTest_LoadSpiceXML2DDetTest" ; needs external data
1648 "DataHandlingTest_LoadSwansTest" ; needs external data
1649 "DataHandlingTest_LoadTOFRawNexusTest" ; needs external data
1650 "DataHandlingTest_LoadTest" ; needs external data
1651 "DataHandlingTest_ModifyDetectorDotDatFileTest" ; needs external data
1652 "DataHandlingTest_PDLoadCharacterizationsTest" ; needs external data
1653 "DataHandlingTest_RawFileInfoTest" ; needs external data
1654 "DataHandlingTest_SNSAppendGeometryToNexusTest" ; needs external data
1655 "DataHandlingTest_SaveBankScatteringAnglesTest" ; needs external data
1656 "DataHandlingTest_SaveCanSAS1dTest" ; needs external data
1657 "DataHandlingTest_SaveCanSAS1dTest2" ; needs external data
1658 "DataHandlingTest_SaveDaveGrpTest" ; needs external data
1659 "DataHandlingTest_SaveDetectorsGroupingTest" ; needs external data
1660 "DataHandlingTest_SaveGSASInstrumentFileTest" ; needs external data
1661 "DataHandlingTest_SaveMaskTest" ; needs external data
1662 "DataHandlingTest_SaveNISTDATTest" ; needs external data
1663 "DataHandlingTest_SaveNexusTest" ; needs external data
1664 "DataHandlingTest_SaveOpenGenieAsciiTest" ; needs external data
1665 "DataHandlingTest_SavePDFGuiTest" ; needs external data
1666 "DataHandlingTest_SaveRMCProfileTest" ; needs external data
1667 "DataHandlingTest_CreateSimulationWorkspaceTest" ; needs external data
1668 "DataHandlingTest_GenerateGroupingPowder2Test" ; needs external data
1669 "DataHandlingTest_GenerateGroupingPowderTest" ; needs external data
1670 "DataHandlingTest_LoadAsciiStlTest" ; needs external data
1671 "DataHandlingTest_LoadBinaryStlTest" ; needs external data
1672 "DataHandlingTest_LoadEmptyInstrumentTest" ; needs external data
1673 "DataHandlingTest_LoadEventAsWorkspace2DTest" ; needs external data
1674 "DataHandlingTest_LoadNexusProcessed2Test" ; needs external data
1675 "DataHandlingTest_LoadPSIMuonBinTest" ; needs external data
1676 "DataHandlingTest_LoadRaw3Test" ; needs external data
1677 "DataHandlingTest_LoadSESANSTest" ; needs external data
1678 "DataHandlingTest_LoadSampleEnvironmentTest" ; needs external data
1679 "DataHandlingTest_MeshFileIOTest" ; needs external data
1680 "DataHandlingTest_SampleEnvironmentSpecParserTest" ; needs external data
1681 "DataHandlingTest_SaveGSSTest" ; needs external data
1682 "DataHandlingTest_SaveNexusESSTest" ; needs external data
1683 "DataHandlingTest_SaveNexusProcessedTest" ; needs external data
1684 "DataHandlingTest_SaveReflectometryAsciiTest" ; needs external data
1685 "DataHandlingTest_SaveStlTest" ; needs external data
1686 "DataHandlingTest_SetScalingPSDTest" ; needs external data
1687 "DataHandlingTest_StartAndEndTimeFromNexusFileExtractorTest" ; needs external data
1688 "DataHandlingTest_UpdateInstrumentFromFileTest" ; needs external data
1689 "DataHandlingTest_XMLInstrumentParameterTest" ; needs external data
1690 "DataHandlingTest_ProcessBankSplitFullTimeTaskTest" ; needs external data
1691 "DataHandlingTest_LoadNXcanSASPerformanceTest2D" ; rand() temp file race
1692 "DataHandlingTest_SaveNXcanSASTest" ; rand() temp file race
1693 "DataHandlingTest_SavePolarizedNXcanSASTest" ; rand() temp file race
1694 "LegacyNexusTest_LegacyNeXusFileLeakTest" ; needs external data
1695 "LegacyNexusTest_LegacyNeXusFileNapiTest" ; needs external data
1696 "LegacyNexusTest_LegacyNeXusFileReadTest" ; needs external data
1697 "LegacyNexusTest_LegacyNeXusFileTest" ; needs external data
1698 "LiveDataTest_FileEventDataListenerTest" ; needs external data
1699 "MDAlgorithmsTest_ConvertCWPDMDToSpectraTest" ; needs external data
1700 "MDAlgorithmsTest_ConvertCWSDExpToMomentumTest" ; needs external data
1701 "MDAlgorithmsTest_ConvertHFIRSCDtoMDETest" ; needs external data
1702 "MDAlgorithmsTest_ConvertSpiceDataToRealSpaceTest" ; needs external data
1703 "MDAlgorithmsTest_GetSpiceDataRawCountsFromMDTest" ; needs external data
1704 "MDAlgorithmsTest_IntegrateEllipsoidsTest" ; needs external data
1705 "MDAlgorithmsTest_LoadDNSSCDTest" ; needs external data
1706 "MDAlgorithmsTest_LoadGaussCubeTest" ; needs external data
1707 "MDAlgorithmsTest_LoadMDTest" ; needs external data
1708 "MDAlgorithmsTest_LoadSQW2Test" ; needs external data
1709 "MDAlgorithmsTest_LoadSQWTest" ; needs external data
1710 "MantidQtInterfacesDirectTestQt5_ALFInstrumentModelTest" ; needs external data
1711 "MantidQtInterfacesIndirectTestQt5_ISISEnergyTransferModelTest" ; needs external data
1712 "MantidQtInterfacesIndirectTestQt5_ISISEnergyTransferModelUtilsTest" ; needs external data
1713 "MantidQtInterfacesInelasticTestQt5_ElwinModelTest" ; needs external data
1714 "MantidQtInterfacesMuonTestQt5_ALCDataLoadingPresenterTest" ; needs external data
1715 "MantidQtWidgetsCommonTestQt5_FindFilesWorkerTest" ; needs external data
1716 "MantidScientificInterfacesISISReflectometryTestQt5_DecoderTest" ; needs external data
1717 "MuonTest_AlphaCalcTest" ; needs external data
1718 "MuonTest_ApplyDeadTimeCorrTest" ; needs external data
1719 "MuonTest_AsymmetryCalcTest" ; needs external data
1720 "MuonTest_CalMuonDeadTimeTest" ; needs external data
1721 "MuonTest_LoadInstrumentFromNexusTest" ; needs external data
1722 "MuonTest_LoadMuonLogTest" ; needs external data
1723 "MuonTest_LoadMuonNexus1Test" ; needs external data
1724 "MuonTest_LoadMuonNexus2Test" ; needs external data
1725 "MuonTest_LoadMuonNexus3Test" ; needs external data
1726 "MuonTest_PhaseQuadMuonTest" ; needs external data
1727 "MuonTest_PlotAsymmetryByLogValueTest" ; needs external data
1728 "NexusTest_NexusClassesTest" ; needs external data
1729 "NexusTest_NexusDescriptorLazyTest" ; needs external data
1730 "NexusTest_NexusDescriptorTest" ; needs external data
1731 "NexusTest_NexusFileTest" ; needs external data
1732 "NexusTest_NexusIOHelperTest" ; needs external data
1733 "PSISINQTest_LoadFlexiNexusTest" ; needs external data
1734 "ReflectometryTest_CreateTransmissionWorkspaceAuto2Test" ; needs external data
1735 "ReflectometryTest_ReflectometryReductionOneAuto2Test" ; needs external data
1736 "ReflectometryTest_ReflectometryReductionOneAuto3Test" ; needs external data
1737 "WorkflowAlgorithmsTest_AlignAndFocusPowderTest" ; needs external data
1738 "WorkflowAlgorithmsTest_ExtractQENSMembersTest" ; needs external data
1739 "WorkflowAlgorithmsTest_LoadEventAndCompressTest" ; needs external data
1740 "WorkflowAlgorithmsTest_MuonProcessTest" ; needs external data
1741 "WorkflowAlgorithmsTest_SANSSolidAngleCorrectionTest" ; needs external data
1742 ;;; Python tests needing external data files.
1743 "python.algorithms.Abins2DBasicTest.Abins2DBasicTest" ; needs external data
1744 "python.algorithms.SaveReflectionsTest.SaveReflectionsTest" ; needs external data
1745 "python.api.WorkspaceHistoryTest.WorkspaceHistoryTest"
1746 "mantidqt_qt5.test_samplelogs_model.test_samplelogs_model" ; needs external data
1747 "workbench.test_workspacewidget.test_workspacewidget"
1748 "python.Calibration.test_tube.test_tube"
1749 "python.Calibration.test_tube_calib.test_tube_calib"
1750 "python.Calibration.tofpd.test_diagnostics.test_diagnostics" ; needs external data
1751 "python.DNSReductionQt5.dns_file_test.dns_file_test" ; needs external data
1752 "python.Engineering.test_pawley_utils.test_pawley_utils" ; needs external data
1753 "python.EngineeringDiffraction.test_gsas2_model.test_gsas2_model" ; needs external data
1754 "python.IsisPowder.ISISPowderAbstractInstrumentTest.ISISPowderAbstractInstrumentTest" ; needs external data
1755 "python.IsisPowder.ISISPowderCommonTest.ISISPowderCommonTest"
1756 "python.MuonQt5.corrections_model_test.corrections_model_test" ; needs external data
1757 "python.MuonQt5.dead_time_corrections_model_test.dead_time_corrections_model_test" ; needs external data
1758 "python.MuonQt5.fft_presenter_context_interaction_test.fft_presenter_context_interaction_test" ; needs external data
1759 "python.MuonQt5.home_runinfo_presenter_test.home_runinfo_presenter_test" ; needs external data
1760 "python.MuonQt5.load_utils_test.load_utils_test" ; needs external data
1761 "python.MuonQt5.loadfile_model_test.loadfile_model_test" ; needs external data
1762 "python.MuonQt5.loadwidget_presenter_multiple_file_test.loadwidget_presenter_multiple_file_test" ; needs external data
1763 "python.MuonQt5.loadwidget_presenter_test.loadwidget_presenter_test" ; needs external data
1764 "python.MuonQt5.max_ent_presenter_load_interaction_test.max_ent_presenter_load_interaction_test" ; needs external data
1765 "python.MuonQt5.muon_context_test.muon_context_test" ; needs external data
1766 "python.MuonQt5.muon_context_with_frequency_test.muon_context_with_frequency_test" ; needs external data
1767 "python.MuonQt5.muon_data_context_test.muon_data_context_test" ; needs external data
1768 "python.MuonQt5.results_tab_model_test.results_tab_model_test" ; needs external data
1769 "python.MuonQt5.workspace_naming_test.workspace_naming_test" ; needs external data
1770 "python.SANS.SANSadd2Test.SANSadd2Test"
1771 "python.SANS.algorithm_detail.calculate_sans_transmission_test.calculate_sans_transmission_test"
1772 "python.SANS.algorithm_detail.calculate_transmission_helper_test.calculate_transmission_helper_test"
1773 "python.SANS.algorithm_detail.create_sans_adjustment_workspaces_test.create_sans_adjustment_workspaces_test"
1774 "python.SANS.algorithm_detail.crop_helper_test.crop_helper_test"
1775 "python.SANS.algorithm_detail.mask_sans_workspace_test.mask_sans_workspace_test"
1776 "python.SANS.command_interface.command_interface_state_director_test.command_interface_state_director_test" ; needs external data
1777 "python.SimpleAPILoadTest.SimpleAPILoadTest" ; needs external data
1778 "python.WorkflowAlgorithms.ApplyPaalmanPingsCorrectionTest.ApplyPaalmanPingsCorrectionTest" ; needs external data
1779 "python.WorkflowAlgorithms.BayesQuasi2Test.BayesQuasi2Test" ; needs external data
1780 "python.WorkflowAlgorithms.BayesQuasiTest.BayesQuasiTest" ; needs external data
1781 "python.WorkflowAlgorithms.BayesStretch2Test.BayesStretch2Test" ; needs external data
1782 "python.WorkflowAlgorithms.BayesStretchTest.BayesStretchTest" ; needs external data
1783 "python.WorkflowAlgorithms.CalculateMonteCarloAbsorptionTest.CalculateMonteCarloAbsorptionTest" ; needs external data
1784 "python.WorkflowAlgorithms.D4ILLReductionTest.D4ILLReductionTest" ; needs external data
1785 "python.WorkflowAlgorithms.D7AbsoluteCrossSectionsTest.D7AbsoluteCrossSectionsTest" ; needs external data
1786 "python.WorkflowAlgorithms.D7YIGPositionCalibrationTest.D7YIGPositionCalibrationTest" ; needs external data
1787 "python.WorkflowAlgorithms.DirectILLAutoProcessTest.DirectILLAutoProcessTest"
1788 "python.WorkflowAlgorithms.DirectILLCollectDataTest.DirectILLCollectDataTest" ; needs external data
1789 "python.WorkflowAlgorithms.EnergyWindowScanTest.EnergyWindowScanTest" ; needs external data
1790 "python.WorkflowAlgorithms.HFIRPowderReductionTest.HFIRPowderReductionTest" ; needs external data
1791 "python.WorkflowAlgorithms.ISISIndirectDiffractionReductionTest.ISISIndirectDiffractionReductionTest" ; needs external data
1792 "python.WorkflowAlgorithms.ISISIndirectEnergyTransferTest.ISISIndirectEnergyTransferTest" ; needs external data
1793 "python.WorkflowAlgorithms.IndirectAnnulusAbsorption2Test.IndirectAnnulusAbsorption2Test" ; needs external data
1794 "python.WorkflowAlgorithms.IndirectAnnulusAbsorptionTest.IndirectAnnulusAbsorptionTest" ; needs external data
1795 "python.WorkflowAlgorithms.IndirectCalibrationTest.IndirectCalibrationTest" ; needs external data
1796 "python.WorkflowAlgorithms.IndirectCylinderAbsorption2Test.IndirectCylinderAbsorption2Test" ; needs external data
1797 "python.WorkflowAlgorithms.IndirectCylinderAbsorptionTest.IndirectCylinderAbsorptionTest" ; needs external data
1798 "python.WorkflowAlgorithms.IndirectDiffScanTest.IndirectDiffScanTest" ; needs external data
1799 "python.WorkflowAlgorithms.IndirectFlatPlateAbsorption2Test.IndirectFlatPlateAbsorption2Test" ; needs external data
1800 "python.WorkflowAlgorithms.IndirectFlatPlateAbsorptionTest.IndirectFlatPlateAbsorptionTest" ; needs external data
1801 "python.WorkflowAlgorithms.IndirectILLEnergyTransferTest.IndirectILLEnergyTransferTest"
1802 "python.WorkflowAlgorithms.IndirectILLReductionDIFFTest.IndirectILLReductionDIFFTest"
1803 "python.WorkflowAlgorithms.IndirectILLReductionFWSTest.IndirectILLReductionFWSTest"
1804 "python.WorkflowAlgorithms.IndirectILLReductionQENSTest.IndirectILLReductionQENSTest"
1805 "python.WorkflowAlgorithms.IndirectReplaceFitResultTest.IndirectReplaceFitResultTest" ; needs external data
1806 "python.WorkflowAlgorithms.IndirectResolutionTest.IndirectResolutionTest" ; needs external data
1807 "python.WorkflowAlgorithms.IndirectSampleChangerTest.IndirectSampleChangerTest"
1808 "python.WorkflowAlgorithms.IndirectTransmissionMonitorTest.IndirectTransmissionMonitorTest" ; needs external data
1809 "python.WorkflowAlgorithms.IndirectTwoPeakFitTest.IndirectTwoPeakFitTest"
1810 "python.WorkflowAlgorithms.IqtFitMultipleTest.IqtFitMultipleTest" ; needs external data
1811 "python.WorkflowAlgorithms.IqtFitSequentialTest.IqtFitSequentialTest" ; needs external data
1812 "python.WorkflowAlgorithms.LagrangeILLReductionTest.LagrangeILLReductionTest" ; needs external data
1813 "python.WorkflowAlgorithms.LoadWANDTest.LoadWANDTest" ; needs external data
1814 "python.WorkflowAlgorithms.MDNormSCDPreprocessIncoherentTest.MDNormSCDPreprocessIncoherentTest"
1815 "python.WorkflowAlgorithms.OSIRISDiffractionReductionTest.OSIRISDiffractionReductionTest" ; needs external data
1816 "python.WorkflowAlgorithms.PaalmanPingsMonteCarloAbsorptionTest.PaalmanPingsMonteCarloAbsorptionTest" ; needs external data
1817 "python.WorkflowAlgorithms.PolDiffILLReductionTest.PolDiffILLReductionTest"
1818 "python.WorkflowAlgorithms.PowderILLDetectorScanTest.PowderILLDetectorScanTest"
1819 "python.WorkflowAlgorithms.PowderILLParameterScanTest.PowderILLParameterScanTest"
1820 "python.WorkflowAlgorithms.QuickBayesHelperTest.QuickBayesHelperTest" ; needs external data
1821 "python.WorkflowAlgorithms.ReflectometryILLAutoProcessTest.ReflectometryILLAutoProcessTest"
1822 "python.WorkflowAlgorithms.ReflectometryILLConvertToQTest.ReflectometryILLConvertToQTest" ; needs external data
1823 "python.WorkflowAlgorithms.ReflectometryILLPolarizationCorTest.ReflectometryILLPolarizationCorTest" ; needs external data
1824 "python.WorkflowAlgorithms.ReflectometryILLPreprocessTest.ReflectometryILLPreprocessTest" ; needs external data
1825 "python.WorkflowAlgorithms.ReflectometryILLSumForegroundTest.ReflectometryILLSumForegroundTest" ; needs external data
1826 "python.WorkflowAlgorithms.ReflectometryISISCalibrationTest.ReflectometryISISCalibrationTest" ; needs external data
1827 "python.WorkflowAlgorithms.ReflectometryISISCreateTransmissionTest.ReflectometryISISCreateTransmissionTest"
1828 "python.WorkflowAlgorithms.ReflectometryISISLoadAndProcessTest.ReflectometryISISLoadAndProcessTest" ; needs external data
1829 "python.WorkflowAlgorithms.ReflectometryISISPreprocessTest.ReflectometryISISPreprocessTest" ; needs external data
1830 "python.WorkflowAlgorithms.ResNorm2Test.ResNorm2Test" ; needs external data
1831 "python.WorkflowAlgorithms.SANSDarkRunBackgroundCorrectionTest.SANSDarkRunBackgroundCorrectionTest" ; needs external data
1832 "python.WorkflowAlgorithms.SANSILLAutoProcessTest.SANSILLAutoProcessTest"
1833 "python.WorkflowAlgorithms.SANSILLIntegrationTest.SANSILLIntegrationTest"
1834 "python.WorkflowAlgorithms.SANSILLMultiProcessTest.SANSILLMultiProcessTest"
1835 "python.WorkflowAlgorithms.SANSILLParameterScanTest.SANSILLParameterScanTest" ; needs external data
1836 "python.WorkflowAlgorithms.SANSILLReduction2Test.SANSILLReduction2Test"
1837 "python.WorkflowAlgorithms.SANSILLReductionTest.SANSILLReductionTest"
1838 "python.WorkflowAlgorithms.SimpleShapeDiscusInelasticTest.SimpleShapeDiscusInelasticTest" ; needs external data
1839 "python.WorkflowAlgorithms.SimpleShapeMonteCarloAbsorptionTest.SimpleShapeMonteCarloAbsorptionTest" ; needs external data
1840 "python.WorkflowAlgorithms.SimulatedDensityOfStatesTest.SimulatedDensityOfStatesTest" ; needs external data
1841 "python.WorkflowAlgorithms.SofQWMomentsScanTest.SofQWMomentsScanTest"
1842 "python.WorkflowAlgorithms.SofQWMomentsTest.SofQWMomentsTest"
1843 "python.WorkflowAlgorithms.SwapWidthsTest.SwapWidthsTest" ; needs external data
1844 "python.WorkflowAlgorithms.TOSCABankCorrectionTest.TOSCABankCorrectionTest" ; needs external data
1845 "python.WorkflowAlgorithms.TimeSliceTest.TimeSliceTest" ; needs external data
1846 "python.WorkflowAlgorithms.TransformToIqtTest.TransformToIqtTest"
1847 "python.WorkflowAlgorithms.VesuvioDiffractionReductionTest.VesuvioDiffractionReductionTest" ; needs external data
1848 "python.algorithms.Abins2BasicTest.Abins2BasicTest" ; needs external data
1849 "python.algorithms.AbinsAdvancedParametersTest.AbinsAdvancedParametersTest"
1850 "python.algorithms.AbinsBasicTest.AbinsBasicTest" ; needs external data
1851 "python.algorithms.AngularAutoCorrelationsSingleAxisTest.AngularAutoCorrelationsSingleAxisTest" ; needs external data
1852 "python.algorithms.AngularAutoCorrelationsTwoAxesTest.AngularAutoCorrelationsTwoAxesTest" ; needs external data
1853 "python.algorithms.AnstoCommonSearchTest.AnstoCommonSearchTest" ; needs external data
1854 "python.algorithms.ApplyDetectorScanEffCorrTest.ApplyDetectorScanEffCorrTest" ; needs external data
1855 "python.algorithms.CalculateEfficiencyCorrectionTest.CalculateEfficiencyCorrectionTest" ; needs external data
1856 "python.algorithms.CheckForSampleLogsTest.CheckForSampleLogsTest" ; needs external data
1857 "python.algorithms.ConvertQtoHKLMDHistoTest.ConvertQtoHKLMDHistoTest" ; needs external data
1858 "python.algorithms.CorrectLogTimesTest.CorrectLogTimesTest" ; needs external data
1859 "python.algorithms.CreateLeBailFitInputTest.CreateLeBailFitInputTest" ; needs external data
1860 "python.algorithms.DakotaChiSquaredTest.DakotaChiSquaredTest" ; needs external data
1861 "python.algorithms.EnggCalibrateFullTest.EnggCalibrateFullTest" ; needs external data
1862 "python.algorithms.EnggCalibrateTest.EnggCalibrateTest" ; needs external data
1863 "python.algorithms.EnggFocusTest.EnggFocusTest" ; needs external data
1864 "python.algorithms.EnggVanadiumCorrectionsTest.EnggVanadiumCorrectionsTest" ; needs external data
1865 "python.algorithms.FilterLogByTimeTest.FilterLogByTimeTest" ; needs external data
1866 "python.algorithms.FindGoniometerFromUBTest.FindGoniometerFromUBTest"
1867 "python.algorithms.GetEiT0atSNSTest.GetEiT0atSNSTest" ; needs external data
1868 "python.algorithms.GroupBySampleChangerPositionTest.GroupBySampleChangerPositionTest" ; needs external data
1869 "python.algorithms.HB2AReduceTest.HB2AReduceTest" ; needs external data
1870 "python.algorithms.HB3AAdjustSampleNormTest.HB3AAdjustSampleNormTest" ; needs external data
1871 "python.algorithms.HB3AFindPeaksTest.HB3AFindPeaksTest" ; needs external data
1872 "python.algorithms.HB3AIntegrateDetectorPeaksTest.HB3AIntegrateDetectorPeaksTest" ; needs external data
1873 "python.algorithms.HB3AIntegratePeaksTest.HB3AIntegratePeaksTest" ; needs external data
1874 "python.algorithms.HB3APredictPeaksTest.HB3APredictPeaksTest" ; needs external data
1875 "python.algorithms.IndexSatellitePeaksTest.IndexSatellitePeaksTest" ; needs external data
1876 "python.algorithms.LRDirectBeamSortTest.LRDirectBeamSortTest" ; needs external data
1877 "python.algorithms.LoadAndMergeTest.LoadAndMergeTest"
1878 "python.algorithms.LoadDNSLegacyTest.LoadDNSLegacyTest" ; needs external data
1879 "python.algorithms.LoadEmptyVesuvioTest.LoadEmptyVesuvioTest" ; needs external data
1880 "python.algorithms.LoadGudrunOutputTest.LoadGudrunOutputTest"
1881 "python.algorithms.LoadLampTest.LoadLampTest" ; needs external data
1882 "python.algorithms.LoadLogPropertyTableTest.LoadLogPropertyTableTest" ; needs external data
1883 "python.algorithms.LoadNMoldyn3AsciiTest.LoadNMoldyn3AsciiTest" ; needs external data
1884 "python.algorithms.LoadNMoldyn4Ascii1DTest.LoadNMoldyn4Ascii1DTest"
1885 "python.algorithms.LoadNMoldyn4AsciiTest.LoadNMoldyn4AsciiTest"
1886 "python.algorithms.LoadSANS1MLZTest.LoadSANS1MLZTest" ; needs external data
1887 "python.algorithms.LoadWANDSCDTest.LoadWANDSCDTest" ; needs external data
1888 "python.algorithms.NOMADMedianDetectorTestTest.NOMADMedianDetectorTestTest" ; needs external data
1889 "python.algorithms.OptimizeCrystalPlacementByRunTest.OptimizeCrystalPlacementByRunTest" ; needs external data
1890 "python.algorithms.PEARLTransfitTest.PEARLTransfitTest" ; needs external data
1891 "python.algorithms.PoldiAutoCorrelation6Test.PoldiAutoCorrelation6Test" ; needs external data
1892 "python.algorithms.RebinRaggedTest.RebinRaggedTest" ; needs external data
1893 "python.algorithms.RefineSingleCrystalGoniometerTest.RefineSingleCrystalGoniometerTest" ; needs external data
1894 "python.algorithms.RetrieveRunInfoTest.RetrieveRunInfoTest"
1895 "python.algorithms.SNSPowderReductionTest.SNSPowderReductionTest"
1896 "python.algorithms.SaveGEMMAUDParamFileTest.SaveGEMMAUDParamFileTest" ; needs external data
1897 "python.algorithms.SelectNexusFilesByMetadataTest.SelectNexusFilesByMetadataTest" ; needs external data
1898 "python.algorithms.SetDetScaleTest.SetDetScaleTest" ; needs external data
1899 "python.algorithms.SetSampleFromLogsTest.SetSampleFromLogsTest" ; needs external data
1900 "python.algorithms.SortByQVectorsTest.SortByQVectorsTest" ; needs external data
1901 "python.algorithms.TOFTOFCropWorkspaceTest.TOFTOFCropWorkspaceTest" ; needs external data
1902 "python.algorithms.TOFTOFMergeRunsTest.TOFTOFMergeRunsTest" ; needs external data
1903 "python.algorithms.VelocityAutoCorrelationsTest.VelocityAutoCorrelationsTest" ; needs external data
1904 "python.algorithms.VelocityCrossCorrelationsTest.VelocityCrossCorrelationsTest" ; needs external data
1905 "python.api.AlgorithmTest.AlgorithmTest" ; needs external data
1906 "python.api.FileFinderTest.FileFinderTest" ; needs external data
1907 "python.api.ITableWorkspaceTest.ITableWorkspaceTest" ; needs external data
1908 "python.api.MultipleFilePropertyTest.MultipleFilePropertyTest" ; needs external data
1909 "python.corelli.calibration.test_bank.test_bank"
1910 "python.corelli.calibration.test_database.test_database"
1911 "python.corelli.calibration.test_utils.test_utils" ; needs external data
1912 "python.dataobjects.SpecialWorkspace2DTest.SpecialWorkspace2DTest"
1913 "python.dataobjects.Workspace2DPickleTest.Workspace2DPickleTest" ; needs external data
1914 "python.directtools.DirectToolsTest.DirectToolsTest" ; needs external data
1915 "python.plots.datafunctionsTest.datafunctionsTest" ; needs external data
1916 "python.scripts.ConvertToWavelengthTest.ConvertToWavelengthTest"
1917 "python.scripts.DirectEnergyConversionTest.DirectEnergyConversionTest" ; needs external data
1918 "python.scripts.DirectPropertyManagerTest.DirectPropertyManagerTest" ; needs external data
1919 "python.scripts.IndirectReductionCommonTest.IndirectReductionCommonTest" ; needs external data
1920 "python.scripts.ReductionWrapperTest.ReductionWrapperTest"
1921 "python.scripts.ReflectometryQuickAuxiliaryTest.ReflectometryQuickAuxiliaryTest"
1922 "python.scripts.RunDescriptorTest.RunDescriptorTest" ; needs external data
1923 "python.scripts.SANSDarkRunCorrectionTest.SANSDarkRunCorrectionTest" ; needs external data
1924 "python.scripts.SANSUtilityTest.SANSUtilityTest"
1925 "python.utils.absorptioncorrutilsTest.absorptioncorrutilsTest" ; needs external data
1926 "python.scripts.AbinsAlgorithmTest.AbinsAlgorithmTest" ; needs external data
1927 "python.scripts.AbinsCalculateSPowderTest.AbinsCalculateSPowderTest"
1928 "python.scripts.AbinsDataTest.AbinsDataTest" ; needs external data
1929 "python.scripts.AbinsLoadCASTEPTest.AbinsLoadCASTEPTest" ; needs external data
1930 "python.scripts.AbinsLoadCRYSTALTest.AbinsLoadCRYSTALTest"
1931 "python.scripts.AbinsLoadDMOL3Test.AbinsLoadDMOL3Test"
1932 "python.scripts.AbinsLoadGAUSSIANTest.AbinsLoadGAUSSIANTest"
1933 "python.scripts.AbinsLoadJSONTest.AbinsLoadJSONTest"
1934 "python.scripts.AbinsLoadMoldenTest.AbinsLoadMoldenTest"
1935 "python.scripts.AbinsLoadPhonopyTest.AbinsLoadPhonopyTest"
1936 "python.scripts.AbinsLoadVASPTest.AbinsLoadVASPTest" ; needs external data
1937 "python.scripts.AbinsPowderCalculatorTest.AbinsPowderCalculatorTest"
1938 "python.algorithms.PEARLTransfitV2Test.PEARLTransfitV2Test" ; needs external data
1939 "python.IsisPowder.ISISPowderGemOutputTest.ISISPowderGemOutputTest" ; needs external data
1940 "python.IsisPowder.ISISPowderRunDetailsTest.ISISPowderRunDetailsTest" ; needs external data
1941 "python.SANS.SANSReducerTest.SANSReducerTest" ; needs external data
1942 "python.SANS.SansIsisGuiSettings.SansIsisGuiSettings" ; needs external data
1943 "python.SANS.command_interface.batch_csv_file_parser_test.batch_csv_file_parser_test" ; needs external data
1944 "python.algorithms.GenerateLogbookTest.GenerateLogbookTest"
1945 "python.algorithms.LoadMultipleGSSTest.LoadMultipleGSSTest"
1946 "python.WorkflowAlgorithms.MolDynTest.MolDynTest" ; needs external data
1947 "python.WorkflowAlgorithms.ReflectometryILL_commonTest.ReflectometryILL_commonTest" ; needs external data
1948 "python.DNSReductionQt5.tof_powder_plot_presenter_test.tof_powder_plot_presenter_test"
1949 "python.MuonQt5.add_raw_plots_test.add_raw_plots_test"
1950 "python.EngineeringDiffraction.engineering_diffraction_io_test.engineering_diffraction_io_test" ; needs external data
1951 "PythonSANS.file_information_test.file_information_test"
1952 "PythonSANS.xml_parsing_test.xml_parsing_test"
1953 "PythonSANSQt5.create_state_test.create_state_test" ; needs external data
1954 "PythonSANSQt5.diagnostics_page_model_test.diagnostics_page_model_test"
1955 "PythonSANSQt5.gui_state_director_test.gui_state_director_test"
1956 "PythonSANSQt5.test_run_tab_presenter.test_run_tab_presenter"
1957 "PythonTOFTOFReductionQt5.TOFTOFScriptElementTest.TOFTOFScriptElementTest" ; needs external data
1958 "mantidqt_qt5.test_projectparser_mantidplot.test_projectparser_mantidplot" ; needs external data
1959 "mantidqt_qt5.test_sample_shape.test_sample_shape" ; needs external data
1960 "mantidqt_qt5.test_tableworkspacedisplay_io.test_tableworkspacedisplay_io" ; needs external data
1961 "workbench.test_toolbar.test_toolbar" ; needs external data
1962 ;; "Key combination is not set by Scintilla" for Ctrl+A.
1963 "mantidqt_qt5.test_interpreter.test_interpreter"
1964 ;; Test expects ValueError but gets Exception.
1965 ;; <https://github.com/mantidproject/mantid/issues/21251>
1966 "mantidqt_qt5.test_codeeditor.test_codeeditor"
1967 ;; Expects numpy 2.0 function signatures (device, copy).
1968 ;; Title offset (-0.05,1.05) vs expected (-0.07,1.07).
1969 ;; test_custom_eliding_delegate_respects_padding:
1970 ;; The delegate calls QFontMetrics.elidedText to
1971 ;; truncate "3.141592653589793" to fit a 93 px rect.
1972 ;; The test asserts startswith("3.141592") but never
1973 ;; sets a specific font, so the truncation point
1974 ;; depends on the system default font metrics.
1975 "mantidqt_qt5.test_matrixworkspacedisplay_delegate.test_matrixworkspacedisplay_delegate"
1976 ;;; Those have segfault on cleanup after successful tests.
1977 "mantidqt_qt5.test_apply_all_properties.test_apply_all_properties"
1978 "python.MuonQt5.MultiPlotWidget_test.MultiPlotWidget_test"
1979 "python.MuonQt5.muon_analysis_plot_widget_test.muon_analysis_plot_widget_test"
1980 "python.DNSReductionQt5.dns_modus_test.dns_modus_test"
1981 "python.MuonQt5.frequency_analysis_plot_widget_test.frequency_analysis_plot_widget_test"
1982 "mantidqt_qt5.test_samplelogs_view.test_samplelogs_view"
1983 "mantidqt_qt5.test_sliceviewer_imageinfowidget.test_sliceviewer_imageinfowidget")
1984 "|")))
1985 (apply invoke "ctest" "--output-on-failure"
1986 "-j" (if parallel-tests?
1987 (number->string (parallel-job-count))
1988 "1")
1989 ;; Only run unit tests, not system tests.
1990 ;; Upstream CI does the same (see "ctest -L UnitTest"
1991 ;; in buildconfig/Jenkins/Conda/run-tests).
1992 ;; System tests are run separately via the
1993 ;; "systemtest" script and require external data
1994 ;; files that "cannot be placed in the shared
1995 ;; repository" (dev-docs/source/SystemTests.rst).
1996 "-L" "UnitTest"
1997 "-E" exclude-pattern
1998 '()))))))))
1999 (native-inputs
2000 (list cmake googletest pkg-config python-pytz python-setuptools python-wrapper
2001 xorg-server-for-tests python-tzdata))
2002 (inputs
2003 (list boost
2004 eigen
2005 glu
2006 gsl
2007 hdf5
2008 jemalloc
2009 jsoncpp
2010 libjpeg-turbo
2011 librdkafka
2012 mesa
2013 muparser
2014 opencascade-occt
2015 openssl
2016 poco
2017 python
2018 python-pyqt
2019 python-qtpy
2020 python-pyqt5-sip
2021 python-pyqtwebengine
2022 qscintilla-qt5
2023 qtbase-5
2024 qtsvg-5
2025 qttools-5
2026 qtwayland-5
2027 qtwebengine-5
2028 tbb
2029 zlib))
2030 (propagated-inputs
2031 (list python-annotated-types
2032 python-dateutil
2033 python-euphonic
2034 python-h5py
2035 python-ipython-pygments-lexers
2036 python-joblib
2037 python-lz4
2038 python-matplotlib
2039 python-mslice
2040 python-mvesuvio ; optional: script library, no menu item
2041 python-numpy
2042 python-shiver ; optional: Interfaces menu extension
2043 python-orsopy
2044 python-psutil
2045 python-pycifrw
2046 python-pydantic
2047 python-pydantic-core
2048 python-pystog
2049 python-pystack
2050 python-pyvista
2051 python-pyvistaqt
2052 python-pyyaml
2053 python-qtconsole
2054 python-qtpy
2055 python-quasielasticbayes
2056 python-quickbayes
2057 python-scooby
2058 python-scipy
2059 python-seekpath
2060 python-superqt
2061 python-toml
2062 vtk))
2063 (home-page "https://www.mantidproject.org/")
2064 (synopsis "Data analysis framework for neutron and muon experiments")
2065 (description
2066 "Mantid is a framework for the reduction and analysis of neutron and muon
2067scattering data. It provides a collection of algorithms for data processing,
2068visualization tools, and interfaces for instrument scientists and users at
2069neutron and muon facilities worldwide.
2070
2071Optional GUI extensions such as @code{python-mslice} and @code{python-shiver}
2072appear in the Workbench Interfaces menu when installed alongside Mantid.
2073Script libraries like @code{python-mvesuvio} can be imported in Workbench's
2074script editor.")
2075 (license license:gpl3+)))