Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-fastcluster for openSUSE:Factory checked in at 2021-06-01 10:39:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-fastcluster (Old) and /work/SRC/openSUSE:Factory/.python-fastcluster.new.1898 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fastcluster" Tue Jun 1 10:39:17 2021 rev:9 rq:896226 version:1.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-fastcluster/python-fastcluster.changes 2021-05-23 00:06:20.734556114 +0200 +++ /work/SRC/openSUSE:Factory/.python-fastcluster.new.1898/python-fastcluster.changes 2021-06-01 10:40:52.709162070 +0200 @@ -1,0 +2,8 @@ +Sun May 23 21:17:09 UTC 2021 - Matej Cepl <mc...@suse.com> + +- Update to 1.2.0: + - Dropped support for Python 2. + - Python interface: Updated definition of the Yule distance + function, following a change in SciPy 1.6.3. + +------------------------------------------------------------------- Old: ---- fastcluster-1.1.28.tar.gz skip_error_test.patch New: ---- fastcluster-1.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-fastcluster.spec ++++++ --- /var/tmp/diff_new_pack.brK5CS/_old 2021-06-01 10:40:53.181162873 +0200 +++ /var/tmp/diff_new_pack.brK5CS/_new 2021-06-01 10:40:53.185162880 +0200 @@ -16,19 +16,17 @@ # +%define skip_python2 1 %define skip_python36 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-fastcluster -Version: 1.1.28 +Version: 1.2.0 Release: 0 Summary: Hierarchical clustering routines for Python License: BSD-2-Clause Group: Development/Languages/Python URL: https://github.com/dmuellner/fastcluster Source: https://files.pythonhosted.org/packages/source/f/fastcluster/fastcluster-%{version}.tar.gz -# PATCH-FIX-UPSTREAM skip_error_test.patch gh#dmuellner/fastcluster#21 mc...@suse.com -# Skip over erroring test -Patch0: skip_error_test.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module numpy-devel >= 1.9} BuildRequires: %{python_module pytest} ++++++ fastcluster-1.1.28.tar.gz -> fastcluster-1.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/NEWS.txt new/fastcluster-1.2.0/NEWS.txt --- old/fastcluster-1.1.28/NEWS.txt 2021-02-03 21:22:14.000000000 +0100 +++ new/fastcluster-1.2.0/NEWS.txt 2021-05-23 11:46:18.000000000 +0200 @@ -218,3 +218,9 @@ Version 1.1.28, 02/03/2021 ??? Replace deprecated ???numpy.bool??? and ???numpy.int??? by ???bool??? and ???int???. + +Version 1.2.0, 05/23/2021 + +??? Dropped support for Python 2. +??? Python interface: Updated definition of the Yule distance function, following + a change in SciPy 1.6.3. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/PKG-INFO new/fastcluster-1.2.0/PKG-INFO --- old/fastcluster-1.1.28/PKG-INFO 2021-02-03 21:31:02.764438600 +0100 +++ new/fastcluster-1.2.0/PKG-INFO 2021-05-23 14:29:16.472244000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fastcluster -Version: 1.1.28 +Version: 1.2.0 Summary: Fast hierarchical clustering routines for R and Python. Home-page: http://danifold.net Author: Daniel M??llner @@ -61,7 +61,6 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: C++ Classifier: Operating System :: OS Independent @@ -71,5 +70,6 @@ Classifier: Development Status :: 5 - Production/Stable Requires: numpy Provides: fastcluster +Requires-Python: >=3 Description-Content-Type: text/x-rst Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/docs/fastcluster.Rtex new/fastcluster-1.2.0/docs/fastcluster.Rtex --- old/fastcluster-1.1.28/docs/fastcluster.Rtex 2021-02-03 21:22:41.000000000 +0100 +++ new/fastcluster-1.2.0/docs/fastcluster.Rtex 2021-05-23 11:28:49.000000000 +0200 @@ -1,5 +1,5 @@ -\def\fastclusterversion{1.1.28} -\documentclass[fontsize=10pt,paper=letter,BCOR=-6mm]{scrartcl} +\def\fastclusterversion{1.2.0} +\documentclass[fontsize=10pt,paper=letter,BCOR=-6mm,DIV=8]{scrartcl} \usepackage[utf8]{inputenc} \usepackage{lmodern} \normalfont @@ -94,7 +94,7 @@ %\VignetteIndexEntry{User's manual} \title{The \textit{fastcluster} package: User's manual} \author{\href{http://danifold.net}{Daniel M??llner}} -\date{February 3, 2021} +\date{May 23, 2021} \subtitle{Version \fastclusterversion} \maketitle @@ -125,7 +125,10 @@ Daniel M??llner, \textit{fastcluster: Fast Hierarchical, Agglomerative Clustering Routines for R and Python}, Journal of Statistical Software, \textbf{53} (2013), no.~9, 1--18, \url{http://www.jstatsoft.org/v53/i09/}. \end{quote} -\textbf{The fastcluster package is considered stable and will undergo few changes from now on. If some years from now there have not been any updates, this does not necessarily mean that the package is unmaintained but maybe it just was not necessary to correct anything. Of course, please still report potential bugs and incompatibilities to \texttt{dan...@danifold.net}.} +The fastcluster package is considered stable and will undergo few changes from now on. If some years from now there have not been any updates, this does not necessarily mean that the package is unmaintained but maybe it just was not necessary to correct anything. Of course, please still report potential bugs and incompatibilities to \texttt{dan...@danifold.net}. + +\textbf{The \hyperref[yule]{???Yule??? distance function} changed in the Python interface of fastcluster version 1.2.0. This is following a \href{https://github.com/scipy/scipy/commit/3b22d1da98dc1b5f64bc944c21f398d4ba782bce}{change in SciPy 1.6.3}.} + \pagebreak \tableofcontents @@ -448,7 +451,7 @@ \[ d(A,B) = \|\vec c_A-\vec c_B\|, \] -where $\vec c_A$ denotes the centroid of the points in cluster $A$.\pagebreak[2] +where $\vec c_A$ denotes the centroid of the points in cluster $A$. \item [\normalfont\textit{method=\q median\q}:] $\displaystyle d(K,L) = \sqrt{\tfrac12 d(I,L)^2+\tfrac12 d(J,L)^2-\tfrac14 d(I,J)^2}$ @@ -459,7 +462,7 @@ \] in Euclidean space for all nodes $A,B$. Notice however that this distance depends on the order of the merging steps. -\item [\normalfont\textit{method=\q ward\q}:] +\item [\normalfont\textit{method=\q ward\q}:] \raggedright $\displaystyle d(K,L) = \sqrt{\frac{(|I|+|L|)\cdot d(I,L)^2+(|J|+|L|)\cdot d(J,L)^2-|L|\cdot d(I,J)^2}{|I|+|J|+|L|}}$ The global cluster dissimilarity can be expressed as @@ -608,9 +611,12 @@ \begin{description} \item[\normalfont\textit{\q yule\q}] -\[ - d(u,v) = \frac{2bc}{ad+bc} -\] +\phantomsection\label{yule} +\begin{align*} + d(u,v) &= \frac{2bc}{ad+bc} && \text{if $bc \neq 0$}\\ + d(u,v) &= 0 && \text{if $bc = 0$} +\end{align*} +Note that the second clause $d(u,v)=0$ if $bc = 0$ was introduced in fastcluster version 1.2.0. Before, the result was NaN if the denominator in the formula was zero. fastcluster is following a \href{https://github.com/scipy/scipy/commit/3b22d1da98dc1b5f64bc944c21f398d4ba782bce}{change in SciPy 1.6.3} here. \item[\normalfont\textit{\q dice\q}] \begin{gather*} @@ -653,7 +659,7 @@ \section{Behavior for NaN and infinite values}\label{sec:infnan} -Whenever the fastcluster package encounters a NaN value as the distance between nodes, either as the initial distance or as an updated distance after some merging steps, it raises an error. This was designed intentionally, even if there might be ways to propagate NaNs through the algorithms in a more or less sensible way. Indeed, since the clustering result depends on every single distance value, the presence of NaN values usually indicates a dubious clustering result, and therefore NaN values should be eliminated in preprocessing.\pagebreak[1] +Whenever the fastcluster package encounters a NaN value as the distance between nodes, either as the initial distance or as an updated distance after some merging steps, it raises an error. This was designed intentionally, even if there might be ways to propagate NaNs through the algorithms in a more or less sensible way. Indeed, since the clustering result depends on every single distance value, the presence of NaN values usually indicates a dubious clustering result, and therefore NaN values should be eliminated in preprocessing. In the R interface for vector input, coordinates with {\NA} value are interpreted as missing data and treated in the same way as R's {\dist} function does. This results in valid output whenever the resulting distances are not NaN. The Python interface does not provide any way of handling missing coordinates, and data should be processed accordingly and given as pairwise distances to the clustering algorithms in this case. Binary files old/fastcluster-1.1.28/docs/fastcluster.pdf and new/fastcluster-1.2.0/docs/fastcluster.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/fastcluster.egg-info/PKG-INFO new/fastcluster-1.2.0/fastcluster.egg-info/PKG-INFO --- old/fastcluster-1.1.28/fastcluster.egg-info/PKG-INFO 2021-02-03 21:31:02.000000000 +0100 +++ new/fastcluster-1.2.0/fastcluster.egg-info/PKG-INFO 2021-05-23 14:29:16.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fastcluster -Version: 1.1.28 +Version: 1.2.0 Summary: Fast hierarchical clustering routines for R and Python. Home-page: http://danifold.net Author: Daniel M??llner @@ -61,7 +61,6 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: C++ Classifier: Operating System :: OS Independent @@ -71,5 +70,6 @@ Classifier: Development Status :: 5 - Production/Stable Requires: numpy Provides: fastcluster +Requires-Python: >=3 Description-Content-Type: text/x-rst Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/fastcluster.egg-info/requires.txt new/fastcluster-1.2.0/fastcluster.egg-info/requires.txt --- old/fastcluster-1.1.28/fastcluster.egg-info/requires.txt 2021-02-03 21:31:02.000000000 +0100 +++ new/fastcluster-1.2.0/fastcluster.egg-info/requires.txt 2021-05-23 14:29:16.000000000 +0200 @@ -1,4 +1,4 @@ numpy>=1.9 [test] -scipy +scipy>=1.6.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/fastcluster.py new/fastcluster-1.2.0/fastcluster.py --- old/fastcluster-1.1.28/fastcluster.py 2021-02-03 21:24:34.000000000 +0100 +++ new/fastcluster-1.2.0/fastcluster.py 2021-05-23 11:30:54.000000000 +0200 @@ -20,7 +20,7 @@ """ __all__ = ['single', 'complete', 'average', 'weighted', 'ward', 'centroid', 'median', 'linkage', 'linkage_vector'] -__version_info__ = ('1', '1', '28') +__version_info__ = ('1', '2', '0') __version__ = '.'.join(__version_info__) from numpy import double, empty, array, ndarray, var, cov, dot, expand_dims, \ @@ -421,7 +421,8 @@ metric='yule' - d(u,v) = 2bc / (ad+bc) + d(u,v) = 2bc / (ad+bc) if bc???0 + d(u,v) = 0 if bc=0 metric='dice': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/setup.py new/fastcluster-1.2.0/setup.py --- old/fastcluster-1.1.28/setup.py 2019-12-31 16:49:21.000000000 +0100 +++ new/fastcluster-1.2.0/setup.py 2021-05-23 12:48:02.000000000 +0200 @@ -75,9 +75,10 @@ (2013), no. 9, 1???18, http://www.jstatsoft.org/v53/i09/. """, long_description_content_type='text/x-rst', + python_requires='>=3', requires=['numpy'], install_requires=["numpy>=1.9"], - extras_require={'test': ['scipy']}, + extras_require={'test': ['scipy>=1.6.3']}, provides=['fastcluster'], ext_modules=[Extension('_fastcluster', ['src/fastcluster_python.cpp'], @@ -112,7 +113,6 @@ "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Mathematics", "Programming Language :: Python", - "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Programming Language :: C++", "Operating System :: OS Independent", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/src/fastcluster_python.cpp new/fastcluster-1.2.0/src/fastcluster_python.cpp --- old/fastcluster-1.1.28/src/fastcluster_python.cpp 2018-05-13 22:28:24.000000000 +0200 +++ new/fastcluster-1.2.0/src/fastcluster_python.cpp 2021-05-23 10:03:04.000000000 +0200 @@ -1022,10 +1022,10 @@ } } - // Caution: zero denominators can happen here! t_float yule(const t_index i, const t_index j) const { nbool_correspond_tfft(i, j); - return static_cast<t_float>(2*NTFFT) / static_cast<t_float>(NTFFT + NFFTT); + return (NTFFT==0) ? 0 : + static_cast<t_float>(2*NTFFT) / static_cast<t_float>(NTFFT + NFFTT); } // Prevent a zero denominator for equal vectors. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/tests/__init__.py new/fastcluster-1.2.0/tests/__init__.py --- old/fastcluster-1.1.28/tests/__init__.py 2018-05-13 22:28:24.000000000 +0200 +++ new/fastcluster-1.2.0/tests/__init__.py 2021-05-22 20:38:48.000000000 +0200 @@ -3,12 +3,12 @@ class fastcluster_test(unittest.TestCase): def test(self): from tests.test import test - self.assertTrue(test(10)) + test(10) def test_nan(self): from tests.nantest import test - self.assertTrue(test()) + test() def test_vector(self): from tests.vectortest import test - self.assertTrue(test(10)) + test(10) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/tests/nantest.py new/fastcluster-1.2.0/tests/nantest.py --- old/fastcluster-1.1.28/tests/nantest.py 2021-02-03 21:24:59.000000000 +0100 +++ new/fastcluster-1.2.0/tests/nantest.py 2021-05-23 11:24:06.000000000 +0200 @@ -10,7 +10,7 @@ import numpy as np import fastcluster -version = '1.1.28' +version = '1.2.0' if fastcluster.__version__ != version: raise ValueError('Wrong module version: {} instead of {}.'.format(fastcluster.__version__, version)) @@ -66,8 +66,6 @@ except FloatingPointError: pass - return True - if __name__ == "__main__": test() print('OK.') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/tests/test.py new/fastcluster-1.2.0/tests/test.py --- old/fastcluster-1.1.28/tests/test.py 2021-02-03 21:24:55.000000000 +0100 +++ new/fastcluster-1.2.0/tests/test.py 2021-05-23 11:24:15.000000000 +0200 @@ -11,7 +11,7 @@ from scipy.spatial.distance import pdist, squareform import math -version = '1.1.28' +version = '1.2.0' if fc.__version__ != version: raise ValueError('Wrong module version: {} instead of {}.'.format(fc.__version__, version)) @@ -152,17 +152,11 @@ print('Number of points: {0}'.format(n)) D = pdist(np.random.randn(n,dim)) - try: - print('Real distance values:') - test_all(D) - D = np.round(D*n/4) - print('Integer distance values:') - test_all(D) - except AssertionError as E: - print(E) - print(squareform(D)) - return False - return True + print('Real distance values:') + test_all(D) + D = np.round(D*n/4) + print('Integer distance values:') + test_all(D) if __name__ == "__main__": test(None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastcluster-1.1.28/tests/vectortest.py new/fastcluster-1.2.0/tests/vectortest.py --- old/fastcluster-1.1.28/tests/vectortest.py 2021-02-03 21:24:50.000000000 +0100 +++ new/fastcluster-1.2.0/tests/vectortest.py 2021-05-23 11:24:23.000000000 +0200 @@ -13,7 +13,7 @@ from scipy.spatial.distance import pdist, squareform import math -version = '1.1.28' +version = '1.2.0' if fc.__version__ != version: raise ValueError('Wrong module version: {} instead of {}.'.format(fc.__version__, version)) @@ -233,13 +233,7 @@ print('Dimension: {0}'.format(dim)) print('Number of points: {0}'.format(n)) - try: - test_all(n,dim) - except AssertionError as E: - print(E.args[0]) - print(E.args[1]) - return False - return True + test_all(n,dim) if __name__ == "__main__": test(None)