File size: 5,467 Bytes
0ad74ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
import inspect
import os
import numpy as np
import pandas as pd
import pytest
from gradio_client import utils as client_utils
from gradio_pdf import PDF
import gradio as gr
from gradio import processing_utils
from gradio.components.base import Component
from gradio.data_classes import GradioModel, GradioRootModel
from gradio.templates import TextArea
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
class TestGettingComponents:
def test_component_function(self):
assert isinstance(gr.components.component("textarea", render=False), TextArea)
@pytest.mark.parametrize(
"component, render, unrender, should_be_rendered",
[
(gr.Textbox(render=True), False, True, False),
(gr.Textbox(render=False), False, False, False),
(gr.Textbox(render=False), True, False, True),
("textbox", False, False, False),
("textbox", True, False, True),
],
)
def test_get_component_instance_rendering(
self, component, render, unrender, should_be_rendered
):
with gr.Blocks():
textbox = gr.components.get_component_instance(
component, render=render, unrender=unrender
)
assert textbox.is_rendered == should_be_rendered
class TestNames:
# This test ensures that `components.get_component_instance()` works correctly when instantiating from components
def test_no_duplicate_uncased_names(self, io_components):
unique_subclasses_uncased = {s.__name__.lower() for s in io_components}
assert len(io_components) == len(unique_subclasses_uncased)
def test_dataframe_process_example_converts_dataframes():
df_comp = gr.Dataframe()
assert df_comp.process_example(
pd.DataFrame({"a": [1, 2, 3, 4], "b": [5, 6, 7, 8]})
) == [
[1, 5],
[2, 6],
[3, 7],
[4, 8],
]
assert df_comp.process_example(np.array([[1, 2], [3, 4.0]])) == [
[1.0, 2.0],
[3.0, 4.0],
]
@pytest.mark.parametrize("component", [gr.Model3D, gr.File, gr.Audio])
def test_process_example_returns_file_basename(component):
component = component()
assert (
component.process_example("/home/freddy/sources/example.ext") == "example.ext"
)
assert component.process_example(None) == ""
def test_component_class_ids():
button_id = gr.Button().component_class_id
textbox_id = gr.Textbox().component_class_id
json_id = gr.JSON().component_class_id
mic_id = gr.Mic().component_class_id
microphone_id = gr.Microphone().component_class_id
audio_id = gr.Audio().component_class_id
assert button_id == gr.Button().component_class_id
assert textbox_id == gr.Textbox().component_class_id
assert json_id == gr.JSON().component_class_id
assert mic_id == gr.Mic().component_class_id
assert microphone_id == gr.Microphone().component_class_id
assert audio_id == gr.Audio().component_class_id
assert mic_id == microphone_id
# Make sure that the ids are unique
assert len({button_id, textbox_id, json_id, microphone_id, audio_id}) == 5
def test_constructor_args():
assert gr.Textbox(max_lines=314).constructor_args == {"max_lines": 314}
assert gr.LoginButton(visible=False, value="Log in please").constructor_args == {
"visible": False,
"value": "Log in please",
}
def test_template_component_configs(io_components):
"""
This test ensures that every "template" (the classes defined in gradio/template.py)
has all of the arguments that its parent class has. E.g. the constructor of the `Sketchpad`
class should have all of the arguments that the constructor of `ImageEditor` has
"""
template_components = [c for c in io_components if getattr(c, "is_template", False)]
for component in template_components:
component_parent_class = inspect.getmro(component)[1]
template_config = component().get_config()
parent_config = component_parent_class().get_config()
assert set(parent_config.keys()).issubset(set(template_config.keys()))
def test_component_example_values(io_components):
for component in io_components:
if component == PDF:
continue
elif component in [gr.BarPlot, gr.LinePlot, gr.ScatterPlot]:
c: Component = component(x="x", y="y")
else:
c: Component = component()
c.postprocess(c.example_value())
def test_component_example_payloads(io_components):
for component in io_components:
if component == PDF:
continue
elif issubclass(component, gr.components.NativePlot):
c: Component = component(x="x", y="y")
elif component == gr.FileExplorer:
c: Component = component(root_dir="gradio")
else:
c: Component = component()
data = c.example_payload()
data = client_utils.synchronize_async(
processing_utils.async_move_files_to_cache,
data,
c,
check_in_upload_folder=False,
)
if getattr(c, "data_model", None) and data is not None:
if issubclass(c.data_model, GradioModel): # type: ignore
data = c.data_model(**data) # type: ignore
elif issubclass(c.data_model, GradioRootModel): # type: ignore
data = c.data_model(root=data) # type: ignore
c.preprocess(data) # type: ignore
|