Это продолжение моего последнего вопроса. Я хочу разобрать уравнение и поработать над тем, что я получу. То, что я хочу сделать, это в основном случайное шифрование, чтобы я получил новое уравнение, которое также должно быть действительной функцией. Это должно быть использовано в генетическом алгоритме.
Вот с чего я начну:
class Py2do(ast.NodeTransformer):
def __init__(self):
self.tree=[]
def generic_visit(self, node):
print type(node).__name__
self.tree.append(type(node).__name__)
ast.NodeVisitor.generic_visit(self, node)
depth=3
s = node.__dict__.items()
s = " ".join("%s %r" % x for x in sorted(node.__dict__.items()))
print( "%s%s\t%s" % (depth, str(type(node)), s) )
for x in ast.iter_child_nodes(node):
print (x, depth)
def visit_Name(self, node):
# print 'Name :', node.id
pass
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= e**(((-0.5*one)*((delta_w*one/delta*one)**2)))")
import ast_pretty
print ast.dump(node)
pprintAst(node)
v = Py2do()
v.visit(node)
print v.tree
То, что я хочу получить, выглядит примерно так:
res= e**(delta*((one/delta_w*one)**2)))
или другое действительное случайное уравнение некоторого вида. Это будет использоваться в программе на Фортране, поэтому было бы неплохо, если бы полученное уравнение также можно было перенести в Фортран.
Пожалуйста, прокомментируйте свой код и предоставьте тестовый образец / модульный тест.