Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-lazyarray for openSUSE:Factory checked in at 2021-11-10 21:46:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-lazyarray (Old) and /work/SRC/openSUSE:Factory/.python-lazyarray.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-lazyarray" Wed Nov 10 21:46:31 2021 rev:4 rq:930576 version:0.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-lazyarray/python-lazyarray.changes 2021-02-15 23:19:41.543699788 +0100 +++ /work/SRC/openSUSE:Factory/.python-lazyarray.new.1890/python-lazyarray.changes 2021-11-10 21:47:02.959827171 +0100 @@ -1,0 +2,12 @@ +Wed Nov 10 04:15:34 UTC 2021 - Steve Kowalik <steven.kowa...@suse.com> + +- Update to 0.5.0: + * Drop support for Python 2.7 + * Added a more general way to specify that an array-like object should be + treated as a scalar by lazyarray (for arrays of arrays, etc.) + * Add partial support for NumPy ufuncs that require two arguments, + e.g. "power". +- Add patch use-pytest.patch: + * Drop use of nose, use pytest methods. + +------------------------------------------------------------------- Old: ---- lazyarray-0.3.3.tar.gz New: ---- lazyarray-0.5.0.tar.gz use-pytest.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-lazyarray.spec ++++++ --- /var/tmp/diff_new_pack.Quroq3/_old 2021-11-10 21:47:03.487827401 +0100 +++ /var/tmp/diff_new_pack.Quroq3/_new 2021-11-10 21:47:03.487827401 +0100 @@ -17,20 +17,21 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} +%define skip_python2 1 %global skip_python36 1 Name: python-lazyarray -Version: 0.3.3 +Version: 0.5.0 Release: 0 Summary: Lazily-evaluated numerical array class, compatible with NumPy arrays License: BSD-3-Clause -Group: Development/Languages/Python URL: http://github.com/NeuralEnsemble/lazyarray/ Source: https://files.pythonhosted.org/packages/source/l/lazyarray/lazyarray-%{version}.tar.gz +# gh#NeuralEnsemble/lazyarray/pulls/15 +Patch0: use-pytest.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros # SECTION test requirements -BuildRequires: %{python_module nose} BuildRequires: %{python_module numpy >= 1.5} BuildRequires: %{python_module pytest} BuildRequires: %{python_module scipy} @@ -59,6 +60,7 @@ %prep %setup -q -n lazyarray-%{version} +%autopatch -p1 %build %python_build ++++++ lazyarray-0.3.3.tar.gz -> lazyarray-0.5.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/LICENSE new/lazyarray-0.5.0/LICENSE --- old/lazyarray-0.3.3/LICENSE 2019-05-13 13:40:11.000000000 +0200 +++ new/lazyarray-0.5.0/LICENSE 2021-03-16 10:55:39.129128000 +0100 @@ -1,4 +1,4 @@ -Copyright (c) 2012-2017, Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS) +Copyright (c) 2012-2020, Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/PKG-INFO new/lazyarray-0.5.0/PKG-INFO --- old/lazyarray-0.3.3/PKG-INFO 2019-05-13 13:49:08.000000000 +0200 +++ new/lazyarray-0.5.0/PKG-INFO 2021-11-09 13:39:44.744317300 +0100 @@ -1,10 +1,10 @@ Metadata-Version: 1.1 Name: lazyarray -Version: 0.3.3 +Version: 0.5.0 Summary: a Python package that provides a lazily-evaluated numerical array class, larray, based on and compatible with NumPy arrays. Home-page: http://github.com/NeuralEnsemble/lazyarray/ Author: Andrew P. Davison -Author-email: andrew.davi...@unic.cnrs-gif.fr +Author-email: andrew.davi...@cnrs.fr License: Modified BSD Description: ========= @@ -45,6 +45,5 @@ Classifier: License :: OSI Approved :: BSD License Classifier: Natural Language :: English Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Scientific/Engineering diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/changelog.txt new/lazyarray-0.5.0/changelog.txt --- old/lazyarray-0.3.3/changelog.txt 2019-05-13 13:45:05.000000000 +0200 +++ new/lazyarray-0.5.0/changelog.txt 2021-11-09 13:30:33.910052300 +0100 @@ -98,6 +98,25 @@ * Do not raise a "shape mismatch" `ValueError` if the value shape is empty. +Release 0.3.4 +============= + +* Add support for Brian quantities, and perhaps NumPy scalars in general +* Updated to test with more recent versions of Python, NumPy and SciPy +* Can now compare equality of lazyarrays to numbers and arrays + +Release 0.4.0 +============= + +* Drop support for Python 2.7 +* Added a more general way to specify that an array-like object should be treated as a scalar by lazyarray (for arrays of arrays, etc.) + +Release 0.5.0 +============= + +* Add partial support for NumPy ufuncs that require two arguments, e.g. "power". + The second argument must be a scalar, array-valued second args are not yet supported. + .. _`#3`: https://bitbucket.org/apdavison/lazyarray/issue/3/ .. _`#4`: https://bitbucket.org/apdavison/lazyarray/issue/4/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/doc/installation.txt new/lazyarray-0.5.0/doc/installation.txt --- old/lazyarray-0.3.3/doc/installation.txt 2019-05-13 13:47:53.000000000 +0200 +++ new/lazyarray-0.5.0/doc/installation.txt 2021-11-09 13:37:44.368170700 +0100 @@ -5,9 +5,9 @@ Dependencies ============ - * Python >= 2.7 - * numpy_ >= 1.8 (or >= 1.12 for Python 3) - * (optional) scipy_ >= 0.14 + * Python >= 3.4 + * numpy_ >= 1.12 + * (optional) scipy_ >= 0.17 Installing from the Python Package Index ======================================== @@ -21,12 +21,12 @@ To download and install manually, download: - https://pypi.python.org/packages/source/l/lazyarray/lazyarray-0.3.3.tar.gz + https://pypi.python.org/packages/source/l/lazyarray/lazyarray-0.5.0.tar.gz Then:: - $ tar xzf lazyarray-0.3.3.tar.gz - $ cd lazyarray-0.3.3 + $ tar xzf lazyarray-0.5.0.tar.gz + $ cd lazyarray-0.5.0 $ python setup.py install or:: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/lazyarray.py new/lazyarray-0.5.0/lazyarray.py --- old/lazyarray-0.3.3/lazyarray.py 2019-05-13 13:48:55.000000000 +0200 +++ new/lazyarray-0.5.0/lazyarray.py 2021-11-09 13:30:33.911081300 +0100 @@ -3,17 +3,17 @@ lazyarray is a Python package that provides a lazily-evaluated numerical array class, ``larray``, based on and compatible with NumPy arrays. -Copyright Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS), 2012-2019 +Copyright Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS), 2012-2020 """ -from __future__ import division -import numpy +import numbers import operator from copy import deepcopy import collections -from functools import wraps +from functools import wraps, reduce import logging +import numpy as np try: from scipy import sparse from scipy.sparse import bsr_matrix, coo_matrix, csc_matrix, csr_matrix, dia_matrix, dok_matrix, lil_matrix @@ -22,24 +22,7 @@ have_scipy = False -__version__ = "0.3.3" - -# stuff for Python 3 compatibility -try: - long -except NameError: - long = int - -try: - reduce -except NameError: - from functools import reduce - -try: - basestring -except NameError: - basestring = str - +__version__ = "0.5.0" logger = logging.getLogger("lazyarray") @@ -51,7 +34,7 @@ """ @wraps(meth) def wrapped_meth(self, val): - if isinstance(val, (larray, numpy.ndarray)) and val.shape: + if isinstance(val, (larray, np.ndarray)) and val.shape: if val.shape != self._shape: raise ValueError("shape mismatch: objects cannot be broadcast to a single shape") return meth(self, val) @@ -68,7 +51,7 @@ def full_address(addr, full_shape): - if not (isinstance(addr, numpy.ndarray) and addr.dtype == bool and addr.ndim == len(full_shape)): + if not (isinstance(addr, np.ndarray) and addr.dtype == bool and addr.ndim == len(full_shape)): if not isinstance(addr, tuple): addr = (addr,) if len(addr) < len(full_shape): @@ -84,7 +67,7 @@ Calculate the size of the sub-array represented by `addr` """ def size(x, max): - if isinstance(x, (int, long, numpy.integer)): + if isinstance(x, (int, np.integer)): return None elif isinstance(x, slice): y = min(max, x.stop or max) # slice limits can go past the bounds @@ -98,7 +81,7 @@ raise TypeError("Unsupported index type %s" % type(x)) addr = full_address(addr, full_shape) - if isinstance(addr, numpy.ndarray) and addr.dtype == bool: + if isinstance(addr, np.ndarray) and addr.dtype == bool: return (addr.sum(),) elif all(isinstance(x, collections.Sized) for x in addr): return (len(addr[0]),) @@ -145,6 +128,25 @@ return op +def is_array_like(value): + # False for numbers, generators, functions, iterators + if not isinstance(value, collections.Sized): + return False + if sparse.issparse(value): + return True + if isinstance(value, collections.Mapping): + # because we may wish to have lazy arrays in which each + # item is a dict, for example + return False + if getattr(value, "is_lazyarray_scalar", False): + # for user-defined classes that are "Sized" but that should + # be treated as individual elements in a lazy array + # the attribute "is_lazyarray_scalar" can be defined with value + # True. + return False + return True + + class larray(object): """ @@ -166,7 +168,7 @@ """ Create a new lazy array. - `value` : may be an int, long, float, bool, NumPy array, iterator, + `value` : may be an int, float, bool, NumPy array, iterator, generator or a function, `f(i)` or `f(i,j)`, depending on the dimensions of the array. @@ -177,7 +179,7 @@ self.dtype = dtype self.operations = [] - if isinstance(value, basestring): + if isinstance(value, str): raise TypeError("An larray cannot be created from a string") elif isinstance(value, larray): if shape is not None and value.shape is not None: @@ -187,20 +189,23 @@ self.dtype = dtype or value.dtype self.operations = value.operations # should deepcopy? - elif isinstance(value, collections.Sized): # False for numbers, generators, functions, iterators + elif is_array_like(value): # False for numbers, generators, functions, iterators if have_scipy and sparse.issparse(value): # For sparse matrices self.dtype = dtype or value.dtype - elif not isinstance(value, numpy.ndarray): - value = numpy.array(value, dtype=dtype) + elif not isinstance(value, np.ndarray): + value = np.array(value, dtype=dtype) elif dtype is not None: - assert numpy.can_cast(value.dtype, dtype, casting='safe') # or could convert value to the provided dtype - if shape and value.shape != shape: + assert np.can_cast(value.dtype, dtype, casting='safe') # or could convert value to the provided dtype + if shape and value.shape and value.shape != shape: raise ValueError("Array has shape %s, value has shape %s" % (shape, value.shape)) - self._shape = value.shape + if value.shape: + self._shape = value.shape + else: + self._shape = shape self.base_value = value else: - assert numpy.isreal(value) # also True for callables, generators, iterators + assert np.isreal(value) # also True for callables, generators, iterators self._shape = shape if dtype is None or isinstance(value, dtype): self.base_value = value @@ -211,7 +216,19 @@ self.base_value = value def __eq__(self, other): - return self.base_value == other.base_value and self.operations == other.operations and self._shape == other.shape + if isinstance(other, self.__class__): + return self.base_value == other.base_value and self.operations == other.operations and self._shape == other.shape + elif isinstance(other, numbers.Number): + if len(self.operations) == 0: + if isinstance(self.base_value, numbers.Number): + return self.base_value == other + elif isinstance(self.base_value, np.ndarray): + return (self.base_value == other).all() + # todo: we could perform the evaluation ourselves, but that could have a performance hit + raise Exception("You will need to evaluate this lazyarray before checking for equality") + else: + # todo: add support for NumPy arrays + raise TypeError("Cannot at present compare equality of lazyarray and {}".format(type(other))) def __deepcopy__(self, memo): obj = type(self).__new__(type(self)) @@ -226,7 +243,7 @@ obj.dtype = self.dtype obj.operations = [] for f, arg in self.operations: - if isinstance(f, numpy.ufunc): + if isinstance(f, np.ufunc): obj.operations.append((f, deepcopy(arg))) else: obj.operations.append((deepcopy(f), deepcopy(arg))) @@ -240,7 +257,7 @@ def _set_shape(self, value): if (hasattr(self.base_value, "shape") and - self.base_value.shape and # values of type numpy.float have an empty shape + self.base_value.shape and # values of type np.float have an empty shape self.base_value.shape != value): raise ValueError("Lazy array has fixed shape %s, cannot be changed to %s" % (self.base_value.shape, value)) self._shape = value @@ -274,7 +291,7 @@ @property def is_homogeneous(self): """True if all the elements of the array are the same.""" - hom_base = isinstance(self.base_value, (int, long, numpy.integer, float, bool)) \ + hom_base = isinstance(self.base_value, (int, np.integer, float, bool)) \ or type(self.base_value) == self.dtype \ or (isinstance(self.dtype, type) and isinstance(self.base_value, self.dtype)) hom_ops = all(obj.is_homogeneous for f, obj in self.operations if isinstance(obj, larray)) @@ -289,7 +306,7 @@ def _homogeneous_array(self, addr): self.check_bounds(addr) shape = self._partial_shape(addr) - return numpy.ones(shape, type(self.base_value)) + return np.ones(shape, type(self.base_value)) def _full_address(self, addr): return full_address(addr, self._shape) @@ -298,28 +315,28 @@ self.check_bounds(addr) def axis_indices(x, max): - if isinstance(x, (int, long, numpy.integer)): + if isinstance(x, (int, np.integer)): return x elif isinstance(x, slice): # need to handle negative values in slice - return numpy.arange((x.start or 0), + return np.arange((x.start or 0), (x.stop or max), (x.step or 1), dtype=int) elif isinstance(x, collections.Sized): if hasattr(x, 'dtype') and x.dtype == bool: - return numpy.arange(max)[x] + return np.arange(max)[x] else: - return numpy.array(x) + return np.array(x) else: raise TypeError("Unsupported index type %s" % type(x)) addr = self._full_address(addr) - if isinstance(addr, numpy.ndarray) and addr.dtype == bool: + if isinstance(addr, np.ndarray) and addr.dtype == bool: if addr.ndim == 1: - return (numpy.arange(self._shape[0])[addr],) + return (np.arange(self._shape[0])[addr],) else: raise NotImplementedError() elif all(isinstance(x, collections.Sized) for x in addr): - indices = [numpy.array(x) for x in addr] + indices = [np.array(x) for x in addr] return indices else: indices = [axis_indices(x, max) for (x, max) in zip(addr, self._shape)] @@ -328,7 +345,7 @@ elif len(indices) == 2: if isinstance(indices[0], collections.Sized): if isinstance(indices[1], collections.Sized): - mesh_xy = numpy.meshgrid(*indices) + mesh_xy = np.meshgrid(*indices) return (mesh_xy[0].T, mesh_xy[1].T) # meshgrid works on (x,y), not (i,j) return indices else: @@ -353,16 +370,16 @@ base_val = self.base_value else: base_val = self._homogeneous_array(addr) * self.base_value - elif isinstance(self.base_value, (int, long, numpy.integer, float, bool)): + elif isinstance(self.base_value, (int, np.integer, float, bool)): base_val = self._homogeneous_array(addr) * self.base_value - elif isinstance(self.base_value, numpy.ndarray): + elif isinstance(self.base_value, np.ndarray): base_val = self.base_value[addr] elif have_scipy and sparse.issparse(self.base_value): # For sparse matrices larr[2, :] base_val = self.base_value[addr] elif callable(self.base_value): indices = self._array_indices(addr) base_val = self.base_value(*indices) - if isinstance(base_val, numpy.ndarray) and base_val.shape == (1,): + if isinstance(base_val, np.ndarray) and base_val.shape == (1,): base_val = base_val[0] elif hasattr(self.base_value, "lazily_evaluate"): base_val = self.base_value.lazily_evaluate(addr, shape=self._shape) @@ -392,7 +409,7 @@ return hasattr(arr, 'dtype') and arr.dtype == bool def check_axis(x, size): - if isinstance(x, (int, long, numpy.integer)): + if isinstance(x, (int, np.integer)): lower = upper = x elif isinstance(x, slice): lower = x.start or 0 @@ -417,7 +434,7 @@ if (lower < -size) or (upper >= size): raise IndexError("Index out of bounds") full_addr = self._full_address(addr) - if isinstance(addr, numpy.ndarray) and addr.dtype == bool: + if isinstance(addr, np.ndarray) and addr.dtype == bool: if len(addr.shape) > len(self._shape): raise IndexError("Too many indices for array") for xmax, size in zip(addr.shape, self._shape): @@ -434,7 +451,7 @@ where `x` will be a scalar or a numpy array. >>> m = larray(4, shape=(2,2)) - >>> m.apply(numpy.sqrt) + >>> m.apply(np.sqrt) >>> m.evaluate() array([[ 2., 2.], [ 2., 2.]]) @@ -468,13 +485,13 @@ if simplify: x = self.base_value else: - x = self.base_value * numpy.ones(self._shape, dtype=self.dtype) - elif isinstance(self.base_value, (int, long, numpy.integer, float, bool, numpy.bool_)): - x = self.base_value * numpy.ones(self._shape, dtype=self.dtype) - elif isinstance(self.base_value, numpy.ndarray): + x = self.base_value * np.ones(self._shape, dtype=self.dtype) + elif isinstance(self.base_value, (int, np.integer, float, bool, np.bool_)): + x = self.base_value * np.ones(self._shape, dtype=self.dtype) + elif isinstance(self.base_value, np.ndarray): x = self.base_value elif callable(self.base_value): - x = numpy.array(numpy.fromfunction(self.base_value, shape=self._shape, dtype=int), dtype=self.dtype) + x = np.array(np.fromfunction(self.base_value, shape=self._shape, dtype=int), dtype=self.dtype) elif hasattr(self.base_value, "lazily_evaluate"): x = self.base_value.lazily_evaluate(shape=self._shape) elif isinstance(self.base_value, VectorizedIterable): @@ -484,11 +501,11 @@ elif have_scipy and sparse.issparse(self.base_value): # For sparse matrices if empty_val!=0: x = self.base_value.toarray((sparse.csc_matrix)) - x = numpy.where(x, x, numpy.nan) + x = np.where(x, x, np.nan) else: x = self.base_value.toarray((sparse.csc_matrix)) elif isinstance(self.base_value, collections.Iterator): - x = numpy.fromiter(self.base_value, dtype=self.dtype or float, count=self.size) + x = np.fromiter(self.base_value, dtype=self.dtype or float, count=self.size) if x.shape != self._shape: x = x.reshape(self._shape) else: @@ -537,6 +554,15 @@ __abs__ = lazy_unary_operation('abs') +class VectorizedIterable(object): + """ + Base class for any class which has a method `next(n)`, i.e., where you + can choose how many values to return rather than just returning one at a + time. + """ + pass + + def _build_ufunc(func): """Return a ufunc that works with lazy arrays""" def larray_compatible_ufunc(x): @@ -549,19 +575,28 @@ return larray_compatible_ufunc -class VectorizedIterable(object): - """ - Base class for any class which has a method `next(n)`, i.e., where you - can choose how many values to return rather than just returning one at a - time. - """ - pass +def _build_ufunc_2nd_arg(func): + """Return a ufunc taking a second, non-array argument, that works with lazy arrays""" + def larray_compatible_ufunc2(x1, x2): + if not isinstance(x2, numbers.Number): + raise TypeError("lazyarry ufuncs do not accept an array as the second argument") + if isinstance(x1, larray): + def partial(x): + return func(x, x2) + y = deepcopy(x1) + y.apply(partial) + return y + else: + return func(x1, x2) + return larray_compatible_ufunc2 # build lazy-array compatible versions of NumPy ufuncs namespace = globals() -for name in dir(numpy): - obj = getattr(numpy, name) - if isinstance(obj, numpy.ufunc): - namespace[name] = _build_ufunc(obj) - +for name in dir(np): + obj = getattr(np, name) + if isinstance(obj, np.ufunc) and name not in namespace: + if name in ("power", "fmod", "arctan2, hypot, ldexp, maximum, minimum"): + namespace[name] = _build_ufunc_2nd_arg(obj) + else: + namespace[name] = _build_ufunc(obj) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/setup.py new/lazyarray-0.5.0/setup.py --- old/lazyarray-0.3.3/setup.py 2019-05-13 13:46:09.000000000 +0200 +++ new/lazyarray-0.5.0/setup.py 2021-11-09 13:30:33.911701700 +0100 @@ -4,11 +4,11 @@ setup( name='lazyarray', - version='0.3.3', + version='0.5.0', py_modules=['lazyarray'], license='Modified BSD', author="Andrew P. Davison", - author_email="andrew.davi...@unic.cnrs-gif.fr", + author_email="andrew.davi...@cnrs.fr", url="http://github.com/NeuralEnsemble/lazyarray/", description="a Python package that provides a lazily-evaluated numerical array class, larray, based on and compatible with NumPy arrays.", long_description=open('README.rst').read(), @@ -21,7 +21,6 @@ 'License :: OSI Approved :: BSD License', 'Natural Language :: English', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', 'Topic :: Scientific/Engineering', ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/test/test_lazy_arrays_from_Sparse_Matrices.py new/lazyarray-0.5.0/test/test_lazy_arrays_from_Sparse_Matrices.py --- old/lazyarray-0.3.3/test/test_lazy_arrays_from_Sparse_Matrices.py 2019-05-13 13:40:11.000000000 +0200 +++ new/lazyarray-0.5.0/test/test_lazy_arrays_from_Sparse_Matrices.py 2021-03-25 15:39:01.584000800 +0100 @@ -1,6 +1,6 @@ -# Support creating lazy arrays from SciPy sparse matrices +# Support creating lazy arrays from SciPy sparse matrices # -# 1 program for the 7 sparse matrices classes : +# 1 program for the 7 sparse matrices classes : # # csc_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Column matrix # csr_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Row matrix @@ -14,7 +14,7 @@ import numpy as np from lazyarray import larray -from scipy import sparse +from scipy import sparse import random @@ -52,14 +52,14 @@ #print "n =", n #print "p =", p #print "q =", q -#print "r =", r +#print "r =", r ############################################################## # Definition of an array ############################################################## -def test_function_array_general(): +def test_function_array_general(): A = np.array([[i, j, k], [l, m, n], [p, q, r]]) #print "A =" #print A @@ -112,9 +112,9 @@ #print dia return dia - -if __name__ == "__main__": + +if __name__ == "__main__": ############################################################## @@ -124,10 +124,10 @@ ############################################################## #print "Array general =" - test_function_array_general() + test_function_array_general() #print "Array =" #print test_function_array_general() - + # print "----" # print "Sparse array csc general =" @@ -174,18 +174,18 @@ #print "----------------------------------------------------------------------" - + ############################################################## # Call the sparse matrices # Create a lazy array from sparse matrices ############################################################## - - + + Array_csc_matrices = sparse_csc_matrices().toarray() #print "Array csc matrices =" #print Array_csc_matrices - + Array_csr_matrices = sparse_csr_matrices().toarray() #print "Array csr matrices =" #print Array_csr_matrices @@ -197,7 +197,7 @@ Array_lil_matrices = sparse_lil_matrices().toarray() #print "Array lil matrices =" #print Array_lil_matrices - + Array_dok_matrices = sparse_dok_matrices().toarray() #print "Array dok matrices =" #print Array_dok_matrices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/test/test_lazyarray.py new/lazyarray-0.5.0/test/test_lazyarray.py --- old/lazyarray-0.3.3/test/test_lazyarray.py 2019-05-13 13:40:11.000000000 +0200 +++ new/lazyarray-0.5.0/test/test_lazyarray.py 2021-03-25 15:39:01.584420000 +0100 @@ -2,12 +2,12 @@ """ Unit tests for ``larray`` class -Copyright Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS), 2012-2017 +Copyright Andrew P. Davison, Jo??l Chavas and Elodie Legou??e (CNRS), 2012-2020 """ from lazyarray import larray, VectorizedIterable, sqrt, partial_shape -import numpy -from nose.tools import assert_raises, assert_equal +import numpy as np +from nose.tools import assert_raises, assert_equal, assert_not_equal from nose import SkipTest from numpy.testing import assert_array_equal, assert_array_almost_equal import operator @@ -25,7 +25,7 @@ def next(self, n): s = self.start self.start += n * self.delta - return s + self.delta * numpy.arange(n) + return s + self.delta * np.arange(n) # test larray @@ -50,19 +50,19 @@ def test_create_with_list(): A = larray([1, 2, 3], shape=(3,)) assert A.shape == (3,) - assert_array_equal(A.evaluate(), numpy.array([1, 2, 3])) + assert_array_equal(A.evaluate(), np.array([1, 2, 3])) def test_create_with_array(): - A = larray(numpy.array([1, 2, 3]), shape=(3,)) + A = larray(np.array([1, 2, 3]), shape=(3,)) assert A.shape == (3,) - assert_array_equal(A.evaluate(), numpy.array([1, 2, 3])) + assert_array_equal(A.evaluate(), np.array([1, 2, 3])) def test_create_with_array_and_dtype(): - A = larray(numpy.array([1, 2, 3]), shape=(3,), dtype=int) + A = larray(np.array([1, 2, 3]), shape=(3,), dtype=int) assert A.shape == (3,) - assert_array_equal(A.evaluate(), numpy.array([1, 2, 3])) + assert_array_equal(A.evaluate(), np.array([1, 2, 3])) def test_create_with_generator(): @@ -73,25 +73,25 @@ i += 1 A = larray(plusone(), shape=(5, 11)) assert_array_equal(A.evaluate(), - numpy.arange(55).reshape((5, 11))) + np.arange(55).reshape((5, 11))) def test_create_with_function1D(): A = larray(lambda i: 99 - i, shape=(3,)) assert_array_equal(A.evaluate(), - numpy.array([99, 98, 97])) + np.array([99, 98, 97])) def test_create_with_function1D_and_dtype(): A = larray(lambda i: 99 - i, shape=(3,), dtype=float) assert_array_equal(A.evaluate(), - numpy.array([99.0, 98.0, 97.0])) + np.array([99.0, 98.0, 97.0])) def test_create_with_function2D(): A = larray(lambda i, j: 3 * j - 2 * i, shape=(2, 3)) assert_array_equal(A.evaluate(), - numpy.array([[0, 3, 6], + np.array([[0, 3, 6], [-2, 1, 4]])) @@ -107,23 +107,23 @@ A = 3 + larray(lambda i: 99 - i, shape=(3,)) B = larray(A, shape=(3,), dtype=int) assert_array_equal(B.evaluate(), - numpy.array([102, 101, 100])) + np.array([102, 101, 100])) ## For sparse matrices def test_create_with_sparse_array(): - row = numpy.array([0, 2, 2, 0, 1, 2]) - col = numpy.array([0, 0, 1, 2, 2, 2]) - data = numpy.array([1, 2, 3, 4, 5, 6]) + row = np.array([0, 2, 2, 0, 1, 2]) + col = np.array([0, 0, 1, 2, 2, 2]) + data = np.array([1, 2, 3, 4, 5, 6]) bsr = larray(bsr_matrix((data, (row, col)), shape=(3, 3))) # For bsr_matrix coo = larray(coo_matrix((data, (row, col)), shape=(3, 3))) # For coo_matrix csc = larray(csc_matrix((data, (row, col)), shape=(3, 3))) # For csc_matrix csr = larray(csr_matrix((data, (row, col)), shape=(3, 3))) # For csr_matrix - data_dia = numpy.array([[1, 2, 3, 4]]).repeat(3, axis=0) # For dia_matrix - offsets_dia = numpy.array([0, -1, 2]) # For dia_matrix + data_dia = np.array([[1, 2, 3, 4]]).repeat(3, axis=0) # For dia_matrix + offsets_dia = np.array([0, -1, 2]) # For dia_matrix dia = larray(dia_matrix((data_dia, offsets_dia), shape=(4, 4))) # For dia_matrix dok = larray(dok_matrix(((row, col)), shape=(3, 3))) # For dok_matrix - lil = larray(lil_matrix(data, shape=(3, 3))) # For lil_matrix + lil = larray(lil_matrix(data, shape=(3, 3))) # For lil_matrix assert bsr.shape == (3, 3) assert coo.shape == (3, 3) assert csc.shape == (3, 3) @@ -161,7 +161,7 @@ csr0 = csr /100.0 csr1 = 0.2 + csr0 assert_array_almost_equal(csc0.evaluate(), np.array([[0.01, 0., 0.04], [0., 0., 0.05], [0.02, 0.03, 0.06]])) - assert_array_almost_equal(csc0.evaluate(), np.array([[0.21, 0.2, 0.24], [0.2, 0.2, 0.25], [0.22, 0.23, 0.26]])) + assert_array_almost_equal(csc0.evaluate(), np.array([[0.21, 0.2, 0.24], [0.2, 0.2, 0.25], [0.22, 0.23, 0.26]])) # For dia_matrix dia0 = dia /100.0 dia1 = 0.2 + dia0 @@ -187,7 +187,7 @@ assert_raises(IndexError, dia.__getitem__, (3, 0)) assert_raises(IndexError, dok.__getitem__, (3, 0)) assert_raises(IndexError, lil.__getitem__, (3, 0)) - + # def test_columnwise_iteration_with_flat_array(): # m = larray(5, shape=(4,3)) # 4 rows, 3 columns @@ -195,7 +195,7 @@ # assert_equal(cols, [5, 5, 5]) # # def test_columnwise_iteration_with_structured_array(): -# input = numpy.arange(12).reshape((4,3)) +# input = np.arange(12).reshape((4,3)) # m = larray(input, shape=(4,3)) # 4 rows, 3 columns # cols = [col for col in m.by_column()] # assert_array_equal(cols[0], input[:,0]) @@ -205,20 +205,20 @@ # input = lambda i,j: 2*i + j # m = larray(input, shape=(4,3)) # cols = [col for col in m.by_column()] -# assert_array_equal(cols[0], numpy.array([0, 2, 4, 6])) -# assert_array_equal(cols[1], numpy.array([1, 3, 5, 7])) -# assert_array_equal(cols[2], numpy.array([2, 4, 6, 8])) +# assert_array_equal(cols[0], np.array([0, 2, 4, 6])) +# assert_array_equal(cols[1], np.array([1, 3, 5, 7])) +# assert_array_equal(cols[2], np.array([2, 4, 6, 8])) # # def test_columnwise_iteration_with_flat_array_and_mask(): # m = larray(5, shape=(4,3)) # 4 rows, 3 columns -# mask = numpy.array([True, False, True]) +# mask = np.array([True, False, True]) # cols = [col for col in m.by_column(mask=mask)] # assert_equal(cols, [5, 5]) # # def test_columnwise_iteration_with_structured_array_and_mask(): -# input = numpy.arange(12).reshape((4,3)) +# input = np.arange(12).reshape((4,3)) # m = larray(input, shape=(4,3)) # 4 rows, 3 columns -# mask = numpy.array([False, True, True]) +# mask = np.array([False, True, True]) # cols = [col for col in m.by_column(mask=mask)] # assert_array_equal(cols[0], input[:,1]) # assert_array_equal(cols[1], input[:,2]) @@ -241,11 +241,11 @@ def test_evaluate_with_flat_array(): m = larray(5, shape=(4, 3)) - assert_array_equal(m.evaluate(), 5 * numpy.ones((4, 3))) + assert_array_equal(m.evaluate(), 5 * np.ones((4, 3))) def test_evaluate_with_structured_array(): - input = numpy.arange(12).reshape((4, 3)) + input = np.arange(12).reshape((4, 3)) m = larray(input, shape=(4, 3)) assert_array_equal(m.evaluate(), input) @@ -254,7 +254,7 @@ input = lambda i, j: 2 * i + j m = larray(input, shape=(4, 3)) assert_array_equal(m.evaluate(), - numpy.array([[0, 1, 2], + np.array([[0, 1, 2], [2, 3, 4], [4, 5, 6], [6, 7, 8]])) @@ -264,7 +264,7 @@ input = MockRNG(0, 1) m = larray(input, shape=(7, 3)) assert_array_equal(m.evaluate(), - numpy.arange(21).reshape((7, 3))) + np.arange(21).reshape((7, 3))) def test_evaluate_twice_with_vectorized_iterable(): @@ -272,9 +272,9 @@ m1 = larray(input, shape=(7, 3)) + 3 m2 = larray(input, shape=(7, 3)) + 17 assert_array_equal(m1.evaluate(), - numpy.arange(3, 24).reshape((7, 3))) + np.arange(3, 24).reshape((7, 3))) assert_array_equal(m2.evaluate(), - numpy.arange(38, 59).reshape((7, 3))) + np.arange(38, 59).reshape((7, 3))) def test_evaluate_structured_array_size_1_simplify(): @@ -287,7 +287,7 @@ def test_iadd_with_flat_array(): m = larray(5, shape=(4, 3)) m += 2 - assert_array_equal(m.evaluate(), 7 * numpy.ones((4, 3))) + assert_array_equal(m.evaluate(), 7 * np.ones((4, 3))) assert_equal(m.base_value, 5) assert_equal(m.evaluate(simplify=True), 7) @@ -307,43 +307,43 @@ def test_lt_with_structured_array(): - input = numpy.arange(12).reshape((4, 3)) + input = np.arange(12).reshape((4, 3)) m0 = larray(input, shape=(4, 3)) m1 = m0 < 5 assert_array_equal(m1.evaluate(simplify=True), input < 5) def test_structured_array_lt_array(): - input = numpy.arange(12).reshape((4, 3)) + input = np.arange(12).reshape((4, 3)) m0 = larray(input, shape=(4, 3)) - comparison = 5 * numpy.ones((4, 3)) + comparison = 5 * np.ones((4, 3)) m1 = m0 < comparison assert_array_equal(m1.evaluate(simplify=True), input < comparison) def test_rsub_with_structured_array(): - m = larray(numpy.arange(12).reshape((4, 3))) + m = larray(np.arange(12).reshape((4, 3))) assert_array_equal((11 - m).evaluate(), - numpy.arange(11, -1, -1).reshape((4, 3))) + np.arange(11, -1, -1).reshape((4, 3))) def test_inplace_mul_with_structured_array(): m = larray((3 * x for x in range(4)), shape=(4,)) m *= 7 assert_array_equal(m.evaluate(), - numpy.arange(0, 84, 21)) + np.arange(0, 84, 21)) def test_abs_with_structured_array(): m = larray(lambda i, j: i - j, shape=(3, 4)) assert_array_equal(abs(m).evaluate(), - numpy.array([[0, 1, 2, 3], + np.array([[0, 1, 2, 3], [1, 0, 1, 2], [2, 1, 0, 1]])) def test_multiple_operations_with_structured_array(): - input = numpy.arange(12).reshape((4, 3)) + input = np.arange(12).reshape((4, 3)) m0 = larray(input, shape=(4, 3)) m1 = (m0 + 2) < 5 m2 = (m0 < 5) + 2 @@ -356,16 +356,16 @@ m = larray(lambda i: i, shape=(5,)) m0 = m / 100.0 m1 = 0.2 + m0 - assert_array_almost_equal(m0.evaluate(), numpy.array([0.0, 0.01, 0.02, 0.03, 0.04]), decimal=12) - assert_array_almost_equal(m1.evaluate(), numpy.array([0.20, 0.21, 0.22, 0.23, 0.24]), decimal=12) + assert_array_almost_equal(m0.evaluate(), np.array([0.0, 0.01, 0.02, 0.03, 0.04]), decimal=12) + assert_array_almost_equal(m1.evaluate(), np.array([0.20, 0.21, 0.22, 0.23, 0.24]), decimal=12) assert_equal(m1[0], 0.2) def test_operations_combining_constant_and_structured_arrays(): m0 = larray(10, shape=(5,)) - m1 = larray(numpy.arange(5)) + m1 = larray(np.arange(5)) m2 = m0 + m1 - assert_array_almost_equal(m2.evaluate(), numpy.arange(10, 15)) + assert_array_almost_equal(m2.evaluate(), np.arange(10, 15)) def test_apply_function_to_constant_array(): @@ -381,7 +381,7 @@ def test_apply_function_to_structured_array(): f = lambda m: 2 * m + 3 - input = numpy.arange(12).reshape((4, 3)) + input = np.arange(12).reshape((4, 3)) m0 = larray(input, shape=(4, 3)) m1 = f(m0) assert isinstance(m1, larray) @@ -394,7 +394,7 @@ f = lambda m: 2 * m + 3 m1 = f(m0) assert_array_equal(m1.evaluate(), - numpy.array([[3, 5, 7], + np.array([[3, 5, 7], [7, 9, 11], [11, 13, 15], [15, 17, 19]])) @@ -432,7 +432,7 @@ def test_getitem__with_slice_from_constant_array(): m = larray(3, shape=(4, 3)) assert_array_equal(m[:3, 0], - numpy.array([3, 3, 3])) + np.array([3, 3, 3])) def test_getitem__with_thinslice_from_constant_array(): @@ -443,31 +443,31 @@ def test_getitem__with_mask_from_constant_array(): m = larray(3, shape=(4, 3)) assert_array_equal(m[1, (0, 2)], - numpy.array([3, 3])) + np.array([3, 3])) def test_getitem_with_numpy_integers_from_2D_constant_array(): - if not hasattr(numpy, "int64"): + if not hasattr(np, "int64"): raise SkipTest("test requires a 64-bit system") m = larray(3, shape=(4, 3)) - assert m[numpy.int64(0), numpy.int32(0)] == 3 + assert m[np.int64(0), np.int32(0)] == 3 def test_getslice_from_constant_array(): m = larray(3, shape=(4, 3)) assert_array_equal(m[:2], - numpy.array([[3, 3, 3], + np.array([[3, 3, 3], [3, 3, 3]])) def test_getslice_past_bounds_from_constant_array(): m = larray(3, shape=(5,)) assert_array_equal(m[2:10], - numpy.array([3, 3, 3])) + np.array([3, 3, 3])) def test_getitem_from_structured_array(): - m = larray(3 * numpy.ones((4, 3)), shape=(4, 3)) + m = larray(3 * np.ones((4, 3)), shape=(4, 3)) assert m[0, 0] == m[3, 2] == m[-1, 2] == m[-4, 2] == m[2, -3] == 3 assert_raises(IndexError, m.__getitem__, (4, 0)) assert_raises(IndexError, m.__getitem__, (2, -4)) @@ -492,7 +492,7 @@ input = MockRNG(0, 1) m = larray(input, shape=(7,)) m3 = m[3] - assert isinstance(m3, (int, numpy.integer)) + assert isinstance(m3, (int, np.integer)) assert_equal(m3, 0) assert_equal(m[0], 1) @@ -500,7 +500,7 @@ def test_getitem_with_slice_from_2D_functional_array(): m = larray(lambda i, j: 2 * i + j, shape=(6, 5)) assert_array_equal(m[2:5, 3:], - numpy.array([[7, 8], + np.array([[7, 8], [9, 10], [11, 12]])) @@ -510,34 +510,34 @@ return i * i + 2 * i * j + 3 m = larray(test_function, shape=(3, 15)) assert_array_equal(m[:, 3:14:3], - numpy.fromfunction(test_function, shape=(3, 15))[:, 3:14:3]) + np.fromfunction(test_function, shape=(3, 15))[:, 3:14:3]) def test_getitem_with_mask_from_2D_functional_array(): - a = numpy.arange(30).reshape((6, 5)) + a = np.arange(30).reshape((6, 5)) m = larray(lambda i, j: 5 * i + j, shape=(6, 5)) assert_array_equal(a[[2, 3], [3, 4]], - numpy.array([13, 19])) + np.array([13, 19])) assert_array_equal(m[[2, 3], [3, 4]], - numpy.array([13, 19])) + np.array([13, 19])) def test_getitem_with_mask_from_1D_functional_array(): - m = larray(lambda i: numpy.sqrt(i), shape=(10,)) + m = larray(lambda i: np.sqrt(i), shape=(10,)) assert_array_equal(m[[0, 1, 4, 9]], - numpy.array([0, 1, 2, 3])) + np.array([0, 1, 2, 3])) def test_getitem_with_boolean_mask_from_1D_functional_array(): - m = larray(lambda i: numpy.sqrt(i), shape=(10,)) - assert_array_equal(m[numpy.array([1, 1, 0, 0, 1, 0, 0, 0, 0, 1], dtype=bool)], - numpy.array([0, 1, 2, 3])) + m = larray(lambda i: np.sqrt(i), shape=(10,)) + assert_array_equal(m[np.array([1, 1, 0, 0, 1, 0, 0, 0, 0, 1], dtype=bool)], + np.array([0, 1, 2, 3])) def test_getslice_from_2D_functional_array(): m = larray(lambda i, j: 2 * i + j, shape=(6, 5)) assert_array_equal(m[1:3], - numpy.array([[2, 3, 4, 5, 6], + np.array([[2, 3, 4, 5, 6], [4, 5, 6, 7, 8]])) @@ -547,10 +547,10 @@ def test_getitem_from_array_with_operations(): - a1 = numpy.array([[1, 3, 5], [7, 9, 11]]) + a1 = np.array([[1, 3, 5], [7, 9, 11]]) m1 = larray(a1) - f = lambda i, j: numpy.sqrt(i * i + j * j) - a2 = numpy.fromfunction(f, shape=(2, 3)) + f = lambda i, j: np.sqrt(i * i + j * j) + a2 = np.fromfunction(f, shape=(2, 3)) m2 = larray(f, shape=(2, 3)) a3 = 3 * a1 + a2 m3 = 3 * m1 + m2 @@ -582,11 +582,11 @@ def test_partially_evaluate_constant_array_with_one_element(): m = larray(3, shape=(1,)) - a = 3 * numpy.ones((1,)) + a = 3 * np.ones((1,)) m1 = larray(3, shape=(1, 1)) - a1 = 3 * numpy.ones((1, 1)) + a1 = 3 * np.ones((1, 1)) m2 = larray(3, shape=(1, 1, 1)) - a2 = 3 * numpy.ones((1, 1, 1)) + a2 = 3 * np.ones((1, 1, 1)) assert_equal(a[0], m[0]) assert_equal(a.shape, m.shape) assert_equal(a[:].shape, m[:].shape) @@ -603,9 +603,9 @@ def test_partially_evaluate_constant_array_with_boolean_index(): m = larray(3, shape=(4, 5)) - a = 3 * numpy.ones((4, 5)) - addr_bool = numpy.array([True, True, False, False, True]) - addr_int = numpy.array([0, 1, 4]) + a = 3 * np.ones((4, 5)) + addr_bool = np.array([True, True, False, False, True]) + addr_int = np.array([0, 1, 4]) assert_equal(a[::2, addr_bool].shape, a[::2, addr_int].shape) assert_equal(a[::2, addr_int].shape, m[::2, addr_int].shape) assert_equal(a[::2, addr_bool].shape, m[::2, addr_bool].shape) @@ -613,37 +613,37 @@ def test_partially_evaluate_constant_array_with_all_boolean_indices_false(): m = larray(3, shape=(3,)) - a = 3 * numpy.ones((3,)) - addr_bool = numpy.array([False, False, False]) + a = 3 * np.ones((3,)) + addr_bool = np.array([False, False, False]) assert_equal(a[addr_bool].shape, m[addr_bool].shape) def test_partially_evaluate_constant_array_with_only_one_boolean_indice_true(): m = larray(3, shape=(3,)) - a = 3 * numpy.ones((3,)) - addr_bool = numpy.array([False, True, False]) + a = 3 * np.ones((3,)) + addr_bool = np.array([False, True, False]) assert_equal(a[addr_bool].shape, m[addr_bool].shape) assert_equal(m[addr_bool][0], a[0]) def test_partially_evaluate_constant_array_with_boolean_indice_as_random_valid_ndarray(): m = larray(3, shape=(3,)) - a = 3 * numpy.ones((3,)) - addr_bool = numpy.random.rand(3) > 0.5 + a = 3 * np.ones((3,)) + addr_bool = np.random.rand(3) > 0.5 while not addr_bool.any(): # random array, but not [False, False, False] - addr_bool = numpy.random.rand(3) > 0.5 + addr_bool = np.random.rand(3) > 0.5 assert_equal(a[addr_bool].shape, m[addr_bool].shape) assert_equal(m[addr_bool][0], a[addr_bool][0]) def test_partially_evaluate_constant_array_size_one_with_boolean_index_true(): m = larray(3, shape=(1,)) - a = numpy.array([3]) - addr_bool = numpy.array([True]) + a = np.array([3]) + addr_bool = np.array([True]) m1 = larray(3, shape=(1, 1)) - a1 = 3 * numpy.ones((1, 1)) - addr_bool1 = numpy.array([[True]], ndmin=2) + a1 = 3 * np.ones((1, 1)) + addr_bool1 = np.array([[True]], ndmin=2) assert_equal(m[addr_bool][0], a[0]) assert_equal(m[addr_bool], a[addr_bool]) assert_equal(m[addr_bool].shape, a[addr_bool].shape) @@ -653,8 +653,8 @@ def test_partially_evaluate_constant_array_size_two_with_boolean_index_true(): m2 = larray(3, shape=(1, 2)) - a2 = 3 * numpy.ones((1, 2)) - addr_bool2 = numpy.ones((1, 2), dtype=bool) + a2 = 3 * np.ones((1, 2)) + addr_bool2 = np.ones((1, 2), dtype=bool) assert_equal(m2[addr_bool2][0], a2[addr_bool2][0]) assert_equal(m2[addr_bool2].shape, a2[addr_bool2].shape) @@ -662,28 +662,28 @@ def test_partially_evaluate_constant_array_size_one_with_boolean_index_false(): m = larray(3, shape=(1,)) m1 = larray(3, shape=(1, 1)) - a = numpy.array([3]) - a1 = numpy.array([[3]], ndmin=2) - addr_bool = numpy.array([False]) - addr_bool1 = numpy.array([[False]], ndmin=2) - addr_bool2 = numpy.array([False]) + a = np.array([3]) + a1 = np.array([[3]], ndmin=2) + addr_bool = np.array([False]) + addr_bool1 = np.array([[False]], ndmin=2) + addr_bool2 = np.array([False]) assert_equal(m[addr_bool].shape, a[addr_bool].shape) assert_equal(m1[addr_bool1].shape, a1[addr_bool1].shape) def test_partially_evaluate_constant_array_size_with_empty_boolean_index(): m = larray(3, shape=(1,)) - a = numpy.array([3]) - addr_bool = numpy.array([], dtype='bool') + a = np.array([3]) + addr_bool = np.array([], dtype='bool') assert_equal(m[addr_bool].shape, a[addr_bool].shape) assert_equal(m[addr_bool].shape, (0,)) def test_partially_evaluate_functional_array_with_boolean_index(): m = larray(lambda i, j: 5 * i + j, shape=(4, 5)) - a = numpy.arange(20.0).reshape((4, 5)) - addr_bool = numpy.array([True, True, False, False, True]) - addr_int = numpy.array([0, 1, 4]) + a = np.arange(20.0).reshape((4, 5)) + addr_bool = np.array([True, True, False, False, True]) + addr_int = np.array([0, 1, 4]) assert_equal(a[::2, addr_bool].shape, a[::2, addr_int].shape) assert_equal(a[::2, addr_int].shape, m[::2, addr_int].shape) assert_equal(a[::2, addr_bool].shape, m[::2, addr_bool].shape) @@ -693,15 +693,32 @@ input = MockRNG(0, 1) m = larray(input, shape=(7, 3)) assert_array_equal(m[::2, (0, 2)], - numpy.arange(8).reshape((4, 2))) + np.arange(8).reshape((4, 2))) -def test_equality(): +def test_equality_with_lazyarray(): m1 = larray(42.0, shape=(4, 5)) / 23.0 + 2.0 m2 = larray(42.0, shape=(4, 5)) / 23.0 + 2.0 assert_equal(m1, m2) +def test_equality_with_number(): + m1 = larray(42.0, shape=(4, 5)) + m2 = larray([42, 42, 42]) + m3 = larray([42, 42, 43]) + m4 = larray(42.0, shape=(4, 5)) + 2 + assert_equal(m1, 42.0) + assert_equal(m2, 42) + assert_not_equal(m3, 42) + assert_raises(Exception, m4.__eq__, 44.0) + + +def test_equality_with_array(): + m1 = larray(42.0, shape=(4, 5)) + target = 42.0 * np.ones((4, 5)) + assert_raises(TypeError, m1.__eq__, target) + + def test_deepcopy(): m1 = 3 * larray(lambda i, j: 5 * i + j, shape=(4, 5)) + 2 m2 = deepcopy(m1) @@ -716,27 +733,27 @@ m1 = sqrt(larray([x ** 2 for x in range(5)])) m2 = deepcopy(m1) m1.base_value[0] = 49 - assert_array_equal(m1.evaluate(), numpy.array([7, 1, 2, 3, 4])) - assert_array_equal(m2.evaluate(), numpy.array([0, 1, 2, 3, 4])) + assert_array_equal(m1.evaluate(), np.array([7, 1, 2, 3, 4])) + assert_array_equal(m2.evaluate(), np.array([0, 1, 2, 3, 4])) def test_set_shape(): m = larray(42) + larray(lambda i: 3 * i) assert_equal(m.shape, None) m.shape = (5,) - assert_array_equal(m.evaluate(), numpy.array([42, 45, 48, 51, 54])) + assert_array_equal(m.evaluate(), np.array([42, 45, 48, 51, 54])) def test_call(): - A = larray(numpy.array([1, 2, 3]), shape=(3,)) - 1 + A = larray(np.array([1, 2, 3]), shape=(3,)) - 1 B = 0.5 * larray(lambda i: 2 * i, shape=(3,)) C = B(A) - assert_array_equal(C.evaluate(), numpy.array([0, 1, 2])) - assert_array_equal(A.evaluate(), numpy.array([0, 1, 2])) # A should be unchanged + assert_array_equal(C.evaluate(), np.array([0, 1, 2])) + assert_array_equal(A.evaluate(), np.array([0, 1, 2])) # A should be unchanged def test_call2(): - positions = numpy.array( + positions = np.array( [[0., 2., 4., 6., 8.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) @@ -747,8 +764,8 @@ def distances(A, B): d = A - B d **= 2 - d = numpy.sum(d, axis=-1) - numpy.sqrt(d, d) + d = np.sum(d, axis=-1) + np.sqrt(d, d) return d def distance_generator(f, g): @@ -760,7 +777,7 @@ f_delay = 1000 * larray(lambda d: 0.1 * (1 + d), shape=(4, 5)) assert_array_almost_equal( f_delay(distance_map).evaluate(), - numpy.array([[100, 300, 500, 700, 900], + np.array([[100, 300, 500, 700, 900], [300, 100, 300, 500, 700], [500, 300, 100, 300, 500], [700, 500, 300, 100, 300]], dtype=float), @@ -768,7 +785,7 @@ # repeat, should be idempotent assert_array_almost_equal( f_delay(distance_map).evaluate(), - numpy.array([[100, 300, 500, 700, 900], + np.array([[100, 300, 500, 700, 900], [300, 100, 300, 500, 700], [500, 300, 100, 300, 500], [700, 500, 300, 100, 300]], dtype=float), @@ -777,16 +794,16 @@ def test__issue4(): # In order to avoid the errors associated with version changes of numpy, mask1 and mask2 no longer contain boolean values ??????but integer values - a = numpy.arange(12).reshape((4, 3)) - b = larray(numpy.arange(12).reshape((4, 3))) + a = np.arange(12).reshape((4, 3)) + b = larray(np.arange(12).reshape((4, 3))) mask1 = (slice(None), int(True)) - mask2 = (slice(None), numpy.array([int(True)])) + mask2 = (slice(None), np.array([int(True)])) assert_equal(b[mask1].shape, partial_shape(mask1, b.shape), a[mask1].shape) assert_equal(b[mask2].shape, partial_shape(mask2, b.shape), a[mask2].shape) def test__issue3(): - a = numpy.arange(12).reshape((4, 3)) + a = np.arange(12).reshape((4, 3)) b = larray(a) c = larray(lambda i, j: 3*i + j, shape=(4, 3)) assert_array_equal(a[(1, 3), :][:, (0, 2)], b[(1, 3), :][:, (0, 2)]) @@ -796,7 +813,7 @@ def test_partial_shape(): - a = numpy.arange(12).reshape((4, 3)) + a = np.arange(12).reshape((4, 3)) test_cases = [ (slice(None), (4, 3)), ((slice(None), slice(None)), (4, 3)), @@ -804,27 +821,27 @@ (1, (3,)), ((1, slice(None)), (3,)), ([0, 2, 3], (3, 3)), - (numpy.array([0, 2, 3]), (3, 3)), - ((numpy.array([0, 2, 3]), slice(None)), (3, 3)), - (numpy.array([True, False, True, True]), (3, 3)), - #(numpy.array([True, False]), (1, 3)), # not valid with NumPy 1.13 - (numpy.array([[True, False, False], [False, False, False], [True, True, False], [False, True, False]]), (4,)), - #(numpy.array([[True, False, False], [False, False, False], [True, True, False]]), (3,)), # not valid with NumPy 1.13 + (np.array([0, 2, 3]), (3, 3)), + ((np.array([0, 2, 3]), slice(None)), (3, 3)), + (np.array([True, False, True, True]), (3, 3)), + #(np.array([True, False]), (1, 3)), # not valid with NumPy 1.13 + (np.array([[True, False, False], [False, False, False], [True, True, False], [False, True, False]]), (4,)), + #(np.array([[True, False, False], [False, False, False], [True, True, False]]), (3,)), # not valid with NumPy 1.13 ((3, 1), tuple()), ((slice(None), 1), (4,)), ((slice(None), slice(1, None, 3)), (4, 1)), - ((numpy.array([0, 3]), 2), (2,)), - ((numpy.array([0, 3]), numpy.array([1, 2])), (2,)), - ((slice(None), numpy.array([2])), (4, 1)), + ((np.array([0, 3]), 2), (2,)), + ((np.array([0, 3]), np.array([1, 2])), (2,)), + ((slice(None), np.array([2])), (4, 1)), (((1, 3), (0, 2)), (2,)), - (numpy.array([], bool), (0, 3)), + (np.array([], bool), (0, 3)), ] for mask, expected_shape in test_cases: assert_equal(partial_shape(mask, a.shape), a[mask].shape) assert_equal(partial_shape(mask, a.shape), expected_shape) - b = numpy.arange(5) + b = np.arange(5) test_cases = [ - (numpy.arange(5), (5,)) + (np.arange(5), (5,)) ] for mask, expected_shape in test_cases: assert_equal(partial_shape(mask, b.shape), b[mask].shape) @@ -832,7 +849,7 @@ def test_is_homogeneous(): m0 = larray(10, shape=(5,)) - m1 = larray(numpy.arange(1, 6)) + m1 = larray(np.arange(1, 6)) m2 = m0 + m1 m3 = 9 + m0 / m1 assert m0.is_homogeneous diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lazyarray-0.3.3/test/test_ufunc.py new/lazyarray-0.5.0/test/test_ufunc.py --- old/lazyarray-0.3.3/test/test_ufunc.py 2019-05-13 13:40:11.000000000 +0200 +++ new/lazyarray-0.5.0/test/test_ufunc.py 2021-11-09 13:29:27.532858100 +0100 @@ -4,41 +4,59 @@ Copyright Andrew P. Davison, 2012-2017 """ -from lazyarray import larray, sqrt, cos -import numpy +from lazyarray import larray, sqrt, cos, power, fmod +import numpy as np from numpy.testing import assert_array_equal, assert_array_almost_equal +from nose.tools import assert_raises def test_sqrt_from_array(): - A = larray(numpy.array([1, 4, 9, 16, 25])) + A = larray(np.array([1, 4, 9, 16, 25])) assert_array_equal(sqrt(A).evaluate(), - numpy.arange(1, 6)) + np.arange(1, 6)) def test_sqrt_from_iterator(): A = larray(iter([1, 4, 9, 16, 25]), shape=(5,)) assert_array_equal(sqrt(A).evaluate(), - numpy.arange(1, 6)) + np.arange(1, 6)) def test_sqrt_from_func(): A = larray(lambda x: (x + 1) ** 2, shape=(5,)) assert_array_equal(sqrt(A).evaluate(), - numpy.arange(1, 6)) + np.arange(1, 6)) def test_sqrt_normal_array(): - A = numpy.array([1, 4, 9, 16, 25]) + A = np.array([1, 4, 9, 16, 25]) assert_array_equal(sqrt(A), - numpy.arange(1, 6)) + np.arange(1, 6)) def test_cos_from_generator(): def clock(): - for x in numpy.arange(0, 2 * numpy.pi, numpy.pi / 2): + for x in np.arange(0, 2 * np.pi, np.pi / 2): yield x A = larray(clock(), shape=(2, 2)) assert_array_almost_equal(cos(A).evaluate(), - numpy.array([[1.0, 0.0], + np.array([[1.0, 0.0], [-1.0, 0.0]]), decimal=15) + + +def test_power_from_array(): + A = larray(np.array([1, 4, 9, 16, 25])) + assert_array_equal(power(A, 0.5).evaluate(), + np.arange(1, 6)) + + +def test_power_with_plain_array(): + A = np.array([1, 4, 9, 16, 25]) + assert_array_equal(power(A, 0.5), np.arange(1, 6)) + + +def test_fmod_with_array_as_2nd_arg(): + A = larray(np.array([1, 4, 9, 16, 25])) + B = larray(np.array([1, 4, 9, 16, 25])) + assert_raises(TypeError, fmod, A, B) ++++++ use-pytest.patch ++++++ >From 69b649519a19eececd738abfa8e879a5d6e09f5d Mon Sep 17 00:00:00 2001 From: "Ankur Sinha (Ankur Sinha Gmail)" <sanjay.an...@gmail.com> Date: Sat, 22 May 2021 15:40:03 +0100 Subject: [PATCH 1/2] fix(tests): use pytest nose is deprecated upstream (the last commit was in 2016.) and is also being deprecated in Fedora. https://github.com/nose-devs/nose/commits/master The nose website says: https://nose.readthedocs.io/en/latest/ "Nose has been in maintenance mode for the past several years and will likely cease without a new person/team to take over maintainership. New projects should consider using Nose2, py.test, or just plain unittest/unittest2." Deprecation of nose in Fedora: https://fedoraproject.org/wiki/Changes/DeprecateNose --- test/test_lazyarray.py | 203 ++++++++++++++++++++--------------------- 1 file changed, 101 insertions(+), 102 deletions(-) Index: lazyarray-0.5.0/test/test_lazyarray.py =================================================================== --- lazyarray-0.5.0.orig/test/test_lazyarray.py +++ lazyarray-0.5.0/test/test_lazyarray.py @@ -7,11 +7,10 @@ Copyright Andrew P. Davison, Jo??l Chava from lazyarray import larray, VectorizedIterable, sqrt, partial_shape import numpy as np -from nose.tools import assert_raises, assert_equal, assert_not_equal -from nose import SkipTest from numpy.testing import assert_array_equal, assert_array_almost_equal import operator from copy import deepcopy +import pytest from scipy.sparse import bsr_matrix, coo_matrix, csc_matrix, csr_matrix, dia_matrix, dok_matrix, lil_matrix @@ -96,11 +95,11 @@ def test_create_with_function2D(): def test_create_inconsistent(): - assert_raises(ValueError, larray, [1, 2, 3], shape=4) + pytest.raises(ValueError, larray, [1, 2, 3], shape=4) def test_create_with_string(): - assert_raises(TypeError, larray, "123", shape=3) + pytest.raises(TypeError, larray, "123", shape=3) def test_create_with_larray(): @@ -180,19 +179,19 @@ def test_create_with_sparse_array(): def test_getitem_from_2D_sparse_array(): - assert_raises(IndexError, bsr.__getitem__, (3, 0)) - assert_raises(IndexError, coo.__getitem__, (3, 0)) - assert_raises(IndexError, csc.__getitem__, (3, 0)) - assert_raises(IndexError, csr.__getitem__, (3, 0)) - assert_raises(IndexError, dia.__getitem__, (3, 0)) - assert_raises(IndexError, dok.__getitem__, (3, 0)) - assert_raises(IndexError, lil.__getitem__, (3, 0)) + pytest.raises(IndexError, bsr.__getitem__, (3, 0)) + pytest.raises(IndexError, coo.__getitem__, (3, 0)) + pytest.raises(IndexError, csc.__getitem__, (3, 0)) + pytest.raises(IndexError, csr.__getitem__, (3, 0)) + pytest.raises(IndexError, dia.__getitem__, (3, 0)) + pytest.raises(IndexError, dok.__getitem__, (3, 0)) + pytest.raises(IndexError, lil.__getitem__, (3, 0)) # def test_columnwise_iteration_with_flat_array(): # m = larray(5, shape=(4,3)) # 4 rows, 3 columns # cols = [col for col in m.by_column()] -# assert_equal(cols, [5, 5, 5]) +# assert cols == [5, 5, 5] # # def test_columnwise_iteration_with_structured_array(): # input = np.arange(12).reshape((4,3)) @@ -213,7 +212,7 @@ def test_create_with_sparse_array(): # m = larray(5, shape=(4,3)) # 4 rows, 3 columns # mask = np.array([True, False, True]) # cols = [col for col in m.by_column(mask=mask)] -# assert_equal(cols, [5, 5]) +# assert cols == [5, 5] # # def test_columnwise_iteration_with_structured_array_and_mask(): # input = np.arange(12).reshape((4,3)) @@ -228,15 +227,15 @@ def test_size_related_properties(): m1 = larray(1, shape=(9, 7)) m2 = larray(1, shape=(13,)) m3 = larray(1) - assert_equal(m1.nrows, 9) - assert_equal(m1.ncols, 7) - assert_equal(m1.size, 63) - assert_equal(m2.nrows, 13) - assert_equal(m2.ncols, 1) - assert_equal(m2.size, 13) - assert_raises(ValueError, lambda: m3.nrows) - assert_raises(ValueError, lambda: m3.ncols) - assert_raises(ValueError, lambda: m3.size) + assert m1.nrows == 9 + assert m1.ncols == 7 + assert m1.size == 63 + assert m2.nrows == 13 + assert m2.ncols == 1 + assert m2.size == 13 + pytest.raises(ValueError, lambda: m3.nrows) + pytest.raises(ValueError, lambda: m3.ncols) + pytest.raises(ValueError, lambda: m3.size) def test_evaluate_with_flat_array(): @@ -279,31 +278,31 @@ def test_evaluate_twice_with_vectorized_ def test_evaluate_structured_array_size_1_simplify(): m = larray([5.0], shape=(1,)) - assert_equal(m.evaluate(simplify=True), 5.0) + assert m.evaluate(simplify=True) == 5.0 n = larray([2.0], shape=(1,)) - assert_equal((m/n).evaluate(simplify=True), 2.5) + assert (m/n).evaluate(simplify=True) == 2.5 def test_iadd_with_flat_array(): m = larray(5, shape=(4, 3)) m += 2 assert_array_equal(m.evaluate(), 7 * np.ones((4, 3))) - assert_equal(m.base_value, 5) - assert_equal(m.evaluate(simplify=True), 7) + assert m.base_value == 5 + assert m.evaluate(simplify=True) == 7 def test_add_with_flat_array(): m0 = larray(5, shape=(4, 3)) m1 = m0 + 2 - assert_equal(m1.evaluate(simplify=True), 7) - assert_equal(m0.evaluate(simplify=True), 5) + assert m1.evaluate(simplify=True) == 7 + assert m0.evaluate(simplify=True) == 5 def test_lt_with_flat_array(): m0 = larray(5, shape=(4, 3)) m1 = m0 < 10 - assert_equal(m1.evaluate(simplify=True), True) - assert_equal(m0.evaluate(simplify=True), 5) + assert m1.evaluate(simplify=True) is True + assert m0.evaluate(simplify=True) == 5 def test_lt_with_structured_array(): @@ -358,7 +357,7 @@ def test_multiple_operations_with_functi m1 = 0.2 + m0 assert_array_almost_equal(m0.evaluate(), np.array([0.0, 0.01, 0.02, 0.03, 0.04]), decimal=12) assert_array_almost_equal(m1.evaluate(), np.array([0.20, 0.21, 0.22, 0.23, 0.24]), decimal=12) - assert_equal(m1[0], 0.2) + assert m1[0] == 0.2 def test_operations_combining_constant_and_structured_arrays(): @@ -373,10 +372,10 @@ def test_apply_function_to_constant_arra m0 = larray(5, shape=(4, 3)) m1 = f(m0) assert isinstance(m1, larray) - assert_equal(m1.evaluate(simplify=True), 13) + assert m1.evaluate(simplify=True) == 13 # the following tests the internals, not the behaviour # it is just to check I understand what's going on - assert_equal(m1.operations, [(operator.mul, 2), (operator.add, 3)]) + assert m1.operations == [(operator.mul, 2), (operator.add, 3)] def test_apply_function_to_structured_array(): @@ -404,24 +403,24 @@ def test_add_two_constant_arrays(): m0 = larray(5, shape=(4, 3)) m1 = larray(7, shape=(4, 3)) m2 = m0 + m1 - assert_equal(m2.evaluate(simplify=True), 12) + assert m2.evaluate(simplify=True) == 12 # the following tests the internals, not the behaviour # it is just to check I understand what's going on - assert_equal(m2.base_value, m0.base_value) - assert_equal(m2.operations, [(operator.add, m1)]) + assert m2.base_value == m0.base_value + assert m2.operations == [(operator.add, m1)] def test_add_incommensurate_arrays(): m0 = larray(5, shape=(4, 3)) m1 = larray(7, shape=(5, 3)) - assert_raises(ValueError, m0.__add__, m1) + pytest.raises(ValueError, m0.__add__, m1) def test_getitem_from_2D_constant_array(): m = larray(3, shape=(4, 3)) assert m[0, 0] == m[3, 2] == m[-1, 2] == m[-4, 2] == m[2, -3] == 3 - assert_raises(IndexError, m.__getitem__, (4, 0)) - assert_raises(IndexError, m.__getitem__, (2, -4)) + pytest.raises(IndexError, m.__getitem__, (4, 0)) + pytest.raises(IndexError, m.__getitem__, (2, -4)) def test_getitem_from_1D_constant_array(): @@ -437,7 +436,7 @@ def test_getitem__with_slice_from_consta def test_getitem__with_thinslice_from_constant_array(): m = larray(3, shape=(4, 3)) - assert_equal(m[2:3, 0:1], 3) + assert m[2:3, 0:1] == 3 def test_getitem__with_mask_from_constant_array(): @@ -448,7 +447,7 @@ def test_getitem__with_mask_from_constan def test_getitem_with_numpy_integers_from_2D_constant_array(): if not hasattr(np, "int64"): - raise SkipTest("test requires a 64-bit system") + pytest.skip("test requires a 64-bit system") m = larray(3, shape=(4, 3)) assert m[np.int64(0), np.int32(0)] == 3 @@ -469,23 +468,23 @@ def test_getslice_past_bounds_from_const def test_getitem_from_structured_array(): m = larray(3 * np.ones((4, 3)), shape=(4, 3)) assert m[0, 0] == m[3, 2] == m[-1, 2] == m[-4, 2] == m[2, -3] == 3 - assert_raises(IndexError, m.__getitem__, (4, 0)) - assert_raises(IndexError, m.__getitem__, (2, -4)) + pytest.raises(IndexError, m.__getitem__, (4, 0)) + pytest.raises(IndexError, m.__getitem__, (2, -4)) def test_getitem_from_2D_functional_array(): m = larray(lambda i, j: 2 * i + j, shape=(6, 5)) - assert_equal(m[5, 4], 14) + assert m[5, 4] == 14 def test_getitem_from_1D_functional_array(): m = larray(lambda i: i ** 3, shape=(6,)) - assert_equal(m[5], 125) + assert m[5] == 125 def test_getitem_from_3D_functional_array(): m = larray(lambda i, j, k: i + j + k, shape=(2, 3, 4)) - assert_raises(NotImplementedError, m.__getitem__, (0, 1, 2)) + pytest.raises(NotImplementedError, m.__getitem__, (0, 1, 2)) def test_getitem_from_vectorized_iterable(): @@ -493,8 +492,8 @@ def test_getitem_from_vectorized_iterabl m = larray(input, shape=(7,)) m3 = m[3] assert isinstance(m3, (int, np.integer)) - assert_equal(m3, 0) - assert_equal(m[0], 1) + assert m3 == 0 + assert m[0] == 1 def test_getitem_with_slice_from_2D_functional_array(): @@ -543,7 +542,7 @@ def test_getslice_from_2D_functional_arr def test_getitem_from_iterator_array(): m = larray(iter([1, 2, 3]), shape=(3,)) - assert_raises(NotImplementedError, m.__getitem__, 2) + pytest.raises(NotImplementedError, m.__getitem__, 2) def test_getitem_from_array_with_operations(): @@ -561,23 +560,23 @@ def test_getitem_from_array_with_operati def test_evaluate_with_invalid_base_value(): m = larray(range(5)) m.base_value = "foo" - assert_raises(ValueError, m.evaluate) + pytest.raises(ValueError, m.evaluate) def test_partially_evaluate_with_invalid_base_value(): m = larray(range(5)) m.base_value = "foo" - assert_raises(ValueError, m._partially_evaluate, 3) + pytest.raises(ValueError, m._partially_evaluate, 3) def test_check_bounds_with_invalid_address(): m = larray([[1, 3, 5], [7, 9, 11]]) - assert_raises(TypeError, m.check_bounds, (object(), 1)) + pytest.raises(TypeError, m.check_bounds, (object(), 1)) def test_check_bounds_with_invalid_address2(): m = larray([[1, 3, 5], [7, 9, 11]]) - assert_raises(ValueError, m.check_bounds, ([], 1)) + pytest.raises(ValueError, m.check_bounds, ([], 1)) def test_partially_evaluate_constant_array_with_one_element(): @@ -587,18 +586,18 @@ def test_partially_evaluate_constant_arr a1 = 3 * np.ones((1, 1)) m2 = larray(3, shape=(1, 1, 1)) a2 = 3 * np.ones((1, 1, 1)) - assert_equal(a[0], m[0]) - assert_equal(a.shape, m.shape) - assert_equal(a[:].shape, m[:].shape) - assert_equal(a, m.evaluate()) - assert_equal(a1.shape, m1.shape) - assert_equal(a1[0,:].shape, m1[0,:].shape) - assert_equal(a1[:].shape, m1[:].shape) - assert_equal(a1, m1.evaluate()) - assert_equal(a2.shape, m2.shape) - assert_equal(a2[:, 0,:].shape, m2[:, 0,:].shape) - assert_equal(a2[:].shape, m2[:].shape) - assert_equal(a2, m2.evaluate()) + assert a[0] == m[0] + assert a.shape == m.shape + assert a[:].shape == m[:].shape + assert a == m.evaluate() + assert a1.shape == m1.shape + assert a1[0, :].shape == m1[0, :].shape + assert a1[:].shape == m1[:].shape + assert a1 == m1.evaluate() + assert a2.shape == m2.shape + assert a2[:, 0, :].shape == m2[:, 0, :].shape + assert a2[:].shape == m2[:].shape + assert a2 == m2.evaluate() def test_partially_evaluate_constant_array_with_boolean_index(): @@ -606,24 +605,24 @@ def test_partially_evaluate_constant_arr a = 3 * np.ones((4, 5)) addr_bool = np.array([True, True, False, False, True]) addr_int = np.array([0, 1, 4]) - assert_equal(a[::2, addr_bool].shape, a[::2, addr_int].shape) - assert_equal(a[::2, addr_int].shape, m[::2, addr_int].shape) - assert_equal(a[::2, addr_bool].shape, m[::2, addr_bool].shape) + assert a[::2, addr_bool].shape == a[::2, addr_int].shape + assert a[::2, addr_int].shape == m[::2, addr_int].shape + assert a[::2, addr_bool].shape == m[::2, addr_bool].shape def test_partially_evaluate_constant_array_with_all_boolean_indices_false(): m = larray(3, shape=(3,)) a = 3 * np.ones((3,)) addr_bool = np.array([False, False, False]) - assert_equal(a[addr_bool].shape, m[addr_bool].shape) + assert a[addr_bool].shape == m[addr_bool].shape def test_partially_evaluate_constant_array_with_only_one_boolean_indice_true(): m = larray(3, shape=(3,)) a = 3 * np.ones((3,)) addr_bool = np.array([False, True, False]) - assert_equal(a[addr_bool].shape, m[addr_bool].shape) - assert_equal(m[addr_bool][0], a[0]) + assert a[addr_bool].shape == m[addr_bool].shape + assert m[addr_bool][0] == a[0] def test_partially_evaluate_constant_array_with_boolean_indice_as_random_valid_ndarray(): @@ -633,8 +632,8 @@ def test_partially_evaluate_constant_arr while not addr_bool.any(): # random array, but not [False, False, False] addr_bool = np.random.rand(3) > 0.5 - assert_equal(a[addr_bool].shape, m[addr_bool].shape) - assert_equal(m[addr_bool][0], a[addr_bool][0]) + assert a[addr_bool].shape == m[addr_bool].shape + assert m[addr_bool][0] == a[addr_bool][0] def test_partially_evaluate_constant_array_size_one_with_boolean_index_true(): @@ -644,19 +643,19 @@ def test_partially_evaluate_constant_arr m1 = larray(3, shape=(1, 1)) a1 = 3 * np.ones((1, 1)) addr_bool1 = np.array([[True]], ndmin=2) - assert_equal(m[addr_bool][0], a[0]) - assert_equal(m[addr_bool], a[addr_bool]) - assert_equal(m[addr_bool].shape, a[addr_bool].shape) - assert_equal(m1[addr_bool1][0], a1[addr_bool1][0]) - assert_equal(m1[addr_bool1].shape, a1[addr_bool1].shape) + assert m[addr_bool][0] == a[0] + assert m[addr_bool] == a[addr_bool] + assert m[addr_bool].shape == a[addr_bool].shape + assert m1[addr_bool1][0] == a1[addr_bool1][0] + assert m1[addr_bool1].shape == a1[addr_bool1].shape def test_partially_evaluate_constant_array_size_two_with_boolean_index_true(): m2 = larray(3, shape=(1, 2)) a2 = 3 * np.ones((1, 2)) addr_bool2 = np.ones((1, 2), dtype=bool) - assert_equal(m2[addr_bool2][0], a2[addr_bool2][0]) - assert_equal(m2[addr_bool2].shape, a2[addr_bool2].shape) + assert m2[addr_bool2][0] == a2[addr_bool2][0] + assert m2[addr_bool2].shape == a2[addr_bool2].shape def test_partially_evaluate_constant_array_size_one_with_boolean_index_false(): @@ -667,16 +666,16 @@ def test_partially_evaluate_constant_arr addr_bool = np.array([False]) addr_bool1 = np.array([[False]], ndmin=2) addr_bool2 = np.array([False]) - assert_equal(m[addr_bool].shape, a[addr_bool].shape) - assert_equal(m1[addr_bool1].shape, a1[addr_bool1].shape) + assert m[addr_bool].shape == a[addr_bool].shape + assert m1[addr_bool1].shape == a1[addr_bool1].shape def test_partially_evaluate_constant_array_size_with_empty_boolean_index(): m = larray(3, shape=(1,)) a = np.array([3]) addr_bool = np.array([], dtype='bool') - assert_equal(m[addr_bool].shape, a[addr_bool].shape) - assert_equal(m[addr_bool].shape, (0,)) + assert m[addr_bool].shape == a[addr_bool].shape + assert m[addr_bool].shape == (0,) def test_partially_evaluate_functional_array_with_boolean_index(): @@ -684,9 +683,9 @@ def test_partially_evaluate_functional_a a = np.arange(20.0).reshape((4, 5)) addr_bool = np.array([True, True, False, False, True]) addr_int = np.array([0, 1, 4]) - assert_equal(a[::2, addr_bool].shape, a[::2, addr_int].shape) - assert_equal(a[::2, addr_int].shape, m[::2, addr_int].shape) - assert_equal(a[::2, addr_bool].shape, m[::2, addr_bool].shape) + assert a[::2, addr_bool].shape == a[::2, addr_int].shape + assert a[::2, addr_int].shape == m[::2, addr_int].shape + assert a[::2, addr_bool].shape == m[::2, addr_bool].shape def test_getslice_with_vectorized_iterable(): @@ -699,7 +698,7 @@ def test_getslice_with_vectorized_iterab def test_equality_with_lazyarray(): m1 = larray(42.0, shape=(4, 5)) / 23.0 + 2.0 m2 = larray(42.0, shape=(4, 5)) / 23.0 + 2.0 - assert_equal(m1, m2) + assert m1 == m2 def test_equality_with_number(): @@ -707,16 +706,16 @@ def test_equality_with_number(): m2 = larray([42, 42, 42]) m3 = larray([42, 42, 43]) m4 = larray(42.0, shape=(4, 5)) + 2 - assert_equal(m1, 42.0) - assert_equal(m2, 42) - assert_not_equal(m3, 42) - assert_raises(Exception, m4.__eq__, 44.0) + assert m1 == 42.0 + assert m2 == 42 + assert m3 != 42 + pytest.raises(Exception, m4.__eq__, 44.0) def test_equality_with_array(): m1 = larray(42.0, shape=(4, 5)) target = 42.0 * np.ones((4, 5)) - assert_raises(TypeError, m1.__eq__, target) + pytest.raises(TypeError, m1.__eq__, target) def test_deepcopy(): @@ -724,8 +723,8 @@ def test_deepcopy(): m2 = deepcopy(m1) m1.shape = (3, 4) m3 = deepcopy(m1) - assert_equal(m1.shape, m3.shape, (3, 4)) - assert_equal(m2.shape, (4, 5)) + assert m1.shape == m3.shape == (3, 4) + assert m2.shape == (4, 5) assert_array_equal(m1.evaluate(), m3.evaluate()) @@ -739,7 +738,7 @@ def test_deepcopy_with_ufunc(): def test_set_shape(): m = larray(42) + larray(lambda i: 3 * i) - assert_equal(m.shape, None) + assert m.shape is None m.shape = (5,) assert_array_equal(m.evaluate(), np.array([42, 45, 48, 51, 54])) @@ -798,8 +797,8 @@ def test__issue4(): b = larray(np.arange(12).reshape((4, 3))) mask1 = (slice(None), int(True)) mask2 = (slice(None), np.array([int(True)])) - assert_equal(b[mask1].shape, partial_shape(mask1, b.shape), a[mask1].shape) - assert_equal(b[mask2].shape, partial_shape(mask2, b.shape), a[mask2].shape) + assert b[mask1].shape == partial_shape(mask1, b.shape) == a[mask1].shape + assert b[mask2].shape == partial_shape(mask2, b.shape) == a[mask2].shape def test__issue3(): @@ -837,15 +836,15 @@ def test_partial_shape(): (np.array([], bool), (0, 3)), ] for mask, expected_shape in test_cases: - assert_equal(partial_shape(mask, a.shape), a[mask].shape) - assert_equal(partial_shape(mask, a.shape), expected_shape) + assert partial_shape(mask, a.shape) == a[mask].shape + assert partial_shape(mask, a.shape) == expected_shape b = np.arange(5) test_cases = [ (np.arange(5), (5,)) ] for mask, expected_shape in test_cases: - assert_equal(partial_shape(mask, b.shape), b[mask].shape) - assert_equal(partial_shape(mask, b.shape), expected_shape) + assert partial_shape(mask, b.shape) == b[mask].shape + assert partial_shape(mask, b.shape) == expected_shape def test_is_homogeneous(): m0 = larray(10, shape=(5,)) Index: lazyarray-0.5.0/test/test_ufunc.py =================================================================== --- lazyarray-0.5.0.orig/test/test_ufunc.py +++ lazyarray-0.5.0/test/test_ufunc.py @@ -7,7 +7,7 @@ Copyright Andrew P. Davison, 2012-2017 from lazyarray import larray, sqrt, cos, power, fmod import numpy as np from numpy.testing import assert_array_equal, assert_array_almost_equal -from nose.tools import assert_raises +import pytest def test_sqrt_from_array(): @@ -59,4 +59,4 @@ def test_power_with_plain_array(): def test_fmod_with_array_as_2nd_arg(): A = larray(np.array([1, 4, 9, 16, 25])) B = larray(np.array([1, 4, 9, 16, 25])) - assert_raises(TypeError, fmod, A, B) + pytest.raises(TypeError, fmod, A, B)