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 574015429,MDU6SXNzdWU1NzQwMTU0Mjk=,3819,expand_dims changes attrs and encoding of coordinate variable,11731042,closed,0,,,3,2020-03-02T14:33:30Z,2020-07-02T22:00:03Z,2020-07-02T22:00:02Z,NONE,,,,"Expanding the dimensions of a variable with a dimension having the same name as a coordinate variable will also change the attributes (including encoding attributes) of this coordinate variable! The following examples prints the attrs and encoding of coordinate variable ``time`` before/after expanding the dimensions of the variable ``sea_surface_temperature`` ```python import xarray as xr import numpy as np grid = xr.Dataset({ 'time': (('time',), [np.datetime64('2018-01-01')]), 'lat': (('lat'), np.arange(-80, 80, 1)), 'lon': (('lon',), np.arange(-180, 180, 1)), 'sea_surface_temperature': (('lat', 'lon',), np.ones(shape=(160, 360))) }) grid['time'].encoding['units'] = 'seconds since 1981-01-01 00:00:00' grid['time'].attrs['comment'] = 'some comment' print(grid['time'].encoding, grid['time'].attrs) grid['sea_surface_temperature'] = grid['sea_surface_temperature'].expand_dims('time', axis=0) print(grid['time'].encoding, grid['time'].attrs) ``` The current output is: ``` {'units': 'seconds since 1981-01-01 00:00:00'} {'comment': 'some comment'} {} {} ``` #### Expected Output I would not expect any change to other coordinates or variables than the expanded one (here ``sea_surface_temperature``) ``` {'units': 'seconds since 1981-01-01 00:00:00'} {'comment': 'some comment'} {'units': 'seconds since 1981-01-01 00:00:00'} {'comment': 'some comment'} ``` #### Output of ``xr.show_versions()``
INSTALLED VERSIONS ------------------ commit: None python: 3.8.1 (default, Jan 8 2020, 22:29:32) [GCC 7.3.0] python-bits: 64 OS: Linux OS-release: 4.15.0-72-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: fr_FR.UTF-8 LOCALE: fr_FR.UTF-8 libhdf5: 1.10.4 libnetcdf: 4.7.3 xarray: 0.15.0 pandas: 1.0.1 numpy: 1.18.1 scipy: 1.4.1 netCDF4: 1.5.3 pydap: None h5netcdf: None h5py: None Nio: None zarr: None cftime: 1.0.4.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: 2.11.0 distributed: 2.11.0 matplotlib: None cartopy: None seaborn: None numbagg: None setuptools: 45.2.0.post20200210 pip: 20.0.2 conda: None pytest: None IPython: None sphinx: None
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/3819/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 457874038,MDU6SXNzdWU0NTc4NzQwMzg=,3034,open_mfdataset fails on variable attributes with 'list' type,11731042,closed,0,,,6,2019-06-19T08:25:23Z,2019-08-04T17:41:32Z,2019-08-04T17:41:32Z,NONE,,,," Using open_mfdataset on a series of netcdf files having variable attributes with type `list` will fail with the following exception, when these attributes have different values from one file to another: ``` ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() ```
ncf = xarray.open_mfdataset(files) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/backends/api.py"", line 658, in open_mfdataset ids=ids) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 553, in _auto_combine data_vars=data_vars, coords=coords) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 474, in _combine_nd compat=compat) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 492, in _auto_combine_all_along_first_dim data_vars, coords) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 510, in _auto_combine_1d for id, ds_group in grouped_by_vars] File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 368, in _auto_concat return concat(datasets, dim=dim, data_vars=data_vars, coords=coords) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 122, in concat return f(objs, dim, data_vars, coords, compat, positions) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/combine.py"", line 307, in _dataset_concat combined = concat_vars(vars, dim, positions) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/variable.py"", line 1982, in concat return Variable.concat(variables, dim, positions, shortcut) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/variable.py"", line 1433, in concat utils.remove_incompatible_items(attrs, var.attrs) File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/utils.py"", line 184, in remove_incompatible_items not compat(first_dict[k], second_dict[k]))): File ""/home/ananda/jfpiolle/miniconda2/envs/cerbere/lib/python2.7/site-packages/xarray/core/utils.py"", line 133, in equivalent (pd.isnull(first) and pd.isnull(second))) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
An example of such variable is provided below: ``` double sea_ice_fraction(time) ; sea_ice_fraction:least_significant_digit = 2LL ; sea_ice_fraction:_FillValue = 1.e+20 ; sea_ice_fraction:long_name = ""sea ice fraction"" ; sea_ice_fraction:standard_name = ""sea_ice_fraction"" ; sea_ice_fraction:authority = ""CF 1.7"" ; sea_ice_fraction:units = ""1"" ; sea_ice_fraction:coverage_content_type = ""auxiliaryInformation"" ; sea_ice_fraction:coordinates = ""time lon lat"" ; sea_ice_fraction:source = ""CCI Sea Ice"" ; sea_ice_fraction:institution = ""ESA"" ; string sea_ice_fraction:source_files = ""ice_conc_nh_ease2-250_cdr-v2p0_199912011200.nc"", ""ice_conc_sh_ease2-250_cdr-v2p0_199912011200.nc"" ; ``` The exception will occur when the `source_files` attribute have a different values in the file time series I am trying to concatenate. I had to use the `preprocess` argument to remove first this attribute to avoid this exception. This is caused by the `equivalent` method in xarray/core/utils.py that does not account for this case: ```python def equivalent(first, second): """"""Compare two objects for equivalence (identity or equality), using array_equiv if either object is an ndarray """""" # TODO: refactor to avoid circular import from . import duck_array_ops if isinstance(first, np.ndarray) or isinstance(second, np.ndarray): return duck_array_ops.array_equiv(first, second) else: return ((first is second) or (first == second) or (pd.isnull(first) and pd.isnull(second))) ``` ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/3034/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue