diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-05 05:57:10 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 05:57:10 +0000 |
| commit | d077c647504c7a6c9d4b78451dcbe11608cef108 (patch) | |
| tree | 7855caa84dfb7f79be56df8096af2ceb539ac06f | |
| parent | 7ee6bec9f4a8930cb8cf3201c966847316f343dd (diff) | |
automatic import of python-numbaggopeneuler20.03
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-numbagg.spec | 422 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 424 insertions, 0 deletions
@@ -0,0 +1 @@ +/numbagg-0.2.2.tar.gz diff --git a/python-numbagg.spec b/python-numbagg.spec new file mode 100644 index 0000000..0b7eeeb --- /dev/null +++ b/python-numbagg.spec @@ -0,0 +1,422 @@ +%global _empty_manifest_terminate_build 0 +Name: python-numbagg +Version: 0.2.2 +Release: 1 +Summary: Fast N-dimensional aggregation functions with Numba +License: BSD +URL: https://github.com/numbagg/numbagg +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/65/cd/604a349bfd9315798c6a5f315e4e4f19298df63ab53429c3c82806334123/numbagg-0.2.2.tar.gz +BuildArch: noarch + +Requires: python3-numpy +Requires: python3-numba + +%description +# Numbagg: Fast N-dimensional aggregation functions with Numba + +[]((https://github.com/numbagg/numbagg/actions?query=workflow%3ATest)) +[](https://pypi.python.org/pypi/numbagg/) + +Fast, flexible N-dimensional array functions written with +[Numba](https://github.com/numba/numba) and NumPy's [generalized +ufuncs](http://docs.scipy.org/doc/numpy/reference/c-api.generalized-ufuncs.html). + +Currently accelerated functions: + +- Array functions: `allnan`, `anynan`, `count`, `nanargmax`, + `nanargmin`, `nanmax`, `nanmean`, `nanstd`, `nanvar`, `nanmin`, + `nansum` +- Moving window functions: `move_exp_nanmean`, `move_mean`, `move_sum` + +Note: Only functions listed here (exposed in Numbagg's top level namespace) are +supported as part of Numbagg's public API. + +## Easy to extend + +Numbagg makes it easy to write, in pure Python/NumPy, flexible aggregation +functions accelerated by Numba. All the hard work is done by Numba's JIT +compiler and NumPy's gufunc machinery (as wrapped by Numba). + +For example, here is how we wrote `nansum`: + +```python +import numpy as np +from numbagg.decorators import ndreduce + +@ndreduce +def nansum(a): + asum = 0.0 + for ai in a.flat: + if not np.isnan(ai): + asum += ai + return asum +``` + +You are welcome to experiment with Numbagg's decorator functions, but these are +not public APIs (yet): we reserve the right to change them at any time. + +We'd rather get your pull requests to add new functions into Numbagg directly! + +## Advantages over Bottleneck + +- Way less code. Easier to add new functions. No ad-hoc templating + system. No Cython! +- Fast functions still work for >3 dimensions. +- `axis` argument handles tuples of integers. + +Most of the functions in Numbagg (including our test suite) are adapted from +Bottleneck's battle-hardened implementations. Still, Numbagg is experimental, +and probably not yet ready for production. + +## Benchmarks + +Initial benchmarks are quite encouraging. Numbagg/Numba has comparable (slightly +better) performance than Bottleneck's hand-written C: + +```python +import numbagg +import numpy as np +import bottleneck + +x = np.random.RandomState(42).randn(1000, 1000) +x[x < -1] = np.NaN + +# timings with numba=0.41.0 and bottleneck=1.2.1 + +In [2]: %timeit numbagg.nanmean(x) +1.8 ms ± 92.3 µs per loop (mean ± std. dev. of 7 runs, 1 loop each) + +In [3]: %timeit numbagg.nanmean(x, axis=0) +3.63 ms ± 136 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [4]: %timeit numbagg.nanmean(x, axis=1) +1.81 ms ± 41 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) + +In [5]: %timeit bottleneck.nanmean(x) +2.22 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [6]: %timeit bottleneck.nanmean(x, axis=0) +4.45 ms ± 107 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [7]: %timeit bottleneck.nanmean(x, axis=1) +2.19 ms ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) +``` + +## Our approach + +Numbagg includes somewhat awkward workarounds for features missing from +NumPy/Numba: + +- It implements its own cache for functions wrapped by Numba's + `guvectorize`, because that decorator is rather slow. +- It does its [own handling of array + transposes](https://github.com/numbagg/numbagg/blob/main/numbagg/decorators.py#L69) + to handle the `axis` argument, which we hope will [eventually be + directly supported](https://github.com/numpy/numpy/issues/5197) by + all NumPy gufuncs. +- It uses some [terrible + hacks](https://github.com/numbagg/numbagg/blob/main/numbagg/transform.py) to + hide the out-of-bound memory access necessary to write [gufuncs that handle + scalar + values](https://github.com/numba/numba/blob/main/numba/tests/test_guvectorize_scalar.py) + with Numba. + +I hope that the need for most of these will eventually go away. In the meantime, +expect Numbagg to be tightly coupled to Numba and NumPy release cycles. + +## License + +3-clause BSD. Includes portions of Bottleneck, which is distributed under a +Simplified BSD license. + + +%package -n python3-numbagg +Summary: Fast N-dimensional aggregation functions with Numba +Provides: python-numbagg +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-numbagg +# Numbagg: Fast N-dimensional aggregation functions with Numba + +[]((https://github.com/numbagg/numbagg/actions?query=workflow%3ATest)) +[](https://pypi.python.org/pypi/numbagg/) + +Fast, flexible N-dimensional array functions written with +[Numba](https://github.com/numba/numba) and NumPy's [generalized +ufuncs](http://docs.scipy.org/doc/numpy/reference/c-api.generalized-ufuncs.html). + +Currently accelerated functions: + +- Array functions: `allnan`, `anynan`, `count`, `nanargmax`, + `nanargmin`, `nanmax`, `nanmean`, `nanstd`, `nanvar`, `nanmin`, + `nansum` +- Moving window functions: `move_exp_nanmean`, `move_mean`, `move_sum` + +Note: Only functions listed here (exposed in Numbagg's top level namespace) are +supported as part of Numbagg's public API. + +## Easy to extend + +Numbagg makes it easy to write, in pure Python/NumPy, flexible aggregation +functions accelerated by Numba. All the hard work is done by Numba's JIT +compiler and NumPy's gufunc machinery (as wrapped by Numba). + +For example, here is how we wrote `nansum`: + +```python +import numpy as np +from numbagg.decorators import ndreduce + +@ndreduce +def nansum(a): + asum = 0.0 + for ai in a.flat: + if not np.isnan(ai): + asum += ai + return asum +``` + +You are welcome to experiment with Numbagg's decorator functions, but these are +not public APIs (yet): we reserve the right to change them at any time. + +We'd rather get your pull requests to add new functions into Numbagg directly! + +## Advantages over Bottleneck + +- Way less code. Easier to add new functions. No ad-hoc templating + system. No Cython! +- Fast functions still work for >3 dimensions. +- `axis` argument handles tuples of integers. + +Most of the functions in Numbagg (including our test suite) are adapted from +Bottleneck's battle-hardened implementations. Still, Numbagg is experimental, +and probably not yet ready for production. + +## Benchmarks + +Initial benchmarks are quite encouraging. Numbagg/Numba has comparable (slightly +better) performance than Bottleneck's hand-written C: + +```python +import numbagg +import numpy as np +import bottleneck + +x = np.random.RandomState(42).randn(1000, 1000) +x[x < -1] = np.NaN + +# timings with numba=0.41.0 and bottleneck=1.2.1 + +In [2]: %timeit numbagg.nanmean(x) +1.8 ms ± 92.3 µs per loop (mean ± std. dev. of 7 runs, 1 loop each) + +In [3]: %timeit numbagg.nanmean(x, axis=0) +3.63 ms ± 136 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [4]: %timeit numbagg.nanmean(x, axis=1) +1.81 ms ± 41 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) + +In [5]: %timeit bottleneck.nanmean(x) +2.22 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [6]: %timeit bottleneck.nanmean(x, axis=0) +4.45 ms ± 107 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [7]: %timeit bottleneck.nanmean(x, axis=1) +2.19 ms ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) +``` + +## Our approach + +Numbagg includes somewhat awkward workarounds for features missing from +NumPy/Numba: + +- It implements its own cache for functions wrapped by Numba's + `guvectorize`, because that decorator is rather slow. +- It does its [own handling of array + transposes](https://github.com/numbagg/numbagg/blob/main/numbagg/decorators.py#L69) + to handle the `axis` argument, which we hope will [eventually be + directly supported](https://github.com/numpy/numpy/issues/5197) by + all NumPy gufuncs. +- It uses some [terrible + hacks](https://github.com/numbagg/numbagg/blob/main/numbagg/transform.py) to + hide the out-of-bound memory access necessary to write [gufuncs that handle + scalar + values](https://github.com/numba/numba/blob/main/numba/tests/test_guvectorize_scalar.py) + with Numba. + +I hope that the need for most of these will eventually go away. In the meantime, +expect Numbagg to be tightly coupled to Numba and NumPy release cycles. + +## License + +3-clause BSD. Includes portions of Bottleneck, which is distributed under a +Simplified BSD license. + + +%package help +Summary: Development documents and examples for numbagg +Provides: python3-numbagg-doc +%description help +# Numbagg: Fast N-dimensional aggregation functions with Numba + +[]((https://github.com/numbagg/numbagg/actions?query=workflow%3ATest)) +[](https://pypi.python.org/pypi/numbagg/) + +Fast, flexible N-dimensional array functions written with +[Numba](https://github.com/numba/numba) and NumPy's [generalized +ufuncs](http://docs.scipy.org/doc/numpy/reference/c-api.generalized-ufuncs.html). + +Currently accelerated functions: + +- Array functions: `allnan`, `anynan`, `count`, `nanargmax`, + `nanargmin`, `nanmax`, `nanmean`, `nanstd`, `nanvar`, `nanmin`, + `nansum` +- Moving window functions: `move_exp_nanmean`, `move_mean`, `move_sum` + +Note: Only functions listed here (exposed in Numbagg's top level namespace) are +supported as part of Numbagg's public API. + +## Easy to extend + +Numbagg makes it easy to write, in pure Python/NumPy, flexible aggregation +functions accelerated by Numba. All the hard work is done by Numba's JIT +compiler and NumPy's gufunc machinery (as wrapped by Numba). + +For example, here is how we wrote `nansum`: + +```python +import numpy as np +from numbagg.decorators import ndreduce + +@ndreduce +def nansum(a): + asum = 0.0 + for ai in a.flat: + if not np.isnan(ai): + asum += ai + return asum +``` + +You are welcome to experiment with Numbagg's decorator functions, but these are +not public APIs (yet): we reserve the right to change them at any time. + +We'd rather get your pull requests to add new functions into Numbagg directly! + +## Advantages over Bottleneck + +- Way less code. Easier to add new functions. No ad-hoc templating + system. No Cython! +- Fast functions still work for >3 dimensions. +- `axis` argument handles tuples of integers. + +Most of the functions in Numbagg (including our test suite) are adapted from +Bottleneck's battle-hardened implementations. Still, Numbagg is experimental, +and probably not yet ready for production. + +## Benchmarks + +Initial benchmarks are quite encouraging. Numbagg/Numba has comparable (slightly +better) performance than Bottleneck's hand-written C: + +```python +import numbagg +import numpy as np +import bottleneck + +x = np.random.RandomState(42).randn(1000, 1000) +x[x < -1] = np.NaN + +# timings with numba=0.41.0 and bottleneck=1.2.1 + +In [2]: %timeit numbagg.nanmean(x) +1.8 ms ± 92.3 µs per loop (mean ± std. dev. of 7 runs, 1 loop each) + +In [3]: %timeit numbagg.nanmean(x, axis=0) +3.63 ms ± 136 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [4]: %timeit numbagg.nanmean(x, axis=1) +1.81 ms ± 41 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) + +In [5]: %timeit bottleneck.nanmean(x) +2.22 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [6]: %timeit bottleneck.nanmean(x, axis=0) +4.45 ms ± 107 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) + +In [7]: %timeit bottleneck.nanmean(x, axis=1) +2.19 ms ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) +``` + +## Our approach + +Numbagg includes somewhat awkward workarounds for features missing from +NumPy/Numba: + +- It implements its own cache for functions wrapped by Numba's + `guvectorize`, because that decorator is rather slow. +- It does its [own handling of array + transposes](https://github.com/numbagg/numbagg/blob/main/numbagg/decorators.py#L69) + to handle the `axis` argument, which we hope will [eventually be + directly supported](https://github.com/numpy/numpy/issues/5197) by + all NumPy gufuncs. +- It uses some [terrible + hacks](https://github.com/numbagg/numbagg/blob/main/numbagg/transform.py) to + hide the out-of-bound memory access necessary to write [gufuncs that handle + scalar + values](https://github.com/numba/numba/blob/main/numba/tests/test_guvectorize_scalar.py) + with Numba. + +I hope that the need for most of these will eventually go away. In the meantime, +expect Numbagg to be tightly coupled to Numba and NumPy release cycles. + +## License + +3-clause BSD. Includes portions of Bottleneck, which is distributed under a +Simplified BSD license. + + +%prep +%autosetup -n numbagg-0.2.2 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-numbagg -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.2-1 +- Package Spec generated @@ -0,0 +1 @@ +f1a9dfe2920089f16f7aece8bcea7c03 numbagg-0.2.2.tar.gz |
