The package rpms/python-nipy.git has added or updated architecture specific content in
its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/python-nipy.git/commit/?id=db3a36....
Change:
+ExcludeArch: %{ix86}
Thanks.
Full change:
============
commit 4010796b8f2d0771879365790480e2ac95f1c6a8
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 22 14:39:13 2024 +0200
Remove VCS artifact
Quench `rpmlint` error.
[skip changelog]
diff --git a/python-nipy.spec b/python-nipy.spec
index 205adbe..7148948 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -125,6 +125,9 @@ cp -p nipy/algorithms/statistics/models/LICENSE.txt scipy-LICENSE.txt
#
https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters
sed -i '/pytest-cov/d' pyproject.toml
+# Remove VCS artifact
+rm -vf examples/.gitignore
+
%generate_buildrequires
%pyproject_buildrequires -w -x optional%{?with_tests:,test}
commit a5a2ebdf7694e8ef02cb33380bdb7a1fe3324365
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 22 14:34:43 2024 +0200
Add epoch to Requires:
[skip changelog]
diff --git a/python-nipy.spec b/python-nipy.spec
index b64d33c..205adbe 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -91,7 +91,7 @@ Summary: Documentation and examples for python-nipy
BuildArch: noarch
Requires: nipy-data
-Requires: (python3-nipy = %{version}-%{release} if python3-nipy)
+Requires: (python3-nipy = %{?epoch:%{epoch}:}%{version}-%{release} if
python3-nipy)
%description doc
%{summary}.
commit a9c5a3994a41b1249828ede5febe956f6d169ee0
Author: Sandro <devel(a)penguinpee.nl>
Date: Wed Apr 17 22:04:53 2024 +0200
Make sure version of doc package stays in sync
This avoids conflicts when downgrading due to shared LICENSE file.
[skip changelog]
diff --git a/python-nipy.spec b/python-nipy.spec
index b766cf0..b64d33c 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -91,6 +91,7 @@ Summary: Documentation and examples for python-nipy
BuildArch: noarch
Requires: nipy-data
+Requires: (python3-nipy = %{version}-%{release} if python3-nipy)
%description doc
%{summary}.
commit 2d1dfb29ca0ca9668ad9674dcdfdd129b05d6f3d
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 15 19:45:57 2024 +0200
Add Packit config
[skip changelog]
diff --git a/.packit.yaml b/.packit.yaml
new file mode 100644
index 0000000..a015d3d
--- /dev/null
+++ b/.packit.yaml
@@ -0,0 +1,13 @@
+upstream_project_url:
https://github.com/nipy/nipy
+copy_upstream_release_description: false
+
+jobs:
+ - job: pull_from_upstream
+ trigger: release
+ dist_git_branches:
+ - fedora-rawhide
+ - job: koji_build
+ trigger: commit
+ dist_git_branches:
+ - fedora-all
+
commit e9f100a9ea2a1f9dc2f2de686f35d73904b5354d
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 15 19:43:37 2024 +0200
Drop BR on matplotlib
Now covered by passing the `optional` extra to
`%pyproject_buuildrequires`.
[skip changelog]
diff --git a/python-nipy.spec b/python-nipy.spec
index 0f44591..b766cf0 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -40,9 +40,6 @@ BuildRequires: python3-devel
BuildRequires: gcc
BuildRequires: pkgconfig(flexiblas)
-# A weak dependency; may enable more tests
-BuildRequires: python3dist(matplotlib)
-
%if %{with tests}
BuildRequires: nipy-data
%endif
commit db3a360d4f753c11e31115b4df34f0463831fa1d
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 15 11:12:04 2024 +0200
Drop i686 arch (leaf package)
[skip changelog]
diff --git a/python-nipy.spec b/python-nipy.spec
index cb93c24..0f44591 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -32,6 +32,10 @@ Source14: nipy_tsdiffana.1
#
https://github.com/nipy/nipy/pull/545
Patch:
https://github.com/nipy/nipy/pull/545.patch
+# Drop i686 (leaf package)
+#
https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
+ExcludeArch: %{ix86}
+
BuildRequires: python3-devel
BuildRequires: gcc
BuildRequires: pkgconfig(flexiblas)
commit 700af92de61759aac319c9af3a3fa4e6f62420e9
Author: Sandro <devel(a)penguinpee.nl>
Date: Mon Apr 15 11:01:39 2024 +0200
Update to 0.6.0 (RHBZ#2255532)
- Drop some patches (merged upstream)
- Provide `optional` extra (provides `matplotlib`)
- Skip some tests (failure reported upstream)
diff --git a/.gitignore b/.gitignore
index dc7b2d7..c00869c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@
/nipy-a2e068bec399580573d514f8a9cd11cac494a7e9.tar.gz
/nipy-961fa38508394a209f8964f6e6efc613972f6038.tar.gz
/nipy-e5e063b09d094ff79d2089261828fd2b2c843ab6.tar.gz
+/nipy-0.6.0.tar.gz
diff --git a/540.patch b/540.patch
deleted file mode 100644
index f31efd1..0000000
--- a/540.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From 048b7e90b1ab51e4a43860e8b21f478dbd6a60a1 Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 10:11:52 -0400
-Subject: [PATCH 1/2] Do not compare strings by identity (address)
-
-These comparisons against string literals may work in practice due to
-implementation details of string interning in CPython, but they are not
-reliable or correct, and they produce a SyntaxWarning in Python 3.12.
-Strings should always be compared by value (==/!=) rather than identity
-(is/is not).
----
- nipy/labs/glm/glm.py | 2 +-
- nipy/labs/spatial_models/parcel_io.py | 6 +++---
- nipy/labs/utils/reproducibility_measures.py | 12 ++++++------
- 3 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/nipy/labs/glm/glm.py b/nipy/labs/glm/glm.py
-index 0d87471df..86c2cfb14 100644
---- a/nipy/labs/glm/glm.py
-+++ b/nipy/labs/glm/glm.py
-@@ -146,7 +146,7 @@ def __init__(self, dim, type='t', tiny=DEF_TINY,
dofmax=DEF_DOFMAX):
- self.variance = None
- self.dof = None
- if dim > 1:
-- if type is 't':
-+ if type == 't':
- type = 'F'
- self.type = type
- self._stat = None
-diff --git a/nipy/labs/spatial_models/parcel_io.py
b/nipy/labs/spatial_models/parcel_io.py
-index ea4ec9647..81621c97a 100644
---- a/nipy/labs/spatial_models/parcel_io.py
-+++ b/nipy/labs/spatial_models/parcel_io.py
-@@ -218,7 +218,7 @@ def parcellation_based_analysis(Pa, test_images,
test_id='one_sample',
- for ti in test_images]).T
- test_data = Pa.make_feature('', np.array(test))
-
-- if test_id is not 'one_sample':
-+ if test_id != 'one_sample':
- return test_data
-
- # 2. perform one-sample test
-@@ -285,7 +285,7 @@ def fixed_parcellation(mask_image, betas, nbparcel, nn=6,
method='ward',
- # 1.1 the domain
- domain = grid_domain_from_image(mask_image, nn)
-
-- if method is not 'kmeans':
-+ if method != 'kmeans':
- # 1.2 get the main cc of the graph
- # to remove the small connected components
- pass
-@@ -305,7 +305,7 @@ def fixed_parcellation(mask_image, betas, nbparcel, nn=6,
method='ward',
-
- #step 2: parcellate the data ---------------------------
-
-- if method is not 'kmeans':
-+ if method != 'kmeans':
- g = field_from_coo_matrix_and_data(domain.topology, feature)
-
- if method == 'kmeans':
-diff --git a/nipy/labs/utils/reproducibility_measures.py
b/nipy/labs/utils/reproducibility_measures.py
-index 2fecc628e..22cbde216 100644
---- a/nipy/labs/utils/reproducibility_measures.py
-+++ b/nipy/labs/utils/reproducibility_measures.py
-@@ -438,7 +438,7 @@ def map_reproducibility(data, vardata, domain, ngroups,
method='crfx',
- # randomly swap the sign of x
- x *= (2 * (np.random.rand(len(samples[i])) > 0.5) - 1)
-
-- if method is not 'crfx':
-+ if method != 'crfx':
- vx = vardata[:, samples[i]]
- csize = kwargs['csize']
- threshold = kwargs['threshold']
-@@ -506,9 +506,9 @@ def peak_reproducibility(data, vardata, domain, ngroups, sigma,
method='crfx',
- # apply a random sign swap to x
- x *= (2 * (np.random.rand(len(samples[i])) > 0.5) - 1)
-
-- if method is not 'crfx':
-+ if method != 'crfx':
- vx = vardata[:, samples[i]]
-- if method is not 'bsa':
-+ if method != 'bsa':
- threshold = kwargs['threshold']
-
- if method == 'crfx':
-@@ -594,9 +594,9 @@ def cluster_reproducibility(data, vardata, domain, ngroups, sigma,
- # apply a random sign swap to x
- x *= (2 * (np.random.rand(len(samples[i])) > 0.5) - 1)
-
-- if method is not 'crfx':
-+ if method != 'crfx':
- vx = vardata[:, samples[i]]
-- if method is not 'bsa':
-+ if method != 'bsa':
- csize = kwargs['csize']
- threshold = kwargs['threshold']
- if method == 'crfx':
-@@ -665,7 +665,7 @@ def group_reproducibility_metrics(
-
- from ..mask import intersect_masks
-
-- if ((len(variance_images) == 0) & (method is not 'crfx')):
-+ if ((len(variance_images) == 0) & (method != 'crfx')):
- raise ValueError('Variance images are necessary')
-
- nsubj = len(contrast_images)
-
-From 3a8c4b9c28fd449338b9e0172b95f4b3909784fb Mon Sep 17 00:00:00 2001
-From: Ben Beasley <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 10:28:11 -0400
-Subject: [PATCH 2/2] Write a conditional more legibly and Pythonically
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Remove unnecessary parentheses; don’t use bitwise `&` where Boolean `and` is
intended.
-
-Co-authored-by: Chris Markiewicz <effigies(a)gmail.com>
----
- nipy/labs/utils/reproducibility_measures.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/nipy/labs/utils/reproducibility_measures.py
b/nipy/labs/utils/reproducibility_measures.py
-index 22cbde216..2a63db02c 100644
---- a/nipy/labs/utils/reproducibility_measures.py
-+++ b/nipy/labs/utils/reproducibility_measures.py
-@@ -665,7 +665,7 @@ def group_reproducibility_metrics(
-
- from ..mask import intersect_masks
-
-- if ((len(variance_images) == 0) & (method != 'crfx')):
-+ if len(variance_images) == 0 and method != 'crfx':
- raise ValueError('Variance images are necessary')
-
- nsubj = len(contrast_images)
diff --git a/541.patch b/541.patch
deleted file mode 100644
index a1131c6..0000000
--- a/541.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 54fd0b76dcc217cabff33c2b2ab9cb77c48293ad Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 10:21:26 -0400
-Subject: [PATCH 1/2] Remove executable bit from permissions for CLI entry
- points
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-These don’t have shebang lines, so they aren’t really executable.
----
- nipy/cli/diagnose.py | 0
- nipy/cli/img3dto4d.py | 0
- nipy/cli/img4dto3d.py | 0
- nipy/cli/realign4d.py | 0
- nipy/cli/tsdiffana.py | 0
- 5 files changed, 0 insertions(+), 0 deletions(-)
- mode change 100755 => 100644 nipy/cli/diagnose.py
- mode change 100755 => 100644 nipy/cli/img3dto4d.py
- mode change 100755 => 100644 nipy/cli/img4dto3d.py
- mode change 100755 => 100644 nipy/cli/realign4d.py
- mode change 100755 => 100644 nipy/cli/tsdiffana.py
-
-diff --git a/nipy/cli/diagnose.py b/nipy/cli/diagnose.py
-old mode 100755
-new mode 100644
-diff --git a/nipy/cli/img3dto4d.py b/nipy/cli/img3dto4d.py
-old mode 100755
-new mode 100644
-diff --git a/nipy/cli/img4dto3d.py b/nipy/cli/img4dto3d.py
-old mode 100755
-new mode 100644
-diff --git a/nipy/cli/realign4d.py b/nipy/cli/realign4d.py
-old mode 100755
-new mode 100644
-diff --git a/nipy/cli/tsdiffana.py b/nipy/cli/tsdiffana.py
-old mode 100755
-new mode 100644
-
-From ca6c09a64b5c3088dc2ad2df0698290871503e96 Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 10:22:21 -0400
-Subject: [PATCH 2/2] Remove executable bit from permissions for coverage.yml
-
-An executable YAML file makes no sense, so it must have been an
-accident.
----
- .github/workflows/coverage.yml | 0
- 1 file changed, 0 insertions(+), 0 deletions(-)
- mode change 100755 => 100644 .github/workflows/coverage.yml
-
-diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
-old mode 100755
-new mode 100644
diff --git a/543.patch b/543.patch
deleted file mode 100644
index 6f7a6ad..0000000
--- a/543.patch
+++ /dev/null
@@ -1,393 +0,0 @@
-From 1e5cb608c29cf43a65f7de17e5c1bbdb3e70a4dc Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 12:09:10 -0400
-Subject: [PATCH 1/3] Fix backslash escaping issues in docstrings
-
-Escape backslashes that should be passed through to the documentation
-system rather than interpreted as backslash escape sequences in the
-Python string.
-
-This fixes a number of SyntaxWarning instances about invalid escape
-sequences in Python 3.12.
-
-An alternative would be to make these docstrings raw strings
-(r"""foo""").
----
- nipy/modalities/fmri/design.py | 2 +-
- nipy/modalities/fmri/utils.py | 8 ++++----
- nipy/utils/perlpie.py | 10 +++++-----
- 3 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/nipy/modalities/fmri/design.py b/nipy/modalities/fmri/design.py
-index 211bb3533..5f46b3672 100644
---- a/nipy/modalities/fmri/design.py
-+++ b/nipy/modalities/fmri/design.py
-@@ -408,7 +408,7 @@ def stack_designs(*pairs):
-
- Parameters
- ----------
-- \*pairs : sequence
-+ \\*pairs : sequence
- Elements of either (np.ndarray, dict) or (np.ndarray,) or np.ndarray
-
- Returns
-diff --git a/nipy/modalities/fmri/utils.py b/nipy/modalities/fmri/utils.py
-index 7dc247fb4..a0e905008 100644
---- a/nipy/modalities/fmri/utils.py
-+++ b/nipy/modalities/fmri/utils.py
-@@ -167,7 +167,7 @@ def interp(times, values, fill=0, name=None, **kw):
- error outside bounds
- name : None or str, optional
- Name of symbolic expression to use. If None, a default is used.
-- \*\*kw : keyword args, optional
-+ \\*\\*kw : keyword args, optional
- passed to ``interp1d``
-
- Returns
-@@ -229,7 +229,7 @@ def linear_interp(times, values, fill=0, name=None, **kw):
- error outside bounds
- name : None or str, optional
- Name of symbolic expression to use. If None, a default is used.
-- \*\*kw : keyword args, optional
-+ \\*\\*kw : keyword args, optional
- passed to ``interp1d``
-
- Returns
-@@ -466,7 +466,7 @@ def convolve(self, g, g_interval, name=None, **kwargs):
- name : None or str, optional
- Name of the convolved function in the resulting expression.
- Defaults to one created by ``utils.interp``.
-- \*\*kwargs : keyword args, optional
-+ \\*\\*kwargs : keyword args, optional
- Any other arguments to pass to the ``interp1d`` function in creating
- the numerical function for `fg`.
-
-@@ -508,7 +508,7 @@ def convolve_functions(f, g, f_interval, g_interval, dt,
- name : None or str, optional
- Name of the convolved function in the resulting expression.
- Defaults to one created by ``utils.interp``.
-- \*\*kwargs : keyword args, optional
-+ \\*\\*kwargs : keyword args, optional
- Any other arguments to pass to the ``interp1d`` function in creating the
- numerical function for `fg`.
-
-diff --git a/nipy/utils/perlpie.py b/nipy/utils/perlpie.py
-index 6dbb2ceb4..039726985 100644
---- a/nipy/utils/perlpie.py
-+++ b/nipy/utils/perlpie.py
-@@ -36,16 +36,16 @@
-
- Replace numpy.testing with nipy's testing framework::
-
-- perlpie 'from\s+numpy\.testing.*' 'from nipy.testing import *'
-+ perlpie 'from\\s+numpy\\.testing.*' 'from nipy.testing import *'
-
- Replace all @slow decorators in my code with @dec.super_slow. Here we
- have to escape the @ symbol which has special meaning in perl::
-
-- perlpie '\@slow' '\(a)dec.super_slow'
-+ perlpie '\\@slow' '\\(a)dec.super_slow'
-
- Remove all occurences of importing make_doctest_suite::
-
-- perlpie 'from\snipy\.utils\.testutils.*make_doctest_suite'
-+ perlpie 'from\\snipy\\.utils\\.testutils.*make_doctest_suite'
-
- """
-
-@@ -78,8 +78,8 @@ def perl_dash_pie(oldstr, newstr, dry_run=None):
-
- # To replace all occurences of 'import numpy as N' with 'import numpy as
np'
- from nipy.utils import perlpie
-- perlpie.perl_dash_pie('import\s+numpy\s+as\s+N', 'import numpy as
np')
-- grind | xargs perl -pi -e 's/import\s+numpy\s+as\s+N/import numpy as np/g'
-+ perlpie.perl_dash_pie('import\\s+numpy\\s+as\\s+N', 'import numpy as
np')
-+ grind | xargs perl -pi -e 's/import\\s+numpy\\s+as\\s+N/import numpy as
np/g'
-
- """
-
-
-From 662d7992eb2d9ea025cf0cb0a765817ff292691e Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Thu, 9 Nov 2023 09:19:22 -0500
-Subject: [PATCH 2/3] Use raw strings in place of backslash-escapes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Exception: don’t touch doc/devel/tools/tricked_out_emacs.rst for now.
----
- nipy/algorithms/statistics/formula/formulae.py | 4 ++--
- nipy/core/reference/coordinate_map.py | 10 +++++-----
- nipy/modalities/fmri/design.py | 4 ++--
- nipy/modalities/fmri/utils.py | 16 ++++++++--------
- nipy/utils/perlpie.py | 14 +++++++-------
- tools/apigen.py | 10 +++++-----
- 6 files changed, 29 insertions(+), 29 deletions(-)
-
-diff --git a/nipy/algorithms/statistics/formula/formulae.py
b/nipy/algorithms/statistics/formula/formulae.py
-index b94723b4f..775403d99 100644
---- a/nipy/algorithms/statistics/formula/formulae.py
-+++ b/nipy/algorithms/statistics/formula/formulae.py
-@@ -202,7 +202,7 @@ def __add__(self, other):
-
-
- def terms(names, **kwargs):
-- ''' Return list of terms with names given by `names`
-+ r''' Return list of terms with names given by `names`
-
- This is just a convenience in defining a set of terms, and is the
- equivalent of ``sympy.symbols`` for defining symbols in sympy.
-@@ -215,7 +215,7 @@ def terms(names, **kwargs):
- names : str or sequence of str
- If a single str, can specify multiple ``Term``s with string
- containing space or ',' as separator.
-- \\**kwargs : keyword arguments
-+ \**kwargs : keyword arguments
- keyword arguments as for ``sympy.symbols``
-
- Returns
-diff --git a/nipy/core/reference/coordinate_map.py
b/nipy/core/reference/coordinate_map.py
-index d36954dcc..58c0fe956 100644
---- a/nipy/core/reference/coordinate_map.py
-+++ b/nipy/core/reference/coordinate_map.py
-@@ -2301,22 +2301,22 @@ def make_cmap(self, domain_N, xform, inv_xform=None):
- inv_xform)
-
- def __call__(self, *args, **kwargs):
-- """ Create affine or non-affine coordinate map
-+ r""" Create affine or non-affine coordinate map
-
- Parameters
- ----------
-- \\*args :
-+ \*args :
- Arguments to ``make_affine`` or ``make_cmap`` methods. We check the
- first argument to see if it is a scalar or an affine, and pass the
-- \\*args, \\*\\*kwargs to ``make_cmap`` or ``make_affine``
-+ \*args, \*\*kwargs to ``make_cmap`` or ``make_affine``
- respectively
-- \\*\\*kwargs:
-+ \*\*kwargs:
- See above
-
- Returns
- -------
- cmap : ``CoordinateMap`` or ``AffineTransform``
-- Affine if the first \\*arg was an affine array, otherwise a
-+ Affine if the first \*arg was an affine array, otherwise a
- Coordinate Map.
- """
- arg0 = np.asarray(args[0])
-diff --git a/nipy/modalities/fmri/design.py b/nipy/modalities/fmri/design.py
-index 5f46b3672..86e4ef8e2 100644
---- a/nipy/modalities/fmri/design.py
-+++ b/nipy/modalities/fmri/design.py
-@@ -402,13 +402,13 @@ def stack_contrasts(contrasts, name, keys):
-
-
- def stack_designs(*pairs):
-- """ Stack a sequence of design / contrast dictionary pairs
-+ r""" Stack a sequence of design / contrast dictionary pairs
-
- Uses multiple calls to :func:`stack2designs`
-
- Parameters
- ----------
-- \\*pairs : sequence
-+ \*pairs : sequence
- Elements of either (np.ndarray, dict) or (np.ndarray,) or np.ndarray
-
- Returns
-diff --git a/nipy/modalities/fmri/utils.py b/nipy/modalities/fmri/utils.py
-index a0e905008..2c59b6417 100644
---- a/nipy/modalities/fmri/utils.py
-+++ b/nipy/modalities/fmri/utils.py
-@@ -142,7 +142,7 @@ def fourier_basis(freq):
-
-
- def interp(times, values, fill=0, name=None, **kw):
-- """ Generic interpolation function of t given `times` and `values`
-+ r""" Generic interpolation function of t given `times` and `values`
-
- Imterpolator such that:
-
-@@ -167,7 +167,7 @@ def interp(times, values, fill=0, name=None, **kw):
- error outside bounds
- name : None or str, optional
- Name of symbolic expression to use. If None, a default is used.
-- \\*\\*kw : keyword args, optional
-+ \*\*kw : keyword args, optional
- passed to ``interp1d``
-
- Returns
-@@ -206,7 +206,7 @@ def interp(times, values, fill=0, name=None, **kw):
-
-
- def linear_interp(times, values, fill=0, name=None, **kw):
-- """ Linear interpolation function of t given `times` and `values`
-+ r""" Linear interpolation function of t given `times` and `values`
-
- Imterpolator such that:
-
-@@ -229,7 +229,7 @@ def linear_interp(times, values, fill=0, name=None, **kw):
- error outside bounds
- name : None or str, optional
- Name of symbolic expression to use. If None, a default is used.
-- \\*\\*kw : keyword args, optional
-+ \*\*kw : keyword args, optional
- passed to ``interp1d``
-
- Returns
-@@ -455,7 +455,7 @@ def __init__(self, expr, support, delta, fill=0):
- self._vals = _eval_for(expr, self.support, self.delta)
-
- def convolve(self, g, g_interval, name=None, **kwargs):
-- """ Convolve sympy expression `g` with this kernel
-+ r""" Convolve sympy expression `g` with this kernel
-
- Parameters
- ----------
-@@ -466,7 +466,7 @@ def convolve(self, g, g_interval, name=None, **kwargs):
- name : None or str, optional
- Name of the convolved function in the resulting expression.
- Defaults to one created by ``utils.interp``.
-- \\*\\*kwargs : keyword args, optional
-+ \*\*kwargs : keyword args, optional
- Any other arguments to pass to the ``interp1d`` function in creating
- the numerical function for `fg`.
-
-@@ -488,7 +488,7 @@ def convolve(self, g, g_interval, name=None, **kwargs):
-
- def convolve_functions(f, g, f_interval, g_interval, dt,
- fill=0, name=None, **kwargs):
-- """ Expression containing numerical convolution of `fn1` with `fn2`
-+ r""" Expression containing numerical convolution of `fn1` with `fn2`
-
- Parameters
- ----------
-@@ -508,7 +508,7 @@ def convolve_functions(f, g, f_interval, g_interval, dt,
- name : None or str, optional
- Name of the convolved function in the resulting expression.
- Defaults to one created by ``utils.interp``.
-- \\*\\*kwargs : keyword args, optional
-+ \*\*kwargs : keyword args, optional
- Any other arguments to pass to the ``interp1d`` function in creating the
- numerical function for `fg`.
-
-diff --git a/nipy/utils/perlpie.py b/nipy/utils/perlpie.py
-index 039726985..55c10466f 100644
---- a/nipy/utils/perlpie.py
-+++ b/nipy/utils/perlpie.py
-@@ -1,6 +1,6 @@
- # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
- # vi: set ft=python sts=4 ts=4 sw=4 et:
--"""Perform a global search and replace on the current directory
*recursively*.
-+r"""Perform a global search and replace on the current directory
*recursively*.
-
- This a small python wrapper around the `perl -p -i -e` functionality.
- I **strongly recommend** running `perlpie` on files under source
-@@ -36,16 +36,16 @@
-
- Replace numpy.testing with nipy's testing framework::
-
-- perlpie 'from\\s+numpy\\.testing.*' 'from nipy.testing import *'
-+ perlpie 'from\s+numpy\.testing.*' 'from nipy.testing import *'
-
- Replace all @slow decorators in my code with @dec.super_slow. Here we
- have to escape the @ symbol which has special meaning in perl::
-
-- perlpie '\\@slow' '\\(a)dec.super_slow'
-+ perlpie '\@slow' '\(a)dec.super_slow'
-
- Remove all occurences of importing make_doctest_suite::
-
-- perlpie 'from\\snipy\\.utils\\.testutils.*make_doctest_suite'
-+ perlpie 'from\snipy\.utils\.testutils.*make_doctest_suite'
-
- """
-
-@@ -71,15 +71,15 @@ def check_deps():
-
-
- def perl_dash_pie(oldstr, newstr, dry_run=None):
-- """Use perl to replace the oldstr with the newstr.
-+ r"""Use perl to replace the oldstr with the newstr.
-
- Examples
- --------
-
- # To replace all occurences of 'import numpy as N' with 'import numpy as
np'
- from nipy.utils import perlpie
-- perlpie.perl_dash_pie('import\\s+numpy\\s+as\\s+N', 'import numpy as
np')
-- grind | xargs perl -pi -e 's/import\\s+numpy\\s+as\\s+N/import numpy as
np/g'
-+ perlpie.perl_dash_pie('import\s+numpy\s+as\s+N', 'import numpy as
np')
-+ grind | xargs perl -pi -e 's/import\s+numpy\s+as\s+N/import numpy as np/g'
-
- """
-
-diff --git a/tools/apigen.py b/tools/apigen.py
-index 00f936603..578518f8b 100644
---- a/tools/apigen.py
-+++ b/tools/apigen.py
-@@ -68,9 +68,9 @@ def __init__(self,
- ['\.setup$', '\._']
- '''
- if package_skip_patterns is None:
-- package_skip_patterns = ['\\.tests$']
-+ package_skip_patterns = [r'\.tests$']
- if module_skip_patterns is None:
-- module_skip_patterns = ['\\.setup$', '\\._']
-+ module_skip_patterns = [r'\.setup$', r'\._']
- self.package_name = package_name
- self.rst_extension = rst_extension
- self.package_skip_patterns = package_skip_patterns
-@@ -272,7 +272,7 @@ def generate_api_doc(self, uri):
- return ad
-
- def _survives_exclude(self, matchstr, match_type):
-- ''' Returns True if *matchstr* does not match patterns
-+ r''' Returns True if *matchstr* does not match patterns
-
- ``self.package_name`` removed from front of string if present
-
-@@ -281,14 +281,14 @@ def _survives_exclude(self, matchstr, match_type):
- >>> dw = ApiDocWriter('sphinx')
- >>> dw._survives_exclude('sphinx.okpkg', 'package')
- True
-- >>> dw.package_skip_patterns.append('^\\.badpkg$')
-+ >>> dw.package_skip_patterns.append(r'^\.badpkg$')
- >>> dw._survives_exclude('sphinx.badpkg', 'package')
- False
- >>> dw._survives_exclude('sphinx.badpkg', 'module')
- True
- >>> dw._survives_exclude('sphinx.badmod', 'module')
- True
-- >>> dw.module_skip_patterns.append('^\\.badmod$')
-+ >>> dw.module_skip_patterns.append(r'^\.badmod$')
- >>> dw._survives_exclude('sphinx.badmod', 'module')
- False
- '''
-
-From 401f3d1330ecd7094ad68d3149a58a0df85b65a3 Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Thu, 9 Nov 2023 09:22:02 -0500
-Subject: [PATCH 3/3] Fix an unescaped asterisk
-
----
- nipy/algorithms/statistics/formula/formulae.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/nipy/algorithms/statistics/formula/formulae.py
b/nipy/algorithms/statistics/formula/formulae.py
-index 775403d99..026d17b8a 100644
---- a/nipy/algorithms/statistics/formula/formulae.py
-+++ b/nipy/algorithms/statistics/formula/formulae.py
-@@ -215,7 +215,7 @@ def terms(names, **kwargs):
- names : str or sequence of str
- If a single str, can specify multiple ``Term``s with string
- containing space or ',' as separator.
-- \**kwargs : keyword arguments
-+ \*\*kwargs : keyword arguments
- keyword arguments as for ``sympy.symbols``
-
- Returns
diff --git a/544.patch b/544.patch
deleted file mode 100644
index b2a4feb..0000000
--- a/544.patch
+++ /dev/null
@@ -1,578 +0,0 @@
-From af9fc39012fca9e813bc706e81d78fb664b76480 Mon Sep 17 00:00:00 2001
-From: "Benjamin A. Beasley" <code(a)musicinmybrain.net>
-Date: Sun, 15 Oct 2023 13:03:25 -0400
-Subject: [PATCH] Cython: declare pointers one per line
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-None of these declarations was incorrect, but Cython now warns about
-them. The developers are worried that people will write “cdef int* a, b”
-and think that “b” is an “int*” rather than an “int”. Reducing the
-number of warnings from Cython makes it easier to notice warnings that
-might represent real problems.
----
- nipy/algorithms/statistics/_quantile.pyx | 3 +-
- nipy/labs/bindings/array.pyx | 19 +++++--
- nipy/labs/bindings/linalg.pyx | 72 +++++++++++++++++-------
- nipy/labs/bindings/wrapper.pyx | 19 +++++--
- nipy/labs/glm/kalman.pyx | 10 +++-
- nipy/labs/group/glm_twolevel.pyx | 15 ++++-
- nipy/labs/group/onesample.pyx | 21 +++++--
- nipy/labs/group/twosample.pyx | 21 +++++--
- nipy/labs/utils/routines.pyx | 22 ++++++--
- 9 files changed, 153 insertions(+), 49 deletions(-)
-
-diff --git a/nipy/algorithms/statistics/_quantile.pyx
b/nipy/algorithms/statistics/_quantile.pyx
-index 9f3357983..fe3346413 100644
---- a/nipy/algorithms/statistics/_quantile.pyx
-+++ b/nipy/algorithms/statistics/_quantile.pyx
-@@ -48,7 +48,8 @@ def _quantile(X, double ratio, int interp=False, int axis=0):
- Y : array
- Array of quantiles
- """
-- cdef double *x, *y
-+ cdef double *x
-+ cdef double *y
- cdef long int size, stride
- cdef np.flatiter itX, itY
-
-diff --git a/nipy/labs/bindings/array.pyx b/nipy/labs/bindings/array.pyx
-index 5ab0beb06..0b94b5a04 100644
---- a/nipy/labs/bindings/array.pyx
-+++ b/nipy/labs/bindings/array.pyx
-@@ -42,7 +42,8 @@ def array_get_block( A, size_t x0, size_t x1, size_t fX=1,
- size_t z0=0, size_t z1=0, size_t fZ=1,
- size_t t0=0, size_t t1=0, size_t fT=1 )
- """
-- cdef fff_array *a, *b
-+ cdef fff_array *a
-+ cdef fff_array *b
- cdef fff_array asub
- a = fff_array_fromPyArray(A)
- asub = fff_array_get_block(a, x0, x1, fX, y0, y1, fY, z0, z1, fZ, t0, t1, fT)
-@@ -57,7 +58,9 @@ def array_add(A, B):
- """
- C = A + B
- """
-- cdef fff_array *a, *b, *c
-+ cdef fff_array *a
-+ cdef fff_array *b
-+ cdef fff_array *c
-
- a = fff_array_fromPyArray(A)
- b = fff_array_fromPyArray(B)
-@@ -74,7 +77,9 @@ def array_mul(A, B):
- """
- C = A * B
- """
-- cdef fff_array *a, *b, *c
-+ cdef fff_array *a
-+ cdef fff_array *b
-+ cdef fff_array *c
-
- a = fff_array_fromPyArray(A)
- b = fff_array_fromPyArray(B)
-@@ -91,7 +96,9 @@ def array_sub(A, B):
- """
- C = A - B
- """
-- cdef fff_array *a, *b, *c
-+ cdef fff_array *a
-+ cdef fff_array *b
-+ cdef fff_array *c
-
- a = fff_array_fromPyArray(A)
- b = fff_array_fromPyArray(B)
-@@ -108,7 +115,9 @@ def array_div(A, B):
- """
- C = A / B
- """
-- cdef fff_array *a, *b, *c
-+ cdef fff_array *a
-+ cdef fff_array *b
-+ cdef fff_array *c
-
- a = fff_array_fromPyArray(A)
- b = fff_array_fromPyArray(B)
-diff --git a/nipy/labs/bindings/linalg.pyx b/nipy/labs/bindings/linalg.pyx
-index 290b588e9..62c3617d3 100644
---- a/nipy/labs/bindings/linalg.pyx
-+++ b/nipy/labs/bindings/linalg.pyx
-@@ -105,7 +105,8 @@ def vector_set(X, size_t i, double a):
- Set i-th element.
- vector_set(x, i, a)
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -119,7 +120,8 @@ def vector_set_all(X, double a):
- Set to a constant value.
- vector_set_all(x, a)
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -133,7 +135,8 @@ def vector_scale(X, double a):
- Multiply by a constant value.
- y = vector_scale(x, a)
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -147,7 +150,8 @@ def vector_add_constant(X, double a):
- Add a constant value.
- y = vector_add_constant(x, a)
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -161,7 +165,9 @@ def vector_add(X, Y):
- Add two vectors.
- z = vector_add(x, y)
- """
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- z = fff_vector_new(x.size)
-@@ -177,7 +183,9 @@ def vector_sub(X, Y):
- Substract two vectors: x - y
- z = vector_sub(x, y)
- """
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- z = fff_vector_new(x.size)
-@@ -193,7 +201,9 @@ def vector_mul(X, Y):
- Element-wise multiplication.
- z = vector_mul(x, y)
- """
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- z = fff_vector_new(x.size)
-@@ -209,7 +219,9 @@ def vector_div(X, Y):
- Element-wise division.
- z = vector_div(x, y)
- """
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- z = fff_vector_new(x.size)
-@@ -300,7 +312,8 @@ def matrix_transpose(A):
- Transpose a matrix.
- B = matrix_transpose(A)
- """
-- cdef fff_matrix *a, *b
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_new(a.size2, a.size1)
- fff_matrix_transpose(b, a)
-@@ -312,7 +325,9 @@ def matrix_add(A, B):
- """
- C = matrix_add(A, B)
- """
-- cdef fff_matrix *a, *b, *c
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_new(a.size1, a.size2)
-@@ -368,13 +383,16 @@ def blas_dasum(X):
- return fff_blas_dasum(x)
-
- def blas_ddot(X, Y):
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- return fff_blas_ddot(x, y)
-
- def blas_daxpy(double alpha, X, Y):
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- x = fff_vector_fromPyArray(X)
- y = fff_vector_fromPyArray(Y)
- z = fff_vector_new(y.size)
-@@ -384,7 +402,8 @@ def blas_daxpy(double alpha, X, Y):
- return Z
-
- def blas_dscal(double alpha, X):
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -403,7 +422,10 @@ def blas_dgemm(int TransA, int TransB, double alpha, A, B, double
beta, C):
- beta C where op(A) = A, A^T, A^H for TransA = CblasNoTrans,
- CblasTrans, CblasConjTrans and similarly for the parameter TransB.
- """
-- cdef fff_matrix *a, *b, *c, *d
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
-+ cdef fff_matrix *d
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_fromPyArray(C)
-@@ -428,7 +450,10 @@ def blas_dsymm(int Side, int Uplo, double alpha, A, B, beta, C):
- when Uplo is CblasLower then the lower triangle and diagonal of A
- are used.
- """
-- cdef fff_matrix *a, *b, *c, *d
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
-+ cdef fff_matrix *d
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_fromPyArray(C)
-@@ -455,7 +480,9 @@ def blas_dtrmm(int Side, int Uplo, int TransA, int Diag, double
alpha, A, B):
- diagonal elements of the matrix A are taken as unity and are not
- referenced.
- """
-- cdef fff_matrix *a, *b, *c
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_new(a.size1, a.size2)
-@@ -482,7 +509,9 @@ def blas_dtrsm(int Side, int Uplo, int TransA, int Diag, double
alpha, A, B):
- CblasUnit then the diagonal elements of the matrix A are taken as
- unity and are not referenced.
- """
-- cdef fff_matrix *a, *b, *c
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_new(a.size1, a.size2)
-@@ -507,7 +536,9 @@ def blas_dsyrk(int Uplo, int Trans, double alpha, A, double beta,
C):
- when Uplo is CblasLower then the lower triangle and diagonal of C
- are used.
- """
-- cdef fff_matrix *a, *c, *d
-+ cdef fff_matrix *a
-+ cdef fff_matrix *c
-+ cdef fff_matrix *d
- a = fff_matrix_fromPyArray(A)
- c = fff_matrix_fromPyArray(C)
- d = fff_matrix_new(a.size1, a.size2)
-@@ -529,7 +560,10 @@ def blas_dsyr2k(int Uplo, int Trans, double alpha, A, B, double
beta, C):
- and when Uplo is CblasLower then the lower triangle and diagonal of C
- are used.
- """
-- cdef fff_matrix *a, *b, *c, *d
-+ cdef fff_matrix *a
-+ cdef fff_matrix *b
-+ cdef fff_matrix *c
-+ cdef fff_matrix *d
- a = fff_matrix_fromPyArray(A)
- b = fff_matrix_fromPyArray(B)
- c = fff_matrix_fromPyArray(C)
-diff --git a/nipy/labs/bindings/wrapper.pyx b/nipy/labs/bindings/wrapper.pyx
-index 1621813de..f9c15afc2 100644
---- a/nipy/labs/bindings/wrapper.pyx
-+++ b/nipy/labs/bindings/wrapper.pyx
-@@ -62,7 +62,8 @@ def pass_vector(ndarray X):
- """
- Y = pass_vector(X)
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- x = fff_vector_fromPyArray(X)
- y = fff_vector_new(x.size)
- fff_vector_memcpy(y, x)
-@@ -105,7 +106,8 @@ def pass_matrix(ndarray X):
- """
- Y = pass_matrix(X)
- """
-- cdef fff_matrix *x, *y
-+ cdef fff_matrix *x
-+ cdef fff_matrix *y
- x = fff_matrix_fromPyArray(X)
- y = fff_matrix_new(x.size1, x.size2)
- fff_matrix_memcpy(y, x)
-@@ -117,7 +119,8 @@ def pass_array(ndarray X):
- """
- Y = pass_array(X)
- """
-- cdef fff_array *x, *y
-+ cdef fff_array *x
-+ cdef fff_array *y
- x = fff_array_fromPyArray(X)
- y = fff_array_new(x.datatype, x.dimX, x.dimY, x.dimZ, x.dimT)
- fff_array_copy(y, x)
-@@ -129,7 +132,9 @@ def pass_vector_via_iterator(ndarray X, int axis=0, int niters=0):
- """
- Y = pass_vector_via_iterator(X, axis=0, niters=0)
- """
-- cdef fff_vector *x, *y, *z
-+ cdef fff_vector *x
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- cdef fffpy_multi_iterator* multi
-
- Xdum = X.copy() ## at least two arrays needed for multi iterator
-@@ -152,7 +157,8 @@ def copy_via_iterators(ndarray Y, int axis=0):
- Copy array Y into Z via fff's PyArray_MultiIterAllButAxis C function.
- Behavior should be equivalent to Z = Y.copy().
- """
-- cdef fff_vector *y, *z
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- cdef fffpy_multi_iterator* multi
-
- # Allocate output array
-@@ -184,7 +190,8 @@ def sum_via_iterators(ndarray Y, int axis=0):
- Return the sum of input elements along the dimension specified by axis.
- Behavior should be equivalent to Z = Y.sum(axis).
- """
-- cdef fff_vector *y, *z
-+ cdef fff_vector *y
-+ cdef fff_vector *z
- cdef fffpy_multi_iterator* multi
-
- # Allocate output array
-diff --git a/nipy/labs/glm/kalman.pyx b/nipy/labs/glm/kalman.pyx
-index 54556a356..98668ed89 100644
---- a/nipy/labs/glm/kalman.pyx
-+++ b/nipy/labs/glm/kalman.pyx
-@@ -84,7 +84,9 @@ def ols(ndarray Y, ndarray X, int axis=0):
-
- REFERENCE: Roche et al, ISBI 2004.
- """
-- cdef fff_vector *y, *b, *s2
-+ cdef fff_vector *y
-+ cdef fff_vector *b
-+ cdef fff_vector *s2
- cdef fff_matrix *x
- cdef fff_glm_KF *kfilt
- cdef size_t p
-@@ -161,7 +163,11 @@ def ar1(ndarray Y, ndarray X, int niter=2, int axis=0):
- REFERENCE:
- Roche et al, MICCAI 2004.
- """
-- cdef fff_vector *y, *b, *vb, *s2, *a
-+ cdef fff_vector *y
-+ cdef fff_vector *b
-+ cdef fff_vector *vb
-+ cdef fff_vector *s2
-+ cdef fff_vector *a
- cdef fff_vector Vb_flat
- cdef fff_matrix *x
- cdef fff_glm_RKF *rkfilt
-diff --git a/nipy/labs/group/glm_twolevel.pyx b/nipy/labs/group/glm_twolevel.pyx
-index 921f797c2..ba7e1dc5f 100644
---- a/nipy/labs/group/glm_twolevel.pyx
-+++ b/nipy/labs/group/glm_twolevel.pyx
-@@ -61,8 +61,12 @@ def em(ndarray Y, ndarray VY, ndarray X, ndarray C=None, int axis=0,
int niter=D
- Keller and Roche, ISBI 2008.
- """
- cdef size_t n, p
-- cdef fff_vector *y, *vy, *b, *s2
-- cdef fff_matrix *x, *ppx
-+ cdef fff_vector *y
-+ cdef fff_vector *vy
-+ cdef fff_vector *b
-+ cdef fff_vector *s2
-+ cdef fff_matrix *x
-+ cdef fff_matrix *ppx
- cdef fff_glm_twolevel_EM *em
- cdef fffpy_multi_iterator* multi
-
-@@ -131,7 +135,12 @@ def log_likelihood(Y, VY, X, B, S2, int axis=0):
- REFERENCE:
- Keller and Roche, ISBI 2008.
- """
-- cdef fff_vector *y, *vy, *b, *s2, *ll, *tmp
-+ cdef fff_vector *y
-+ cdef fff_vector *vy
-+ cdef fff_vector *b
-+ cdef fff_vector *s2
-+ cdef fff_vector *ll
-+ cdef fff_vector *tmp
- cdef fff_matrix *x
- cdef fffpy_multi_iterator* multi
-
-diff --git a/nipy/labs/group/onesample.pyx b/nipy/labs/group/onesample.pyx
-index fb5fa2e56..25f417ca8 100644
---- a/nipy/labs/group/onesample.pyx
-+++ b/nipy/labs/group/onesample.pyx
-@@ -93,7 +93,10 @@ def stat(ndarray Y, id='student', double base=0.0,
- Compute a one-sample test statistic over a number of deterministic
- or random permutations.
- """
-- cdef fff_vector *y, *t, *magics, *yp
-+ cdef fff_vector *y
-+ cdef fff_vector *t
-+ cdef fff_vector *magics
-+ cdef fff_vector *yp
- cdef fff_onesample_stat* stat
- cdef fff_onesample_stat_flag flag_stat = stats[id]
- cdef unsigned int n
-@@ -162,7 +165,11 @@ def stat_mfx(ndarray Y, ndarray V, id='student_mfx', double
base=0.0,
- Compute a one-sample test statistic, with mixed-effect correction,
- over a number of deterministic or random permutations.
- """
-- cdef fff_vector *y, *v, *t, *magics, *yp
-+ cdef fff_vector *y
-+ cdef fff_vector *v
-+ cdef fff_vector *t
-+ cdef fff_vector *magics
-+ cdef fff_vector *yp
- cdef fff_onesample_stat_mfx* stat
- cdef fff_onesample_stat_flag flag_stat = stats[id]
- cdef int n
-@@ -233,7 +240,10 @@ def pdf_fit_mfx(ndarray Y, ndarray V, int axis=0, int niter=5, int
constraint=0,
-
- Comments to follow.
- """
-- cdef fff_vector *y, *v, *w, *z
-+ cdef fff_vector *y
-+ cdef fff_vector *v
-+ cdef fff_vector *w
-+ cdef fff_vector *z
- cdef fff_onesample_stat_mfx* stat
- cdef fffpy_multi_iterator* multi
- cdef int n = Y.shape[axis]
-@@ -277,7 +287,10 @@ def pdf_fit_gmfx(ndarray Y, ndarray V, int axis=0, int niter=5, int
constraint=0
-
- Comments to follow.
- """
-- cdef fff_vector *y, *v, *mu, *s2
-+ cdef fff_vector *y
-+ cdef fff_vector *v
-+ cdef fff_vector *mu
-+ cdef fff_vector *s2
- cdef fff_onesample_stat_mfx* stat
- cdef fffpy_multi_iterator* multi
- cdef int n = Y.shape[axis]
-diff --git a/nipy/labs/group/twosample.pyx b/nipy/labs/group/twosample.pyx
-index 1c06e772d..a74da5c26 100644
---- a/nipy/labs/group/twosample.pyx
-+++ b/nipy/labs/group/twosample.pyx
-@@ -70,8 +70,13 @@ def stat(ndarray Y1, ndarray Y2, id='student', int axis=0,
ndarray Magics=None):
- Compute a two-sample test statistic (Y1>Y2) over a number of
- deterministic or random permutations.
- """
-- cdef fff_vector *y1, *y2, *t, *yp, *magics
-- cdef fff_array *idx1, *idx2
-+ cdef fff_vector *y1
-+ cdef fff_vector *y2
-+ cdef fff_vector *t
-+ cdef fff_vector *yp
-+ cdef fff_vector *magics
-+ cdef fff_array *idx1
-+ cdef fff_array *idx2
- cdef unsigned int n, n1, n2, nex
- cdef unsigned long int simu, nsimu, idx
- cdef fff_twosample_stat* stat
-@@ -155,8 +160,16 @@ def stat_mfx(ndarray Y1, ndarray V1, ndarray Y2, ndarray V2,
- Compute a two-sample test statistic (Y1>Y2) over a number of
- deterministic or random permutations.
- """
-- cdef fff_vector *y1, *y2, *v1, *v2, *t, *yp, *vp, *magics
-- cdef fff_array *idx1, *idx2
-+ cdef fff_vector *y1
-+ cdef fff_vector *y2
-+ cdef fff_vector *v1
-+ cdef fff_vector *v2
-+ cdef fff_vector *t
-+ cdef fff_vector *yp
-+ cdef fff_vector *vp
-+ cdef fff_vector *magics
-+ cdef fff_array *idx1
-+ cdef fff_array *idx2
- cdef unsigned int n, n1, n2, nex
- cdef unsigned long int simu, nsimu, idx
- cdef fff_twosample_stat_mfx* stat
-diff --git a/nipy/labs/utils/routines.pyx b/nipy/labs/utils/routines.pyx
-index 3872744cd..85b549ca3 100644
---- a/nipy/labs/utils/routines.pyx
-+++ b/nipy/labs/utils/routines.pyx
-@@ -53,7 +53,8 @@ def quantile(X, double ratio, int interp=False, int axis=0):
-
- Partial sorting algorithm, very fast!!!
- """
-- cdef fff_vector *x, *y
-+ cdef fff_vector *x
-+ cdef fff_vector *y
- cdef fffpy_multi_iterator* multi
-
- # Allocate output array Y
-@@ -98,7 +99,11 @@ def mahalanobis(X, VX):
- axis == 0 assumed. If X is shaped (d,K), VX must be shaped
- (d,d,K).
- """
-- cdef fff_vector *x, *vx, *x_tmp, *vx_tmp, *d2
-+ cdef fff_vector *x
-+ cdef fff_vector *vx
-+ cdef fff_vector *x_tmp
-+ cdef fff_vector *vx_tmp
-+ cdef fff_vector *d2
- cdef fff_matrix Sx
- cdef fff_matrix *Sx_tmp
- cdef fffpy_multi_iterator* multi
-@@ -163,10 +168,16 @@ def svd(X):
- """
- cdef int axis=0
- cdef int m, n, dmin, dmax, lwork, liwork, info
-- cdef fff_vector *work, *x_flat, *x_flat_tmp, *s, *s_tmp
-+ cdef fff_vector *work
-+ cdef fff_vector *x_flat
-+ cdef fff_vector *x_flat_tmp
-+ cdef fff_vector *s
-+ cdef fff_vector *s_tmp
- cdef fff_matrix x
- cdef fff_array *iwork
-- cdef fff_matrix *Aux, *U, *Vt
-+ cdef fff_matrix *Aux
-+ cdef fff_matrix *U
-+ cdef fff_matrix *Vt
- cdef fffpy_multi_iterator* multi
-
- # Shape of matrices
-@@ -235,7 +246,8 @@ def permutations(unsigned int n, unsigned int m=1, unsigned long
magic=0):
- P = permutations(n, m=1, magic=0).
- Generate m permutations from [0..n[.
- """
-- cdef fff_array *p, *pi
-+ cdef fff_array *p
-+ cdef fff_array *pi
- cdef fff_array pi_view
- cdef unsigned int i
- p = fff_array_new2d(FFF_UINT, n, m)
diff --git a/python-nipy.spec b/python-nipy.spec
index b573e55..cb93c24 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -1,8 +1,10 @@
%bcond tests 1
%global forgeurl
https://github.com/nipy/nipy
-%global version 0.5.0
-%global commit e5e063b09d094ff79d2089261828fd2b2c843ab6
+%global version 0.6.0
+# Use either tag or commit
+%global tag %{version}
+#%%global commit e5e063b09d094ff79d2089261828fd2b2c843ab6
%forgemeta
# Lower build type safety to level 1 to avoid `-Wint-conversion` turning
@@ -26,18 +28,6 @@ Source12: nipy_4dto3d.1
Source13: nipy_diagnose.1
Source14: nipy_tsdiffana.1
-# Do not compare strings by identity (address)
-#
https://github.com/nipy/nipy/pull/540
-Patch:
https://github.com/nipy/nipy/pull/540.patch
-# Remove executable filesystem permissions from files that don’t need it
-#
https://github.com/nipy/nipy/pull/541
-Patch:
https://github.com/nipy/nipy/pull/541.patch
-# Fix backslash escaping issues in docstrings
-#
https://github.com/nipy/nipy/pull/543
-Patch:
https://github.com/nipy/nipy/pull/543.patch
-# Cython: declare pointers one per line
-#
https://github.com/nipy/nipy/pull/544
-Patch:
https://github.com/nipy/nipy/pull/544.patch
# Improve const-correctness in C code
#
https://github.com/nipy/nipy/pull/545
Patch:
https://github.com/nipy/nipy/pull/545.patch
@@ -76,8 +66,9 @@ In NIPY we aim to:
%package -n python3-nipy
Summary: %{summary}
+# Optional extra provides `matplotlib`
# Adds various plotting functionality, but not an “official” dependency
-Recommends: python3dist(matplotlib)
+Recommends: python3dist(nipy+optional)
Suggests: nipy-data
@@ -90,6 +81,9 @@ Provides: bundled(python3dist(scipy))
%description -n python3-nipy %{common_description}
+%pyproject_extras_subpkg -n python3-nipy optional
+
+
%package doc
Summary: Documentation and examples for python-nipy
@@ -109,6 +103,10 @@ rm -rvf lib/lapack_lite/
sed -r -i 's/^.*lapack_lite/# &/' lib/meson.build
sed -r -i 's/^#(external *= *)(False|0)/\1True/' setup.cfg
+# Remove ninja from build requirements
+# See
https://github.com/nipy/nipy/pull/551 for discussion
+sed -r -i '/ninja/d' pyproject.toml
+
# It looks like fff/fff_python_wrapper is a part of nipy rather than a bundled
# exgternal library.
@@ -123,12 +121,11 @@ grep -FrlI 'Generated by Cython' . | xargs -r rm -vf
cp -p nipy/algorithms/statistics/models/LICENSE.txt scipy-LICENSE.txt
#
https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters
-sed -r -e 's/^(pytest-cov|coverage|pre-commit)/# &/' dev-requirements.txt |
- tee dev-requirements-filtered.txt
+sed -i '/pytest-cov/d' pyproject.toml
%generate_buildrequires
-%pyproject_buildrequires -w %{?with_tests:dev-requirements-filtered.txt}
+%pyproject_buildrequires -w -x optional%{?with_tests:,test}
%build
@@ -148,6 +145,12 @@ install -t '%{buildroot}%{_mandir}/man1' -m 0644 -p -D \
%if %{with tests}
# The docstring says: “fixme : this one often fails. I don't really see why”
k="${k-}${k+ and }not test_gmm_bf"
+# Below tests fail since 0.6.0
+#
https://github.com/nipy/nipy/issues/562
+# some are globs for multiple tests
+k="${k-}${k+ and }not test_em"
+k="${k-}${k+ and }not test_imm"
+k="${k-}${k+ and }not test_pproba"
# See: .github/workflows/test.yml
mkdir -p for_testing
diff --git a/sources b/sources
index e219d1e..a4d3787 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (nipy-e5e063b09d094ff79d2089261828fd2b2c843ab6.tar.gz) =
905bd80fda4154df0391daf4725d417288aa3856964df4beb533eee1bb1ecaac4c0d6a24362eb471e686e45a3d5cb79c6891f5bd81140e39f6a8bd3081903360
+SHA512 (nipy-0.6.0.tar.gz) =
a59485ccd677c443b9d1e2358c3b3d523ddfa9f390c180661e9afaf3b69943e1b1670c44410954e1bba11c88b9ca20e9e586392804b5c99e9f58b5b68df4641f
commit 8383e893a5d3f8ea764c052fe4cca8a3bb6a4d06
Author: Sandro <devel(a)penguinpee.nl>
Date: Wed Feb 14 16:23:49 2024 +0100
Use forge macros
Use of %forgeversion here produces the same NVR as before.
diff --git a/python-nipy.spec b/python-nipy.spec
index 46514e3..b573e55 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -1,21 +1,23 @@
%bcond tests 1
+%global forgeurl
https://github.com/nipy/nipy
+%global version 0.5.0
%global commit e5e063b09d094ff79d2089261828fd2b2c843ab6
-%global snapdate 20231006
+%forgemeta
# Lower build type safety to level 1 to avoid `-Wint-conversion` turning
# into an error
%global build_type_safety_c 1
Name: python-nipy
-Version: 0.5.0^%{snapdate}git%(c='%{commit}'; echo "${c:0:7}")
+Version: %forgeversion
Release: %autorelease
Epoch: 1
Summary: Neuroimaging in Python FMRI analysis package
License: BSD-3-Clause
URL:
https://nipy.org/nipy
-Source0:
https://github.com/nipy/nipy/archive/%{commit}/nipy-%{commit}.tar.gz
+Source0: %forgesource
# Man pages hand-written for Fedora in groff_man(7) format based on --help
Source10: nipy_3dto4d.1
@@ -100,7 +102,7 @@ Requires: nipy-data
%prep
-%autosetup -n nipy-%{commit} -p1
+%forgeautosetup -p1
# Remove bundled lapack_lite:
rm -rvf lib/lapack_lite/
commit 06014a259573f609fc27a7785f7af85c1207d62e
Author: Sandro <devel(a)penguinpee.nl>
Date: Sun Apr 14 20:33:17 2024 +0200
Lower build type saftey (RHBZ#2261585)
This avaoids `-Wint-conversion` being turned into an error, which
breaks the build.
diff --git a/python-nipy.spec b/python-nipy.spec
index 4528952..46514e3 100644
--- a/python-nipy.spec
+++ b/python-nipy.spec
@@ -3,6 +3,10 @@
%global commit e5e063b09d094ff79d2089261828fd2b2c843ab6
%global snapdate 20231006
+# Lower build type safety to level 1 to avoid `-Wint-conversion` turning
+# into an error
+%global build_type_safety_c 1
+
Name: python-nipy
Version: 0.5.0^%{snapdate}git%(c='%{commit}'; echo "${c:0:7}")
Release: %autorelease