Ejemplo n.º 1
0
 def test_internal_index_correct_3d(self):
     block_arr = BlockArray(shape=(8, 8, 8))
     assert block_arr.internal_index(0, 0, 0) == 0
     assert block_arr.internal_index(0, 0, 1) == 1
     assert block_arr.internal_index(1, 1, 1) == 73
     assert block_arr.internal_index(7, 3, 3) == 475
     assert block_arr.internal_index(7, 4, 4) == 484
     assert block_arr.internal_index(7, 7, 7) == 8**3 - 1
Ejemplo n.º 2
0
 def test_internal_index_correct_2d(self):
     block_arr = BlockArray(shape=(8, 8), K=2)
     assert block_arr.internal_index(0, 0) == 0
     assert block_arr.internal_index(0, 1) == 1
     assert block_arr.internal_index(1, 1) == 3
     assert block_arr.internal_index(7, 3) == 55
     assert block_arr.internal_index(7, 4) == 58
     assert block_arr.internal_index(7, 7) == 8**2 - 1
Ejemplo n.º 3
0
 def test_invalid_index_3d(self):
     block_arr = BlockArray(shape=(16, 16, 16))
     assert not block_arr.valid_index(5)
     assert not block_arr.valid_index(5, 5)
     assert not block_arr.valid_index(5, 5, 5, 5)
     assert not block_arr.valid_index(-1, -1, -1)
     assert not block_arr.valid_index(16, 16, 16)
     assert not block_arr.valid_index(0, 0, 0, pad=1)
     assert not block_arr.valid_index(15, 15, 15, pad=1)
Ejemplo n.º 4
0
    def test_internal_index_invalid_arg_3d(self):
        block_arr = BlockArray(shape=(8, 8, 8))
        with pytest.raises(TypeError) as _:
            block_arr.internal_index(1)

        with pytest.raises(TypeError) as _:
            block_arr.internal_index(1, 1)

        with pytest.raises(TypeError) as _:
            block_arr.internal_index(1, 1, 1, 1)
Ejemplo n.º 5
0
 def test_valid_index_3d(self):
     block_arr = BlockArray(shape=(16, 16, 16))
     assert block_arr.valid_index(0, 0, 0)
     assert block_arr.valid_index(8, 7, 4)
     assert block_arr.valid_index(15, 15, 15)
     assert block_arr.valid_index(1, 1, 1, pad=1)
     assert block_arr.valid_index(14, 14, 14, pad=1)
Ejemplo n.º 6
0
 def test_iter_keys_3d(self):
     block_arr = BlockArray(shape=(2, 2, 2))
     assert list(block_arr.iter_keys()) == [(0, 0, 0), (0, 0, 1), (0, 1, 0),
                                            (0, 1, 1), (1, 0, 0), (1, 0, 1),
                                            (1, 1, 0), (1, 1, 1)]
     block_arr = BlockArray(shape=(8, 8, 8))
     assert len(list(block_arr.iter_keys())) == 8**3
Ejemplo n.º 7
0
 def test_fill(self):
     block_arr = BlockArray([[False, False], [False, False]])
     for key in block_arr.iter_keys():
         assert not block_arr[key]
     block_arr.fill(True, dtype=bool)
     for key in block_arr.iter_keys():
         assert block_arr[key]
Ejemplo n.º 8
0
 def test_iter_keys_2d(self):
     block_arr = BlockArray(shape=(4, 4))
     assert list(block_arr.iter_keys()) == [(0, 0), (0, 1), (0, 2), (0, 3),
                                            (1, 0), (1, 1), (1, 2), (1, 3),
                                            (2, 0), (2, 1), (2, 2), (2, 3),
                                            (3, 0), (3, 1), (3, 2), (3, 3)]
     block_arr = BlockArray(shape=(32, 32))
     assert len(list(block_arr.iter_keys())) == 32**2
Ejemplo n.º 9
0
    def test_to_numpy(self):
        vals = np.random.rand(8, 8)
        block_arr = BlockArray(vals)
        np.testing.assert_almost_equal(vals, block_arr.to_numpy())

        vals = np.random.rand(8, 8, 8)
        block_arr = BlockArray(vals)
        np.testing.assert_almost_equal(vals, block_arr.to_numpy())
    def test_same_internal_acces_pattern_yields_same_stats(self):
        vals = np.random.rand(16, 16, 16)
        morton = MortonOrder(vals, cache=make_cache())
        block_arr = BlockArray(vals, cache=make_cache())
        row_arr = RowMajorArray(vals, cache=make_cache())

        stats = []
        for data in [morton, block_arr, row_arr]:
            for is_warm_up in [True, False]:
                res = data.empty_of_same_shape()
                for key in data.iter_keys():
                    res[key] = 2 * data[key]
                data.cache.force_write_back()
                if not is_warm_up:
                    stats.append(list(data.cache.stats()))
                data.cache.reset_stats()
        assert stats[0] == stats[1] and stats[1] == stats[2]
Ejemplo n.º 11
0
 def test_setting_to_3d_pic(self):
     vals = np.random.rand(4, 4, 4)
     block_arr = BlockArray(picture=vals)
     assert block_arr.dim == 3
     assert block_arr.shape == vals.shape
     np.testing.assert_almost_equal(vals, block_arr.to_numpy())
Ejemplo n.º 12
0
 def test_empty_of_same_shape(self):
     vals = np.random.rand(8, 8)
     block_arr1 = BlockArray(vals)
     block_arr2 = block_arr1.empty_of_same_shape()  # All 0's in same shape
     assert block_arr1.shape == block_arr2.shape
     np.testing.assert_almost_equal(np.zeros((8, 8)), block_arr2.to_numpy())
# Otherwise just loads results from JSON
GENERATE_NEW_RESULTS = True

# Set to true if you want to save figures to disk. Change path as needed
SAVE_FIGURES_TO_DISK = True
FIG_SAVE_PATH = "../../thesis/figures/props/"

# Global constants for test. Change these if you want to run another test
MAX_PROP_LEVEL = 32
SHAPE = (128, 128, 128)
MID = SHAPE[0] // 2
START_POINTS = [(0, 0, 0), (MID, MID, MID)]
DATA_ARRS = [
    MortonOrder(shape=SHAPE),
    RowMajorArray(shape=SHAPE),
    BlockArray(shape=SHAPE)
]

# Global constants used for type-safety when accessing properties in
# dictionary. Do not change
INF = float("inf")
XS, YS1, YS2 = "xs", "ys1", "ys2"
META, MAX_PROP_LEVEL_STR, SHAPE_STR = "meta", "max_prop_level", "shape"

sns.set(font_scale=1.9)
matplotlib.rcParams['figure.figsize'] = (1.1*18.0, 1.1*4.8)


def indices_for_prop_level_2d(prop_level: int, start_point: tuple) -> set:
    """
    Returns the indices at a given propagation level away