def test_reshape_iterable(self): d = Decomposition([[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11]], 2) assert d.reshape(()) == Decomposition([[], [], [], []], 2) assert d.reshape((1, 3, 5)) == Decomposition([[0], [1], [2], []], 2) assert d.reshape((1, 3, 10, 11)) == Decomposition([[0], [1], [], [2, 3]], 2) assert d.reshape((1, 3, 10, 11, 14)) == Decomposition([[0], [1], [], [2, 3]], 2)
def test_reshape_identity(self): d = Decomposition([[0, 1], [2, 3]], 2) # Identity decomposition assert len(d.reshape(0, 0)) == 2 assert all( list(i) == j for i, j in zip(d.reshape(0, 0), [[0, 1], [2, 3]]))
def test_reshape_left_right(self): d = Decomposition([[0, 1], [2, 3]], 2) # Extension at both left and right assert len(d.reshape(1, 1)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(1, 1), [[0, 1, 2], [3, 4, 5]])) # Reduction at both left and right assert len(d.reshape(-1, -1)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-1, -1), [[0], [1]])) # Reduction at both left and right, with the right one obliterating one subdomain assert len(d.reshape(-1, -2)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-1, -2), [[0], []])) # Reduction at both left and right obliterating all subdomains # triggering an exception assert len(d.reshape(-1, -3)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-1, -3), [[], []])) assert len(d.reshape(-2, -2)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-1, -3), [[], []]))
def test_reshape_left_only(self): d = Decomposition([[0, 1], [2, 3]], 2) # Extension at left only assert len(d.reshape(2, 0)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(2, 0), [[0, 1, 2, 3], [4, 5]])) # Reduction at left affecting one sub-domain only, but not the whole subdomain assert len(d.reshape(-1, 0)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-1, 0), [[0], [1, 2]])) # Reduction at left over one whole sub-domain assert len(d.reshape(-2, 0)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-2, 0), [[], [0, 1]])) # Reduction at right over multiple sub-domains assert len(d.reshape(-3, 0)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(-3, 0), [[], [0]]))
def test_reshape_right_only(self): d = Decomposition([[0, 1], [2, 3]], 2) # Extension at right only assert len(d.reshape(0, 2)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(0, 2), [[0, 1], [2, 3, 4, 5]])) # Reduction at right affecting one sub-domain only, but not the whole subdomain assert len(d.reshape(0, -1)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(0, -1), [[0, 1], [2]])) # Reduction at right over one whole sub-domain assert len(d.reshape(0, -2)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(0, -2), [[0, 1], []])) # Reduction at right over multiple sub-domains assert len(d.reshape(0, -3)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(0, -3), [[0], []]))
def test_reshape_slice(self): d = Decomposition([[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11]], 2) assert d.reshape(slice(None)) == d assert d.reshape(slice(2, 9)) == Decomposition([[0], [1, 2], [3, 4, 5], [6]], 2) assert d.reshape(slice(3, 5)) == Decomposition([[], [0, 1], [], []], 2) assert d.reshape(slice(3, 3)) == Decomposition([[], [], [], []], 2) assert d.reshape(slice(13, 13)) == Decomposition([[], [], [], []], 2) assert d.reshape(slice(2, None)) == Decomposition([[0], [1, 2], [3, 4, 5], [6, 7, 8, 9]], 2) assert d.reshape(slice(4)) == Decomposition([[0, 1, 2], [3], [], []], 2) assert d.reshape(slice(-2, 2)) == Decomposition([[0, 1, 2, 3], [], [], []], 2) assert d.reshape(slice(-2)) == Decomposition([[0, 1, 2], [3, 4], [5, 6, 7], [8, 9]], 2) assert d.reshape(slice(3, -1)) == Decomposition([[], [0, 1], [2, 3, 4], [5, 6, 7]], 2)
def test_reshape_identity(self): d = Decomposition([[0, 1], [2, 3]], 2) # Identity decomposition assert len(d.reshape(0, 0)) == 2 assert all(list(i) == j for i, j in zip(d.reshape(0, 0), [[0, 1], [2, 3]]))