GOES 16 True Color Notebook Broken
- recent python-training conda env
- Run GOES 16 True Color Notebook
I'll assign this issue to myself. Let me know if anyone has any insights here. It used to work so we are either misusing a more recent version of the MetPy API, or something inside MetPy broke.
---------------------------------------------------------------------------
DimensionalityError Traceback (most recent call last)
/opt/conda/envs/python-training/lib/python3.7/site-packages/metpy/xarray.py in _fixup_coords(self, var)
548 try:
--> 549 var.coords[coord_name].metpy.convert_units('meters')
550 except DimensionalityError: # Radians!
/opt/conda/envs/python-training/lib/python3.7/site-packages/metpy/xarray.py in convert_units(self, units)
144 """Convert the data values to different units in-place."""
--> 145 self.unit_array = self.unit_array.to(units)
146
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/quantity.py in to(self, other, *contexts, **ctx_kwargs)
590
--> 591 magnitude = self._convert_magnitude_not_inplace(other, *contexts, **ctx_kwargs)
592
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/quantity.py in _convert_magnitude_not_inplace(self, other, *contexts, **ctx_kwargs)
539
--> 540 return self._REGISTRY.convert(self._magnitude, self._units, other)
541
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/registry.py in convert(self, value, src, dst, inplace)
924
--> 925 return self._convert(value, src, dst, inplace)
926
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/registry.py in _convert(self, value, src, dst, inplace)
1761
-> 1762 return super()._convert(value, src, dst, inplace)
1763
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/registry.py in _convert(self, value, src, dst, inplace)
1375 if not (src_offset_unit or dst_offset_unit):
-> 1376 return super()._convert(value, src, dst, inplace)
1377
/opt/conda/envs/python-training/lib/python3.7/site-packages/pint/registry.py in _convert(self, value, src, dst, inplace, check_dimensionality)
957 if src_dim != dst_dim:
--> 958 raise DimensionalityError(src, dst, src_dim, dst_dim)
959
DimensionalityError: Cannot convert from 'radian' (dimensionless) to 'meter' ([length])
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-11-d9ca28bf71fb> in <module>
1 # We'll use the `CMI_C02` variable as a 'hook' to get the CF metadata.
----> 2 dat = C.metpy.parse_cf('CMI_C02')
3
4 geos = dat.metpy.cartopy_crs
5
/opt/conda/envs/python-training/lib/python3.7/site-packages/metpy/xarray.py in parse_cf(self, varname, coordinates)
518 var.coords['crs'] = CFProjection(proj_var.attrs)
519
--> 520 self._fixup_coords(var)
521
522 # Trying to guess whether we should be adding a crs to this variable's coordinates
/opt/conda/envs/python-training/lib/python3.7/site-packages/metpy/xarray.py in _fixup_coords(self, var)
553 height = var.coords['crs'].item()['perspective_point_height']
554 scaled_vals = new_data_array.metpy.unit_array * (height * units.meters)
--> 555 new_data_array.metpy.unit_array = scaled_vals.to('meters')
556 var.coords[coord_name] = new_data_array
557
/opt/conda/envs/python-training/lib/python3.7/site-packages/metpy/xarray.py in unit_array(self, values)
138 def unit_array(self, values):
139 """Set data values from a `pint.Quantity`."""
--> 140 self._data_array.values = values.magnitude
141 self._units = self._data_array.attrs['units'] = str(values.units)
142
/opt/conda/envs/python-training/lib/python3.7/site-packages/xarray/core/common.py in __setattr__(self, name, value)
260 """
261 try:
--> 262 object.__setattr__(self, name, value)
263 except AttributeError as e:
264 # Don't accidentally shadow custom AttributeErrors, e.g.
/opt/conda/envs/python-training/lib/python3.7/site-packages/xarray/core/dataarray.py in values(self, value)
560 @values.setter
561 def values(self, value: Any) -> None:
--> 562 self.variable.values = value
563
564 @property
/opt/conda/envs/python-training/lib/python3.7/site-packages/xarray/core/variable.py in values(self, values)
2113 def values(self, values):
2114 raise ValueError(
-> 2115 f"Cannot assign to the .values attribute of dimension coordinate a.k.a IndexVariable {self.name!r}. "
2116 f"Please use DataArray.assign_coords, Dataset.assign_coords or Dataset.assign as appropriate."
2117 )
ValueError: Cannot assign to the .values attribute of dimension coordinate a.k.a IndexVariable 'y'. Please use DataArray.assign_coords, Dataset.assign_coords or Dataset.assign as appropriate.
Based on what I've seen, this is a break in MetPy <= 1.0.0rc1 caused by xarray's update to 0.15.1. I have a fix incoming to https://github.com/Unidata/MetPy/pull/1325, but that will only end up applying to the MetPy 1.0 branch due to the other backwards-incompatible changes in that PR.
@dopplershift Since this xarray 0.15.1 issue is showing up everywhere, do we need a bugfix on the MetPy 0.12 branch for this?
Thanks @jthielen. Your branch addresses my problem! In the immediate term, that satisfies my concern of having the notebook run now. I would like to demo it in the near future. I look forward to this fix being incorporated into MetPy. Thanks again!