home / github

Menu
  • Search all tables
  • GraphQL API

issues

Table actions
  • GraphQL API for issues

28 rows where type = "issue" and user = 14371165 sorted by updated_at descending

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: comments, created_at (date), updated_at (date), closed_at (date)

state 2

  • closed 19
  • open 9

type 1

  • issue · 28 ✖

repo 1

  • xarray 28
id node_id number title user state locked assignee milestone comments created_at updated_at ▲ closed_at author_association active_lock_reason draft pull_request body reactions performed_via_github_app state_reason repo type
1680031454 I_kwDOAMm_X85kIz7e 7780 mypy does not understand output of binary operations Illviljan 14371165 open 0     8 2023-04-23T13:38:55Z 2024-04-28T20:07:04Z   MEMBER      

What happened?

When doing operations on numpy arrays and xarray variables mypy does not understand that the output is always a xarray variable regardless of the order. See example.

What did you expect to happen?

mypy to pass for the example code.

Minimal Complete Verifiable Example

```Python import numpy as np import xarray as xr

x = np.array([1, 2, 4]) v = xr.Variable(["x"], x)

numpy first:

xv = x * v xv.values # error: "ndarray[Any, dtype[bool_]]" has no attribute "values" [attr-defined] if isinstance(xv, xr.Variable): xv.values

variable first:

vx = v * x vx.values if isinstance(vx, xr.Variable): vx.values ```

MVCE confirmation

  • [X] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
  • [X] Complete example — the example is self-contained, including all data and the text of any traceback.
  • [X] Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
  • [X] New issue — a search of GitHub Issues suggests this is not a duplicate.

Relevant log output

No response

Anything else we need to know?

Seen in #7741

Environment

xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.9.16 (main, Mar 8 2023, 10:39:24) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en libhdf5: 1.10.6 libnetcdf: None xarray: 2023.4.2 pandas: 2.0.0 numpy: 1.23.5 scipy: 1.10.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None iris: None bottleneck: None dask: 2023.4.0 distributed: 2023.4.0 matplotlib: 3.5.3 cartopy: None seaborn: 0.12.2 numbagg: None fsspec: 2023.4.0 cupy: None pint: None sparse: None flox: None numpy_groupies: None setuptools: 67.7.1 pip: 23.1.1 conda: 23.3.1 pytest: 7.3.1 mypy: 1.2.0 IPython: 8.12.0 sphinx: 6.1.3
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7780/reactions",
    "total_count": 1,
    "+1": 1,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
2215603817 I_kwDOAMm_X86ED25p 8892 ffill's tolerance argument can be strings Illviljan 14371165 open 0     1 2024-03-29T15:49:40Z 2024-04-02T01:50:34Z   MEMBER      

What happened?

ffill, bfill reindex etc. have tolerance arguments that also supports strings. And we test for it here:

https://github.com/pydata/xarray/blob/2120808bbe45f3d4f0b6a01cd43bac4df4039092/xarray/tests/test_groupby.py#L2016-L2025

But our typing assumes it's floats only: https://github.com/pydata/xarray/blob/2120808bbe45f3d4f0b6a01cd43bac4df4039092/xarray/core/resample.py#L69-L94

What did you expect to happen?

Since our pytests pass, mypy should pass as well.

Minimal Complete Verifiable Example

```python import numpy as np import pandas as pd

import xarray as xr

https://github.com/pydata/xarray/blob/2120808bbe45f3d4f0b6a01cd43bac4df4039092/xarray/tests/test_groupby.py#L2016

Test tolerance keyword for upsample methods bfill, pad, nearest

times = pd.date_range("2000-01-01", freq="1D", periods=2) times_upsampled = pd.date_range("2000-01-01", freq="6h", periods=5) array = xr.DataArray(np.arange(2), [("time", times)])

Forward fill

actual = array.resample(time="6h").ffill(tolerance="12h") expected = xr.DataArray([0.0, 0.0, 0.0, np.nan, 1.0], [("time", times_upsampled)]) xr.testing.assert_identical(expected, actual)

```

Environment

master

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/8892/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1718410975 I_kwDOAMm_X85mbN7f 7856 Unrecognized chunk manager dask - must be one of: [] Illviljan 14371165 closed 0     11 2023-05-21T08:07:57Z 2024-03-27T19:09:18Z 2023-05-24T16:26:20Z MEMBER      

What happened?

I have just updated my development branch of xarray to latest main. No other changes. When using .chunk() on a Variable xarray crashes.

What did you expect to happen?

No crash

Minimal Complete Verifiable Example

```Python import numpy as np import pandas as pd import xarray as xr

t_size = 8000 t = np.arange(t_size) var = xr.Variable(dims=("T",), data=np.random.randn(t_size)).chunk() ```

MVCE confirmation

  • [X] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
  • [X] Complete example — the example is self-contained, including all data and the text of any traceback.
  • [X] Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
  • [X] New issue — a search of GitHub Issues suggests this is not a duplicate.

Relevant log output

```Python Traceback (most recent call last):

File "C:\Users\J.W\AppData\Local\Temp\ipykernel_6480\4053253683.py", line 8, in <cell line: 8> var = xr.Variable(dims=("T",), data=np.random.randn(t_size)).chunk()

File "C:\Users\J.W\Documents\GitHub\xarray\xarray\core\variable.py", line 1249, in chunk chunkmanager = guess_chunkmanager(chunked_array_type)

File "C:\Users\J.W\Documents\GitHub\xarray\xarray\core\parallelcompat.py", line 87, in guess_chunkmanager raise ValueError(

ValueError: unrecognized chunk manager dask - must be one of: [] ```

Anything else we need to know?

Likely from #7019.

Environment

xr.show_versions() C:\Users\J.W\anaconda3\envs\xarray-tests\lib\site-packages\_distutils_hack\__init__.py:33: UserWarning: Setuptools is replacing distutils. warnings.warn("Setuptools is replacing distutils.") INSTALLED VERSIONS ------------------ commit: None python: 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:30:19) [MSC v.1929 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: ('Swedish_Sweden', '1252') libhdf5: 1.12.2 libnetcdf: 4.8.1 xarray: 2022.9.1.dev266+gbd01f9cc.d20221006 pandas: 1.5.2 numpy: 1.23.5 scipy: 1.9.3 netCDF4: 1.6.0 pydap: installed h5netcdf: 1.0.2 h5py: 3.7.0 Nio: None zarr: 2.13.2 cftime: 1.6.2 nc_time_axis: 1.4.1 PseudoNetCDF: 3.2.2 iris: 3.3.0 bottleneck: 1.3.5 dask: 2022.9.2 distributed: 2022.9.2 matplotlib: 3.6.2 cartopy: 0.21.0 seaborn: 0.13.0.dev0 numbagg: 0.2.1 fsspec: 2022.10.0 cupy: None pint: 0.19.2 sparse: 0.13.0 flox: 999 numpy_groupies: 0.9.14+22.g19c7601 setuptools: 65.5.1 pip: 22.3.1 conda: None pytest: 7.2.0 mypy: 1.2.0 IPython: 7.33.0 sphinx: 5.3.0
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7856/reactions",
    "total_count": 2,
    "+1": 2,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1797233538 I_kwDOAMm_X85rH5uC 7971 Pint errors on python 3.11 and windows Illviljan 14371165 closed 0     2 2023-07-10T17:44:51Z 2024-02-26T17:52:50Z 2024-02-26T17:52:50Z MEMBER      

What happened?

The CI seems to consistently crash on test_units.py now: =========================== short test summary info =========================== FAILED xarray/tests/test_units.py::TestVariable::test_aggregation[int32-method_max] - TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestVariable::test_aggregation[int32-method_min] - TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[float64-function_max] - TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[float64-function_min] - TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[int32-function_max] - TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[int32-function_min] - TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[int32-method_max] - TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_aggregation[int32-method_min] - TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_unary_operations[float64-round] - TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataArray::test_unary_operations[int32-round] - TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataset::test_aggregation[int32-method_max] - TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [<class 'pint.util.Quantity'>] FAILED xarray/tests/test_units.py::TestDataset::test_aggregation[int32-method_min] - TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [<class 'pint.util.Quantity'>] = 12 failed, 14880 passed, 1649 skipped, 146 xfailed, 68 xpassed, 574 warnings in 737.19s (0:12:17) = For more details: https://github.com/pydata/xarray/actions/runs/5438369625/jobs/9889561685?pr=7955

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7971/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1691206894 I_kwDOAMm_X85kzcTu 7802 Mypy errors with matplotlib 3.8 Illviljan 14371165 closed 0     6 2023-05-01T19:03:51Z 2023-09-17T05:03:00Z 2023-09-17T05:02:59Z MEMBER      

Matplotlib has started to support typing in main (https://github.com/matplotlib/matplotlib/issues/20504) and mypy is throwing a few errors:

``` xarray/core/options.py:12: error: Cannot assign to a type [misc] xarray/core/options.py:12: error: Incompatible types in assignment (expression has type "Type[str]", variable has type "Type[Colormap]") [assignment] xarray/plot/utils.py:808: error: Argument 1 to "set_xticks" of "_AxesBase" has incompatible type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]"; expected "Iterable[float]" [arg-type] xarray/plot/utils.py:810: error: Argument 1 to "set_yticks" of "_AxesBase" has incompatible type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]"; expected "Iterable[float]" [arg-type] xarray/plot/utils.py:813: error: Argument 1 to "set_xlim" of "_AxesBase" has incompatible type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]"; expected "Union[float, Tuple[float, float], None]" [arg-type] xarray/plot/utils.py:815: error: Argument 1 to "set_ylim" of "_AxesBase" has incompatible type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]"; expected "Union[float, Tuple[float, float], None]" [arg-type] Generated Cobertura report: /home/runner/work/xarray/xarray/mypy_report/cobertura.xml Installing missing stub packages: /home/runner/micromamba-root/envs/xarray-tests/bin/python -m pip install types-Pillow types-PyYAML types-Pygments types-babel types-colorama types-paramiko types-psutil types-pytz types-pywin32 types-setuptools types-urllib3 Generated Cobertura report: /home/runner/work/xarray/xarray/mypy_report/cobertura.xml Found 154 errors in 10 files (checked 138 source files) xarray/plot/utils.py:1349: error: Unsupported operand types for * ("_SupportsArray[dtype[Any]]" and "float") [operator] xarray/plot/utils.py:1349: error: Unsupported operand types for * ("_NestedSequence[_SupportsArray[dtype[Any]]]" and "float") [operator] xarray/plot/utils.py:1349: error: Unsupported operand types for * ("_NestedSequence[Union[bool, int, float, complex, str, bytes]]" and "float") [operator] xarray/plot/utils.py:1349: note: Left operand is of type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" xarray/plot/utils.py:1349: error: Unsupported operand types for * ("str" and "float") [operator] xarray/plot/utils.py:1349: error: Unsupported operand types for * ("bytes" and "float") [operator] xarray/plot/utils.py:1350: error: Item "_SupportsArray[dtype[Any]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "_NestedSequence[_SupportsArray[dtype[Any]]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "int" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "float" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "complex" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "str" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "bytes" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1350: error: Item "_NestedSequence[Union[bool, int, float, complex, str, bytes]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "_SupportsArray[dtype[Any]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "_NestedSequence[_SupportsArray[dtype[Any]]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "int" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "float" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "complex" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "str" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "bytes" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/utils.py:1351: error: Item "_NestedSequence[Union[bool, int, float, complex, str, bytes]]" of "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" has no attribute "mask" [union-attr] xarray/plot/facetgrid.py:684: error: "FigureCanvasBase" has no attribute "get_renderer" [attr-defined] xarray/plot/accessor.py:182: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:182: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:309: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:309: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:428: error: Overloaded function implementation cannot produce return type of signature 2 [misc] xarray/plot/accessor.py:428: error: Overloaded function implementation cannot produce return type of signature 3 [misc] xarray/plot/accessor.py:433: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:433: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:552: error: Overloaded function implementation cannot produce return type of signature 2 [misc] xarray/plot/accessor.py:552: error: Overloaded function implementation cannot produce return type of signature 3 [misc] xarray/plot/accessor.py:557: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:557: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:676: error: Overloaded function implementation cannot produce return type of signature 2 [misc] xarray/plot/accessor.py:676: error: Overloaded function implementation cannot produce return type of signature 3 [misc] xarray/plot/accessor.py:681: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:681: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:800: error: Overloaded function implementation cannot produce return type of signature 2 [misc] xarray/plot/accessor.py:800: error: Overloaded function implementation cannot produce return type of signature 3 [misc] xarray/plot/accessor.py:948: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:948: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:1075: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:1075: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/accessor.py:1190: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/accessor.py:1190: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:324: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:324: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:478: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:478: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "x" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "y" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "u" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "v" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "density" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "linewidth" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "color" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "cmap" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "norm" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "arrowsize" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "arrowstyle" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "minlength" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "transform" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "zorder" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "start_points" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "maxlength" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "integration_direction" [misc] xarray/plot/dataset_plot.py:649: error: Function gets multiple values for keyword argument "broken_streamlines" [misc] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[float, Tuple[float, float]]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[str, Colormap, None]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[str, Normalize, None]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "float" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[str, ArrowStyle]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Optional[Transform]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Optional[float]" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "Literal['forward', 'backward', 'both']" [arg-type] xarray/plot/dataset_plot.py:649: error: Argument 1 has incompatible type "*List[ndarray[Any, Any]]"; expected "bool" [arg-type] xarray/plot/dataset_plot.py:751: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataset_plot.py:751: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:718: error: Incompatible return value type (got "Tuple[Union[ndarray[Any, Any], List[ndarray[Any, Any]]], ndarray[Any, Any], Union[BarContainer, Polygon, List[Union[BarContainer, Polygon]]]]", expected "Tuple[ndarray[Any, Any], ndarray[Any, Any], BarContainer]") [return-value] xarray/plot/dataarray_plot.py:996: error: "Axes" has no attribute "view_init" [attr-defined] xarray/plot/dataarray_plot.py:1106: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:1106: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[Sequence[Union[Union[Tuple[float, float, float], str], Union[str, Tuple[float, float, float, float], Tuple[Union[Tuple[float, float, float], str], float], Tuple[Tuple[float, float, float, float], float]]]], Union[Union[Tuple[float, float, float], str], Union[str, Tuple[float, float, float, float], Tuple[Union[Tuple[float, float, float], str], float], Tuple[Tuple[float, float, float, float], float]]], None]" [arg-type] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Optional[Union[str, Path, MarkerStyle]]" [arg-type] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[str, Colormap, None]" [arg-type] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[str, Normalize, None]" [arg-type] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Optional[float]" [arg-type] xarray/plot/dataarray_plot.py:1261: error: Argument 1 to "scatter" of "Axes" has incompatible type "*List[ndarray[Any, Any]]"; expected "Union[float, Sequence[float], None]" [arg-type] xarray/plot/dataarray_plot.py:1615: error: "Axes" has no attribute "set_zlabel" [attr-defined] xarray/plot/dataarray_plot.py:1655: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:1655: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:1874: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:1874: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:2010: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:2010: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:2146: error: Overloaded function signatures 1 and 2 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:2146: error: Overloaded function signatures 1 and 3 overlap with incompatible return types [misc] xarray/plot/dataarray_plot.py:2464: error: "Axes" has no attribute "plot_surface" [attr-defined] xarray/tests/test_plot.py:427: error: Value of type "Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]" is not indexable [index] xarray/tests/test_plot.py:443: error: Module has no attribute "viridis" [attr-defined] xarray/tests/test_plot.py:457: error: "None" not callable [misc] xarray/tests/test_plot.py:462: error: "None" not callable [misc] xarray/tests/test_plot.py:465: error: "None" not callable [misc] xarray/tests/test_plot.py:471: error: Module has no attribute "viridis" [attr-defined] xarray/tests/test_plot.py:477: error: Module has no attribute "viridis" [attr-defined] xarray/tests/test_plot.py:482: error: Module has no attribute "viridis" [attr-defined] xarray/tests/test_plot.py:486: error: Module has no attribute "viridis" [attr-defined] xarray/tests/test_plot.py:493: error: "None" not callable [misc] xarray/tests/test_plot.py:498: error: "None" not callable [misc] xarray/tests/test_plot.py:501: error: "None" not callable [misc] xarray/tests/test_plot.py:931: error: Module has no attribute "magma" [attr-defined] xarray/tests/test_plot.py:933: error: Module has no attribute "magma" [attr-defined] xarray/tests/test_plot.py:1173: error: Module has no attribute "RdBu" [attr-defined] xarray/tests/test_plot.py:1746: error: Item "Colormap" of "Optional[Colormap]" has no attribute "colors" [union-attr] xarray/tests/test_plot.py:1746: error: Item "None" of "Optional[Colormap]" has no attribute "colors" [union-attr] xarray/tests/test_plot.py:1747: error: Item "Colormap" of "Optional[Colormap]" has no attribute "colors" [union-attr] xarray/tests/test_plot.py:1747: error: Item "None" of "Optional[Colormap]" has no attribute "colors" [union-attr] xarray/tests/test_plot.py:1749: error: Item "Colormap" of "Optional[Colormap]" has no attribute "_rgba_over" [union-attr] xarray/tests/test_plot.py:1749: error: Item "None" of "Optional[Colormap]" has no attribute "_rgba_over" [union-attr] xarray/tests/test_plot.py:1801: error: Item "None" of "Optional[ndarray[Any, Any]]" has no attribute "size" [union-attr] xarray/tests/test_plot.py:1952: error: Item "None" of "Optional[ndarray[Any, Any]]" has no attribute "min" [union-attr] xarray/tests/test_plot.py:1952: error: Item "None" of "Optional[ndarray[Any, Any]]" has no attribute "max" [union-attr] xarray/tests/test_plot.py:1968: error: Item "None" of "Optional[ndarray[Any, Any]]" has no attribute "dtype" [union-attr] xarray/tests/test_plot.py:1969: error: Value of type "Optional[ndarray[Any, Any]]" is not indexable [index] xarray/tests/test_plot.py:2125: error: "Artist" has no attribute "get_clim" [attr-defined] xarray/tests/test_plot.py:2135: error: "Colorbar" has no attribute "vmin" [attr-defined] xarray/tests/test_plot.py:2136: error: "Colorbar" has no attribute "vmax" [attr-defined] xarray/tests/test_plot.py:2202: error: "Artist" has no attribute "get_clim" [attr-defined] xarray/tests/test_plot.py:2218: error: "Artist" has no attribute "norm" [attr-defined] xarray/tests/test_plot.py:2747: error: Item "_AxesBase" of "Optional[_AxesBase]" has no attribute "legend_" [union-attr] xarray/tests/test_plot.py:2747: error: Item "None" of "Optional[_AxesBase]" has no attribute "legend_" [union-attr] xarray/tests/test_plot.py:2754: error: Item "None" of "Optional[_AxesBase]" has no attribute "get_legend" [union-attr] xarray/tests/test_plot.py:2775: error: Item "None" of "Optional[FigureBase]" has no attribute "axes" [union-attr] xarray/tests/test_plot.py:2775: error: Argument 1 to "len" has incompatible type "Union[_AxesBase, None, Any]"; expected "Sized" [arg-type] xarray/tests/test_plot.py:2803: error: Module has no attribute "dates" [attr-defined] xarray/tests/test_plot.py:2812: error: Module has no attribute "dates" [attr-defined] xarray/tests/test_plot.py:2831: error: Item "None" of "Optional[_AxesBase]" has no attribute "xaxis" [union-attr] xarray/tests/test_plot.py:2831: error: Module has no attribute "dates" [attr-defined] xarray/tests/test_groupby.py:715: error: Argument 1 to "groupby" of "Dataset" has incompatible type "ndarray[Any, dtype[signedinteger[Any]]]"; expected "Union[Hashable, DataArray, IndexVariable]" [arg-type] xarray/tests/test_groupby.py:715: note: Following member(s) of "ndarray[Any, dtype[signedinteger[Any]]]" have conflicts: xarray/tests/test_groupby.py:715: note: __hash__: expected "Callable[[], int]", got "None" xarray/tests/test_dataset.py:6964: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataset.py:6965: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataset.py:7007: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataset.py:7008: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataarray.py:6687: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataarray.py:6689: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataarray.py:6735: error: "PlainQuantity[Any]" not callable [operator] xarray/tests/test_dataarray.py:6737: error: "PlainQuantity[Any]" not callable [operator] ```

Some guidance how to solve these:

  • [xy]ticks in mpl is currently overly narrowly type hinted because I was following the docstring, but I agree that ArrayLike is a better type hint for that, plan on updating (including the docstring) upstream
  • [xy]lim originally neglected the case of passing set_xlim((min, max)) as a tuple, but that has been updated. xarray has that type hinted as array like, but mpl has it hinted as a 2-tuple (I think it is currently still of floats, but may be expanded as we more directly address units/categoricals/etc). Willing to debate here, but my starting position is that the "exactly 2 values" is valuable info here, and I think tuple is the only way to do that.
  • get_renderer is not actually available on all of our backends, we should maybe see if there is a more preferred way of doing what you are doing here that will work for all backends, but haven't looked into it too closely.
  • Module has no attribute <colormap> is another instance of dynamically generated behavior which can't be statically type checked (elegantly, at least), can probably be replaced by mpl.colormaps["<colormap>"] in many cases, which is statically typecheckable
  • Anything to do with 3D Axes is not type hinted, perhaps ignore for now (or help us get that type hinted adequately, but it is relatively low priority currently)
  • Module has no attribute "dates" we don't currently type hint dates/units things, but it is on my mind, not sure yet if it will be in first release or not though (may at least put a placeholder that gets rid of this error, but treats everything as "Any").

Originally posted by @ksunden in https://github.com/pydata/xarray/issues/7787#issuecomment-1523743471

The suggestion from mpl (specifically @tacaswell) was to use constrained layout for the purpose that xarray currently uses get_renderer, this will ensure that the facetgrid works with all mpl backends.

Originally posted by @ksunden in https://github.com/pydata/xarray/issues/7787#issuecomment-1528091492

I'm also relatively sure that if you are willing to put a floor on the version of Matplotlib you support get_window_extent will use it's internally cached renderer (and when we make it uniformly optional we also fixed the cache invalidation logic).

Originally posted by @tacaswell in https://github.com/pydata/xarray/issues/7787#issuecomment-1528096647

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7802/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1826978659 I_kwDOAMm_X85s5Xtj 8028 Setting datarrays with non-dimension coordinates errors Illviljan 14371165 open 0     6 2023-07-28T19:20:31Z 2023-08-10T15:25:23Z   MEMBER      

What happened?

I'm not sure if this is a bug or a feature but I was expecting this example to work since the new coord is just a slight rewrite of the original dimension coordinate:

```python import xarray as xr

ds = xr.tutorial.open_dataset("air_temperature")

Change the first time value:

ds["air_new"] = ds.air.copy() air_new_changed = ds.air_new[{"time": 0}] * 3 ds.air_new.loc[air_new_changed.coords] = air_new_changed # Works! :)

Add a another coord along time axis and change

the first time value:

ds["air_new"] = ds.air.copy().assign_coords( {"time_float": ds.time.astype(float)} ) air_new_changed = ds.air_new[{"time": 0}] * 4 ds.air_new.loc[air_new_changed.coords] = air_new_changed # Error! :(

Traceback (most recent call last):

Cell In[25], line 5 ds.air_new.loc[air_new_changed.coords] = air_new_changed

File ~\AppData\Local\mambaforge\envs\jw\lib\site-packages\xarray\core\dataarray.py:222 in setitem dim_indexers = map_index_queries(self.data_array, key).dim_indexers

File ~\AppData\Local\mambaforge\envs\jw\lib\site-packages\xarray\core\indexing.py:182 in map_index_queries grouped_indexers = group_indexers_by_index(obj, indexers, options)

File ~\AppData\Local\mambaforge\envs\jw\lib\site-packages\xarray\core\indexing.py:144 in group_indexers_by_index raise KeyError(f"no index found for coordinate {key!r}")

KeyError: "no index found for coordinate 'time_float'" ```

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/8028/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1795519181 I_kwDOAMm_X85rBXLN 7969 Upstream CI is failing Illviljan 14371165 closed 0     2 2023-07-09T18:51:41Z 2023-07-10T17:34:12Z 2023-07-10T17:33:12Z MEMBER      

What happened?

The upstream CI has been failing for a while. Here's the latest: https://github.com/pydata/xarray/actions/runs/5501368493/jobs/10024902009#step:7:16

python Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/runner/work/xarray/xarray/xarray/__init__.py", line 1, in <module> from xarray import testing, tutorial File "/home/runner/work/xarray/xarray/xarray/testing.py", line 7, in <module> import numpy as np ModuleNotFoundError: No module named 'numpy'

Digging a little in the logs ``` Installing build dependencies: started Installing build dependencies: finished with status 'error' error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully. │ exit code: 1 ╰─> [3 lines of output] Looking in indexes: https://pypi.anaconda.org/scipy-wheels-nightly/simple ERROR: Could not find a version that satisfies the requirement meson-python==0.13.1 (from versions: none) ERROR: No matching distribution found for meson-python==0.13.1 [end of output] ```

Might be some numpy problem?

Should the CI be robust enough to handle these kinds of errors? Because I suppose we would like to get the automatic issue created anyway?

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7969/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1125040125 I_kwDOAMm_X85DDr_9 6244 Get pyupgrade to update the typing Illviljan 14371165 closed 0     2 2022-02-05T21:56:56Z 2023-03-12T15:38:37Z 2023-03-12T15:38:37Z MEMBER      

Is your feature request related to a problem?

Use more up-to-date typing styles on all files. Will reduce number of imports and avoids big diffs when doing relatively minor changes because pre-commit/pyupgrade has been triggered somehow.

Related to #6240

Describe the solution you'd like

Add from __future__ import annotations on files with a lot of typing. Let pyupgrade do the rest.

Describe alternatives you've considered

No response

Additional context

No response

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/6244/reactions",
    "total_count": 3,
    "+1": 3,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1537068105 I_kwDOAMm_X85bncxJ 7450 Backend array documentation typo Illviljan 14371165 open 0     0 2023-01-17T21:37:26Z 2023-01-17T21:56:12Z   MEMBER      

What happened?

https://docs.xarray.dev/en/stable/internals/how-to-add-new-backend.html#indexing-examples

I believe there's a typo in the BASIC indexing support example: ```python

shall support integers

backend_array._raw_indexing_method(1, 1) ```

Should be: ```python

shall support integers

backend_array._raw_indexing_method((1, 1)) ```

Suggestion of possible fixes: * Make sure it is a typo. * Create a valid custom MyBackendArray and initialize it. So it is easier to tell if it's a typo. * Add type hinting so mypy can easier catch these errors.

What did you expect to happen?

No response

Minimal Complete Verifiable Example

No response

MVCE confirmation

  • [ ] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
  • [ ] Complete example — the example is self-contained, including all data and the text of any traceback.
  • [ ] Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
  • [ ] New issue — a search of GitHub Issues suggests this is not a duplicate.

Relevant log output

No response

Anything else we need to know?

No response

Environment

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7450/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1318800553 I_kwDOAMm_X85Om0yp 6833 Require a pull request before merging to main Illviljan 14371165 closed 0     4 2022-07-26T22:09:55Z 2023-01-13T16:51:03Z 2023-01-13T16:51:03Z MEMBER      

Is your feature request related to a problem?

I was making sure the test in #6832 failed on main, when it did I wrote a few lines in the what's new file but forgot switching back to the other branch and accidentally pushed directly to main. :(

Describe the solution you'd like

I think it's best if we require a pull request for merging. We seem to pretty much do this anyway.

Seems to be this setting if I understand correctly:

Describe alternatives you've considered

No response

Additional context

No response

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/6833/reactions",
    "total_count": 3,
    "+1": 3,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1376776178 I_kwDOAMm_X85SD-_y 7049 Backend entrypoints not public? Illviljan 14371165 closed 0     0 2022-09-17T13:41:13Z 2022-10-26T16:01:06Z 2022-10-26T16:01:06Z MEMBER      

What is your issue?

As I've understood it ZarrBackendEntrypoint is the engine used when loading zarr-files. But for some reason we show ZarrStore in xr.backends. I believe the ZarrStore class is supposed to be just a implementation detail, right?

```python

The available engines:

xr.backends.list_engines() Out[23]: {'netcdf4': <xarray.backends.netCDF4_.NetCDF4BackendEntrypoint object at 0x00000296D05D11F0>, 'h5netcdf': <xarray.backends.h5netcdf_.H5netcdfBackendEntrypoint object at 0x00000296D05D14C0>, 'scipy': <xarray.backends.scipy_.ScipyBackendEntrypoint object at 0x00000296D05D11C0>, 'pseudonetcdf': <xarray.backends.pseudonetcdf_.PseudoNetCDFBackendEntrypoint object at 0x00000296D05D1430>, 'pydap': <xarray.backends.pydap_.PydapBackendEntrypoint object at 0x00000296D05D1310>, 'store': <xarray.backends.store.StoreBackendEntrypoint object at 0x00000296D05D1340>, 'zarr': <xarray.backends.zarr.ZarrBackendEntrypoint object at 0x00000296D05D12E0>}

The public class is ZarrStore instead of ZarrBackendEntrypoint, how come?

dir(xr.backends) Out[22]: ['AbstractDataStore', 'BackendArray', 'BackendEntrypoint', 'CachingFileManager', 'CfGribDataStore', 'DummyFileManager', 'FileManager', 'H5NetCDFStore', 'InMemoryDataStore', 'NetCDF4DataStore', 'NioDataStore', 'PseudoNetCDFDataStore', 'PydapDataStore', 'ScipyDataStore', 'ZarrStore', 'all', 'builtins', 'cached', 'doc', 'file', 'loader', 'name', 'package', 'path', 'spec', 'api', 'cfgrib_', 'common', 'file_manager', 'h5netcdf_', 'list_engines', 'locks', 'lru_cache', 'memory', 'netCDF4_', 'netcdf3', 'plugins', 'pseudonetcdf_', 'pydap_', 'pynio_', 'rasterio_', 'scipy_', 'store', 'zarr'] ```

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7049/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1410534774 I_kwDOAMm_X85UEw12 7170 Scatter plots overlap in facetgrid in 3d Illviljan 14371165 open 0     0 2022-10-16T16:06:56Z 2022-10-16T16:08:55Z   MEMBER      

What happened?

Any matplotlib gurus have any ideas how to nicely fit 3d plots in facetgrid? python ds = xr.tutorial.scatter_example_dataset(seed=42) fg = ds.plot.scatter(x="A", y="B", z="z", hue="y", markersize="x", row="x", col="w")

2d looks fine: python fg = ds.plot.scatter(x="A", y="B", hue="y", markersize="x", row="x", col="w")

What did you expect to happen?

No plots overlapping each other, even if rotating the plots.

Minimal Complete Verifiable Example

No response

MVCE confirmation

  • [x] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
  • [x] Complete example — the example is self-contained, including all data and the text of any traceback.
  • [x] Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
  • [x] New issue — a search of GitHub Issues suggests this is not a duplicate.

Relevant log output

No response

Anything else we need to know?

No response

Environment

xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:30:19) [MSC v.1929 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: ('Swedish_Sweden', '1252') libhdf5: 1.12.2 libnetcdf: 4.8.1 xarray: 2022.9.1.dev266+gbd01f9cc.d20221006 pandas: 1.5.0 numpy: 1.23.3 scipy: 1.9.1 netCDF4: 1.6.1 pydap: installed h5netcdf: 1.0.2 h5py: 3.7.0 Nio: None zarr: 2.13.2 cftime: 1.6.2 nc_time_axis: 1.4.1 PseudoNetCDF: 3.2.2 rasterio: 1.3.2 cfgrib: None iris: 3.3.0 bottleneck: 1.3.5 dask: 2022.9.2 distributed: 2022.9.2 matplotlib: 3.6.0 cartopy: 0.21.0 seaborn: 0.12.0 numbagg: 0.2.1 fsspec: 2022.8.2 cupy: None pint: 0.19.2 sparse: 0.13.0 flox: 0.5.10.dev21+g91b6e19 numpy_groupies: 0.9.19 setuptools: 65.4.1 pip: 22.2.2 conda: None pytest: 7.1.3 IPython: 7.33.0 sphinx: 5.2.3 C:\Users\J.W\anaconda3\envs\xarray-tests\lib\site-packages\_distutils_hack\__init__.py:33: UserWarning: Setuptools is replacing distutils. warnings.warn("Setuptools is replacing distutils.")
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7170/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1377088142 I_kwDOAMm_X85SFLKO 7050 Type annotation guidelines Illviljan 14371165 open 0     2 2022-09-18T15:04:54Z 2022-09-23T01:55:19Z   MEMBER      

Dask has a pretty nice guideline for type hinting, see https://github.com/dask/community/issues/255.

Notable for us is to avoid adding typing in docstrings to avoid duplicating information.

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/7050/reactions",
    "total_count": 4,
    "+1": 4,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1046458609 I_kwDOAMm_X84-X7Dx 5945 Start using `|` instead of `Union` or `Optional` when typing Illviljan 14371165 closed 0     1 2021-11-06T08:12:57Z 2022-06-04T04:26:03Z 2022-06-04T04:26:03Z MEMBER      

Is your feature request related to a problem? Please describe. To make it easier reading the typing it is now possible to use | instead of Union or Optional.

Here's an example how it looks like in pandas: https://github.com/pandas-dev/pandas/blob/master/pandas/plotting/_core.py#L116-L134

Describe the solution you'd like Replace for example: * Union[str, int] with str | int * Optional[str] with None | str

This would likely require adding from __future__ import annotations at the top of the file.

References https://www.python.org/dev/peps/pep-0604/

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/5945/reactions",
    "total_count": 2,
    "+1": 2,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
597785475 MDU6SXNzdWU1OTc3ODU0NzU= 3962 Interpolation - Support extrapolation method "clip" Illviljan 14371165 open 0     4 2020-04-10T09:07:13Z 2022-05-02T13:42:24Z   MEMBER      

Hello,

I would like an option in da.interp()that instead of returning NaNs during extrapolation returns the data corresponding to the end of the breakpoint data set range.

One way to do this is to limit the new coordinates to the array coordinates minimum and maximum value, I did a simple example with this solution down below. I think this is a rather safe way as we are just modifying the inputs to all the various interpolation classes that xarray is using at the moment. But it does look a little weird when printing the extrapolated value, the coordinates shows the limited value instead of the requested coordinates. Maybe this can be handled elegantly somewhere in the source code?

MATLAB uses this quite frequently in their interpolation functions: * https://mathworks.com/help/simulink/ug/methods-for-estimating-missing-points.html * https://mathworks.com/help/simulink/slref/2dlookuptable.html

MCVE Code Sample

```python import numpy as np import xarray as xr

def interp(da, coords, extrapolation='clip'): """ Linear interpolation that clips the inputs to the coords min and max value.

Parameters
----------
da : DataArray
    DataArray to interpolate.
coords : dict
    Coordinates for the interpolated value.
"""
if extrapolation == 'clip':
    for k, v in da.coords.items():
        coords[k] = np.maximum(coords[k], np.min(v.values))
        coords[k] = np.minimum(coords[k], np.max(v.values))

return da.interp(coords)

Create coordinates:

x = np.linspace(1000, 6000, 4) y = np.linspace(100, 1200, 3)

Create data:

X = np.meshgrid(*[x, y], indexing='ij') data = X[0] * X[1]

Create DataArray:

da = xr.DataArray(data=data, coords=[('x', x), ('y', y)], name='data')

Attempt to extrapolate:

datai = interp(da, {'x': 7000, 'y': 375}) ```

Expected Output

python print(datai) <xarray.DataArray 'data' ()> array(2250000.) Coordinates: x float64 6e+03 y float64 375.0

Versions

Output of `xr.show_versions()` INSTALLED VERSIONS ------------------ commit: None python: 3.7.7 (default, Mar 23 2020, 23:19:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: None.None libhdf5: 1.10.4 libnetcdf: None xarray: 0.15.0 pandas: 1.0.3 numpy: 1.18.1 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2.13.0 distributed: 2.13.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 46.1.3.post20200330 pip: 20.0.2 conda: 4.8.3 pytest: 5.4.1 IPython: 7.13.0 sphinx: 2.4.4
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/3962/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
1182697604 I_kwDOAMm_X85GfoiE 6416 xr.concat removes datetime information Illviljan 14371165 closed 0     2 2022-03-27T23:19:30Z 2022-03-28T16:05:01Z 2022-03-28T16:05:01Z MEMBER      

What happened?

xr.concat removes datetime information and can't concatenate the arrays because they don't have compatible types anymore.

What did you expect to happen?

Succesful concatenation with the same type.

Minimal Complete Verifiable Example

```Python import numpy as np import xarray as xr from datetime import datetime

month = np.arange(1, 13, 1) data = np.sin(2 * np.pi * month / 12.0)

darray = xr.DataArray(data, dims=["time"]) darray.coords["time"] = np.array([datetime(2017, m, 1) for m in month])

darray_nan = np.nan * darray.isel(**{"time": -1}) darray = xr.concat([darray, darray_nan], dim="time") ```

Relevant log output

```Python Traceback (most recent call last):

File "<ipython-input-15-31040255a336>", line 2, in <module> darray = xr.concat([darray, darray_nan], dim="time")

File "c:\users\j.w\documents\github\xarray\xarray\core\concat.py", line 244, in concat return f(

File "c:\users\j.w\documents\github\xarray\xarray\core\concat.py", line 642, in _dataarray_concat ds = _dataset_concat(

File "c:\users\j.w\documents\github\xarray\xarray\core\concat.py", line 555, in _dataset_concat combined_idx = indexes[0].concat(indexes, dim, positions)

File "c:\users\j.w\documents\github\xarray\xarray\core\indexes.py", line 318, in concat coord_dtype = np.result_type(*[idx.coord_dtype for idx in indexes])

File "<array_function internals>", line 5, in result_type

TypeError: The DType <class 'numpy.dtype[datetime64]'> could not be promoted by <class 'numpy.dtype[int64]'>. This means that no common DType exists for the given inputs. For example they cannot be stored in a single array unless the dtype is object. The full list of DTypes is: (<class 'numpy.dtype[datetime64]'>, <class 'numpy.dtype[int64]'>) ```

Anything else we need to know?

Similar to #6384.

Happens around here:

https://github.com/pydata/xarray/blob/728b648d5c7c3e22fe3704ba163012840408bf66/xarray/core/concat.py#L535

Environment

INSTALLED VERSIONS ------------------ commit: None python: 3.9.6 | packaged by conda-forge | (default, Jul 11 2021, 03:37:25) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: ('Swedish_Sweden', '1252') libhdf5: 1.10.6 libnetcdf: 4.7.4 xarray: 0.16.3.dev99+gc19467fb pandas: 1.3.1 numpy: 1.21.5 scipy: 1.7.1 netCDF4: 1.5.6 pydap: installed h5netcdf: 0.11.0 h5py: 2.10.0 Nio: None zarr: 2.8.3 cftime: 1.5.0 nc_time_axis: 1.3.1 PseudoNetCDF: installed rasterio: 1.2.6 cfgrib: None iris: 3.0.4 bottleneck: 1.3.2 dask: 2021.10.0 distributed: 2021.10.0 matplotlib: 3.4.3 cartopy: 0.19.0.post1 seaborn: 0.11.1 numbagg: 0.2.1 fsspec: 2021.11.1 cupy: None pint: 0.17 sparse: 0.12.0 setuptools: 49.6.0.post20210108 pip: 21.2.4 conda: None pytest: 6.2.4 IPython: 7.31.0 sphinx: 4.3.2
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/6416/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1174585854 I_kwDOAMm_X85GAsH- 6384 xr.concat adds an extra array around elements Illviljan 14371165 closed 0     1 2022-03-20T15:25:49Z 2022-03-21T04:49:23Z 2022-03-21T04:49:23Z MEMBER      

What happened?

When concatenating dataarrays with pd.Interval along a dim the pd.Interval is wrapped with a numpy array and appended instead of without like it it was before #5692.

Minimal Complete Verifiable Example

```Python import numpy as np import xarray as xr

shape = (2, 3, 4) darray = xr.DataArray(np.linspace(0, 1, num=np.prod(shape)).reshape(shape)) bins = [-1, 0, 1, 2] a = darray.groupby_bins("dim_0", bins).mean(...) a_nan = np.nan * a.isel(**{"dim_0_bins": -1}) out = xr.concat([a, a_nan], dim="dim_0_bins") print(out["dim_0_bins"]) ```

Relevant log output

Current result: Python <xarray.DataArray 'dim_0_bins' (dim_0_bins: 4)> array([Interval(-1, 0, closed='right'), Interval(0, 1, closed='right'), Interval(1, 2, closed='right'), array(Interval(1, 2, closed='right'), dtype=object)], dtype=object) Coordinates: * dim_0_bins (dim_0_bins) object (-1, 0] (0, 1] (1, 2] (1, 2]

Should be: ```python <xarray.DataArray 'dim_0_bins' (dim_0_bins: 4)> array([Interval(-1, 0, closed='right'), Interval(0, 1, closed='right'), Interval(1, 2, closed='right'), Interval(1, 2, closed='right')], dtype=object) Coordinates: * dim_0_bins (dim_0_bins) object (-1, 0] (0, 1] (1, 2] (1, 2]

```

Anything else we need to know?

No response

Environment

xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.9.6 | packaged by conda-forge | (default, Jul 11 2021, 03:37:25) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: ('Swedish_Sweden', '1252') libhdf5: 1.10.6 libnetcdf: 4.7.4 xarray: 0.16.3.dev99+gc19467fb pandas: 1.3.1 numpy: 1.21.5 scipy: 1.7.1 netCDF4: 1.5.6 pydap: installed h5netcdf: 0.11.0 h5py: 2.10.0 Nio: None zarr: 2.8.3 cftime: 1.5.0 nc_time_axis: 1.3.1 PseudoNetCDF: installed rasterio: 1.2.6 cfgrib: None iris: 3.0.4 bottleneck: 1.3.2 dask: 2021.10.0 distributed: 2021.10.0 matplotlib: 3.4.3 cartopy: 0.19.0.post1 seaborn: 0.11.1 numbagg: 0.2.1 fsspec: 2021.11.1 cupy: None pint: 0.17 sparse: 0.12.0 setuptools: 49.6.0.post20210108 pip: 21.2.4 conda: None pytest: 6.2.4 IPython: 7.31.0 sphinx: 4.3.2
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/6384/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
957201551 MDU6SXNzdWU5NTcyMDE1NTE= 5655 Allow .attrs to use dict-likes Illviljan 14371165 open 0     2 2021-07-31T08:31:55Z 2022-01-09T03:32:04Z   MEMBER      

Is your feature request related to a problem? Please describe. Reading attributes from h5py-files is rather slow. So instead of retrieving it immediately I wanted to create a lazy dict-class that only retrieves the attribute values when necessary. But this is difficult to achieve since xarray keeps forcing the attrs to dicts in a lot of places.

Describe the solution you'd like * Replace in https://github.com/pydata/xarray/blob/dddac11b01330791ffab4dfc72d226e71821973e/xarray/core/variable.py#L865 and https://github.com/pydata/xarray/blob/dddac11b01330791ffab4dfc72d226e71821973e/xarray/core/dataset.py#L798 with a asdict(value) function that checks if the input is a valid dict-like, if not convert to dict. Things that might be good to check: * MutableMapping * hasattr(dict_like, "copy") * isinstance(dict_like, dict) == True * Remove unneccessary conversions to dict. For example https://github.com/pydata/xarray/blob/dddac11b01330791ffab4dfc72d226e71821973e/xarray/core/merge.py#L523 should not be necessary as attrs from variables/dataarrays/datasets have already been forced to dicts when they were initialized.

Describe alternatives you've considered * One could lazify with dicts as well, for example by replacing the value with a function. This however won't look good in reprs, that's why having a convienence class is nice. * dict(LazyDict) always forces to dict, it does not let it pass through unchanged even if isinstance(LazyDict, dict) == True.

Interesting reading: https://stackoverflow.com/questions/16669367/setup-dictionary-lazily https://stackoverflow.com/questions/3387691/how-to-perfectly-override-a-dict

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/5655/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
931796211 MDU6SXNzdWU5MzE3OTYyMTE= 5546 Limit number of displayed dimensions in repr Illviljan 14371165 closed 0     1 2021-06-28T17:25:18Z 2022-01-03T17:38:48Z 2022-01-03T17:38:48Z MEMBER      

What happened: Dimension doesn't seem to be limited when there are too many of them. See example below. This slows down the repr significantly and is quite unreadable to me.

What you expected to happen: To be limited so that it aligns with whatever the maximum line length is for variables. It's also fine if it continues on a couple of rows below in similar fashion to variables.

Minimal Complete Verifiable Example: This is probably a bit of an edge case. My real datasets usually have around 12 "dimensions" and coords, +2000 variables, 50 attrs. python a = np.arange(0, 2000) data_vars = dict() for i in a: data_vars[f"long_variable_name_{i}"] = xr.DataArray( name=f"long_variable_name_{i}", data=np.array([3, 4]), dims=[f"long_coord_name_{i}_x"], coords={f"long_coord_name_{i}_x": np.array([0, 1])}, ) ds0 = xr.Dataset(data_vars) ds0.attrs = {f"attr_{k}": 2 for k in a}

python <xarray.Dataset> Dimensions: (long_coord_name_0_x: 2, long_coord_name_1000_x: 2, long_coord_name_1001_x: 2, long_coord_name_1002_x: 2, long_coord_name_1003_x: 2, long_coord_name_1004_x: 2, long_coord_name_1005_x: 2, long_coord_name_1006_x: 2, long_coord_name_1007_x: 2, long_coord_name_1008_x: 2, long_coord_name_1009_x: 2, long_coord_name_100_x: 2, long_coord_name_1010_x: 2, long_coord_name_1011_x: 2, long_coord_name_1012_x: 2, long_coord_name_1013_x: 2, long_coord_name_1014_x: 2, long_coord_name_1015_x: 2, long_coord_name_1016_x: 2, long_coord_name_1017_x: 2, long_coord_name_1018_x: 2, long_coord_name_1019_x: 2, long_coord_name_101_x: 2, long_coord_name_1020_x: 2, long_coord_name_1021_x: 2, long_coord_name_1022_x: 2, long_coord_name_1023_x: 2, long_coord_name_1024_x: 2, long_coord_name_1025_x: 2, long_coord_name_1026_x: 2, long_coord_name_1027_x: 2, long_coord_name_1028_x: 2, long_coord_name_1029_x: 2, long_coord_name_102_x: 2, long_coord_name_1030_x: 2, long_coord_name_1031_x: 2, long_coord_name_1032_x: 2, long_coord_name_1033_x: 2, long_coord_name_1034_x: 2, long_coord_name_1035_x: 2, long_coord_name_1036_x: 2, long_coord_name_1037_x: 2, long_coord_name_1038_x: 2, long_coord_name_1039_x: 2, long_coord_name_103_x: 2, long_coord_name_1040_x: 2, long_coord_name_1041_x: 2, long_coord_name_1042_x: 2, long_coord_name_1043_x: 2, long_coord_name_1044_x: 2, long_coord_name_1045_x: 2, long_coord_name_1046_x: 2, long_coord_name_1047_x: 2, long_coord_name_1048_x: 2, long_coord_name_1049_x: 2, long_coord_name_104_x: 2, long_coord_name_1050_x: 2, long_coord_name_1051_x: 2, long_coord_name_1052_x: 2, long_coord_name_1053_x: 2, long_coord_name_1054_x: 2, long_coord_name_1055_x: 2, long_coord_name_1056_x: 2, long_coord_name_1057_x: 2, long_coord_name_1058_x: 2, long_coord_name_1059_x: 2, long_coord_name_105_x: 2, long_coord_name_1060_x: 2, long_coord_name_1061_x: 2, long_coord_name_1062_x: 2, long_coord_name_1063_x: 2, long_coord_name_1064_x: 2, long_coord_name_1065_x: 2, long_coord_name_1066_x: 2, long_coord_name_1067_x: 2, long_coord_name_1068_x: 2, long_coord_name_1069_x: 2, long_coord_name_106_x: 2, long_coord_name_1070_x: 2, long_coord_name_1071_x: 2, long_coord_name_1072_x: 2, long_coord_name_1073_x: 2, long_coord_name_1074_x: 2, long_coord_name_1075_x: 2, long_coord_name_1076_x: 2, long_coord_name_1077_x: 2, long_coord_name_1078_x: 2, long_coord_name_1079_x: 2, long_coord_name_107_x: 2, long_coord_name_1080_x: 2, long_coord_name_1081_x: 2, long_coord_name_1082_x: 2, long_coord_name_1083_x: 2, long_coord_name_1084_x: 2, long_coord_name_1085_x: 2, long_coord_name_1086_x: 2, long_coord_name_1087_x: 2, long_coord_name_1088_x: 2, long_coord_name_1089_x: 2, long_coord_name_108_x: 2, long_coord_name_1090_x: 2, long_coord_name_1091_x: 2, long_coord_name_1092_x: 2, long_coord_name_1093_x: 2, long_coord_name_1094_x: 2, long_coord_name_1095_x: 2, long_coord_name_1096_x: 2, long_coord_name_1097_x: 2, long_coord_name_1098_x: 2, long_coord_name_1099_x: 2, long_coord_name_109_x: 2, long_coord_name_10_x: 2, long_coord_name_1100_x: 2, long_coord_name_1101_x: 2, long_coord_name_1102_x: 2, long_coord_name_1103_x: 2, long_coord_name_1104_x: 2, long_coord_name_1105_x: 2, long_coord_name_1106_x: 2, long_coord_name_1107_x: 2, long_coord_name_1108_x: 2, long_coord_name_1109_x: 2, long_coord_name_110_x: 2, long_coord_name_1110_x: 2, long_coord_name_1111_x: 2, long_coord_name_1112_x: 2, long_coord_name_1113_x: 2, long_coord_name_1114_x: 2, long_coord_name_1115_x: 2, long_coord_name_1116_x: 2, long_coord_name_1117_x: 2, long_coord_name_1118_x: 2, long_coord_name_1119_x: 2, long_coord_name_111_x: 2, long_coord_name_1120_x: 2, long_coord_name_1121_x: 2, long_coord_name_1122_x: 2, long_coord_name_1123_x: 2, long_coord_name_1124_x: 2, long_coord_name_1125_x: 2, long_coord_name_1126_x: 2, long_coord_name_1127_x: 2, long_coord_name_1128_x: 2, long_coord_name_1129_x: 2, long_coord_name_112_x: 2, long_coord_name_1130_x: 2, long_coord_name_1131_x: 2, long_coord_name_1132_x: 2, long_coord_name_1133_x: 2, long_coord_name_1134_x: 2, long_coord_name_1135_x: 2, long_coord_name_1136_x: 2, long_coord_name_1137_x: 2, long_coord_name_1138_x: 2, long_coord_name_1139_x: 2, long_coord_name_113_x: 2, long_coord_name_1140_x: 2, long_coord_name_1141_x: 2, long_coord_name_1142_x: 2, long_coord_name_1143_x: 2, long_coord_name_1144_x: 2, long_coord_name_1145_x: 2, long_coord_name_1146_x: 2, long_coord_name_1147_x: 2, long_coord_name_1148_x: 2, long_coord_name_1149_x: 2, long_coord_name_114_x: 2, long_coord_name_1150_x: 2, long_coord_name_1151_x: 2, long_coord_name_1152_x: 2, long_coord_name_1153_x: 2, long_coord_name_1154_x: 2, long_coord_name_1155_x: 2, long_coord_name_1156_x: 2, long_coord_name_1157_x: 2, long_coord_name_1158_x: 2, long_coord_name_1159_x: 2, long_coord_name_115_x: 2, long_coord_name_1160_x: 2, long_coord_name_1161_x: 2, long_coord_name_1162_x: 2, long_coord_name_1163_x: 2, long_coord_name_1164_x: 2, long_coord_name_1165_x: 2, long_coord_name_1166_x: 2, long_coord_name_1167_x: 2, long_coord_name_1168_x: 2, long_coord_name_1169_x: 2, long_coord_name_116_x: 2, long_coord_name_1170_x: 2, long_coord_name_1171_x: 2, long_coord_name_1172_x: 2, long_coord_name_1173_x: 2, long_coord_name_1174_x: 2, long_coord_name_1175_x: 2, long_coord_name_1176_x: 2, long_coord_name_1177_x: 2, long_coord_name_1178_x: 2, long_coord_name_1179_x: 2, long_coord_name_117_x: 2, long_coord_name_1180_x: 2, long_coord_name_1181_x: 2, long_coord_name_1182_x: 2, long_coord_name_1183_x: 2, long_coord_name_1184_x: 2, long_coord_name_1185_x: 2, long_coord_name_1186_x: 2, long_coord_name_1187_x: 2, long_coord_name_1188_x: 2, long_coord_name_1189_x: 2, long_coord_name_118_x: 2, long_coord_name_1190_x: 2, long_coord_name_1191_x: 2, long_coord_name_1192_x: 2, long_coord_name_1193_x: 2, long_coord_name_1194_x: 2, long_coord_name_1195_x: 2, long_coord_name_1196_x: 2, long_coord_name_1197_x: 2, long_coord_name_1198_x: 2, long_coord_name_1199_x: 2, long_coord_name_119_x: 2, long_coord_name_11_x: 2, long_coord_name_1200_x: 2, long_coord_name_1201_x: 2, long_coord_name_1202_x: 2, long_coord_name_1203_x: 2, long_coord_name_1204_x: 2, long_coord_name_1205_x: 2, long_coord_name_1206_x: 2, long_coord_name_1207_x: 2, long_coord_name_1208_x: 2, long_coord_name_1209_x: 2, long_coord_name_120_x: 2, long_coord_name_1210_x: 2, long_coord_name_1211_x: 2, long_coord_name_1212_x: 2, long_coord_name_1213_x: 2, long_coord_name_1214_x: 2, long_coord_name_1215_x: 2, long_coord_name_1216_x: 2, long_coord_name_1217_x: 2, long_coord_name_1218_x: 2, long_coord_name_1219_x: 2, long_coord_name_121_x: 2, long_coord_name_1220_x: 2, long_coord_name_1221_x: 2, long_coord_name_1222_x: 2, long_coord_name_1223_x: 2, long_coord_name_1224_x: 2, long_coord_name_1225_x: 2, long_coord_name_1226_x: 2, long_coord_name_1227_x: 2, long_coord_name_1228_x: 2, long_coord_name_1229_x: 2, long_coord_name_122_x: 2, long_coord_name_1230_x: 2, long_coord_name_1231_x: 2, long_coord_name_1232_x: 2, long_coord_name_1233_x: 2, long_coord_name_1234_x: 2, long_coord_name_1235_x: 2, long_coord_name_1236_x: 2, long_coord_name_1237_x: 2, long_coord_name_1238_x: 2, long_coord_name_1239_x: 2, long_coord_name_123_x: 2, long_coord_name_1240_x: 2, long_coord_name_1241_x: 2, long_coord_name_1242_x: 2, long_coord_name_1243_x: 2, long_coord_name_1244_x: 2, long_coord_name_1245_x: 2, long_coord_name_1246_x: 2, long_coord_name_1247_x: 2, long_coord_name_1248_x: 2, long_coord_name_1249_x: 2, long_coord_name_124_x: 2, long_coord_name_1250_x: 2, long_coord_name_1251_x: 2, long_coord_name_1252_x: 2, long_coord_name_1253_x: 2, long_coord_name_1254_x: 2, long_coord_name_1255_x: 2, long_coord_name_1256_x: 2, long_coord_name_1257_x: 2, long_coord_name_1258_x: 2, long_coord_name_1259_x: 2, long_coord_name_125_x: 2, long_coord_name_1260_x: 2, long_coord_name_1261_x: 2, long_coord_name_1262_x: 2, long_coord_name_1263_x: 2, long_coord_name_1264_x: 2, long_coord_name_1265_x: 2, long_coord_name_1266_x: 2, long_coord_name_1267_x: 2, long_coord_name_1268_x: 2, long_coord_name_1269_x: 2, long_coord_name_126_x: 2, long_coord_name_1270_x: 2, long_coord_name_1271_x: 2, long_coord_name_1272_x: 2, long_coord_name_1273_x: 2, long_coord_name_1274_x: 2, long_coord_name_1275_x: 2, long_coord_name_1276_x: 2, long_coord_name_1277_x: 2, long_coord_name_1278_x: 2, long_coord_name_1279_x: 2, long_coord_name_127_x: 2, long_coord_name_1280_x: 2, long_coord_name_1281_x: 2, long_coord_name_1282_x: 2, long_coord_name_1283_x: 2, long_coord_name_1284_x: 2, long_coord_name_1285_x: 2, long_coord_name_1286_x: 2, long_coord_name_1287_x: 2, long_coord_name_1288_x: 2, long_coord_name_1289_x: 2, long_coord_name_128_x: 2, long_coord_name_1290_x: 2, long_coord_name_1291_x: 2, long_coord_name_1292_x: 2, long_coord_name_1293_x: 2, long_coord_name_1294_x: 2, long_coord_name_1295_x: 2, long_coord_name_1296_x: 2, long_coord_name_1297_x: 2, long_coord_name_1298_x: 2, long_coord_name_1299_x: 2, long_coord_name_129_x: 2, long_coord_name_12_x: 2, long_coord_name_1300_x: 2, long_coord_name_1301_x: 2, long_coord_name_1302_x: 2, long_coord_name_1303_x: 2, long_coord_name_1304_x: 2, long_coord_name_1305_x: 2, long_coord_name_1306_x: 2, long_coord_name_1307_x: 2, long_coord_name_1308_x: 2, long_coord_name_1309_x: 2, long_coord_name_130_x: 2, long_coord_name_1310_x: 2, long_coord_name_1311_x: 2, long_coord_name_1312_x: 2, long_coord_name_1313_x: 2, long_coord_name_1314_x: 2, long_coord_name_1315_x: 2, long_coord_name_1316_x: 2, long_coord_name_1317_x: 2, long_coord_name_1318_x: 2, long_coord_name_1319_x: 2, long_coord_name_131_x: 2, long_coord_name_1320_x: 2, long_coord_name_1321_x: 2, long_coord_name_1322_x: 2, long_coord_name_1323_x: 2, long_coord_name_1324_x: 2, long_coord_name_1325_x: 2, long_coord_name_1326_x: 2, long_coord_name_1327_x: 2, long_coord_name_1328_x: 2, long_coord_name_1329_x: 2, long_coord_name_132_x: 2, long_coord_name_1330_x: 2, long_coord_name_1331_x: 2, long_coord_name_1332_x: 2, long_coord_name_1333_x: 2, long_coord_name_1334_x: 2, long_coord_name_1335_x: 2, long_coord_name_1336_x: 2, long_coord_name_1337_x: 2, long_coord_name_1338_x: 2, long_coord_name_1339_x: 2, long_coord_name_133_x: 2, long_coord_name_1340_x: 2, long_coord_name_1341_x: 2, long_coord_name_1342_x: 2, long_coord_name_1343_x: 2, long_coord_name_1344_x: 2, long_coord_name_1345_x: 2, long_coord_name_1346_x: 2, long_coord_name_1347_x: 2, long_coord_name_1348_x: 2, long_coord_name_1349_x: 2, long_coord_name_134_x: 2, long_coord_name_1350_x: 2, long_coord_name_1351_x: 2, long_coord_name_1352_x: 2, long_coord_name_1353_x: 2, long_coord_name_1354_x: 2, long_coord_name_1355_x: 2, long_coord_name_1356_x: 2, long_coord_name_1357_x: 2, long_coord_name_1358_x: 2, long_coord_name_1359_x: 2, long_coord_name_135_x: 2, long_coord_name_1360_x: 2, long_coord_name_1361_x: 2, long_coord_name_1362_x: 2, long_coord_name_1363_x: 2, long_coord_name_1364_x: 2, long_coord_name_1365_x: 2, long_coord_name_1366_x: 2, long_coord_name_1367_x: 2, long_coord_name_1368_x: 2, long_coord_name_1369_x: 2, long_coord_name_136_x: 2, long_coord_name_1370_x: 2, long_coord_name_1371_x: 2, long_coord_name_1372_x: 2, long_coord_name_1373_x: 2, long_coord_name_1374_x: 2, long_coord_name_1375_x: 2, long_coord_name_1376_x: 2, long_coord_name_1377_x: 2, long_coord_name_1378_x: 2, long_coord_name_1379_x: 2, long_coord_name_137_x: 2, long_coord_name_1380_x: 2, long_coord_name_1381_x: 2, long_coord_name_1382_x: 2, long_coord_name_1383_x: 2, long_coord_name_1384_x: 2, long_coord_name_1385_x: 2, long_coord_name_1386_x: 2, long_coord_name_1387_x: 2, long_coord_name_1388_x: 2, long_coord_name_1389_x: 2, long_coord_name_138_x: 2, long_coord_name_1390_x: 2, long_coord_name_1391_x: 2, long_coord_name_1392_x: 2, long_coord_name_1393_x: 2, long_coord_name_1394_x: 2, long_coord_name_1395_x: 2, long_coord_name_1396_x: 2, long_coord_name_1397_x: 2, long_coord_name_1398_x: 2, long_coord_name_1399_x: 2, long_coord_name_139_x: 2, long_coord_name_13_x: 2, long_coord_name_1400_x: 2, long_coord_name_1401_x: 2, long_coord_name_1402_x: 2, long_coord_name_1403_x: 2, long_coord_name_1404_x: 2, long_coord_name_1405_x: 2, long_coord_name_1406_x: 2, long_coord_name_1407_x: 2, long_coord_name_1408_x: 2, long_coord_name_1409_x: 2, long_coord_name_140_x: 2, long_coord_name_1410_x: 2, long_coord_name_1411_x: 2, long_coord_name_1412_x: 2, long_coord_name_1413_x: 2, long_coord_name_1414_x: 2, long_coord_name_1415_x: 2, long_coord_name_1416_x: 2, long_coord_name_1417_x: 2, long_coord_name_1418_x: 2, long_coord_name_1419_x: 2, long_coord_name_141_x: 2, long_coord_name_1420_x: 2, long_coord_name_1421_x: 2, long_coord_name_1422_x: 2, long_coord_name_1423_x: 2, long_coord_name_1424_x: 2, long_coord_name_1425_x: 2, long_coord_name_1426_x: 2, long_coord_name_1427_x: 2, long_coord_name_1428_x: 2, long_coord_name_1429_x: 2, long_coord_name_142_x: 2, long_coord_name_1430_x: 2, long_coord_name_1431_x: 2, long_coord_name_1432_x: 2, long_coord_name_1433_x: 2, long_coord_name_1434_x: 2, long_coord_name_1435_x: 2, long_coord_name_1436_x: 2, long_coord_name_1437_x: 2, long_coord_name_1438_x: 2, long_coord_name_1439_x: 2, long_coord_name_143_x: 2, long_coord_name_1440_x: 2, long_coord_name_1441_x: 2, long_coord_name_1442_x: 2, long_coord_name_1443_x: 2, long_coord_name_1444_x: 2, long_coord_name_1445_x: 2, long_coord_name_1446_x: 2, long_coord_name_1447_x: 2, long_coord_name_1448_x: 2, long_coord_name_1449_x: 2, long_coord_name_144_x: 2, long_coord_name_1450_x: 2, long_coord_name_1451_x: 2, long_coord_name_1452_x: 2, long_coord_name_1453_x: 2, long_coord_name_1454_x: 2, long_coord_name_1455_x: 2, long_coord_name_1456_x: 2, long_coord_name_1457_x: 2, long_coord_name_1458_x: 2, long_coord_name_1459_x: 2, long_coord_name_145_x: 2, long_coord_name_1460_x: 2, long_coord_name_1461_x: 2, long_coord_name_1462_x: 2, long_coord_name_1463_x: 2, long_coord_name_1464_x: 2, long_coord_name_1465_x: 2, long_coord_name_1466_x: 2, long_coord_name_1467_x: 2, long_coord_name_1468_x: 2, long_coord_name_1469_x: 2, long_coord_name_146_x: 2, long_coord_name_1470_x: 2, long_coord_name_1471_x: 2, long_coord_name_1472_x: 2, long_coord_name_1473_x: 2, long_coord_name_1474_x: 2, long_coord_name_1475_x: 2, long_coord_name_1476_x: 2, long_coord_name_1477_x: 2, long_coord_name_1478_x: 2, long_coord_name_1479_x: 2, long_coord_name_147_x: 2, long_coord_name_1480_x: 2, long_coord_name_1481_x: 2, long_coord_name_1482_x: 2, long_coord_name_1483_x: 2, long_coord_name_1484_x: 2, long_coord_name_1485_x: 2, long_coord_name_1486_x: 2, long_coord_name_1487_x: 2, long_coord_name_1488_x: 2, long_coord_name_1489_x: 2, long_coord_name_148_x: 2, long_coord_name_1490_x: 2, long_coord_name_1491_x: 2, long_coord_name_1492_x: 2, long_coord_name_1493_x: 2, long_coord_name_1494_x: 2, long_coord_name_1495_x: 2, long_coord_name_1496_x: 2, long_coord_name_1497_x: 2, long_coord_name_1498_x: 2, long_coord_name_1499_x: 2, long_coord_name_149_x: 2, long_coord_name_14_x: 2, long_coord_name_1500_x: 2, long_coord_name_1501_x: 2, long_coord_name_1502_x: 2, long_coord_name_1503_x: 2, long_coord_name_1504_x: 2, long_coord_name_1505_x: 2, long_coord_name_1506_x: 2, long_coord_name_1507_x: 2, long_coord_name_1508_x: 2, long_coord_name_1509_x: 2, long_coord_name_150_x: 2, long_coord_name_1510_x: 2, long_coord_name_1511_x: 2, long_coord_name_1512_x: 2, long_coord_name_1513_x: 2, long_coord_name_1514_x: 2, long_coord_name_1515_x: 2, long_coord_name_1516_x: 2, long_coord_name_1517_x: 2, long_coord_name_1518_x: 2, long_coord_name_1519_x: 2, long_coord_name_151_x: 2, long_coord_name_1520_x: 2, long_coord_name_1521_x: 2, long_coord_name_1522_x: 2, long_coord_name_1523_x: 2, long_coord_name_1524_x: 2, long_coord_name_1525_x: 2, long_coord_name_1526_x: 2, long_coord_name_1527_x: 2, long_coord_name_1528_x: 2, long_coord_name_1529_x: 2, long_coord_name_152_x: 2, long_coord_name_1530_x: 2, long_coord_name_1531_x: 2, long_coord_name_1532_x: 2, long_coord_name_1533_x: 2, long_coord_name_1534_x: 2, long_coord_name_1535_x: 2, long_coord_name_1536_x: 2, long_coord_name_1537_x: 2, long_coord_name_1538_x: 2, long_coord_name_1539_x: 2, long_coord_name_153_x: 2, long_coord_name_1540_x: 2, long_coord_name_1541_x: 2, long_coord_name_1542_x: 2, long_coord_name_1543_x: 2, long_coord_name_1544_x: 2, long_coord_name_1545_x: 2, long_coord_name_1546_x: 2, long_coord_name_1547_x: 2, long_coord_name_1548_x: 2, long_coord_name_1549_x: 2, long_coord_name_154_x: 2, long_coord_name_1550_x: 2, long_coord_name_1551_x: 2, long_coord_name_1552_x: 2, long_coord_name_1553_x: 2, long_coord_name_1554_x: 2, long_coord_name_1555_x: 2, long_coord_name_1556_x: 2, long_coord_name_1557_x: 2, long_coord_name_1558_x: 2, long_coord_name_1559_x: 2, long_coord_name_155_x: 2, long_coord_name_1560_x: 2, long_coord_name_1561_x: 2, long_coord_name_1562_x: 2, long_coord_name_1563_x: 2, long_coord_name_1564_x: 2, long_coord_name_1565_x: 2, long_coord_name_1566_x: 2, long_coord_name_1567_x: 2, long_coord_name_1568_x: 2, long_coord_name_1569_x: 2, long_coord_name_156_x: 2, long_coord_name_1570_x: 2, long_coord_name_1571_x: 2, long_coord_name_1572_x: 2, long_coord_name_1573_x: 2, long_coord_name_1574_x: 2, long_coord_name_1575_x: 2, long_coord_name_1576_x: 2, long_coord_name_1577_x: 2, long_coord_name_1578_x: 2, long_coord_name_1579_x: 2, long_coord_name_157_x: 2, long_coord_name_1580_x: 2, long_coord_name_1581_x: 2, long_coord_name_1582_x: 2, long_coord_name_1583_x: 2, long_coord_name_1584_x: 2, long_coord_name_1585_x: 2, long_coord_name_1586_x: 2, long_coord_name_1587_x: 2, long_coord_name_1588_x: 2, long_coord_name_1589_x: 2, long_coord_name_158_x: 2, long_coord_name_1590_x: 2, long_coord_name_1591_x: 2, long_coord_name_1592_x: 2, long_coord_name_1593_x: 2, long_coord_name_1594_x: 2, long_coord_name_1595_x: 2, long_coord_name_1596_x: 2, long_coord_name_1597_x: 2, long_coord_name_1598_x: 2, long_coord_name_1599_x: 2, long_coord_name_159_x: 2, long_coord_name_15_x: 2, long_coord_name_1600_x: 2, long_coord_name_1601_x: 2, long_coord_name_1602_x: 2, long_coord_name_1603_x: 2, long_coord_name_1604_x: 2, long_coord_name_1605_x: 2, long_coord_name_1606_x: 2, long_coord_name_1607_x: 2, long_coord_name_1608_x: 2, long_coord_name_1609_x: 2, long_coord_name_160_x: 2, long_coord_name_1610_x: 2, long_coord_name_1611_x: 2, long_coord_name_1612_x: 2, long_coord_name_1613_x: 2, long_coord_name_1614_x: 2, long_coord_name_1615_x: 2, long_coord_name_1616_x: 2, long_coord_name_1617_x: 2, long_coord_name_1618_x: 2, long_coord_name_1619_x: 2, long_coord_name_161_x: 2, long_coord_name_1620_x: 2, long_coord_name_1621_x: 2, long_coord_name_1622_x: 2, long_coord_name_1623_x: 2, long_coord_name_1624_x: 2, long_coord_name_1625_x: 2, long_coord_name_1626_x: 2, long_coord_name_1627_x: 2, long_coord_name_1628_x: 2, long_coord_name_1629_x: 2, long_coord_name_162_x: 2, long_coord_name_1630_x: 2, long_coord_name_1631_x: 2, long_coord_name_1632_x: 2, long_coord_name_1633_x: 2, long_coord_name_1634_x: 2, long_coord_name_1635_x: 2, long_coord_name_1636_x: 2, long_coord_name_1637_x: 2, long_coord_name_1638_x: 2, long_coord_name_1639_x: 2, long_coord_name_163_x: 2, long_coord_name_1640_x: 2, long_coord_name_1641_x: 2, long_coord_name_1642_x: 2, long_coord_name_1643_x: 2, long_coord_name_1644_x: 2, long_coord_name_1645_x: 2, long_coord_name_1646_x: 2, long_coord_name_1647_x: 2, long_coord_name_1648_x: 2, long_coord_name_1649_x: 2, long_coord_name_164_x: 2, long_coord_name_1650_x: 2, long_coord_name_1651_x: 2, long_coord_name_1652_x: 2, long_coord_name_1653_x: 2, long_coord_name_1654_x: 2, long_coord_name_1655_x: 2, long_coord_name_1656_x: 2, long_coord_name_1657_x: 2, long_coord_name_1658_x: 2, long_coord_name_1659_x: 2, long_coord_name_165_x: 2, long_coord_name_1660_x: 2, long_coord_name_1661_x: 2, long_coord_name_1662_x: 2, long_coord_name_1663_x: 2, long_coord_name_1664_x: 2, long_coord_name_1665_x: 2, long_coord_name_1666_x: 2, long_coord_name_1667_x: 2, long_coord_name_1668_x: 2, long_coord_name_1669_x: 2, long_coord_name_166_x: 2, long_coord_name_1670_x: 2, long_coord_name_1671_x: 2, long_coord_name_1672_x: 2, long_coord_name_1673_x: 2, long_coord_name_1674_x: 2, long_coord_name_1675_x: 2, long_coord_name_1676_x: 2, long_coord_name_1677_x: 2, long_coord_name_1678_x: 2, long_coord_name_1679_x: 2, long_coord_name_167_x: 2, long_coord_name_1680_x: 2, long_coord_name_1681_x: 2, long_coord_name_1682_x: 2, long_coord_name_1683_x: 2, long_coord_name_1684_x: 2, long_coord_name_1685_x: 2, long_coord_name_1686_x: 2, long_coord_name_1687_x: 2, long_coord_name_1688_x: 2, long_coord_name_1689_x: 2, long_coord_name_168_x: 2, long_coord_name_1690_x: 2, long_coord_name_1691_x: 2, long_coord_name_1692_x: 2, long_coord_name_1693_x: 2, long_coord_name_1694_x: 2, long_coord_name_1695_x: 2, long_coord_name_1696_x: 2, long_coord_name_1697_x: 2, long_coord_name_1698_x: 2, long_coord_name_1699_x: 2, long_coord_name_169_x: 2, long_coord_name_16_x: 2, long_coord_name_1700_x: 2, long_coord_name_1701_x: 2, long_coord_name_1702_x: 2, long_coord_name_1703_x: 2, long_coord_name_1704_x: 2, long_coord_name_1705_x: 2, long_coord_name_1706_x: 2, long_coord_name_1707_x: 2, long_coord_name_1708_x: 2, long_coord_name_1709_x: 2, long_coord_name_170_x: 2, long_coord_name_1710_x: 2, long_coord_name_1711_x: 2, long_coord_name_1712_x: 2, long_coord_name_1713_x: 2, long_coord_name_1714_x: 2, long_coord_name_1715_x: 2, long_coord_name_1716_x: 2, long_coord_name_1717_x: 2, long_coord_name_1718_x: 2, long_coord_name_1719_x: 2, long_coord_name_171_x: 2, long_coord_name_1720_x: 2, long_coord_name_1721_x: 2, long_coord_name_1722_x: 2, long_coord_name_1723_x: 2, long_coord_name_1724_x: 2, long_coord_name_1725_x: 2, long_coord_name_1726_x: 2, long_coord_name_1727_x: 2, long_coord_name_1728_x: 2, long_coord_name_1729_x: 2, long_coord_name_172_x: 2, long_coord_name_1730_x: 2, long_coord_name_1731_x: 2, long_coord_name_1732_x: 2, long_coord_name_1733_x: 2, long_coord_name_1734_x: 2, long_coord_name_1735_x: 2, long_coord_name_1736_x: 2, long_coord_name_1737_x: 2, long_coord_name_1738_x: 2, long_coord_name_1739_x: 2, long_coord_name_173_x: 2, long_coord_name_1740_x: 2, long_coord_name_1741_x: 2, long_coord_name_1742_x: 2, long_coord_name_1743_x: 2, long_coord_name_1744_x: 2, long_coord_name_1745_x: 2, long_coord_name_1746_x: 2, long_coord_name_1747_x: 2, long_coord_name_1748_x: 2, long_coord_name_1749_x: 2, long_coord_name_174_x: 2, long_coord_name_1750_x: 2, long_coord_name_1751_x: 2, long_coord_name_1752_x: 2, long_coord_name_1753_x: 2, long_coord_name_1754_x: 2, long_coord_name_1755_x: 2, long_coord_name_1756_x: 2, long_coord_name_1757_x: 2, long_coord_name_1758_x: 2, long_coord_name_1759_x: 2, long_coord_name_175_x: 2, long_coord_name_1760_x: 2, long_coord_name_1761_x: 2, long_coord_name_1762_x: 2, long_coord_name_1763_x: 2, long_coord_name_1764_x: 2, long_coord_name_1765_x: 2, long_coord_name_1766_x: 2, long_coord_name_1767_x: 2, long_coord_name_1768_x: 2, long_coord_name_1769_x: 2, long_coord_name_176_x: 2, long_coord_name_1770_x: 2, long_coord_name_1771_x: 2, long_coord_name_1772_x: 2, long_coord_name_1773_x: 2, long_coord_name_1774_x: 2, long_coord_name_1775_x: 2, long_coord_name_1776_x: 2, long_coord_name_1777_x: 2, long_coord_name_1778_x: 2, long_coord_name_1779_x: 2, long_coord_name_177_x: 2, long_coord_name_1780_x: 2, long_coord_name_1781_x: 2, long_coord_name_1782_x: 2, long_coord_name_1783_x: 2, long_coord_name_1784_x: 2, long_coord_name_1785_x: 2, long_coord_name_1786_x: 2, long_coord_name_1787_x: 2, long_coord_name_1788_x: 2, long_coord_name_1789_x: 2, long_coord_name_178_x: 2, long_coord_name_1790_x: 2, long_coord_name_1791_x: 2, long_coord_name_1792_x: 2, long_coord_name_1793_x: 2, long_coord_name_1794_x: 2, long_coord_name_1795_x: 2, long_coord_name_1796_x: 2, long_coord_name_1797_x: 2, long_coord_name_1798_x: 2, long_coord_name_1799_x: 2, long_coord_name_179_x: 2, long_coord_name_17_x: 2, long_coord_name_1800_x: 2, long_coord_name_1801_x: 2, long_coord_name_1802_x: 2, long_coord_name_1803_x: 2, long_coord_name_1804_x: 2, long_coord_name_1805_x: 2, long_coord_name_1806_x: 2, long_coord_name_1807_x: 2, long_coord_name_1808_x: 2, long_coord_name_1809_x: 2, long_coord_name_180_x: 2, long_coord_name_1810_x: 2, long_coord_name_1811_x: 2, long_coord_name_1812_x: 2, long_coord_name_1813_x: 2, long_coord_name_1814_x: 2, long_coord_name_1815_x: 2, long_coord_name_1816_x: 2, long_coord_name_1817_x: 2, long_coord_name_1818_x: 2, long_coord_name_1819_x: 2, long_coord_name_181_x: 2, long_coord_name_1820_x: 2, long_coord_name_1821_x: 2, long_coord_name_1822_x: 2, long_coord_name_1823_x: 2, long_coord_name_1824_x: 2, long_coord_name_1825_x: 2, long_coord_name_1826_x: 2, long_coord_name_1827_x: 2, long_coord_name_1828_x: 2, long_coord_name_1829_x: 2, long_coord_name_182_x: 2, long_coord_name_1830_x: 2, long_coord_name_1831_x: 2, long_coord_name_1832_x: 2, long_coord_name_1833_x: 2, long_coord_name_1834_x: 2, long_coord_name_1835_x: 2, long_coord_name_1836_x: 2, long_coord_name_1837_x: 2, long_coord_name_1838_x: 2, long_coord_name_1839_x: 2, long_coord_name_183_x: 2, long_coord_name_1840_x: 2, long_coord_name_1841_x: 2, long_coord_name_1842_x: 2, long_coord_name_1843_x: 2, long_coord_name_1844_x: 2, long_coord_name_1845_x: 2, long_coord_name_1846_x: 2, long_coord_name_1847_x: 2, long_coord_name_1848_x: 2, long_coord_name_1849_x: 2, long_coord_name_184_x: 2, long_coord_name_1850_x: 2, long_coord_name_1851_x: 2, long_coord_name_1852_x: 2, long_coord_name_1853_x: 2, long_coord_name_1854_x: 2, long_coord_name_1855_x: 2, long_coord_name_1856_x: 2, long_coord_name_1857_x: 2, long_coord_name_1858_x: 2, long_coord_name_1859_x: 2, long_coord_name_185_x: 2, long_coord_name_1860_x: 2, long_coord_name_1861_x: 2, long_coord_name_1862_x: 2, long_coord_name_1863_x: 2, long_coord_name_1864_x: 2, long_coord_name_1865_x: 2, long_coord_name_1866_x: 2, long_coord_name_1867_x: 2, long_coord_name_1868_x: 2, long_coord_name_1869_x: 2, long_coord_name_186_x: 2, long_coord_name_1870_x: 2, long_coord_name_1871_x: 2, long_coord_name_1872_x: 2, long_coord_name_1873_x: 2, long_coord_name_1874_x: 2, long_coord_name_1875_x: 2, long_coord_name_1876_x: 2, long_coord_name_1877_x: 2, long_coord_name_1878_x: 2, long_coord_name_1879_x: 2, long_coord_name_187_x: 2, long_coord_name_1880_x: 2, long_coord_name_1881_x: 2, long_coord_name_1882_x: 2, long_coord_name_1883_x: 2, long_coord_name_1884_x: 2, long_coord_name_1885_x: 2, long_coord_name_1886_x: 2, long_coord_name_1887_x: 2, long_coord_name_1888_x: 2, long_coord_name_1889_x: 2, long_coord_name_188_x: 2, long_coord_name_1890_x: 2, long_coord_name_1891_x: 2, long_coord_name_1892_x: 2, long_coord_name_1893_x: 2, long_coord_name_1894_x: 2, long_coord_name_1895_x: 2, long_coord_name_1896_x: 2, long_coord_name_1897_x: 2, long_coord_name_1898_x: 2, long_coord_name_1899_x: 2, long_coord_name_189_x: 2, long_coord_name_18_x: 2, long_coord_name_1900_x: 2, long_coord_name_1901_x: 2, long_coord_name_1902_x: 2, long_coord_name_1903_x: 2, long_coord_name_1904_x: 2, long_coord_name_1905_x: 2, long_coord_name_1906_x: 2, long_coord_name_1907_x: 2, long_coord_name_1908_x: 2, long_coord_name_1909_x: 2, long_coord_name_190_x: 2, long_coord_name_1910_x: 2, long_coord_name_1911_x: 2, long_coord_name_1912_x: 2, long_coord_name_1913_x: 2, long_coord_name_1914_x: 2, long_coord_name_1915_x: 2, long_coord_name_1916_x: 2, long_coord_name_1917_x: 2, long_coord_name_1918_x: 2, long_coord_name_1919_x: 2, long_coord_name_191_x: 2, long_coord_name_1920_x: 2, long_coord_name_1921_x: 2, long_coord_name_1922_x: 2, long_coord_name_1923_x: 2, long_coord_name_1924_x: 2, long_coord_name_1925_x: 2, long_coord_name_1926_x: 2, long_coord_name_1927_x: 2, long_coord_name_1928_x: 2, long_coord_name_1929_x: 2, long_coord_name_192_x: 2, long_coord_name_1930_x: 2, long_coord_name_1931_x: 2, long_coord_name_1932_x: 2, long_coord_name_1933_x: 2, long_coord_name_1934_x: 2, long_coord_name_1935_x: 2, long_coord_name_1936_x: 2, long_coord_name_1937_x: 2, long_coord_name_1938_x: 2, long_coord_name_1939_x: 2, long_coord_name_193_x: 2, long_coord_name_1940_x: 2, long_coord_name_1941_x: 2, long_coord_name_1942_x: 2, long_coord_name_1943_x: 2, long_coord_name_1944_x: 2, long_coord_name_1945_x: 2, long_coord_name_1946_x: 2, long_coord_name_1947_x: 2, long_coord_name_1948_x: 2, long_coord_name_1949_x: 2, long_coord_name_194_x: 2, long_coord_name_1950_x: 2, long_coord_name_1951_x: 2, long_coord_name_1952_x: 2, long_coord_name_1953_x: 2, long_coord_name_1954_x: 2, long_coord_name_1955_x: 2, long_coord_name_1956_x: 2, long_coord_name_1957_x: 2, long_coord_name_1958_x: 2, long_coord_name_1959_x: 2, long_coord_name_195_x: 2, long_coord_name_1960_x: 2, long_coord_name_1961_x: 2, long_coord_name_1962_x: 2, long_coord_name_1963_x: 2, long_coord_name_1964_x: 2, long_coord_name_1965_x: 2, long_coord_name_1966_x: 2, long_coord_name_1967_x: 2, long_coord_name_1968_x: 2, long_coord_name_1969_x: 2, long_coord_name_196_x: 2, long_coord_name_1970_x: 2, long_coord_name_1971_x: 2, long_coord_name_1972_x: 2, long_coord_name_1973_x: 2, long_coord_name_1974_x: 2, long_coord_name_1975_x: 2, long_coord_name_1976_x: 2, long_coord_name_1977_x: 2, long_coord_name_1978_x: 2, long_coord_name_1979_x: 2, long_coord_name_197_x: 2, long_coord_name_1980_x: 2, long_coord_name_1981_x: 2, long_coord_name_1982_x: 2, long_coord_name_1983_x: 2, long_coord_name_1984_x: 2, long_coord_name_1985_x: 2, long_coord_name_1986_x: 2, long_coord_name_1987_x: 2, long_coord_name_1988_x: 2, long_coord_name_1989_x: 2, long_coord_name_198_x: 2, long_coord_name_1990_x: 2, long_coord_name_1991_x: 2, long_coord_name_1992_x: 2, long_coord_name_1993_x: 2, long_coord_name_1994_x: 2, long_coord_name_1995_x: 2, long_coord_name_1996_x: 2, long_coord_name_1997_x: 2, long_coord_name_1998_x: 2, long_coord_name_1999_x: 2, long_coord_name_199_x: 2, long_coord_name_19_x: 2, long_coord_name_1_x: 2, long_coord_name_200_x: 2, long_coord_name_201_x: 2, long_coord_name_202_x: 2, long_coord_name_203_x: 2, long_coord_name_204_x: 2, long_coord_name_205_x: 2, long_coord_name_206_x: 2, long_coord_name_207_x: 2, long_coord_name_208_x: 2, long_coord_name_209_x: 2, long_coord_name_20_x: 2, long_coord_name_210_x: 2, long_coord_name_211_x: 2, long_coord_name_212_x: 2, long_coord_name_213_x: 2, long_coord_name_214_x: 2, long_coord_name_215_x: 2, long_coord_name_216_x: 2, long_coord_name_217_x: 2, long_coord_name_218_x: 2, long_coord_name_219_x: 2, long_coord_name_21_x: 2, long_coord_name_220_x: 2, long_coord_name_221_x: 2, long_coord_name_222_x: 2, long_coord_name_223_x: 2, long_coord_name_224_x: 2, long_coord_name_225_x: 2, long_coord_name_226_x: 2, long_coord_name_227_x: 2, long_coord_name_228_x: 2, long_coord_name_229_x: 2, long_coord_name_22_x: 2, long_coord_name_230_x: 2, long_coord_name_231_x: 2, long_coord_name_232_x: 2, long_coord_name_233_x: 2, long_coord_name_234_x: 2, long_coord_name_235_x: 2, long_coord_name_236_x: 2, long_coord_name_237_x: 2, long_coord_name_238_x: 2, long_coord_name_239_x: 2, long_coord_name_23_x: 2, long_coord_name_240_x: 2, long_coord_name_241_x: 2, long_coord_name_242_x: 2, long_coord_name_243_x: 2, long_coord_name_244_x: 2, long_coord_name_245_x: 2, long_coord_name_246_x: 2, long_coord_name_247_x: 2, long_coord_name_248_x: 2, long_coord_name_249_x: 2, long_coord_name_24_x: 2, long_coord_name_250_x: 2, long_coord_name_251_x: 2, long_coord_name_252_x: 2, long_coord_name_253_x: 2, long_coord_name_254_x: 2, long_coord_name_255_x: 2, long_coord_name_256_x: 2, long_coord_name_257_x: 2, long_coord_name_258_x: 2, long_coord_name_259_x: 2, long_coord_name_25_x: 2, long_coord_name_260_x: 2, long_coord_name_261_x: 2, long_coord_name_262_x: 2, long_coord_name_263_x: 2, long_coord_name_264_x: 2, long_coord_name_265_x: 2, long_coord_name_266_x: 2, long_coord_name_267_x: 2, long_coord_name_268_x: 2, long_coord_name_269_x: 2, long_coord_name_26_x: 2, long_coord_name_270_x: 2, long_coord_name_271_x: 2, long_coord_name_272_x: 2, long_coord_name_273_x: 2, long_coord_name_274_x: 2, long_coord_name_275_x: 2, long_coord_name_276_x: 2, long_coord_name_277_x: 2, long_coord_name_278_x: 2, long_coord_name_279_x: 2, long_coord_name_27_x: 2, long_coord_name_280_x: 2, long_coord_name_281_x: 2, long_coord_name_282_x: 2, long_coord_name_283_x: 2, long_coord_name_284_x: 2, long_coord_name_285_x: 2, long_coord_name_286_x: 2, long_coord_name_287_x: 2, long_coord_name_288_x: 2, long_coord_name_289_x: 2, long_coord_name_28_x: 2, long_coord_name_290_x: 2, long_coord_name_291_x: 2, long_coord_name_292_x: 2, long_coord_name_293_x: 2, long_coord_name_294_x: 2, long_coord_name_295_x: 2, long_coord_name_296_x: 2, long_coord_name_297_x: 2, long_coord_name_298_x: 2, long_coord_name_299_x: 2, long_coord_name_29_x: 2, long_coord_name_2_x: 2, long_coord_name_300_x: 2, long_coord_name_301_x: 2, long_coord_name_302_x: 2, long_coord_name_303_x: 2, long_coord_name_304_x: 2, long_coord_name_305_x: 2, long_coord_name_306_x: 2, long_coord_name_307_x: 2, long_coord_name_308_x: 2, long_coord_name_309_x: 2, long_coord_name_30_x: 2, long_coord_name_310_x: 2, long_coord_name_311_x: 2, long_coord_name_312_x: 2, long_coord_name_313_x: 2, long_coord_name_314_x: 2, long_coord_name_315_x: 2, long_coord_name_316_x: 2, long_coord_name_317_x: 2, long_coord_name_318_x: 2, long_coord_name_319_x: 2, long_coord_name_31_x: 2, long_coord_name_320_x: 2, long_coord_name_321_x: 2, long_coord_name_322_x: 2, long_coord_name_323_x: 2, long_coord_name_324_x: 2, long_coord_name_325_x: 2, long_coord_name_326_x: 2, long_coord_name_327_x: 2, long_coord_name_328_x: 2, long_coord_name_329_x: 2, long_coord_name_32_x: 2, long_coord_name_330_x: 2, long_coord_name_331_x: 2, long_coord_name_332_x: 2, long_coord_name_333_x: 2, long_coord_name_334_x: 2, long_coord_name_335_x: 2, long_coord_name_336_x: 2, long_coord_name_337_x: 2, long_coord_name_338_x: 2, long_coord_name_339_x: 2, long_coord_name_33_x: 2, long_coord_name_340_x: 2, long_coord_name_341_x: 2, long_coord_name_342_x: 2, long_coord_name_343_x: 2, long_coord_name_344_x: 2, long_coord_name_345_x: 2, long_coord_name_346_x: 2, long_coord_name_347_x: 2, long_coord_name_348_x: 2, long_coord_name_349_x: 2, long_coord_name_34_x: 2, long_coord_name_350_x: 2, long_coord_name_351_x: 2, long_coord_name_352_x: 2, long_coord_name_353_x: 2, long_coord_name_354_x: 2, long_coord_name_355_x: 2, long_coord_name_356_x: 2, long_coord_name_357_x: 2, long_coord_name_358_x: 2, long_coord_name_359_x: 2, long_coord_name_35_x: 2, long_coord_name_360_x: 2, long_coord_name_361_x: 2, long_coord_name_362_x: 2, long_coord_name_363_x: 2, long_coord_name_364_x: 2, long_coord_name_365_x: 2, long_coord_name_366_x: 2, long_coord_name_367_x: 2, long_coord_name_368_x: 2, long_coord_name_369_x: 2, long_coord_name_36_x: 2, long_coord_name_370_x: 2, long_coord_name_371_x: 2, long_coord_name_372_x: 2, long_coord_name_373_x: 2, long_coord_name_374_x: 2, long_coord_name_375_x: 2, long_coord_name_376_x: 2, long_coord_name_377_x: 2, long_coord_name_378_x: 2, long_coord_name_379_x: 2, long_coord_name_37_x: 2, long_coord_name_380_x: 2, long_coord_name_381_x: 2, long_coord_name_382_x: 2, long_coord_name_383_x: 2, long_coord_name_384_x: 2, long_coord_name_385_x: 2, long_coord_name_386_x: 2, long_coord_name_387_x: 2, long_coord_name_388_x: 2, long_coord_name_389_x: 2, long_coord_name_38_x: 2, long_coord_name_390_x: 2, long_coord_name_391_x: 2, long_coord_name_392_x: 2, long_coord_name_393_x: 2, long_coord_name_394_x: 2, long_coord_name_395_x: 2, long_coord_name_396_x: 2, long_coord_name_397_x: 2, long_coord_name_398_x: 2, long_coord_name_399_x: 2, long_coord_name_39_x: 2, long_coord_name_3_x: 2, long_coord_name_400_x: 2, long_coord_name_401_x: 2, long_coord_name_402_x: 2, long_coord_name_403_x: 2, long_coord_name_404_x: 2, long_coord_name_405_x: 2, long_coord_name_406_x: 2, long_coord_name_407_x: 2, long_coord_name_408_x: 2, long_coord_name_409_x: 2, long_coord_name_40_x: 2, long_coord_name_410_x: 2, long_coord_name_411_x: 2, long_coord_name_412_x: 2, long_coord_name_413_x: 2, long_coord_name_414_x: 2, long_coord_name_415_x: 2, long_coord_name_416_x: 2, long_coord_name_417_x: 2, long_coord_name_418_x: 2, long_coord_name_419_x: 2, long_coord_name_41_x: 2, long_coord_name_420_x: 2, long_coord_name_421_x: 2, long_coord_name_422_x: 2, long_coord_name_423_x: 2, long_coord_name_424_x: 2, long_coord_name_425_x: 2, long_coord_name_426_x: 2, long_coord_name_427_x: 2, long_coord_name_428_x: 2, long_coord_name_429_x: 2, long_coord_name_42_x: 2, long_coord_name_430_x: 2, long_coord_name_431_x: 2, long_coord_name_432_x: 2, long_coord_name_433_x: 2, long_coord_name_434_x: 2, long_coord_name_435_x: 2, long_coord_name_436_x: 2, long_coord_name_437_x: 2, long_coord_name_438_x: 2, long_coord_name_439_x: 2, long_coord_name_43_x: 2, long_coord_name_440_x: 2, long_coord_name_441_x: 2, long_coord_name_442_x: 2, long_coord_name_443_x: 2, long_coord_name_444_x: 2, long_coord_name_445_x: 2, long_coord_name_446_x: 2, long_coord_name_447_x: 2, long_coord_name_448_x: 2, long_coord_name_449_x: 2, long_coord_name_44_x: 2, long_coord_name_450_x: 2, long_coord_name_451_x: 2, long_coord_name_452_x: 2, long_coord_name_453_x: 2, long_coord_name_454_x: 2, long_coord_name_455_x: 2, long_coord_name_456_x: 2, long_coord_name_457_x: 2, long_coord_name_458_x: 2, long_coord_name_459_x: 2, long_coord_name_45_x: 2, long_coord_name_460_x: 2, long_coord_name_461_x: 2, long_coord_name_462_x: 2, long_coord_name_463_x: 2, long_coord_name_464_x: 2, long_coord_name_465_x: 2, long_coord_name_466_x: 2, long_coord_name_467_x: 2, long_coord_name_468_x: 2, long_coord_name_469_x: 2, long_coord_name_46_x: 2, long_coord_name_470_x: 2, long_coord_name_471_x: 2, long_coord_name_472_x: 2, long_coord_name_473_x: 2, long_coord_name_474_x: 2, long_coord_name_475_x: 2, long_coord_name_476_x: 2, long_coord_name_477_x: 2, long_coord_name_478_x: 2, long_coord_name_479_x: 2, long_coord_name_47_x: 2, long_coord_name_480_x: 2, long_coord_name_481_x: 2, long_coord_name_482_x: 2, long_coord_name_483_x: 2, long_coord_name_484_x: 2, long_coord_name_485_x: 2, long_coord_name_486_x: 2, long_coord_name_487_x: 2, long_coord_name_488_x: 2, long_coord_name_489_x: 2, long_coord_name_48_x: 2, long_coord_name_490_x: 2, long_coord_name_491_x: 2, long_coord_name_492_x: 2, long_coord_name_493_x: 2, long_coord_name_494_x: 2, long_coord_name_495_x: 2, long_coord_name_496_x: 2, long_coord_name_497_x: 2, long_coord_name_498_x: 2, long_coord_name_499_x: 2, long_coord_name_49_x: 2, long_coord_name_4_x: 2, long_coord_name_500_x: 2, long_coord_name_501_x: 2, long_coord_name_502_x: 2, long_coord_name_503_x: 2, long_coord_name_504_x: 2, long_coord_name_505_x: 2, long_coord_name_506_x: 2, long_coord_name_507_x: 2, long_coord_name_508_x: 2, long_coord_name_509_x: 2, long_coord_name_50_x: 2, long_coord_name_510_x: 2, long_coord_name_511_x: 2, long_coord_name_512_x: 2, long_coord_name_513_x: 2, long_coord_name_514_x: 2, long_coord_name_515_x: 2, long_coord_name_516_x: 2, long_coord_name_517_x: 2, long_coord_name_518_x: 2, long_coord_name_519_x: 2, long_coord_name_51_x: 2, long_coord_name_520_x: 2, long_coord_name_521_x: 2, long_coord_name_522_x: 2, long_coord_name_523_x: 2, long_coord_name_524_x: 2, long_coord_name_525_x: 2, long_coord_name_526_x: 2, long_coord_name_527_x: 2, long_coord_name_528_x: 2, long_coord_name_529_x: 2, long_coord_name_52_x: 2, long_coord_name_530_x: 2, long_coord_name_531_x: 2, long_coord_name_532_x: 2, long_coord_name_533_x: 2, long_coord_name_534_x: 2, long_coord_name_535_x: 2, long_coord_name_536_x: 2, long_coord_name_537_x: 2, long_coord_name_538_x: 2, long_coord_name_539_x: 2, long_coord_name_53_x: 2, long_coord_name_540_x: 2, long_coord_name_541_x: 2, long_coord_name_542_x: 2, long_coord_name_543_x: 2, long_coord_name_544_x: 2, long_coord_name_545_x: 2, long_coord_name_546_x: 2, long_coord_name_547_x: 2, long_coord_name_548_x: 2, long_coord_name_549_x: 2, long_coord_name_54_x: 2, long_coord_name_550_x: 2, long_coord_name_551_x: 2, long_coord_name_552_x: 2, long_coord_name_553_x: 2, long_coord_name_554_x: 2, long_coord_name_555_x: 2, long_coord_name_556_x: 2, long_coord_name_557_x: 2, long_coord_name_558_x: 2, long_coord_name_559_x: 2, long_coord_name_55_x: 2, long_coord_name_560_x: 2, long_coord_name_561_x: 2, long_coord_name_562_x: 2, long_coord_name_563_x: 2, long_coord_name_564_x: 2, long_coord_name_565_x: 2, long_coord_name_566_x: 2, long_coord_name_567_x: 2, long_coord_name_568_x: 2, long_coord_name_569_x: 2, long_coord_name_56_x: 2, long_coord_name_570_x: 2, long_coord_name_571_x: 2, long_coord_name_572_x: 2, long_coord_name_573_x: 2, long_coord_name_574_x: 2, long_coord_name_575_x: 2, long_coord_name_576_x: 2, long_coord_name_577_x: 2, long_coord_name_578_x: 2, long_coord_name_579_x: 2, long_coord_name_57_x: 2, long_coord_name_580_x: 2, long_coord_name_581_x: 2, long_coord_name_582_x: 2, long_coord_name_583_x: 2, long_coord_name_584_x: 2, long_coord_name_585_x: 2, long_coord_name_586_x: 2, long_coord_name_587_x: 2, long_coord_name_588_x: 2, long_coord_name_589_x: 2, long_coord_name_58_x: 2, long_coord_name_590_x: 2, long_coord_name_591_x: 2, long_coord_name_592_x: 2, long_coord_name_593_x: 2, long_coord_name_594_x: 2, long_coord_name_595_x: 2, long_coord_name_596_x: 2, long_coord_name_597_x: 2, long_coord_name_598_x: 2, long_coord_name_599_x: 2, long_coord_name_59_x: 2, long_coord_name_5_x: 2, long_coord_name_600_x: 2, long_coord_name_601_x: 2, long_coord_name_602_x: 2, long_coord_name_603_x: 2, long_coord_name_604_x: 2, long_coord_name_605_x: 2, long_coord_name_606_x: 2, long_coord_name_607_x: 2, long_coord_name_608_x: 2, long_coord_name_609_x: 2, long_coord_name_60_x: 2, long_coord_name_610_x: 2, long_coord_name_611_x: 2, long_coord_name_612_x: 2, long_coord_name_613_x: 2, long_coord_name_614_x: 2, long_coord_name_615_x: 2, long_coord_name_616_x: 2, long_coord_name_617_x: 2, long_coord_name_618_x: 2, long_coord_name_619_x: 2, long_coord_name_61_x: 2, long_coord_name_620_x: 2, long_coord_name_621_x: 2, long_coord_name_622_x: 2, long_coord_name_623_x: 2, long_coord_name_624_x: 2, long_coord_name_625_x: 2, long_coord_name_626_x: 2, long_coord_name_627_x: 2, long_coord_name_628_x: 2, long_coord_name_629_x: 2, long_coord_name_62_x: 2, long_coord_name_630_x: 2, long_coord_name_631_x: 2, long_coord_name_632_x: 2, long_coord_name_633_x: 2, long_coord_name_634_x: 2, long_coord_name_635_x: 2, long_coord_name_636_x: 2, long_coord_name_637_x: 2, long_coord_name_638_x: 2, long_coord_name_639_x: 2, long_coord_name_63_x: 2, long_coord_name_640_x: 2, long_coord_name_641_x: 2, long_coord_name_642_x: 2, long_coord_name_643_x: 2, long_coord_name_644_x: 2, long_coord_name_645_x: 2, long_coord_name_646_x: 2, long_coord_name_647_x: 2, long_coord_name_648_x: 2, long_coord_name_649_x: 2, long_coord_name_64_x: 2, long_coord_name_650_x: 2, long_coord_name_651_x: 2, long_coord_name_652_x: 2, long_coord_name_653_x: 2, long_coord_name_654_x: 2, long_coord_name_655_x: 2, long_coord_name_656_x: 2, long_coord_name_657_x: 2, long_coord_name_658_x: 2, long_coord_name_659_x: 2, long_coord_name_65_x: 2, long_coord_name_660_x: 2, long_coord_name_661_x: 2, long_coord_name_662_x: 2, long_coord_name_663_x: 2, long_coord_name_664_x: 2, long_coord_name_665_x: 2, long_coord_name_666_x: 2, long_coord_name_667_x: 2, long_coord_name_668_x: 2, long_coord_name_669_x: 2, long_coord_name_66_x: 2, long_coord_name_670_x: 2, long_coord_name_671_x: 2, long_coord_name_672_x: 2, long_coord_name_673_x: 2, long_coord_name_674_x: 2, long_coord_name_675_x: 2, long_coord_name_676_x: 2, long_coord_name_677_x: 2, long_coord_name_678_x: 2, long_coord_name_679_x: 2, long_coord_name_67_x: 2, long_coord_name_680_x: 2, long_coord_name_681_x: 2, long_coord_name_682_x: 2, long_coord_name_683_x: 2, long_coord_name_684_x: 2, long_coord_name_685_x: 2, long_coord_name_686_x: 2, long_coord_name_687_x: 2, long_coord_name_688_x: 2, long_coord_name_689_x: 2, long_coord_name_68_x: 2, long_coord_name_690_x: 2, long_coord_name_691_x: 2, long_coord_name_692_x: 2, long_coord_name_693_x: 2, long_coord_name_694_x: 2, long_coord_name_695_x: 2, long_coord_name_696_x: 2, long_coord_name_697_x: 2, long_coord_name_698_x: 2, long_coord_name_699_x: 2, long_coord_name_69_x: 2, long_coord_name_6_x: 2, long_coord_name_700_x: 2, long_coord_name_701_x: 2, long_coord_name_702_x: 2, long_coord_name_703_x: 2, long_coord_name_704_x: 2, long_coord_name_705_x: 2, long_coord_name_706_x: 2, long_coord_name_707_x: 2, long_coord_name_708_x: 2, long_coord_name_709_x: 2, long_coord_name_70_x: 2, long_coord_name_710_x: 2, long_coord_name_711_x: 2, long_coord_name_712_x: 2, long_coord_name_713_x: 2, long_coord_name_714_x: 2, long_coord_name_715_x: 2, long_coord_name_716_x: 2, long_coord_name_717_x: 2, long_coord_name_718_x: 2, long_coord_name_719_x: 2, long_coord_name_71_x: 2, long_coord_name_720_x: 2, long_coord_name_721_x: 2, long_coord_name_722_x: 2, long_coord_name_723_x: 2, long_coord_name_724_x: 2, long_coord_name_725_x: 2, long_coord_name_726_x: 2, long_coord_name_727_x: 2, long_coord_name_728_x: 2, long_coord_name_729_x: 2, long_coord_name_72_x: 2, long_coord_name_730_x: 2, long_coord_name_731_x: 2, long_coord_name_732_x: 2, long_coord_name_733_x: 2, long_coord_name_734_x: 2, long_coord_name_735_x: 2, long_coord_name_736_x: 2, long_coord_name_737_x: 2, long_coord_name_738_x: 2, long_coord_name_739_x: 2, long_coord_name_73_x: 2, long_coord_name_740_x: 2, long_coord_name_741_x: 2, long_coord_name_742_x: 2, long_coord_name_743_x: 2, long_coord_name_744_x: 2, long_coord_name_745_x: 2, long_coord_name_746_x: 2, long_coord_name_747_x: 2, long_coord_name_748_x: 2, long_coord_name_749_x: 2, long_coord_name_74_x: 2, long_coord_name_750_x: 2, long_coord_name_751_x: 2, long_coord_name_752_x: 2, long_coord_name_753_x: 2, long_coord_name_754_x: 2, long_coord_name_755_x: 2, long_coord_name_756_x: 2, long_coord_name_757_x: 2, long_coord_name_758_x: 2, long_coord_name_759_x: 2, long_coord_name_75_x: 2, long_coord_name_760_x: 2, long_coord_name_761_x: 2, long_coord_name_762_x: 2, long_coord_name_763_x: 2, long_coord_name_764_x: 2, long_coord_name_765_x: 2, long_coord_name_766_x: 2, long_coord_name_767_x: 2, long_coord_name_768_x: 2, long_coord_name_769_x: 2, long_coord_name_76_x: 2, long_coord_name_770_x: 2, long_coord_name_771_x: 2, long_coord_name_772_x: 2, long_coord_name_773_x: 2, long_coord_name_774_x: 2, long_coord_name_775_x: 2, long_coord_name_776_x: 2, long_coord_name_777_x: 2, long_coord_name_778_x: 2, long_coord_name_779_x: 2, long_coord_name_77_x: 2, long_coord_name_780_x: 2, long_coord_name_781_x: 2, long_coord_name_782_x: 2, long_coord_name_783_x: 2, long_coord_name_784_x: 2, long_coord_name_785_x: 2, long_coord_name_786_x: 2, long_coord_name_787_x: 2, long_coord_name_788_x: 2, long_coord_name_789_x: 2, long_coord_name_78_x: 2, long_coord_name_790_x: 2, long_coord_name_791_x: 2, long_coord_name_792_x: 2, long_coord_name_793_x: 2, long_coord_name_794_x: 2, long_coord_name_795_x: 2, long_coord_name_796_x: 2, long_coord_name_797_x: 2, long_coord_name_798_x: 2, long_coord_name_799_x: 2, long_coord_name_79_x: 2, long_coord_name_7_x: 2, long_coord_name_800_x: 2, long_coord_name_801_x: 2, long_coord_name_802_x: 2, long_coord_name_803_x: 2, long_coord_name_804_x: 2, long_coord_name_805_x: 2, long_coord_name_806_x: 2, long_coord_name_807_x: 2, long_coord_name_808_x: 2, long_coord_name_809_x: 2, long_coord_name_80_x: 2, long_coord_name_810_x: 2, long_coord_name_811_x: 2, long_coord_name_812_x: 2, long_coord_name_813_x: 2, long_coord_name_814_x: 2, long_coord_name_815_x: 2, long_coord_name_816_x: 2, long_coord_name_817_x: 2, long_coord_name_818_x: 2, long_coord_name_819_x: 2, long_coord_name_81_x: 2, long_coord_name_820_x: 2, long_coord_name_821_x: 2, long_coord_name_822_x: 2, long_coord_name_823_x: 2, long_coord_name_824_x: 2, long_coord_name_825_x: 2, long_coord_name_826_x: 2, long_coord_name_827_x: 2, long_coord_name_828_x: 2, long_coord_name_829_x: 2, long_coord_name_82_x: 2, long_coord_name_830_x: 2, long_coord_name_831_x: 2, long_coord_name_832_x: 2, long_coord_name_833_x: 2, long_coord_name_834_x: 2, long_coord_name_835_x: 2, long_coord_name_836_x: 2, long_coord_name_837_x: 2, long_coord_name_838_x: 2, long_coord_name_839_x: 2, long_coord_name_83_x: 2, long_coord_name_840_x: 2, long_coord_name_841_x: 2, long_coord_name_842_x: 2, long_coord_name_843_x: 2, long_coord_name_844_x: 2, long_coord_name_845_x: 2, long_coord_name_846_x: 2, long_coord_name_847_x: 2, long_coord_name_848_x: 2, long_coord_name_849_x: 2, long_coord_name_84_x: 2, long_coord_name_850_x: 2, long_coord_name_851_x: 2, long_coord_name_852_x: 2, long_coord_name_853_x: 2, long_coord_name_854_x: 2, long_coord_name_855_x: 2, long_coord_name_856_x: 2, long_coord_name_857_x: 2, long_coord_name_858_x: 2, long_coord_name_859_x: 2, long_coord_name_85_x: 2, long_coord_name_860_x: 2, long_coord_name_861_x: 2, long_coord_name_862_x: 2, long_coord_name_863_x: 2, long_coord_name_864_x: 2, long_coord_name_865_x: 2, long_coord_name_866_x: 2, long_coord_name_867_x: 2, long_coord_name_868_x: 2, long_coord_name_869_x: 2, long_coord_name_86_x: 2, long_coord_name_870_x: 2, long_coord_name_871_x: 2, long_coord_name_872_x: 2, long_coord_name_873_x: 2, long_coord_name_874_x: 2, long_coord_name_875_x: 2, long_coord_name_876_x: 2, long_coord_name_877_x: 2, long_coord_name_878_x: 2, long_coord_name_879_x: 2, long_coord_name_87_x: 2, long_coord_name_880_x: 2, long_coord_name_881_x: 2, long_coord_name_882_x: 2, long_coord_name_883_x: 2, long_coord_name_884_x: 2, long_coord_name_885_x: 2, long_coord_name_886_x: 2, long_coord_name_887_x: 2, long_coord_name_888_x: 2, long_coord_name_889_x: 2, long_coord_name_88_x: 2, long_coord_name_890_x: 2, long_coord_name_891_x: 2, long_coord_name_892_x: 2, long_coord_name_893_x: 2, long_coord_name_894_x: 2, long_coord_name_895_x: 2, long_coord_name_896_x: 2, long_coord_name_897_x: 2, long_coord_name_898_x: 2, long_coord_name_899_x: 2, long_coord_name_89_x: 2, long_coord_name_8_x: 2, long_coord_name_900_x: 2, long_coord_name_901_x: 2, long_coord_name_902_x: 2, long_coord_name_903_x: 2, long_coord_name_904_x: 2, long_coord_name_905_x: 2, long_coord_name_906_x: 2, long_coord_name_907_x: 2, long_coord_name_908_x: 2, long_coord_name_909_x: 2, long_coord_name_90_x: 2, long_coord_name_910_x: 2, long_coord_name_911_x: 2, long_coord_name_912_x: 2, long_coord_name_913_x: 2, long_coord_name_914_x: 2, long_coord_name_915_x: 2, long_coord_name_916_x: 2, long_coord_name_917_x: 2, long_coord_name_918_x: 2, long_coord_name_919_x: 2, long_coord_name_91_x: 2, long_coord_name_920_x: 2, long_coord_name_921_x: 2, long_coord_name_922_x: 2, long_coord_name_923_x: 2, long_coord_name_924_x: 2, long_coord_name_925_x: 2, long_coord_name_926_x: 2, long_coord_name_927_x: 2, long_coord_name_928_x: 2, long_coord_name_929_x: 2, long_coord_name_92_x: 2, long_coord_name_930_x: 2, long_coord_name_931_x: 2, long_coord_name_932_x: 2, long_coord_name_933_x: 2, long_coord_name_934_x: 2, long_coord_name_935_x: 2, long_coord_name_936_x: 2, long_coord_name_937_x: 2, long_coord_name_938_x: 2, long_coord_name_939_x: 2, long_coord_name_93_x: 2, long_coord_name_940_x: 2, long_coord_name_941_x: 2, long_coord_name_942_x: 2, long_coord_name_943_x: 2, long_coord_name_944_x: 2, long_coord_name_945_x: 2, long_coord_name_946_x: 2, long_coord_name_947_x: 2, long_coord_name_948_x: 2, long_coord_name_949_x: 2, long_coord_name_94_x: 2, long_coord_name_950_x: 2, long_coord_name_951_x: 2, long_coord_name_952_x: 2, long_coord_name_953_x: 2, long_coord_name_954_x: 2, long_coord_name_955_x: 2, long_coord_name_956_x: 2, long_coord_name_957_x: 2, long_coord_name_958_x: 2, long_coord_name_959_x: 2, long_coord_name_95_x: 2, long_coord_name_960_x: 2, long_coord_name_961_x: 2, long_coord_name_962_x: 2, long_coord_name_963_x: 2, long_coord_name_964_x: 2, long_coord_name_965_x: 2, long_coord_name_966_x: 2, long_coord_name_967_x: 2, long_coord_name_968_x: 2, long_coord_name_969_x: 2, long_coord_name_96_x: 2, long_coord_name_970_x: 2, long_coord_name_971_x: 2, long_coord_name_972_x: 2, long_coord_name_973_x: 2, long_coord_name_974_x: 2, long_coord_name_975_x: 2, long_coord_name_976_x: 2, long_coord_name_977_x: 2, long_coord_name_978_x: 2, long_coord_name_979_x: 2, long_coord_name_97_x: 2, long_coord_name_980_x: 2, long_coord_name_981_x: 2, long_coord_name_982_x: 2, long_coord_name_983_x: 2, long_coord_name_984_x: 2, long_coord_name_985_x: 2, long_coord_name_986_x: 2, long_coord_name_987_x: 2, long_coord_name_988_x: 2, long_coord_name_989_x: 2, long_coord_name_98_x: 2, long_coord_name_990_x: 2, long_coord_name_991_x: 2, long_coord_name_992_x: 2, long_coord_name_993_x: 2, long_coord_name_994_x: 2, long_coord_name_995_x: 2, long_coord_name_996_x: 2, long_coord_name_997_x: 2, long_coord_name_998_x: 2, long_coord_name_999_x: 2, long_coord_name_99_x: 2, long_coord_name_9_x: 2) Coordinates: (12/2000) * long_coord_name_0_x (long_coord_name_0_x) int32 0 1 * long_coord_name_1_x (long_coord_name_1_x) int32 0 1 * long_coord_name_2_x (long_coord_name_2_x) int32 0 1 * long_coord_name_3_x (long_coord_name_3_x) int32 0 1 * long_coord_name_4_x (long_coord_name_4_x) int32 0 1 * long_coord_name_5_x (long_coord_name_5_x) int32 0 1 ... * long_coord_name_1994_x (long_coord_name_1994_x) int32 0 1 * long_coord_name_1995_x (long_coord_name_1995_x) int32 0 1 * long_coord_name_1996_x (long_coord_name_1996_x) int32 0 1 * long_coord_name_1997_x (long_coord_name_1997_x) int32 0 1 * long_coord_name_1998_x (long_coord_name_1998_x) int32 0 1 * long_coord_name_1999_x (long_coord_name_1999_x) int32 0 1 Data variables: (12/2000) long_variable_name_0 (long_coord_name_0_x) int32 3 4 long_variable_name_1 (long_coord_name_1_x) int32 3 4 long_variable_name_2 (long_coord_name_2_x) int32 3 4 long_variable_name_3 (long_coord_name_3_x) int32 3 4 long_variable_name_4 (long_coord_name_4_x) int32 3 4 long_variable_name_5 (long_coord_name_5_x) int32 3 4 ... long_variable_name_1994 (long_coord_name_1994_x) int32 3 4 long_variable_name_1995 (long_coord_name_1995_x) int32 3 4 long_variable_name_1996 (long_coord_name_1996_x) int32 3 4 long_variable_name_1997 (long_coord_name_1997_x) int32 3 4 long_variable_name_1998 (long_coord_name_1998_x) int32 3 4 long_variable_name_1999 (long_coord_name_1999_x) int32 3 4 Attributes: (12/2000) attr_0: 2 attr_1: 2 attr_2: 2 attr_3: 2 attr_4: 2 attr_5: 2 ... attr_1994: 2 attr_1995: 2 attr_1996: 2 attr_1997: 2 attr_1998: 2 attr_1999: 2

Anything else we need to know?:

Environment:

Output of <tt>xr.show_versions()</tt> INSTALLED VERSIONS ------------------ commit: None python: 3.8.8 | packaged by conda-forge | (default, Feb 20 2021, 15:50:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 byteorder: little LC_ALL: None LANG: en libhdf5: 1.10.6 libnetcdf: None xarray: 0.18.2 pandas: 1.2.4 numpy: 1.20.3 scipy: 1.6.3 netCDF4: None pydap: None h5netcdf: None h5py: 3.2.1 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2021.05.0 distributed: 2021.05.0 matplotlib: 3.4.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 49.6.0.post20210108 pip: 21.1.2 conda: 4.10.1 pytest: 6.2.4 IPython: 7.24.1 sphinx: 4.0.2
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/5546/reactions",
    "total_count": 1,
    "+1": 1,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
1042698589 I_kwDOAMm_X84-JlFd 5928 Relax GitHub Actions first time contributor approval? Illviljan 14371165 closed 0     2 2021-11-02T18:45:16Z 2021-11-02T21:44:54Z 2021-11-02T21:44:54Z MEMBER      

A while back GitHub made it so that new contributors cannot trigger GitHub Actions workflows and a maintainer has to hit "Approve and Run" every time they push a commit to their PR. This is rather annoying for both the contributor and the maintainer as the back and forth takes time.

It however seems possible to relax this constraint: https://twitter.com/metcalfc/status/1448414192285806592?t=maeChQZTSUh2Ph0YFk-hGA&s=19

Shall we relax this constraint?

ref: https://github.com/dask/community/issues/191

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/5928/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
778083748 MDU6SXNzdWU3NzgwODM3NDg= 4761 Dataset.interp drops boolean variables Illviljan 14371165 closed 0     0 2021-01-04T13:09:56Z 2021-05-13T15:28:15Z 2021-05-13T15:28:15Z MEMBER      

What happened: Dataset.interp silently drops boolean variables.

What you expected to happen: If I'm interpolating a group of variables I expect to get all of them back in the correct shape with relevant values in them.

If the variables are boolean or object arrays I don't expect it to do linear interpolation because it doesn't make sense but stepwise interpolation like nearest or zero order interpolation should be fine to expect.

Minimal Complete Verifiable Example:

```python import numpy as np a = np.arange(0, 5) b = np.core.defchararray.add("long_variable_name", a.astype(str)) coords = dict(time=da.array([0, 1])) data_vars = dict() for v in b: data_vars[v] = xr.DataArray( name=v, data=np.array([0, 1]).astype(bool), dims=["time"], coords=coords, ) ds1 = xr.Dataset(data_vars)

Print raw data:

print(ds1) Out[3]: <xarray.Dataset> Dimensions: (time: 2) Coordinates: * time (time) int32 0 1 Data variables: long_variable_name0 (time) bool False True long_variable_name1 (time) bool False True long_variable_name2 (time) bool False True long_variable_name3 (time) bool False True long_variable_name4 (time) bool False True

Interpolate:

ds1 = ds1.interp( time=da.array([0, 0.5, 1, 2]), assume_sorted=True, method="nearest", kwargs=dict(fill_value="extrapolate"), )

Print interpolated data:

<xarray.Dataset> Dimensions: (time: 4) Coordinates: * time (time) float64 0.0 0.5 1.0 2.0 Data variables: empty ```

Anything else we need to know?: ds.interp_likeuse ds.reindex in these cases which seems like a good choice in ds.interp as well. But I think that both ds.interp and ds.interp_like should fill by default with nearest value instead of np.nan because we're still requesting interpolation.

Environment:

Output of <tt>xr.show_versions()</tt> xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows libhdf5: 1.10.4 libnetcdf: None xarray: 0.16.2 pandas: 1.1.5 numpy: 1.17.5 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2020.12.0 distributed: 2020.12.0 matplotlib: 3.3.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 51.0.0.post20201207 pip: 20.3.3 conda: 4.9.2 pytest: 6.2.1 IPython: 7.19.0 sphinx: 3.4.0
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4761/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
775875024 MDU6SXNzdWU3NzU4NzUwMjQ= 4739 Slow initilization of dataset.interp Illviljan 14371165 closed 0     2 2020-12-29T12:46:05Z 2021-05-05T12:26:01Z 2021-05-05T12:26:01Z MEMBER      

What happened: When interpolating a dataset with >2000 dask variables a lot of time is spent in da.unifying_chunks because da.unifying_chunks forces all variables and coordinates to a dask array. xarray on the other hand forces coordinates to pd.Index even if the coordinates was dask.array when the dataset was first created.

What you expected to happen: If the coords of the dataset was initialized as dask arrays they should stay lazy.

Minimal Complete Verifiable Example:

```python import xarray as xr import numpy as np import dask.array as da

a = np.arange(0, 2000) b = np.core.defchararray.add("long_variable_name", a.astype(str)) coords = dict(time=da.array([0, 1])) data_vars = dict() for v in b: data_vars[v] = xr.DataArray( name=v, data=da.array([3, 4]), dims=["time"], coords=coords ) ds0 = xr.Dataset(data_vars) ds0 = ds0.interp( time=da.array([0, 0.5, 1]), assume_sorted=True, kwargs=dict(fill_value=None), ) ```

Anything else we need to know?: Some thoughts: * Why can't coordinates be lazy? * Can we use dask.dataframe.Index instead of pd.Index when creating IndexVariables? * There's no time saved converting to dask arrays in missing.interp_func. But some time could be saved if we could convert them to dask arrays in xr.Dataset.interp before the variable loop starts. * Can we still store the dask array in IndexVariable and use a to_dask_array()-method to quickly get it? * Initializing the dataarrays will still be slow though since it still has to force the dask array to pd.Index.

Environment:

Output of <tt>xr.show_versions()</tt> xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 libhdf5: 1.10.4 libnetcdf: None xarray: 0.16.2 pandas: 1.1.5 numpy: 1.17.5 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2020.12.0 distributed: 2020.12.0 matplotlib: 3.3.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 51.0.0.post20201207 pip: 20.3.3 conda: 4.9.2 pytest: 6.2.1 IPython: 7.19.0 sphinx: 3.4.0
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4739/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
792639470 MDU6SXNzdWU3OTI2Mzk0NzA= 4839 Coordinate attributes are dropped when interpolating datasets Illviljan 14371165 closed 0     3 2021-01-23T20:05:33Z 2021-04-27T07:00:08Z 2021-04-27T07:00:08Z MEMBER      

What happened: When I was interpolating datasets I noticed that the coordinate variables disappeared.

What you expected to happen: Coordinate attributes should be retained just like variables are.

Minimal Complete Verifiable Example:

```python import numpy as np import xarray as xr

names = np.core.defchararray.add("long_variable_name", np.arange(0, 2).astype(str)) coords = dict(time=np.array([0, 1])) data_vars = dict() for v in names: data_vars[v] = xr.Variable( "time", np.array([0, 1], dtype=int), attrs=dict(unit="kg") ) ds1 = xr.Dataset(data_vars=data_vars, coords=coords) ds1.attrs = { k: 2 for k in np.core.defchararray.add("attr_", np.arange(0, 3).astype(str)) } ds1.time.attrs.update(unit="s")

Print time:

ds1.time Out[115]: <xarray.DataArray 'time' (time: 2)> array([0, 1]) Coordinates: * time (time) int32 0 1 Attributes: unit: s

Interpolate:

ds1 = ds1.interp( time=np.array([0, 0.5, 1, 2]), assume_sorted=True, method="linear", kwargs=dict(fill_value="extrapolate"), )

Print interpolated time, units are lost:

ds1.time Out[117]: <xarray.DataArray 'time' (time: 4)> array([0. , 0.5, 1. , 2. ]) Coordinates: * time (time) float64 0.0 0.5 1.0 2. ```

Anything else we need to know?:

Environment:

Output of <tt>xr.show_versions()</tt> xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel byteorder: little libhdf5: 1.10.4 libnetcdf: None xarray: 0.16.2 pandas: 1.2.0 numpy: 1.17.5 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2020.12.0 distributed: 2020.12.0 matplotlib: 3.3.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 51.1.2.post20210112 pip: 20.3.3 conda: 4.9.2 pytest: 6.2.1 IPython: 7.19.0 sphinx: 3.4.3
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4839/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
791725552 MDU6SXNzdWU3OTE3MjU1NTI= 4838 Simplify adding custom backends Illviljan 14371165 closed 0     0 2021-01-22T06:02:53Z 2021-04-15T02:02:03Z 2021-04-15T02:02:03Z MEMBER      

Is your feature request related to a problem? Please describe. I've been working on opening custom hdf formats in xarray, reading up on the apiv2 it is currently only possible to declare a new external plugin in setup.py but that doesn't seem easy or intuitive to me.

Describe the solution you'd like Why can't we simply be allowed to add functions to the engine parameter? Example: ```python from custom_backend import engine

ds = xr.load_dataset(filename, engine=engine) ``` This seems like a small function change to me from my initial quick look because there's mainly a bunch of string checks in the normal case until we get to the registered backend functions, if we send in a function instead in the engine-parameter we can just bypass those checks.

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4838/reactions",
    "total_count": 2,
    "+1": 2,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
779938616 MDU6SXNzdWU3Nzk5Mzg2MTY= 4770 Interpolation always returns floats Illviljan 14371165 open 0     1 2021-01-06T03:16:43Z 2021-01-12T16:30:54Z   MEMBER      

What happened: When interpolating datasets integer arrays are forced to floats.

What you expected to happen: To retain the same dtype after interpolation.

Minimal Complete Verifiable Example:

```python import numpy as np import dask.array as da a = np.arange(0, 2) b = np.core.defchararray.add("long_variable_name", a.astype(str)) coords = dict(time=da.array([0, 1])) data_vars = dict() for v in b: data_vars[v] = xr.DataArray( name=v, data=da.array([0, 1], dtype=int), dims=["time"], coords=coords, ) ds1 = xr.Dataset(data_vars)

print(ds1) Out[35]: <xarray.Dataset> Dimensions: (time: 4) Coordinates: * time (time) float64 0.0 0.5 1.0 2.0 Data variables: long_variable_name0 (time) int32 dask.array<chunksize=(4,), meta=np.ndarray> long_variable_name1 (time) int32 dask.array<chunksize=(4,), meta=np.ndarray>

Interpolate:

ds1 = ds1.interp( time=da.array([0, 0.5, 1, 2]), assume_sorted=True, method="linear", kwargs=dict(fill_value="extrapolate"), )

dask array thinks it's an integer array:

print(ds1.long_variable_name0) Out[55]: <xarray.DataArray 'long_variable_name0' (time: 4)> dask.array<dask_aware_interpnd, shape=(4,), dtype=int32, chunksize=(4,), chunktype=numpy.ndarray> Coordinates: * time (time) float64 0.0 0.5 1.0 2.0

But once computed it turns out is a float:

print(ds1.long_variable_name0.compute()) Out[38]: <xarray.DataArray 'long_variable_name0' (time: 4)> array([0. , 0.5, 1. , 2. ]) Coordinates: * time (time) float64 0.0 0.5 1.0 2.0

```

Anything else we need to know?: An easy first step is to also force np.float_ in da.blockwise in missing.interp_func.

The more difficult way is to somehow be able to change back the dataarrays into the old dtype without affecting performance. I did a test simply adding .astype()to the returned value in missing.interp and it doubled the calculation time.

I was thinking the conversion to floats in scipy could be avoided altogether by adding a (non-)public option to ignore any dtype checks and just let the user handle the "unsafe" interpolations.

Related: https://github.com/scipy/scipy/issues/11093

Environment:

Output of <tt>xr.show_versions()</tt> xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows libhdf5: 1.10.4 libnetcdf: None xarray: 0.16.2 pandas: 1.1.5 numpy: 1.17.5 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2020.12.0 distributed: 2020.12.0 matplotlib: 3.3.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 51.0.0.post20201207 pip: 20.3.3 conda: 4.9.2 pytest: 6.2.1 IPython: 7.19.0 sphinx: 3.4.0
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4770/reactions",
    "total_count": 1,
    "+1": 1,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
    xarray 13221727 issue
775322346 MDU6SXNzdWU3NzUzMjIzNDY= 4736 Limit number of data variables shown in repr Illviljan 14371165 closed 0     2 2020-12-28T10:15:26Z 2021-01-04T02:13:52Z 2021-01-04T02:13:52Z MEMBER      

What happened: xarray feels very unresponsive when using datasets with >2000 data variables because it has to print all the 2000 variables everytime you print something to console.

What you expected to happen: xarray should limit the number of variables printed to console. Maximum maybe 25? Same idea probably apply to dimensions, coordinates and attributes as well,

pandas only shows 2 for reference, the first and last variables.

Minimal Complete Verifiable Example:

```python import numpy as np import xarray as xr

a = np.arange(0, 2000) b = np.core.defchararray.add("long_variable_name", a.astype(str)) data_vars = dict() for v in b: data_vars[v] = xr.DataArray( name=v, data=[3, 4], dims=["time"], coords=dict(time=[0, 1]) ) ds = xr.Dataset(data_vars)

Everything above feels fast. Printing to console however takes about 13 seconds for me:

print(ds) ```

Anything else we need to know?: Out of scope brainstorming: Though printing 2000 variables is probably madness for most people it is kind of nice to show all variables because you sometimes want to know what happened to a few other variables as well. Is there already an easy and fast way to create subgroup of the dataset, so we don' have to rely on the dataset printing everything to the console everytime?

Environment:

Output of <tt>xr.show_versions()</tt> xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 libhdf5: 1.10.4 libnetcdf: None xarray: 0.16.2 pandas: 1.1.5 numpy: 1.17.5 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2020.12.0 distributed: 2020.12.0 matplotlib: 3.3.2 cartopy: None seaborn: 0.11.1 numbagg: None pint: None setuptools: 51.0.0.post20201207 pip: 20.3.3 conda: 4.9.2 pytest: 6.2.1 IPython: 7.19.0 sphinx: 3.4.0
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4736/reactions",
    "total_count": 2,
    "+1": 2,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
683954433 MDU6SXNzdWU2ODM5NTQ0MzM= 4367 Should __repr__ and __str__ be PEP8 compliant? Illviljan 14371165 closed 0     7 2020-08-22T08:10:15Z 2020-11-25T23:25:44Z 2020-11-25T23:25:44Z MEMBER      

Is your feature request related to a problem? Please describe. When creating docs with examples it would be nice if you could simply use print(ds) without being concerned about line lengths.

Describe the solution you'd like Limit line length so that a method docstring in a class can use print(ds) without breaking PEP8 conventions. So maximum line length for the ds.__repr__/ds.__str__ would be 79 - 4 - 4 = 71.

Example code Example where print(ds) creates lines longer than 79: ```python import numpy as np import pandas as pd import xarray as xr

class foo(): """ Test class.

(...)
"""

def bar():
    """
    Return 1.

    Examples
    --------
    Create data:

    >>> np.random.seed(0)
    >>> temperature = 15 + 8 * np.random.randn(2, 2, 3)
    >>> precipitation = 10 * np.random.rand(2, 2, 3)
    >>> lon = [[-99.83, -99.32], [-99.79, -99.23]]
    >>> lat = [[42.25, 42.21], [42.63, 42.59]]
    >>> time = pd.date_range("2014-09-06", periods=3)
    >>> reference_time = pd.Timestamp("2014-09-05")

    Initialize a dataset with multiple dimensions:

    >>> ds = xr.Dataset(
    ...     {
    ...         "temperature": (["x", "y", "time"], temperature),
    ...         "precipitation": (["x", "y", "time"], precipitation),
    ...     },
    ...     coords={
    ...         "lon": (["x", "y"], lon),
    ...         "lat": (["x", "y"], lat),
    ...         "time": time,
    ...         "reference_time": reference_time,
    ...     },
    ... )

    Print results:

    >>> print(ds.temperature.values[0])
    [[29.11241877 18.20125767 22.82990387]
     [32.92714559 29.94046392  7.18177696]]
    >>> print(ds)
    <xarray.Dataset>
    Dimensions:         (time: 3, x: 2, y: 2)
    Coordinates:
        lon             (x, y) float64 -99.83 -99.32 -99.79 -99.23
        lat             (x, y) float64 42.25 42.21 42.63 42.59
      * time            (time) datetime64[ns] 2014-09-06 2014-09-07 2014-09-08
        reference_time  datetime64[ns] 2014-09-05
    Dimensions without coordinates: x, y
    Data variables:
        temperature     (x, y, time) float64 29.11 18.2 22.83 ... 18.28 16.15 26.63
        precipitation   (x, y, time) float64 5.68 9.256 0.7104 ... 7.992 4.615 7.805
    >>> ds
    <xarray.Dataset>
    Dimensions:         (time: 3, x: 2, y: 2)
    Coordinates:
        lon             (x, y) float64 -99.83 -99.32 -99.79 -99.23
        lat             (x, y) float64 42.25 42.21 42.63 42.59
      * time            (time) datetime64[ns] 2014-09-06 2014-09-07 2014-09-08
        reference_time  datetime64[ns] 2014-09-05
    Dimensions without coordinates: x, y
    Data variables:
        temperature     (x, y, time) float64 29.11 18.2 22.83 ... 18.28 16.15 26.63
        precipitation   (x, y, time) float64 5.68 9.256 0.7104 ... 7.992 4.615 7.805
    """
    return 1

if name == 'main': import doctest doctest.testmod()

```

{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4367/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue
679575175 MDU6SXNzdWU2Nzk1NzUxNzU= 4345 Improve Dataset documentation Illviljan 14371165 closed 0     9 2020-08-15T13:27:33Z 2020-10-27T19:47:51Z 2020-10-27T19:47:51Z MEMBER      

Is your feature request related to a problem? Please describe. As a new user I find it difficult to get a new dataset initialized because the necessary parameters are not shown in the docstring. I have to google "xarray dataset" to get to http://xarray.pydata.org/en/stable/generated/xarray.Dataset.html to figure it out.

In the figure below xarray.Dataset does not show the necessary parameters in the help pane:

Compare to pandas.DataFrame that includes it:

Describe the solution you'd like Looking at https://github.com/pydata/xarray/blob/master/xarray/core/dataset.py#L428 the xr.Dataset.__init__.__doc__ does contain the necessary parameters so the suggestion is to simply move or copy that information up one level toxr.Dataset.__doc__

For reference pandas does not use a docstring for the init method: https://github.com/pandas-dev/pandas/blob/v1.1.0/pandas/core/frame.py#L339-L9257

The pandas docs also includes a few simple copy/pasteable examples on how to initialize. So a xarray example would be: ```python

import numpy as np import xarray as xr x = np.arange(4) y = 2*x ds = xr.Dataset({'y': (['x'], y)}, ... coords={'x': x}) print(ds) <xarray.Dataset> Dimensions: (x: 4) Coordinates: * x (x) int32 0 1 2 3 Data variables: y (x) int32 0 2 4 6 ``` Or take some examples from http://xarray.pydata.org/en/stable/quick-overview.html#datasets or http://xarray.pydata.org/en/stable/data-structures.html#dataset although I found those a little bit confusing as they were dependent on previous results or rather complex with many dimensions.

Environment:

Output of <tt>xr.show_versions()</tt> INSTALLED VERSIONS ------------------ commit: None python: 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: None.None libhdf5: 1.10.4 libnetcdf: None xarray: 0.15.0 pandas: 1.0.3 numpy: 1.18.1 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2.14.0 distributed: 2.22.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 49.2.1.post20200807 pip: 20.2.1 conda: 4.8.3 pytest: 6.0.1 IPython: 7.17.0 sphinx: 3.2.0 C:\ProgramData\Anaconda3\lib\site-packages\setuptools\distutils_patch.py:26: UserWarning: Distutils was imported before Setuptools. This usage is discouraged and may exhibit undesirable behaviors or errors. Please use Setuptools' objects directly or at least import Setuptools first. "Distutils was imported before Setuptools. This usage is discouraged "
{
    "url": "https://api.github.com/repos/pydata/xarray/issues/4345/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  completed xarray 13221727 issue

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issues] (
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [number] INTEGER,
   [title] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [state] TEXT,
   [locked] INTEGER,
   [assignee] INTEGER REFERENCES [users]([id]),
   [milestone] INTEGER REFERENCES [milestones]([id]),
   [comments] INTEGER,
   [created_at] TEXT,
   [updated_at] TEXT,
   [closed_at] TEXT,
   [author_association] TEXT,
   [active_lock_reason] TEXT,
   [draft] INTEGER,
   [pull_request] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [performed_via_github_app] TEXT,
   [state_reason] TEXT,
   [repo] INTEGER REFERENCES [repos]([id]),
   [type] TEXT
);
CREATE INDEX [idx_issues_repo]
    ON [issues] ([repo]);
CREATE INDEX [idx_issues_milestone]
    ON [issues] ([milestone]);
CREATE INDEX [idx_issues_assignee]
    ON [issues] ([assignee]);
CREATE INDEX [idx_issues_user]
    ON [issues] ([user]);
Powered by Datasette · Queries took 41.038ms · About: xarray-datasette