html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/3237#issuecomment-524075569,https://api.github.com/repos/pydata/xarray/issues/3237,524075569,MDEyOklzc3VlQ29tbWVudDUyNDA3NTU2OQ==,13190237,2019-08-22T21:00:34Z,2019-08-22T21:00:34Z,CONTRIBUTOR,"Thanks @shoyer. Cool, then this was easier than I expected. I added the patch and nanargmax/min to the nputils in #3244. What do you think?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,483280810 https://github.com/pydata/xarray/issues/3237#issuecomment-523952983,https://api.github.com/repos/pydata/xarray/issues/3237,523952983,MDEyOklzc3VlQ29tbWVudDUyMzk1Mjk4Mw==,13190237,2019-08-22T15:22:33Z,2019-08-22T15:22:33Z,CONTRIBUTOR,"Those little changes do solve the MCVE, but break at least one test. I don't have enough of an understanding of the (nan)ops logic in xarray to get around the issue. But may be this helps: #### The change ``` diff --git a/xarray/core/nanops.py b/xarray/core/nanops.py index 9ba4eae2..784a1d01 100644 --- a/xarray/core/nanops.py +++ b/xarray/core/nanops.py @@ -91,17 +91,9 @@ def nanargmin(a, axis=None): fill_value = dtypes.get_pos_infinity(a.dtype) if a.dtype.kind == ""O"": return _nan_argminmax_object(""argmin"", fill_value, a, axis=axis) - a, mask = _replace_nan(a, fill_value) - if isinstance(a, dask_array_type): - res = dask_array.argmin(a, axis=axis) - else: - res = np.argmin(a, axis=axis) - if mask is not None: - mask = mask.all(axis=axis) - if mask.any(): - raise ValueError(""All-NaN slice encountered"") - return res + module = dask_array if isinstance(a, dask_array_type) else nputils + return module.nanargmin(a, axis=axis) def nanargmax(a, axis=None): @@ -109,17 +101,8 @@ def nanargmax(a, axis=None): if a.dtype.kind == ""O"": return _nan_argminmax_object(""argmax"", fill_value, a, axis=axis) - a, mask = _replace_nan(a, fill_value) - if isinstance(a, dask_array_type): - res = dask_array.argmax(a, axis=axis) - else: - res = np.argmax(a, axis=axis) - - if mask is not None: - mask = mask.all(axis=axis) - if mask.any(): - raise ValueError(""All-NaN slice encountered"") - return res + module = dask_array if isinstance(a, dask_array_type) else nputils + return module.nanargmax(a, axis=axis) def nansum(a, axis=None, dtype=None, out=None, min_count=None): ``` #### The failing test ``` python ... ___________ TestVariable.test_reduce ________________ ... def f(values, axis=None, skipna=None, **kwargs): if kwargs.pop(""out"", None) is not None: raise TypeError(""`out` is not valid for {}"".format(name)) values = asarray(values) if coerce_strings and values.dtype.kind in ""SU"": values = values.astype(object) func = None if skipna or (skipna is None and values.dtype.kind in ""cfO""): nanname = ""nan"" + name func = getattr(nanops, nanname) else: func = _dask_or_eager_func(name) try: return func(values, axis=axis, **kwargs) except AttributeError: if isinstance(values, dask_array_type): try: # dask/dask#3133 dask sometimes needs dtype argument # if func does not accept dtype, then raises TypeError return func(values, axis=axis, dtype=values.dtype, **kwargs) except (AttributeError, TypeError): msg = ""%s is not yet implemented on dask arrays"" % name else: msg = ( ""%s is not available with skipna=False with the "" ""installed version of numpy; upgrade to numpy 1.12 "" ""or newer to use skipna=True or skipna=None"" % name ) > raise NotImplementedError(msg) E NotImplementedError: argmax is not available with skipna=False with the installed version of numpy; upgrade to numpy 1.12 or newer to use skipna=True or skipna=None ... ``` Note: I habe numpy 1.17 instaleed so the error msg here seems missleading. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,483280810