diff --git a/src/node.py b/src/node.py index 14a833653dff24c4ac36b8051e35e98835eb343a..25daddbd850792bf944ae14c8577cbd108f17f4e 100644 --- a/src/node.py +++ b/src/node.py @@ -320,69 +320,6 @@ class ExpressionNode(Node, ExpressionBase): self.value = OP_VALUE_MAP[op] self.op = op - def construct_integral(self, children): - # Make sure that any needed parentheses around f(x) are generated, - # and append ' dx' to it (result 'f(x) dx') - fx, x = self[:2] - operand = re.sub(r'(\s*\*)?\s*d$', ' d' + x.value, str(fx * 'd')) - op = 'int' - - # Add bounds - if len(self) > 2: - op += self.construct_bounds(*self[2:]) - - # int x ^ 2 -> int x ^ 2 dx - # int x + 1 -> int (x + 1) dx - # int_a^b x ^ 2 -> int_a^b x ^ 2 dx - return op + ' ' + operand - - def construct_bounds(self, lbnd, ubnd): - # FIXME: temporary fix: add parentheses around negated bounds to - # prevent a syntax error (solving the syntax error is better, but - # harder) - if lbnd.negated: - lbnds = '%s(%s)' % (OP_VALUE_MAP[OP_SUBSCRIPT], lbnd) - else: - lbnds = str(ExpressionNode(OP_SUBSCRIPT, lbnd)) - - if ubnd.negated: - ubnds = '%s(%s)' % (OP_VALUE_MAP[OP_POW], ubnd) - else: - ubnds = str(ExpressionNode(OP_POW, ubnd)) - - return lbnds + ubnds - - def construct_indef_integral(self, children): - # [x ^ 2]_a^b - F, lbnd, ubnd = self - #lbnd = str(ExpressionNode(OP_SUBSCRIPT, lbnd)) - #ubnd = str(ExpressionNode(OP_POW, ubnd)) - - return '[%s]%s' % (F, self.construct_bounds(lbnd, ubnd)) - - def construct_function(self, children): - if self.op == OP_ABS: - return '|%s|' % children[0] - - constructors = { - #OP_DER: self.construct_derivative, - #OP_LOG: self.construct_logarithm, - OP_INT: self.construct_integral, - OP_INT_INDEF: self.construct_indef_integral - } - - if self.op in constructors: - result = constructors[self.op](children) - - if result != None: - return result - - # Function with absolute value as only parameter does not need - # parentheses - if self.op in TOKEN_MAP and TOKEN_MAP[self.op] == 'FUNCTION' \ - and len(self) == 1 and self[0].is_op(OP_ABS): - return self.title() + children[0] - def arity(self): if self.op in UNARY_FUNCTIONS: return 1 @@ -666,12 +603,12 @@ class Scope(object): def replace(self, node, replacement): self.remove(node, replacement=replacement) - #def as_nary_node(self): + # FIXME: def as_nary_node(self): def as_real_nary_node(self): return ExpressionNode(self.node.op, *self.nodes) \ .negate(self.node.negated, clone=False) - #def as_binary_node(self): + # FIXME: def as_binary_node(self): def as_nary_node(self): return nary_node(self.node.op, self.nodes) \ .negate(self.node.negated, clone=False)