Skip to content

Commit

Permalink
Fix distributed.Client.compute applied to DataArray (#3173)
Browse files Browse the repository at this point in the history
* Fix distributed.Client.compute applied to DataArray

* type annotations
  • Loading branch information
crusaderky authored and max-sixty committed Aug 1, 2019
1 parent 1757dff commit 7b76f16
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 4 deletions.
5 changes: 4 additions & 1 deletion doc/whats-new.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,11 @@ Bug fixes
due to a ``datetime`` issue in NumPy (:issue:`2334`).
By `Graham Inggs <https://github.com/ginggs>`_.
- Fixed bug in ``combine_by_coords()`` causing a `ValueError` if the input had
an unused dimension with coordinates which were not monotonic (:issue`3150`).
an unused dimension with coordinates which were not monotonic (:issue:`3150`).
By `Tom Nicholas <https://github.com/TomNicholas>`_.
- Fixed crash when applying ``distributed.Client.compute()`` to a DataArray
(:issue:`3171`). By `Guido Imperiale <https://github.com/crusaderky>`_.


.. _whats-new.0.12.3:

Expand Down
6 changes: 3 additions & 3 deletions xarray/core/dataarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ def _replace(
self,
variable: Variable = None,
coords=None,
name: Union[Hashable, None, ReprObject] = __default,
name: Optional[Hashable] = __default,
) -> 'DataArray':
if variable is None:
variable = self.variable
Expand All @@ -313,7 +313,7 @@ def _replace(
def _replace_maybe_drop_dims(
self,
variable: Variable,
name: Union[str, None, utils.ReprObject] = __default
name: Optional[Hashable] = __default
) -> 'DataArray':
if variable.dims == self.dims and variable.shape == self.shape:
coords = self._coords.copy()
Expand Down Expand Up @@ -356,7 +356,7 @@ def _to_temp_dataset(self) -> Dataset:
def _from_temp_dataset(
self,
dataset: Dataset,
name: Union[Hashable, ReprObject] = __default
name: Hashable = __default
) -> 'DataArray':
variable = dataset._variables.pop(_THIS_ARRAY)
coords = dataset._variables
Expand Down
10 changes: 10 additions & 0 deletions xarray/core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,22 @@ def __repr__(self: Any) -> str:
class ReprObject:
"""Object that prints as the given value, for use with sentinel values.
"""
__slots__ = ('_value', )

def __init__(self, value: str):
self._value = value

def __repr__(self) -> str:
return self._value

def __eq__(self, other) -> bool:
if isinstance(other, ReprObject):
return self._value == other._value
return False

def __hash__(self) -> int:
return hash((ReprObject, self._value))


@contextlib.contextmanager
def close_on_error(f):
Expand Down
16 changes: 16 additions & 0 deletions xarray/tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from collections import OrderedDict
from datetime import datetime
from typing import Hashable

import numpy as np
import pandas as pd
Expand Down Expand Up @@ -179,6 +180,21 @@ def test_sorted_keys_dict(self):
def test_repr_object():
obj = utils.ReprObject('foo')
assert repr(obj) == 'foo'
assert isinstance(obj, Hashable)
assert not isinstance(obj, str)


def test_repr_object_magic_methods():
o1 = utils.ReprObject('foo')
o2 = utils.ReprObject('foo')
o3 = utils.ReprObject('bar')
o4 = 'foo'
assert o1 == o2
assert o1 != o3
assert o1 != o4
assert hash(o1) == hash(o2)
assert hash(o1) != hash(o3)
assert hash(o1) != hash(o4)


def test_is_remote_uri():
Expand Down

0 comments on commit 7b76f16

Please sign in to comment.