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 199032440,MDU6SXNzdWUxOTkwMzI0NDA=,1193,Reading netcdf containing empty N-d string arrays causes exception,6645714,closed,0,,,4,2017-01-05T19:00:22Z,2019-08-30T23:18:04Z,2019-08-30T23:18:04Z,CONTRIBUTOR,,,,"For example: ``` import xarray as xr import numpy as np a = np.array([[]], 'str') ds = xr.Dataset() ds['x'] = (['dim0', 'dim1'], a, {}) ds.to_netcdf('test.nc') ds = xr.open_dataset('test.nc') ds.load() ``` The exception occurs in the call to conventions.char_to_string: ``` def char_to_string(arr): """"""Like netCDF4.chartostring, but faster and more flexible. """""" # based on: http://stackoverflow.com/a/10984878/809705 arr = np.array(arr, copy=False, order='C') kind = arr.dtype.kind if kind not in ['U', 'S']: raise ValueError('argument must be a string') return arr.view(kind + str(arr.shape[-1]))[..., 0] ``` ``` ... return arr.view(kind + str(arr.shape[-1]))[..., 0] TypeError: data-type must not be 0-sized ``` I am able to avoid the exception locally by testing that the last dimension is > 0 prior to creating a view: ``` def char_to_string(arr): """"""Like netCDF4.chartostring, but faster and more flexible. """""" # based on: http://stackoverflow.com/a/10984878/809705 arr = np.array(arr, copy=False, order='C') kind = arr.dtype.kind if kind not in ['U', 'S']: raise ValueError('argument must be a string') if arr.shape[-1] > 0: return arr.view(kind + str(arr.shape[-1]))[..., 0] return arr ```","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/1193/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 112385728,MDExOlB1bGxSZXF1ZXN0NDgyMTA5ODU=,632,Fix a couple of minor typos,6645714,closed,0,,1307323,1,2015-10-20T14:48:54Z,2015-10-21T07:08:00Z,2015-10-20T16:58:10Z,CONTRIBUTOR,,0,pydata/xarray/pulls/632,,"{""url"": ""https://api.github.com/repos/pydata/xarray/issues/632/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 112424213,MDExOlB1bGxSZXF1ZXN0NDgyMzUyMTM=,633,Remove all mutable arguments from functions,6645714,closed,0,,1307323,3,2015-10-20T17:55:36Z,2015-10-21T07:08:00Z,2015-10-20T21:35:02Z,CONTRIBUTOR,,0,pydata/xarray/pulls/633,"http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments Not sure if you want this or not. I didn't see any cases where this was being used intentionally to store state between calls. ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/633/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 100601294,MDU6SXNzdWUxMDA2MDEyOTQ=,526,64-bit values are coerced to 32-bit when writing as NETCDF4_CLASSIC,6645714,closed,0,,,5,2015-08-12T18:06:42Z,2015-09-01T21:02:08Z,2015-09-01T21:02:08Z,CONTRIBUTOR,,,,"``` import xray import numpy ds = xray.Dataset() time_data = numpy.arange(10.0, 100.0, .5) raw_data = time_data.copy() times = xray.Variable('time', time_data) data = xray.DataArray(raw_data, dims=['time'], coords={'time': times}) ds['data'] = data ``` If you examine ds now, you’ll see: ``` Dimensions: (time: 180) Coordinates: * time (time) float64 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 ... Data variables: data (time) float64 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 ... ``` Now, if we dump to netcdf and reload: ``` ds.to_netcdf('test1.nc', format='NETCDF4_CLASSIC') ds1 = xray.open_dataset('test1.nc') ``` The formerly 64-bit values are now 32-bit: ``` Dimensions: (time: 180) Coordinates: * time (time) float32 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 ... Data variables: data (time) float32 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 ... ``` It looks to me like coerce_nc3_dtype is being called for all formats that aren't straight NETCDF4. ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/526/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 100692054,MDExOlB1bGxSZXF1ZXN0NDIzMTU4Nzg=,529,Issue #526 F8 values are incorrectly coerced to F4 when writing NETCD…,6645714,closed,0,,1213895,3,2015-08-13T05:18:22Z,2015-08-19T18:29:04Z,2015-08-19T18:28:59Z,CONTRIBUTOR,,0,pydata/xarray/pulls/529,"…F3-compatible formats ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/529/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull