adf0d17497
publish / version_or_publish (push) Has been cancelled
storybook-build / changes (push) Has been cancelled
storybook-build / :storybook-build (push) Has been cancelled
Sync Gradio Skills to Hugging Face / sync-skills (push) Has been cancelled
functional / changes (push) Has been cancelled
functional / build-frontend (push) Has been cancelled
functional / functional-test-SSR=false (push) Has been cancelled
functional / functional-reload (push) Has been cancelled
js / changes (push) Has been cancelled
js / js-test (push) Has been cancelled
docs-build / changes (push) Has been cancelled
docs-build / docs-build (push) Has been cancelled
docs-build / website-build (push) Has been cancelled
functional / functional-test-SSR=true (push) Has been cancelled
hygiene / hygiene-test (push) Has been cancelled
python / changes (push) Has been cancelled
python / build (push) Has been cancelled
python / test-ubuntu-latest-flaky (push) Has been cancelled
python / test-ubuntu-latest-not-flaky (push) Has been cancelled
python / test-windows-latest-flaky (push) Has been cancelled
python / test-windows-latest-not-flaky (push) Has been cancelled
193 lines
7.0 KiB
Python
193 lines
7.0 KiB
Python
import gradio as gr
|
|
|
|
|
|
class TestHighlightedText:
|
|
def test_postprocess(self):
|
|
"""
|
|
postprocess
|
|
"""
|
|
component = gr.HighlightedText()
|
|
value = [
|
|
("", None),
|
|
("Wolfgang", "PER"),
|
|
(" lives in ", None),
|
|
("Berlin", "LOC"),
|
|
("", None),
|
|
]
|
|
result = [
|
|
{"token": "", "class_or_confidence": None},
|
|
{"token": "Wolfgang", "class_or_confidence": "PER"},
|
|
{"token": " lives in ", "class_or_confidence": None},
|
|
{"token": "Berlin", "class_or_confidence": "LOC"},
|
|
{"token": "", "class_or_confidence": None},
|
|
]
|
|
assert (result_ := component.postprocess(value))
|
|
result_ = result_.model_dump()
|
|
assert result == result_
|
|
|
|
text = "Wolfgang lives in Berlin"
|
|
entities = [
|
|
{"entity": "PER", "start": 0, "end": 8},
|
|
{"entity": "LOC", "start": 18, "end": 24},
|
|
]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result == result_
|
|
|
|
text = "Wolfgang lives in Berlin"
|
|
entities = [
|
|
{"entity_group": "PER", "start": 0, "end": 8},
|
|
{"entity": "LOC", "start": 18, "end": 24},
|
|
]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result == result_
|
|
|
|
# Test split entity is merged when combine adjacent is set
|
|
text = "Wolfgang lives in Berlin"
|
|
entities = [
|
|
{"entity": "PER", "start": 0, "end": 4},
|
|
{"entity": "PER", "start": 4, "end": 8},
|
|
{"entity": "LOC", "start": 18, "end": 24},
|
|
]
|
|
# After a merge empty entries are stripped
|
|
result_after_merge = [
|
|
{"token": "Wolfgang", "class_or_confidence": "PER"},
|
|
{"token": " lives in ", "class_or_confidence": None},
|
|
{"token": "Berlin", "class_or_confidence": "LOC"},
|
|
]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result != result_
|
|
assert result_after_merge != result_
|
|
|
|
component = gr.HighlightedText(combine_adjacent=True)
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result_after_merge == result_
|
|
|
|
component = gr.HighlightedText()
|
|
|
|
text = "Wolfgang lives in Berlin"
|
|
entities = [
|
|
{"entity": "LOC", "start": 18, "end": 24},
|
|
{"entity": "PER", "start": 0, "end": 8},
|
|
]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result == result_
|
|
|
|
text = "I live there"
|
|
entities = []
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result_ == [{"token": text, "class_or_confidence": None}]
|
|
|
|
text = "Wolfgang"
|
|
entities = [
|
|
{"entity": "PER", "start": 0, "end": 8},
|
|
]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
result_ = result_.model_dump()
|
|
assert result_ == [
|
|
{"token": "", "class_or_confidence": None},
|
|
{"token": text, "class_or_confidence": "PER"},
|
|
{"token": "", "class_or_confidence": None},
|
|
]
|
|
|
|
def test_combine_adjacent_empty_tokens(self):
|
|
component = gr.HighlightedText(combine_adjacent=True, adjacent_separator=" ")
|
|
|
|
value = [("", None), ("foo", None), ("bar", None)]
|
|
assert (result_ := component.postprocess(value))
|
|
assert result_.model_dump() == [
|
|
{"token": "foo bar", "class_or_confidence": None}
|
|
]
|
|
|
|
value = [("foo", None), ("", None), ("bar", None)]
|
|
assert (result_ := component.postprocess(value))
|
|
assert result_.model_dump() == [
|
|
{"token": "foo bar", "class_or_confidence": None}
|
|
]
|
|
|
|
text = "Wolfgang lives in Berlin"
|
|
entities = [{"entity": "PER", "start": 0, "end": 8}]
|
|
assert (result_ := component.postprocess({"text": text, "entities": entities}))
|
|
assert result_.model_dump() == [
|
|
{"token": "Wolfgang", "class_or_confidence": "PER"},
|
|
{"token": " lives in Berlin", "class_or_confidence": None},
|
|
]
|
|
|
|
def test_show_whitespaces(self):
|
|
component = gr.HighlightedText(show_whitespaces=True)
|
|
assert (result_ := component.postprocess([(" Hello", "label")]))
|
|
assert result_.model_dump() == [
|
|
{"token": " Hello", "class_or_confidence": "label"}
|
|
]
|
|
|
|
component = gr.HighlightedText(show_whitespaces=False)
|
|
assert (result_ := component.postprocess([(" Hello", "label")]))
|
|
assert result_.model_dump() == [
|
|
{"token": "Hello", "class_or_confidence": "label"}
|
|
]
|
|
|
|
def test_component_functions(self):
|
|
"""
|
|
get_config
|
|
"""
|
|
ht_output = gr.HighlightedText(color_map={"pos": "green", "neg": "red"})
|
|
assert ht_output.get_config() == {
|
|
"color_map": {"pos": "green", "neg": "red"},
|
|
"name": "highlightedtext",
|
|
"show_label": True,
|
|
"label": None,
|
|
"show_legend": False,
|
|
"show_inline_category": True,
|
|
"container": True,
|
|
"min_width": 160,
|
|
"scale": None,
|
|
"elem_id": None,
|
|
"elem_classes": [],
|
|
"visible": True,
|
|
"value": None,
|
|
"proxy_url": None,
|
|
"rtl": False,
|
|
"_selectable": False,
|
|
"key": None,
|
|
"preserved_by_key": ["value"],
|
|
"combine_adjacent": False,
|
|
"adjacent_separator": "",
|
|
"show_whitespaces": True,
|
|
"interactive": None,
|
|
"buttons": [],
|
|
}
|
|
|
|
def test_in_interface(self):
|
|
"""
|
|
Interface, process
|
|
"""
|
|
|
|
def highlight_vowels(sentence):
|
|
phrases, cur_phrase = [], ""
|
|
vowels, mode = "aeiou", None
|
|
for letter in sentence:
|
|
letter_mode = "vowel" if letter in vowels else "non"
|
|
if mode is None:
|
|
mode = letter_mode
|
|
elif mode != letter_mode:
|
|
phrases.append((cur_phrase, mode))
|
|
cur_phrase = ""
|
|
mode = letter_mode
|
|
cur_phrase += letter
|
|
phrases.append((cur_phrase, mode))
|
|
return phrases
|
|
|
|
iface = gr.Interface(highlight_vowels, "text", "highlight")
|
|
output = iface("Helloooo")
|
|
assert output == [
|
|
{"token": "H", "class_or_confidence": "non"},
|
|
{"token": "e", "class_or_confidence": "vowel"},
|
|
{"token": "ll", "class_or_confidence": "non"},
|
|
{"token": "oooo", "class_or_confidence": "vowel"},
|
|
]
|