HuggingFaceM4/IDEFICS_Data_Measurement_Tool
2
1import gradio as gr2 3from widgets.widget_base import Widget4from data_measurements.dataset_statistics import DatasetStatisticsCacheClass as dmt_cls5import utils6 7logs = utils.prepare_logging(__file__)8## possibyl looking for update()--> return output9 10class TextLengths(Widget):11 def __init__(self):12 self.text_length_distribution_plot = gr.Image(render=False)13 self.text_length_explainer = gr.Markdown(render=False)14 self.text_length_drop_down = gr.Dropdown(render=False)15 self.text_length_df = gr.DataFrame(render=False)16 17 def update_text_length_df(self, length, dstats):18 return dstats.length_obj.lengths_df[19 dstats.length_obj.lengths_df["length"] == length20 ].set_index("length")21 22 def render(self):23 with gr.TabItem("Text Lengths"):24 gr.Markdown(25 "Use this widget to identify outliers, particularly suspiciously long outliers."26 )27 gr.Markdown(28 "Below, you can see how the lengths of the text instances in your "29 "dataset are distributed."30 )31 gr.Markdown(32 "Any unexpected peaks or valleys in the distribution may help to "33 "identify instances you want to remove or augment."34 )35 gr.Markdown(36 "### Here is the count of different text lengths in " "your dataset:"37 )38 # When matplotlib first creates this, it's a Figure.39 # Once it's saved, then read back in,40 # it's an ndarray that must be displayed using st.image41 # (I know, lame).42 self.text_length_distribution_plot.render()43 self.text_length_explainer.render()44 self.text_length_drop_down.render()45 self.text_length_df.render()46 47 def update(self, dstats: dmt_cls):48 explainer_text = (49 "The average length of text instances is **"50 + str(round(dstats.length_obj.avg_length, 2))51 + " words**, with a standard deviation of **"52 + str(round(dstats.length_obj.std_length, 2))53 + "**."54 )55 # TODO: Add text on choosing the length you want to the dropdown.56 output = {57 self.text_length_distribution_plot: dstats.length_obj.fig_lengths,58 self.text_length_explainer: explainer_text,59 }60 if dstats.length_obj.lengths_df is not None:61 import numpy as np62 63 choices = np.sort(dstats.length_obj.lengths_df["length"].unique())[64 ::-165 ].tolist()66 output[self.text_length_drop_down] = gr.Dropdown.update(67 choices=choices, value=choices[0]68 )69 output[self.text_length_df] = self.update_text_length_df(choices[0], dstats)70 else:71 output[self.text_length_df] = gr.update(visible=False)72 output[self.text_length_drop_down] = gr.update(visible=False)73 return output74 75 @property76 def output_components(self):77 return [78 self.text_length_distribution_plot,79 self.text_length_explainer,80 self.text_length_drop_down,81 self.text_length_df,82 ]83 84 def add_events(self, state: gr.State):85 self.text_length_drop_down.change(86 self.update_text_length_df,87 inputs=[self.text_length_drop_down, state],88 outputs=[self.text_length_df],89 )90 