Skip to content

Numexpr 2.4.6 #15383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 16 commits into from
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/source/install.rst
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ Recommended Dependencies

* `numexpr <https://github.com/pydata/numexpr>`__: for accelerating certain numerical operations.
``numexpr`` uses multiple cores as well as smart chunking and caching to achieve large speedups.
If installed, must be Version 2.1 or higher (excluding a buggy 2.4.4). Version 2.4.6 or higher is highly recommended.
If installed, must be Version 2.4.6 or higher.

* `bottleneck <http://berkeleyanalytics.com/bottleneck>`__: for accelerating certain types of ``nan``
evaluations. ``bottleneck`` uses specialized cython routines to achieve large speedups.
Expand Down
4 changes: 3 additions & 1 deletion doc/source/whatsnew/v0.20.0.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.. _whatsnew_0200:

v0.20.0 (????, 2016)
v0.20.0 (????, 2017)
--------------------

This is a major release from 0.19 and includes a small number of API changes, several new features,
Expand Down Expand Up @@ -158,6 +158,7 @@ Other enhancements

.. _whatsnew_0200.api_breaking:


Backwards incompatible API changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down Expand Up @@ -428,6 +429,7 @@ Other API Changes
- ``DataFrame.asof()`` will return a null filled ``Series`` instead the scalar ``NaN`` if a match is not found (:issue:`15118`)
- The :func:`pd.read_gbq` method now stores ``INTEGER`` columns as ``dtype=object`` if they contain ``NULL`` values. Otherwise they are stored as ``int64``. This prevents precision lost for integers greather than 2**53. Furthermore ``FLOAT`` columns with values above 10**4 are no more casted to ``int64`` which also caused precision lost (:issue: `14064`, :issue:`14305`).
- Reorganization of timeseries development tests (:issue:`14854`)
- ``numexpr`` version is now required to be >= 2.4.6 and it will not be used at all if this requisite is not fulfilled (:issue:`15213`).

.. _whatsnew_0200.deprecations:

Expand Down
17 changes: 5 additions & 12 deletions pandas/computation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,19 @@
from distutils.version import LooseVersion

_NUMEXPR_INSTALLED = False
_MIN_NUMEXPR_VERSION = "2.4.6"

try:
import numexpr as ne
ver = ne.__version__
_NUMEXPR_INSTALLED = ver >= LooseVersion('2.1')
_NUMEXPR_INSTALLED = ver >= LooseVersion(_MIN_NUMEXPR_VERSION)

# we specifically disallow 2.4.4 as
# has some hard-to-diagnose bugs
if ver == LooseVersion('2.4.4'):
_NUMEXPR_INSTALLED = False
warnings.warn(
"The installed version of numexpr {ver} is not supported "
"in pandas and will be not be used\n".format(ver=ver),
UserWarning)

elif not _NUMEXPR_INSTALLED:
if not _NUMEXPR_INSTALLED:
warnings.warn(
"The installed version of numexpr {ver} is not supported "
"in pandas and will be not be used\nThe minimum supported "
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a test for this i think

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep. Addressed in f225598.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and fixed a typo in 7a275ce

"version is 2.1\n".format(ver=ver), UserWarning)
"version is {min_ver}\n".format(
ver=ver, min_ver=_MIN_NUMEXPR_VERSION), UserWarning)

except ImportError: # pragma: no cover
pass
Expand Down
12 changes: 5 additions & 7 deletions pandas/tests/computation/test_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

from pandas.computation.engines import _engines
import pandas.computation.expr as expr
from pandas.computation import _MIN_NUMEXPR_VERSION


ENGINES_PARSERS = list(product(_engines, expr._parsers))

Expand All @@ -21,9 +23,7 @@ def test_compat():
try:
import numexpr as ne
ver = ne.__version__
if ver == LooseVersion('2.4.4'):
assert not _NUMEXPR_INSTALLED
elif ver < LooseVersion('2.1'):
if ver < LooseVersion(_MIN_NUMEXPR_VERSION):
with tm.assert_produces_warning(UserWarning,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just remove this assert_produces_warning

check_stacklevel=False):
assert not _NUMEXPR_INSTALLED
Expand Down Expand Up @@ -51,12 +51,10 @@ def testit():
except ImportError:
pytest.skip("no numexpr")
else:
if ne.__version__ < LooseVersion('2.1'):
if ne.__version__ < LooseVersion(_MIN_NUMEXPR_VERSION):
with tm.assertRaisesRegexp(ImportError, "'numexpr' version is "
".+, must be >= 2.1"):
".+, must be >= %s" % _MIN_NUMEXPR_VERSION):
testit()
elif ne.__version__ == LooseVersion('2.4.4'):
pytest.skip("numexpr version==2.4.4")
else:
testit()
else:
Expand Down