예제 #1
0
 def test_rgb_regrid_packed(self):
     coords = {'x': [1, 2], 'y': [1, 2], 'band': [0, 1, 2]}
     arr = np.array([
         [[255, 10],
          [  0, 30]],
         [[  1,  0],
          [  0,  0]],
         [[127,  0],
          [  0, 68]],
     ]).T
     da = xr.DataArray(data=arr, dims=('x', 'y', 'band'), coords=coords)
     im = RGB(da, ['x', 'y'])
     agg = rasterize(im, width=3, height=3, dynamic=False, upsample=True)
     xs = [0.8333333, 1.5, 2.166666]
     ys = [0.8333333, 1.5, 2.166666]
     arr = np.array([
         [[255, 255, 10],
          [255, 255, 10],
          [  0,   0, 30]],
         [[  1,   1,  0],
          [  1,   1,  0],
          [  0,   0,  0]],
         [[127, 127,  0],
          [127, 127,  0],
          [  0,   0, 68]],
     ]).transpose((1, 2, 0))
     expected = RGB((xs, ys, arr))
     self.assertEqual(agg, expected)
예제 #2
0
 def test_regrid_rgb_mean(self):
     arr = (np.arange(10) * np.arange(5)[np.newaxis].T).astype('f')
     rgb = RGB((range(10), range(5), arr, arr*2, arr*2))
     regridded = regrid(rgb, width=2, height=2, dynamic=False)
     new_arr = np.array([[1.6, 5.6], [6.4, 22.4]])
     expected = RGB(([2., 7.], [0.75, 3.25], new_arr, new_arr*2, new_arr*2), datatype=['xarray'])
     self.assertEqual(regridded, expected)
예제 #3
0
 def setUp(self):
     self.rgb1_arr = np.array([[[0, 1], [1, 0]],
                               [[1, 0], [0, 1]],
                               [[0, 0], [0, 0]]], dtype=np.uint8).T*255
     self.rgb2_arr = np.array([[[0, 0], [0, 0]],
                               [[0, 0], [0, 0]],
                               [[1, 0], [0, 1]]], dtype=np.uint8).T*255
     self.rgb1 = RGB(self.rgb1_arr)
     self.rgb2 = RGB(self.rgb2_arr)
예제 #4
0
 def test_spread_rgb_1px(self):
     arr = np.array([[[0, 0, 0], [0, 1, 1], [0, 1, 1]],
                     [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
                     [[0, 0, 0], [0, 0, 0], [0, 0, 0]]], dtype=np.uint8).T*255
     spreaded = spread(RGB(arr))
     arr = np.array([[[0, 0, 1], [0, 0, 1], [0, 0, 1]],
                     [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
                     [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
                     [[1, 1, 1], [1, 1, 1], [1, 1, 1]]], dtype=np.uint8).T*255
     self.assertEqual(spreaded, RGB(arr))
예제 #5
0
 def test_rgb_string_signature(self):
     img = RGB(np.zeros((2, 2, 3)), ['a', 'b'], ['R', 'G', 'B'])
     self.assertEqual(img.kdims, [Dimension('a'), Dimension('b')])
     self.assertEqual(
         img.vdims,
         [Dimension('R'), Dimension('G'),
          Dimension('B')])
예제 #6
0
 def test_stack_add_compositor(self):
     combined = stack(self.rgb1 * self.rgb2, compositor='add')
     arr = np.array(
         [[[0, 255, 255], [255, 0, 0]], [[255, 0, 0], [0, 255, 255]]],
         dtype=np.uint8)
     expected = RGB(arr)
     self.assertEqual(combined, expected)
예제 #7
0
 def test_shade_categorical_images_grid(self):
     xs, ys = [0.25, 0.75], [0.25, 0.75]
     data = NdOverlay(
         {
             'A':
             Image((xs, ys, [[1, 0], [0, 0]]),
                   datatype=['grid'],
                   vdims='z Count'),
             'B':
             Image((xs, ys, [[0, 0], [1, 0]]),
                   datatype=['grid'],
                   vdims='z Count'),
             'C':
             Image((xs, ys, [[0, 0], [1, 0]]),
                   datatype=['grid'],
                   vdims='z Count')
         },
         kdims=['z'])
     shaded = shade(data)
     r = [[228, 255], [66, 255]]
     g = [[26, 255], [150, 255]]
     b = [[28, 255], [129, 255]]
     a = [[40, 0], [255, 0]]
     expected = RGB((xs, ys, r, g, b, a),
                    datatype=['grid'],
                    vdims=RGB.vdims + [Dimension('A', range=(0, 1))])
     self.assertEqual(shaded, expected)
예제 #8
0
 def test_shade_dt_xaxis_constant_yaxis(self):
     df = pd.DataFrame({'y': np.ones(100)}, index=pd.date_range('1980-01-01', periods=100, freq='1T'))
     rgb = shade(rasterize(Curve(df), dynamic=False, width=3))
     xs = np.array(['1980-01-01T00:16:30.000000', '1980-01-01T00:49:30.000000',
                    '1980-01-01T01:22:30.000000'], dtype='datetime64[us]')
     ys = np.array([])
     bounds = (np.datetime64('1980-01-01T00:00:00.000000'), 1.0,
               np.datetime64('1980-01-01T01:39:00.000000'), 1.0)
     expected = RGB((xs, ys, np.empty((0, 3, 4))), ['index', 'y'],
                    xdensity=1, ydensity=1, bounds=bounds)
     self.assertEqual(rgb, expected)
예제 #9
0
 def init_data(self):
     self.xs = np.linspace(-9, 9, 10)
     self.ys = np.linspace(0.5, 9.5, 10)
     self.rgb_array = np.random.rand(10, 10, 3)
     self.rgb = RGB((self.xs, self.ys, self.rgb_array[:, :, 0],
                     self.rgb_array[:, :, 1], self.rgb_array[:, :, 2]))
예제 #10
0
 def init_data(self):
     self.rgb_array = np.random.rand(10, 10, 3)
     self.rgb = RGB(self.rgb_array[::-1], bounds=(-10, 0, 10, 10))
예제 #11
0
class RGBInterfaceTest(ComparisonTestCase):

    datatype = 'image'

    def setUp(self):
        self.eltype = RGB
        self.restore_datatype = self.eltype.datatype
        self.eltype.datatype = [self.datatype]
        self.init_data()

    def tearDown(self):
        self.eltype.datatype = self.restore_datatype

    def init_data(self):
        self.rgb_array = np.random.rand(10, 10, 3)
        self.rgb = RGB(self.rgb_array[::-1], bounds=(-10, 0, 10, 10))

    def test_init_bounds(self):
        self.assertEqual(self.rgb.bounds.lbrt(), (-10, 0, 10, 10))

    def test_init_densities(self):
        self.assertEqual(self.rgb.xdensity, 0.5)
        self.assertEqual(self.rgb.ydensity, 1)

    def test_dimension_values_xs(self):
        self.assertEqual(self.rgb.dimension_values(0, expanded=False),
                         np.linspace(-9, 9, 10))

    def test_dimension_values_ys(self):
        self.assertEqual(self.rgb.dimension_values(1, expanded=False),
                         np.linspace(0.5, 9.5, 10))

    def test_dimension_values_vdims(self):
        self.assertEqual(self.rgb.dimension_values(2, flat=False),
                         self.rgb_array[:, :, 0])
        self.assertEqual(self.rgb.dimension_values(3, flat=False),
                         self.rgb_array[:, :, 1])
        self.assertEqual(self.rgb.dimension_values(4, flat=False),
                         self.rgb_array[:, :, 2])

    def test_slice_xaxis(self):
        sliced = self.rgb[0.3:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 0, 6, 10))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[:, 5:8, 0])

    def test_slice_yaxis(self):
        sliced = self.rgb[:, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (-10, 1., 10, 5))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, :, 0])

    def test_slice_both_axes(self):
        sliced = self.rgb[0.3:5.2, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 1., 6, 5))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, 5:8, 0])

    def test_slice_x_index_y(self):
        sliced = self.rgb[0.3:5.2, 5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 5.0, 6.0, 6.0))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[5:6, 5:8, 0])

    def test_index_x_slice_y(self):
        sliced = self.rgb[3.2, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (2.0, 1.0, 4.0, 5.0))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, 6:7, 0])

    def test_select_value_dimension_rgb(self):
        self.assertEqual(
            self.rgb[..., 'R'],
            Image(np.flipud(self.rgb_array[:, :, 0]),
                  bounds=self.rgb.bounds,
                  vdims=[Dimension('R', range=(0, 1))]))

    def test_select_single_coordinate(self):
        with DatatypeContext([self.datatype, 'dictionary', 'dataframe'],
                             self.rgb):
            self.assertEqual(
                self.rgb[5.2, 3.1],
                self.rgb.clone([tuple(self.rgb_array[3, 7])],
                               kdims=[],
                               new_type=Dataset))

    def test_reduce_to_single_values(self):
        with DatatypeContext([self.datatype, 'dictionary', 'dataframe'],
                             self.rgb):
            self.assertEqual(
                self.rgb.reduce(['x', 'y'], function=np.mean),
                self.rgb.clone([tuple(np.mean(self.rgb_array, axis=(0, 1)))],
                               kdims=[],
                               new_type=Dataset))

    def test_sample_xcoord(self):
        ys = np.linspace(0.5, 9.5, 10)
        data = (ys, ) + tuple(self.rgb_array[:, 7, i] for i in range(3))
        with DatatypeContext([self.datatype, 'dictionary', 'dataframe'],
                             self.rgb):
            self.assertEqual(self.rgb.sample(x=5),
                             self.rgb.clone(data, kdims=['y'], new_type=Curve))

    def test_sample_ycoord(self):
        xs = np.linspace(-9, 9, 10)
        data = (xs, ) + tuple(self.rgb_array[4, :, i] for i in range(3))
        with DatatypeContext([self.datatype, 'dictionary', 'dataframe'],
                             self.rgb):
            self.assertEqual(self.rgb.sample(y=5),
                             self.rgb.clone(data, kdims=['x'], new_type=Curve))

    def test_dataset_reindex_constant(self):
        ds = Dataset(self.rgb.select(x=0))
        reindexed = ds.reindex(['y'], ['R'])
        data = Dataset(ds.columns(['y', 'R']),
                       kdims=['y'],
                       vdims=[ds.vdims[0]])
        self.assertEqual(reindexed, data)

    def test_dataset_reindex_non_constant(self):
        ds = Dataset(self.rgb)
        reindexed = ds.reindex(['y'], ['R'])
        data = Dataset(ds.columns(['y', 'R']),
                       kdims=['y'],
                       vdims=[ds.vdims[0]])
        self.assertEqual(reindexed, data)
예제 #12
0
 def test_rgb_casting(self):
     rgb = RGB([], bounds=2)
     self.assertEqual(rgb, RGB(rgb))
예제 #13
0
 def init_data(self):
     self.rgb = RGB(self.rgb_array[::-1], bounds=(-10, 0, 10, 10))
예제 #14
0
 def init_data(self):
     self.rgb = RGB(self.rgb_array[::-1], bounds=(-10, 0, 10, 10))
예제 #15
0
class RGB_ImageInterfaceTests(InterfaceTests):

    datatype = 'image'
    element = RGB

    def init_grid_data(self):
        self.xs = np.linspace(-9, 9, 10)
        self.ys = np.linspace(0.5, 9.5, 10)
        self.rgb_array = np.random.rand(10, 10, 3)

    def init_data(self):
        self.rgb = RGB(self.rgb_array[::-1], bounds=(-10, 0, 10, 10))

    def test_init_bounds(self):
        self.assertEqual(self.rgb.bounds.lbrt(), (-10, 0, 10, 10))

    def test_init_densities(self):
        self.assertEqual(self.rgb.xdensity, 0.5)
        self.assertEqual(self.rgb.ydensity, 1)

    def test_dimension_values_xs(self):
        self.assertEqual(self.rgb.dimension_values(0, expanded=False),
                         np.linspace(-9, 9, 10))

    def test_dimension_values_ys(self):
        self.assertEqual(self.rgb.dimension_values(1, expanded=False),
                         np.linspace(0.5, 9.5, 10))

    def test_dimension_values_vdims(self):
        self.assertEqual(self.rgb.dimension_values(2, flat=False),
                         self.rgb_array[:, :, 0])
        self.assertEqual(self.rgb.dimension_values(3, flat=False),
                         self.rgb_array[:, :, 1])
        self.assertEqual(self.rgb.dimension_values(4, flat=False),
                         self.rgb_array[:, :, 2])

    def test_slice_xaxis(self):
        sliced = self.rgb[0.3:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 0, 6, 10))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[:, 5:8, 0])

    def test_slice_yaxis(self):
        sliced = self.rgb[:, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (-10, 1., 10, 5))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, :, 0])

    def test_slice_both_axes(self):
        sliced = self.rgb[0.3:5.2, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 1., 6, 5))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, 5:8, 0])

    def test_slice_x_index_y(self):
        sliced = self.rgb[0.3:5.2, 5.2]
        self.assertEqual(sliced.bounds.lbrt(), (0, 5.0, 6.0, 6.0))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[5:6, 5:8, 0])

    def test_index_x_slice_y(self):
        sliced = self.rgb[3.2, 1.2:5.2]
        self.assertEqual(sliced.bounds.lbrt(), (2.0, 1.0, 4.0, 5.0))
        self.assertEqual(sliced.xdensity, 0.5)
        self.assertEqual(sliced.ydensity, 1)
        self.assertEqual(sliced.dimension_values(2, flat=False),
                         self.rgb_array[1:5, 6:7, 0])

    def test_select_value_dimension_rgb(self):
        
        self.assertEqual(self.rgb[..., 'R'],
                         Image(np.flipud(self.rgb_array[:, :, 0]), bounds=self.rgb.bounds,
                               vdims=[Dimension('R', range=(0, 1))], datatype=['image']))

    def test_select_single_coordinate(self):
        with DatatypeContext([self.datatype, 'dictionary' , 'dataframe'], self.rgb):
            self.assertEqual(self.rgb[5.2, 3.1],
                             self.rgb.clone([tuple(self.rgb_array[3, 7])],
                                            kdims=[], new_type=Dataset))


    def test_reduce_to_single_values(self):
        with DatatypeContext([self.datatype, 'dictionary' , 'dataframe'], self.rgb):
            self.assertEqual(self.rgb.reduce(['x', 'y'], function=np.mean),
                             self.rgb.clone([tuple(np.mean(self.rgb_array, axis=(0, 1)))],
                                            kdims=[], new_type=Dataset))

    def test_sample_xcoord(self):
        ys = np.linspace(0.5, 9.5, 10)
        data = (ys,) + tuple(self.rgb_array[:, 7, i] for i in range(3))
        with DatatypeContext([self.datatype, 'dictionary' , 'dataframe'], self.rgb):
            self.assertEqual(self.rgb.sample(x=5),
                             self.rgb.clone(data, kdims=['y'],
                                            new_type=Curve))

    def test_sample_ycoord(self):
        xs = np.linspace(-9, 9, 10)
        data = (xs,) + tuple(self.rgb_array[4, :, i] for i in range(3))
        with DatatypeContext([self.datatype, 'dictionary' , 'dataframe'], self.rgb):
            self.assertEqual(self.rgb.sample(y=5),
                             self.rgb.clone(data, kdims=['x'],
                                            new_type=Curve))

    def test_dataset_reindex_constant(self):
        with DatatypeContext([self.datatype, 'dictionary', 'dataframe', 'grid'], self.rgb):
            ds = Dataset(self.rgb.select(x=0))
            reindexed = ds.reindex(['y'], ['R'])
        data = Dataset(ds.columns(['y', 'R']),
                       kdims=['y'], vdims=[ds.vdims[0]])
        self.assertEqual(reindexed, data)

    def test_dataset_reindex_non_constant(self):
        with DatatypeContext([self.datatype, 'dictionary' , 'dataframe', 'grid'], self.rgb):
            ds = Dataset(self.rgb)
            reindexed = ds.reindex(['y'], ['R'])
        data = Dataset(ds.columns(['y', 'R']),
                       kdims=['y'], vdims=[ds.vdims[0]])
        self.assertEqual(reindexed, data)