gradio/test/test_inputs.py
2021-10-13 22:21:34 -05:00

171 lines
6.6 KiB
Python

from re import sub
import unittest
import gradio as gr
import PIL
import numpy as np
from pydub import AudioSegment
import os
class TestTextbox(unittest.TestCase):
def test_in_interface(self):
iface = gr.Interface(lambda x: x[::-1], "textbox", "textbox")
self.assertEqual(iface.process(["Hello"])[0], ["olleH"])
class TestNumber(unittest.TestCase):
def test_in_interface(self):
iface = gr.Interface(lambda x: x[::-1], "textbox", "textbox")
self.assertEqual(iface.process(["Hello"])[0], ["olleH"])
iface = gr.Interface(lambda x: x*x, "number", "number")
self.assertEqual(iface.process([5])[0], [25])
class TestSlider(unittest.TestCase):
def test_in_interface(self):
iface = gr.Interface(lambda x: str(x) + " cats", "slider", "textbox")
self.assertEqual(iface.process([4])[0], ["4 cats"])
class TestCheckbox(unittest.TestCase):
def test_in_interface(self):
iface = gr.Interface(lambda x: "yes" if x else "no", "checkbox", "textbox")
self.assertEqual(iface.process([False])[0], ["no"])
class TestCheckboxGroup(unittest.TestCase):
def test_in_interface(self):
checkboxes = gr.inputs.CheckboxGroup(["a", "b", "c"])
iface = gr.Interface(lambda x: "|".join(x), checkboxes, "textbox")
self.assertEqual(iface.process([["a", "c"]])[0], ["a|c"])
self.assertEqual(iface.process([[]])[0], [""])
checkboxes = gr.inputs.CheckboxGroup(["a", "b", "c"], type="index")
iface = gr.Interface(lambda x: "|".join(map(str, x)), checkboxes, "textbox")
self.assertEqual(iface.process([["a", "c"]])[0], ["0|2"])
class TestRadio(unittest.TestCase):
def test_in_interface(self):
radio = gr.inputs.Radio(["a", "b", "c"])
iface = gr.Interface(lambda x: 2 * x, radio, "textbox")
self.assertEqual(iface.process(["c"])[0], ["cc"])
radio = gr.inputs.Radio(["a", "b", "c"], type="index")
iface = gr.Interface(lambda x: 2 * x, radio, "number")
self.assertEqual(iface.process(["c"])[0], [4])
class TestDropdown(unittest.TestCase):
def test_in_interface(self):
dropdown = gr.inputs.Dropdown(["a", "b", "c"])
iface = gr.Interface(lambda x: 2 * x, dropdown, "textbox")
self.assertEqual(iface.process(["c"])[0], ["cc"])
dropdown = gr.inputs.Dropdown(["a", "b", "c"], type="index")
iface = gr.Interface(lambda x: 2 * x, dropdown, "number")
self.assertEqual(iface.process(["c"])[0], [4])
class TestImage(unittest.TestCase):
def test_as_component(self):
x_img = gr.test_data.BASE64_IMAGE
image_input = gr.inputs.Image()
self.assertEqual(image_input.preprocess(x_img).shape, (68, 61 ,3))
image_input = gr.inputs.Image(image_mode="L", shape=(25, 25))
self.assertEqual(image_input.preprocess(x_img).shape, (25, 25))
image_input = gr.inputs.Image(shape=(30, 10), type="pil")
self.assertEqual(image_input.preprocess(x_img).size, (30, 10))
def test_in_interface(self):
x_img = gr.test_data.BASE64_IMAGE
def open_and_rotate(img_file):
img = PIL.Image.open(img_file)
return img.rotate(90, expand=True)
iface = gr.Interface(
open_and_rotate,
gr.inputs.Image(shape=(30, 10), type="file"),
"image")
output = iface.process([x_img])[0][0][0]
self.assertEqual(gr.processing_utils.decode_base64_to_image(output).size, (10, 30))
class TestAudio(unittest.TestCase):
def test_as_component(self):
x_wav = {"name": "sample.wav", "data": gr.test_data.BASE64_AUDIO, "is_example": False}
audio_input = gr.inputs.Audio()
output = audio_input.preprocess(x_wav)
self.assertEqual(output[0], 8000)
self.assertEqual(output[1].shape, (8046,))
def test_in_interface(self):
x_wav = {"name": "sample.wav", "data": gr.test_data.BASE64_AUDIO, "is_example": False}
def max_amplitude_from_wav_file(wav_file):
audio_segment = AudioSegment.from_file(wav_file.name)
data = np.array(audio_segment.get_array_of_samples())
return np.max(data)
iface = gr.Interface(
max_amplitude_from_wav_file,
gr.inputs.Audio(type="file"),
"number")
self.assertEqual(iface.process([x_wav])[0], [5239])
class TestFile(unittest.TestCase):
def test_in_interface(self):
x_file = {
"name": "audio.wav",
"data": gr.test_data.BASE64_AUDIO,
"is_example": False
}
def get_size_of_file(file_obj):
return os.path.getsize(file_obj.name)
iface = gr.Interface(
get_size_of_file, "file", "number")
self.assertEqual(iface.process([[x_file]])[0], [16362])
class TestDataframe(unittest.TestCase):
def test_as_component(self):
x_data = [["Tim",12,False],["Jan",24,True]]
dataframe_input = gr.inputs.Dataframe(headers=["Name","Age","Member"])
output = dataframe_input.preprocess(x_data)
self.assertEqual(output["Age"][1], 24)
self.assertEqual(output["Member"][0], False)
def test_in_interface(self):
x_data = [[1,2,3],[4,5,6]]
iface = gr.Interface(np.max, "numpy", "number")
self.assertEqual(iface.process([x_data])[0], [6])
x_data = [["Tim"], ["Jon"], ["Sal"]]
def get_last(l):
return l[-1]
iface = gr.Interface(get_last, "list", "text")
self.assertEqual(iface.process([x_data])[0], ["Sal"])
class TestSequential(unittest.TestCase):
def test_as_component(self):
x_data = [["Tim",12,False],["Jan",24,True]]
dataframe_input = gr.inputs.Dataframe(headers=["Name","Age","Member"])
output = dataframe_input.preprocess(x_data)
self.assertEqual(output["Age"][1], 24)
self.assertEqual(output["Member"][0], False)
def test_in_interface(self):
x_data = [[1,2,3],[4,5,6]]
iface = gr.Interface(np.max, "numpy", "number")
self.assertEqual(iface.process([x_data])[0], [6])
x_data = [["Tim"], ["Jon"], ["Sal"]]
def get_last(l):
return l[-1]
iface = gr.Interface(get_last, "list", "text")
self.assertEqual(iface.process([x_data])[0], ["Sal"])
class TestNames(unittest.TestCase):
def test_no_duplicate_uncased_names(self): # this ensures that get_input_instance() works correctly when instantiating from components
subclasses = gr.inputs.InputComponent.__subclasses__()
unique_subclasses_uncased = set([s.__name__.lower() for s in subclasses])
self.assertEqual(len(subclasses), len(unique_subclasses_uncased))
if __name__ == '__main__':
unittest.main()