Я хочу смоделировать уравнение в виде дерева на питоне.
например:
x = exp(((-0.5)*((f/sqrt(d))**2)))
как мне это сделать? я хочу иметь возможность переключать ветви деревьев,
удалить части дерева и т. д., а затем преобразовать его обратно в
новое уравнение в текстовом виде.
Можете ли вы привести пример кода / библиотеки, которые могут это сделать?
веселит
редактировать 1:
Я зашел так далеко:
import compiler
import pprint
import parser
import ast
class Py2Neko(ast.NodeTransformer):
def generic_visit(self, node):
print type(node).__name__
ast.NodeVisitor.generic_visit(self, node)
def visit_Name(self, node):
print 'Name :', node.id
def visit_Num(self, node):
print 'Num :', node.__dict__['n']
def visit_Str(self, node):
print "Str :", node.s
def visit_Print(self, node):
print "Print :"
ast.NodeVisitor.generic_visit(self, node)
def visit_Assign(self, node):
print "Assign :"
ast.NodeVisitor.generic_visit(self, node)
def visit_Expr(self, node):
print "Expr :"
ast.NodeVisitor.generic_visit(self, node)
if __name__ == '__main__':
node = ast.parse("res= exp(((-0.5*one)*((delta_w*one/delta*one)**2)))")
# print ast.dump(node)
v = Py2Neko()
v.visit(node)
Теперь он печатает все узлы дерева. Однако я хочу иметь возможность переключать ветви,
удалять ветви, вставлять ветви и менять операторы / операнды.
Мне это нужно, потому что я хочу иметь возможность изменять дерево случайным образом.