Source code for wolframclient.deserializers.wxf
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
from wolframclient.deserializers.wxf.wxfconsumer import WXFConsumerNumpy
from wolframclient.deserializers.wxf.wxfparser import WXFParser
from wolframclient.exception import WolframParserException
__all__ = ["binary_deserialize"]
[docs]def binary_deserialize(wxf_input, consumer=None, **kwargs):
"""Deserialize binary data and return a Python object.
Serialize a Python object to WXF::
>>> wxf = export({'key' : [1,2,3]}, target_format='wxf')
Retrieve the input object::
>>> binary_deserialize(wxf)
{'key': [1, 2, 3]}
A stream of :class:`~wolframclient.deserializers.wxf.wxfparser.WXFToken` is generated from the WXF input by a instance
of :class:`~wolframclient.deserializers.wxf.wxfparser.WXFParser`.
The consumer must be an instance of :class:`~wolframclient.deserializers.wxf.wxfconsumer.WXFConsumer`. If none is
provided, :class:`~wolframclient.deserializers.wxf.wxfconsumer.WXFConsumerNumpy` is used. To disable NumPy array support,
use :class:`~wolframclient.deserializers.wxf.wxfconsumer.WXFConsumer`.
Named parameters are passed to the consumer. They can be any valid parameter of
:meth:`~wolframclient.deserializers.wxf.wxfconsumer.WXFConsumer.next_expression`, namely:
* `dict_class`: map WXF `Association` to `dict_class` in place of a regular :class:`dict`
"""
parser = WXFParser(wxf_input)
if consumer is None:
consumer = WXFConsumerNumpy()
try:
o = consumer.next_expression(parser.tokens(), **kwargs)
except StopIteration:
raise WolframParserException(
"Input data does not represent a valid expression in WXF format. Expecting more input data."
)
if not parser.context.is_valid_final_state():
raise WolframParserException(
"Input data does not represent a valid expression in WXF format. Some expressions are incomplete."
)
return o