1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 fetchFromGitHub,
6 isPyPy,
7 pythonOlder,
8 setuptools,
9 gmp,
10 mpfr,
11 libmpc,
12 pytestCheckHook,
13 hypothesis,
14 cython,
15 mpmath,
16 # Reverse dependency
17 sage,
18}:
19
20buildPythonPackage rec {
21 pname = "gmpy2";
22 version = "2.2.0a2";
23 pyproject = true;
24
25 disabled = isPyPy || pythonOlder "3.7";
26
27 src = fetchFromGitHub {
28 owner = "aleaxit";
29 repo = "gmpy";
30 rev = "refs/tags/gmpy2-${version}";
31 hash = "sha256-luLEDEY1cezhzZo4fXmM/MUg2YyAaz7n0HwSpbNayP8=";
32 };
33
34 build-system = [ setuptools ];
35
36 buildInputs = [
37 gmp
38 mpfr
39 libmpc
40 ];
41
42 # make relative imports in tests work properly
43 preCheck = ''
44 rm gmpy2 -r
45 '';
46
47 nativeCheckInputs = [
48 pytestCheckHook
49 hypothesis
50 cython
51 mpmath
52 ];
53
54 disabledTests = lib.optionals (stdenv.isLinux && stdenv.isAarch64) [
55 # issue with some overflow logic
56 "test_mpz_to_bytes"
57 "test_mpz_from_bytes"
58 ];
59
60 pythonImportsCheck = [ "gmpy2" ];
61
62 passthru.tests = {
63 inherit sage;
64 };
65
66 meta = {
67 changelog = "https://github.com/aleaxit/gmpy/blob/${src.rev}/docs/history.rst";
68 description = "Interface to GMP, MPFR, and MPC for Python 3.7+";
69 homepage = "https://github.com/aleaxit/gmpy/";
70 license = lib.licenses.lgpl3Plus;
71 maintainers = with lib.maintainers; [ tomasajt ];
72 };
73}