def test_edge_color_direct(): """Test setting edge color.""" np.random.seed(0) data = np.random.random((10, 2, 2)) data[:, 0, :] = 20 * data[:, 0, :] layer = Vectors(data) np.testing.assert_allclose( layer.edge_color, np.repeat([[1, 0, 0, 1]], data.shape[0], axis=0) ) # set edge color as an RGB array layer.edge_color = [0, 0, 1] np.testing.assert_allclose( layer.edge_color, np.repeat([[0, 0, 1, 1]], data.shape[0], axis=0) ) # set edge color as an RGBA array layer.edge_color = [0, 1, 0, 0.5] np.testing.assert_allclose( layer.edge_color, np.repeat([[0, 1, 0, 0.5]], data.shape[0], axis=0) ) # set all edge colors directly edge_colors = np.random.random((data.shape[0], 4)) layer.edge_color = edge_colors np.testing.assert_allclose(layer.edge_color, edge_colors)
def test_edge_color_map_non_numeric_property(): """Test setting edge_color as a color map of a non-numeric property raises an error """ np.random.seed(0) shape = (10, 2, 2) data = np.random.random(shape) data[:, 0, :] = 20 * data[:, 0, :] properties = {'vector_type': np.array(['A', 'B'] * int((shape[0] / 2)))} color_cycle = ['red', 'blue'] initial_color = [0, 1, 0, 1] layer = Vectors( data, properties=properties, edge_color=initial_color, edge_color_cycle=color_cycle, edge_colormap='gray', ) # layer should start out in direct edge color mode with all green vectors assert layer.edge_color_mode == 'direct' np.testing.assert_allclose(layer.edge_color, np.repeat([initial_color], shape[0], axis=0)) # switching to colormap mode should raise an error because the 'vector_type' is non-numeric layer.edge_color = 'vector_type' with pytest.raises(TypeError): layer.edge_color_mode = 'colormap'
def test_adding_properties(): """test adding properties to a Vectors layer""" shape = (10, 2) np.random.seed(0) shape = (10, 2, 2) data = np.random.random(shape) data[:, 0, :] = 20 * data[:, 0, :] properties = {'vector_type': np.array(['A', 'B'] * int(shape[0] / 2))} layer = Vectors(data) # properties should start empty assert layer.properties == {} # add properties layer.properties = properties np.testing.assert_equal(layer.properties, properties) # removing a property that was the _edge_color_property should give a warning layer.edge_color = 'vector_type' properties_2 = { 'not_vector_type': np.array(['A', 'B'] * int(shape[0] / 2)) } with pytest.warns(RuntimeWarning): layer.properties = properties_2 # adding properties with the wrong length should raise an exception bad_properties = {'vector_type': np.array(['A', 'B'])} with pytest.raises(ValueError): layer.properties = bad_properties
def test_invalid_edge_color(): """Test providing an invalid edge color raises an exception""" np.random.seed(0) shape = (10, 2, 2) data = np.random.random(shape) data[:, 0, :] = 20 * data[:, 0, :] layer = Vectors(data) with pytest.raises(ValueError): layer.edge_color = 5
def test_edge_color(): """Test setting edge color.""" np.random.seed(0) data = np.random.random((10, 2, 2)) data[:, 0, :] = 20 * data[:, 0, :] layer = Vectors(data) assert layer.edge_color == 'red' layer.edge_color = 'blue' assert layer.edge_color == 'blue' layer = Vectors(data, edge_color='green') assert layer.edge_color == 'green'
def test_switching_edge_color_mode(): """Test transitioning between all color modes""" np.random.seed(0) shape = (10, 2, 2) data = np.random.random(shape) data[:, 0, :] = 20 * data[:, 0, :] properties = { 'magnitude': np.arange(shape[0]), 'vector_type': np.array(['A', 'B'] * int(shape[0] / 2)), } color_cycle = ['red', 'blue'] initial_color = [0, 1, 0, 1] layer = Vectors( data, properties=properties, edge_color=initial_color, edge_color_cycle=color_cycle, edge_colormap='gray', ) # layer should start out in direct edge color mode with all green vectors assert layer.edge_color_mode == 'direct' np.testing.assert_allclose( layer.edge_color, np.repeat([initial_color], shape[0], axis=0) ) # there should not be an edge_color_property assert layer._edge_color_property == '' # transitioning to colormap should raise a warning # because there isn't an edge color property yet and # the first property in Vectors.properties is being automatically selected with pytest.warns(RuntimeWarning): layer.edge_color_mode = 'colormap' assert layer._edge_color_property == next(iter(properties)) np.testing.assert_allclose(layer.edge_color[-1], [1, 1, 1, 1]) # switch to color cycle layer.edge_color_mode = 'cycle' layer.edge_color = 'vector_type' edge_color_array = transform_color(color_cycle * int(shape[0] / 2)) np.testing.assert_allclose(layer.edge_color, edge_color_array) # switch back to direct, edge_colors shouldn't change edge_colors = layer.edge_color layer.edge_color_mode = 'direct' np.testing.assert_allclose(layer.edge_color, edge_colors)