Nektar++
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
nektar._ewriter.NektarExpressionWriter Class Reference
Inheritance diagram for nektar._ewriter.NektarExpressionWriter:
[legend]

Public Member Functions

 __init__ (self)
 
 set_condition_function (self, func=None)
 

Protected Member Functions

 _ex_quotient (self, e)
 
 _ex_remainder (self, e)
 
 _ex_power (self, e)
 
 _ex_log (self, e)
 
 _ex_abs (self, e)
 
 _ex_not (self, e)
 
 _ex_and (self, e)
 
 _ex_or (self, e)
 
 _ex_if (self, e)
 
 _ex_piecewise (self, e)
 

Protected Attributes

 _function_prefix
 
 _fcond
 

Detailed Description

This :class:`ExpressionWriter <myokit.formats.ExpressionWriter>` writes
equations for variables in a Nektar-style syntax.

Definition at line 14 of file _ewriter.py.

Constructor & Destructor Documentation

◆ __init__()

nektar._ewriter.NektarExpressionWriter.__init__ (   self)

Definition at line 19 of file _ewriter.py.

19 def __init__(self):
20 super(NektarExpressionWriter, self).__init__()
21 self._function_prefix = ''
22 self._fcond = None
23

References nektar._ewriter.NektarExpressionWriter.__init__().

Referenced by nektar._ewriter.NektarExpressionWriter.__init__().

Member Function Documentation

◆ _ex_abs()

nektar._ewriter.NektarExpressionWriter._ex_abs (   self,
  e 
)
protected

Definition at line 78 of file _ewriter.py.

78 def _ex_abs(self, e):
79 return self._ex_function(e, 'fabs')
80

◆ _ex_and()

nektar._ewriter.NektarExpressionWriter._ex_and (   self,
  e 
)
protected

Definition at line 91 of file _ewriter.py.

91 def _ex_and(self, e):
92 return self._ex_infix_condition(e, '&&')
93

◆ _ex_if()

nektar._ewriter.NektarExpressionWriter._ex_if (   self,
  e 
)
protected

Definition at line 97 of file _ewriter.py.

97 def _ex_if(self, e):
98 ite = (self.ex(e._i), self.ex(e._t), self.ex(e._e))
99 if self._fcond is None:
100 return '(%s ? %s : %s)' % ite
101 else:
102 return '%s(%s, %s, %s)' % ((self._fcond,) + ite)
103

References nektar._ewriter.NektarExpressionWriter._fcond.

◆ _ex_log()

nektar._ewriter.NektarExpressionWriter._ex_log (   self,
  e 
)
protected

Definition at line 69 of file _ewriter.py.

69 def _ex_log(self, e):
70 if len(e) == 1:
71 return self._ex_function(e, 'log')
72 return '(log(' + self.ex(e[0]) + ') / log(' + self.ex(e[1]) + '))'
73

◆ _ex_not()

nektar._ewriter.NektarExpressionWriter._ex_not (   self,
  e 
)
protected

Definition at line 81 of file _ewriter.py.

81 def _ex_not(self, e):
82 return '!(' + self.ex(e[0]) + ')'
83

◆ _ex_or()

nektar._ewriter.NektarExpressionWriter._ex_or (   self,
  e 
)
protected

Definition at line 94 of file _ewriter.py.

94 def _ex_or(self, e):
95 return self._ex_infix_condition(e, '||')
96

◆ _ex_piecewise()

nektar._ewriter.NektarExpressionWriter._ex_piecewise (   self,
  e 
)
protected

Definition at line 104 of file _ewriter.py.

104 def _ex_piecewise(self, e):
105 s = []
106 n = len(e._i)
107 if self._fcond is None:
108 for i in range(0, n):
109 s.append('(%s ? %s : ' % (self.ex(e._i[i]), self.ex(e._e[i])))
110 s.append(self.ex(e._e[n]))
111 s.append(')' * n)
112 else:
113 for i in range(0, n):
114 s.append(
115 '%s(%s, %s, ' % (
116 self._fcond, self.ex(e._i[i]), self.ex(e._e[i])))
117 s.append(self.ex(e._e[n]))
118 s.append(')' * n)
119 return ''.join(s)
120

References nektar._ewriter.NektarExpressionWriter._fcond.

◆ _ex_power()

nektar._ewriter.NektarExpressionWriter._ex_power (   self,
  e 
)
protected

Definition at line 57 of file _ewriter.py.

57 def _ex_power(self, e):
58 return 'pow(' + self.ex(e[0]) + ', ' + self.ex(e[1]) + ')'
59

◆ _ex_quotient()

nektar._ewriter.NektarExpressionWriter._ex_quotient (   self,
  e 
)
protected

Definition at line 45 of file _ewriter.py.

45 def _ex_quotient(self, e):
46 # Note that this _must_ round towards minus infinity!
47 # See myokit.Quotient !
48 return self.ex(myokit.Floor(myokit.Divide(e[0], e[1])))
49

◆ _ex_remainder()

nektar._ewriter.NektarExpressionWriter._ex_remainder (   self,
  e 
)
protected

Definition at line 50 of file _ewriter.py.

50 def _ex_remainder(self, e):
51 # Note that this _must_ use the same round-to-neg-inf convention as
52 # myokit.Quotient! Implementation below is consistent with Python
53 # convention:
54 return self.ex(myokit.Minus(
55 e[0], myokit.Multiply(e[1], myokit.Quotient(e[0], e[1]))))
56

◆ set_condition_function()

nektar._ewriter.NektarExpressionWriter.set_condition_function (   self,
  func = None 
)
Sets a function name to use for if statements

By setting func to None you can revert back to the default behavior
 (the ternary operator). Any other value will be interpreted as the
 name of a C function taking arguments (condition, value_if_true,
 value_if_false).

Definition at line 24 of file _ewriter.py.

24 def set_condition_function(self, func=None):
25 """
26 Sets a function name to use for if statements
27
28 By setting func to None you can revert back to the default behavior
29 (the ternary operator). Any other value will be interpreted as the
30 name of a C function taking arguments (condition, value_if_true,
31 value_if_false).
32 """
33 self._fcond = func
34

References nektar._ewriter.NektarExpressionWriter._fcond.

Member Data Documentation

◆ _fcond

nektar._ewriter.NektarExpressionWriter._fcond
protected

◆ _function_prefix

nektar._ewriter.NektarExpressionWriter._function_prefix
protected

Definition at line 21 of file _ewriter.py.