版本:1.6.0 window10
import taichi as ti
import numpy as np
ti.init()
@ti.data_oriented
class TestClass:
def __init__(self):
self.a = ti.ndarray(ti.i32, shape=10000)
@ti.kernel
def test_kernel(self):
for i in range(10000):
self.a[i] = i
def test(self):
self.test_kernel()
test = TestClass()
test.test()
以上代码会报错
发生异常: TaichiCompilationError
File "C:\Codes\learn-flip\1.py", line 13, in test_kernel:
self.a[i] = i
^^^^^^^^^
Traceback (most recent call last):
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer_utils.py", line 27, in __call__
return method(ctx, node)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer.py", line 233, in build_Subscript
node.ptr = impl.subscript(ctx.ast_builder, node.value.ptr, *node.slice.ptr)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 312, in wrapped
return func(*args, **kwargs)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\impl.py", line 194, in subscript
return value.__getitem__(_indices)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 320, in wrapped
assert in_python_scope(), f"{func.__name__} cannot be called in Taichi-scope"
AssertionError: __getitem__ cannot be called in Taichi-scope
AssertionError: __getitem__ cannot be called in Taichi-scope
During handling of the above exception, another exception occurred:
taichi.lang.exception.TaichiCompilationError: File "C:\Codes\learn-flip\1.py", line 13, in test_kernel:
self.a[i] = i
^^^^^^^^^
Traceback (most recent call last):
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer_utils.py", line 27, in __call__
return method(ctx, node)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer.py", line 233, in build_Subscript
node.ptr = impl.subscript(ctx.ast_builder, node.value.ptr, *node.slice.ptr)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 312, in wrapped
return func(*args, **kwargs)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\impl.py", line 194, in subscript
return value.__getitem__(_indices)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 320, in wrapped
assert in_python_scope(), f"{func.__name__} cannot be called in Taichi-scope"
AssertionError: __getitem__ cannot be called in Taichi-scope
During handling of the above exception, another exception occurred:
File "C:\Codes\learn-flip\1.py", line 16, in test
self.test_kernel()
File "C:\Codes\learn-flip\1.py", line 19, in <module>
test.test()
taichi.lang.exception.TaichiCompilationError:
File "C:\Codes\learn-flip\1.py", line 13, in test_kernel:
self.a[i] = i
^^^^^^^^^
Traceback (most recent call last):
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer_utils.py", line 27, in __call__
return method(ctx, node)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\ast\ast_transformer.py", line 233, in build_Subscript
node.ptr = impl.subscript(ctx.ast_builder, node.value.ptr, *node.slice.ptr)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 312, in wrapped
return func(*args, **kwargs)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\impl.py", line 194, in subscript
return value.__getitem__(_indices)
File "C:\Users\cl-w\miniconda3\lib\site-packages\taichi\lang\util.py", line 320, in wrapped
assert in_python_scope(), f"{func.__name__} cannot be called in Taichi-scope"
AssertionError: __getitem__ cannot be called in Taichi-scope
仅仅将
self.a = ti.ndarray(ti.i32, shape=10000)
改为
self.a = ti.field(ti.i32, shape=10000)
就没有报错