我正在尝试解析使用SymPy优化pyomo模型得到的表达式 . 该模型包含简单和索引变量引用,它们在结果表达式中表示如下:simple: simple_var indexed: indexed_var[index_name] 其中index_name是来自pyomo定义集的值 .

我注意到在尝试解析生成的表达式时,SymPy始终因此错误而失败:

回溯(最近一次调用最后一次):Blockquote jacobians = differentiate(model.objective.expr,wrt_list = var_list)区分tmp_expr,locals = dict((str(x),x)for symp in sympy_vars))in sympify expr = parse_expr(a,local_dict = locals,transformations = transformations,evaluate = evaluate)在parse_expr中返回eval_expr(code,local_dict,global_dict)eval_expr(code,global_dict,local_dict)TypeError:'Symbol'对象不可订阅

编辑:这基本上是没有很多本地文件引用的堆栈跟踪

我试图使用pyomo来解析表达式,希望它会传递一些额外的上下文,但结果是一样的 . 向前推进的唯一明显方法是在结果表达式中进行一些字符串替换,用SymPy解析它,然后在完成SymPy之后再做一些字符串解析并从那里提取我的数据 .

这似乎真的很容易出错,所以我在这里询问是否有更优雅的建议 .