和 arblib 协作时遇到的问题

我试图用 Taichi 和 arblib(通过 python-flint)协作。为此我在 @ti.kernel 下设了一个

for i, j in pixels:
    z = ti.Vector([i/n-1, j/n-0.5])*2

但是我无法将 z 转换成一个 acb 的复数类型。我尝试了

w = flint.acb(z[0],z[1])

在 Taichi-scope 报错

TypeError: cannot create acb from type <class 'taichi.lang.expr.Expr'>

在 Python-scope 报错

AssertionError: __getitem__ cannot be called in Taichi-scope

强制 float 也没有用。请教这里应该怎么转换。

我做了一些尝试后,现在问题集中在下面这段代码:

@ti.kernel
def paint():
	for i,j in pixels:
		z = flint.acb(i/n - 0.5, j/n - .5)

我试图将像素点转成 arblib 里的复数。这里的问题是 i, j 并没有被当做普通的整数处理,而是处理成了 Expr 类型。我尝过了使用to_numpy 但是始终没有成功。我尝试了在 python-scope 里操作,是成功的,但是会失去并行的优势。

Hi, @Dr-How。 非常欢迎来到太极论坛。

首先是你不能在Taichi Scope里面使用flintnumpy等库函数,因为需要Taichi scope是Taichi compiler负责编译的,它不认识flint

to_numpy函数可以在Python scope里面使用,用来将field转成numpy的数组。

你是想将ti.Vector转成 flint中复数然后计算是么?
如果是这样,你有两种选择

  1. 你自己直接实现相关计算。
  2. z声明成一个field,然后再进行操作。
1 个赞