Pablo,

On Wed, Jul 3, 2013 at 5:38 AM, peibol <[email protected]> wrote:
> It will be something like that. For the moment, I'm just implemented the
> basics of presentation mathml. I will add features as I need them.
>
> After running it, sympify should be called. What do you think about it?
>
> def parseMML(mmlinput):
> from lxml import etree
> from StringIO import *
> from lxml import objectify
> mmlinput= mmlinput.replace(' xmlns="', ' xmlnamespace="')
> parser = etree.XMLParser(ns_clean=True,remove_pis=True,remove_comments=True)
> tree   = etree.parse(StringIO(mmlinput), parser)
> objectify.deannotate(tree,cleanup_namespaces=True,xsi=True,xsi_nil=True)
> mmlinput=etree.tostring(tree.getroot())
> exppy="" #this is the python expression
> symvars=[]  #these are symbolic variables which can eventually take part in
> the expression
> events = ("start", "end")
> level = 0
> context = etree.iterparse(StringIO(mmlinput),events=events)
> for action, elem in context:
> if (action=='start') and (elem.tag=='mfrac'):
> level += 1
> mmlaux=etree.tostring(elem[0])
> (a,b)=parseMML(mmlaux)
> symvars.append(b)
> exppy+=a
> exppy+='/'
> mmlaux=etree.tostring(elem[1])
> (a,b)=parseMML(mmlaux)
> symvars.append(b)
> exppy+=a
> if (action=='end') and (elem.tag=='mfrac'):
> level -= 1
> if level:
> continue
> if (action=='start') and (elem.tag=='mrow'):
> exppy+='('
> if (action=='end') and (elem.tag=='mrow'):
> exppy+=')'
> if action=='start' and elem.tag=='mn': #this is a number
> exppy+=elem.text
> if action=='start' and elem.tag=='mi': #this is a variable
> exppy+=elem.text
> symvars.append(elem.text) #we'll return the variable, so sympy can sympify
> it afterwards
> if action=='start' and elem.tag=='mo': #this is a operation
> exppy+=elem.text
> return (exppy, symvars)
>
>
> With the example: mmlinput='''<?xml version="1.0"?> <math
> xmlns="http://www.w3.org/1998/Math/MathML";
> xmlns:mml="http://www.w3.org/1998/Math/MathML";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://www.w3.org/1998/Math/MathML
> http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd";> <mrow> <mfrac> <mrow>
> <mn>3</mn> </mrow> <mrow> <mn>57</mn> </mrow> </mfrac> </mrow> </math>'''
>
> We get:
> exppy='((3)/(57))'


I think that's a great start. I assume you pass the expression to
sympify() and obtain a SymPy expression as a result.

Aaron, I think we should have this in sympy, what do you think? We can
install lxml in .travis.yml and have this tested. If so, I can help
you Pablo with sending a PR and get it setup.

Ondrej

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to