mirror of
https://github.com/gradio-app/gradio.git
synced 2025-01-30 11:00:11 +08:00
Blocks-Components
- move Timeseries component
This commit is contained in:
parent
fbca310ccb
commit
7c50d2600d
@ -1857,3 +1857,92 @@ class Dataframe(Component):
|
|||||||
+ self.type
|
+ self.type
|
||||||
+ ". Please choose from: 'pandas', 'numpy', 'array'."
|
+ ". Please choose from: 'pandas', 'numpy', 'array'."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Timeseries(Component):
|
||||||
|
"""
|
||||||
|
Component accepts pandas.DataFrame uploaded as a timeseries csv file or as an output.
|
||||||
|
|
||||||
|
Input type: pandas.DataFrame
|
||||||
|
Output type: pandas.DataFrame
|
||||||
|
Demos: fraud_detector
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
default=None,
|
||||||
|
*,
|
||||||
|
x: Optional[str] = None,
|
||||||
|
y: str | List[str] = None,
|
||||||
|
label: Optional[str] = None,
|
||||||
|
**kwargs,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Parameters:
|
||||||
|
default: IGNORED
|
||||||
|
x (str): Column name of x (time) series. None if csv has no headers, in which case first column is x series.
|
||||||
|
y (Union[str, List[str]]): Column name of y series, or list of column names if multiple series. None if csv has no headers, in which case every column after first is a y series.
|
||||||
|
label (str): component name in interface.
|
||||||
|
"""
|
||||||
|
self.x = x
|
||||||
|
if isinstance(y, str):
|
||||||
|
y = [y]
|
||||||
|
self.y = y
|
||||||
|
super().__init__(label=label, **kwargs)
|
||||||
|
|
||||||
|
def get_template_context(self):
|
||||||
|
return {
|
||||||
|
"x": self.x,
|
||||||
|
"y": self.y,
|
||||||
|
**super().get_template_context(),
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_shortcut_implementations(cls):
|
||||||
|
return {
|
||||||
|
"timeseries": {},
|
||||||
|
}
|
||||||
|
|
||||||
|
def preprocess_example(self, x):
|
||||||
|
return {"name": x, "is_example": True}
|
||||||
|
|
||||||
|
def preprocess(self, x: Dict | None) -> pd.DataFrame | None:
|
||||||
|
"""
|
||||||
|
Parameters:
|
||||||
|
x (Dict[data: List[List[Union[str, number, bool]]], headers: List[str], range: List[number]]): Dict with keys 'data': 2D array of str, numeric, or bool data, 'headers': list of strings for header names, 'range': optional two element list designating start of end of subrange.
|
||||||
|
Returns:
|
||||||
|
(pandas.DataFrame): Dataframe of timeseries data
|
||||||
|
"""
|
||||||
|
if x is None:
|
||||||
|
return x
|
||||||
|
elif x.get("is_example"):
|
||||||
|
dataframe = pd.read_csv(x["name"])
|
||||||
|
else:
|
||||||
|
dataframe = pd.DataFrame(data=x["data"], columns=x["headers"])
|
||||||
|
if x.get("range") is not None:
|
||||||
|
dataframe = dataframe.loc[dataframe[self.x or 0] >= x["range"][0]]
|
||||||
|
dataframe = dataframe.loc[dataframe[self.x or 0] <= x["range"][1]]
|
||||||
|
return dataframe
|
||||||
|
|
||||||
|
def save_flagged(self, dir, label, data, encryption_key):
|
||||||
|
"""
|
||||||
|
Returns: (List[List[Union[str, float]]]) 2D array
|
||||||
|
"""
|
||||||
|
return json.dumps(data)
|
||||||
|
|
||||||
|
def restore_flagged(self, dir, data, encryption_key):
|
||||||
|
return json.loads(data)
|
||||||
|
|
||||||
|
def generate_sample(self):
|
||||||
|
return {"data": [[1] + [2] * len(self.y)] * 4, "headers": [self.x] + self.y}
|
||||||
|
|
||||||
|
# Output Functionalities
|
||||||
|
|
||||||
|
def postprocess(self, y):
|
||||||
|
"""
|
||||||
|
Parameters:
|
||||||
|
y (pandas.DataFrame): timeseries data
|
||||||
|
Returns:
|
||||||
|
(Dict[headers: List[str], data: List[List[Union[str, number]]]]): JSON object with key 'headers' for list of header names, 'data' for 2D array of string or numeric data
|
||||||
|
"""
|
||||||
|
return {"headers": y.columns.values.tolist(), "data": y.values.tolist()}
|
||||||
|
108
gradio/inputs.py
108
gradio/inputs.py
@ -31,6 +31,7 @@ from gradio.components import (
|
|||||||
Radio,
|
Radio,
|
||||||
Slider,
|
Slider,
|
||||||
Textbox,
|
Textbox,
|
||||||
|
Timeseries,
|
||||||
)
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING: # Only import for type checking (is False at runtime).
|
if TYPE_CHECKING: # Only import for type checking (is False at runtime).
|
||||||
@ -421,6 +422,10 @@ class Dataframe(Dataframe):
|
|||||||
label (str): component name in interface.
|
label (str): component name in interface.
|
||||||
optional (bool): this parameter is ignored.
|
optional (bool): this parameter is ignored.
|
||||||
"""
|
"""
|
||||||
|
warnings.warn(
|
||||||
|
"Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your components from gradio.components",
|
||||||
|
DeprecationWarning,
|
||||||
|
)
|
||||||
super().__init__(
|
super().__init__(
|
||||||
headers=headers,
|
headers=headers,
|
||||||
row_count=row_count,
|
row_count=row_count,
|
||||||
@ -434,6 +439,34 @@ class Dataframe(Dataframe):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Timeseries(Timeseries):
|
||||||
|
"""
|
||||||
|
Component accepts pandas.DataFrame uploaded as a timeseries csv file.
|
||||||
|
Input type: pandas.DataFrame
|
||||||
|
Demos: fraud_detector
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
x: Optional[str] = None,
|
||||||
|
y: str | List[str] = None,
|
||||||
|
label: Optional[str] = None,
|
||||||
|
optional: bool = False,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Parameters:
|
||||||
|
x (str): Column name of x (time) series. None if csv has no headers, in which case first column is x series.
|
||||||
|
y (Union[str, List[str]]): Column name of y series, or list of column names if multiple series. None if csv has no headers, in which case every column after first is a y series.
|
||||||
|
label (str): component name in interface.
|
||||||
|
optional (bool): If True, the interface can be submitted with no uploaded csv file, in which case the input value is None.
|
||||||
|
"""
|
||||||
|
warnings.warn(
|
||||||
|
"Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your components from gradio.components",
|
||||||
|
DeprecationWarning,
|
||||||
|
)
|
||||||
|
super().__init__(x=x, y=y, label=label, optional=optional)
|
||||||
|
|
||||||
|
|
||||||
class InputComponent(Component):
|
class InputComponent(Component):
|
||||||
"""
|
"""
|
||||||
Input Component. All input components subclass this.
|
Input Component. All input components subclass this.
|
||||||
@ -517,81 +550,6 @@ class InputComponent(Component):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Timeseries(InputComponent):
|
|
||||||
"""
|
|
||||||
Component accepts pandas.DataFrame uploaded as a timeseries csv file.
|
|
||||||
Input type: pandas.DataFrame
|
|
||||||
Demos: fraud_detector
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
x: Optional[str] = None,
|
|
||||||
y: str | List[str] = None,
|
|
||||||
label: Optional[str] = None,
|
|
||||||
optional: bool = False,
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
Parameters:
|
|
||||||
x (str): Column name of x (time) series. None if csv has no headers, in which case first column is x series.
|
|
||||||
y (Union[str, List[str]]): Column name of y series, or list of column names if multiple series. None if csv has no headers, in which case every column after first is a y series.
|
|
||||||
label (str): component name in interface.
|
|
||||||
optional (bool): If True, the interface can be submitted with no uploaded csv file, in which case the input value is None.
|
|
||||||
"""
|
|
||||||
self.x = x
|
|
||||||
if isinstance(y, str):
|
|
||||||
y = [y]
|
|
||||||
self.y = y
|
|
||||||
super().__init__(label, optional=optional)
|
|
||||||
|
|
||||||
def get_template_context(self):
|
|
||||||
return {
|
|
||||||
"x": self.x,
|
|
||||||
"y": self.y,
|
|
||||||
"optional": self.optional,
|
|
||||||
**super().get_template_context(),
|
|
||||||
}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_shortcut_implementations(cls):
|
|
||||||
return {
|
|
||||||
"timeseries": {},
|
|
||||||
}
|
|
||||||
|
|
||||||
def preprocess_example(self, x):
|
|
||||||
return {"name": x, "is_example": True}
|
|
||||||
|
|
||||||
def preprocess(self, x: Dict | None) -> pd.DataFrame | None:
|
|
||||||
"""
|
|
||||||
Parameters:
|
|
||||||
x (Dict[data: List[List[Union[str, number, bool]]], headers: List[str], range: List[number]]): Dict with keys 'data': 2D array of str, numeric, or bool data, 'headers': list of strings for header names, 'range': optional two element list designating start of end of subrange.
|
|
||||||
Returns:
|
|
||||||
(pandas.DataFrame): Dataframe of timeseries data
|
|
||||||
"""
|
|
||||||
if x is None:
|
|
||||||
return x
|
|
||||||
elif x.get("is_example"):
|
|
||||||
dataframe = pd.read_csv(x["name"])
|
|
||||||
else:
|
|
||||||
dataframe = pd.DataFrame(data=x["data"], columns=x["headers"])
|
|
||||||
if x.get("range") is not None:
|
|
||||||
dataframe = dataframe.loc[dataframe[self.x or 0] >= x["range"][0]]
|
|
||||||
dataframe = dataframe.loc[dataframe[self.x or 0] <= x["range"][1]]
|
|
||||||
return dataframe
|
|
||||||
|
|
||||||
def save_flagged(self, dir, label, data, encryption_key):
|
|
||||||
"""
|
|
||||||
Returns: (List[List[Union[str, float]]]) 2D array
|
|
||||||
"""
|
|
||||||
return json.dumps(data)
|
|
||||||
|
|
||||||
def restore_flagged(self, dir, data, encryption_key):
|
|
||||||
return json.loads(data)
|
|
||||||
|
|
||||||
def generate_sample(self):
|
|
||||||
return {"data": [[1] + [2] * len(self.y)] * 4, "headers": [self.x] + self.y}
|
|
||||||
|
|
||||||
|
|
||||||
class State(InputComponent):
|
class State(InputComponent):
|
||||||
"""
|
"""
|
||||||
Special hidden component that stores state across runs of the interface.
|
Special hidden component that stores state across runs of the interface.
|
||||||
|
@ -21,7 +21,16 @@ import PIL
|
|||||||
from ffmpy import FFmpeg
|
from ffmpy import FFmpeg
|
||||||
|
|
||||||
from gradio import processing_utils
|
from gradio import processing_utils
|
||||||
from gradio.components import Audio, Component, Dataframe, File, Image, Textbox, Video
|
from gradio.components import (
|
||||||
|
Audio,
|
||||||
|
Component,
|
||||||
|
Dataframe,
|
||||||
|
File,
|
||||||
|
Image,
|
||||||
|
Textbox,
|
||||||
|
Timeseries,
|
||||||
|
Video,
|
||||||
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING: # Only import for type checking (is False at runtime).
|
if TYPE_CHECKING: # Only import for type checking (is False at runtime).
|
||||||
from gradio import Interface
|
from gradio import Interface
|
||||||
@ -163,6 +172,29 @@ class Dataframe(Dataframe):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Timeseries(Timeseries):
|
||||||
|
"""
|
||||||
|
Component accepts pandas.DataFrame.
|
||||||
|
Output type: pandas.DataFrame
|
||||||
|
Demos: fraud_detector
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, x: str = None, y: str | List[str] = None, label: Optional[str] = None
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Parameters:
|
||||||
|
x (str): Column name of x (time) series. None if csv has no headers, in which case first column is x series.
|
||||||
|
y (Union[str, List[str]]): Column name of y series, or list of column names if multiple series. None if csv has no headers, in which case every column after first is a y series.
|
||||||
|
label (str): component name in interface.
|
||||||
|
"""
|
||||||
|
warnings.warn(
|
||||||
|
"Usage of gradio.outputs is deprecated, and will not be supported in the future, please import your components from gradio.components",
|
||||||
|
DeprecationWarning,
|
||||||
|
)
|
||||||
|
super().__init__(x=x, y=y, label=label)
|
||||||
|
|
||||||
|
|
||||||
class OutputComponent(Component):
|
class OutputComponent(Component):
|
||||||
"""
|
"""
|
||||||
Output Component. All output components subclass this.
|
Output Component. All output components subclass this.
|
||||||
@ -529,56 +561,6 @@ class Carousel(OutputComponent):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class Timeseries(OutputComponent):
|
|
||||||
"""
|
|
||||||
Component accepts pandas.DataFrame.
|
|
||||||
Output type: pandas.DataFrame
|
|
||||||
Demos: fraud_detector
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self, x: str = None, y: str | List[str] = None, label: Optional[str] = None
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
Parameters:
|
|
||||||
x (str): Column name of x (time) series. None if csv has no headers, in which case first column is x series.
|
|
||||||
y (Union[str, List[str]]): Column name of y series, or list of column names if multiple series. None if csv has no headers, in which case every column after first is a y series.
|
|
||||||
label (str): component name in interface.
|
|
||||||
"""
|
|
||||||
self.x = x
|
|
||||||
if isinstance(y, str):
|
|
||||||
y = [y]
|
|
||||||
self.y = y
|
|
||||||
super().__init__(label)
|
|
||||||
|
|
||||||
def get_template_context(self):
|
|
||||||
return {"x": self.x, "y": self.y, **super().get_template_context()}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_shortcut_implementations(cls):
|
|
||||||
return {
|
|
||||||
"timeseries": {},
|
|
||||||
}
|
|
||||||
|
|
||||||
def postprocess(self, y):
|
|
||||||
"""
|
|
||||||
Parameters:
|
|
||||||
y (pandas.DataFrame): timeseries data
|
|
||||||
Returns:
|
|
||||||
(Dict[headers: List[str], data: List[List[Union[str, number]]]]): JSON object with key 'headers' for list of header names, 'data' for 2D array of string or numeric data
|
|
||||||
"""
|
|
||||||
return {"headers": y.columns.values.tolist(), "data": y.values.tolist()}
|
|
||||||
|
|
||||||
def save_flagged(self, dir, label, data, encryption_key):
|
|
||||||
"""
|
|
||||||
Returns: (List[List[Union[str, float]]]) 2D array
|
|
||||||
"""
|
|
||||||
return json.dumps(data)
|
|
||||||
|
|
||||||
def restore_flagged(self, dir, data, encryption_key):
|
|
||||||
return json.loads(data)
|
|
||||||
|
|
||||||
|
|
||||||
class Chatbot(OutputComponent):
|
class Chatbot(OutputComponent):
|
||||||
"""
|
"""
|
||||||
Component displays a chatbot output showing both user submitted messages and responses
|
Component displays a chatbot output showing both user submitted messages and responses
|
||||||
|
Loading…
Reference in New Issue
Block a user