Repository navigation
Closed
Description
Description
Structured Quantities with numpy.void base cannot be serialized with astropy.io.misc.yaml.dump
Followup to #12492, suggested in comment by @mhvk .
Expected behavior
Serialize, like an unstructured Quantity.
Actual behavior
A RepresenterError error is raised, saying the object cannot be represented.
Steps to Reproduce
import astropy.units as u
from astropy.io.misc.yaml import dump, load
unit = u.Quantity((0, 0, 0.6), u.Unit("(eV, eV, eV)"))
dump(unit)Details
---------------------------------------------------------------------------
RepresenterError Traceback (most recent call last)
/var/folders/k1/2dc5x9j10c553vvp6f40r89h0000gn/T/ipykernel_29032/2837043595.py in <module>
----> 1 dump(x)
~/local/astropy/astropy/io/misc/yaml.py in dump(data, stream, **kwargs)
333 kwargs['Dumper'] = AstropyDumper
334 kwargs.setdefault('default_flow_style', None)
--> 335 return yaml.dump(data, stream=stream, **kwargs)
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/__init__.py in dump(data, stream, Dumper, **kwds)
251 If stream is None, return the produced string instead.
252 """
--> 253 return dump_all([data], stream, Dumper=Dumper, **kwds)
254
255 def safe_dump_all(documents, stream=None, **kwds):
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/__init__.py in dump_all(documents, stream, Dumper, default_style, default_flow_style, canonical, indent, width, allow_unicode, line_break, encoding, explicit_start, explicit_end, version, tags, sort_keys)
239 dumper.open()
240 for data in documents:
--> 241 dumper.represent(data)
242 dumper.close()
243 finally:
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/representer.py in represent(self, data)
25
26 def represent(self, data):
---> 27 node = self.represent_data(data)
28 self.serialize(node)
29 self.represented_objects = {}
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/representer.py in represent_data(self, data)
50 for data_type in data_types:
51 if data_type in self.yaml_multi_representers:
---> 52 node = self.yaml_multi_representers[data_type](self, data)
53 break
54 else:
~/local/astropy/astropy/io/misc/yaml.py in representer(dumper, obj)
142 def representer(dumper, obj):
143 out = obj.info._represent_as_dict()
--> 144 return dumper.represent_mapping(tag, out)
145 return representer
146
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/representer.py in represent_mapping(self, tag, mapping, flow_style)
116 for item_key, item_value in mapping:
117 node_key = self.represent_data(item_key)
--> 118 node_value = self.represent_data(item_value)
119 if not (isinstance(node_key, ScalarNode) and not node_key.style):
120 best_style = False
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/representer.py in represent_data(self, data)
56 node = self.yaml_multi_representers[None](self, data)
57 elif None in self.yaml_representers:
---> 58 node = self.yaml_representers[None](self, data)
59 else:
60 node = ScalarNode(None, str(data))
~/miniconda/envs/dev/lib/python3.9/site-packages/yaml/representer.py in represent_undefined(self, data)
229
230 def represent_undefined(self, data):
--> 231 raise RepresenterError("cannot represent an object", data)
232
233 SafeRepresenter.add_representer(type(None),
RepresenterError: ('cannot represent an object', Unit("(eV, eV, eV)"))
System Details
macOS-10.16-x86_64-i386-64bit
Python 3.9.5 (default, May 18 2021, 12:31:01)
[Clang 10.0.0 ]
Numpy 1.21.4
pyerfa 2.0.0.1
astropy 5.1.dev127+g8c402168e.d20211112
Scipy 1.7.1
Matplotlib 3.3.4
Activity
mhvk commentedon Nov 21, 2021
Hopefully fixed by #12509