Esempio n. 1
0
    def setUp(self):
        xs = [1, 2, 3]
        ys = [2, 0, 7]
        holes = [[[(1.5, 2), (2, 3), (1.6, 1.6)],
                  [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]]]
        self.single_poly = Polygons([{'x': xs, 'y': ys, 'holes': holes}])

        xs = [1, 2, 3, np.nan, 6, 7, 3]
        ys = [2, 0, 7, np.nan, 7, 5, 2]
        holes = [[[(1.5, 2), (2, 3), (1.6, 1.6)],
                  [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]], []]
        self.multi_poly = Polygons([{'x': xs, 'y': ys, 'holes': holes}])
        self.multi_poly_no_hole = Polygons([{'x': xs, 'y': ys}])

        self.distinct_polys = Polygons([{
            'x': xs,
            'y': ys,
            'holes': holes,
            'value': 0
        }, {
            'x': [4, 6, 6],
            'y': [0, 2, 1],
            'value': 1
        }],
                                       vdims='value')
 def test_image_contours_filled(self):
     img = Image(np.array([[0, 1, 0], [3, 4, 5.], [6, 7, 8]]))
     op_contours = contours(img, filled=True, levels=[2, 2.5])
     data = [[(0., 0.166667, 2.25), (0.333333, 0.166667, 2.25), (0.333333, 0.2, 2.25), (0., 0.222222, 2.25),
              (-0.333333, 0.111111, 2.25), (-0.333333, 0.055556, 2.25), (0., 0.166667, 2.25)]]
     polys = Polygons(data, vdims=img.vdims[0].clone(range=(2, 2.5)))
     self.assertEqual(op_contours, polys)
Esempio n. 3
0
 def test_image_contours_filled(self):
     img = Image(np.array([[0, 1, 0], [3, 4, 5.], [6, 7, 8]]))
     op_contours = contours(img, filled=True, levels=[2, 2.5])
     data = [[(0., 0.333333, 2), (0.5, 0.3, 2), (0.5, 0.25, 2), (0., 0.25, 2),
              (-0.5, 0.08333333, 2), (-0.5, 0.16666667, 2), (0., 0.33333333, 2)]]
     polys = Polygons(data, vdims=img.vdims)
     self.assertEqual(op_contours, polys)
Esempio n. 4
0
def square_right(a=1):
    a = a / 100.0
    b = 1.0 - a

    poly_5 = Polygons([rectangle(0, 0, a + b, b + a)]).options(color=col_rect)
    poly_6 = Polygons(
        [array([[a, 0], [a + b, a], [b, b + a], [0, b],
                [a, 0]])]).options(color=col_sq_3)
    text_1 = [(a / 2, -0.05, 'a'), (-0.05, b / 2, 'b'), (b / 2, 1.05, 'b'),
              (1.05, a / 2, 'a'), (a + b / 2, -0.05, 'b'),
              (-0.05, b + a / 2, 'a'), (b + a / 2, 1.05, 'a'),
              (1.05, a + b / 2, 'b')]
    text_2 = Text((b + a) / 2, (b + a) / 2, 'c\u00b2').options(color='white')
    output = (poly_5 * poly_6 * hv.Labels(text_1) * text_2).options(opts)
    output = output.relabel("c\u00b2: {}".format(
        np.round((a) * 100)**2 + np.round((1 - a) * 100)**2))
    return output
Esempio n. 5
0
 def test_image_contours_filled(self):
     img = Image(np.array([[0, 1, 0], [3, 4, 5.], [6, 7, 8]]))
     op_contours = contours(img, filled=True, levels=[2, 2.5])
     ndoverlay = NdOverlay(None, kdims=['Levels'])
     data = [[(0., 0.333333), (0.5, 0.3), (0.5, 0.25), (0., 0.25),
              (-0.5, 0.08333333), (-0.5, 0.16666667), (0., 0.33333333)]]
     ndoverlay[0.5] = Polygons(data,
                               group='Level',
                               level=2,
                               vdims=img.vdims)
     self.assertEqual(op_contours, img * ndoverlay)
Esempio n. 6
0
def square_left(a=1):
    # we set a + b = 100 then convert to a + b = 1
    a = a / 100.0
    b = 1.0 - a
    poly_1 = Polygons([rectangle(a, b, b, a),
                       rectangle(0, 0, a, b)]).options(color=col_rect)
    poly_2 = Polygons([rectangle(0, b, a, a),
                       rectangle(a, 0, b, b)]).options(color=col_sq_1)
    poly_3 = Polygons([line(0, 0, a, b), line(a, b, b, a)])
    text_1 = [(a / 2, -0.05, 'a'), (-0.05, b / 2, 'b'), (a / 2, 1.05, 'a'),
              (1.05, b / 2, 'b'), (a + b / 2, -0.05, 'b'),
              (-0.05, b + a / 2, 'a'), (a + b / 2, 1.05, 'b'),
              (1.05, b + a / 2, 'a'), (a / 2.5, (b + 0.1 / a) / 2.5, 'c'),
              (a + (b - 0.082 / a) / 2, b + a / 2, 'c')]
    text_2 = [(a / 2, b + a / 2, 'a\u00b2'), (a + b / 2, b / 2, 'b\u00b2')]
    output = (poly_1 * poly_2 * poly_3 * hv.Labels(text_1) *
              hv.Labels(text_2).options(text_color='white')).options(opts)
    output = output.relabel("a\u00b2: {}".format(np.round((a) * 100)**2),
                            "b\u00b2: {}".format(np.round((1 - a) * 100)**2))
    return output
Esempio n. 7
0
 def test_multi_poly_rasterize(self):
     poly = Polygons([{
         'x': [0, 1, 2, np.nan, 0, 0, 1],
         'y': [0, 1, 0, np.nan, 0, 1, 1]
     }],
                     datatype=['spatialpandas'])
     agg = rasterize(poly, width=4, height=4, dynamic=False)
     xs = [0.25, 0.75, 1.25, 1.75]
     ys = [0.125, 0.375, 0.625, 0.875]
     arr = np.array([[1, 1, 1, 1], [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 0,
                                                                0]])
     expected = Image((xs, ys, arr), vdims='Count')
     self.assertEqual(agg, expected)
Esempio n. 8
0
 def test_polygon_rasterize(self):
     poly = Polygons([{
         'x': [0, 1, 2],
         'y': [0, 1, 0],
         'holes': [[[(1.6, 0.2), (1, 0.8), (0.4, 0.2)]]]
     }])
     agg = rasterize(poly, width=6, height=6, dynamic=False)
     xs = [0.166667, 0.5, 0.833333, 1.166667, 1.5, 1.833333]
     ys = [0.083333, 0.25, 0.416667, 0.583333, 0.75, 0.916667]
     arr = np.array([[1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0],
                     [0, 1, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0],
                     [0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0]])
     expected = Image((xs, ys, arr), vdims='Count')
     self.assertEqual(agg, expected)
Esempio n. 9
0
 def test_polygon_rasterize_mean_agg(self):
     poly = Polygons([
         {'x': [0, 1, 2], 'y': [0, 1, 0], 'z': 2.4},
         {'x': [0, 0, 1], 'y': [0, 1, 1], 'z': 3.6}
     ], vdims='z')
     agg = rasterize(poly, width=4, height=4, dynamic=False, aggregator='mean')
     xs = [0.25, 0.75, 1.25, 1.75]
     ys = [0.125, 0.375, 0.625, 0.875]
     arr = np.array([
         [ 2.4,  2.4,  2.4,    2.4],
         [ 3.6,  2.4,  2.4,    np.nan],
         [ 3.6,  2.4,  2.4,    np.nan],
         [ 3.6,  3.6,  np.nan, np.nan]])
     expected = Image((xs, ys, arr), vdims='z')
     self.assertEqual(agg, expected)
Esempio n. 10
0
 def test_polygons_string_signature(self):
     polygons = Polygons([], ['a', 'b'])
     self.assertEqual(polygons.kdims, [Dimension('a'), Dimension('b')])
Esempio n. 11
0
class PolygonsTests(ComparisonTestCase):

    def setUp(self):
        xs = [1, 2, 3]
        ys = [2, 0, 7]
        holes = [[[(1.5, 2), (2, 3), (1.6, 1.6)], [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]]]
        self.single_poly = Polygons([{'x': xs, 'y': ys, 'holes': holes}])

        xs = [1, 2, 3, np.nan, 6, 7, 3]
        ys = [2, 0, 7, np.nan, 7, 5, 2]
        holes = [
            [[(1.5, 2), (2, 3), (1.6, 1.6)], [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]],
            []
        ]
        self.multi_poly = Polygons([{'x': xs, 'y': ys, 'holes': holes}])
        self.multi_poly_no_hole = Polygons([{'x': xs, 'y': ys}])

        self.distinct_polys = Polygons([
            {'x': xs, 'y': ys, 'holes': holes, 'value': 0},
            {'x': [4, 6, 6], 'y': [0, 2, 1], 'value': 1}], vdims='value')

    def test_single_poly_holes_match(self):
        self.assertTrue(self.single_poly.interface.has_holes(self.single_poly))
        paths = self.single_poly.split(datatype='array')
        holes = self.single_poly.interface.holes(self.single_poly)
        self.assertEqual(len(paths), len(holes))
        self.assertEqual(len(holes), 1)
        self.assertEqual(len(holes[0]), 1)
        self.assertEqual(len(holes[0][0]), 2)

    def test_multi_poly_holes_match(self):
        self.assertTrue(self.multi_poly.interface.has_holes(self.multi_poly))
        paths = self.multi_poly.split(datatype='array')
        holes = self.multi_poly.interface.holes(self.multi_poly)
        self.assertEqual(len(paths), len(holes))
        self.assertEqual(len(holes), 1)
        self.assertEqual(len(holes[0]), 2)
        self.assertEqual(len(holes[0][0]), 2)
        self.assertEqual(len(holes[0][1]), 0)

    def test_multi_poly_no_holes_match(self):
        self.assertFalse(self.multi_poly_no_hole.interface.has_holes(self.multi_poly_no_hole))
        paths = self.multi_poly_no_hole.split(datatype='array')
        holes = self.multi_poly_no_hole.interface.holes(self.multi_poly_no_hole)
        self.assertEqual(len(paths), len(holes))
        self.assertEqual(len(holes), 1)
        self.assertEqual(len(holes[0]), 2)
        self.assertEqual(len(holes[0][0]), 0)
        self.assertEqual(len(holes[0][1]), 0)

    def test_distinct_multi_poly_holes_match(self):
        self.assertTrue(self.distinct_polys.interface.has_holes(self.distinct_polys))
        paths = self.distinct_polys.split(datatype='array')
        holes = self.distinct_polys.interface.holes(self.distinct_polys)
        self.assertEqual(len(paths), len(holes))
        self.assertEqual(len(holes), 2)
        self.assertEqual(len(holes[0]), 2)
        self.assertEqual(len(holes[0][0]), 2)
        self.assertEqual(len(holes[0][1]), 0)
        self.assertEqual(len(holes[1]), 1)
        self.assertEqual(len(holes[1][0]), 0)

    def test_single_poly_hole_validation(self):
        xs = [1, 2, 3]
        ys = [2, 0, 7]
        with self.assertRaises(DataError):
            Polygons([{'x': xs, 'y': ys, 'holes': [[], []]}])

    def test_multi_poly_hole_validation(self):
        xs = [1, 2, 3, np.nan, 6, 7, 3]
        ys = [2, 0, 7, np.nan, 7, 5, 2]
        with self.assertRaises(DataError):
            Polygons([{'x': xs, 'y': ys, 'holes': [[]]}])
Esempio n. 12
0
 def test_multi_poly_hole_validation(self):
     xs = [1, 2, 3, np.nan, 6, 7, 3]
     ys = [2, 0, 7, np.nan, 7, 5, 2]
     with self.assertRaises(DataError):
         Polygons([{'x': xs, 'y': ys, 'holes': [[]]}])
Esempio n. 13
0
 def test_single_poly_hole_validation(self):
     xs = [1, 2, 3]
     ys = [2, 0, 7]
     with self.assertRaises(DataError):
         Polygons([{'x': xs, 'y': ys, 'holes': [[], []]}])
Esempio n. 14
0
 def test_multi_poly_empty_holes(self):
     poly = Polygons([])
     self.assertFalse(poly.interface.has_holes(poly))
     self.assertEqual(poly.interface.holes(poly), [])