Sympy:来自逻辑表达式的C代码

时间:2016-04-07 11:22:12

标签: python code-generation sympy

从一个同情的逻辑表达式,我想获得等效的C代码。首先,我注意到你不能使用像andor这样的原生逻辑运算符,因为sympy会以某种方式剥离它们。很公平,有& and friends。我试过了

from sympy import *
from sympy.utilities.codegen import codegen

x = Symbol('x')
is_valid = Symbol('is_valid')

# f = x > 0 and is_valid  # TypeError: cannot determine truth value of
f = (x > 0) & is_valid  # And(is_valid, x > 0)

# TypeError: The first argument must be a sympy expression.
[(c_name, c_code), (h_name, c_header)] = codegen(("f", f), "C")

但出于某种原因,我正在

  

TypeError:第一个参数必须是一个sympy表达式。

任何提示?

1 个答案:

答案 0 :(得分:2)

错误消息基于硬编码的isinstance检查。如果它被删除,我得到

#include "f.h"
#include <math.h>

double f(double is_valid, double x) {

   double f_result;
   f_result = is_valid && x > 0;
   return f_result;

}

但请注意,这仍然可能不是您想要的,因为is_valid设置为double,您可能希望它是int(或C99 bool)。

我的建议:直接在表达式上使用ccode,并手动编写函数包装器。如果您需要更具可扩展性的内容,也可以使用pycodeexport