()
| 527 | |
| 528 | |
| 529 | def test_tile_layout(): |
| 530 | def case1(): |
| 531 | # (8):(1)x(8):(1) -> (64):(1) |
| 532 | inner = TileLayout(S[8:1]) |
| 533 | outer = inner |
| 534 | layout_tile = TileLayout(S[64:1]) |
| 535 | assert_structural_equal(layout_tile, inner.tile(outer, [8], [8])) |
| 536 | |
| 537 | outer_res = inner.is_tile_inner(layout_tile, [64], [8]) |
| 538 | assert outer_res is not None |
| 539 | assert_structural_equal(outer_res.canonicalize(), outer.canonicalize()) |
| 540 | |
| 541 | inner_res = outer.is_tile_outer(layout_tile, [64], [8]) |
| 542 | assert inner_res is not None |
| 543 | assert_structural_equal(inner_res.canonicalize(), inner.canonicalize()) |
| 544 | |
| 545 | case1() |
| 546 | |
| 547 | def case2(): |
| 548 | # (8,8):(8,1)x(8,8):(8,1) -> (8,8,8,8):(512,8,64,1) |
| 549 | inner = TileLayout(S[(8, 8) : (8, 1)]) |
| 550 | outer = inner |
| 551 | layout_tile = TileLayout(S[(8, 8, 8, 8) : (512, 8, 64, 1)]) |
| 552 | assert_structural_equal(layout_tile, inner.tile(outer, [8, 8], [8, 8])) |
| 553 | |
| 554 | outer_res = inner.is_tile_inner(layout_tile, [64, 64], [8, 8]) |
| 555 | assert outer_res is not None |
| 556 | assert_structural_equal(outer_res.canonicalize(), outer.canonicalize()) |
| 557 | |
| 558 | inner_res = outer.is_tile_outer(layout_tile, [64, 64], [8, 8]) |
| 559 | assert inner_res is not None |
| 560 | assert_structural_equal(inner_res.canonicalize(), inner.canonicalize()) |
| 561 | |
| 562 | case2() |
| 563 | |
| 564 | def case3(): |
| 565 | # (2,4):(1,2)x(8,8):(8,1) -> (8,2,8,4):(64,1,8,2) |
| 566 | inner = TileLayout(S[(2, 4) : (1, 2)]) |
| 567 | outer = TileLayout(S[(8, 8) : (8, 1)]) |
| 568 | layout_tile = TileLayout(S[(8, 2, 32) : (64, 1, 2)]) |
| 569 | assert_structural_equal(layout_tile, inner.tile(outer, [8, 8], [2, 4])) |
| 570 | |
| 571 | outer_res = inner.is_tile_inner(layout_tile, [16, 32], [2, 4]) |
| 572 | assert outer_res is not None |
| 573 | assert_structural_equal(outer_res.canonicalize(), outer.canonicalize()) |
| 574 | |
| 575 | inner_res = outer.is_tile_outer(layout_tile, [16, 32], [8, 8]) |
| 576 | assert inner_res is not None |
| 577 | assert_structural_equal(inner_res.canonicalize(), inner.canonicalize()) |
| 578 | |
| 579 | assert outer.is_tile_inner(layout_tile, [16, 32], [8, 8]) is None |
| 580 | assert inner.is_tile_outer(layout_tile, [16, 32], [2, 4]) is None |
| 581 | |
| 582 | case3() |
| 583 | |
| 584 | def case4(): |
| 585 | # ((4,2),(2,4)):((16,8),(1,2))x(8,8):(8,1) -> (8,4,2,8,2,4):(512,16,8,64,1,2) |
| 586 | inner = TileLayout(S[(4, 2, 2, 4) : (16, 8, 1, 2)]) |
nothing calls this directly
no test coverage detected
searching dependent graphs…