关于python scope函数在taichi scope中的调用

刚刚开始接触taichi,今天写代码的时候发现一个问题,有如下一个函数,用于三维数组的寻址(用一维数组存储的三维数组),当我不加@ti.func的时候,在kernel函数中调用了该函数,发生了报错

def particleCoor(idx):
    tmp = idx
    z = int(tmp / (dim_length * dim_width))
    tmp = tmp % (dim_length * dim_width)
    y = int(tmp / dim_length)
    x = tmp % dim_length
    return x, y, z

报错内容为:
int() argument must be a string, a bytes-like object or a number, not 'Expr'
而当我用@ti.func来修饰了上面这个函数之后,就不会报错且运行正常了。可是我认为该函数会在taichi和python两个scope中都频繁地用到。请问这种情况大家一般是如何处理的呢?写有@ti.func和无@ti.func的两个版本么?

欢迎来到Taichi社区!
这种情况确实建议写两个版本,因为@ti.func修饰的函数会被Taichi compiler处理,未被修饰的函数Taichi complier是看不到的。 在kernel中要调用的函数需要加上@ti.func,不然可能只会在编译器被调用一次。