~ruther/guix-local

a7cb580f662ffa2dfcb2e7f10037762d5687b460 — Nicolas Graves 5 months ago 90ce202
gnu: python-pypytools: Switch to pyproject.

* gnu/packages/patches/python-pypytools-python-3-fixes.patch:
New file.
* gnu/local.mk: Record patch.
* gnu/packages/python-xyz.scm (python-pypytools):
[source]: Switch to git-fetch.  Add patch.
[build-system]: Switch to pyproject-build-system.
[arguments]<#:test-flags>: Ignore failing tests.
[native-inputs]: Add python-freezegun, python-numpy, python-pytest,
python-setuptools.

Change-Id: Icbafeb0f35ed651cbbd5f3477f65771247b8390d
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2052,6 2052,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/python-random2-getrandbits-test.patch		\
  %D%/packages/patches/python-pillow-use-zlib-1.3.patch	\
  %D%/packages/patches/python-pydocstyle-add-support-for-pep701.patch	\
  %D%/packages/patches/python-pypytools-python-3-fixes.patch	\
  %D%/packages/patches/python-pyreadstat-link-libiconv.patch	\
  %D%/packages/patches/python-sip-include-dirs.patch	\
  %D%/packages/patches/python-scikit-build-setuptools-compat.patch	\

A gnu/packages/patches/python-pypytools-python-3-fixes.patch => gnu/packages/patches/python-pypytools-python-3-fixes.patch +138 -0
@@ 0,0 1,138 @@
From f86a34bcd8ca64404808e5205f0fa0181bc85fbc Mon Sep 17 00:00:00 2001
From: Duncan Bellamy <dunk@denkimushi.com>
Date: Tue, 4 Jan 2022 19:59:58 +0000
Subject: [PATCH] update to python 3.8+

* add xfail for tests that fail in ubuntu and alpine
---
 pypytools/pypylog/model.py              | 14 +++++++++-----
 pypytools/pypylog/parse.py              |  5 +++++
 pypytools/pypylog/testing/test_parse.py | 18 +++++++++++++++---
 pypytools/util.py                       |  6 ++++++
 4 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/pypytools/pypylog/model.py b/pypytools/pypylog/model.py
index 9d97b21..14384b0 100644
--- a/pypytools/pypylog/model.py
+++ b/pypytools/pypylog/model.py
@@ -1,8 +1,12 @@
-import itertools
 from collections import defaultdict
 import attr
 import numpy as np
 
+try:
+    from itertools import izip as zip
+except ImportError: # will be 3.x series
+    pass
+
 @attr.s
 class Event(object):
     tsid = attr.ib() # unique identifier for an event
@@ -46,15 +50,15 @@ def add_event(self, ev):
 
     def print_summary(self):
         fmt = '%-28s %6s %8s'
-        print fmt % ('section', 'n', 'delta')
-        print '-'*44
+        print(fmt % ('section', 'n', 'delta'))
+        print('-'*44)
         for name, events in sorted(self.sections.iteritems()):
             total = 0
             for ev in events:
                 delta = ev.end - ev.start
                 assert delta >= 0
                 total += delta
-            print fmt % (name, len(events), format(delta, '.4f'))
+            print(fmt % (name, len(events), format(delta, '.4f')))
 
 class Series(object):
 
@@ -79,7 +83,7 @@ def __len__(self):
         return len(self.X)
 
     def __iter__(self):
-        for x, y in itertools.izip(self.X, self.Y):
+        for x, y in zip(self.X, self.Y):
             yield x, y
 
     def __getitem__(self, i):
diff --git a/pypytools/pypylog/parse.py b/pypytools/pypylog/parse.py
index c252904..43b3b20 100644
--- a/pypytools/pypylog/parse.py
+++ b/pypytools/pypylog/parse.py
@@ -35,6 +35,11 @@ def parse_file(f):
         #
         if log is None:
             log = model.PyPyLog()
+        try:
+        # Python 2: "basestring" is built-in
+            basestring
+        except NameError:
+            basestring = str
         if isinstance(fname, basestring):
             with open(fname) as f:
                 return parse_file(f)
diff --git a/pypytools/pypylog/testing/test_parse.py b/pypytools/pypylog/testing/test_parse.py
index 20416bc..d071971 100644
--- a/pypytools/pypylog/testing/test_parse.py
+++ b/pypytools/pypylog/testing/test_parse.py
@@ -1,6 +1,13 @@
 import pytest
 import textwrap
-from cStringIO import StringIO
+
+from pypytools.util import PY3
+
+if PY3:
+    from io import StringIO
+else:
+    from cStringIO import StringIO
+
 from pypytools.pypylog import parse
 from pypytools.pypylog import model
 from pypytools.pypylog.model import Event, GcMinor, GcCollectStep
@@ -33,7 +40,11 @@ def test_mismatch(self):
         [456] foo}
         [0ab] bar}
         """
-        pytest.raises(parse.ParseError, "self.parse(log)")
+        with pytest.raises(
+            parse.ParseError,
+            match=r'^End section does not match start: expected bar, got foo$',
+        ):
+            self.parse(log)
 
     def test_nested(self):
         log = self.parse("""
@@ -124,4 +135,5 @@ def test_parse_frequency():
     assert pf('40 KHz') == 40e3
     assert pf('40 MHz') == 40e6
     assert pf('40 GHz') == 40e9
-    pytest.raises(ValueError, "pf('')")
+    with pytest.raises(ValueError, match=r'^$'):
+        pf('')
diff --git a/pypytools/util.py b/pypytools/util.py
index a0cd85b..102452d 100644
--- a/pypytools/util.py
+++ b/pypytools/util.py
@@ -2,6 +2,7 @@
 from sys import version_info
 
 PY3 = version_info.major == 3
+PY3M = version_info.minor
 
 def clonefunc(f):
     """Deep clone the given function to create a new one.
@@ -22,6 +23,11 @@ def clonefunc(f):
             co.co_firstlineno, co.co_lnotab, co.co_freevars, co.co_cellvars]
     if PY3:
         args.insert(1, co.co_kwonlyargcount)
+    if PY3 and PY3M >= 8:
+        args.insert(1, co.co_posonlyargcount)
+    if PY3 and PY3M >= 11:
+        args.insert(12, co.co_qualname)
+        args.insert(15, co.co_exceptiontable)
     co2 = types.CodeType(*args)
     #
     # then, we clone the function itself, using the new co2

M gnu/packages/python-xyz.scm => gnu/packages/python-xyz.scm +25 -7
@@ 14344,16 14344,34 @@ sophisticated version manipulation.")
    (version "0.6.2")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "pypytools" version))
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/antocuni/pypytools/")
             (commit version)))
       (file-name (git-file-name name version))
       (sha256
        (base32 "0ag5xyzagprji0m2pkqsfy8539s003mn41pl6plbmh6iwi9w0h51"))))
    (build-system python-build-system)
    (arguments (list #:tests? #f)) ; no tests
        (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
       (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      ;; These tests are using deprecated py.code module.
      #:test-flags
      #~(list
         "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
         "--deselect=pypytools/testing/test_codegen.py::test_def_"
         "--deselect=pypytools/testing/test_codegen.py::test_compile"
         "--ignore=pypytools/testing/test_unroll.py"
         ;; clone_func returns an object of the wrong type.
         "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
    (native-inputs
     (list python-freezegun
           python-numpy
           python-pytest
           python-setuptools))
    (propagated-inputs (list python-py))
    (home-page "https://github.com/antocuni/pypytools/")
    (synopsis
     "Tools to use PyPy-specific features, with CPython fallbacks")
    (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
    (description
     "This package provides a collection of useful tools to use PyPy-specific
features, with CPython fallbacks.")