expr_codegen icon indicating copy to clipboard operation
expr_codegen copied to clipboard

AttributeError: 'BooleanFalse' object has no attribute 'diff'

Open wukan1986 opened this issue 1 year ago • 0 comments

def _code_block_():
    cond_1 = cs_rank(-amount, False) <= 10
    filter = and_(cond_1,
                  True)

会报错

  File "D:\Users\Kan\miniconda3\envs\py311_1\Lib\site-packages\expr_codegen\tool.py", line 41, in extract
    expr = simplify(expr)
           ^^^^^^^^^^^^^^
  File "D:\Users\Kan\miniconda3\envs\py311_1\Lib\site-packages\sympy\simplify\simplify.py", line 601, in simplify
    return _eval_simplify(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Users\Kan\miniconda3\envs\py311_1\Lib\site-packages\sympy\core\relational.py", line 428, in _eval_simplify
    elif dif.equals(0):  # XXX this is expensive

..... 

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Users\Kan\miniconda3\envs\py311_1\Lib\site-packages\sympy\core\basic.py", line 1871, in _eval_derivative_n_times
    obj2 = obj._eval_derivative(s)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Users\Kan\miniconda3\envs\py311_1\Lib\site-packages\sympy\core\function.py", line 600, in _eval_derivative
    da = a.diff(s)
         ^^^^^^
AttributeError: 'BooleanFalse' object has no attribute 'diff'

其实是False) <= 10在同一行时进行simplify报错。目前没有好的办法,只能在编码时就回避,不写同一行。

def _code_block_():
    cond_1 = cs_rank(-amount, False)
    filter = and_(cond_1 <= 10,
                  True)

这样就不报错了

wukan1986 avatar Jul 03 '24 15:07 wukan1986