def test_text_manager_format(): n_text = 3 text = 'confidence: {confidence:.2f}' classes = np.array(['A', 'B', 'C']) properties = {'class': classes, 'confidence': np.array([0.5, 0.3, 1])} expected_text = np.array( ['confidence: 0.50', 'confidence: 0.30', 'confidence: 1.00'] ) text_manager = TextManager(text=text, n_text=n_text, properties=properties) np.testing.assert_equal(text_manager.values, expected_text) assert text_manager._mode == TextMode.FORMATTED # add new text with properties new_properties = {'class': np.array(['A']), 'confidence': np.array([0.5])} text_manager.add(new_properties, 1) expected_text_2 = np.concatenate([expected_text, ['confidence: 0.50']]) np.testing.assert_equal(text_manager.values, expected_text_2) # test getting the text elements when there are none in view text_view = text_manager.view_text([]) np.testing.assert_equal(text_view, ['']) # test getting the text elements when the first two elements are in view text_view = text_manager.view_text([0, 1]) np.testing.assert_equal(text_view, expected_text_2[0:2]) text_manager.anchor = 'center' coords = np.array([[0, 0], [10, 10], [20, 20]]) text_coords = text_manager.compute_text_coords(coords, ndisplay=3) np.testing.assert_equal(text_coords, (coords, 'center', 'center')) # remove the first text element text_manager.remove({0}) np.testing.assert_equal(text_manager.values, expected_text_2[1::])
def test_refresh_with_manual_string(): features = pd.DataFrame(index=range(3)) text_manager = TextManager(string=['A', 'B', 'C'], features=features) text_manager.string = ['C', 'B', 'A'] text_manager.refresh(features) np.testing.assert_array_equal(text_manager.values, ['C', 'B', 'A'])
def test_refresh_with_constant_string(): features = pd.DataFrame(index=range(3)) text_manager = TextManager(string={'constant': 'A'}) text_manager.string = {'constant': 'B'} text_manager.refresh(features) np.testing.assert_array_equal(text_manager.values, 'B')
def test_apply_with_constant_string(): features = pd.DataFrame(index=range(3)) text_manager = TextManager(string={'constant': 'A'}) features = pd.DataFrame(index=range(5)) text_manager.apply(features) np.testing.assert_array_equal(text_manager.values, 'A')
def test_add_with_text_constant_init_empty_then_ignored(): # TODO: we may choose not to ignore add as part of the properties refactor. properties = {'class': np.array(['A', 'B', 'C'])} text_manager = TextManager(text='point', n_text=0, properties=properties) text_manager.add({'class': np.array(['C'])}, 2) assert len(text_manager.values) == 0
def test_copy_paste_with_constant_string(): features = pd.DataFrame(index=range(3)) text_manager = TextManager(string={'constant': 'A'}, features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) np.testing.assert_array_equal(text_manager.values, 'A')
def test_copy_paste_with_manual_string(): features = pd.DataFrame(index=range(3)) text_manager = TextManager(string=['A', 'B', 'C'], features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) np.testing.assert_array_equal(text_manager.values, ['A', 'B', 'C', 'A', 'C'])
def test_add_with_text_constant_init_empty(): properties = {} text_manager = TextManager(text={'constant': 'point'}, n_text=0, properties=properties) text_manager.add({'class': np.array(['C'])}, 2) np.testing.assert_array_equal(text_manager.values, ['point'] * 2)
def test_remove_with_text_constant_then_ignored(): n_text = 5 properties = {'class': np.array(['A', 'B', 'C', 'D', 'E'])} text_manager = TextManager(text={'constant': 'point'}, n_text=n_text, properties=properties) text_manager.remove([1, 3]) np.testing.assert_array_equal(text_manager.values, ['point'] * n_text)
def test_serialization(): features = pd.DataFrame( {'class': ['A', 'B', 'C'], 'confidence': [0.5, 0.3, 1]} ) original = TextManager(features=features, string='class', color='red') serialized = original.dict() deserialized = TextManager(**serialized) assert original == deserialized
def test_apply_with_constant_color(): color = {'constant': 'red'} features = pd.DataFrame({'class': ['A', 'B', 'C']}) text_manager = TextManager(color=color, features=features) features = pd.DataFrame({'class': ['A', 'B', 'C', 'D', 'E']}) text_manager.apply(features) actual = text_manager.color._values assert_colors_equal(actual, 'red')
def test_refresh_with_manual_color(): color = ['red', 'green', 'blue'] features = pd.DataFrame(index=range(3)) text_manager = TextManager(color=color, features=features) text_manager.color = ['green', 'cyan', 'yellow'] text_manager.refresh(features) actual = text_manager.color._values assert_colors_equal(actual, ['green', 'cyan', 'yellow'])
def test_refresh_with_constant_color(): color = {'constant': 'red'} features = pd.DataFrame(index=range(3)) text_manager = TextManager(color=color, features=features) text_manager.color = {'constant': 'yellow'} text_manager.refresh(features) actual = text_manager.color._values assert_colors_equal(actual, 'yellow')
def test_refresh_with_derived_color(): color = {'feature': 'colors'} features = pd.DataFrame({'colors': ['red', 'green', 'blue']}) text_manager = TextManager(color=color, features=features) features = pd.DataFrame({'colors': ['green', 'yellow', 'magenta']}) text_manager.refresh(features) actual = text_manager.color._values assert_colors_equal(actual, ['green', 'yellow', 'magenta'])
def test_copy_paste_with_constant_color(): color = {'constant': 'blue'} features = pd.DataFrame(index=range(3)) text_manager = TextManager(color=color, features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) actual = text_manager.color._values assert_colors_equal(actual, 'blue')
def test_copy_paste_with_derived_string(): features = pd.DataFrame({'class': ['A', 'B', 'C']}) text_manager = TextManager(string='class: {class}', features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) np.testing.assert_array_equal( text_manager.values, ['class: A', 'class: B', 'class: C', 'class: A', 'class: C'], )
def test_refresh_with_derived_string(): features = pd.DataFrame({'class': ['A', 'B', 'C']}) text_manager = TextManager(string='class: {class}', features=features) features = pd.DataFrame({'class': ['E', 'D', 'C', 'B', 'A']}) text_manager.refresh(features) np.testing.assert_array_equal( text_manager.values, ['class: E', 'class: D', 'class: C', 'class: B', 'class: A'], )
def test_add_with_text_constant(): n_text = 3 properties = {'class': np.array(['A', 'B', 'C'])} text_manager = TextManager(text={'constant': 'point'}, n_text=n_text, properties=properties) np.testing.assert_array_equal(text_manager.values, ['point'] * 3) text_manager.add({'class': np.array(['C'])}, 2) np.testing.assert_array_equal(text_manager.values, ['point'] * 5)
def test_add_many_text_formatted(): properties = {'confidence': np.empty(0, dtype=float)} text_manager = TextManager( text='confidence: {confidence:.2f}', n_text=0, properties=properties, ) text_manager.add({'confidence': np.array([0.5])}, 2) np.testing.assert_equal(text_manager.values, ['confidence: 0.50'] * 2)
def test_remove_with_text_constant_then_ignored(): # TODO: we may choose not to ignore remove as part of the properties refactor. n_text = 5 properties = {'class': np.array(['A', 'B', 'C', 'D', 'E'])} text_manager = TextManager( text='point', n_text=n_text, properties=properties ) text_manager.remove([1, 3]) np.testing.assert_equal(text_manager.values, ['point'] * n_text)
def test_copy_paste_with_derived_color(): color = {'feature': 'colors'} features = pd.DataFrame({'colors': ['green', 'red', 'magenta']}) text_manager = TextManager(color=color, features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) actual = text_manager.color._values assert_colors_equal(actual, ['green', 'red', 'magenta', 'green', 'magenta'])
def test_copy_paste_with_manual_color(): color = ['magenta', 'red', 'yellow'] features = pd.DataFrame(index=range(3)) text_manager = TextManager(color=color, features=features) copied = text_manager._copy([0, 2]) text_manager._paste(**copied) actual = text_manager.color._values assert_colors_equal(actual, ['magenta', 'red', 'yellow', 'magenta', 'yellow'])
def test_empty_text_manager_format(): """Test creating an empty text manager in formatted mode. This is for creating an empty layer with text initialized. """ properties = {'confidence': np.empty(0, dtype=float)} text = 'confidence: {confidence:.2f}' text_manager = TextManager(text=text, n_text=0, properties=properties) assert text_manager.values.size == 0 # add a text element new_properties = {'confidence': np.array([0.5])} text_manager.add(new_properties, 1) np.testing.assert_equal(text_manager.values, ['confidence: 0.50'])
def test_apply_with_manual_string(): string = { 'array': ['A', 'B', 'C'], 'default': 'D', } features = pd.DataFrame(index=range(3)) text_manager = TextManager(string=string, features=features) features = pd.DataFrame(index=range(5)) text_manager.apply(features) np.testing.assert_array_equal(text_manager.values, ['A', 'B', 'C', 'D', 'D'])
def test_apply_with_manual_color_then_use_default(): color = { 'array': ['red', 'green', 'blue'], 'default': 'yellow', } features = pd.DataFrame({'class': ['A', 'B', 'C']}) text_manager = TextManager(color=color, features=features) features = pd.DataFrame({'class': ['A', 'B', 'C', 'D', 'E']}) text_manager.apply(features) actual = text_manager.color._values assert_colors_equal(actual, ['red', 'green', 'blue', 'yellow', 'yellow'])
def setup(self, n, text): np.random.seed(0) self.properties = { 'string_property': np.random.choice(('cat', 'car'), n), 'float_property': np.random.rand(n), } self.current_properties = { k: np.array([v[-1]]) for k, v in self.properties.items() } self.manager = TextManager(n_text=n, properties=self.properties, text=text) self.indices_to_remove = list(range(0, n, 2))
def test_refresh_text(): n_text = 3 text = 'class' classes = np.array(['A', 'B', 'C']) properties = {'class': classes, 'confidence': np.array([0.5, 0.3, 1])} text_manager = TextManager(text=text, n_text=n_text, properties=properties) new_classes = np.array(['D', 'E', 'F']) new_properties = { 'class': new_classes, 'confidence': np.array([0.5, 0.3, 1]), } text_manager.refresh_text(new_properties) np.testing.assert_equal(new_classes, text_manager.values)
def test_empty_text_manager_property(): """Test creating an empty text manager in property mode. This is for creating an empty layer with text initialized. """ properties = {'confidence': np.empty(0, dtype=float)} text_manager = TextManager( text='confidence', n_text=0, properties=properties ) assert text_manager._mode == TextMode.PROPERTY assert text_manager.values.size == 0 # add a text element new_properties = {'confidence': np.array([0.5])} text_manager.add(new_properties, 1) np.testing.assert_equal(text_manager.values, ['0.5'])
def setup(self, n, string): np.random.seed(0) categories = ('cat', 'car') self.features = pd.DataFrame({ 'string_property': pd.Series( np.random.choice(categories, n), dtype=pd.CategoricalDtype(categories), ), 'float_property': np.random.rand(n), }) self.current_properties = self.features.iloc[[-1]].to_dict('list') self.manager = TextManager(string=string, features=self.features) self.indices_to_remove = list(range(0, n, 2))
def test_update_from_layer(): text = { 'text': 'class', 'translation': [-0.5, 1], 'visible': False, } properties = { 'class': np.array(['A', 'B', 'C']), 'confidence': np.array([1, 0.5, 0]), } text_manager = TextManager._from_layer( text=text, n_text=3, properties=properties, ) text = { 'text': 'Conf: {confidence:.2f}', 'translation': [1.5, -2], 'size': 9000, } text_manager._update_from_layer(text=text, n_text=3, properties=properties) np.testing.assert_array_equal( text_manager.values, ['Conf: 1.00', 'Conf: 0.50', 'Conf: 0.00'] ) np.testing.assert_array_equal(text_manager.translation, [1.5, -2]) assert text_manager.visible assert text_manager.size == 9000