def test_apply_excluders_over_multiple_gens(self): gx_pos = np.array([1, 2, 3, 4, 5]) gy_pos = np.zeros(5) hx_pos = np.zeros(5) hy_pos = np.array([-1, -2, -3]) mask = np.full(15, 1, dtype=np.int8) e = Mock(axes=["gx", "hy"], create_mask=Mock(return_value=mask)) g = Mock(axes=["gx", "gy"], positions={ "gx": gx_pos, "gy": gy_pos }, size=len(gx_pos), alternate=False) h = Mock(axes=["hx", "hy"], positions={ "hx": hx_pos, "hy": hy_pos }, size=len(hy_pos), alternate=False) d = Dimension(g) d.generators = [g, h] d.size = g.size * h.size d.apply_excluder(e) d._masks[0]["mask"] = d._masks[0]["mask"].tolist() self.assertEqual([{ "repeat": 1, "tile": 1, "mask": mask.tolist() }], d._masks) self.assertTrue((np.repeat(np.array([1, 2, 3, 4, 5]), 3) == e.create_mask.call_args[0][0]).all()) self.assertTrue((np.tile(np.array([-1, -2, -3]), 5) == e.create_mask.call_args[0][1]).all())
def test_apply_excluders_with_scaling(self): g1_pos = np.array([1, 2, 3]) g2_pos = np.array([-1, -2]) mask_func = lambda px, py: np.full(len(px), 1, dtype=np.int8) g1 = Mock(axes=["g1"], positions={"g1":g1_pos}, size=len(g1_pos)) g2 = Mock(axes=["g2"], positions={"g2":g2_pos}, size=len(g2_pos)) e = Mock(axes=["g1", "g2"], create_mask=Mock(side_effect=mask_func)) d = Dimension(g1) d.alternate = True d.generators = [Mock(size=5, axes=[]), g1, g2, Mock(size=7, axes=[])] d.size = 5 * len(g1_pos) * len(g2_pos) * 7 d.apply_excluder(e) d._masks[0]["mask"] = d._masks[0]["mask"].tolist() expected_mask = [1] * 12 self.assertEqual([{"repeat":7, "tile":2.5, "mask":expected_mask}], d._masks) self.assertTrue((np.repeat(np.append(g1_pos, g1_pos[::-1]), 2) == e.create_mask.call_args[0][0]).all()) self.assertTrue((np.tile(np.append(g2_pos, g2_pos[::-1]), 3) == e.create_mask.call_args[0][1]).all())