Files
wehub-resource-sync 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
chore: import upstream snapshot with attribution
2026-07-13 13:17:32 +08:00

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"},
]