MathML¶
Methods are provided to parse and generate expressions in Content MathML. Presentation MathML can also be generated (but not parsed).
Parsing¶
- myokit.formats.mathml.parse_mathml_etree(element, name_factory, number_factory, free_variables={})¶
Parses a MathML expression and returns a
myokit.Expression
.Arguments:
element
An
xml.etree.ElementTree.Element
(or similar) to start parsing from. Must be an<apply>
element.name_factory
A callable with arguments
(name_as_string, element)
that returnsmyokit.Name
objects.number_factory
A callable with arguments
(number_as_float, element)
that returnsmyokit.Number
objects. Note thatelement
can beNone
for numbers that have no corresponding<cn>
element.free_variables
All
Name
objects for free variables in derivative expressions will be added to this set.
- myokit.formats.mathml.parse_mathml_string(s)¶
Parses a MathML string that should contain a single expression.
- class myokit.formats.mathml.MathMLError(message, element=None)¶
Raised if an error occurs during MathML import.
The argument
element
can be used to pass in an element that caused the error.
- class myokit.formats.mathml.MathMLParser(variable_factory, number_factory, free_variables={})¶
Parses MathML expressions into
myokit.Expression
objects.Arguments:
name_factory
A callable with arguments
(name_as_string, element)
that returnsmyokit.Name
objects.number_factory
A callable with arguments
(number_as_float, element)
that returnsmyokit.Number
objects. Note thatelement
can beNone
for numbers that have no corresponding<cn>
element.free_variables
All
Name
objects for free variables in derivative expressions will be added to this set.
This is not a validating parser: if the MathML is invalid the method’s behavior is undefined.
The following MathML elements are recognised:
Literals and references
<ci>
Is converted to a
myokit.Name
by passing the contents of theci
tag to thename_factory
.<diff>
(with<bvar>
and<degree>
)Becomes a
myokit.Derivative
. Only first-order derivatives are supported. To check if the derivatives are all time-derivatives, the derivative post-processing function can be used.<cn>
Becomes a
myokit.Number
. To process units which may be present in the tag’s attributes (esp. in CellML) the number post-processing function can be used.<csymbol>
Is converted to a
myokit.Name
by passing the contents of itsdefinitionURL
to thename_factory
. Note thatcsymbols
representing operators or functions are not supported.
Algebra
<plus>
Becomes a
myokit.PrefixPlus
, a :class`myokit.Plus` or a tree ofmyokit.Plus
elements.<minus>
Becomes a
myokit.PrefixMinus
, a :class`myokit.Minus` or a tree ofmyokit.Minus
elements.<times>
Becomes a
myokit.Multiply
or a tree ofmyokit.Multiply
elements.<divide>
Becomes a
myokit.Divide
or a tree ofmyokit.Divide
elements.<apply>
Used to indicate the tree structure of the equation. These get translated but don’t have a Myokit counterpart.
Functions
<power>
Becomes a
myokit.Power
.<root>
(with<degree>
)Becomes a
myokit.Sqrt
.<exp>
Becomes a
myokit.Exp
.<ln>
Becomes a
myokit.Log
.<log>
(with<logbase>
)Becomes a
myokit.Log10
or amyokit.Log
.<abs>
Becomes a
myokit.Abs
.<floor>
Becomes a
myokit.Floor
.<ceiling>
Becomes a
myokit.Ceil
.<quotient>
Becomes a
myokit.Quotient
.<rem>
Becomes a
myokit.Remainder
.
Trigonometry
<sin>
,<cos>
and<tan>
Become
myokit.Sin
,myokit.Cos
andmyokit.Tan
.<arcsin>
,<arccos>
and<arctan>
Become
myokit.ASin
,myokit.ACos
andmyokit.ATan
.<csc>
,<sec>
and<cot>
Become
1/sin
,1/cos
and1/tan
.<arccsc>
,<arcsec>
and<arccot>
Become
asin(1/x)
,acos(1/x)
andatan(1/x)
.
Hyperbolic trigonometry
<sinh>
Becomes
0.5 * (exp(x) - exp(-x))
.<cosh>
Becomes
0.5 * (exp(x) + exp(-x))
.<tanh>
Becomes
(exp(2 * x) - 1) / (exp(2 * x) + 1)
.<arcsinh>
Becomes
log(x + sqrt(x*x + 1))
.<arccosh>
Becomes
log(x + sqrt(x*x - 1))
.<arctanh>
Becomes
0.5 * log((1 + x) / (1 - x))
.<csch>
Becomes
2 / (exp(x) - exp(-x))
.<sech>
Becomes
2 / (exp(x) + exp(-x))
.<coth>
Becomes
(exp(2 * x) + 1) / (exp(2 * x) - 1)
.<arccsch>
Becomes
log(1 / x + sqrt(1 / x^2 + 1))
.<arcsech>
Becomes
log(1 / x + sqrt(1 / x^2 - 1))
<arccoth>
Becomes
0.5 * log((x + 1) / (x - 1))
.
Logic and relations
<piecewise>
,<piece>
and<otherwise>
Becomes a
myokit.Piecewise
.<and>
,<or>
and<not>
Become
myokit.And
,myokit.Or
andmyokit.Not
.<xor>
Becomes
(x or y) and not(x and y)
<eq>
and<neq>
Becomes
myokit.Equal
andNotEqual
.<lt>
and<gt>
Become
myokit.Less
andmyokit.More
.<leq>
and<geq>
Become
myokit.LessEqual
andmyokit.MoreEqual
.
Constants
<pi>
Becomes
3.14159265358979323846
<exponentiale>
Becomes
exp(1)
<true>
Becomes
1
<false>
Becomes
0
- parse(element)¶
Parses a MathML expression, rooted in the given
<apply>
element, and returns amyokit.Expression
.Arguments:
element
An
xml.etree.ElementTree.Element
(or similar) to start parsing from. Must be an<apply>
element.
Writing expressions¶
- myokit.formats.mathml.ewriters()¶
Returns a dict of all expression writers available in this module.
- class myokit.formats.mathml.MathMLExpressionWriter¶
This
ExpressionWriter
translates Myokitexpressions
to Content MathML or Presentation MathML.- eq(eq, element=None)¶
Converts an equation to a string.
The optional argument
element
can be used to pass in anlxml.etree.ElementTree
element. If given, this element will be updated with the generated xml and nothing will be returned.
- ex(e, element=None)¶
Converts an expression to a string.
The optional argument
element
can be used to pass in anlxml.etree.ElementTree
element. If given, this element will be updated with the generated xml and nothing will be returned.
- set_lhs_function(f)¶
- Sets a naming function, will be called to get the variable name from a
myokit.Name
(derivatives will be handled separately).
The argument
f
should be a function that takes amyokit.Name
as input and returns a string.
- set_mode(presentation=False)¶
Enables or disables Presentation MathML mode.
- set_time_variable(time)¶
Sets the time variable to use for this expression writer’s derivatives.