diff --git a/doc/whats-new.rst b/doc/whats-new.rst index ab667ceba3f..937bfd5843f 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -50,6 +50,9 @@ Enhancements Bug fixes ~~~~~~~~~ +- Raise an informative error message when using ``apply_ufunc`` with numpy + v1.11 (:issue:`1956`). + By `Stephan Hoyer `_. - Fix the precision drop after indexing datetime64 arrays (:issue:`1932`). By `Keisuke Fujii `_. diff --git a/xarray/core/computation.py b/xarray/core/computation.py index b7590ab6b4b..858936aad6c 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -1,8 +1,8 @@ """ Functions for applying functions that act on arrays to xarray's labeled data. - -NOT PUBLIC API. """ +from __future__ import absolute_import, division, print_function +from distutils.version import LooseVersion import functools import itertools import operator @@ -882,10 +882,21 @@ def earth_mover_distance(first_samples, func = functools.partial(func, **kwargs_) if vectorize: - func = np.vectorize(func, - otypes=output_dtypes, - signature=signature.to_gufunc_string(), - excluded=set(kwargs)) + if signature.all_core_dims: + # we need the signature argument + if LooseVersion(np.__version__) < '1.12': # pragma: no cover + raise NotImplementedError( + 'numpy 1.12 or newer required when using vectorize=True ' + 'in xarray.apply_ufunc with non-scalar output core ' + 'dimensions.') + func = np.vectorize(func, + otypes=output_dtypes, + signature=signature.to_gufunc_string(), + excluded=set(kwargs)) + else: + func = np.vectorize(func, + otypes=output_dtypes, + excluded=set(kwargs)) variables_ufunc = functools.partial(apply_variable_ufunc, func, signature=signature,