Python OpenMath 2.0 implementation.
OpenMath is an extensible standard for representing the semantics of mathematical objects.
pip install openmath
This package provides an object implementation of OpenMath, and XML parsing/serialization.
See py-scscp for an example of use.
The modules encoder
and decoder
provide XML de-serialization
for OpenMath objects.
>>> from openmath import encoder, decoder, openmath as om >>> xml = encoder.encode_xml(om.OMString('hello world')); xml <Element {http://www.openmath.org/OpenMath}OMSTR at 0x7fcb3cd82708> >>> b = encoder.encode_bytes(om.OMString('hello world')); b b'<OMSTR xmlns="http://www.openmath.org/OpenMath">hello world</OMSTR>' >>> decoder.decode_xml(xml) OMString('hello world', id=None) >>> decoder.decode_bytes(b, snippet=True) OMString('hello world', id=None)
This package provides facilities for easy conversions from Python to
OpenMath and back. The module convert
contains a Converter
class, which
is used to implements this functionality. For convenienve, an instance of this
class, DefaultConverter
is provided.
The two functions to_python()
and to_openmath()
do the conversion as
their names suggest, or raise a ValueError
if no conversion is known.
By default, a Converter
only implements conversions for basic Python types:
- bools,
- ints,
- floats,
- complex numbers,
- strings,
- bytes,
- lists (recursively),
- sets (recursively).
Furthermore, any object that defines an __openmath__(self)
method
will have that method called by to_python
.
Finally, this class contains a mechanism for registering converters.
>>> from fractions import Fraction >>> from openmath import openmath as om >>> from openmath.convert import DefaultConverter as converter >>> def to_om_rat(obj): ... return om.OMApplication(om.OMSymbol('rational', cd='nums1'), ... list(map(converter.to_openmath, [obj.numerator, obj.denominator]))) ... >>> def to_py_rat(obj): ... return Fraction(converter.to_python(obj.arguments[0]), converter.to_python(obj.arguments[1])) ... >>> converter.register(Fraction, to_om_rat, 'nums1', 'rational', to_py_rat) >>> omobj = converter.to_openmath(Fraction(5, 6)); omobj OMApplication(OMSymbol('rational', 'nums1', id=None, cdbase=None), [OMInteger(5, id=None), OMInteger(6, id=None)], id=None, cdbase=None) >>> converter.to_python(omobj) Fraction(5, 6)
The source code of this project can be found on GitHub. Please use GitHub issues and pull requests to contribute to this project.
This work is supported by OpenDreamKit.
This work is licensed under the MIT License, for details see the LICENSE file.