Skip to content

Commit 36b7bea

Browse files
Matteo-OmenettiMatteo-Omenetti
andauthored
feat: added pydantic models to store charts data (pie, bar, stacked bar, line, scatter) (#52)
* added pydantic models to store charts data (pie, bar, line) Signed-off-by: Matteo-Omenetti <[email protected]> * changed chart models hierarchy structure, added StackedBarChart class Signed-off-by: Matteo-Omenetti <[email protected]> * added scatter chart and addresed Peter's comments Signed-off-by: Matteo-Omenetti <[email protected]> * fixed names of classes Signed-off-by: Matteo-Omenetti <[email protected]> --------- Signed-off-by: Matteo-Omenetti <[email protected]> Co-authored-by: Matteo-Omenetti <[email protected]>
1 parent 00aab5b commit 36b7bea

File tree

2 files changed

+499
-1
lines changed

2 files changed

+499
-1
lines changed

docling_core/types/doc/document.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,166 @@ class PictureMiscData(BaseModel):
100100
content: Dict[str, Any]
101101

102102

103+
class ChartLine(BaseModel):
104+
"""Represents a line in a line chart.
105+
106+
Attributes:
107+
label (str): The label for the line.
108+
values (List[Tuple[float, float]]): A list of (x, y) coordinate pairs
109+
representing the line's data points.
110+
"""
111+
112+
label: str
113+
values: List[Tuple[float, float]]
114+
115+
116+
class ChartBar(BaseModel):
117+
"""Represents a bar in a bar chart.
118+
119+
Attributes:
120+
label (str): The label for the bar.
121+
values (float): The value associated with the bar.
122+
"""
123+
124+
label: str
125+
values: float
126+
127+
128+
class ChartStackedBar(BaseModel):
129+
"""Represents a stacked bar in a stacked bar chart.
130+
131+
Attributes:
132+
label (List[str]): The labels for the stacked bars. Multiple values are stored
133+
in cases where the chart is "double stacked," meaning bars are stacked both
134+
horizontally and vertically.
135+
values (List[Tuple[str, int]]): A list of values representing different segments
136+
of the stacked bar along with their label.
137+
"""
138+
139+
label: List[str]
140+
values: List[Tuple[str, int]]
141+
142+
143+
class ChartSlice(BaseModel):
144+
"""Represents a slice in a pie chart.
145+
146+
Attributes:
147+
label (str): The label for the slice.
148+
value (float): The value represented by the slice.
149+
"""
150+
151+
label: str
152+
value: float
153+
154+
155+
class ChartPoint(BaseModel):
156+
"""Represents a point in a scatter chart.
157+
158+
Attributes:
159+
value (Tuple[float, float]): A (x, y) coordinate pair representing a point in a
160+
chart.
161+
"""
162+
163+
value: Tuple[float, float]
164+
165+
166+
class PictureChartData(BaseModel):
167+
"""Base class for picture chart data.
168+
169+
Attributes:
170+
title (str): The title of the chart.
171+
"""
172+
173+
title: str
174+
175+
176+
class PictureLineChartData(PictureChartData):
177+
"""Represents data of a line chart.
178+
179+
Attributes:
180+
kind (Literal["line_chart_data"]): The type of the chart.
181+
x_axis_label (str): The label for the x-axis.
182+
y_axis_label (str): The label for the y-axis.
183+
lines (List[ChartLine]): A list of lines in the chart.
184+
"""
185+
186+
kind: Literal["line_chart_data"] = "line_chart_data"
187+
x_axis_label: str
188+
y_axis_label: str
189+
lines: List[ChartLine]
190+
191+
192+
class PictureBarChartData(PictureChartData):
193+
"""Represents data of a bar chart.
194+
195+
Attributes:
196+
kind (Literal["bar_chart_data"]): The type of the chart.
197+
x_axis_label (str): The label for the x-axis.
198+
y_axis_label (str): The label for the y-axis.
199+
bars (List[ChartBar]): A list of bars in the chart.
200+
"""
201+
202+
kind: Literal["bar_chart_data"] = "bar_chart_data"
203+
x_axis_label: str
204+
y_axis_label: str
205+
bars: List[ChartBar]
206+
207+
208+
class PictureStackedBarChartData(PictureChartData):
209+
"""Represents data of a stacked bar chart.
210+
211+
Attributes:
212+
kind (Literal["stacked_bar_chart_data"]): The type of the chart.
213+
x_axis_label (str): The label for the x-axis.
214+
y_axis_label (str): The label for the y-axis.
215+
stacked_bars (List[ChartStackedBar]): A list of stacked bars in the chart.
216+
"""
217+
218+
kind: Literal["stacked_bar_chart_data"] = "stacked_bar_chart_data"
219+
x_axis_label: str
220+
y_axis_label: str
221+
stacked_bars: List[ChartStackedBar]
222+
223+
224+
class PicturePieChartData(PictureChartData):
225+
"""Represents data of a pie chart.
226+
227+
Attributes:
228+
kind (Literal["pie_chart_data"]): The type of the chart.
229+
slices (List[ChartSlice]): A list of slices in the pie chart.
230+
"""
231+
232+
kind: Literal["pie_chart_data"] = "pie_chart_data"
233+
slices: List[ChartSlice]
234+
235+
236+
class PictureScatterChartData(PictureChartData):
237+
"""Represents data of a scatter chart.
238+
239+
Attributes:
240+
kind (Literal["scatter_chart_data"]): The type of the chart.
241+
x_axis_label (str): The label for the x-axis.
242+
y_axis_label (str): The label for the y-axis.
243+
points (List[ChartPoint]): A list of points in the scatter chart.
244+
"""
245+
246+
kind: Literal["scatter_chart_data"] = "scatter_chart_data"
247+
x_axis_label: str
248+
y_axis_label: str
249+
points: List[ChartPoint]
250+
251+
103252
PictureDataType = Annotated[
104253
Union[
105254
PictureClassificationData,
106255
PictureDescriptionData,
107256
PictureMoleculeData,
108257
PictureMiscData,
258+
PictureLineChartData,
259+
PictureBarChartData,
260+
PictureStackedBarChartData,
261+
PicturePieChartData,
262+
PictureScatterChartData,
109263
],
110264
Field(discriminator="kind"),
111265
]

0 commit comments

Comments
 (0)