2020-06-26 15:23:46 +08:00
|
|
|
import pytest
|
2022-01-27 10:06:37 +08:00
|
|
|
from taichi.lang import impl
|
2019-11-28 14:11:37 +08:00
|
|
|
|
2021-06-23 17:12:25 +08:00
|
|
|
import taichi as ti
|
2022-02-10 12:37:36 +08:00
|
|
|
from tests import test_utils
|
2021-06-23 17:12:25 +08:00
|
|
|
|
2019-12-16 07:58:06 -05:00
|
|
|
|
2022-02-10 12:37:36 +08:00
|
|
|
@test_utils.test()
|
2020-06-24 00:53:53 +08:00
|
|
|
def test_POT():
|
2020-08-13 11:24:48 +08:00
|
|
|
val = ti.field(ti.i32)
|
2019-11-28 14:11:37 +08:00
|
|
|
|
|
|
|
|
n = 4
|
2019-11-28 19:28:39 +08:00
|
|
|
m = 8
|
|
|
|
|
p = 16
|
|
|
|
|
|
2020-05-31 16:55:38 -04:00
|
|
|
ti.root.dense(ti.i, n).dense(ti.j, m).dense(ti.k, p).place(val)
|
2019-11-28 19:28:39 +08:00
|
|
|
|
2020-06-26 15:23:46 +08:00
|
|
|
assert val.shape == (n, m, p)
|
2020-07-04 01:26:15 +08:00
|
|
|
assert val.dtype == ti.i32
|
2019-11-28 19:28:39 +08:00
|
|
|
|
2019-12-16 07:58:06 -05:00
|
|
|
|
2022-02-10 12:37:36 +08:00
|
|
|
@test_utils.test()
|
2020-06-24 00:53:53 +08:00
|
|
|
def test_non_POT():
|
2020-08-13 11:24:48 +08:00
|
|
|
val = ti.field(ti.i32)
|
2019-11-28 19:28:39 +08:00
|
|
|
|
|
|
|
|
n = 3
|
2019-11-28 14:11:37 +08:00
|
|
|
m = 7
|
|
|
|
|
p = 11
|
|
|
|
|
|
2020-06-24 00:53:53 +08:00
|
|
|
blk1 = ti.root.dense(ti.i, n)
|
|
|
|
|
blk2 = blk1.dense(ti.j, m)
|
|
|
|
|
blk3 = blk2.dense(ti.k, p)
|
|
|
|
|
blk3.place(val)
|
2019-11-28 14:11:37 +08:00
|
|
|
|
2020-06-26 15:23:46 +08:00
|
|
|
assert val.shape == (n, m, p)
|
2020-07-04 01:26:15 +08:00
|
|
|
assert val.dtype == ti.i32
|
2019-11-28 19:30:35 +08:00
|
|
|
|
2019-12-16 07:58:06 -05:00
|
|
|
|
2022-02-10 12:37:36 +08:00
|
|
|
@test_utils.test()
|
2019-11-28 19:30:35 +08:00
|
|
|
def test_unordered():
|
2020-08-13 11:24:48 +08:00
|
|
|
val = ti.field(ti.i32)
|
2019-11-28 19:30:35 +08:00
|
|
|
|
|
|
|
|
n = 3
|
|
|
|
|
m = 7
|
|
|
|
|
p = 11
|
|
|
|
|
|
2020-06-24 00:53:53 +08:00
|
|
|
blk1 = ti.root.dense(ti.k, n)
|
|
|
|
|
blk2 = blk1.dense(ti.i, m)
|
|
|
|
|
blk3 = blk2.dense(ti.j, p)
|
|
|
|
|
blk3.place(val)
|
|
|
|
|
|
2020-07-04 01:26:15 +08:00
|
|
|
assert val.dtype == ti.i32
|
2021-10-12 09:35:45 +08:00
|
|
|
assert val.shape == (m, p, n)
|
2020-08-07 11:53:16 +08:00
|
|
|
assert val.snode.parent(0) == val.snode
|
|
|
|
|
assert val.snode.parent() == blk3
|
|
|
|
|
assert val.snode.parent(1) == blk3
|
|
|
|
|
assert val.snode.parent(2) == blk2
|
|
|
|
|
assert val.snode.parent(3) == blk1
|
|
|
|
|
assert val.snode.parent(4) == ti.root
|
|
|
|
|
|
2022-02-16 19:24:14 +08:00
|
|
|
assert val.snode in blk3._get_children()
|
|
|
|
|
assert blk3 in blk2._get_children()
|
|
|
|
|
assert blk2 in blk1._get_children()
|
2022-01-27 10:06:37 +08:00
|
|
|
impl.get_runtime().materialize_root_fb(False)
|
2022-02-16 22:08:47 +08:00
|
|
|
assert blk1 in ti.FieldsBuilder._finalized_roots()[0]._get_children()
|
2020-06-24 00:53:53 +08:00
|
|
|
|
2021-10-12 09:35:45 +08:00
|
|
|
expected_str = f"ti.root => dense {[n]} => dense {[m, n]}" f" => dense {[m, p, n]} => place {[m, p, n]}"
|
2020-08-26 22:19:50 +08:00
|
|
|
assert str(val.snode) == expected_str
|
2020-06-24 00:53:53 +08:00
|
|
|
|
|
|
|
|
|
2022-02-10 12:37:36 +08:00
|
|
|
@test_utils.test()
|
2020-06-24 00:53:53 +08:00
|
|
|
def test_unordered_matrix():
|
2020-08-14 16:50:01 +08:00
|
|
|
val = ti.Matrix.field(3, 2, ti.i32)
|
2020-06-24 00:53:53 +08:00
|
|
|
|
|
|
|
|
n = 3
|
|
|
|
|
m = 7
|
|
|
|
|
p = 11
|
|
|
|
|
|
|
|
|
|
blk1 = ti.root.dense(ti.k, n)
|
|
|
|
|
blk2 = blk1.dense(ti.i, m)
|
|
|
|
|
blk3 = blk2.dense(ti.j, p)
|
|
|
|
|
blk3.place(val)
|
2019-11-28 19:30:35 +08:00
|
|
|
|
2021-10-12 09:35:45 +08:00
|
|
|
assert val.shape == (m, p, n)
|
2020-07-04 01:26:15 +08:00
|
|
|
assert val.dtype == ti.i32
|
2021-08-06 16:57:48 +08:00
|
|
|
assert val.snode.parent(0) == val.snode
|
|
|
|
|
assert val.snode.parent() == blk3
|
|
|
|
|
assert val.snode.parent(1) == blk3
|
|
|
|
|
assert val.snode.parent(2) == blk2
|
|
|
|
|
assert val.snode.parent(3) == blk1
|
|
|
|
|
assert val.snode.parent(4) == ti.root
|
2022-02-16 19:24:14 +08:00
|
|
|
assert val.snode._path_from_root() == [ti.root, blk1, blk2, blk3, val.snode]
|
2020-06-27 11:59:04 +09:00
|
|
|
|
|
|
|
|
|
2022-02-10 12:37:36 +08:00
|
|
|
@test_utils.test()
|
2020-06-27 11:59:04 +09:00
|
|
|
def test_parent_exceeded():
|
2020-08-13 11:24:48 +08:00
|
|
|
val = ti.field(ti.f32)
|
2020-06-27 11:59:04 +09:00
|
|
|
|
|
|
|
|
m = 7
|
|
|
|
|
n = 3
|
|
|
|
|
|
|
|
|
|
blk1 = ti.root.dense(ti.i, m)
|
|
|
|
|
blk2 = blk1.dense(ti.j, n)
|
|
|
|
|
blk2.place(val)
|
|
|
|
|
|
2020-08-07 11:53:16 +08:00
|
|
|
assert val.snode.parent() == blk2
|
|
|
|
|
assert val.snode.parent(2) == blk1
|
|
|
|
|
assert val.snode.parent(3) == ti.root
|
|
|
|
|
assert val.snode.parent(4) == None
|
|
|
|
|
assert val.snode.parent(42) == None
|
2020-06-27 11:59:04 +09:00
|
|
|
|
|
|
|
|
assert ti.root.parent() == None
|