Dataclass的变量值不能正确更新

问题描述:我在Taichi Kernel中,想记录一个dataclass在执行某个函数前后的属性值(属性的变量类型为ti.math.vec2,我只记录了它的一个分量),以判断执行函数带来的效果。

在我原先的版本中1.4.0中,程序的运行符合我预期的效果。但当我更新1.7.2之后,函数执行后记录的属性值并没有发生应有的变化。当我把执行前的变量记录语句注释后,预期的属性值变化又出现了。猜测可能是两个变量赋值语句被编译成了一句话。另外,值得注意的是,这种现象只出现在了ti.math.vec2的分量中,如果我执行前后记录的是ti.math.vec2本身,那变量更新则是正常的。

复现代码如下:

import taichi as ti
ti.init(arch=ti.cpu, default_fp=ti.f64, fast_math = False)

@ti.dataclass
class Circle:
    center: ti.math.vec2
    
    @ti.func
    def move(self):
        self.center = self.center + 1

Circles = Circle.field(shape = (10))
Circles[0].center = ti.math.vec2(1.0)
Circles[1].center = ti.math.vec2(1.0)
Circles[2].center = ti.math.vec2(1.0)
    
@ti.kernel
def main():
    r1 = Circles[0].center
    x1 = r1[0]
    Circles[0].move()
    r2 = Circles[0].center
    x2 = r2[0]

    print(x1, x2)
    # 1.00, 2.00

    x1 = Circles[1].center[0]
    Circles[1].move()
    x2 = Circles[1].center[0]
    r3 = Circles[1].center
    x3 = r3[0]

    print(x1, x2, x3)
    # 1.00, 1.00, 2.00

    # x1 = Circles[1].center[0]
    Circles[2].move()
    x2 = Circles[2].center[0]
    r3 = Circles[2].center
    x3 = r3[0]

    print(x2, x3)
    # 2.00, 2.00
    
main()