Skip to content

numpy.void Quantities cannot be yaml serialized #12497

Closed

Description

@nstarman

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

  1. mhvk commented on Nov 21, 2021

    @mhvk
    Contributor

    Hopefully fixed by #12509

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions