示例#1
0
    def test_merge_three(self):
        g1, g2, g3 = Mock(), Mock(), Mock()
        g1.axes, g2.axes, g3.axes = ["g1"], ["g2"], ["g3"]
        g1.size, g2.size, g3.size = 3, 4, 5
        g1.positions = {"g1":np.array([0, 1, 2])}
        g2.positions = {"g2":np.array([-1, 0, 1, 2])}
        g3.positions = {"g3":np.array([-2, 0, 2, 4, 6])}
        d1, d2, d3 = Dimension(g1), Dimension(g2), Dimension(g3)
        d1_m, d2_m, d3_m = Mock(), Mock(), Mock()
        d1._masks = [{"repeat":1, "tile":1, "mask":d1_m}]
        d2._masks = [{"repeat":2, "tile":3, "mask":d2_m}]
        d3._masks = [{"repeat":5, "tile":7, "mask":d3_m}]

        combined = Dimension.merge_dimensions([d1, d2, d3])

        self.assertEqual(60, combined._max_length)
        self.assertEqual(g1.alternate or g2.alternate or g3.alternate, combined.alternate)
        self.assertEqual(["g1", "g2", "g3"], combined.axes)
        self.assertEqual([0, -1, -2], combined.lower)
        self.assertEqual([2, 2, 6], combined.upper)

        expected_masks = [
                {"repeat":20, "tile":1, "mask":d1_m},
                {"repeat":10, "tile":9, "mask":d2_m},
                {"repeat":5, "tile":84, "mask":d3_m}]
        self.assertEqual(expected_masks, combined._masks)
示例#2
0
 def test_prepare(self):
     d = Dimension(
         Mock(axes=["x", "y"],
              positions={
                  "x": np.array([0]),
                  "y": np.array([0])
              },
              size=30))
     m1 = np.array([0, 1, 0, 1, 1, 0], dtype=np.int8)
     m2 = np.array([1, 1, 0, 0, 1], dtype=np.int8)
     d._masks = [{
         "repeat": 2,
         "tile": 2.5,
         "mask": m1
     }, {
         "repeat": 2,
         "tile": 3,
         "mask": m2
     }]
     e1 = np.array([0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], dtype=np.int8)
     e1 = np.append(np.tile(e1, 2), e1[:len(e1) // 2])
     e2 = np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1], dtype=np.int8)
     e2 = np.tile(e2, 3)
     expected = e1 & e2
     d.prepare()
     self.assertEqual(expected.tolist(), d.mask.tolist())
示例#3
0
    def test_merge_dimensions(self):
        g, h = Mock(), Mock()
        g.axes, h.axes = ["gx", "gy"], ["hx", "hy"]
        g.size, h.size = 16, 64
        g.positions = {"gx":np.array([0, 1, 2]), "gy":np.array([10, 11, 12])}
        h.positions = {"hx":np.array([0, -1, -2]), "hy":np.array([-10, -11, -12])}
        outer, inner = Dimension(g), Dimension(h)
        om1, om2 = Mock(), Mock()
        im1, im2 = Mock(), Mock()
        outer._masks = [{"repeat":2, "tile":3, "mask":om1},
            {"repeat":5, "tile":7, "mask":om2}]
        inner._masks = [{"repeat":11, "tile":13, "mask":im1},
            {"repeat":17, "tile":19, "mask":im2}]
        combined = Dimension.merge_dimensions([outer, inner])

        self.assertEqual(g.size * h.size, combined._max_length)
        self.assertEqual(outer.alternate or inner.alternate, combined.alternate)
        self.assertEqual(["gx", "gy", "hx", "hy"], combined.axes)
        self.assertEqual([2, 12, 0, -10], combined.upper)
        self.assertEqual([0, 10, -2, -12], combined.lower)
        expected_masks = [
            {"repeat":128, "tile":3, "mask":om1},
            {"repeat":320, "tile":7, "mask":om2},
            {"repeat":11, "tile":13*16, "mask":im1},
            {"repeat":17, "tile":19*16, "mask":im2}]
        self.assertEqual(expected_masks, combined._masks)
示例#4
0
    def test_successive_merges(self):
        g1, g2, h1, h2 = Mock(), Mock(), Mock(), Mock()
        g1.axes, g2.axes = ["g1x"], ["g2x", "g2y"]
        g1.positions = {"g1x": np.array([0, 1, 2, 3, 4])}
        g2.positions = {
            "g2x": np.array([10, 11, 12, 13, 14, 15, 16]),
            "g2y": np.array([-10, -11, -12, -13, -14, -15, -16])
        }
        h1.axes, h2.axes = ["h1x", "h1y"], ["h2x"]
        h1.positions = {
            "h1x": np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
            "h1y": np.array([1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21])
        }
        h2.positions = {
            "h2x": np.array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 9])
        }
        g1.size, g2.size = 5, 7
        h1.size, h2.size = 11, 13
        g2mask = Mock()
        h1mask = Mock()
        dg1, dg2 = Dimension(g1), Dimension(g2)
        dh1, dh2 = Dimension(h1), Dimension(h2)
        dg2._masks = [{"repeat": 1, "tile": 1, "mask": g2mask}]
        dh1._masks = [{"repeat": 1, "tile": 1, "mask": h1mask}]

        outer = Dimension.merge_dimensions([dg1, dg2])
        inner = Dimension.merge_dimensions([dh1, dh2])
        self.assertEqual(5 * 7, outer._max_length)
        self.assertEqual(11 * 13, inner._max_length)
        self.assertEqual([{
            "repeat": 1,
            "tile": 5,
            "mask": g2mask
        }], outer._masks)
        self.assertEqual([{
            "repeat": 13,
            "tile": 1,
            "mask": h1mask
        }], inner._masks)
        self.assertEqual([4, 16, -10], outer.upper)
        self.assertEqual([0, 10, -16], outer.lower)
        self.assertEqual([11, 21, 9], inner.upper)
        self.assertEqual([1, 1, 0], inner.lower)
        combined = Dimension.merge_dimensions([outer, inner])

        expected_masks = [{
            "repeat": 11 * 13,
            "tile": 5,
            "mask": g2mask
        }, {
            "repeat": 13,
            "tile": 5 * 7,
            "mask": h1mask
        }]
        self.assertEqual(expected_masks, combined._masks)
        self.assertEqual(5 * 7 * 11 * 13, combined._max_length)
        self.assertEqual(["g1x", "g2x", "g2y", "h1x", "h1y", "h2x"],
                         combined.axes)
        self.assertEqual([4, 16, -10, 11, 21, 9], combined.upper)
        self.assertEqual([0, 10, -16, 1, 1, 0], combined.lower)