def test_extract_overlapping_m(self, its=50): for it in range(its): num_subs = random.choice([0, 1, randint(10), randint(100)]) step = random.choice([1, randint(1, 10)]) width = step + random.choice([0, 1, randint(10)]) depth = width - 1 assert depth >= 0 overlap = width - step mat_size = num_subs * step + overlap mat_bm = gen_BandMat(mat_size, l=depth, u=depth) target = None if rand_bool() else randn(num_subs, width, width) if target is None: submats = bmo.extract_overlapping_m(mat_bm, step=step) assert submats.shape == (num_subs, width, width) else: bmo.extract_overlapping_m(mat_bm, step=step, target=target) submats = target for index in range(num_subs): assert_allequal( submats[index], mat_bm.sub_matrix_view( index * step, index * step + width ).full() )
def test_extract_overlapping_m(self, its=50): for it in range(its): num_subs = random.choice([0, 1, randint(10), randint(100)]) step = random.choice([1, randint(1, 10)]) width = step + random.choice([0, 1, randint(10)]) depth = width - 1 assert depth >= 0 overlap = width - step mat_size = num_subs * step + overlap mat_bm = gen_BandMat(mat_size, l=depth, u=depth) target = None if rand_bool() else randn(num_subs, width, width) if target is None: submats = bmo.extract_overlapping_m(mat_bm, step=step) assert submats.shape == (num_subs, width, width) else: bmo.extract_overlapping_m(mat_bm, step=step, target=target) submats = target for index in range(num_subs): assert_allequal( submats[index], mat_bm.sub_matrix_view(index * step, index * step + width).full())
def test_extract_overlapping_m_chunked(self, its=50): for it in range(its): num_subs = random.choice([0, 1, randint(10), randint(100)]) step = random.choice([1, randint(1, 10)]) width = step + random.choice([0, 1, randint(10)]) depth = width - 1 assert depth >= 0 overlap = width - step mat_size = num_subs * step + overlap chunk_size = random.choice([1, randint(1, 10), randint(1, 10)]) mat_bm = gen_BandMat(mat_size, l=depth, u=depth) indices_remaining = set(range(num_subs)) submats_all = np.empty((num_subs, width, width)) for start, end, submats in bmo.extract_overlapping_m_chunked( mat_bm, chunk_size, step=step ): assert end >= start + 1 for index in range(start, end): assert index in indices_remaining indices_remaining.remove(index) submats_all[start:end] = submats submats_good = bmo.extract_overlapping_m(mat_bm, step=step) assert_allclose(submats_all, submats_good)
def test_extract_overlapping_m_chunked(self, its=50): for it in range(its): num_subs = random.choice([0, 1, randint(10), randint(100)]) step = random.choice([1, randint(1, 10)]) width = step + random.choice([0, 1, randint(10)]) depth = width - 1 assert depth >= 0 overlap = width - step mat_size = num_subs * step + overlap chunk_size = random.choice([1, randint(1, 10), randint(1, 10)]) mat_bm = gen_BandMat(mat_size, l=depth, u=depth) indices_remaining = set(range(num_subs)) submats_all = np.empty((num_subs, width, width)) for start, end, submats in bmo.extract_overlapping_m_chunked( mat_bm, chunk_size, step=step): assert end >= start + 1 for index in range(start, end): assert index in indices_remaining indices_remaining.remove(index) submats_all[start:end] = submats submats_good = bmo.extract_overlapping_m(mat_bm, step=step) assert_allclose(submats_all, submats_good)