diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 1cd08f2c..531ec8dd 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Install tesseract
- run: sudo apt-get update && sudo apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa libleptonica-dev libtesseract-dev pkg-config
+ run: sudo apt-get update && sudo apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa tesseract-ocr-script-latn libleptonica-dev libtesseract-dev pkg-config
- name: Set TESSDATA_PREFIX
run: |
echo "TESSDATA_PREFIX=$(dpkg -L tesseract-ocr-eng | grep tessdata$)" >> "$GITHUB_ENV"
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 2733b522..0fc3ac7a 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -14,7 +14,10 @@ jobs:
- uses: ./.github/actions/setup-poetry
- name: Build docs
run: poetry run mkdocs build --verbose --clean
+ - name: Make docs LLM ready
+ if: inputs.deploy
+ uses: demodrive-ai/llms-txt-action@ad720693843126e6a73910a667d0eba37c1dea4b
- name: Build and push docs
if: inputs.deploy
- run: poetry run mkdocs gh-deploy --force
-
\ No newline at end of file
+ run: poetry run mkdocs gh-deploy --force --dirty
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 64790b61..21882618 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,36 @@
+## [v2.15.1](https://github.com/DS4SD/docling/releases/tag/v2.15.1) - 2025-01-10
+
+### Fix
+
+* Improve OCR results, stricten criteria before dropping bitmap areas ([#719](https://github.com/DS4SD/docling/issues/719)) ([`5a060f2`](https://github.com/DS4SD/docling/commit/5a060f237d1decd0ff9db9e73478978419315778))
+* Allow earlier requests versions ([#716](https://github.com/DS4SD/docling/issues/716)) ([`e64b5a2`](https://github.com/DS4SD/docling/commit/e64b5a2f628acc340a6d94ee6f1ada2aa267cecc))
+
+### Documentation
+
+* Add pointers to LangChain-side docs ([#718](https://github.com/DS4SD/docling/issues/718)) ([`9a6b5c8`](https://github.com/DS4SD/docling/commit/9a6b5c8c8debc81e0ddcbe91df6afbbeb29e97e6))
+* Add LangChain docs ([#717](https://github.com/DS4SD/docling/issues/717)) ([`4fa8028`](https://github.com/DS4SD/docling/commit/4fa8028bd8120d7557e1d45ba31e200e130af698))
+
+## [v2.15.0](https://github.com/DS4SD/docling/releases/tag/v2.15.0) - 2025-01-08
+
+### Feature
+
+* Added http header support for document converter and cli ([#642](https://github.com/DS4SD/docling/issues/642)) ([`0ee849e`](https://github.com/DS4SD/docling/commit/0ee849e8bc8cf24d1c5597af3fe20a7fa19a29e0))
+
+### Fix
+
+* Correct scaling of debug visualizations, tune OCR ([#700](https://github.com/DS4SD/docling/issues/700)) ([`5cb4cf6`](https://github.com/DS4SD/docling/commit/5cb4cf6f19f91e6c87141e93400c4b54b93aa5d7))
+* Let BeautifulSoup detect the HTML encoding ([#695](https://github.com/DS4SD/docling/issues/695)) ([`42856fd`](https://github.com/DS4SD/docling/commit/42856fdf79559188ec4617bc5d3a007286f114d2))
+* **mspowerpoint:** Handle invalid images in PowerPoint slides ([#650](https://github.com/DS4SD/docling/issues/650)) ([`d49650c`](https://github.com/DS4SD/docling/commit/d49650c54ffa60bc6d6106970e104071689bc7b0))
+
+### Documentation
+
+* Specify docstring types ([#702](https://github.com/DS4SD/docling/issues/702)) ([`ead396a`](https://github.com/DS4SD/docling/commit/ead396ab407f6bbd43176abd6ed2bed7ed8c7c43))
+* Add link to rag with granite ([#698](https://github.com/DS4SD/docling/issues/698)) ([`6701f34`](https://github.com/DS4SD/docling/commit/6701f34c855992c52918b210c65a2edb1c827c01))
+* Add integrations, revamp docs ([#693](https://github.com/DS4SD/docling/issues/693)) ([`2d24fae`](https://github.com/DS4SD/docling/commit/2d24faecd96bfa656b2b8c80f25cdf251a50526a))
+* Add OpenContracts as an integration ([#679](https://github.com/DS4SD/docling/issues/679)) ([`569038d`](https://github.com/DS4SD/docling/commit/569038df4205703f87517ea58da7902d143e7699))
+* Add Weaviate RAG recipe notebook ([#451](https://github.com/DS4SD/docling/issues/451)) ([`2b591f9`](https://github.com/DS4SD/docling/commit/2b591f98726ed0d883236dd0550201b95203eebb))
+* Document Haystack & Vectara support ([#628](https://github.com/DS4SD/docling/issues/628)) ([`fc645ea`](https://github.com/DS4SD/docling/commit/fc645ea531ddc67959640b428007851d641c923e))
+
## [v2.14.0](https://github.com/DS4SD/docling/releases/tag/v2.14.0) - 2024-12-18
### Feature
diff --git a/README.md b/README.md
index 98222f83..78acb592 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ Docling parses documents and exports them to the desired format with ease and sp
* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to HTML, Markdown and JSON (with embedded and referenced images)
* 📑 Advanced PDF document understanding including page layout, reading order & table structures
* 🧩 Unified, expressive [DoclingDocument](https://ds4sd.github.io/docling/concepts/docling_document/) representation format
-* 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications
+* 🤖 Plug-and-play [integrations](https://ds4sd.github.io/docling/integrations/) incl. LangChain, LlamaIndex, Crew AI & Haystack for agentic AI
* 🔍 OCR support for scanned PDFs
* 💻 Simple and convenient CLI
@@ -39,7 +39,6 @@ Explore the [documentation](https://ds4sd.github.io/docling/) to discover plenty
* ♾️ Equation & code extraction
* 📝 Metadata extraction, including title, authors, references & language
-* 🦜🔗 Native LangChain extension
## Installation
diff --git a/docling/backend/asciidoc_backend.py b/docling/backend/asciidoc_backend.py
index 829419af..397bfc44 100644
--- a/docling/backend/asciidoc_backend.py
+++ b/docling/backend/asciidoc_backend.py
@@ -24,7 +24,6 @@
class AsciiDocBackend(DeclarativeDocumentBackend):
-
def __init__(self, in_doc: InputDocument, path_or_stream: Union[BytesIO, Path]):
super().__init__(in_doc, path_or_stream)
diff --git a/docling/backend/docling_parse_backend.py b/docling/backend/docling_parse_backend.py
index bb1fe058..6d22127b 100644
--- a/docling/backend/docling_parse_backend.py
+++ b/docling/backend/docling_parse_backend.py
@@ -132,7 +132,7 @@ def draw_clusters_and_cells():
return cells
def get_bitmap_rects(self, scale: float = 1) -> Iterable[BoundingBox]:
- AREA_THRESHOLD = 32 * 32
+ AREA_THRESHOLD = 0 # 32 * 32
for i in range(len(self._dpage["images"])):
bitmap = self._dpage["images"][i]
@@ -163,7 +163,7 @@ def get_page_image(
l=0, r=0, t=0, b=0, coord_origin=CoordOrigin.BOTTOMLEFT
)
else:
- padbox = cropbox.to_bottom_left_origin(page_size.height)
+ padbox = cropbox.to_bottom_left_origin(page_size.height).model_copy()
padbox.r = page_size.width - padbox.r
padbox.t = page_size.height - padbox.t
diff --git a/docling/backend/docling_parse_v2_backend.py b/docling/backend/docling_parse_v2_backend.py
index 12d7df55..27a368f9 100644
--- a/docling/backend/docling_parse_v2_backend.py
+++ b/docling/backend/docling_parse_v2_backend.py
@@ -140,7 +140,7 @@ def draw_clusters_and_cells():
return cells
def get_bitmap_rects(self, scale: float = 1) -> Iterable[BoundingBox]:
- AREA_THRESHOLD = 32 * 32
+ AREA_THRESHOLD = 0 # 32 * 32
images = self._dpage["sanitized"]["images"]["data"]
images_header = self._dpage["sanitized"]["images"]["header"]
@@ -178,7 +178,7 @@ def get_page_image(
l=0, r=0, t=0, b=0, coord_origin=CoordOrigin.BOTTOMLEFT
)
else:
- padbox = cropbox.to_bottom_left_origin(page_size.height)
+ padbox = cropbox.to_bottom_left_origin(page_size.height).model_copy()
padbox.r = page_size.width - padbox.r
padbox.t = page_size.height - padbox.t
diff --git a/docling/backend/html_backend.py b/docling/backend/html_backend.py
index 9cd1e29b..66dd4a2c 100644
--- a/docling/backend/html_backend.py
+++ b/docling/backend/html_backend.py
@@ -37,10 +37,10 @@ def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]
try:
if isinstance(self.path_or_stream, BytesIO):
- text_stream = self.path_or_stream.getvalue().decode("utf-8")
+ text_stream = self.path_or_stream.getvalue()
self.soup = BeautifulSoup(text_stream, "html.parser")
if isinstance(self.path_or_stream, Path):
- with open(self.path_or_stream, "r", encoding="utf-8") as f:
+ with open(self.path_or_stream, "rb") as f:
html_content = f.read()
self.soup = BeautifulSoup(html_content, "html.parser")
except Exception as e:
@@ -215,7 +215,7 @@ def handle_code(self, element, idx, doc):
label = DocItemLabel.CODE
if len(text) == 0:
return
- doc.add_text(parent=self.parents[self.level], label=label, text=text)
+ doc.add_code(parent=self.parents[self.level], label=label, text=text)
def handle_paragraph(self, element, idx, doc):
"""Handles paragraph tags (p)."""
diff --git a/docling/backend/md_backend.py b/docling/backend/md_backend.py
index 2bcc6d7d..8171085c 100644
--- a/docling/backend/md_backend.py
+++ b/docling/backend/md_backend.py
@@ -3,19 +3,22 @@
import warnings
from io import BytesIO
from pathlib import Path
-from typing import Set, Union
+from typing import List, Optional, Set, Union
import marko
import marko.ext
import marko.ext.gfm
import marko.inline
from docling_core.types.doc import (
+ DocItem,
DocItemLabel,
DoclingDocument,
DocumentOrigin,
GroupLabel,
+ NodeItem,
TableCell,
TableData,
+ TextItem,
)
from marko import Markdown
@@ -27,8 +30,7 @@
class MarkdownDocumentBackend(DeclarativeDocumentBackend):
-
- def shorten_underscore_sequences(self, markdown_text, max_length=10):
+ def shorten_underscore_sequences(self, markdown_text: str, max_length: int = 10):
# This regex will match any sequence of underscores
pattern = r"_+"
@@ -90,13 +92,13 @@ def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]
) from e
return
- def close_table(self, doc=None):
+ def close_table(self, doc: DoclingDocument):
if self.in_table:
_log.debug("=== TABLE START ===")
for md_table_row in self.md_table_buffer:
_log.debug(md_table_row)
_log.debug("=== TABLE END ===")
- tcells = []
+ tcells: List[TableCell] = []
result_table = []
for n, md_table_row in enumerate(self.md_table_buffer):
data = []
@@ -137,15 +139,19 @@ def close_table(self, doc=None):
self.in_table = False
self.md_table_buffer = [] # clean table markdown buffer
# Initialize Docling TableData
- data = TableData(num_rows=num_rows, num_cols=num_cols, table_cells=tcells)
+ table_data = TableData(
+ num_rows=num_rows, num_cols=num_cols, table_cells=tcells
+ )
# Populate
for tcell in tcells:
- data.table_cells.append(tcell)
+ table_data.table_cells.append(tcell)
if len(tcells) > 0:
- doc.add_table(data=data)
+ doc.add_table(data=table_data)
return
- def process_inline_text(self, parent_element, doc=None):
+ def process_inline_text(
+ self, parent_element: Optional[NodeItem], doc: DoclingDocument
+ ):
# self.inline_text_buffer += str(text_in)
txt = self.inline_text_buffer.strip()
if len(txt) > 0:
@@ -156,14 +162,20 @@ def process_inline_text(self, parent_element, doc=None):
)
self.inline_text_buffer = ""
- def iterate_elements(self, element, depth=0, doc=None, parent_element=None):
+ def iterate_elements(
+ self,
+ element: marko.block.Element,
+ depth: int,
+ doc: DoclingDocument,
+ parent_element: Optional[NodeItem] = None,
+ ):
# Iterates over all elements in the AST
# Check for different element types and process relevant details
if isinstance(element, marko.block.Heading):
self.close_table(doc)
self.process_inline_text(parent_element, doc)
_log.debug(
- f" - Heading level {element.level}, content: {element.children[0].children}"
+ f" - Heading level {element.level}, content: {element.children[0].children}" # type: ignore
)
if element.level == 1:
doc_label = DocItemLabel.TITLE
@@ -172,10 +184,10 @@ def iterate_elements(self, element, depth=0, doc=None, parent_element=None):
# Header could have arbitrary inclusion of bold, italic or emphasis,
# hence we need to traverse the tree to get full text of a header
- strings = []
+ strings: List[str] = []
# Define a recursive function to traverse the tree
- def traverse(node):
+ def traverse(node: marko.block.BlockElement):
# Check if the node has a "children" attribute
if hasattr(node, "children"):
# If "children" is a list, continue traversal
@@ -209,9 +221,13 @@ def traverse(node):
self.process_inline_text(parent_element, doc)
_log.debug(" - List item")
- snippet_text = str(element.children[0].children[0].children)
+ snippet_text = str(element.children[0].children[0].children) # type: ignore
is_numbered = False
- if parent_element.label == GroupLabel.ORDERED_LIST:
+ if (
+ parent_element is not None
+ and isinstance(parent_element, DocItem)
+ and parent_element.label == GroupLabel.ORDERED_LIST
+ ):
is_numbered = True
doc.add_list_item(
enumerated=is_numbered, parent=parent_element, text=snippet_text
@@ -221,7 +237,14 @@ def traverse(node):
self.close_table(doc)
self.process_inline_text(parent_element, doc)
_log.debug(f" - Image with alt: {element.title}, url: {element.dest}")
- doc.add_picture(parent=parent_element, caption=element.title)
+
+ fig_caption: Optional[TextItem] = None
+ if element.title is not None and element.title != "":
+ fig_caption = doc.add_text(
+ label=DocItemLabel.CAPTION, text=element.title
+ )
+
+ doc.add_picture(parent=parent_element, caption=fig_caption)
elif isinstance(element, marko.block.Paragraph):
self.process_inline_text(parent_element, doc)
@@ -252,27 +275,21 @@ def traverse(node):
self.process_inline_text(parent_element, doc)
_log.debug(f" - Code Span: {element.children}")
snippet_text = str(element.children).strip()
- doc.add_text(
- label=DocItemLabel.CODE, parent=parent_element, text=snippet_text
- )
+ doc.add_code(parent=parent_element, text=snippet_text)
elif isinstance(element, marko.block.CodeBlock):
self.close_table(doc)
self.process_inline_text(parent_element, doc)
_log.debug(f" - Code Block: {element.children}")
- snippet_text = str(element.children[0].children).strip()
- doc.add_text(
- label=DocItemLabel.CODE, parent=parent_element, text=snippet_text
- )
+ snippet_text = str(element.children[0].children).strip() # type: ignore
+ doc.add_code(parent=parent_element, text=snippet_text)
elif isinstance(element, marko.block.FencedCode):
self.close_table(doc)
self.process_inline_text(parent_element, doc)
_log.debug(f" - Code Block: {element.children}")
- snippet_text = str(element.children[0].children).strip()
- doc.add_text(
- label=DocItemLabel.CODE, parent=parent_element, text=snippet_text
- )
+ snippet_text = str(element.children[0].children).strip() # type: ignore
+ doc.add_code(parent=parent_element, text=snippet_text)
elif isinstance(element, marko.inline.LineBreak):
self.process_inline_text(parent_element, doc)
diff --git a/docling/backend/msexcel_backend.py b/docling/backend/msexcel_backend.py
index 9b8311cf..19c25341 100644
--- a/docling/backend/msexcel_backend.py
+++ b/docling/backend/msexcel_backend.py
@@ -45,7 +45,6 @@ class ExcelTable(BaseModel):
class MsExcelDocumentBackend(DeclarativeDocumentBackend):
-
def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]):
super().__init__(in_doc, path_or_stream)
diff --git a/docling/backend/mspowerpoint_backend.py b/docling/backend/mspowerpoint_backend.py
index f595e4bd..995969d4 100644
--- a/docling/backend/mspowerpoint_backend.py
+++ b/docling/backend/mspowerpoint_backend.py
@@ -16,7 +16,7 @@
TableCell,
TableData,
)
-from PIL import Image
+from PIL import Image, UnidentifiedImageError
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE, PP_PLACEHOLDER
@@ -120,6 +120,7 @@ def handle_text_elements(self, shape, parent_slide, slide_ind, doc):
bullet_type = "None"
list_text = ""
list_label = GroupLabel.LIST
+ doc_label = DocItemLabel.LIST_ITEM
prov = self.generate_prov(shape, slide_ind, shape.text.strip())
# Identify if shape contains lists
@@ -276,16 +277,19 @@ def handle_pictures(self, shape, parent_slide, slide_ind, doc):
im_dpi, _ = image.dpi
# Open it with PIL
- pil_image = Image.open(BytesIO(image_bytes))
-
- # shape has picture
- prov = self.generate_prov(shape, slide_ind, "")
- doc.add_picture(
- parent=parent_slide,
- image=ImageRef.from_pil(image=pil_image, dpi=im_dpi),
- caption=None,
- prov=prov,
- )
+ try:
+ pil_image = Image.open(BytesIO(image_bytes))
+
+ # shape has picture
+ prov = self.generate_prov(shape, slide_ind, "")
+ doc.add_picture(
+ parent=parent_slide,
+ image=ImageRef.from_pil(image=pil_image, dpi=im_dpi),
+ caption=None,
+ prov=prov,
+ )
+ except (UnidentifiedImageError, OSError) as e:
+ _log.warning(f"Warning: image cannot be loaded by Pillow: {e}")
return
def handle_tables(self, shape, parent_slide, slide_ind, doc):
diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py
index f59356e2..f8148d52 100644
--- a/docling/backend/msword_backend.py
+++ b/docling/backend/msword_backend.py
@@ -26,7 +26,6 @@
class MsWordDocumentBackend(DeclarativeDocumentBackend):
-
def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]):
super().__init__(in_doc, path_or_stream)
self.XML_KEY = (
diff --git a/docling/backend/pdf_backend.py b/docling/backend/pdf_backend.py
index cd7a0815..35c83b8c 100644
--- a/docling/backend/pdf_backend.py
+++ b/docling/backend/pdf_backend.py
@@ -12,7 +12,6 @@
class PdfPageBackend(ABC):
-
@abstractmethod
def get_text_in_rect(self, bbox: BoundingBox) -> str:
pass
@@ -45,7 +44,6 @@ def unload(self):
class PdfDocumentBackend(PaginatedDocumentBackend):
-
def __init__(self, in_doc: InputDocument, path_or_stream: Union[BytesIO, Path]):
super().__init__(in_doc, path_or_stream)
diff --git a/docling/backend/pypdfium2_backend.py b/docling/backend/pypdfium2_backend.py
index d24ba608..5b627da7 100644
--- a/docling/backend/pypdfium2_backend.py
+++ b/docling/backend/pypdfium2_backend.py
@@ -39,7 +39,7 @@ def is_valid(self) -> bool:
return self.valid
def get_bitmap_rects(self, scale: float = 1) -> Iterable[BoundingBox]:
- AREA_THRESHOLD = 32 * 32
+ AREA_THRESHOLD = 0 # 32 * 32
for obj in self._ppage.get_objects(filter=[pdfium_c.FPDF_PAGEOBJ_IMAGE]):
pos = obj.get_pos()
cropbox = BoundingBox.from_tuple(
@@ -210,7 +210,7 @@ def get_page_image(
l=0, r=0, t=0, b=0, coord_origin=CoordOrigin.BOTTOMLEFT
)
else:
- padbox = cropbox.to_bottom_left_origin(page_size.height)
+ padbox = cropbox.to_bottom_left_origin(page_size.height).model_copy()
padbox.r = page_size.width - padbox.r
padbox.t = page_size.height - padbox.t
diff --git a/docling/cli/main.py b/docling/cli/main.py
index a83aecbf..e1ce289e 100644
--- a/docling/cli/main.py
+++ b/docling/cli/main.py
@@ -164,6 +164,11 @@ def convert(
to_formats: List[OutputFormat] = typer.Option(
None, "--to", help="Specify output formats. Defaults to Markdown."
),
+ headers: str = typer.Option(
+ None,
+ "--headers",
+ help="Specify http request headers used when fetching url input sources in the form of a JSON string",
+ ),
image_export_mode: Annotated[
ImageRefMode,
typer.Option(
@@ -279,12 +284,19 @@ def convert(
if from_formats is None:
from_formats = [e for e in InputFormat]
+ parsed_headers: Optional[Dict[str, str]] = None
+ if headers is not None:
+ headers_t = TypeAdapter(Dict[str, str])
+ parsed_headers = headers_t.validate_json(headers)
+
with tempfile.TemporaryDirectory() as tempdir:
input_doc_paths: List[Path] = []
for src in input_sources:
try:
# check if we can fetch some remote url
- source = resolve_source_to_path(source=src, workdir=Path(tempdir))
+ source = resolve_source_to_path(
+ source=src, headers=parsed_headers, workdir=Path(tempdir)
+ )
input_doc_paths.append(source)
except FileNotFoundError:
err_console.print(
@@ -390,7 +402,7 @@ def convert(
start_time = time.time()
conv_results = doc_converter.convert_all(
- input_doc_paths, raises_on_error=abort_on_error
+ input_doc_paths, headers=parsed_headers, raises_on_error=abort_on_error
)
output.mkdir(parents=True, exist_ok=True)
diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py
index 5bd28ed6..99d30108 100644
--- a/docling/datamodel/base_models.py
+++ b/docling/datamodel/base_models.py
@@ -4,6 +4,7 @@
from docling_core.types.doc import (
BoundingBox,
DocItemLabel,
+ NodeItem,
PictureDataType,
Size,
TableCell,
@@ -201,6 +202,13 @@ class AssembledUnit(BaseModel):
headers: List[PageElement] = []
+class ItemAndImageEnrichmentElement(BaseModel):
+ model_config = ConfigDict(arbitrary_types_allowed=True)
+
+ item: NodeItem
+ image: Image
+
+
class Page(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
@@ -219,12 +227,28 @@ class Page(BaseModel):
{}
) # Cache of images in different scales. By default it is cleared during assembling.
- def get_image(self, scale: float = 1.0) -> Optional[Image]:
+ def get_image(
+ self, scale: float = 1.0, cropbox: Optional[BoundingBox] = None
+ ) -> Optional[Image]:
if self._backend is None:
return self._image_cache.get(scale, None)
+
if not scale in self._image_cache:
- self._image_cache[scale] = self._backend.get_page_image(scale=scale)
- return self._image_cache[scale]
+ if cropbox is None:
+ self._image_cache[scale] = self._backend.get_page_image(scale=scale)
+ else:
+ return self._backend.get_page_image(scale=scale, cropbox=cropbox)
+
+ if cropbox is None:
+ return self._image_cache[scale]
+ else:
+ page_im = self._image_cache[scale]
+ assert self.size is not None
+ return page_im.crop(
+ cropbox.to_top_left_origin(page_height=self.size.height)
+ .scaled(scale=scale)
+ .as_tuple()
+ )
@property
def image(self) -> Optional[Image]:
diff --git a/docling/datamodel/document.py b/docling/datamodel/document.py
index 4ed7d577..136428e8 100644
--- a/docling/datamodel/document.py
+++ b/docling/datamodel/document.py
@@ -227,13 +227,18 @@ def unload(self):
class _DocumentConversionInput(BaseModel):
path_or_stream_iterator: Iterable[Union[Path, str, DocumentStream]]
+ headers: Optional[Dict[str, str]] = None
limits: Optional[DocumentLimits] = DocumentLimits()
def docs(
self, format_options: Dict[InputFormat, "FormatOption"]
) -> Iterable[InputDocument]:
for item in self.path_or_stream_iterator:
- obj = resolve_source_to_stream(item) if isinstance(item, str) else item
+ obj = (
+ resolve_source_to_stream(item, self.headers)
+ if isinstance(item, str)
+ else item
+ )
format = self._guess_format(obj)
backend: Type[AbstractDocumentBackend]
if format not in format_options.keys():
diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py
index fc78e27c..efdf3b1c 100644
--- a/docling/datamodel/pipeline_options.py
+++ b/docling/datamodel/pipeline_options.py
@@ -1,17 +1,11 @@
import logging
import os
-import warnings
from enum import Enum
from pathlib import Path
-from typing import Annotated, Any, Dict, List, Literal, Optional, Tuple, Type, Union
+from typing import Any, List, Literal, Optional, Union
-from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
-from pydantic_settings import (
- BaseSettings,
- PydanticBaseSettingsSource,
- SettingsConfigDict,
-)
-from typing_extensions import deprecated
+from pydantic import BaseModel, ConfigDict, Field, model_validator
+from pydantic_settings import BaseSettings, SettingsConfigDict
_log = logging.getLogger(__name__)
@@ -139,7 +133,7 @@ class EasyOcrOptions(OcrOptions):
use_gpu: Optional[bool] = None
- confidence_threshold: float = 0.65
+ confidence_threshold: float = 0.5
model_storage_directory: Optional[str] = None
recog_network: Optional[str] = "standard"
@@ -225,6 +219,8 @@ class PdfPipelineOptions(PipelineOptions):
artifacts_path: Optional[Union[Path, str]] = None
do_table_structure: bool = True # True: perform table structure extraction
do_ocr: bool = True # True: perform OCR, replace programmatic PDF text
+ do_code_enrichment: bool = False # True: perform code OCR
+ do_formula_enrichment: bool = False # True: perform formula OCR, return Latex code
table_structure_options: TableStructureOptions = TableStructureOptions()
ocr_options: Union[
diff --git a/docling/document_converter.py b/docling/document_converter.py
index c9cbedd2..cb073949 100644
--- a/docling/document_converter.py
+++ b/docling/document_converter.py
@@ -176,6 +176,7 @@ def initialize_pipeline(self, format: InputFormat):
def convert(
self,
source: Union[Path, str, DocumentStream], # TODO review naming
+ headers: Optional[Dict[str, str]] = None,
raises_on_error: bool = True,
max_num_pages: int = sys.maxsize,
max_file_size: int = sys.maxsize,
@@ -185,6 +186,7 @@ def convert(
raises_on_error=raises_on_error,
max_num_pages=max_num_pages,
max_file_size=max_file_size,
+ headers=headers,
)
return next(all_res)
@@ -192,6 +194,7 @@ def convert(
def convert_all(
self,
source: Iterable[Union[Path, str, DocumentStream]], # TODO review naming
+ headers: Optional[Dict[str, str]] = None,
raises_on_error: bool = True, # True: raises on first conversion error; False: does not raise on conv error
max_num_pages: int = sys.maxsize,
max_file_size: int = sys.maxsize,
@@ -201,8 +204,7 @@ def convert_all(
max_file_size=max_file_size,
)
conv_input = _DocumentConversionInput(
- path_or_stream_iterator=source,
- limits=limits,
+ path_or_stream_iterator=source, limits=limits, headers=headers
)
conv_res_iter = self._convert(conv_input, raises_on_error=raises_on_error)
diff --git a/docling/models/base_model.py b/docling/models/base_model.py
index 1147896c..08d728cc 100644
--- a/docling/models/base_model.py
+++ b/docling/models/base_model.py
@@ -1,9 +1,10 @@
from abc import ABC, abstractmethod
-from typing import Any, Iterable
+from typing import Any, Generic, Iterable, Optional
-from docling_core.types.doc import DoclingDocument, NodeItem
+from docling_core.types.doc import BoundingBox, DoclingDocument, NodeItem, TextItem
+from typing_extensions import TypeVar
-from docling.datamodel.base_models import Page
+from docling.datamodel.base_models import ItemAndImageEnrichmentElement, Page
from docling.datamodel.document import ConversionResult
@@ -15,14 +16,69 @@ def __call__(
pass
-class BaseEnrichmentModel(ABC):
+EnrichElementT = TypeVar("EnrichElementT", default=NodeItem)
+
+
+class GenericEnrichmentModel(ABC, Generic[EnrichElementT]):
@abstractmethod
def is_processable(self, doc: DoclingDocument, element: NodeItem) -> bool:
pass
+ @abstractmethod
+ def prepare_element(
+ self, conv_res: ConversionResult, element: NodeItem
+ ) -> Optional[EnrichElementT]:
+ pass
+
@abstractmethod
def __call__(
- self, doc: DoclingDocument, element_batch: Iterable[NodeItem]
- ) -> Iterable[Any]:
+ self, doc: DoclingDocument, element_batch: Iterable[EnrichElementT]
+ ) -> Iterable[NodeItem]:
pass
+
+
+class BaseEnrichmentModel(GenericEnrichmentModel[NodeItem]):
+
+ def prepare_element(
+ self, conv_res: ConversionResult, element: NodeItem
+ ) -> Optional[NodeItem]:
+ if self.is_processable(doc=conv_res.document, element=element):
+ return element
+ return None
+
+
+class BaseItemAndImageEnrichmentModel(
+ GenericEnrichmentModel[ItemAndImageEnrichmentElement]
+):
+
+ images_scale: float
+ expansion_factor: float = 0.0
+
+ def prepare_element(
+ self, conv_res: ConversionResult, element: NodeItem
+ ) -> Optional[ItemAndImageEnrichmentElement]:
+ if not self.is_processable(doc=conv_res.document, element=element):
+ return None
+
+ assert isinstance(element, TextItem)
+ element_prov = element.prov[0]
+
+ bbox = element_prov.bbox
+ width = bbox.r - bbox.l
+ height = bbox.t - bbox.b
+
+ # TODO: move to a utility in the BoundingBox class
+ expanded_bbox = BoundingBox(
+ l=bbox.l - width * self.expansion_factor,
+ t=bbox.t + height * self.expansion_factor,
+ r=bbox.r + width * self.expansion_factor,
+ b=bbox.b - height * self.expansion_factor,
+ coord_origin=bbox.coord_origin,
+ )
+
+ page_ix = element_prov.page_no - 1
+ cropped_image = conv_res.pages[page_ix].get_image(
+ scale=self.images_scale, cropbox=expanded_bbox
+ )
+ return ItemAndImageEnrichmentElement(item=element, image=cropped_image)
diff --git a/docling/models/base_ocr_model.py b/docling/models/base_ocr_model.py
index 38b5e52c..9afb7dde 100644
--- a/docling/models/base_ocr_model.py
+++ b/docling/models/base_ocr_model.py
@@ -8,7 +8,7 @@
from docling_core.types.doc import BoundingBox, CoordOrigin
from PIL import Image, ImageDraw
from rtree import index
-from scipy.ndimage import find_objects, label
+from scipy.ndimage import binary_dilation, find_objects, label
from docling.datamodel.base_models import Cell, OcrCell, Page
from docling.datamodel.document import ConversionResult
@@ -43,6 +43,12 @@ def find_ocr_rects(size, bitmap_rects):
np_image = np.array(image)
+ # Dilate the image by 10 pixels to merge nearby bitmap rectangles
+ structure = np.ones(
+ (20, 20)
+ ) # Create a 20x20 structure element (10 pixels in all directions)
+ np_image = binary_dilation(np_image > 0, structure=structure)
+
# Find the connected components
labeled_image, num_features = label(
np_image > 0
@@ -72,7 +78,7 @@ def find_ocr_rects(size, bitmap_rects):
bitmap_rects = []
coverage, ocr_rects = find_ocr_rects(page.size, bitmap_rects)
- # return full-page rectangle if sufficiently covered with bitmaps
+ # return full-page rectangle if page is dominantly covered with bitmaps
if self.options.force_full_page_ocr or coverage > max(
BITMAP_COVERAGE_TRESHOLD, self.options.bitmap_area_threshold
):
@@ -85,17 +91,11 @@ def find_ocr_rects(size, bitmap_rects):
coord_origin=CoordOrigin.TOPLEFT,
)
]
- # return individual rectangles if the bitmap coverage is smaller
- else: # coverage <= BITMAP_COVERAGE_TRESHOLD:
-
- # skip OCR if the bitmap area on the page is smaller than the options threshold
- ocr_rects = [
- rect
- for rect in ocr_rects
- if rect.area() / (page.size.width * page.size.height)
- > self.options.bitmap_area_threshold
- ]
+ # return individual rectangles if the bitmap coverage is above the threshold
+ elif coverage > self.options.bitmap_area_threshold:
return ocr_rects
+ else: # overall coverage of bitmaps is too low, drop all bitmap rectangles.
+ return []
# Filters OCR cells by dropping any OCR cell that intersects with an existing programmatic cell.
def _filter_ocr_cells(self, ocr_cells, programmatic_cells):
@@ -138,18 +138,34 @@ def post_process_cells(self, ocr_cells, programmatic_cells):
def draw_ocr_rects_and_cells(self, conv_res, page, ocr_rects, show: bool = False):
image = copy.deepcopy(page.image)
+ scale_x = image.width / page.size.width
+ scale_y = image.height / page.size.height
+
draw = ImageDraw.Draw(image, "RGBA")
# Draw OCR rectangles as yellow filled rect
for rect in ocr_rects:
x0, y0, x1, y1 = rect.as_tuple()
+ y0 *= scale_x
+ y1 *= scale_y
+ x0 *= scale_x
+ x1 *= scale_x
+
shade_color = (255, 255, 0, 40) # transparent yellow
draw.rectangle([(x0, y0), (x1, y1)], fill=shade_color, outline=None)
# Draw OCR and programmatic cells
for tc in page.cells:
x0, y0, x1, y1 = tc.bbox.as_tuple()
- color = "red"
+ y0 *= scale_x
+ y1 *= scale_y
+ x0 *= scale_x
+ x1 *= scale_x
+
+ if y1 <= y0:
+ y1, y0 = y0, y1
+
+ color = "gray"
if isinstance(tc, OcrCell):
color = "magenta"
draw.rectangle([(x0, y0), (x1, y1)], outline=color)
diff --git a/docling/models/code_formula_model.py b/docling/models/code_formula_model.py
new file mode 100644
index 00000000..e4d56945
--- /dev/null
+++ b/docling/models/code_formula_model.py
@@ -0,0 +1,245 @@
+import re
+from pathlib import Path
+from typing import Iterable, List, Literal, Optional, Tuple, Union
+
+from docling_core.types.doc import (
+ CodeItem,
+ DocItemLabel,
+ DoclingDocument,
+ NodeItem,
+ TextItem,
+)
+from docling_core.types.doc.labels import CodeLanguageLabel
+from PIL import Image
+from pydantic import BaseModel
+
+from docling.datamodel.base_models import ItemAndImageEnrichmentElement
+from docling.datamodel.pipeline_options import AcceleratorOptions
+from docling.models.base_model import BaseItemAndImageEnrichmentModel
+from docling.utils.accelerator_utils import decide_device
+
+
+class CodeFormulaModelOptions(BaseModel):
+ """
+ Configuration options for the CodeFormulaModel.
+
+ Attributes
+ ----------
+ kind : str
+ Type of the model. Fixed value "code_formula".
+ do_code_enrichment : bool
+ True if code enrichment is enabled, False otherwise.
+ do_formula_enrichment : bool
+ True if formula enrichment is enabled, False otherwise.
+ """
+
+ kind: Literal["code_formula"] = "code_formula"
+ do_code_enrichment: bool = True
+ do_formula_enrichment: bool = True
+
+
+class CodeFormulaModel(BaseItemAndImageEnrichmentModel):
+ """
+ Model for processing and enriching documents with code and formula predictions.
+
+ Attributes
+ ----------
+ enabled : bool
+ True if the model is enabled, False otherwise.
+ options : CodeFormulaModelOptions
+ Configuration options for the CodeFormulaModel.
+ code_formula_model : CodeFormulaPredictor
+ The predictor model for code and formula processing.
+
+ Methods
+ -------
+ __init__(self, enabled, artifacts_path, accelerator_options, code_formula_options)
+ Initializes the CodeFormulaModel with the given configuration options.
+ is_processable(self, doc, element)
+ Determines if a given element in a document can be processed by the model.
+ __call__(self, doc, element_batch)
+ Processes the given batch of elements and enriches them with predictions.
+ """
+
+ images_scale = 1.66 # = 120 dpi, aligned with training data resolution
+ expansion_factor = 0.03
+
+ def __init__(
+ self,
+ enabled: bool,
+ artifacts_path: Optional[Union[Path, str]],
+ options: CodeFormulaModelOptions,
+ accelerator_options: AcceleratorOptions,
+ ):
+ """
+ Initializes the CodeFormulaModel with the given configuration.
+
+ Parameters
+ ----------
+ enabled : bool
+ True if the model is enabled, False otherwise.
+ artifacts_path : Path
+ Path to the directory containing the model artifacts.
+ options : CodeFormulaModelOptions
+ Configuration options for the model.
+ accelerator_options : AcceleratorOptions
+ Options specifying the device and number of threads for acceleration.
+ """
+ self.enabled = enabled
+ self.options = options
+
+ if self.enabled:
+ device = decide_device(accelerator_options.device)
+
+ from docling_ibm_models.code_formula_model.code_formula_predictor import (
+ CodeFormulaPredictor,
+ )
+
+ if artifacts_path is None:
+ artifacts_path = self.download_models_hf()
+ else:
+ artifacts_path = Path(artifacts_path)
+
+ self.code_formula_model = CodeFormulaPredictor(
+ artifacts_path=artifacts_path,
+ device=device,
+ num_threads=accelerator_options.num_threads,
+ )
+
+ @staticmethod
+ def download_models_hf(
+ local_dir: Optional[Path] = None, force: bool = False
+ ) -> Path:
+ from huggingface_hub import snapshot_download
+ from huggingface_hub.utils import disable_progress_bars
+
+ disable_progress_bars()
+ download_path = snapshot_download(
+ repo_id="ds4sd/CodeFormula",
+ force_download=force,
+ local_dir=local_dir,
+ revision="v1.0.0",
+ )
+
+ return Path(download_path)
+
+ def is_processable(self, doc: DoclingDocument, element: NodeItem) -> bool:
+ """
+ Determines if a given element in a document can be processed by the model.
+
+ Parameters
+ ----------
+ doc : DoclingDocument
+ The document being processed.
+ element : NodeItem
+ The element within the document to check.
+
+ Returns
+ -------
+ bool
+ True if the element can be processed, False otherwise.
+ """
+ return self.enabled and (
+ (isinstance(element, CodeItem) and self.options.do_code_enrichment)
+ or (
+ isinstance(element, TextItem)
+ and element.label == DocItemLabel.FORMULA
+ and self.options.do_formula_enrichment
+ )
+ )
+
+ def _extract_code_language(self, input_string: str) -> Tuple[str, Optional[str]]:
+ """Extracts a programming language from the beginning of a string.
+
+ This function checks if the input string starts with a pattern of the form
+ ``<_some_language_>``. If it does, it extracts the language string and returns
+ a tuple of (remainder, language). Otherwise, it returns the original string
+ and `None`.
+
+ Args:
+ input_string (str): The input string, which may start with ``<_language_>``.
+
+ Returns:
+ Tuple[str, Optional[str]]:
+ A tuple where:
+ - The first element is either:
+ - The remainder of the string (everything after ``<_language_>``),
+ if a match is found; or
+ - The original string, if no match is found.
+ - The second element is the extracted language if a match is found;
+ otherwise, `None`.
+ """
+ pattern = r"^<_([^>]+)_>\s*(.*)"
+ match = re.match(pattern, input_string, flags=re.DOTALL)
+ if match:
+ language = str(match.group(1)) # the captured programming language
+ remainder = str(match.group(2)) # everything after the <_language_>
+ return remainder, language
+ else:
+ return input_string, None
+
+ def _get_code_language_enum(self, value: Optional[str]) -> CodeLanguageLabel:
+ """
+ Converts a string to a corresponding `CodeLanguageLabel` enum member.
+
+ If the provided string does not match any value in `CodeLanguageLabel`,
+ it defaults to `CodeLanguageLabel.UNKNOWN`.
+
+ Args:
+ value (Optional[str]): The string representation of the code language or None.
+
+ Returns:
+ CodeLanguageLabel: The corresponding enum member if the value is valid,
+ otherwise `CodeLanguageLabel.UNKNOWN`.
+ """
+ if not isinstance(value, str):
+ return CodeLanguageLabel.UNKNOWN
+
+ try:
+ return CodeLanguageLabel(value)
+ except ValueError:
+ return CodeLanguageLabel.UNKNOWN
+
+ def __call__(
+ self,
+ doc: DoclingDocument,
+ element_batch: Iterable[ItemAndImageEnrichmentElement],
+ ) -> Iterable[NodeItem]:
+ """
+ Processes the given batch of elements and enriches them with predictions.
+
+ Parameters
+ ----------
+ doc : DoclingDocument
+ The document being processed.
+ element_batch : Iterable[ItemAndImageEnrichmentElement]
+ A batch of elements to be processed.
+
+ Returns
+ -------
+ Iterable[Any]
+ An iterable of enriched elements.
+ """
+ if not self.enabled:
+ for element in element_batch:
+ yield element.item
+ return
+
+ labels: List[str] = []
+ images: List[Image.Image] = []
+ elements: List[TextItem] = []
+ for el in element_batch:
+ assert isinstance(el.item, TextItem)
+ elements.append(el.item)
+ labels.append(el.item.label)
+ images.append(el.image)
+
+ outputs = self.code_formula_model.predict(images, labels)
+
+ for item, output in zip(elements, outputs):
+ if isinstance(item, CodeItem):
+ output, code_language = self._extract_code_language(output)
+ item.code_language = self._get_code_language_enum(code_language)
+ item.text = output
+
+ yield item
diff --git a/docling/models/layout_model.py b/docling/models/layout_model.py
index 014cddd3..69193c94 100644
--- a/docling/models/layout_model.py
+++ b/docling/models/layout_model.py
@@ -1,28 +1,21 @@
import copy
import logging
-import random
-import time
from pathlib import Path
-from typing import Iterable, List
+from typing import Iterable
-from docling_core.types.doc import CoordOrigin, DocItemLabel
+from docling_core.types.doc import DocItemLabel
from docling_ibm_models.layoutmodel.layout_predictor import LayoutPredictor
-from PIL import Image, ImageDraw, ImageFont
-
-from docling.datamodel.base_models import (
- BoundingBox,
- Cell,
- Cluster,
- LayoutPrediction,
- Page,
-)
+from PIL import Image
+
+from docling.datamodel.base_models import BoundingBox, Cluster, LayoutPrediction, Page
from docling.datamodel.document import ConversionResult
-from docling.datamodel.pipeline_options import AcceleratorDevice, AcceleratorOptions
+from docling.datamodel.pipeline_options import AcceleratorOptions
from docling.datamodel.settings import settings
from docling.models.base_model import BasePageModel
from docling.utils.accelerator_utils import decide_device
from docling.utils.layout_postprocessor import LayoutPostprocessor
from docling.utils.profiling import TimeRecorder
+from docling.utils.visualization import draw_clusters
_log = logging.getLogger(__name__)
@@ -40,7 +33,7 @@ class LayoutModel(BasePageModel):
DocItemLabel.PAGE_FOOTER,
DocItemLabel.CODE,
DocItemLabel.LIST_ITEM,
- # "Formula",
+ DocItemLabel.FORMULA,
]
PAGE_HEADER_LABELS = [DocItemLabel.PAGE_HEADER, DocItemLabel.PAGE_FOOTER]
@@ -67,29 +60,9 @@ def draw_clusters_and_cells_side_by_side(
- Right: Clusters including FORM, KEY_VALUE_REGION, and PICTURE.
Includes label names and confidence scores for each cluster.
"""
- label_to_color = {
- DocItemLabel.TEXT: (255, 255, 153), # Light Yellow
- DocItemLabel.CAPTION: (255, 204, 153), # Light Orange
- DocItemLabel.LIST_ITEM: (153, 153, 255), # Light Purple
- DocItemLabel.FORMULA: (192, 192, 192), # Gray
- DocItemLabel.TABLE: (255, 204, 204), # Light Pink
- DocItemLabel.PICTURE: (255, 204, 164), # Light Beige
- DocItemLabel.SECTION_HEADER: (255, 153, 153), # Light Red
- DocItemLabel.PAGE_HEADER: (204, 255, 204), # Light Green
- DocItemLabel.PAGE_FOOTER: (
- 204,
- 255,
- 204,
- ), # Light Green (same as Page-Header)
- DocItemLabel.TITLE: (255, 153, 153), # Light Red (same as Section-Header)
- DocItemLabel.FOOTNOTE: (200, 200, 255), # Light Blue
- DocItemLabel.DOCUMENT_INDEX: (220, 220, 220), # Light Gray
- DocItemLabel.CODE: (125, 125, 125), # Gray
- DocItemLabel.CHECKBOX_SELECTED: (255, 182, 193), # Pale Green
- DocItemLabel.CHECKBOX_UNSELECTED: (255, 182, 193), # Light Pink
- DocItemLabel.FORM: (200, 255, 255), # Light Cyan
- DocItemLabel.KEY_VALUE_REGION: (183, 65, 14), # Rusty orange
- }
+ scale_x = page.image.width / page.size.width
+ scale_y = page.image.height / page.size.height
+
# Filter clusters for left and right images
exclude_labels = {
DocItemLabel.FORM,
@@ -102,65 +75,9 @@ def draw_clusters_and_cells_side_by_side(
left_image = copy.deepcopy(page.image)
right_image = copy.deepcopy(page.image)
- # Function to draw clusters on an image
- def draw_clusters(image, clusters):
- draw = ImageDraw.Draw(image, "RGBA")
- # Create a smaller font for the labels
- try:
- font = ImageFont.truetype("arial.ttf", 12)
- except OSError:
- # Fallback to default font if arial is not available
- font = ImageFont.load_default()
- for c_tl in clusters:
- all_clusters = [c_tl, *c_tl.children]
- for c in all_clusters:
- # Draw cells first (underneath)
- cell_color = (0, 0, 0, 40) # Transparent black for cells
- for tc in c.cells:
- cx0, cy0, cx1, cy1 = tc.bbox.as_tuple()
- draw.rectangle(
- [(cx0, cy0), (cx1, cy1)],
- outline=None,
- fill=cell_color,
- )
- # Draw cluster rectangle
- x0, y0, x1, y1 = c.bbox.as_tuple()
- cluster_fill_color = (*list(label_to_color.get(c.label)), 70)
- cluster_outline_color = (*list(label_to_color.get(c.label)), 255)
- draw.rectangle(
- [(x0, y0), (x1, y1)],
- outline=cluster_outline_color,
- fill=cluster_fill_color,
- )
- # Add label name and confidence
- label_text = f"{c.label.name} ({c.confidence:.2f})"
- # Create semi-transparent background for text
- text_bbox = draw.textbbox((x0, y0), label_text, font=font)
- text_bg_padding = 2
- draw.rectangle(
- [
- (
- text_bbox[0] - text_bg_padding,
- text_bbox[1] - text_bg_padding,
- ),
- (
- text_bbox[2] + text_bg_padding,
- text_bbox[3] + text_bg_padding,
- ),
- ],
- fill=(255, 255, 255, 180), # Semi-transparent white
- )
- # Draw text
- draw.text(
- (x0, y0),
- label_text,
- fill=(0, 0, 0, 255), # Solid black
- font=font,
- )
-
# Draw clusters on both images
- draw_clusters(left_image, left_clusters)
- draw_clusters(right_image, right_clusters)
+ draw_clusters(left_image, left_clusters, scale_x, scale_y)
+ draw_clusters(right_image, right_clusters, scale_x, scale_y)
# Combine the images side by side
combined_width = left_image.width * 2
combined_height = left_image.height
diff --git a/docling/models/page_assemble_model.py b/docling/models/page_assemble_model.py
index 3e202e20..4acf8c95 100644
--- a/docling/models/page_assemble_model.py
+++ b/docling/models/page_assemble_model.py
@@ -22,7 +22,7 @@
class PageAssembleOptions(BaseModel):
- keep_images: bool = False
+ pass
class PageAssembleModel(BasePageModel):
@@ -135,31 +135,6 @@ def __call__(
)
elements.append(fig)
body.append(fig)
- elif cluster.label == LayoutModel.FORMULA_LABEL:
- equation = None
- if page.predictions.equations_prediction:
- equation = page.predictions.equations_prediction.equation_map.get(
- cluster.id, None
- )
- if (
- not equation
- ): # fallback: add empty formula, if it isn't present
- text = self.sanitize_text(
- [
- cell.text.replace("\x02", "-").strip()
- for cell in cluster.cells
- if len(cell.text.strip()) > 0
- ]
- )
- equation = TextElement(
- label=cluster.label,
- id=cluster.id,
- cluster=cluster,
- page_no=page.page_no,
- text=text,
- )
- elements.append(equation)
- body.append(equation)
elif cluster.label in LayoutModel.CONTAINER_LABELS:
container_el = ContainerElement(
label=cluster.label,
@@ -174,11 +149,4 @@ def __call__(
elements=elements, headers=headers, body=body
)
- # Remove page images (can be disabled)
- if not self.options.keep_images:
- page._image_cache = {}
-
- # Unload backend
- page._backend.unload()
-
yield page
diff --git a/docling/models/table_structure_model.py b/docling/models/table_structure_model.py
index ba306449..1f4fbc7e 100644
--- a/docling/models/table_structure_model.py
+++ b/docling/models/table_structure_model.py
@@ -66,23 +66,43 @@ def draw_table_and_cells(
show: bool = False,
):
assert page._backend is not None
+ assert page.size is not None
image = (
page._backend.get_page_image()
) # make new image to avoid drawing on the saved ones
+
+ scale_x = image.width / page.size.width
+ scale_y = image.height / page.size.height
+
draw = ImageDraw.Draw(image)
for table_element in tbl_list:
x0, y0, x1, y1 = table_element.cluster.bbox.as_tuple()
+ y0 *= scale_x
+ y1 *= scale_y
+ x0 *= scale_x
+ x1 *= scale_x
+
draw.rectangle([(x0, y0), (x1, y1)], outline="red")
for cell in table_element.cluster.cells:
x0, y0, x1, y1 = cell.bbox.as_tuple()
+ x0 *= scale_x
+ x1 *= scale_x
+ y0 *= scale_x
+ y1 *= scale_y
+
draw.rectangle([(x0, y0), (x1, y1)], outline="green")
for tc in table_element.table_cells:
if tc.bbox is not None:
x0, y0, x1, y1 = tc.bbox.as_tuple()
+ x0 *= scale_x
+ x1 *= scale_x
+ y0 *= scale_x
+ y1 *= scale_y
+
if tc.column_header:
width = 3
else:
diff --git a/docling/models/tesseract_ocr_cli_model.py b/docling/models/tesseract_ocr_cli_model.py
index 16e1629d..3d5c8006 100644
--- a/docling/models/tesseract_ocr_cli_model.py
+++ b/docling/models/tesseract_ocr_cli_model.py
@@ -20,7 +20,6 @@
class TesseractOcrCliModel(BaseOcrModel):
-
def __init__(self, enabled: bool, options: TesseractCliOcrOptions):
super().__init__(enabled=enabled, options=options)
self.options: TesseractCliOcrOptions
diff --git a/docling/models/tesseract_ocr_model.py b/docling/models/tesseract_ocr_model.py
index b2bd358b..6a1b60ee 100644
--- a/docling/models/tesseract_ocr_model.py
+++ b/docling/models/tesseract_ocr_model.py
@@ -54,43 +54,56 @@ def __init__(self, enabled: bool, options: TesseractOcrOptions):
# Initialize the tesseractAPI
_log.debug("Initializing TesserOCR: %s", tesseract_version)
lang = "+".join(self.options.lang)
+
+ self.script_readers: dict[str, tesserocr.PyTessBaseAPI] = {}
+
+ if any([l.startswith("script/") for l in tesserocr_languages]):
+ self.script_prefix = "script/"
+ else:
+ self.script_prefix = ""
+
+ tesserocr_kwargs = {
+ "psm": tesserocr.PSM.AUTO,
+ "init": True,
+ "oem": tesserocr.OEM.DEFAULT,
+ }
+
if self.options.path is not None:
+ tesserocr_kwargs["path"] = self.options.path
+
+ if lang == "auto":
self.reader = tesserocr.PyTessBaseAPI(
- path=self.options.path,
- lang=lang,
- psm=tesserocr.PSM.AUTO,
- init=True,
- oem=tesserocr.OEM.DEFAULT,
+ **{"lang": "osd", "psm": tesserocr.PSM.OSD_ONLY} | tesserocr_kwargs
)
else:
self.reader = tesserocr.PyTessBaseAPI(
- lang=lang,
- psm=tesserocr.PSM.AUTO,
- init=True,
- oem=tesserocr.OEM.DEFAULT,
+ **{"lang": lang} | tesserocr_kwargs,
)
+
self.reader_RIL = tesserocr.RIL
def __del__(self):
if self.reader is not None:
# Finalize the tesseractAPI
self.reader.End()
+ for script in self.script_readers:
+ self.script_readers[script].End()
def __call__(
self, conv_res: ConversionResult, page_batch: Iterable[Page]
) -> Iterable[Page]:
-
if not self.enabled:
yield from page_batch
return
+ import tesserocr
+
for page in page_batch:
assert page._backend is not None
if not page._backend.is_valid():
yield page
else:
with TimeRecorder(conv_res, "ocr"):
-
assert self.reader is not None
ocr_rects = self.get_ocr_rects(page)
@@ -106,20 +119,55 @@ def __call__(
# Retrieve text snippets with their bounding boxes
self.reader.SetImage(high_res_image)
- boxes = self.reader.GetComponentImages(
+
+ if self.options.lang == ["auto"]:
+ osd = self.reader.DetectOrientationScript()
+
+ # No text, probably
+ if osd is None:
+ continue
+
+ script = osd["script_name"]
+
+ if script == "Katakana" or script == "Hiragana":
+ script = "Japanese"
+ elif script == "Han":
+ script = "HanS"
+ elif script == "Korean":
+ script = "Hangul"
+
+ _log.debug(
+ f'Using model for the detected script "{script}"'
+ )
+
+ if script not in self.script_readers:
+ self.script_readers[script] = tesserocr.PyTessBaseAPI(
+ path=self.reader.GetDatapath(),
+ lang=f"{self.script_prefix}{script}",
+ psm=tesserocr.PSM.AUTO,
+ init=True,
+ oem=tesserocr.OEM.DEFAULT,
+ )
+
+ local_reader = self.script_readers[script]
+ local_reader.SetImage(high_res_image)
+ else:
+ local_reader = self.reader
+
+ boxes = local_reader.GetComponentImages(
self.reader_RIL.TEXTLINE, True
)
cells = []
for ix, (im, box, _, _) in enumerate(boxes):
# Set the area of interest. Tesseract uses Bottom-Left for the origin
- self.reader.SetRectangle(
+ local_reader.SetRectangle(
box["x"], box["y"], box["w"], box["h"]
)
# Extract text within the bounding box
- text = self.reader.GetUTF8Text().strip()
- confidence = self.reader.MeanTextConf()
+ text = local_reader.GetUTF8Text().strip()
+ confidence = local_reader.MeanTextConf()
left = box["x"] / self.scale
bottom = box["y"] / self.scale
right = (box["x"] + box["w"]) / self.scale
diff --git a/docling/pipeline/base_pipeline.py b/docling/pipeline/base_pipeline.py
index c75faaec..75a08e76 100644
--- a/docling/pipeline/base_pipeline.py
+++ b/docling/pipeline/base_pipeline.py
@@ -3,7 +3,7 @@
import time
import traceback
from abc import ABC, abstractmethod
-from typing import Callable, Iterable, List
+from typing import Any, Callable, Iterable, List
from docling_core.types.doc import DoclingDocument, NodeItem
@@ -18,7 +18,7 @@
from docling.datamodel.document import ConversionResult, InputDocument
from docling.datamodel.pipeline_options import PipelineOptions
from docling.datamodel.settings import settings
-from docling.models.base_model import BaseEnrichmentModel
+from docling.models.base_model import GenericEnrichmentModel
from docling.utils.profiling import ProfilingScope, TimeRecorder
from docling.utils.utils import chunkify
@@ -28,8 +28,9 @@
class BasePipeline(ABC):
def __init__(self, pipeline_options: PipelineOptions):
self.pipeline_options = pipeline_options
+ self.keep_images = False
self.build_pipe: List[Callable] = []
- self.enrichment_pipe: List[BaseEnrichmentModel] = []
+ self.enrichment_pipe: List[GenericEnrichmentModel[Any]] = []
def execute(self, in_doc: InputDocument, raises_on_error: bool) -> ConversionResult:
conv_res = ConversionResult(input=in_doc)
@@ -40,7 +41,7 @@ def execute(self, in_doc: InputDocument, raises_on_error: bool) -> ConversionRes
conv_res, "pipeline_total", scope=ProfilingScope.DOCUMENT
):
# These steps are building and assembling the structure of the
- # output DoclingDocument
+ # output DoclingDocument.
conv_res = self._build_document(conv_res)
conv_res = self._assemble_document(conv_res)
# From this stage, all operations should rely only on conv_res.output
@@ -50,6 +51,8 @@ def execute(self, in_doc: InputDocument, raises_on_error: bool) -> ConversionRes
conv_res.status = ConversionStatus.FAILURE
if raises_on_error:
raise e
+ finally:
+ self._unload(conv_res)
return conv_res
@@ -62,21 +65,22 @@ def _assemble_document(self, conv_res: ConversionResult) -> ConversionResult:
def _enrich_document(self, conv_res: ConversionResult) -> ConversionResult:
- def _filter_elements(
- doc: DoclingDocument, model: BaseEnrichmentModel
+ def _prepare_elements(
+ conv_res: ConversionResult, model: GenericEnrichmentModel[Any]
) -> Iterable[NodeItem]:
- for element, _level in doc.iterate_items():
- if model.is_processable(doc=doc, element=element):
- yield element
+ for doc_element, _level in conv_res.document.iterate_items():
+ prepared_element = model.prepare_element(
+ conv_res=conv_res, element=doc_element
+ )
+ if prepared_element is not None:
+ yield prepared_element
with TimeRecorder(conv_res, "doc_enrich", scope=ProfilingScope.DOCUMENT):
for model in self.enrichment_pipe:
for element_batch in chunkify(
- _filter_elements(conv_res.document, model),
+ _prepare_elements(conv_res, model),
settings.perf.elements_batch_size,
):
- # TODO: currently we assume the element itself is modified, because
- # we don't have an interface to save the element back to the document
for element in model(
doc=conv_res.document, element_batch=element_batch
): # Must exhaust!
@@ -88,6 +92,9 @@ def _filter_elements(
def _determine_status(self, conv_res: ConversionResult) -> ConversionStatus:
pass
+ def _unload(self, conv_res: ConversionResult):
+ pass
+
@classmethod
@abstractmethod
def get_default_options(cls) -> PipelineOptions:
@@ -107,6 +114,10 @@ def is_backend_supported(cls, backend: AbstractDocumentBackend):
class PaginatedPipeline(BasePipeline): # TODO this is a bad name.
+ def __init__(self, pipeline_options: PipelineOptions):
+ super().__init__(pipeline_options)
+ self.keep_backend = False
+
def _apply_on_pages(
self, conv_res: ConversionResult, page_batch: Iterable[Page]
) -> Iterable[Page]:
@@ -148,7 +159,14 @@ def _build_document(self, conv_res: ConversionResult) -> ConversionResult:
pipeline_pages = self._apply_on_pages(conv_res, init_pages)
for p in pipeline_pages: # Must exhaust!
- pass
+
+ # Cleanup cached images
+ if not self.keep_images:
+ p._image_cache = {}
+
+ # Cleanup page backends
+ if not self.keep_backend and p._backend is not None:
+ p._backend.unload()
end_batch_time = time.monotonic()
total_elapsed_time += end_batch_time - start_batch_time
@@ -177,10 +195,15 @@ def _build_document(self, conv_res: ConversionResult) -> ConversionResult:
)
raise e
- finally:
- # Always unload the PDF backend, even in case of failure
- if conv_res.input._backend:
- conv_res.input._backend.unload()
+ return conv_res
+
+ def _unload(self, conv_res: ConversionResult) -> ConversionResult:
+ for page in conv_res.pages:
+ if page._backend is not None:
+ page._backend.unload()
+
+ if conv_res.input._backend:
+ conv_res.input._backend.unload()
return conv_res
diff --git a/docling/pipeline/standard_pdf_pipeline.py b/docling/pipeline/standard_pdf_pipeline.py
index 2f8c1421..97bcc6b6 100644
--- a/docling/pipeline/standard_pdf_pipeline.py
+++ b/docling/pipeline/standard_pdf_pipeline.py
@@ -18,6 +18,7 @@
TesseractOcrOptions,
)
from docling.models.base_ocr_model import BaseOcrModel
+from docling.models.code_formula_model import CodeFormulaModel, CodeFormulaModelOptions
from docling.models.ds_glm_model import GlmModel, GlmOptions
from docling.models.easyocr_model import EasyOcrModel
from docling.models.layout_model import LayoutModel
@@ -50,7 +51,7 @@ def __init__(self, pipeline_options: PdfPipelineOptions):
else:
self.artifacts_path = Path(pipeline_options.artifacts_path)
- keep_images = (
+ self.keep_images = (
self.pipeline_options.generate_page_images
or self.pipeline_options.generate_picture_images
or self.pipeline_options.generate_table_images
@@ -87,13 +88,30 @@ def __init__(self, pipeline_options: PdfPipelineOptions):
accelerator_options=pipeline_options.accelerator_options,
),
# Page assemble
- PageAssembleModel(options=PageAssembleOptions(keep_images=keep_images)),
+ PageAssembleModel(options=PageAssembleOptions()),
]
self.enrichment_pipe = [
# Other models working on `NodeItem` elements in the DoclingDocument
+ # Code Formula Enrichment Model
+ CodeFormulaModel(
+ enabled=pipeline_options.do_code_enrichment
+ or pipeline_options.do_formula_enrichment,
+ artifacts_path=pipeline_options.artifacts_path,
+ options=CodeFormulaModelOptions(
+ do_code_enrichment=pipeline_options.do_code_enrichment,
+ do_formula_enrichment=pipeline_options.do_formula_enrichment,
+ ),
+ accelerator_options=pipeline_options.accelerator_options,
+ ),
]
+ if (
+ self.pipeline_options.do_formula_enrichment
+ or self.pipeline_options.do_code_enrichment
+ ):
+ self.keep_backend = True
+
@staticmethod
def download_models_hf(
local_dir: Optional[Path] = None, force: bool = False
diff --git a/docling/utils/glm_utils.py b/docling/utils/glm_utils.py
index 1c3b3f67..da29cdd1 100644
--- a/docling/utils/glm_utils.py
+++ b/docling/utils/glm_utils.py
@@ -270,7 +270,6 @@ def to_docling_document(doc_glm, update_name_label=False) -> DoclingDocument:
container_el = doc.add_group(label=group_label)
_add_child_elements(container_el, doc, obj, pelem)
-
elif "text" in obj:
text = obj["text"][span_i:span_j]
@@ -304,6 +303,10 @@ def to_docling_document(doc_glm, update_name_label=False) -> DoclingDocument:
current_list = None
doc.add_heading(text=text, prov=prov)
+ elif label == DocItemLabel.CODE:
+ current_list = None
+
+ doc.add_code(text=text, prov=prov)
else:
current_list = None
diff --git a/docling/utils/visualization.py b/docling/utils/visualization.py
new file mode 100644
index 00000000..465b7749
--- /dev/null
+++ b/docling/utils/visualization.py
@@ -0,0 +1,80 @@
+from docling_core.types.doc import DocItemLabel
+from PIL import Image, ImageDraw, ImageFont
+from PIL.ImageFont import FreeTypeFont
+
+from docling.datamodel.base_models import Cluster
+
+
+def draw_clusters(
+ image: Image.Image, clusters: list[Cluster], scale_x: float, scale_y: float
+) -> None:
+ """
+ Draw clusters on an image
+ """
+ draw = ImageDraw.Draw(image, "RGBA")
+ # Create a smaller font for the labels
+ font: ImageFont.ImageFont | FreeTypeFont
+ try:
+ font = ImageFont.truetype("arial.ttf", 12)
+ except OSError:
+ # Fallback to default font if arial is not available
+ font = ImageFont.load_default()
+ for c_tl in clusters:
+ all_clusters = [c_tl, *c_tl.children]
+ for c in all_clusters:
+ # Draw cells first (underneath)
+ cell_color = (0, 0, 0, 40) # Transparent black for cells
+ for tc in c.cells:
+ cx0, cy0, cx1, cy1 = tc.bbox.as_tuple()
+ cx0 *= scale_x
+ cx1 *= scale_x
+ cy0 *= scale_x
+ cy1 *= scale_y
+
+ draw.rectangle(
+ [(cx0, cy0), (cx1, cy1)],
+ outline=None,
+ fill=cell_color,
+ )
+ # Draw cluster rectangle
+ x0, y0, x1, y1 = c.bbox.as_tuple()
+ x0 *= scale_x
+ x1 *= scale_x
+ y0 *= scale_x
+ y1 *= scale_y
+
+ cluster_fill_color = (*list(DocItemLabel.get_color(c.label)), 70)
+ cluster_outline_color = (
+ *list(DocItemLabel.get_color(c.label)),
+ 255,
+ )
+ draw.rectangle(
+ [(x0, y0), (x1, y1)],
+ outline=cluster_outline_color,
+ fill=cluster_fill_color,
+ )
+ # Add label name and confidence
+ label_text = f"{c.label.name} ({c.confidence:.2f})"
+ # Create semi-transparent background for text
+ text_bbox = draw.textbbox((x0, y0), label_text, font=font)
+ text_bg_padding = 2
+ draw.rectangle(
+ [
+ (
+ text_bbox[0] - text_bg_padding,
+ text_bbox[1] - text_bg_padding,
+ ),
+ (
+ text_bbox[2] + text_bg_padding,
+ text_bbox[3] + text_bg_padding,
+ ),
+ ],
+ fill=(255, 255, 255, 180), # Semi-transparent white
+ )
+ # Draw text
+ draw.text(
+ (x0, y0),
+ label_text,
+ fill=(0, 0, 0, 255), # Solid black
+ font=font,
+ )
diff --git a/docs/concepts/chunking.md b/docs/concepts/chunking.md
index bed8bce3..94ae387e 100644
--- a/docs/concepts/chunking.md
+++ b/docs/concepts/chunking.md
@@ -54,12 +54,12 @@ tokens), &
chunks with same headings & captions) — users can opt out of this step via param
`merge_peers` (by default `True`)
-👉 Example: see [here](../../examples/hybrid_chunking).
+👉 Example: see [here](../examples/hybrid_chunking.ipynb).
## Hierarchical Chunker
The `HierarchicalChunker` implementation uses the document structure information from
-the [`DoclingDocument`](../docling_document) to create one chunk for each individual
+the [`DoclingDocument`](./docling_document.md) to create one chunk for each individual
detected document element, by default only merging together list items (can be opted out
via param `merge_list_items`). It also takes care of attaching all relevant document
metadata, including headers and captions.
diff --git a/docs/examples/custom_convert.py b/docs/examples/custom_convert.py
index a7efa975..49ab739a 100644
--- a/docs/examples/custom_convert.py
+++ b/docs/examples/custom_convert.py
@@ -5,7 +5,11 @@
from docling.backend.pypdfium2_backend import PyPdfiumDocumentBackend
from docling.datamodel.base_models import InputFormat
-from docling.datamodel.pipeline_options import PdfPipelineOptions
+from docling.datamodel.pipeline_options import (
+ AcceleratorDevice,
+ AcceleratorOptions,
+ PdfPipelineOptions,
+)
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.models.ocr_mac_model import OcrMacOptions
from docling.models.tesseract_ocr_cli_model import TesseractCliOcrOptions
@@ -76,7 +80,7 @@ def main():
pipeline_options.table_structure_options.do_cell_matching = True
pipeline_options.ocr_options.lang = ["es"]
pipeline_options.accelerator_options = AcceleratorOptions(
- num_threads=4, device=Device.AUTO
+ num_threads=4, device=AcceleratorDevice.AUTO
)
doc_converter = DocumentConverter(
diff --git a/docs/examples/develop_formula_understanding.py b/docs/examples/develop_formula_understanding.py
new file mode 100644
index 00000000..e2e508c3
--- /dev/null
+++ b/docs/examples/develop_formula_understanding.py
@@ -0,0 +1,88 @@
+import logging
+from pathlib import Path
+from typing import Iterable
+
+from docling_core.types.doc import DocItemLabel, DoclingDocument, NodeItem, TextItem
+
+from docling.datamodel.base_models import InputFormat, ItemAndImageEnrichmentElement
+from docling.datamodel.pipeline_options import PdfPipelineOptions
+from docling.document_converter import DocumentConverter, PdfFormatOption
+from docling.models.base_model import BaseItemAndImageEnrichmentModel
+from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline
+
+
+class ExampleFormulaUnderstandingPipelineOptions(PdfPipelineOptions):
+ do_formula_understanding: bool = True
+
+
+# A new enrichment model using both the document element and its image as input
+class ExampleFormulaUnderstandingEnrichmentModel(BaseItemAndImageEnrichmentModel):
+ images_scale = 2.6
+
+ def __init__(self, enabled: bool):
+ self.enabled = enabled
+
+ def is_processable(self, doc: DoclingDocument, element: NodeItem) -> bool:
+ return (
+ self.enabled
+ and isinstance(element, TextItem)
+ and element.label == DocItemLabel.FORMULA
+ )
+
+ def __call__(
+ self,
+ doc: DoclingDocument,
+ element_batch: Iterable[ItemAndImageEnrichmentElement],
+ ) -> Iterable[NodeItem]:
+ if not self.enabled:
+ return
+
+ for enrich_element in element_batch:
+ enrich_element.image.show()
+
+ yield enrich_element.item
+
+
+# How the pipeline can be extended.
+class ExampleFormulaUnderstandingPipeline(StandardPdfPipeline):
+
+ def __init__(self, pipeline_options: ExampleFormulaUnderstandingPipelineOptions):
+ super().__init__(pipeline_options)
+ self.pipeline_options: ExampleFormulaUnderstandingPipelineOptions
+
+ self.enrichment_pipe = [
+ ExampleFormulaUnderstandingEnrichmentModel(
+ enabled=self.pipeline_options.do_formula_understanding
+ )
+ ]
+
+ if self.pipeline_options.do_formula_understanding:
+ self.keep_backend = True
+
+ @classmethod
+ def get_default_options(cls) -> ExampleFormulaUnderstandingPipelineOptions:
+ return ExampleFormulaUnderstandingPipelineOptions()
+
+
+# Example main. In the final version, we simply have to set do_formula_understanding to true.
+def main():
+ logging.basicConfig(level=logging.INFO)
+
+ input_doc_path = Path("./tests/data/2203.01017v2.pdf")
+
+ pipeline_options = ExampleFormulaUnderstandingPipelineOptions()
+ pipeline_options.do_formula_understanding = True
+
+ doc_converter = DocumentConverter(
+ format_options={
+ InputFormat.PDF: PdfFormatOption(
+ pipeline_cls=ExampleFormulaUnderstandingPipeline,
+ pipeline_options=pipeline_options,
+ )
+ }
+ )
+ result = doc_converter.convert(input_doc_path)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/docs/examples/develop_picture_enrichment.py b/docs/examples/develop_picture_enrichment.py
index 7ad06e4a..81009fe8 100644
--- a/docs/examples/develop_picture_enrichment.py
+++ b/docs/examples/develop_picture_enrichment.py
@@ -22,7 +22,6 @@ class ExamplePictureClassifierPipelineOptions(PdfPipelineOptions):
class ExamplePictureClassifierEnrichmentModel(BaseEnrichmentModel):
-
def __init__(self, enabled: bool):
self.enabled = enabled
@@ -54,7 +53,6 @@ def __call__(
class ExamplePictureClassifierPipeline(StandardPdfPipeline):
-
def __init__(self, pipeline_options: ExamplePictureClassifierPipelineOptions):
super().__init__(pipeline_options)
self.pipeline_options: ExamplePictureClassifierPipeline
diff --git a/docs/examples/hybrid_chunking.ipynb b/docs/examples/hybrid_chunking.ipynb
index 6f097a8f..2b7861aa 100644
--- a/docs/examples/hybrid_chunking.ipynb
+++ b/docs/examples/hybrid_chunking.ipynb
@@ -4,7 +4,30 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Hybrid Chunking"
+ "# Hybrid chunking"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Overview"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Hybrid chunking applies tokenization-aware refinements on top of document-based hierarchical chunking.\n",
+ "\n",
+ "For more details, see [here](../../concepts/chunking#hybrid-chunker)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setup"
]
},
{
@@ -21,7 +44,7 @@
}
],
"source": [
- "%pip install -qU 'docling-core[chunking]' sentence-transformers transformers lancedb"
+ "%pip install -qU docling transformers"
]
},
{
@@ -48,21 +71,99 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Chunking"
+ "## Chunking\n",
+ "\n",
+ "### Basic usage\n",
+ "\n",
+ "For a basic usage scenario, we can just instantiate a `HybridChunker`, which will use\n",
+ "the default parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from docling.chunking import HybridChunker\n",
+ "\n",
+ "chunker = HybridChunker()\n",
+ "chunk_iter = chunker.chunk(dl_doc=doc)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that the text you would typically want to embed is the context-enriched one as\n",
+ "returned by the `serialize()` method:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "=== 0 ===\n",
+ "chunk.text:\n",
+ "'International Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American multinational technology company headquartered in Armonk, New York and present in over 175 countries.\\nIt is a publicly traded company and one of the 30 companies in the Dow Jones Industrial Aver…'\n",
+ "chunker.serialize(chunk):\n",
+ "'IBM\\nInternational Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American multinational technology company headquartered in Armonk, New York and present in over 175 countries.\\nIt is a publicly traded company and one of the 30 companies in the Dow Jones Industrial …'\n",
+ "\n",
+ "=== 1 ===\n",
+ "chunk.text:\n",
+ "'IBM originated with several technological innovations developed and commercialized in the late 19th century. Julius E. Pitrap patented the computing scale in 1885;[17] Alexander Dey invented the dial recorder (1888);[18] Herman Hollerith patented the Electric Tabulating Machine (1889);[19] and Willa…'\n",
+ "chunker.serialize(chunk):\n",
+ "'IBM\\n1910s–1950s\\nIBM originated with several technological innovations developed and commercialized in the late 19th century. Julius E. Pitrap patented the computing scale in 1885;[17] Alexander Dey invented the dial recorder (1888);[18] Herman Hollerith patented the Electric Tabulating Machine (1889…'\n",
+ "\n",
+ "=== 2 ===\n",
+ "chunk.text:\n",
+ "'Collectively, the companies manufactured a wide array of machinery for sale and lease, ranging from commercial scales and industrial time recorders, meat and cheese slicers, to tabulators and punched cards. Thomas J. Watson, Sr., fired from the National Cash Register Company by John Henry Patterson,…'\n",
+ "chunker.serialize(chunk):\n",
+ "'IBM\\n1910s–1950s\\nCollectively, the companies manufactured a wide array of machinery for sale and lease, ranging from commercial scales and industrial time recorders, meat and cheese slicers, to tabulators and punched cards. Thomas J. Watson, Sr., fired from the National Cash Register Company by John …'\n",
+ "\n",
+ "=== 3 ===\n",
+ "chunk.text:\n",
+ "'In 1961, IBM developed the SABRE reservation system for American Airlines and introduced the highly successful Selectric typewriter.…'\n",
+ "chunker.serialize(chunk):\n",
+ "'IBM\\n1960s–1980s\\nIn 1961, IBM developed the SABRE reservation system for American Airlines and introduced the highly successful Selectric typewriter.…'\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "for i, chunk in enumerate(chunk_iter):\n",
+ " print(f\"=== {i} ===\")\n",
+ " print(f\"chunk.text:\\n{repr(f'{chunk.text[:300]}…')}\")\n",
+ "\n",
+ " enriched_text = chunker.serialize(chunk=chunk)\n",
+ " print(f\"chunker.serialize(chunk):\\n{repr(f'{enriched_text[:300]}…')}\")\n",
+ "\n",
+ " print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "Notice how `tokenizer` and `embed_model` further below are single-sourced from `EMBED_MODEL_ID`.\n",
+ "### Advanced usage\n",
+ "\n",
+ "For more control on the chunking, we can parametrize through the `HybridChunker`\n",
+ "arguments illustrated below.\n",
"\n",
- "This is important for making sure the chunker and the embedding model are using the same tokenizer."
+ "Notice how `tokenizer` and `embed_model` further below are single-sourced from\n",
+ "`EMBED_MODEL_ID`.\n",
+ "This is important for making sure the chunker and the embedding model are using the same\n",
+ "tokenizer."
]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -71,14 +172,14 @@
"from docling.chunking import HybridChunker\n",
"\n",
"EMBED_MODEL_ID = \"sentence-transformers/all-MiniLM-L6-v2\"\n",
- "MAX_TOKENS = 64\n",
+ "MAX_TOKENS = 64 # set to a small number for illustrative purposes\n",
"\n",
"tokenizer = AutoTokenizer.from_pretrained(EMBED_MODEL_ID)\n",
"\n",
"chunker = HybridChunker(\n",
- " tokenizer=tokenizer, # can also just pass model name instead of tokenizer instance\n",
+ " tokenizer=tokenizer, # instance or model name, defaults to \"sentence-transformers/all-MiniLM-L6-v2\"\n",
" max_tokens=MAX_TOKENS, # optional, by default derived from `tokenizer`\n",
- " # merge_peers=True, # optional, defaults to True\n",
+ " merge_peers=True, # optional, defaults to True\n",
")\n",
"chunk_iter = chunker.chunk(dl_doc=doc)\n",
"chunks = list(chunk_iter)"
@@ -88,7 +189,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "Points to notice:\n",
+ "Points to notice looking at the output chunks below:\n",
"- Where possible, we fit the limit of 64 tokens for the metadata-enriched serialization form (see chunk 2)\n",
"- Where neeeded, we stop before the limit, e.g. see cases of 63 as it would otherwise run into a comma (see chunk 6)\n",
"- Where possible, we merge undersized peer chunks (see chunk 0)\n",
@@ -97,7 +198,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -245,174 +346,6 @@
"\n",
" print()"
]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Vector Retrieval"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
- "To disable this warning, you can either:\n",
- "\t- Avoid using `tokenizers` before the fork if possible\n",
- "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
- ]
- }
- ],
- "source": [
- "from sentence_transformers import SentenceTransformer\n",
- "\n",
- "embed_model = SentenceTransformer(EMBED_MODEL_ID)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " vector | \n",
- " text | \n",
- " headings | \n",
- " captions | \n",
- " _distance | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " [-0.1269039, -0.01948185, -0.07718097, -0.1116... | \n",
- " language, and the UPC barcode. The company has... | \n",
- " [IBM] | \n",
- " None | \n",
- " 1.164613 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " [-0.10198064, 0.0055981805, -0.05095279, -0.13... | \n",
- " IBM originated with several technological inno... | \n",
- " [IBM, 1910s–1950s] | \n",
- " None | \n",
- " 1.245144 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " [-0.057121325, -0.034115084, -0.018113216, -0.... | \n",
- " As one of the world's oldest and largest techn... | \n",
- " [IBM] | \n",
- " None | \n",
- " 1.355586 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " [-0.04429054, -0.058111433, -0.009330196, -0.0... | \n",
- " IBM is the largest industrial research organiz... | \n",
- " [IBM] | \n",
- " None | \n",
- " 1.398617 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " [-0.11920792, 0.053496413, -0.042391937, -0.03... | \n",
- " Awards.[16] | \n",
- " [IBM] | \n",
- " None | \n",
- " 1.446295 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " vector \\\n",
- "0 [-0.1269039, -0.01948185, -0.07718097, -0.1116... \n",
- "1 [-0.10198064, 0.0055981805, -0.05095279, -0.13... \n",
- "2 [-0.057121325, -0.034115084, -0.018113216, -0.... \n",
- "3 [-0.04429054, -0.058111433, -0.009330196, -0.0... \n",
- "4 [-0.11920792, 0.053496413, -0.042391937, -0.03... \n",
- "\n",
- " text headings \\\n",
- "0 language, and the UPC barcode. The company has... [IBM] \n",
- "1 IBM originated with several technological inno... [IBM, 1910s–1950s] \n",
- "2 As one of the world's oldest and largest techn... [IBM] \n",
- "3 IBM is the largest industrial research organiz... [IBM] \n",
- "4 Awards.[16] [IBM] \n",
- "\n",
- " captions _distance \n",
- "0 None 1.164613 \n",
- "1 None 1.245144 \n",
- "2 None 1.355586 \n",
- "3 None 1.398617 \n",
- "4 None 1.446295 "
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from pathlib import Path\n",
- "from tempfile import mkdtemp\n",
- "\n",
- "import lancedb\n",
- "\n",
- "\n",
- "def make_lancedb_index(db_uri, index_name, chunks, embedding_model):\n",
- " db = lancedb.connect(db_uri)\n",
- " data = []\n",
- " for chunk in chunks:\n",
- " embeddings = embedding_model.encode(chunker.serialize(chunk=chunk))\n",
- " data_item = {\n",
- " \"vector\": embeddings,\n",
- " \"text\": chunk.text,\n",
- " \"headings\": chunk.meta.headings,\n",
- " \"captions\": chunk.meta.captions,\n",
- " }\n",
- " data.append(data_item)\n",
- " tbl = db.create_table(index_name, data=data, exist_ok=True)\n",
- " return tbl\n",
- "\n",
- "\n",
- "db_uri = str(Path(mkdtemp()) / \"docling.db\")\n",
- "index = make_lancedb_index(db_uri, doc.name, chunks, embed_model)\n",
- "\n",
- "sample_query = \"invent\"\n",
- "sample_embedding = embed_model.encode(sample_query)\n",
- "results = index.search(sample_embedding).limit(5)\n",
- "\n",
- "results.to_pandas()"
- ]
}
],
"metadata": {
diff --git a/docs/examples/rag_azuresearch.ipynb b/docs/examples/rag_azuresearch.ipynb
new file mode 100644
index 00000000..4350ec2b
--- /dev/null
+++ b/docs/examples/rag_azuresearch.ipynb
@@ -0,0 +1,893 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Ag9kcX2B_atc"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# RAG with Azure AI Search"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "| Step | Tech | Execution |\n",
+ "| ------------------ | ------------------ | --------- |\n",
+ "| Embedding | Azure OpenAI | 🌐 Remote |\n",
+ "| Vector Store | Azure AI Search | 🌐 Remote |\n",
+ "| Gen AI | Azure OpenAI | 🌐 Remote |"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "This notebook demonstrates how to build a Retrieval-Augmented Generation (RAG) system using:\n",
+ "- [Docling](https://ds4sd.github.io/docling/) for document parsing and chunking\n",
+ "- [Azure AI Search](https://azure.microsoft.com/products/ai-services/ai-search/?msockid=0109678bea39665431e37323ebff6723) for vector indexing and retrieval\n",
+ "- [Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service?msockid=0109678bea39665431e37323ebff6723) for embeddings and chat completion\n",
+ "\n",
+ "This sample demonstrates how to:\n",
+ "1. Parse a PDF with Docling.\n",
+ "2. Chunk the parsed text.\n",
+ "3. Use Azure OpenAI for embeddings.\n",
+ "4. Index and search in Azure AI Search.\n",
+ "5. Run a retrieval-augmented generation (RAG) query with Azure OpenAI GPT-4o.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# If running in a fresh environment (like Google Colab), uncomment and run this single command:\n",
+ "%pip install \"docling~=2.12\" azure-search-documents==11.5.2 azure-identity openai rich torch python-dotenv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Part 0: Prerequisites\n",
+ " - **Azure AI Search** resource\n",
+ " - **Azure OpenAI** resource with a deployed embedding and chat completion model (e.g. `text-embedding-3-small` and `gpt-4o`) \n",
+ " - **Docling 2.12+** (installs `docling_core` automatically) Docling installed (Python 3.8+ environment)\n",
+ "\n",
+ "- A **GPU-enabled environment** is preferred for faster parsing. Docling 2.12 automatically detects GPU if present.\n",
+ " - If you only have CPU, parsing large PDFs can be slower. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "\n",
+ "from dotenv import load_dotenv\n",
+ "\n",
+ "load_dotenv()\n",
+ "\n",
+ "\n",
+ "def _get_env(key, default=None):\n",
+ " try:\n",
+ " from google.colab import userdata\n",
+ "\n",
+ " try:\n",
+ " return userdata.get(key)\n",
+ " except userdata.SecretNotFoundError:\n",
+ " pass\n",
+ " except ImportError:\n",
+ " pass\n",
+ " return os.getenv(key, default)\n",
+ "\n",
+ "\n",
+ "AZURE_SEARCH_ENDPOINT = _get_env(\"AZURE_SEARCH_ENDPOINT\")\n",
+ "AZURE_SEARCH_KEY = _get_env(\"AZURE_SEARCH_KEY\") # Ensure this is your Admin Key\n",
+ "AZURE_SEARCH_INDEX_NAME = _get_env(\"AZURE_SEARCH_INDEX_NAME\", \"docling-rag-sample\")\n",
+ "AZURE_OPENAI_ENDPOINT = _get_env(\"AZURE_OPENAI_ENDPOINT\")\n",
+ "AZURE_OPENAI_API_KEY = _get_env(\"AZURE_OPENAI_API_KEY\")\n",
+ "AZURE_OPENAI_API_VERSION = _get_env(\"AZURE_OPENAI_API_VERSION\", \"2024-10-21\")\n",
+ "AZURE_OPENAI_CHAT_MODEL = _get_env(\n",
+ " \"AZURE_OPENAI_CHAT_MODEL\"\n",
+ ") # Using a deployed model named \"gpt-4o\"\n",
+ "AZURE_OPENAI_EMBEDDINGS = _get_env(\n",
+ " \"AZURE_OPENAI_EMBEDDINGS\", \"text-embedding-3-small\"\n",
+ ") # Using a deployed model named \"text-embeddings-3-small\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Part 1: Parse the PDF with Docling\n",
+ "\n",
+ "We’ll parse the **Microsoft GraphRAG Research Paper** (~15 pages). Parsing should be relatively quick, even on CPU, but it will be faster on a GPU or MPS device if available.\n",
+ "\n",
+ "*(If you prefer a different document, simply provide a different URL or local file path.)*"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Parsing a ~15-page PDF. The process should be relatively quick, even on CPU...\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1;33mParsing a ~\u001b[0m\u001b[1;33m15\u001b[0m\u001b[1;33m-page PDF. The process should be relatively quick, even on CPU\u001b[0m\u001b[1;33m...\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "╭─────────────────────────────────────────── Docling Markdown Preview ────────────────────────────────────────────╮\n",
+ "│ ## From Local to Global: A Graph RAG Approach to Query-Focused Summarization │\n",
+ "│ │\n",
+ "│ Darren Edge 1† │\n",
+ "│ │\n",
+ "│ Ha Trinh 1† │\n",
+ "│ │\n",
+ "│ Newman Cheng 2 │\n",
+ "│ │\n",
+ "│ Joshua Bradley 2 │\n",
+ "│ │\n",
+ "│ Alex Chao 3 │\n",
+ "│ │\n",
+ "│ Apurva Mody 3 │\n",
+ "│ │\n",
+ "│ Steven Truitt 2 │\n",
+ "│ │\n",
+ "│ ## Jonathan Larson 1 │\n",
+ "│ │\n",
+ "│ 1 Microsoft Research 2 Microsoft Strategic Missions and Technologies 3 Microsoft Office of the CTO │\n",
+ "│ │\n",
+ "│ { daedge,trinhha,newmancheng,joshbradley,achao,moapurva,steventruitt,jolarso } @microsoft.com │\n",
+ "│ │\n",
+ "│ † These authors contributed equally to this work │\n",
+ "│ │\n",
+ "│ ## Abstract │\n",
+ "│ │\n",
+ "│ The use of retrieval-augmented gen... │\n",
+ "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "╭─────────────────────────────────────────── Docling Markdown Preview ────────────────────────────────────────────╮\n",
+ "│ ## From Local to Global: A Graph RAG Approach to Query-Focused Summarization │\n",
+ "│ │\n",
+ "│ Darren Edge 1† │\n",
+ "│ │\n",
+ "│ Ha Trinh 1† │\n",
+ "│ │\n",
+ "│ Newman Cheng 2 │\n",
+ "│ │\n",
+ "│ Joshua Bradley 2 │\n",
+ "│ │\n",
+ "│ Alex Chao 3 │\n",
+ "│ │\n",
+ "│ Apurva Mody 3 │\n",
+ "│ │\n",
+ "│ Steven Truitt 2 │\n",
+ "│ │\n",
+ "│ ## Jonathan Larson 1 │\n",
+ "│ │\n",
+ "│ 1 Microsoft Research 2 Microsoft Strategic Missions and Technologies 3 Microsoft Office of the CTO │\n",
+ "│ │\n",
+ "│ { daedge,trinhha,newmancheng,joshbradley,achao,moapurva,steventruitt,jolarso } @microsoft.com │\n",
+ "│ │\n",
+ "│ † These authors contributed equally to this work │\n",
+ "│ │\n",
+ "│ ## Abstract │\n",
+ "│ │\n",
+ "│ The use of retrieval-augmented gen... │\n",
+ "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from rich.console import Console\n",
+ "from rich.panel import Panel\n",
+ "\n",
+ "from docling.document_converter import DocumentConverter\n",
+ "\n",
+ "console = Console()\n",
+ "\n",
+ "# This URL points to the Microsoft GraphRAG Research Paper (arXiv: 2404.16130), ~15 pages\n",
+ "source_url = \"https://arxiv.org/pdf/2404.16130\"\n",
+ "\n",
+ "console.print(\n",
+ " \"[bold yellow]Parsing a ~15-page PDF. The process should be relatively quick, even on CPU...[/bold yellow]\"\n",
+ ")\n",
+ "converter = DocumentConverter()\n",
+ "result = converter.convert(source_url)\n",
+ "\n",
+ "# Optional: preview the parsed Markdown\n",
+ "md_preview = result.document.export_to_markdown()\n",
+ "console.print(Panel(md_preview[:500] + \"...\", title=\"Docling Markdown Preview\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Part 2: Hierarchical Chunking\n",
+ "We convert the `Document` into smaller chunks for embedding and indexing. The built-in `HierarchicalChunker` preserves structure. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Total chunks from PDF: 106\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "Total chunks from PDF: \u001b[1;36m106\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from docling.chunking import HierarchicalChunker\n",
+ "\n",
+ "chunker = HierarchicalChunker()\n",
+ "doc_chunks = list(chunker.chunk(result.document))\n",
+ "\n",
+ "all_chunks = []\n",
+ "for idx, c in enumerate(doc_chunks):\n",
+ " chunk_text = c.text\n",
+ " all_chunks.append((f\"chunk_{idx}\", chunk_text))\n",
+ "\n",
+ "console.print(f\"Total chunks from PDF: {len(all_chunks)}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Part 3: Create Azure Search Index and Push Chunk Embeddings\n",
+ "We’ll define a vector index in Azure AI Search, then embed each chunk using Azure OpenAI and upload in batches."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Index 'docling-rag-sample-2' created.\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "Index \u001b[32m'docling-rag-sample-2'\u001b[0m created.\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from azure.core.credentials import AzureKeyCredential\n",
+ "from azure.search.documents.indexes import SearchIndexClient\n",
+ "from azure.search.documents.indexes.models import (\n",
+ " AzureOpenAIVectorizer,\n",
+ " AzureOpenAIVectorizerParameters,\n",
+ " HnswAlgorithmConfiguration,\n",
+ " SearchableField,\n",
+ " SearchField,\n",
+ " SearchFieldDataType,\n",
+ " SearchIndex,\n",
+ " SimpleField,\n",
+ " VectorSearch,\n",
+ " VectorSearchProfile,\n",
+ ")\n",
+ "from rich.console import Console\n",
+ "\n",
+ "console = Console()\n",
+ "\n",
+ "VECTOR_DIM = 1536 # Adjust based on your chosen embeddings model\n",
+ "\n",
+ "index_client = SearchIndexClient(\n",
+ " AZURE_SEARCH_ENDPOINT, AzureKeyCredential(AZURE_SEARCH_KEY)\n",
+ ")\n",
+ "\n",
+ "\n",
+ "def create_search_index(index_name: str):\n",
+ " # Define fields\n",
+ " fields = [\n",
+ " SimpleField(name=\"chunk_id\", type=SearchFieldDataType.String, key=True),\n",
+ " SearchableField(name=\"content\", type=SearchFieldDataType.String),\n",
+ " SearchField(\n",
+ " name=\"content_vector\",\n",
+ " type=SearchFieldDataType.Collection(SearchFieldDataType.Single),\n",
+ " searchable=True,\n",
+ " filterable=False,\n",
+ " sortable=False,\n",
+ " facetable=False,\n",
+ " vector_search_dimensions=VECTOR_DIM,\n",
+ " vector_search_profile_name=\"default\",\n",
+ " ),\n",
+ " ]\n",
+ " # Vector search config with an AzureOpenAIVectorizer\n",
+ " vector_search = VectorSearch(\n",
+ " algorithms=[HnswAlgorithmConfiguration(name=\"default\")],\n",
+ " profiles=[\n",
+ " VectorSearchProfile(\n",
+ " name=\"default\",\n",
+ " algorithm_configuration_name=\"default\",\n",
+ " vectorizer_name=\"default\",\n",
+ " )\n",
+ " ],\n",
+ " vectorizers=[\n",
+ " AzureOpenAIVectorizer(\n",
+ " vectorizer_name=\"default\",\n",
+ " parameters=AzureOpenAIVectorizerParameters(\n",
+ " resource_url=AZURE_OPENAI_ENDPOINT,\n",
+ " deployment_name=AZURE_OPENAI_EMBEDDINGS,\n",
+ " model_name=\"text-embedding-3-small\",\n",
+ " api_key=AZURE_OPENAI_API_KEY,\n",
+ " ),\n",
+ " )\n",
+ " ],\n",
+ " )\n",
+ "\n",
+ " # Create or update the index\n",
+ " new_index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search)\n",
+ " try:\n",
+ " index_client.delete_index(index_name)\n",
+ " except:\n",
+ " pass\n",
+ "\n",
+ " index_client.create_or_update_index(new_index)\n",
+ " console.print(f\"Index '{index_name}' created.\")\n",
+ "\n",
+ "\n",
+ "create_search_index(AZURE_SEARCH_INDEX_NAME)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Embed and Upsert to Azure AI Search\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Uploaded batch 0 -> 50; all_succeeded: True, first_doc_status_code: 201\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "Uploaded batch \u001b[1;36m0\u001b[0m -> \u001b[1;36m50\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "Uploaded batch 50 -> 100; all_succeeded: True, first_doc_status_code: 201\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "Uploaded batch \u001b[1;36m50\u001b[0m -> \u001b[1;36m100\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "Uploaded batch 100 -> 106; all_succeeded: True, first_doc_status_code: 201\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "Uploaded batch \u001b[1;36m100\u001b[0m -> \u001b[1;36m106\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "All chunks uploaded to Azure Search.\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "All chunks uploaded to Azure Search.\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from azure.search.documents import SearchClient\n",
+ "from openai import AzureOpenAI\n",
+ "\n",
+ "search_client = SearchClient(\n",
+ " AZURE_SEARCH_ENDPOINT, AZURE_SEARCH_INDEX_NAME, AzureKeyCredential(AZURE_SEARCH_KEY)\n",
+ ")\n",
+ "openai_client = AzureOpenAI(\n",
+ " api_key=AZURE_OPENAI_API_KEY,\n",
+ " api_version=AZURE_OPENAI_API_VERSION,\n",
+ " azure_endpoint=AZURE_OPENAI_ENDPOINT,\n",
+ ")\n",
+ "\n",
+ "\n",
+ "def embed_text(text: str):\n",
+ " \"\"\"\n",
+ " Helper to generate embeddings with Azure OpenAI.\n",
+ " \"\"\"\n",
+ " response = openai_client.embeddings.create(\n",
+ " input=text, model=AZURE_OPENAI_EMBEDDINGS\n",
+ " )\n",
+ " return response.data[0].embedding\n",
+ "\n",
+ "\n",
+ "upload_docs = []\n",
+ "for chunk_id, chunk_text in all_chunks:\n",
+ " embedding_vector = embed_text(chunk_text)\n",
+ " upload_docs.append(\n",
+ " {\n",
+ " \"chunk_id\": chunk_id,\n",
+ " \"content\": chunk_text,\n",
+ " \"content_vector\": embedding_vector,\n",
+ " }\n",
+ " )\n",
+ "\n",
+ "\n",
+ "BATCH_SIZE = 50\n",
+ "for i in range(0, len(upload_docs), BATCH_SIZE):\n",
+ " subset = upload_docs[i : i + BATCH_SIZE]\n",
+ " resp = search_client.upload_documents(documents=subset)\n",
+ "\n",
+ " all_succeeded = all(r.succeeded for r in resp)\n",
+ " console.print(\n",
+ " f\"Uploaded batch {i} -> {i+len(subset)}; all_succeeded: {all_succeeded}, \"\n",
+ " f\"first_doc_status_code: {resp[0].status_code}\"\n",
+ " )\n",
+ "\n",
+ "console.print(\"All chunks uploaded to Azure Search.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Part 4: RAG Query with Azure OpenAI\n",
+ "Combine retrieval from Azure Search with Chat Completions (aka. grounding your LLM)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "╭────────────────────────────────────────────────── RAG Prompt ───────────────────────────────────────────────────╮\n",
+ "│ │\n",
+ "│ You are an AI assistant helping answering questions about Microsoft GraphRAG. │\n",
+ "│ Use ONLY the text below to answer the user's question. │\n",
+ "│ If the answer isn't in the text, say you don't know. │\n",
+ "│ │\n",
+ "│ Context: │\n",
+ "│ Community summaries vs. source texts. When comparing community summaries to source texts using Graph RAG, │\n",
+ "│ community summaries generally provided a small but consistent improvement in answer comprehensiveness and │\n",
+ "│ diversity, except for root-level summaries. Intermediate-level summaries in the Podcast dataset and low-level │\n",
+ "│ community summaries in the News dataset achieved comprehensiveness win rates of 57% and 64%, respectively. │\n",
+ "│ Diversity win rates were 57% for Podcast intermediate-level summaries and 60% for News low-level community │\n",
+ "│ summaries. Table 3 also illustrates the scalability advantages of Graph RAG compared to source text │\n",
+ "│ summarization: for low-level community summaries ( C3 ), Graph RAG required 26-33% fewer context tokens, while │\n",
+ "│ for root-level community summaries ( C0 ), it required over 97% fewer tokens. For a modest drop in performance │\n",
+ "│ compared with other global methods, root-level Graph RAG offers a highly efficient method for the iterative │\n",
+ "│ question answering that characterizes sensemaking activity, while retaining advantages in comprehensiveness │\n",
+ "│ (72% win rate) and diversity (62% win rate) over na¨ıve RAG. │\n",
+ "│ --- │\n",
+ "│ We have presented a global approach to Graph RAG, combining knowledge graph generation, retrieval-augmented │\n",
+ "│ generation (RAG), and query-focused summarization (QFS) to support human sensemaking over entire text corpora. │\n",
+ "│ Initial evaluations show substantial improvements over a na¨ıve RAG baseline for both the comprehensiveness and │\n",
+ "│ diversity of answers, as well as favorable comparisons to a global but graph-free approach using map-reduce │\n",
+ "│ source text summarization. For situations requiring many global queries over the same dataset, summaries of │\n",
+ "│ root-level communities in the entity-based graph index provide a data index that is both superior to na¨ıve RAG │\n",
+ "│ and achieves competitive performance to other global methods at a fraction of the token cost. │\n",
+ "│ --- │\n",
+ "│ Trade-offs of building a graph index . We consistently observed Graph RAG achieve the best headto-head results │\n",
+ "│ against other methods, but in many cases the graph-free approach to global summarization of source texts │\n",
+ "│ performed competitively. The real-world decision about whether to invest in building a graph index depends on │\n",
+ "│ multiple factors, including the compute budget, expected number of lifetime queries per dataset, and value │\n",
+ "│ obtained from other aspects of the graph index (including the generic community summaries and the use of other │\n",
+ "│ graph-related RAG approaches). │\n",
+ "│ --- │\n",
+ "│ Future work . The graph index, rich text annotations, and hierarchical community structure supporting the │\n",
+ "│ current Graph RAG approach offer many possibilities for refinement and adaptation. This includes RAG approaches │\n",
+ "│ that operate in a more local manner, via embedding-based matching of user queries and graph annotations, as │\n",
+ "│ well as the possibility of hybrid RAG schemes that combine embedding-based matching against community reports │\n",
+ "│ before employing our map-reduce summarization mechanisms. This 'roll-up' operation could also be extended │\n",
+ "│ across more levels of the community hierarchy, as well as implemented as a more exploratory 'drill down' │\n",
+ "│ mechanism that follows the information scent contained in higher-level community summaries. │\n",
+ "│ --- │\n",
+ "│ Advanced RAG systems include pre-retrieval, retrieval, post-retrieval strategies designed to overcome the │\n",
+ "│ drawbacks of Na¨ıve RAG, while Modular RAG systems include patterns for iterative and dynamic cycles of │\n",
+ "│ interleaved retrieval and generation (Gao et al., 2023). Our implementation of Graph RAG incorporates multiple │\n",
+ "│ concepts related to other systems. For example, our community summaries are a kind of self-memory (Selfmem, │\n",
+ "│ Cheng et al., 2024) for generation-augmented retrieval (GAR, Mao et al., 2020) that facilitates future │\n",
+ "│ generation cycles, while our parallel generation of community answers from these summaries is a kind of │\n",
+ "│ iterative (Iter-RetGen, Shao et al., 2023) or federated (FeB4RAG, Wang et al., 2024) retrieval-generation │\n",
+ "│ strategy. Other systems have also combined these concepts for multi-document summarization (CAiRE-COVID, Su et │\n",
+ "│ al., 2020) and multi-hop question answering (ITRG, Feng et al., 2023; IR-CoT, Trivedi et al., 2022; DSP, │\n",
+ "│ Khattab et al., 2022). Our use of a hierarchical index and summarization also bears resemblance to further │\n",
+ "│ approaches, such as generating a hierarchical index of text chunks by clustering the vectors of text embeddings │\n",
+ "│ (RAPTOR, Sarthi et al., 2024) or generating a 'tree of clarifications' to answer multiple interpretations of │\n",
+ "│ ambiguous questions (Kim et al., 2023). However, none of these iterative or hierarchical approaches use the │\n",
+ "│ kind of self-generated graph index that enables Graph RAG. │\n",
+ "│ --- │\n",
+ "│ The use of retrieval-augmented generation (RAG) to retrieve relevant information from an external knowledge │\n",
+ "│ source enables large language models (LLMs) to answer questions over private and/or previously unseen document │\n",
+ "│ collections. However, RAG fails on global questions directed at an entire text corpus, such as 'What are the │\n",
+ "│ main themes in the dataset?', since this is inherently a queryfocused summarization (QFS) task, rather than an │\n",
+ "│ explicit retrieval task. Prior QFS methods, meanwhile, fail to scale to the quantities of text indexed by │\n",
+ "│ typical RAGsystems. To combine the strengths of these contrasting methods, we propose a Graph RAG approach to │\n",
+ "│ question answering over private text corpora that scales with both the generality of user questions and the │\n",
+ "│ quantity of source text to be indexed. Our approach uses an LLM to build a graph-based text index in two │\n",
+ "│ stages: first to derive an entity knowledge graph from the source documents, then to pregenerate community │\n",
+ "│ summaries for all groups of closely-related entities. Given a question, each community summary is used to │\n",
+ "│ generate a partial response, before all partial responses are again summarized in a final response to the user. │\n",
+ "│ For a class of global sensemaking questions over datasets in the 1 million token range, we show that Graph RAG │\n",
+ "│ leads to substantial improvements over a na¨ıve RAG baseline for both the comprehensiveness and diversity of │\n",
+ "│ generated answers. An open-source, Python-based implementation of both global and local Graph RAG approaches is │\n",
+ "│ forthcoming at https://aka . ms/graphrag . │\n",
+ "│ --- │\n",
+ "│ Given the multi-stage nature of our Graph RAG mechanism, the multiple conditions we wanted to compare, and the │\n",
+ "│ lack of gold standard answers to our activity-based sensemaking questions, we decided to adopt a head-to-head │\n",
+ "│ comparison approach using an LLM evaluator. We selected three target metrics capturing qualities that are │\n",
+ "│ desirable for sensemaking activities, as well as a control metric (directness) used as a indicator of validity. │\n",
+ "│ Since directness is effectively in opposition to comprehensiveness and diversity, we would not expect any │\n",
+ "│ method to win across all four metrics. │\n",
+ "│ --- │\n",
+ "│ Figure 1: Graph RAG pipeline using an LLM-derived graph index of source document text. This index spans nodes │\n",
+ "│ (e.g., entities), edges (e.g., relationships), and covariates (e.g., claims) that have been detected, │\n",
+ "│ extracted, and summarized by LLM prompts tailored to the domain of the dataset. Community detection (e.g., │\n",
+ "│ Leiden, Traag et al., 2019) is used to partition the graph index into groups of elements (nodes, edges, │\n",
+ "│ covariates) that the LLM can summarize in parallel at both indexing time and query time. The 'global answer' to │\n",
+ "│ a given query is produced using a final round of query-focused summarization over all community summaries │\n",
+ "│ reporting relevance to that query. │\n",
+ "│ --- │\n",
+ "│ Retrieval-augmented generation (RAG, Lewis et al., 2020) is an established approach to answering user questions │\n",
+ "│ over entire datasets, but it is designed for situations where these answers are contained locally within │\n",
+ "│ regions of text whose retrieval provides sufficient grounding for the generation task. Instead, a more │\n",
+ "│ appropriate task framing is query-focused summarization (QFS, Dang, 2006), and in particular, query-focused │\n",
+ "│ abstractive summarization that generates natural language summaries and not just concatenated excerpts (Baumel │\n",
+ "│ et al., 2018; Laskar et al., 2020; Yao et al., 2017) . In recent years, however, such distinctions between │\n",
+ "│ summarization tasks that are abstractive versus extractive, generic versus query-focused, and single-document │\n",
+ "│ versus multi-document, have become less relevant. While early applications of the transformer architecture │\n",
+ "│ showed substantial improvements on the state-of-the-art for all such summarization tasks (Goodwin et al., 2020; │\n",
+ "│ Laskar et al., 2022; Liu and Lapata, 2019), these tasks are now trivialized by modern LLMs, including the GPT │\n",
+ "│ (Achiam et al., 2023; Brown et al., 2020), Llama (Touvron et al., 2023), and Gemini (Anil et al., 2023) series, │\n",
+ "│ all of which can use in-context learning to summarize any content provided in their context window. │\n",
+ "│ --- │\n",
+ "│ community descriptions provide complete coverage of the underlying graph index and the input documents it │\n",
+ "│ represents. Query-focused summarization of an entire corpus is then made possible using a map-reduce approach: │\n",
+ "│ first using each community summary to answer the query independently and in parallel, then summarizing all │\n",
+ "│ relevant partial answers into a final global answer. │\n",
+ "│ │\n",
+ "│ Question: What are the main advantages of using the Graph RAG approach for query-focused summarization compared │\n",
+ "│ to traditional RAG methods? │\n",
+ "│ Answer: │\n",
+ "│ │\n",
+ "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1;31m╭─\u001b[0m\u001b[1;31m─────────────────────────────────────────────────\u001b[0m RAG Prompt \u001b[1;31m──────────────────────────────────────────────────\u001b[0m\u001b[1;31m─╮\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mYou are an AI assistant helping answering questions about Microsoft GraphRAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mUse ONLY the text below to answer the user's question.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mIf the answer isn't in the text, say you don't know.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mContext:\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mCommunity summaries vs. source texts. When comparing community summaries to source texts using Graph RAG, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity summaries generally provided a small but consistent improvement in answer comprehensiveness and \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdiversity, except for root-level summaries. Intermediate-level summaries in the Podcast dataset and low-level \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity summaries in the News dataset achieved comprehensiveness win rates of 57% and 64%, respectively. \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mDiversity win rates were 57% for Podcast intermediate-level summaries and 60% for News low-level community \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummaries. Table 3 also illustrates the scalability advantages of Graph RAG compared to source text \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummarization: for low-level community summaries ( C3 ), Graph RAG required 26-33% fewer context tokens, while \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mfor root-level community summaries ( C0 ), it required over 97% fewer tokens. For a modest drop in performance \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcompared with other global methods, root-level Graph RAG offers a highly efficient method for the iterative \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquestion answering that characterizes sensemaking activity, while retaining advantages in comprehensiveness \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(72% win rate) and diversity (62% win rate) over na¨ıve RAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mWe have presented a global approach to Graph RAG, combining knowledge graph generation, retrieval-augmented \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgeneration (RAG), and query-focused summarization (QFS) to support human sensemaking over entire text corpora. \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mInitial evaluations show substantial improvements over a na¨ıve RAG baseline for both the comprehensiveness and\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdiversity of answers, as well as favorable comparisons to a global but graph-free approach using map-reduce \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msource text summarization. For situations requiring many global queries over the same dataset, summaries of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mroot-level communities in the entity-based graph index provide a data index that is both superior to na¨ıve RAG\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mand achieves competitive performance to other global methods at a fraction of the token cost.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mTrade-offs of building a graph index . We consistently observed Graph RAG achieve the best headto-head results \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31magainst other methods, but in many cases the graph-free approach to global summarization of source texts \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mperformed competitively. The real-world decision about whether to invest in building a graph index depends on \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmultiple factors, including the compute budget, expected number of lifetime queries per dataset, and value \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mobtained from other aspects of the graph index (including the generic community summaries and the use of other \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgraph-related RAG approaches).\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFuture work . The graph index, rich text annotations, and hierarchical community structure supporting the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcurrent Graph RAG approach offer many possibilities for refinement and adaptation. This includes RAG approaches\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mthat operate in a more local manner, via embedding-based matching of user queries and graph annotations, as \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mwell as the possibility of hybrid RAG schemes that combine embedding-based matching against community reports \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mbefore employing our map-reduce summarization mechanisms. This 'roll-up' operation could also be extended \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31macross more levels of the community hierarchy, as well as implemented as a more exploratory 'drill down' \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmechanism that follows the information scent contained in higher-level community summaries.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mAdvanced RAG systems include pre-retrieval, retrieval, post-retrieval strategies designed to overcome the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdrawbacks of Na¨ıve RAG, while Modular RAG systems include patterns for iterative and dynamic cycles of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31minterleaved retrieval and generation (Gao et al., 2023). Our implementation of Graph RAG incorporates multiple \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mconcepts related to other systems. For example, our community summaries are a kind of self-memory (Selfmem, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mCheng et al., 2024) for generation-augmented retrieval (GAR, Mao et al., 2020) that facilitates future \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgeneration cycles, while our parallel generation of community answers from these summaries is a kind of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31miterative (Iter-RetGen, Shao et al., 2023) or federated (FeB4RAG, Wang et al., 2024) retrieval-generation \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mstrategy. Other systems have also combined these concepts for multi-document summarization (CAiRE-COVID, Su et \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mal., 2020) and multi-hop question answering (ITRG, Feng et al., 2023; IR-CoT, Trivedi et al., 2022; DSP, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mKhattab et al., 2022). Our use of a hierarchical index and summarization also bears resemblance to further \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mapproaches, such as generating a hierarchical index of text chunks by clustering the vectors of text embeddings\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(RAPTOR, Sarthi et al., 2024) or generating a 'tree of clarifications' to answer multiple interpretations of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mambiguous questions (Kim et al., 2023). However, none of these iterative or hierarchical approaches use the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mkind of self-generated graph index that enables Graph RAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mThe use of retrieval-augmented generation (RAG) to retrieve relevant information from an external knowledge \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msource enables large language models (LLMs) to answer questions over private and/or previously unseen document \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcollections. However, RAG fails on global questions directed at an entire text corpus, such as 'What are the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmain themes in the dataset?', since this is inherently a queryfocused summarization (QFS) task, rather than an \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mexplicit retrieval task. Prior QFS methods, meanwhile, fail to scale to the quantities of text indexed by \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mtypical RAGsystems. To combine the strengths of these contrasting methods, we propose a Graph RAG approach to \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquestion answering over private text corpora that scales with both the generality of user questions and the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquantity of source text to be indexed. Our approach uses an LLM to build a graph-based text index in two \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mstages: first to derive an entity knowledge graph from the source documents, then to pregenerate community \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummaries for all groups of closely-related entities. Given a question, each community summary is used to \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgenerate a partial response, before all partial responses are again summarized in a final response to the user.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFor a class of global sensemaking questions over datasets in the 1 million token range, we show that Graph RAG \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mleads to substantial improvements over a na¨ıve RAG baseline for both the comprehensiveness and diversity of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgenerated answers. An open-source, Python-based implementation of both global and local Graph RAG approaches is\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mforthcoming at https://aka . ms/graphrag .\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mGiven the multi-stage nature of our Graph RAG mechanism, the multiple conditions we wanted to compare, and the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mlack of gold standard answers to our activity-based sensemaking questions, we decided to adopt a head-to-head \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcomparison approach using an LLM evaluator. We selected three target metrics capturing qualities that are \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdesirable for sensemaking activities, as well as a control metric (directness) used as a indicator of validity.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mSince directness is effectively in opposition to comprehensiveness and diversity, we would not expect any \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmethod to win across all four metrics.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFigure 1: Graph RAG pipeline using an LLM-derived graph index of source document text. This index spans nodes \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(e.g., entities), edges (e.g., relationships), and covariates (e.g., claims) that have been detected, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mextracted, and summarized by LLM prompts tailored to the domain of the dataset. Community detection (e.g., \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mLeiden, Traag et al., 2019) is used to partition the graph index into groups of elements (nodes, edges, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcovariates) that the LLM can summarize in parallel at both indexing time and query time. The 'global answer' to\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31ma given query is produced using a final round of query-focused summarization over all community summaries \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mreporting relevance to that query.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mRetrieval-augmented generation (RAG, Lewis et al., 2020) is an established approach to answering user questions\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mover entire datasets, but it is designed for situations where these answers are contained locally within \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mregions of text whose retrieval provides sufficient grounding for the generation task. Instead, a more \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mappropriate task framing is query-focused summarization (QFS, Dang, 2006), and in particular, query-focused \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mabstractive summarization that generates natural language summaries and not just concatenated excerpts (Baumel \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31met al., 2018; Laskar et al., 2020; Yao et al., 2017) . In recent years, however, such distinctions between \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummarization tasks that are abstractive versus extractive, generic versus query-focused, and single-document \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mversus multi-document, have become less relevant. While early applications of the transformer architecture \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mshowed substantial improvements on the state-of-the-art for all such summarization tasks (Goodwin et al., 2020;\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mLaskar et al., 2022; Liu and Lapata, 2019), these tasks are now trivialized by modern LLMs, including the GPT \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(Achiam et al., 2023; Brown et al., 2020), Llama (Touvron et al., 2023), and Gemini (Anil et al., 2023) series,\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mall of which can use in-context learning to summarize any content provided in their context window.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity descriptions provide complete coverage of the underlying graph index and the input documents it \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mrepresents. Query-focused summarization of an entire corpus is then made possible using a map-reduce approach: \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mfirst using each community summary to answer the query independently and in parallel, then summarizing all \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mrelevant partial answers into a final global answer.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mQuestion: What are the main advantages of using the Graph RAG approach for query-focused summarization compared\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mto traditional RAG methods?\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mAnswer:\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m│\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m│\u001b[0m\n",
+ "\u001b[1;31m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "╭───────────────────────────────────────────────── RAG Response ──────────────────────────────────────────────────╮\n",
+ "│ The main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG │\n",
+ "│ methods include: │\n",
+ "│ │\n",
+ "│ 1. **Improved Comprehensiveness and Diversity**: Graph RAG shows substantial improvements over a naïve RAG │\n",
+ "│ baseline in terms of the comprehensiveness and diversity of answers. This is particularly beneficial for global │\n",
+ "│ sensemaking questions over large datasets. │\n",
+ "│ │\n",
+ "│ 2. **Scalability**: Graph RAG provides scalability advantages, achieving efficient summarization with │\n",
+ "│ significantly fewer context tokens required. For instance, it requires 26-33% fewer tokens for low-level │\n",
+ "│ community summaries and over 97% fewer tokens for root-level summaries compared to source text summarization. │\n",
+ "│ │\n",
+ "│ 3. **Efficiency in Iterative Question Answering**: Root-level Graph RAG offers a highly efficient method for │\n",
+ "│ iterative question answering, which is crucial for sensemaking activities, with only a modest drop in │\n",
+ "│ performance compared to other global methods. │\n",
+ "│ │\n",
+ "│ 4. **Global Query Handling**: It supports handling global queries effectively, as it combines knowledge graph │\n",
+ "│ generation, retrieval-augmented generation, and query-focused summarization, making it suitable for sensemaking │\n",
+ "│ over entire text corpora. │\n",
+ "│ │\n",
+ "│ 5. **Hierarchical Indexing and Summarization**: The use of a hierarchical index and summarization allows for │\n",
+ "│ efficient processing and summarizing of community summaries into a final global answer, facilitating a │\n",
+ "│ comprehensive coverage of the underlying graph index and input documents. │\n",
+ "│ │\n",
+ "│ 6. **Reduced Token Cost**: For situations requiring many global queries over the same dataset, Graph RAG │\n",
+ "│ achieves competitive performance to other global methods at a fraction of the token cost. │\n",
+ "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1;32m╭─\u001b[0m\u001b[1;32m────────────────────────────────────────────────\u001b[0m RAG Response \u001b[1;32m─────────────────────────────────────────────────\u001b[0m\u001b[1;32m─╮\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mThe main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mmethods include:\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m1. **Improved Comprehensiveness and Diversity**: Graph RAG shows substantial improvements over a naïve RAG \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mbaseline in terms of the comprehensiveness and diversity of answers. This is particularly beneficial for global\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32msensemaking questions over large datasets.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m2. **Scalability**: Graph RAG provides scalability advantages, achieving efficient summarization with \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32msignificantly fewer context tokens required. For instance, it requires 26-33% fewer tokens for low-level \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mcommunity summaries and over 97% fewer tokens for root-level summaries compared to source text summarization.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m3. **Efficiency in Iterative Question Answering**: Root-level Graph RAG offers a highly efficient method for \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32miterative question answering, which is crucial for sensemaking activities, with only a modest drop in \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mperformance compared to other global methods.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m4. **Global Query Handling**: It supports handling global queries effectively, as it combines knowledge graph \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mgeneration, retrieval-augmented generation, and query-focused summarization, making it suitable for sensemaking\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mover entire text corpora.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m5. **Hierarchical Indexing and Summarization**: The use of a hierarchical index and summarization allows for \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mefficient processing and summarizing of community summaries into a final global answer, facilitating a \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mcomprehensive coverage of the underlying graph index and input documents.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m6. **Reduced Token Cost**: For situations requiring many global queries over the same dataset, Graph RAG \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m│\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32machieves competitive performance to other global methods at a fraction of the token cost.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m│\u001b[0m\n",
+ "\u001b[1;32m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from azure.search.documents.models import VectorizableTextQuery\n",
+ "\n",
+ "\n",
+ "def generate_chat_response(prompt: str, system_message: str = None):\n",
+ " \"\"\"\n",
+ " Generates a single-turn chat response using Azure OpenAI Chat.\n",
+ " If you need multi-turn conversation or follow-up queries, you'll have to\n",
+ " maintain the messages list externally.\n",
+ " \"\"\"\n",
+ " messages = []\n",
+ " if system_message:\n",
+ " messages.append({\"role\": \"system\", \"content\": system_message})\n",
+ " messages.append({\"role\": \"user\", \"content\": prompt})\n",
+ "\n",
+ " completion = openai_client.chat.completions.create(\n",
+ " model=AZURE_OPENAI_CHAT_MODEL, messages=messages, temperature=0.7\n",
+ " )\n",
+ " return completion.choices[0].message.content\n",
+ "\n",
+ "\n",
+ "user_query = \"What are the main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG methods?\"\n",
+ "user_embed = embed_text(user_query)\n",
+ "\n",
+ "vector_query = VectorizableTextQuery(\n",
+ " text=user_query, # passing in text for a hybrid search\n",
+ " k_nearest_neighbors=5,\n",
+ " fields=\"content_vector\",\n",
+ ")\n",
+ "\n",
+ "search_results = search_client.search(\n",
+ " search_text=user_query, vector_queries=[vector_query], select=[\"content\"], top=10\n",
+ ")\n",
+ "\n",
+ "retrieved_chunks = []\n",
+ "for result in search_results:\n",
+ " snippet = result[\"content\"]\n",
+ " retrieved_chunks.append(snippet)\n",
+ "\n",
+ "context_str = \"\\n---\\n\".join(retrieved_chunks)\n",
+ "rag_prompt = f\"\"\"\n",
+ "You are an AI assistant helping answering questions about Microsoft GraphRAG.\n",
+ "Use ONLY the text below to answer the user's question.\n",
+ "If the answer isn't in the text, say you don't know.\n",
+ "\n",
+ "Context:\n",
+ "{context_str}\n",
+ "\n",
+ "Question: {user_query}\n",
+ "Answer:\n",
+ "\"\"\"\n",
+ "\n",
+ "final_answer = generate_chat_response(rag_prompt)\n",
+ "\n",
+ "console.print(Panel(rag_prompt, title=\"RAG Prompt\", style=\"bold red\"))\n",
+ "console.print(Panel(final_answer, title=\"RAG Response\", style=\"bold green\"))"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "gpuType": "T4",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/docs/examples/rag_haystack.ipynb b/docs/examples/rag_haystack.ipynb
index e2dc380d..f4f61de8 100644
--- a/docs/examples/rag_haystack.ipynb
+++ b/docs/examples/rag_haystack.ipynb
@@ -14,6 +14,17 @@
"# RAG with Haystack"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "| Step | Tech | Execution | \n",
+ "| --- | --- | --- |\n",
+ "| Embedding | Hugging Face / Sentence Transformers | 💻 Local |\n",
+ "| Vector store | Milvus | 💻 Local |\n",
+ "| Gen AI | Hugging Face Inference API | 🌐 Remote | "
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -90,6 +101,7 @@
"from docling_haystack.converter import ExportType\n",
"from dotenv import load_dotenv\n",
"\n",
+ "\n",
"def _get_env_from_colab_or_os(key):\n",
" try:\n",
" from google.colab import userdata\n",
@@ -102,6 +114,7 @@
" pass\n",
" return os.getenv(key)\n",
"\n",
+ "\n",
"load_dotenv()\n",
"HF_TOKEN = _get_env_from_colab_or_os(\"HF_TOKEN\")\n",
"PATHS = [\"https://arxiv.org/pdf/2408.09869\"] # Docling Technical Report\n",
diff --git a/docs/examples/rag_langchain.ipynb b/docs/examples/rag_langchain.ipynb
index 31ff009a..ef8374aa 100644
--- a/docs/examples/rag_langchain.ipynb
+++ b/docs/examples/rag_langchain.ipynb
@@ -4,49 +4,47 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# RAG with LangChain 🦜🔗"
+ ""
]
},
{
- "cell_type": "code",
- "execution_count": 1,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Note: you may need to restart the kernel to use updated packages.\n"
- ]
- }
- ],
"source": [
- "# requirements for this example:\n",
- "%pip install -qq docling docling-core python-dotenv langchain-text-splitters langchain-huggingface langchain-milvus"
+ "# RAG with LangChain"
]
},
{
- "cell_type": "code",
- "execution_count": 2,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
"source": [
- "import os\n",
+ "| Step | Tech | Execution | \n",
+ "| --- | --- | --- |\n",
+ "| Embedding | Hugging Face / Sentence Transformers | 💻 Local |\n",
+ "| Vector store | Milvus | 💻 Local |\n",
+ "| Gen AI | Hugging Face Inference API | 🌐 Remote | "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This example leverages the\n",
+ "[LangChain Docling integration](../../integrations/langchain/), along with a Milvus\n",
+ "vector store, as well as sentence-transformers embeddings.\n",
"\n",
- "from dotenv import load_dotenv\n",
+ "The presented `DoclingLoader` component enables you to:\n",
+ "- use various document types in your LLM applications with ease and speed, and\n",
+ "- leverage Docling's rich format for advanced, document-native grounding.\n",
+ "\n",
+ "`DoclingLoader` supports two different export modes:\n",
+ "- `ExportType.MARKDOWN`: if you want to capture each input document as a separate\n",
+ " LangChain document, or\n",
+ "- `ExportType.DOC_CHUNKS` (default): if you want to have each input document chunked and\n",
+ " to then capture each individual chunk as a separate LangChain document downstream.\n",
"\n",
- "load_dotenv()"
+ "The example allows exploring both modes via parameter `EXPORT_TYPE`; depending on the\n",
+ "value set, the example pipeline is then set up accordingly."
]
},
{
@@ -60,129 +58,208 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Loader and splitter"
+ "- 👉 For best conversion speed, use GPU acceleration whenever available; e.g. if running on Colab, use GPU-enabled runtime.\n",
+ "- Notebook uses HuggingFace's Inference API; for increased LLM quota, token can be provided via env var `HF_TOKEN`.\n",
+ "- Requirements can be installed as shown below (`--no-warn-conflicts` meant for Colab's pre-populated Python env; feel free to remove for stricter usage):"
]
},
{
- "cell_type": "markdown",
+ "cell_type": "code",
+ "execution_count": 1,
"metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
"source": [
- "Below we set up:\n",
- "- a `Loader` which will be used to create LangChain documents, and\n",
- "- a splitter, which will be used to split these documents"
+ "%pip install -q --progress-bar off --no-warn-conflicts langchain-docling langchain-core langchain-huggingface langchain_milvus langchain python-dotenv"
]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
- "from typing import Iterator\n",
+ "import os\n",
+ "from pathlib import Path\n",
+ "from tempfile import mkdtemp\n",
"\n",
- "from langchain_core.document_loaders import BaseLoader\n",
- "from langchain_core.documents import Document as LCDocument\n",
+ "from dotenv import load_dotenv\n",
+ "from langchain_core.prompts import PromptTemplate\n",
+ "from langchain_docling.loader import ExportType\n",
+ "\n",
+ "\n",
+ "def _get_env_from_colab_or_os(key):\n",
+ " try:\n",
+ " from google.colab import userdata\n",
"\n",
- "from docling.document_converter import DocumentConverter\n",
+ " try:\n",
+ " return userdata.get(key)\n",
+ " except userdata.SecretNotFoundError:\n",
+ " pass\n",
+ " except ImportError:\n",
+ " pass\n",
+ " return os.getenv(key)\n",
"\n",
- "class DoclingPDFLoader(BaseLoader):\n",
"\n",
- " def __init__(self, file_path: str | list[str]) -> None:\n",
- " self._file_paths = file_path if isinstance(file_path, list) else [file_path]\n",
- " self._converter = DocumentConverter()\n",
+ "load_dotenv()\n",
"\n",
- " def lazy_load(self) -> Iterator[LCDocument]:\n",
- " for source in self._file_paths:\n",
- " dl_doc = self._converter.convert(source).document\n",
- " text = dl_doc.export_to_markdown()\n",
- " yield LCDocument(page_content=text)"
+ "# https://github.com/huggingface/transformers/issues/5486:\n",
+ "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\n",
+ "\n",
+ "HF_TOKEN = _get_env_from_colab_or_os(\"HF_TOKEN\")\n",
+ "FILE_PATH = [\"https://arxiv.org/pdf/2408.09869\"] # Docling Technical Report\n",
+ "EMBED_MODEL_ID = \"sentence-transformers/all-MiniLM-L6-v2\"\n",
+ "GEN_MODEL_ID = \"mistralai/Mixtral-8x7B-Instruct-v0.1\"\n",
+ "EXPORT_TYPE = ExportType.DOC_CHUNKS\n",
+ "QUESTION = \"Which are the main AI models in Docling?\"\n",
+ "PROMPT = PromptTemplate.from_template(\n",
+ " \"Context information is below.\\n---------------------\\n{context}\\n---------------------\\nGiven the context information and not prior knowledge, answer the query.\\nQuery: {input}\\nAnswer:\\n\",\n",
+ ")\n",
+ "TOP_K = 3\n",
+ "MILVUS_URI = str(Path(mkdtemp()) / \"docling.db\")"
]
},
{
- "cell_type": "code",
- "execution_count": 4,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [],
"source": [
- "FILE_PATH = \"https://raw.githubusercontent.com/DS4SD/docling/main/tests/data/2206.01062.pdf\" # DocLayNet paper"
+ "## Document loading\n",
+ "\n",
+ "Now we can instantiate our loader and load documents."
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Token indices sequence length is longer than the specified maximum sequence length for this model (1041 > 512). Running this sequence through the model will result in indexing errors\n"
+ ]
+ }
+ ],
"source": [
- "from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
+ "from langchain_docling import DoclingLoader\n",
"\n",
- "loader = DoclingPDFLoader(file_path=FILE_PATH)\n",
- "text_splitter = RecursiveCharacterTextSplitter(\n",
- " chunk_size=1000,\n",
- " chunk_overlap=200,\n",
- ")"
+ "from docling.chunking import HybridChunker\n",
+ "\n",
+ "loader = DoclingLoader(\n",
+ " file_path=FILE_PATH,\n",
+ " export_type=EXPORT_TYPE,\n",
+ " chunker=HybridChunker(tokenizer=EMBED_MODEL_ID),\n",
+ ")\n",
+ "\n",
+ "docs = loader.load()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "We now used the above-defined objects to get the document splits:"
+ "> Note: a message saying `\"Token indices sequence length is longer than the specified\n",
+ "maximum sequence length...\"` can be ignored in this case — details\n",
+ "[here](https://github.com/DS4SD/docling-core/issues/119#issuecomment-2577418826)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Determining the splits:"
]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
- "docs = loader.load()\n",
- "splits = text_splitter.split_documents(docs)"
+ "if EXPORT_TYPE == ExportType.DOC_CHUNKS:\n",
+ " splits = docs\n",
+ "elif EXPORT_TYPE == ExportType.MARKDOWN:\n",
+ " from langchain_text_splitters import MarkdownHeaderTextSplitter\n",
+ "\n",
+ " splitter = MarkdownHeaderTextSplitter(\n",
+ " headers_to_split_on=[\n",
+ " (\"#\", \"Header_1\"),\n",
+ " (\"##\", \"Header_2\"),\n",
+ " (\"###\", \"Header_3\"),\n",
+ " ],\n",
+ " )\n",
+ " splits = [split for doc in docs for split in splitter.split_text(doc.page_content)]\n",
+ "else:\n",
+ " raise ValueError(f\"Unexpected export type: {EXPORT_TYPE}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Embeddings"
+ "Inspecting some sample splits:"
]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "- d.page_content='arXiv:2408.09869v5 [cs.CL] 9 Dec 2024'\n",
+ "- d.page_content='Docling Technical Report\\nVersion 1.0\\nChristoph Auer Maksym Lysak Ahmed Nassar Michele Dolfi Nikolaos Livathinos Panos Vagenas Cesar Berrospi Ramis Matteo Omenetti Fabian Lindlbauer Kasper Dinkla Lokesh Mishra Yusik Kim Shubham Gupta Rafael Teixeira de Lima Valery Weber Lucas Morin Ingmar Meijer Viktor Kuropiatnyk Peter W. J. Staar\\nAI4K Group, IBM Research R¨uschlikon, Switzerland'\n",
+ "- d.page_content='Abstract\\nThis technical report introduces Docling , an easy to use, self-contained, MITlicensed open-source package for PDF document conversion. It is powered by state-of-the-art specialized AI models for layout analysis (DocLayNet) and table structure recognition (TableFormer), and runs efficiently on commodity hardware in a small resource budget. The code interface allows for easy extensibility and addition of new features and models.'\n",
+ "...\n"
+ ]
+ }
+ ],
"source": [
- "from langchain_huggingface.embeddings import HuggingFaceEmbeddings\n",
- "\n",
- "HF_EMBED_MODEL_ID = \"BAAI/bge-small-en-v1.5\"\n",
- "embeddings = HuggingFaceEmbeddings(model_name=HF_EMBED_MODEL_ID)"
+ "for d in splits[:3]:\n",
+ " print(f\"- {d.page_content=}\")\n",
+ "print(\"...\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Vector store"
+ "## Ingestion"
]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
- "from tempfile import TemporaryDirectory\n",
+ "import json\n",
+ "from pathlib import Path\n",
+ "from tempfile import mkdtemp\n",
"\n",
+ "from langchain_huggingface.embeddings import HuggingFaceEmbeddings\n",
"from langchain_milvus import Milvus\n",
"\n",
- "MILVUS_URI = os.environ.get(\n",
- " \"MILVUS_URI\", f\"{(tmp_dir := TemporaryDirectory()).name}/milvus_demo.db\"\n",
- ")\n",
+ "embedding = HuggingFaceEmbeddings(model_name=EMBED_MODEL_ID)\n",
+ "\n",
"\n",
+ "milvus_uri = str(Path(mkdtemp()) / \"docling.db\") # or set as needed\n",
"vectorstore = Milvus.from_documents(\n",
- " splits,\n",
- " embeddings,\n",
- " connection_args={\"uri\": MILVUS_URI},\n",
+ " documents=splits,\n",
+ " embedding=embedding,\n",
+ " collection_name=\"docling_demo\",\n",
+ " connection_args={\"uri\": milvus_uri},\n",
+ " index_params={\"index_type\": \"FLAT\"},\n",
" drop_old=True,\n",
")"
]
@@ -191,95 +268,94 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "### LLM"
+ "## RAG"
]
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
- "name": "stdout",
+ "name": "stderr",
"output_type": "stream",
"text": [
- "The token has not been saved to the git credentials helper. Pass `add_to_git_credential=True` in this function directly or `--add-to-git-credential` if using via `huggingface-cli` if you want to set the git credential as well.\n",
- "Token is valid (permission: write).\n",
- "Your token has been saved to /Users/pva/.cache/huggingface/token\n",
- "Login successful\n"
+ "Note: Environment variable`HF_TOKEN` is set and is the current active token independently from the token you've just configured.\n"
]
}
],
"source": [
+ "from langchain.chains import create_retrieval_chain\n",
+ "from langchain.chains.combine_documents import create_stuff_documents_chain\n",
"from langchain_huggingface import HuggingFaceEndpoint\n",
"\n",
- "HF_API_KEY = os.environ.get(\"HF_API_KEY\")\n",
- "HF_LLM_MODEL_ID = \"mistralai/Mistral-7B-Instruct-v0.3\"\n",
- "\n",
+ "retriever = vectorstore.as_retriever(search_kwargs={\"k\": TOP_K})\n",
"llm = HuggingFaceEndpoint(\n",
- " repo_id=HF_LLM_MODEL_ID,\n",
- " huggingfacehub_api_token=HF_API_KEY,\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## RAG"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "from typing import Iterable\n",
- "\n",
- "from langchain_core.documents import Document as LCDocument\n",
- "from langchain_core.output_parsers import StrOutputParser\n",
- "from langchain_core.prompts import PromptTemplate\n",
- "from langchain_core.runnables import RunnablePassthrough\n",
- "\n",
- "\n",
- "def format_docs(docs: Iterable[LCDocument]):\n",
- " return \"\\n\\n\".join(doc.page_content for doc in docs)\n",
- "\n",
- "\n",
- "retriever = vectorstore.as_retriever()\n",
- "\n",
- "prompt = PromptTemplate.from_template(\n",
- " \"Context information is below.\\n---------------------\\n{context}\\n---------------------\\nGiven the context information and not prior knowledge, answer the query.\\nQuery: {question}\\nAnswer:\\n\"\n",
+ " repo_id=GEN_MODEL_ID,\n",
+ " huggingfacehub_api_token=HF_TOKEN,\n",
")\n",
"\n",
- "rag_chain = (\n",
- " {\"context\": retriever | format_docs, \"question\": RunnablePassthrough()}\n",
- " | prompt\n",
- " | llm\n",
- " | StrOutputParser()\n",
- ")"
+ "\n",
+ "def clip_text(text, threshold=100):\n",
+ " return f\"{text[:threshold]}...\" if len(text) > threshold else text"
]
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
- "data": {
- "text/plain": [
- "'- 80,863 pages were human annotated for DocLayNet.'"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Question:\n",
+ "Which are the main AI models in Docling?\n",
+ "\n",
+ "Answer:\n",
+ "Docling initially releases two AI models, a layout analysis model and TableFormer. The layout analysis model is an accurate object-detector for page elements, and TableFormer is a state-of-the-art tab...\n",
+ "\n",
+ "Source 1:\n",
+ " text: \"3.2 AI models\\nAs part of Docling, we initially release two highly capable AI models to the open-source community, which have been developed and published recently by our team. The first model is a layout analysis model, an accurate object-detector for page elements [13]. The second model is TableFormer [12, 9], a state-of-the-art table structure re...\"\n",
+ " dl_meta: {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/50', 'parent': {'$ref': '#/body'}, 'children': [], 'label': 'text', 'prov': [{'page_no': 3, 'bbox': {'l': 108.0, 't': 405.1419982910156, 'r': 504.00299072265625, 'b': 330.7799987792969, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 608]}]}], 'headings': ['3.2 AI models'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 11465328351749295394, 'filename': '2408.09869v5.pdf'}}\n",
+ " source: https://arxiv.org/pdf/2408.09869\n",
+ "\n",
+ "Source 2:\n",
+ " text: \"3 Processing pipeline\\nDocling implements a linear pipeline of operations, which execute sequentially on each given document (see Fig. 1). Each document is first parsed by a PDF backend, which retrieves the programmatic text tokens, consisting of string content and its coordinates on the page, and also renders a bitmap image of each page to support ...\"\n",
+ " dl_meta: {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/26', 'parent': {'$ref': '#/body'}, 'children': [], 'label': 'text', 'prov': [{'page_no': 2, 'bbox': {'l': 108.0, 't': 273.01800537109375, 'r': 504.00299072265625, 'b': 176.83799743652344, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 796]}]}], 'headings': ['3 Processing pipeline'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 11465328351749295394, 'filename': '2408.09869v5.pdf'}}\n",
+ " source: https://arxiv.org/pdf/2408.09869\n",
+ "\n",
+ "Source 3:\n",
+ " text: \"6 Future work and contributions\\nDocling is designed to allow easy extension of the model library and pipelines. In the future, we plan to extend Docling with several more models, such as a figure-classifier model, an equationrecognition model, a code-recognition model and more. This will help improve the quality of conversion for specific types of ...\"\n",
+ " dl_meta: {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/76', 'parent': {'$ref': '#/body'}, 'children': [], 'label': 'text', 'prov': [{'page_no': 5, 'bbox': {'l': 108.0, 't': 322.468994140625, 'r': 504.00299072265625, 'b': 259.0169982910156, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 543]}]}, {'self_ref': '#/texts/77', 'parent': {'$ref': '#/body'}, 'children': [], 'label': 'text', 'prov': [{'page_no': 5, 'bbox': {'l': 108.0, 't': 251.6540069580078, 'r': 504.00299072265625, 'b': 198.99200439453125, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 402]}]}], 'headings': ['6 Future work and contributions'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 11465328351749295394, 'filename': '2408.09869v5.pdf'}}\n",
+ " source: https://arxiv.org/pdf/2408.09869\n"
+ ]
}
],
"source": [
- "rag_chain.invoke(\"How many pages were human annotated for DocLayNet?\")"
+ "question_answer_chain = create_stuff_documents_chain(llm, PROMPT)\n",
+ "rag_chain = create_retrieval_chain(retriever, question_answer_chain)\n",
+ "resp_dict = rag_chain.invoke({\"input\": QUESTION})\n",
+ "\n",
+ "clipped_answer = clip_text(resp_dict[\"answer\"], threshold=200)\n",
+ "print(f\"Question:\\n{resp_dict['input']}\\n\\nAnswer:\\n{clipped_answer}\")\n",
+ "for i, doc in enumerate(resp_dict[\"context\"]):\n",
+ " print()\n",
+ " print(f\"Source {i+1}:\")\n",
+ " print(f\" text: {json.dumps(clip_text(doc.page_content, threshold=350))}\")\n",
+ " for key in doc.metadata:\n",
+ " if key != \"pk\":\n",
+ " val = doc.metadata.get(key)\n",
+ " clipped_val = clip_text(val) if isinstance(val, str) else val\n",
+ " print(f\" {key}: {clipped_val}\")"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
@@ -298,7 +374,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.4"
+ "version": "3.12.8"
}
},
"nbformat": 4,
diff --git a/docs/examples/rag_llamaindex.ipynb b/docs/examples/rag_llamaindex.ipynb
index 0252bc4f..b0c5ddc1 100644
--- a/docs/examples/rag_llamaindex.ipynb
+++ b/docs/examples/rag_llamaindex.ipynb
@@ -11,7 +11,18 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# RAG with LlamaIndex 🦙"
+ "# RAG with LlamaIndex"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "| Step | Tech | Execution | \n",
+ "| --- | --- | --- |\n",
+ "| Embedding | Hugging Face / Sentence Transformers | 💻 Local |\n",
+ "| Vector store | Milvus | 💻 Local |\n",
+ "| Gen AI | Hugging Face Inference API | 🌐 Remote | "
]
},
{
@@ -462,7 +473,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.4"
+ "version": "3.12.7"
}
},
"nbformat": 4,
diff --git a/docs/examples/rag_weaviate.ipynb b/docs/examples/rag_weaviate.ipynb
index 7f897d9e..2d32c6c5 100644
--- a/docs/examples/rag_weaviate.ipynb
+++ b/docs/examples/rag_weaviate.ipynb
@@ -1,14 +1,33 @@
{
"cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DS4SD/docling/blob/main/docs/examples/rag_weaviate.ipynb)"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
"id": "Ag9kcX2B_atc"
},
"source": [
- "# Performing RAG over PDFs with Weaviate and Docling\n",
+ "# RAG with Weaviate"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "| Step | Tech | Execution | \n",
+ "| --- | --- | --- |\n",
+ "| Embedding | Open AI | 🌐 Remote |\n",
+ "| Vector store | Weavieate | 💻 Local |\n",
+ "| Gen AI | Open AI | 🌐 Remote |\n",
+ "\n",
"## A recipe 🧑🍳 🐥 💚\n",
- "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DS4SD/docling/blob/tree/main/docs/examples/rag_weaviate.ipynb)\n",
"\n",
"This is a code recipe that uses [Weaviate](https://weaviate.io/) to perform RAG over PDF documents parsed by [Docling](https://ds4sd.github.io/docling/).\n",
"\n",
@@ -711,7 +730,8 @@
"provenance": []
},
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": ".venv",
+ "language": "python",
"name": "python3"
},
"language_info": {
@@ -724,7 +744,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.10"
+ "version": "3.12.7"
}
},
"nbformat": 4,
diff --git a/docs/examples/hybrid_rag_qdrant.ipynb b/docs/examples/retrieval_qdrant.ipynb
similarity index 53%
rename from docs/examples/hybrid_rag_qdrant.ipynb
rename to docs/examples/retrieval_qdrant.ipynb
index bbc8e575..cda50ac7 100644
--- a/docs/examples/hybrid_rag_qdrant.ipynb
+++ b/docs/examples/retrieval_qdrant.ipynb
@@ -12,7 +12,17 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Hybrid RAG with Qdrant"
+ "# Retrieval with Qdrant"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "| Step | Tech | Execution | \n",
+ "| --- | --- | --- |\n",
+ "| Embedding | FastEmbed | 💻 Local |\n",
+ "| Vector store | Qdrant | 💻 Local |"
]
},
{
@@ -47,22 +57,19 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\n",
- "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
- "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
- "%pip install --no-warn-conflicts -q qdrant-client docling docling-core fastembed"
+ "%pip install --no-warn-conflicts -q qdrant-client docling fastembed"
]
},
{
@@ -74,13 +81,13 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
- "from docling_core.transforms.chunker import HierarchicalChunker\n",
"from qdrant_client import QdrantClient\n",
"\n",
+ "from docling.chunking import HybridChunker\n",
"from docling.datamodel.base_models import InputFormat\n",
"from docling.document_converter import DocumentConverter"
]
@@ -95,36 +102,16 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
"metadata": {},
"outputs": [
{
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "c1077c6634d9434584c41cc12f9107c9",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Fetching 5 files: 0%| | 0/5 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "67069c07b73448d491944452159d10bc",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Fetching 29 files: 0%| | 0/29 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/pva/work/github.com/DS4SD/docling/.venv/lib/python3.12/site-packages/huggingface_hub/utils/tqdm.py:155: UserWarning: Cannot enable progress bars: environment variable `HF_HUB_DISABLE_PROGRESS_BARS=1` is set and has priority.\n",
+ " warnings.warn(\n"
+ ]
}
],
"source": [
@@ -149,7 +136,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
@@ -157,7 +144,7 @@
" \"https://www.sagacify.com/news/a-guide-to-chunking-strategies-for-retrieval-augmented-generation-rag\"\n",
")\n",
"documents, metadatas = [], []\n",
- "for chunk in HierarchicalChunker().chunk(result.document):\n",
+ "for chunk in HybridChunker().chunk(result.document):\n",
" documents.append(chunk.text)\n",
" metadatas.append(chunk.meta.export_json_dict())"
]
@@ -173,95 +160,119 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['e74ae15be5eb4805858307846318e784',\n",
- " 'f83f6125b0fa4a0595ae6a0777c9d90d',\n",
- " '9cf63c7f30764715bf3804a19db36d7d',\n",
- " '007dbe6d355b4b49af3b736cbd63a4d8',\n",
- " 'e5e31f21f2e84aa68beca0dfc532cbe9',\n",
- " '69c10816af204bb28630a1f957d8dd3e',\n",
- " 'b63546b9b1744063bdb076b234d883ca',\n",
- " '90ad15ba8fa6494489e1d3221e30bfcf',\n",
- " '13517debb483452ea40fc7aa04c08c50',\n",
- " '84ccab5cfab74e27a55acef1c63e3fad',\n",
- " 'e8aa2ef46d234c5a8a9da64b701d60b4',\n",
- " '190bea5ba43c45e792197c50898d1d90',\n",
- " 'a730319ea65645ca81e735ace0bcc72e',\n",
- " '415e7f6f15864e30b836e23ae8d71b43',\n",
- " '5569bce4e65541868c762d149c6f491e',\n",
- " '74d9b234e9c04ebeb8e4e1ca625789ac',\n",
- " '308b1c5006a94a679f4c8d6f2396993c',\n",
- " 'aaa5ec6d385a418388e660c425bf1dbe',\n",
- " '630be8e43e4e4472a9cdb9af9462a43a',\n",
- " '643b316224de4770a5349bf69cf93471',\n",
- " 'da9265e6f6c2485493d15223eefdf411',\n",
- " 'a916e447d52c4084b5ce81a0c5a65b07',\n",
- " '2883c620858e4e728b88e127155a4f2c',\n",
- " '2a998f0e9c124af99027060b94027874',\n",
- " 'be551fbd2b9e42f48ebae0cbf1f481bc',\n",
- " '95b7f7608e974ca6847097ee4590fba1',\n",
- " '309db4f3863b4e3aaf16d5f346c309f3',\n",
- " 'c818383267f64fd68b2237b024bd724e',\n",
- " '1f16e78338c94238892171b400051cd4',\n",
- " '25c680c3e064462cab071ea9bf1bad8c',\n",
- " 'f41ab7e480a248c6bb87019341c7ca74',\n",
- " 'd440128bed6d4dcb987152b48ecd9a8a',\n",
- " 'c110d5dfdc5849808851788c2404dd15']"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
- "client.add(COLLECTION_NAME, documents=documents, metadata=metadatas, batch_size=64)"
+ "_ = client.add(\n",
+ " collection_name=COLLECTION_NAME,\n",
+ " documents=documents,\n",
+ " metadata=metadatas,\n",
+ " batch_size=64,\n",
+ ")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Query Documents"
+ "## Retrieval"
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "points = client.query(\n",
+ " collection_name=COLLECTION_NAME,\n",
+ " query_text=\"Can I split documents?\",\n",
+ " limit=10,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "<=== Retrieved documents ===>\n",
- "Document Specific Chunking is a strategy that respects the document's structure. Rather than using a set number of characters or a recursive process, it creates chunks that align with the logical sections of the document, like paragraphs or subsections. This approach maintains the original author's organization of content and helps keep the text coherent. It makes the retrieved information more relevant and useful, particularly for structured documents with clearly defined sections.\n",
- "Document Specific Chunking can handle a variety of document formats, such as:\n",
- "Consequently, there are also splitters available for this purpose.\n",
+ "=== 0 ===\n",
+ "Have you ever wondered how we, humans, would chunk? Here's a breakdown of a possible way a human would process a new document:\n",
"1. We start at the top of the document, treating the first part as a chunk.\n",
" 2. We continue down the document, deciding if a new sentence or piece of information belongs with the first chunk or should start a new one.\n",
" 3. We keep this up until we reach the end of the document.\n",
- "Have you ever wondered how we, humans, would chunk? Here's a breakdown of a possible way a human would process a new document:\n",
- "The goal of chunking is, as its name says, to chunk the information into multiple smaller pieces in order to store it in a more efficient and meaningful way. This allows the retrieval to capture pieces of information that are more related to the question at hand, and the generation to be more precise, but also less costly, as only a part of a document will be included in the LLM prompt, instead of the whole document.\n",
+ "The ultimate dream? Having an agent do this for you. But slow down! This approach is still being tested and isn't quite ready for the big leagues due to the time it takes to process multiple LLM calls and the cost of those calls. There's no implementation available in public libraries just yet. However, Greg Kamradt has his version available here.\n",
+ "\n",
+ "=== 1 ===\n",
+ "Document Specific Chunking is a strategy that respects the document's structure. Rather than using a set number of characters or a recursive process, it creates chunks that align with the logical sections of the document, like paragraphs or subsections. This approach maintains the original author's organization of content and helps keep the text coherent. It makes the retrieved information more relevant and useful, particularly for structured documents with clearly defined sections.\n",
+ "Document Specific Chunking can handle a variety of document formats, such as:\n",
+ "Markdown\n",
+ "HTML\n",
+ "Python\n",
+ "etc\n",
+ "Here we’ll take Markdown as our example and use a modified version of our first sample text:\n",
+ "\n",
+ "The result is the following:\n",
+ "You can see here that with a chunk size of 105, the Markdown structure of the document is taken into account, and the chunks thus preserve the semantics of the text!\n",
+ "\n",
+ "=== 2 ===\n",
+ "And there you have it! These chunking strategies are like a personal toolbox when it comes to implementing Retrieval Augmented Generation. They're a ton of ways to slice and dice text, each with its unique features and quirks. This variety gives you the freedom to pick the strategy that suits your project best, allowing you to tailor your approach to perfectly fit the unique needs of your work.\n",
"To put these strategies into action, there's a whole array of tools and libraries at your disposal. For example, llama_index is a fantastic tool that lets you create document indices and retrieve chunked documents. Let's not forget LangChain, another remarkable tool that makes implementing chunking strategies a breeze, particularly when dealing with multi-language data. Diving into these tools and understanding how they can work in harmony with the chunking strategies we've discussed is a crucial part of mastering Retrieval Augmented Generation.\n",
+ "By the way, if you're eager to experiment with your own examples using the chunking visualisation tool featured in this blog, feel free to give it a try! You can access it right here. Enjoy, and happy chunking! 😉\n",
+ "\n",
+ "=== 3 ===\n",
+ "Retrieval Augmented Generation (RAG) has been a hot topic in understanding, interpreting, and generating text with AI for the last few months. It's like a wonderful union of retrieval-based and generative models, creating a playground for researchers, data scientists, and natural language processing enthusiasts, like you and me.\n",
+ "To truly control the results produced by our RAG, we need to understand chunking strategies and their role in the process of retrieving and generating text. Indeed, each chunking strategy enhances RAG's effectiveness in its unique way.\n",
+ "The goal of chunking is, as its name says, to chunk the information into multiple smaller pieces in order to store it in a more efficient and meaningful way. This allows the retrieval to capture pieces of information that are more related to the question at hand, and the generation to be more precise, but also less costly, as only a part of a document will be included in the LLM prompt, instead of the whole document.\n",
+ "Let's explore some chunking strategies together.\n",
+ "The methods mentioned in the article you're about to read usually make use of two key parameters. First, we have [chunk_size]— which controls the size of your text chunks. Then there's [chunk_overlap], which takes care of how much text overlaps between one chunk and the next.\n",
+ "\n",
+ "=== 4 ===\n",
+ "Semantic Chunking considers the relationships within the text. It divides the text into meaningful, semantically complete chunks. This approach ensures the information's integrity during retrieval, leading to a more accurate and contextually appropriate outcome.\n",
"Semantic chunking involves taking the embeddings of every sentence in the document, comparing the similarity of all sentences with each other, and then grouping sentences with the most similar embeddings together.\n",
- "You can see here that with a chunk size of 105, the Markdown structure of the document is taken into account, and the chunks thus preserve the semantics of the text!\n",
- "And there you have it! These chunking strategies are like a personal toolbox when it comes to implementing Retrieval Augmented Generation. They're a ton of ways to slice and dice text, each with its unique features and quirks. This variety gives you the freedom to pick the strategy that suits your project best, allowing you to tailor your approach to perfectly fit the unique needs of your work.\n"
+ "By focusing on the text's meaning and context, Semantic Chunking significantly enhances the quality of retrieval. It's a top-notch choice when maintaining the semantic integrity of the text is vital.\n",
+ "However, this method does require more effort and is notably slower than the previous ones.\n",
+ "On our example text, since it is quite short and does not expose varied subjects, this method would only generate a single chunk.\n",
+ "\n",
+ "=== 5 ===\n",
+ "Language models used in the rest of your possible RAG pipeline have a token limit, which should not be exceeded. When dividing your text into chunks, it's advisable to count the number of tokens. Plenty of tokenizers are available. To ensure accuracy, use the same tokenizer for counting tokens as the one used in the language model.\n",
+ "Consequently, there are also splitters available for this purpose.\n",
+ "For instance, by using the [SpacyTextSplitter] from LangChain, the following chunks are created:\n",
+ "\n",
+ "\n",
+ "=== 6 ===\n",
+ "First things first, we have Character Chunking. This strategy divides the text into chunks based on a fixed number of characters. Its simplicity makes it a great starting point, but it can sometimes disrupt the text's flow, breaking sentences or words in unexpected places. Despite its limitations, it's a great stepping stone towards more advanced methods.\n",
+ "Now let’s see that in action with an example. Imagine a text that reads:\n",
+ "If we decide to set our chunk size to 100 and no chunk overlap, we'd end up with the following chunks. As you can see, Character Chunking can lead to some intriguing, albeit sometimes nonsensical, results, cutting some of the sentences in their middle.\n",
+ "By choosing a smaller chunk size, we would obtain more chunks, and by setting a bigger chunk overlap, we could obtain something like this:\n",
+ "\n",
+ "Also, by default this method creates chunks character by character based on the empty character [’ ’]. But you can specify a different one in order to chunk on something else, even a complete word! For instance, by specifying [' '] as the separator, you can avoid cutting words in their middle.\n",
+ "\n",
+ "=== 7 ===\n",
+ "Next, let's take a look at Recursive Character Chunking. Based on the basic concept of Character Chunking, this advanced version takes it up a notch by dividing the text into chunks until a certain condition is met, such as reaching a minimum chunk size. This method ensures that the chunking process aligns with the text's structure, preserving more meaning. Its adaptability makes Recursive Character Chunking great for texts with varied structures.\n",
+ "Again, let’s use the same example in order to illustrate this method. With a chunk size of 100, and the default settings for the other parameters, we obtain the following chunks:\n",
+ "\n"
]
}
],
"source": [
- "points = client.query(COLLECTION_NAME, query_text=\"Can I split documents?\", limit=10)\n",
- "\n",
- "print(\"<=== Retrieved documents ===>\")\n",
- "for point in points:\n",
- " print(point.document)"
+ "for i, point in enumerate(points):\n",
+ " print(f\"=== {i} ===\")\n",
+ " print(point.document)\n",
+ " print()"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
@@ -280,7 +291,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.0"
+ "version": "3.12.7"
}
},
"nbformat": 4,
diff --git a/docs/examples/translate.py b/docs/examples/translate.py
new file mode 100644
index 00000000..a36c6f71
--- /dev/null
+++ b/docs/examples/translate.py
@@ -0,0 +1,75 @@
+import logging
+import time
+from pathlib import Path
+
+from docling_core.types.doc import ImageRefMode, PictureItem, TableItem, TextItem
+
+from docling.datamodel.base_models import FigureElement, InputFormat, Table
+from docling.datamodel.pipeline_options import PdfPipelineOptions
+from docling.document_converter import DocumentConverter, PdfFormatOption
+
+_log = logging.getLogger(__name__)
+
+IMAGE_RESOLUTION_SCALE = 2.0
+
+
+# FIXME: put in your favorite translation code ....
+def translate(text: str, src: str = "en", dest: str = "de"):
+
+ _log.warning("!!! IMPLEMENT HERE YOUR FAVORITE TRANSLATION CODE!!!")
+ # from googletrans import Translator
+
+ # Initialize the translator
+ # translator = Translator()
+
+ # Translate text from English to German
+ # text = "Hello, how are you?"
+ # translated = translator.translate(text, src="en", dest="de")
+
+ return text
+
+
+def main():
+ logging.basicConfig(level=logging.INFO)
+
+ input_doc_path = Path("./tests/data/2206.01062.pdf")
+ output_dir = Path("scratch")
+
+ # Important: For operating with page images, we must keep them, otherwise the DocumentConverter
+ # will destroy them for cleaning up memory.
+ # This is done by setting PdfPipelineOptions.images_scale, which also defines the scale of images.
+ # scale=1 correspond of a standard 72 DPI image
+ # The PdfPipelineOptions.generate_* are the selectors for the document elements which will be enriched
+ # with the image field
+ pipeline_options = PdfPipelineOptions()
+ pipeline_options.images_scale = IMAGE_RESOLUTION_SCALE
+ pipeline_options.generate_page_images = True
+ pipeline_options.generate_picture_images = True
+
+ doc_converter = DocumentConverter(
+ format_options={
+ InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
+ }
+ )
+
+ start_time = time.time()
+
+ conv_res = doc_converter.convert(input_doc_path)
+ conv_doc = conv_res.document
+
+ # Save markdown with embedded pictures in original text
+ md_filename = output_dir / f"{doc_filename}-with-images-orig.md"
+ conv_doc.save_as_markdown(md_filename, image_mode=ImageRefMode.EMBEDDED)
+
+ for element, _level in conv_res.document.iterate_items():
+ if isinstance(element, TextItem):
+ element.orig = element.text
+ element.text = translate(text=element.text)
+
+ elif isinstance(element, TableItem):
+ for cell in element.data.table_cells:
+ cell.text = translate(text=element.text)
+
+ # Save markdown with embedded pictures in translated text
+ md_filename = output_dir / f"{doc_filename}-with-images-translated.md"
+ conv_doc.save_as_markdown(md_filename, image_mode=ImageRefMode.EMBEDDED)
diff --git a/docs/index.md b/docs/index.md
index 7b741728..c88ee7c6 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -21,7 +21,7 @@ Docling parses documents and exports them to the desired format with ease and sp
* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to HTML, Markdown and JSON (with embedded and referenced images)
* 📑 Advanced PDF document understanding incl. page layout, reading order & table structures
* 🧩 Unified, expressive [DoclingDocument](./concepts/docling_document.md) representation format
-* 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications
+* 🤖 Plug-and-play [integrations](https://ds4sd.github.io/docling/integrations/) incl. LangChain, LlamaIndex, Crew AI & Haystack for agentic AI
* 🔍 OCR support for scanned PDFs
* 💻 Simple and convenient CLI
@@ -29,7 +29,15 @@ Docling parses documents and exports them to the desired format with ease and sp
* ♾️ Equation & code extraction
* 📝 Metadata extraction, including title, authors, references & language
-* 🦜🔗 Native LangChain extension
+
+## Get started
+
+
## IBM ❤️ Open Source AI
diff --git a/docs/integrations/crewai.md b/docs/integrations/crewai.md
new file mode 100644
index 00000000..ec823ada
--- /dev/null
+++ b/docs/integrations/crewai.md
@@ -0,0 +1,10 @@
+Docling is available in [CrewAI](https://www.crewai.com/) as the `CrewDoclingSource`
+knowledge source.
+
+- 💻 [Crew AI GitHub][github]
+- 📖 [Crew AI knowledge docs][docs]
+- 📦 [Crew AI PyPI][package]
+
+[github]: https://github.com/crewAIInc/crewAI/
+[docs]: https://docs.crewai.com/concepts/knowledge
+[package]: https://pypi.org/project/crewai/
diff --git a/docs/integrations/haystack.md b/docs/integrations/haystack.md
index 08d051f0..77507e21 100644
--- a/docs/integrations/haystack.md
+++ b/docs/integrations/haystack.md
@@ -1,6 +1,6 @@
Docling is available as a converter in [Haystack](https://haystack.deepset.ai/):
-- 📖 [Docling Haystack integration docs](https://haystack.deepset.ai/integrations/docling)
+- 📖 [Docling Haystack integration docs][docs]
- 💻 [Docling Haystack integration GitHub][github]
- 🧑🏽🍳 [Docling Haystack integration example][example]
- 📦 [Docling Haystack integration PyPI][pypi]
@@ -8,4 +8,4 @@ Docling is available as a converter in [Haystack](https://haystack.deepset.ai/):
[github]: https://github.com/DS4SD/docling-haystack
[docs]: https://haystack.deepset.ai/integrations/docling
[pypi]: https://pypi.org/project/docling-haystack
-[example]: https://ds4sd.github.io/docling/examples/rag_haystack/
+[example]: ../examples/rag_haystack.ipynb
diff --git a/docs/integrations/langchain.md b/docs/integrations/langchain.md
new file mode 100644
index 00000000..bee3c0da
--- /dev/null
+++ b/docs/integrations/langchain.md
@@ -0,0 +1,14 @@
+Docling is available as an official [LangChain](https://python.langchain.com/) extension.
+
+To get started, check out the [step-by-step guide in LangChain][guide].
+
+- 📖 [LangChain Docling integration docs][docs]
+- 💻 [LangChain Docling integration GitHub][github]
+- 🧑🏽🍳 [LangChain Docling integration example][example]
+- 📦 [LangChain Docling integration PyPI][pypi]
+
+[docs]: https://python.langchain.com/docs/integrations/providers/docling/
+[github]: https://github.com/DS4SD/docling-langchain
+[guide]: https://python.langchain.com/docs/integrations/document_loaders/docling/
+[example]: ../examples/rag_langchain.ipynb
+[pypi]: https://pypi.org/project/langchain-docling/
diff --git a/docs/integrations/nvidia.md b/docs/integrations/nvidia.md
new file mode 100644
index 00000000..9a760bea
--- /dev/null
+++ b/docs/integrations/nvidia.md
@@ -0,0 +1,6 @@
+Docling is powering the NVIDIA *PDF to Podcast* agentic AI blueprint:
+
+- [🏠 PDF to Podcast home](https://build.nvidia.com/nvidia/pdf-to-podcast)
+- [💻 PDF to Podcast GitHub](https://github.com/NVIDIA-AI-Blueprints/pdf-to-podcast)
+- [📣 PDF to Podcast announcement](https://nvidianews.nvidia.com/news/nvidia-launches-ai-foundation-models-for-rtx-ai-pcs)
+- [✍️ PDF to Podcast blog post](https://blogs.nvidia.com/blog/agentic-ai-blueprints/)
diff --git a/docs/integrations/opencontracts.md b/docs/integrations/opencontracts.md
new file mode 100644
index 00000000..d327b8d0
--- /dev/null
+++ b/docs/integrations/opencontracts.md
@@ -0,0 +1,5 @@
+Docling is available an ingestion engine for [OpenContracts](https://github.com/JSv4/OpenContracts), allowing you to use Docling's OCR engine(s), chunker(s), labels, etc. and load them into a platform supporting bulk data extraction, text annotating, and question-answering:
+
+- 💻 [OpenContracts GitHub](https://github.com/JSv4/OpenContracts)
+- 📖 [OpenContracts Docs](https://jsv4.github.io/OpenContracts/)
+- ▶️ [OpenContracts x Docling PDF annotation screen capture](https://github.com/JSv4/OpenContracts/blob/main/docs/assets/images/gifs/PDF%20Annotation%20Flow.gif)
diff --git a/docs/reference/docling_document.md b/docs/reference/docling_document.md
index d8327894..8c235a8e 100644
--- a/docs/reference/docling_document.md
+++ b/docs/reference/docling_document.md
@@ -32,6 +32,7 @@ This is an automatic generated API reference of the DoclingDocument type.
- CoordOrigin
- ImageRefMode
- Size
+ docstring_style: sphinx
show_if_no_docstring: true
show_submodules: true
docstring_section_style: list
diff --git a/docs/v2.md b/docs/v2.md
index 5ccb0cdf..bf1de1c8 100644
--- a/docs/v2.md
+++ b/docs/v2.md
@@ -95,8 +95,8 @@ doc_converter = (
More options are shown in the following example units:
-- [run_with_formats.py](../examples/run_with_formats/)
-- [custom_convert.py](../examples/custom_convert/)
+- [run_with_formats.py](examples/run_with_formats.py)
+- [custom_convert.py](examples/custom_convert.py)
### Converting documents
@@ -226,4 +226,4 @@ leverages the new `DoclingDocument` and provides a new, richer chunk output form
- any applicable headings for context
- any applicable captions for context
-For an example, check out [Chunking usage](../usage/#chunking).
+For an example, check out [Chunking usage](usage.md#chunking).
diff --git a/mkdocs.yml b/mkdocs.yml
index 0428693c..0f3e9dd0 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -65,7 +65,7 @@ nav:
- Chunking: concepts/chunking.md
- Examples:
- Examples: examples/index.md
- - Conversion:
+ - 🔀 Conversion:
- "Simple conversion": examples/minimal.py
- "Custom conversion": examples/custom_convert.py
- "Batch conversion": examples/batch_convert.py
@@ -76,30 +76,40 @@ nav:
- "Multimodal export": examples/export_multimodal.py
- "Force full page OCR": examples/full_page_ocr.py
- "Accelerator options": examples/run_with_accelerator.py
- - Chunking:
- - "Hybrid chunking": examples/hybrid_chunking.ipynb
- - RAG / QA:
- - "RAG with Haystack": examples/rag_haystack.ipynb
- - "RAG with LlamaIndex 🦙": examples/rag_llamaindex.ipynb
- - "RAG with LangChain 🦜🔗": examples/rag_langchain.ipynb
- - "RAG with Weaviate": examples/rag_weaviate.ipynb
- - "Hybrid RAG with Qdrant": examples/hybrid_rag_qdrant.ipynb
+ - "Simple translation": examples/translate.py
+ - ✂️ Chunking:
+ - examples/hybrid_chunking.ipynb
+ - 🤖 RAG with AI dev frameworks:
+ - examples/rag_haystack.ipynb
+ - examples/rag_langchain.ipynb
+ - examples/rag_llamaindex.ipynb
+ - 🗂️ More examples:
+ - examples/rag_weaviate.ipynb
+ - RAG with Granite [↗]: https://github.com/ibm-granite-community/granite-snack-cookbook/blob/main/recipes/RAG/Granite_Docling_RAG.ipynb
+ - examples/rag_azuresearch.ipynb
+ - examples/retrieval_qdrant.ipynb
- Integrations:
- Integrations: integrations/index.md
- - "🐝 Bee": integrations/bee.md
- - "Cloudera": integrations/cloudera.md
- - "Data Prep Kit": integrations/data_prep_kit.md
- - "DocETL": integrations/docetl.md
- - "Haystack": integrations/haystack.md
- - "🐶 InstructLab": integrations/instructlab.md
- - "Kotaemon": integrations/kotaemon.md
- - "🦙 LlamaIndex": integrations/llamaindex.md
- - "Prodigy": integrations/prodigy.md
- - "RHEL AI": integrations/rhel_ai.md
- - "spaCy": integrations/spacy.md
- - "txtai": integrations/txtai.md
- - "Vectara": integrations/vectara.md
- # - "LangChain 🦜🔗": integrations/langchain.md
+ - 🤖 Agentic / AI dev frameworks:
+ - "Bee Agent Framework": integrations/bee.md
+ - "Crew AI": integrations/crewai.md
+ - "Haystack": integrations/haystack.md
+ - "LangChain": integrations/langchain.md
+ - "LlamaIndex": integrations/llamaindex.md
+ - "txtai": integrations/txtai.md
+ - ⭐️ Featured:
+ - "Data Prep Kit": integrations/data_prep_kit.md
+ - "InstructLab": integrations/instructlab.md
+ - "NVIDIA": integrations/nvidia.md
+ - "Prodigy": integrations/prodigy.md
+ - "RHEL AI": integrations/rhel_ai.md
+ - "spaCy": integrations/spacy.md
+ - 🗂️ More integrations:
+ - "Cloudera": integrations/cloudera.md
+ - "DocETL": integrations/docetl.md
+ - "Kotaemon": integrations/kotaemon.md
+ - "OpenContracts": integrations/opencontracts.md
+ - "Vectara": integrations/vectara.md
- Reference:
- Python API:
- Document Converter: reference/document_converter.md
diff --git a/poetry.lock b/poetry.lock
index 489be8f4..7d8671eb 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -13,87 +13,87 @@ files = [
[[package]]
name = "aiohttp"
-version = "3.11.10"
+version = "3.11.11"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.9"
files = [
- {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d"},
- {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f"},
- {file = "aiohttp-3.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4"},
- {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6"},
- {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769"},
- {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f"},
- {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df"},
- {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219"},
- {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d"},
- {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9"},
- {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77"},
- {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767"},
- {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d"},
- {file = "aiohttp-3.11.10-cp310-cp310-win32.whl", hash = "sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91"},
- {file = "aiohttp-3.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33"},
- {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b"},
- {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1"},
- {file = "aiohttp-3.11.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683"},
- {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d"},
- {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299"},
- {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8"},
- {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0"},
- {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5"},
- {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46"},
- {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838"},
- {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b"},
- {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52"},
- {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3"},
- {file = "aiohttp-3.11.10-cp311-cp311-win32.whl", hash = "sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4"},
- {file = "aiohttp-3.11.10-cp311-cp311-win_amd64.whl", hash = "sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec"},
- {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf"},
- {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138"},
- {file = "aiohttp-3.11.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5"},
- {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50"},
- {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c"},
- {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d"},
- {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b"},
- {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109"},
- {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab"},
- {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69"},
- {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0"},
- {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9"},
- {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc"},
- {file = "aiohttp-3.11.10-cp312-cp312-win32.whl", hash = "sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985"},
- {file = "aiohttp-3.11.10-cp312-cp312-win_amd64.whl", hash = "sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408"},
- {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816"},
- {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf"},
- {file = "aiohttp-3.11.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5"},
- {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32"},
- {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01"},
- {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34"},
- {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99"},
- {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39"},
- {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e"},
- {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a"},
- {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542"},
- {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60"},
- {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836"},
- {file = "aiohttp-3.11.10-cp313-cp313-win32.whl", hash = "sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c"},
- {file = "aiohttp-3.11.10-cp313-cp313-win_amd64.whl", hash = "sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6"},
- {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf"},
- {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f"},
- {file = "aiohttp-3.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59"},
- {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f"},
- {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199"},
- {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079"},
- {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf"},
- {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc"},
- {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82"},
- {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c"},
- {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487"},
- {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1"},
- {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4"},
- {file = "aiohttp-3.11.10-cp39-cp39-win32.whl", hash = "sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be"},
- {file = "aiohttp-3.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74"},
- {file = "aiohttp-3.11.10.tar.gz", hash = "sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e"},
+ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"},
+ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"},
+ {file = "aiohttp-3.11.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2"},
+ {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43"},
+ {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f"},
+ {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d"},
+ {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef"},
+ {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438"},
+ {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3"},
+ {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55"},
+ {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e"},
+ {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33"},
+ {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c"},
+ {file = "aiohttp-3.11.11-cp310-cp310-win32.whl", hash = "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745"},
+ {file = "aiohttp-3.11.11-cp310-cp310-win_amd64.whl", hash = "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9"},
+ {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76"},
+ {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538"},
+ {file = "aiohttp-3.11.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204"},
+ {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9"},
+ {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03"},
+ {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287"},
+ {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e"},
+ {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665"},
+ {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b"},
+ {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34"},
+ {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d"},
+ {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2"},
+ {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773"},
+ {file = "aiohttp-3.11.11-cp311-cp311-win32.whl", hash = "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62"},
+ {file = "aiohttp-3.11.11-cp311-cp311-win_amd64.whl", hash = "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac"},
+ {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886"},
+ {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2"},
+ {file = "aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c"},
+ {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a"},
+ {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231"},
+ {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e"},
+ {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8"},
+ {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8"},
+ {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c"},
+ {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab"},
+ {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da"},
+ {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853"},
+ {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e"},
+ {file = "aiohttp-3.11.11-cp312-cp312-win32.whl", hash = "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600"},
+ {file = "aiohttp-3.11.11-cp312-cp312-win_amd64.whl", hash = "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d"},
+ {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9"},
+ {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194"},
+ {file = "aiohttp-3.11.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f"},
+ {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104"},
+ {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff"},
+ {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3"},
+ {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1"},
+ {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4"},
+ {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d"},
+ {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87"},
+ {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2"},
+ {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12"},
+ {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5"},
+ {file = "aiohttp-3.11.11-cp313-cp313-win32.whl", hash = "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d"},
+ {file = "aiohttp-3.11.11-cp313-cp313-win_amd64.whl", hash = "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99"},
+ {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e"},
+ {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add"},
+ {file = "aiohttp-3.11.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a"},
+ {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350"},
+ {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6"},
+ {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1"},
+ {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e"},
+ {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd"},
+ {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1"},
+ {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c"},
+ {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e"},
+ {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28"},
+ {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226"},
+ {file = "aiohttp-3.11.11-cp39-cp39-win32.whl", hash = "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3"},
+ {file = "aiohttp-3.11.11-cp39-cp39-win_amd64.whl", hash = "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1"},
+ {file = "aiohttp-3.11.11.tar.gz", hash = "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e"},
]
[package.dependencies]
@@ -111,13 +111,13 @@ speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"]
[[package]]
name = "aiosignal"
-version = "1.3.1"
+version = "1.3.2"
description = "aiosignal: a list of registered asynchronous callbacks"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.9"
files = [
- {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
- {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"},
+ {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"},
]
[package.dependencies]
@@ -136,13 +136,13 @@ files = [
[[package]]
name = "anyio"
-version = "4.7.0"
+version = "4.8.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
python-versions = ">=3.9"
files = [
- {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"},
- {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"},
+ {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"},
+ {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"},
]
[package.dependencies]
@@ -153,7 +153,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""}
[package.extras]
doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"]
-test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"]
trio = ["trio (>=0.26.1)"]
[[package]]
@@ -214,38 +214,23 @@ files = [
[[package]]
name = "attrs"
-version = "24.2.0"
+version = "24.3.0"
description = "Classes Without Boilerplate"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
- {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
+ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"},
+ {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"},
]
[package.extras]
benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
-dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
-[[package]]
-name = "autoflake"
-version = "2.3.1"
-description = "Removes unused imports and unused variables"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "autoflake-2.3.1-py3-none-any.whl", hash = "sha256:3ae7495db9084b7b32818b4140e6dc4fc280b712fb414f5b8fe57b0a8e85a840"},
- {file = "autoflake-2.3.1.tar.gz", hash = "sha256:c98b75dc5b0a86459c4f01a1d32ac7eb4338ec4317a4469515ff1e687ecd909e"},
-]
-
-[package.dependencies]
-pyflakes = ">=3.0.0"
-tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
-
[[package]]
name = "autopep8"
version = "2.2.0"
@@ -371,6 +356,7 @@ files = [
]
[package.dependencies]
+tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""}
webencodings = "*"
[package.extras]
@@ -378,13 +364,13 @@ css = ["tinycss2 (>=1.1.0,<1.5)"]
[[package]]
name = "certifi"
-version = "2024.8.30"
+version = "2024.12.14"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"},
- {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
+ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"},
+ {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"},
]
[[package]]
@@ -479,127 +465,114 @@ files = [
[[package]]
name = "charset-normalizer"
-version = "3.4.0"
+version = "3.4.1"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
-python-versions = ">=3.7.0"
+python-versions = ">=3.7"
files = [
- {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"},
- {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"},
- {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"},
- {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"},
- {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"},
- {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"},
- {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"},
- {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"},
- {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"},
- {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"},
+ {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"},
+ {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"},
+ {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"},
+ {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"},
+ {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"},
+ {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"},
+ {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"},
+ {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"},
+ {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"},
]
[[package]]
name = "click"
-version = "8.1.7"
+version = "8.1.8"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
files = [
- {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
- {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
+ {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
]
[package.dependencies]
@@ -759,37 +732,37 @@ vision = ["Pillow (>=9.4.0)"]
[[package]]
name = "debugpy"
-version = "1.8.9"
+version = "1.8.12"
description = "An implementation of the Debug Adapter Protocol for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"},
- {file = "debugpy-1.8.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada7fb65102a4d2c9ab62e8908e9e9f12aed9d76ef44880367bc9308ebe49a0f"},
- {file = "debugpy-1.8.9-cp310-cp310-win32.whl", hash = "sha256:c36856343cbaa448171cba62a721531e10e7ffb0abff838004701454149bc037"},
- {file = "debugpy-1.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:17c5e0297678442511cf00a745c9709e928ea4ca263d764e90d233208889a19e"},
- {file = "debugpy-1.8.9-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:b74a49753e21e33e7cf030883a92fa607bddc4ede1aa4145172debc637780040"},
- {file = "debugpy-1.8.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d22dacdb0e296966d7d74a7141aaab4bec123fa43d1a35ddcb39bf9fd29d70"},
- {file = "debugpy-1.8.9-cp311-cp311-win32.whl", hash = "sha256:8138efff315cd09b8dcd14226a21afda4ca582284bf4215126d87342bba1cc66"},
- {file = "debugpy-1.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:ff54ef77ad9f5c425398efb150239f6fe8e20c53ae2f68367eba7ece1e96226d"},
- {file = "debugpy-1.8.9-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:957363d9a7a6612a37458d9a15e72d03a635047f946e5fceee74b50d52a9c8e2"},
- {file = "debugpy-1.8.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e565fc54b680292b418bb809f1386f17081d1346dca9a871bf69a8ac4071afe"},
- {file = "debugpy-1.8.9-cp312-cp312-win32.whl", hash = "sha256:3e59842d6c4569c65ceb3751075ff8d7e6a6ada209ceca6308c9bde932bcef11"},
- {file = "debugpy-1.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:66eeae42f3137eb428ea3a86d4a55f28da9bd5a4a3d369ba95ecc3a92c1bba53"},
- {file = "debugpy-1.8.9-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:957ecffff80d47cafa9b6545de9e016ae8c9547c98a538ee96ab5947115fb3dd"},
- {file = "debugpy-1.8.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1efbb3ff61487e2c16b3e033bc8595aea578222c08aaf3c4bf0f93fadbd662ee"},
- {file = "debugpy-1.8.9-cp313-cp313-win32.whl", hash = "sha256:7c4d65d03bee875bcb211c76c1d8f10f600c305dbd734beaed4077e902606fee"},
- {file = "debugpy-1.8.9-cp313-cp313-win_amd64.whl", hash = "sha256:e46b420dc1bea64e5bbedd678148be512442bc589b0111bd799367cde051e71a"},
- {file = "debugpy-1.8.9-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:472a3994999fe6c0756945ffa359e9e7e2d690fb55d251639d07208dbc37caea"},
- {file = "debugpy-1.8.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365e556a4772d7d0d151d7eb0e77ec4db03bcd95f26b67b15742b88cacff88e9"},
- {file = "debugpy-1.8.9-cp38-cp38-win32.whl", hash = "sha256:54a7e6d3014c408eb37b0b06021366ee985f1539e12fe49ca2ee0d392d9ceca5"},
- {file = "debugpy-1.8.9-cp38-cp38-win_amd64.whl", hash = "sha256:8e99c0b1cc7bf86d83fb95d5ccdc4ad0586d4432d489d1f54e4055bcc795f693"},
- {file = "debugpy-1.8.9-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:7e8b079323a56f719977fde9d8115590cb5e7a1cba2fcee0986ef8817116e7c1"},
- {file = "debugpy-1.8.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6953b335b804a41f16a192fa2e7851bdcfd92173cbb2f9f777bb934f49baab65"},
- {file = "debugpy-1.8.9-cp39-cp39-win32.whl", hash = "sha256:7e646e62d4602bb8956db88b1e72fe63172148c1e25c041e03b103a25f36673c"},
- {file = "debugpy-1.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:3d9755e77a2d680ce3d2c5394a444cf42be4a592caaf246dbfbdd100ffcf7ae5"},
- {file = "debugpy-1.8.9-py2.py3-none-any.whl", hash = "sha256:cc37a6c9987ad743d9c3a14fa1b1a14b7e4e6041f9dd0c8abf8895fe7a97b899"},
- {file = "debugpy-1.8.9.zip", hash = "sha256:1339e14c7d980407248f09824d1b25ff5c5616651689f1e0f0e51bdead3ea13e"},
+ {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"},
+ {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"},
+ {file = "debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c"},
+ {file = "debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9"},
+ {file = "debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5"},
+ {file = "debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7"},
+ {file = "debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb"},
+ {file = "debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1"},
+ {file = "debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498"},
+ {file = "debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06"},
+ {file = "debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d"},
+ {file = "debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969"},
+ {file = "debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f"},
+ {file = "debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9"},
+ {file = "debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180"},
+ {file = "debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c"},
+ {file = "debugpy-1.8.12-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:b0232cd42506d0c94f9328aaf0d1d0785f90f87ae72d9759df7e5051be039738"},
+ {file = "debugpy-1.8.12-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9af40506a59450f1315168d47a970db1a65aaab5df3833ac389d2899a5d63b3f"},
+ {file = "debugpy-1.8.12-cp38-cp38-win32.whl", hash = "sha256:5cc45235fefac57f52680902b7d197fb2f3650112379a6fa9aa1b1c1d3ed3f02"},
+ {file = "debugpy-1.8.12-cp38-cp38-win_amd64.whl", hash = "sha256:557cc55b51ab2f3371e238804ffc8510b6ef087673303890f57a24195d096e61"},
+ {file = "debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41"},
+ {file = "debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a"},
+ {file = "debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018"},
+ {file = "debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069"},
+ {file = "debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6"},
+ {file = "debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce"},
]
[[package]]
@@ -888,13 +861,13 @@ files = [
[[package]]
name = "docling-core"
-version = "2.12.1"
+version = "2.15.1"
description = "A python library to define and validate data types in Docling."
optional = false
python-versions = "<4.0,>=3.9"
files = [
- {file = "docling_core-2.12.1-py3-none-any.whl", hash = "sha256:1d7ea73cece73292cdbc68d85ff0175e88274ba9cf7babad6ce162fcaa654925"},
- {file = "docling_core-2.12.1.tar.gz", hash = "sha256:26708db3e1cf90f91b987bdfc0c00a50b0966ecf474a650b1b5232a9210e28c4"},
+ {file = "docling_core-2.15.1-py3-none-any.whl", hash = "sha256:33152604e1f14d5caccbef099c73163c3f211d0b4d92403d262c308633cc0451"},
+ {file = "docling_core-2.15.1.tar.gz", hash = "sha256:588d941b5bfc393a79e779ab64819c60763e7f182ec5221ee37da4be91dd802f"},
]
[package.dependencies]
@@ -915,67 +888,74 @@ chunking = ["semchunk (>=2.2.0,<3.0.0)", "transformers (>=4.34.0,<5.0.0)"]
[[package]]
name = "docling-ibm-models"
-version = "3.1.0"
+version = "3.3.0"
description = "This package contains the AI models used by the Docling PDF conversion package"
optional = false
python-versions = "<4.0,>=3.9"
files = [
- {file = "docling_ibm_models-3.1.0-py3-none-any.whl", hash = "sha256:a381a45dff16fdb2246b99c15a2e3d6ba880c573d48a1d6477d3ffb36bab807f"},
- {file = "docling_ibm_models-3.1.0.tar.gz", hash = "sha256:65d734ffa490edc4e2301d296b6e893afa536c63b7daae7bbda781bd15b3431e"},
+ {file = "docling_ibm_models-3.3.0-py3-none-any.whl", hash = "sha256:f1c99d345cb524239c7a2090969920e4311fd2fe22dad9bd609bc38039ec56eb"},
+ {file = "docling_ibm_models-3.3.0.tar.gz", hash = "sha256:5a7497053871179d59870c830945aa8664a34aac48b7e68edf602720ee7f6c49"},
]
[package.dependencies]
huggingface_hub = ">=0.23,<1"
jsonlines = ">=3.1.0,<4.0.0"
-numpy = ">=1.24.4,<3.0.0"
+numpy = [
+ {version = ">=1.24.4,<3.0.0", markers = "sys_platform != \"darwin\" or platform_machine != \"x86_64\""},
+ {version = ">=1.24.4,<2.0.0", markers = "sys_platform == \"darwin\" and platform_machine == \"x86_64\""},
+]
opencv-python-headless = ">=4.6.0.66,<5.0.0.0"
Pillow = ">=10.0.0,<11.0.0"
safetensors = {version = ">=0.4.3,<1", extras = ["torch"]}
torch = ">=2.2.2,<3.0.0"
torchvision = ">=0,<1"
tqdm = ">=4.64.0,<5.0.0"
-transformers = ">=4.42.0,<5.0.0"
+transformers = [
+ {version = ">=4.42.0,<5.0.0", markers = "sys_platform != \"darwin\" or platform_machine != \"x86_64\""},
+ {version = ">=4.42.0,<4.43.0", markers = "sys_platform == \"darwin\" and platform_machine == \"x86_64\""},
+]
[[package]]
name = "docling-parse"
-version = "3.0.0"
+version = "3.1.1"
description = "Simple package to extract text with coordinates from programmatic PDFs"
optional = false
python-versions = "<4.0,>=3.9"
files = [
- {file = "docling_parse-3.0.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:8de583f9562549379b8878f4054c17a715ac492999187855a6178c258388d1c6"},
- {file = "docling_parse-3.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0a504152836b52119c84ce6f2124006b2297eca9576c1e961745f774b8f55f59"},
- {file = "docling_parse-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e73836d75127b168073e76a4170ec615ee49d6d46ac37d1a3f9d5c585b2c4363"},
- {file = "docling_parse-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fdff7e14e50c0f66350346082f1fdf6cbc0584bef809532075593fa0c2a2ab2"},
- {file = "docling_parse-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f56ae44328f7242e7420330d3d737d5284ec256af8ecd0b02fe6e34719b3040a"},
- {file = "docling_parse-3.0.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:f228587e0d3a8f46fec46934e324d74be90d7f1ad96579c775644b130f28acdb"},
- {file = "docling_parse-3.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:25da7fa46449386956906f04cad5e9bec87816c00146caaef1112c8cdda6b79c"},
- {file = "docling_parse-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:787c200081af2fb2d267d8f404a1b57464ee2fbcda4abd8d7bab99244c1716cb"},
- {file = "docling_parse-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be7a28e7a3ae6e198722dbb29341956c565ab9d8fdbddaee91f81dc21d870dde"},
- {file = "docling_parse-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:4251888da7c0ff946ce77ea8f14a0896ffe24b79422155db5871b7ee1b9fbc0a"},
- {file = "docling_parse-3.0.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:642e47bdf090b89766e035b74cc849abffe0df520f2907ff4dede5c819b31d4a"},
- {file = "docling_parse-3.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:731de22e279af1505f962dc10102b6405bcaac3d855657bf3542048e7182b440"},
- {file = "docling_parse-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd553a715e6282fc5aadd3bfd402faab4e43b77f4952bd065e3941218118f39"},
- {file = "docling_parse-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfb02830a918958a47144ca13ce985f09578a353c97da941935591e8917f432"},
- {file = "docling_parse-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:85ca7610e5debcfc37e7b6311f4fc7c62c9d0eeea11b8bf2b33a760e65dd64fe"},
- {file = "docling_parse-3.0.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:9171180b509a41856d1e32e1486934eaf1460575a5d86fa3a8941cb01e2955ac"},
- {file = "docling_parse-3.0.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:12c5fbeb41f491b75d77e055304fc931b723d28fab29e4c4cb2a113201a86918"},
- {file = "docling_parse-3.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83744522c1994ef2fe888865876515e28627ddfce396a119db3cb196a1a99a75"},
- {file = "docling_parse-3.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9857d8982bb7a7b51e7cefdd01613a7979e66c9c3ed40ea151e979b0fc2fc5e3"},
- {file = "docling_parse-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:1ff51e5153d164b957bf6284987d805ff1b43559a0244265d1788c0034cb899a"},
- {file = "docling_parse-3.0.0-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:a15efbef123b100a58425fa7073121e7bf0cb8433814bac200df416c4eb9e599"},
- {file = "docling_parse-3.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:1155d6ca8310e046e18c6a6dc7b7f57e0ed6c89791d3757db2a039f7f69694a6"},
- {file = "docling_parse-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:159c12370d6dfbe3e572f43a6a2804ee81d7f073d0bd7e5ca08d9acd1876aa83"},
- {file = "docling_parse-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:351f4d718485f44686d41d04b26867a429898dbb6ccfe43454adaae3a434d919"},
- {file = "docling_parse-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:9172c98615c85303a231b800dfb2e4c1e539b04e383dfc5d7f0dc5f708ea50fd"},
- {file = "docling_parse-3.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ba1c3469a38b404123bb615e220c046496d5d47e161cc5af7ae749e8cf181ab"},
- {file = "docling_parse-3.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:eb315b0af70757f2cba654b1629272ccb35a1a416facf552ff72fd89abe98967"},
- {file = "docling_parse-3.0.0.tar.gz", hash = "sha256:62a50d0fc4bb437ba840fb0419a466361d93071f300ae5f0cebe9b842ef0c8d4"},
-]
-
-[package.dependencies]
-autoflake = ">=2.3.1,<3.0.0"
+ {file = "docling_parse-3.1.1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:cccf1b7912ece508f75bc004dff392298fc956f33c62f3a48db6c0a7976d808a"},
+ {file = "docling_parse-3.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:3537f3bbd2152a3f2c25142ac93b9db08e68eca923863dca272a0f588739855d"},
+ {file = "docling_parse-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dffee503cf6be3343df2d9421067585a88543ed5c94e39662a3cfc5cd2b794a"},
+ {file = "docling_parse-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c856f0dbe8f10296442f749109d5d5dc86f10151a0e51e8629b32d053d0e61c2"},
+ {file = "docling_parse-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5693ef8cba6096d8ed1039f61a663ea74bac711d06616b51254c495ebb3eb53d"},
+ {file = "docling_parse-3.1.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8e586bcd24d7e3ba26ebdace4cb15d70498fb4656fc9f6f20f24b007de0628d6"},
+ {file = "docling_parse-3.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1e8137020ed9bff26eb70dbbdb42c62f3e87c81001e3ecd41e39b3ec3631d7bf"},
+ {file = "docling_parse-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bec98497626202a6fa7e2a715814414131b53b32cd2999e540edf87a60e45ef5"},
+ {file = "docling_parse-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537e0eec387a9cc3e35492752efc561982b3cf02b3d571ca46c4a0af3a884068"},
+ {file = "docling_parse-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ca3d45a0e9cd41c5e6e0002eaa1a3478bc065b58dc7d38a114eb5ad37f762934"},
+ {file = "docling_parse-3.1.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:008d751f4fdd82a3cbe3e8d4abaa4d5cf0d0cb35d16334c5dfc22a62001c780b"},
+ {file = "docling_parse-3.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a06a0e4b403387e9c4e79d388aa63ace75d1aa855018238634ec8ce262369ffa"},
+ {file = "docling_parse-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b802ae9c2464fc0354721d0ef3c73f573c202fa1995276afceaf5882bb894583"},
+ {file = "docling_parse-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dc796b738e4ba3663084ee9fa4fe749e8aa27154bf459a3531e5a5b9c774b6b"},
+ {file = "docling_parse-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:dbad418bedc7706c230ae8212cd08a41400762104be3df512ffe05d0f468d6e2"},
+ {file = "docling_parse-3.1.1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b32f46810f7c05de3e1fd13c2bbe58291710b90777baefefd8ed04118be319db"},
+ {file = "docling_parse-3.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:10ffbfe70a0eda2cac42a8fb2ebbe0adafdcfeb173ecaa0e7e0e7769cc020449"},
+ {file = "docling_parse-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4389f552297c0798bfc9b4b0116461d7e154340311b143264e9e48808f19884"},
+ {file = "docling_parse-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a716412318f5136fde397925a06b3d1cc3fce33f060175574d09576cbfc901f1"},
+ {file = "docling_parse-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:7ff36910971bc015270c4aaae5f01d783970a0af840ca84070a41564759048c5"},
+ {file = "docling_parse-3.1.1-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:9711ed84828bfc35b8cd02aedbf3a9a264eaaf567c8168c8c1cca5eb239490eb"},
+ {file = "docling_parse-3.1.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:fae1a11fd48faaf2961332d75f507aab452d3fbe88085a46cdfbb1efbc3b5c0c"},
+ {file = "docling_parse-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ecfdcf69eb93dbe1e6798b1516e657aab6b3b3435d6d161078108ef6f2d8edb"},
+ {file = "docling_parse-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba63a538e329f66666732a24d5ce4871eb19646833012e5b2c500ccdda29d959"},
+ {file = "docling_parse-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:22229c00ae9a34d77840e9352fd02d05dbbd90cfe1fdac9319d7a653bd7ba060"},
+ {file = "docling_parse-3.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:97bbd6b45681c643d1ca2917d4c6813735a3527ee2af2823ebdf3882545539bf"},
+ {file = "docling_parse-3.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9637c9676d6ba652362673f57d8f8af9ea35c844ca25116e61ecd5c138ceb1a7"},
+ {file = "docling_parse-3.1.1.tar.gz", hash = "sha256:fb62c85132d35edd91cee5c093b9e45d981ca7fa8ba0c560f0c3ce56993e4f8e"},
+]
+
+[package.dependencies]
+docling-core = ">=2.14.0,<3.0.0"
pillow = ">=10.4.0,<11.0.0"
+pydantic = ">=2.10.5,<3.0.0"
pywin32 = {version = ">=305", markers = "sys_platform == \"win32\""}
tabulate = ">=0.9.0,<1.0.0"
@@ -1066,13 +1046,13 @@ testing = ["hatch", "pre-commit", "pytest", "tox"]
[[package]]
name = "executing"
-version = "2.1.0"
+version = "2.2.0"
description = "Get the currently executing AST node of a frame, and other information"
optional = false
python-versions = ">=3.8"
files = [
- {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"},
- {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"},
+ {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"},
+ {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"},
]
[package.extras]
@@ -1094,18 +1074,18 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
[[package]]
name = "filelock"
-version = "3.16.1"
+version = "3.17.0"
description = "A platform independent file lock."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"},
- {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"},
+ {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"},
+ {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"},
]
[package.extras]
-docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"]
-testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"]
+docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"]
typing = ["typing-extensions (>=4.12.2)"]
[[package]]
@@ -1154,13 +1134,13 @@ dev = ["pyTest", "pyTest-cov"]
[[package]]
name = "flatbuffers"
-version = "24.3.25"
+version = "25.1.21"
description = "The FlatBuffers serialization format for Python"
optional = true
python-versions = "*"
files = [
- {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"},
- {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"},
+ {file = "flatbuffers-25.1.21-py2.py3-none-any.whl", hash = "sha256:0e9736098ba8f4e48246a0640390f4992c0b1a734e7322a9463d5c3eea00558b"},
+ {file = "flatbuffers-25.1.21.tar.gz", hash = "sha256:e24a34dcd9fb4e0ea8cc0fc8ef9c5cd61c9d21527a6d536967587a37a4ff9676"},
]
[[package]]
@@ -1325,13 +1305,13 @@ dev = ["flake8", "markdown", "twine", "wheel"]
[[package]]
name = "gitdb"
-version = "4.0.11"
+version = "4.0.12"
description = "Git Object Database"
optional = false
python-versions = ">=3.7"
files = [
- {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
- {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
+ {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"},
+ {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"},
]
[package.dependencies]
@@ -1339,31 +1319,31 @@ smmap = ">=3.0.1,<6"
[[package]]
name = "gitpython"
-version = "3.1.43"
+version = "3.1.44"
description = "GitPython is a Python library used to interact with Git repositories"
optional = false
python-versions = ">=3.7"
files = [
- {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"},
- {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"},
+ {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"},
+ {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"},
]
[package.dependencies]
gitdb = ">=4.0.1,<5"
[package.extras]
-doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"]
+doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
[[package]]
name = "griffe"
-version = "1.5.1"
+version = "1.5.5"
description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API."
optional = false
python-versions = ">=3.9"
files = [
- {file = "griffe-1.5.1-py3-none-any.whl", hash = "sha256:ad6a7980f8c424c9102160aafa3bcdf799df0e75f7829d75af9ee5aef656f860"},
- {file = "griffe-1.5.1.tar.gz", hash = "sha256:72964f93e08c553257706d6cd2c42d1c172213feb48b2be386f243380b405d4b"},
+ {file = "griffe-1.5.5-py3-none-any.whl", hash = "sha256:2761b1e8876c6f1f9ab1af274df93ea6bbadd65090de5f38f4cb5cc84897c7dd"},
+ {file = "griffe-1.5.5.tar.gz", hash = "sha256:35ee5b38b93d6a839098aad0f92207e6ad6b70c3e8866c08ca669275b8cba585"},
]
[package.dependencies]
@@ -1508,13 +1488,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "huggingface-hub"
-version = "0.26.5"
+version = "0.27.1"
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "huggingface_hub-0.26.5-py3-none-any.whl", hash = "sha256:fb7386090bbe892072e64b85f7c4479fd2d65eea5f2543327c970d5169e83924"},
- {file = "huggingface_hub-0.26.5.tar.gz", hash = "sha256:1008bd18f60bfb65e8dbc0a97249beeeaa8c99d3c2fa649354df9fa5a13ed83b"},
+ {file = "huggingface_hub-0.27.1-py3-none-any.whl", hash = "sha256:1c5155ca7d60b60c2e2fc38cbb3ffb7f7c3adf48f824015b219af9061771daec"},
+ {file = "huggingface_hub-0.27.1.tar.gz", hash = "sha256:c004463ca870283909d715d20f066ebd6968c2207dae9393fdffb3c1d4d8f98b"},
]
[package.dependencies]
@@ -1556,13 +1536,13 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve
[[package]]
name = "identify"
-version = "2.6.3"
+version = "2.6.6"
description = "File identification library for Python"
optional = false
python-versions = ">=3.9"
files = [
- {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"},
- {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"},
+ {file = "identify-2.6.6-py2.py3-none-any.whl", hash = "sha256:cbd1810bce79f8b671ecb20f53ee0ae8e86ae84b557de31d89709dc2a48ba881"},
+ {file = "identify-2.6.6.tar.gz", hash = "sha256:7bec12768ed44ea4761efb47806f0a41f86e7c0a5fdf5950d4648c90eca7e251"},
]
[package.extras]
@@ -1584,13 +1564,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2
[[package]]
name = "imageio"
-version = "2.36.1"
+version = "2.37.0"
description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats."
optional = false
python-versions = ">=3.9"
files = [
- {file = "imageio-2.36.1-py3-none-any.whl", hash = "sha256:20abd2cae58e55ca1af8a8dcf43293336a59adf0391f1917bf8518633cfc2cdf"},
- {file = "imageio-2.36.1.tar.gz", hash = "sha256:e4e1d231f47f9a9e16100b0f7ce1a86e8856fb4d1c0fa2c4365a316f1746be62"},
+ {file = "imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed"},
+ {file = "imageio-2.37.0.tar.gz", hash = "sha256:71b57b3669666272c818497aebba2b4c5f20d5b37c81720e5e1a56d59c492996"},
]
[package.dependencies]
@@ -1617,13 +1597,13 @@ tifffile = ["tifffile"]
[[package]]
name = "importlib-metadata"
-version = "8.5.0"
+version = "8.6.1"
description = "Read metadata from Python packages"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"},
- {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"},
+ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"},
+ {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"},
]
[package.dependencies]
@@ -1635,7 +1615,7 @@ cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
enabler = ["pytest-enabler (>=2.2)"]
perf = ["ipython"]
-test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
+test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
type = ["pytest-mypy"]
[[package]]
@@ -1859,13 +1839,13 @@ trio = ["async_generator", "trio"]
[[package]]
name = "jinja2"
-version = "3.1.4"
+version = "3.1.5"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
files = [
- {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
- {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
+ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"},
+ {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"},
]
[package.dependencies]
@@ -2037,13 +2017,13 @@ files = [
[[package]]
name = "jupytext"
-version = "1.16.4"
+version = "1.16.6"
description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupytext-1.16.4-py3-none-any.whl", hash = "sha256:76989d2690e65667ea6fb411d8056abe7cd0437c07bd774660b83d62acf9490a"},
- {file = "jupytext-1.16.4.tar.gz", hash = "sha256:28e33f46f2ce7a41fb9d677a4a2c95327285579b64ca104437c4b9eb1e4174e9"},
+ {file = "jupytext-1.16.6-py3-none-any.whl", hash = "sha256:900132031f73fee15a1c9ebd862e05eb5f51e1ad6ab3a2c6fdd97ce2f9c913b4"},
+ {file = "jupytext-1.16.6.tar.gz", hash = "sha256:dbd03f9263c34b737003f388fc069e9030834fb7136879c4c32c32473557baa0"},
]
[package.dependencies]
@@ -2055,28 +2035,28 @@ pyyaml = "*"
tomli = {version = "*", markers = "python_version < \"3.11\""}
[package.extras]
-dev = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs (>=1.0)", "jupyter-server (!=2.11)", "nbconvert", "pre-commit", "pytest", "pytest-cov (>=2.6.1)", "pytest-randomly", "pytest-xdist", "sphinx-gallery (<0.8)"]
+dev = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs (>=1.0)", "jupyter-server (!=2.11)", "nbconvert", "pre-commit", "pytest", "pytest-cov (>=2.6.1)", "pytest-randomly", "pytest-xdist", "sphinx (<8)", "sphinx-gallery (<0.8)"]
docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"]
test = ["pytest", "pytest-randomly", "pytest-xdist"]
test-cov = ["ipykernel", "jupyter-server (!=2.11)", "nbconvert", "pytest", "pytest-cov (>=2.6.1)", "pytest-randomly", "pytest-xdist"]
-test-external = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs (>=1.0)", "jupyter-server (!=2.11)", "nbconvert", "pre-commit", "pytest", "pytest-randomly", "pytest-xdist", "sphinx-gallery (<0.8)"]
+test-external = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs (>=1.0)", "jupyter-server (!=2.11)", "nbconvert", "pre-commit", "pytest", "pytest-randomly", "pytest-xdist", "sphinx (<8)", "sphinx-gallery (<0.8)"]
test-functional = ["pytest", "pytest-randomly", "pytest-xdist"]
test-integration = ["ipykernel", "jupyter-server (!=2.11)", "nbconvert", "pytest", "pytest-randomly", "pytest-xdist"]
test-ui = ["calysto-bash"]
[[package]]
name = "keyring"
-version = "25.5.0"
+version = "25.6.0"
description = "Store and access your passwords safely."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "keyring-25.5.0-py3-none-any.whl", hash = "sha256:e67f8ac32b04be4714b42fe84ce7dad9c40985b9ca827c592cc303e7c26d9741"},
- {file = "keyring-25.5.0.tar.gz", hash = "sha256:4c753b3ec91717fe713c4edd522d625889d8973a349b0e582622f49766de58e6"},
+ {file = "keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd"},
+ {file = "keyring-25.6.0.tar.gz", hash = "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66"},
]
[package.dependencies]
-importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""}
+importlib_metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""}
"jaraco.classes" = "*"
"jaraco.context" = "*"
"jaraco.functools" = "*"
@@ -2136,18 +2116,18 @@ transformers = ">=4.39.0"
[[package]]
name = "langchain-milvus"
-version = "0.1.7"
+version = "0.1.8"
description = "An integration package connecting Milvus and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
files = [
- {file = "langchain_milvus-0.1.7-py3-none-any.whl", hash = "sha256:8d7bef9e7524772db788f996ef9638dea431c034a36cf92a70a31d522eb8ee31"},
- {file = "langchain_milvus-0.1.7.tar.gz", hash = "sha256:6cc4b58803c853be6766c6ed68723e244e9af101c3cd52e22ccfc05c96b2107c"},
+ {file = "langchain_milvus-0.1.8-py3-none-any.whl", hash = "sha256:adadb15ce2ceae0bc58a4444454a21fea13800c5d3750ca7e58506eecfe28ad4"},
+ {file = "langchain_milvus-0.1.8.tar.gz", hash = "sha256:cb6c2c34e1d44b84ae68c7bddbfeeba5192a3b7c046ef645aba0b011ab8e8b53"},
]
[package.dependencies]
langchain-core = ">=0.2.38,<0.4"
-pymilvus = ">=2.4.3,<3.0.0"
+pymilvus = ">=2.5.0,<3.0.0"
[[package]]
name = "langchain-text-splitters"
@@ -2602,15 +2582,15 @@ files = [
[[package]]
name = "milvus-lite"
-version = "2.4.10"
+version = "2.4.11"
description = "A lightweight version of Milvus wrapped with Python."
optional = false
python-versions = ">=3.7"
files = [
- {file = "milvus_lite-2.4.10-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fc4246d3ed7d1910847afce0c9ba18212e93a6e9b8406048436940578dfad5cb"},
- {file = "milvus_lite-2.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:74a8e07c5e3b057df17fbb46913388e84df1dc403a200f4e423799a58184c800"},
- {file = "milvus_lite-2.4.10-py3-none-manylinux2014_aarch64.whl", hash = "sha256:240c7386b747bad696ecb5bd1f58d491e86b9d4b92dccee3315ed7256256eddc"},
- {file = "milvus_lite-2.4.10-py3-none-manylinux2014_x86_64.whl", hash = "sha256:211d2e334a043f9282bdd9755f76b9b2d93b23bffa7af240919ffce6a8dfe325"},
+ {file = "milvus_lite-2.4.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9e563ae0dca1b41bfd76b90f06b2bcc474460fe4eba142c9bab18d2747ff843b"},
+ {file = "milvus_lite-2.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d21472bd24eb327542817829ce7cb51878318e6173c4d62353c77421aecf98d6"},
+ {file = "milvus_lite-2.4.11-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8e6ef27f7f84976f9fd0047b675ede746db2e0cc581c44a916ac9e71e0cef05d"},
+ {file = "milvus_lite-2.4.11-py3-none-manylinux2014_x86_64.whl", hash = "sha256:551f56b49fcfbb330b658b4a3c56ed29ba9b692ec201edd1f2dade7f5e39957d"},
]
[package.dependencies]
@@ -2618,15 +2598,18 @@ tqdm = "*"
[[package]]
name = "mistune"
-version = "3.0.2"
+version = "3.1.0"
description = "A sane and fast Markdown parser with useful plugins and renderers"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"},
- {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"},
+ {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"},
+ {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"},
]
+[package.dependencies]
+typing-extensions = {version = "*", markers = "python_version < \"3.11\""}
+
[[package]]
name = "mkdocs"
version = "1.6.1"
@@ -2660,13 +2643,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp
[[package]]
name = "mkdocs-autorefs"
-version = "1.2.0"
+version = "1.3.0"
description = "Automatically link across pages in MkDocs."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "mkdocs_autorefs-1.2.0-py3-none-any.whl", hash = "sha256:d588754ae89bd0ced0c70c06f58566a4ee43471eeeee5202427da7de9ef85a2f"},
- {file = "mkdocs_autorefs-1.2.0.tar.gz", hash = "sha256:a86b93abff653521bda71cf3fc5596342b7a23982093915cb74273f67522190f"},
+ {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"},
+ {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"},
]
[package.dependencies]
@@ -2727,13 +2710,13 @@ pygments = ">2.12.0"
[[package]]
name = "mkdocs-material"
-version = "9.5.48"
+version = "9.5.50"
description = "Documentation that simply works"
optional = false
python-versions = ">=3.8"
files = [
- {file = "mkdocs_material-9.5.48-py3-none-any.whl", hash = "sha256:b695c998f4b939ce748adbc0d3bff73fa886a670ece948cf27818fa115dc16f8"},
- {file = "mkdocs_material-9.5.48.tar.gz", hash = "sha256:a582531e8b34f4c7ed38c29d5c44763053832cf2a32f7409567e0c74749a47db"},
+ {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"},
+ {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"},
]
[package.dependencies]
@@ -2750,7 +2733,7 @@ regex = ">=2022.4"
requests = ">=2.26,<3.0"
[package.extras]
-git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"]
+git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"]
imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"]
recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"]
@@ -2796,13 +2779,13 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"]
[[package]]
name = "mkdocstrings-python"
-version = "1.12.2"
+version = "1.13.0"
description = "A Python handler for mkdocstrings."
optional = false
python-versions = ">=3.9"
files = [
- {file = "mkdocstrings_python-1.12.2-py3-none-any.whl", hash = "sha256:7f7d40d6db3cb1f5d19dbcd80e3efe4d0ba32b073272c0c0de9de2e604eda62a"},
- {file = "mkdocstrings_python-1.12.2.tar.gz", hash = "sha256:7a1760941c0b52a2cd87b960a9e21112ffe52e7df9d0b9583d04d47ed2e186f3"},
+ {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"},
+ {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"},
]
[package.dependencies]
@@ -2812,13 +2795,13 @@ mkdocstrings = ">=0.26"
[[package]]
name = "more-itertools"
-version = "10.5.0"
+version = "10.6.0"
description = "More routines for operating on iterables, beyond itertools"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"},
- {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"},
+ {file = "more-itertools-10.6.0.tar.gz", hash = "sha256:2cd7fad1009c31cc9fb6a035108509e6547547a7a738374f10bd49a09eb3ee3b"},
+ {file = "more_itertools-10.6.0-py3-none-any.whl", hash = "sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89"},
]
[[package]]
@@ -2994,49 +2977,55 @@ dill = ">=0.3.8"
[[package]]
name = "mypy"
-version = "1.13.0"
+version = "1.14.1"
description = "Optional static typing for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"},
- {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"},
- {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"},
- {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"},
- {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"},
- {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"},
- {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"},
- {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"},
- {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"},
- {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"},
- {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"},
- {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"},
- {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"},
- {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"},
- {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"},
- {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"},
- {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"},
- {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"},
- {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"},
- {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"},
- {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"},
- {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"},
- {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"},
- {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"},
- {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"},
- {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"},
- {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"},
- {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"},
- {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"},
- {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"},
- {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"},
- {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"},
-]
-
-[package.dependencies]
-mypy-extensions = ">=1.0.0"
+ {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"},
+ {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"},
+ {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"},
+ {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"},
+ {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"},
+ {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"},
+ {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"},
+ {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"},
+ {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"},
+ {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"},
+ {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"},
+ {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"},
+ {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"},
+ {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"},
+ {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"},
+ {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"},
+ {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"},
+ {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"},
+ {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"},
+ {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"},
+ {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"},
+ {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"},
+ {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"},
+ {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"},
+ {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"},
+ {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"},
+ {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"},
+ {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"},
+ {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"},
+ {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"},
+ {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"},
+ {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"},
+ {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"},
+ {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"},
+ {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"},
+ {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"},
+ {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"},
+ {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"},
+]
+
+[package.dependencies]
+mypy_extensions = ">=1.0.0"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
-typing-extensions = ">=4.6.0"
+typing_extensions = ">=4.6.0"
[package.extras]
dmypy = ["psutil (>=4.0)"]
@@ -3058,13 +3047,13 @@ files = [
[[package]]
name = "nbclient"
-version = "0.10.1"
+version = "0.10.2"
description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
optional = false
-python-versions = ">=3.8.0"
+python-versions = ">=3.9.0"
files = [
- {file = "nbclient-0.10.1-py3-none-any.whl", hash = "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d"},
- {file = "nbclient-0.10.1.tar.gz", hash = "sha256:3e93e348ab27e712acd46fccd809139e356eb9a31aab641d1a7991a6eb4e6f68"},
+ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"},
+ {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"},
]
[package.dependencies]
@@ -3075,23 +3064,23 @@ traitlets = ">=5.4"
[package.extras]
dev = ["pre-commit"]
-docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"]
-test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
+docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"]
+test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
[[package]]
name = "nbconvert"
-version = "7.16.4"
+version = "7.16.5"
description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
optional = false
python-versions = ">=3.8"
files = [
- {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"},
- {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"},
+ {file = "nbconvert-7.16.5-py3-none-any.whl", hash = "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547"},
+ {file = "nbconvert-7.16.5.tar.gz", hash = "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344"},
]
[package.dependencies]
beautifulsoup4 = "*"
-bleach = "!=5.0.0"
+bleach = {version = "!=5.0.0", extras = ["css"]}
defusedxml = "*"
importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""}
jinja2 = ">=3.0"
@@ -3104,7 +3093,6 @@ nbformat = ">=5.7"
packaging = "*"
pandocfilters = ">=1.4.1"
pygments = ">=2.4.1"
-tinycss2 = "*"
traitlets = ">=5.1"
[package.extras]
@@ -3188,61 +3176,61 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
[[package]]
name = "nh3"
-version = "0.2.19"
-description = "Python bindings to the ammonia HTML sanitization library."
+version = "0.2.20"
+description = "Python binding to Ammonia HTML sanitizer Rust crate"
optional = false
-python-versions = "*"
+python-versions = ">=3.8"
files = [
- {file = "nh3-0.2.19-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ec9c8bf86e397cb88c560361f60fdce478b5edb8b93f04ead419b72fbe937ea6"},
- {file = "nh3-0.2.19-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0adf00e2b2026fa10a42537b60d161e516f206781c7515e4e97e09f72a8c5d0"},
- {file = "nh3-0.2.19-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3805161c4e12088bd74752ba69630e915bc30fe666034f47217a2f16b16efc37"},
- {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3dedd7858a21312f7675841529941035a2ac91057db13402c8fe907aa19205a"},
- {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:0b6820fc64f2ff7ef3e7253a093c946a87865c877b3889149a6d21d322ed8dbd"},
- {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:833b3b5f1783ce95834a13030300cea00cbdfd64ea29260d01af9c4821da0aa9"},
- {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5d4f5e2189861b352b73acb803b5f4bb409c2f36275d22717e27d4e0c217ae55"},
- {file = "nh3-0.2.19-cp313-cp313t-win32.whl", hash = "sha256:2b926f179eb4bce72b651bfdf76f8aa05d167b2b72bc2f3657fd319f40232adc"},
- {file = "nh3-0.2.19-cp313-cp313t-win_amd64.whl", hash = "sha256:ac536a4b5c073fdadd8f5f4889adabe1cbdae55305366fb870723c96ca7f49c3"},
- {file = "nh3-0.2.19-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c2e3f0d18cc101132fe10ab7ef5c4f41411297e639e23b64b5e888ccaad63f41"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11270b16c1b012677e3e2dd166c1aa273388776bf99a3e3677179db5097ee16a"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc483dd8d20f8f8c010783a25a84db3bebeadced92d24d34b40d687f8043ac69"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d53a4577b6123ca1d7e8483fad3e13cb7eda28913d516bd0a648c1a473aa21a9"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdb20740d24ab9f2a1341458a00a11205294e97e905de060eeab1ceca020c09c"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8325d51e47cb5b11f649d55e626d56c76041ba508cd59e0cb1cf687cc7612f1"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8eb7affc590e542fa7981ef508cd1644f62176bcd10d4429890fc629b47f0bc"},
- {file = "nh3-0.2.19-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2eb021804e9df1761abeb844bb86648d77aa118a663c82f50ea04110d87ed707"},
- {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a7b928862daddb29805a1010a0282f77f4b8b238a37b5f76bc6c0d16d930fd22"},
- {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed06ed78f6b69d57463b46a04f68f270605301e69d80756a8adf7519002de57d"},
- {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:df8eac98fec80bd6f5fd0ae27a65de14f1e1a65a76d8e2237eb695f9cd1121d9"},
- {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00810cd5275f5c3f44b9eb0e521d1a841ee2f8023622de39ffc7d88bd533d8e0"},
- {file = "nh3-0.2.19-cp38-abi3-win32.whl", hash = "sha256:7e98621856b0a911c21faa5eef8f8ea3e691526c2433f9afc2be713cb6fbdb48"},
- {file = "nh3-0.2.19-cp38-abi3-win_amd64.whl", hash = "sha256:75c7cafb840f24430b009f7368945cb5ca88b2b54bb384ebfba495f16bc9c121"},
- {file = "nh3-0.2.19.tar.gz", hash = "sha256:790056b54c068ff8dceb443eaefb696b84beff58cca6c07afd754d17692a4804"},
+ {file = "nh3-0.2.20-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e1061a4ab6681f6bdf72b110eea0c4e1379d57c9de937db3be4202f7ad6043db"},
+ {file = "nh3-0.2.20-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb4254b1dac4a1ee49919a5b3f1caf9803ea8dada1816d9e8289e63d3cd0dd9a"},
+ {file = "nh3-0.2.20-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ae9cbd713524cdb81e64663d0d6aae26f678db9f2cd9db0bf162606f1f9f20c"},
+ {file = "nh3-0.2.20-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1f7370b4e14cc03f5ae141ef30a1caf81fa5787711f80be9081418dd9eb79d2"},
+ {file = "nh3-0.2.20-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:ac4d27dc836a476efffc6eb661994426b8b805c951b29c9cf2ff36bc9ad58bc5"},
+ {file = "nh3-0.2.20-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4fd2e9248725ebcedac3997a8d3da0d90a12a28c9179c6ba51f1658938ac30d0"},
+ {file = "nh3-0.2.20-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f7d564871833ddbe54df3aa59053b1110729d3a800cb7628ae8f42adb3d75208"},
+ {file = "nh3-0.2.20-cp313-cp313t-win32.whl", hash = "sha256:d2a176fd4306b6f0f178a3f67fac91bd97a3a8d8fafb771c9b9ef675ba5c8886"},
+ {file = "nh3-0.2.20-cp313-cp313t-win_amd64.whl", hash = "sha256:6ed834c68452a600f517dd3e1534dbfaff1f67f98899fecf139a055a25d99150"},
+ {file = "nh3-0.2.20-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:76e2f603b30c02ff6456b233a83fc377dedab6a50947b04e960a6b905637b776"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:181063c581defe683bd4bb78188ac9936d208aebbc74c7f7c16b6a32ae2ebb38"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:231addb7643c952cd6d71f1c8702d703f8fe34afcb20becb3efb319a501a12d7"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1b9a8340a0aab991c68a5ca938d35ef4a8a3f4bf1b455da8855a40bee1fa0ace"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10317cd96fe4bbd4eb6b95f3920b71c902157ad44fed103fdcde43e3b8ee8be6"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8698db4c04b140800d1a1cd3067fda399e36e1e2b8fc1fe04292a907350a3e9b"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3eb04b9c3deb13c3a375ea39fd4a3c00d1f92e8fb2349f25f1e3e4506751774b"},
+ {file = "nh3-0.2.20-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92f3f1c4f47a2c6f3ca7317b1d5ced05bd29556a75d3a4e2715652ae9d15c05d"},
+ {file = "nh3-0.2.20-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ddefa9fd6794a87e37d05827d299d4b53a3ec6f23258101907b96029bfef138a"},
+ {file = "nh3-0.2.20-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ce3731c8f217685d33d9268362e5b4f770914e922bba94d368ab244a59a6c397"},
+ {file = "nh3-0.2.20-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:09f037c02fc2c43b211ff1523de32801dcfb0918648d8e651c36ef890f1731ec"},
+ {file = "nh3-0.2.20-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:813f1c8012dd64c990514b795508abb90789334f76a561fa0fd4ca32d2275330"},
+ {file = "nh3-0.2.20-cp38-abi3-win32.whl", hash = "sha256:47b2946c0e13057855209daeffb45dc910bd0c55daf10190bb0b4b60e2999784"},
+ {file = "nh3-0.2.20-cp38-abi3-win_amd64.whl", hash = "sha256:da87573f03084edae8eb87cfe811ec338606288f81d333c07d2a9a0b9b976c0b"},
+ {file = "nh3-0.2.20.tar.gz", hash = "sha256:9705c42d7ff88a0bea546c82d7fe5e59135e3d3f057e485394f491248a1f8ed5"},
]
[[package]]
name = "ninja"
-version = "1.11.1.2"
+version = "1.11.1.3"
description = "Ninja is a small build system with a focus on speed"
optional = false
python-versions = ">=3.7"
files = [
- {file = "ninja-1.11.1.2-py3-none-macosx_10_9_universal2.whl", hash = "sha256:1cfbb845095ea09da8c089375a8f999e75f4817d01506297c66181b533175647"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ab4068ff7ff1f895485ad604116165b05d6810c802170a7f22c09dd678d5587d"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:33d258809c8eda81f9d80e18a081a6eef3215e5fd1ba8902400d786641994e89"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed25892c16e49e66383a8db6a67a9f33b41230fc485426094d7da51e2255ec2b"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:232767144401847db62e8392047866698bb3678158a1ae4400a97111110e90f2"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9200247cf4c1643a67d079836b8dd31a362e34e618b50b5e3a5c0d0171efc442"},
- {file = "ninja-1.11.1.2-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c9c36f6e6f8946c7271b0ed14d98fc3ea467a0c0954fb73f5f656c42667d943"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:3e815e4147832b17ec38417efcb31df51671ae273f083409304c7cc32a14dd1a"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_i686.whl", hash = "sha256:ecf3df324b56fdfb0872990a71e706efdae286e010310816c72b6bf24431711b"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:cb6b476eb4e84c0efcfd3ab04f660dedce8adb854b56b043639312f3af176df6"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_s390x.whl", hash = "sha256:508fb93395a5c82a4d99d30fce0cbaf5cb2bd33e5c1dc9faaa080e199802dbc9"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:52af7f45750c5c288d566fd0c927ed9bb0d8f2e50803709f582a42bcc4ec167b"},
- {file = "ninja-1.11.1.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99fc4b87299242e10d7edd1c7737fdfb1269019e32f9f4267630887f6183a49e"},
- {file = "ninja-1.11.1.2-py3-none-win32.whl", hash = "sha256:949e23cb2e79a33ea37d23a07d26846d2e75464e8e6940f8751fe964bc141dfa"},
- {file = "ninja-1.11.1.2-py3-none-win_amd64.whl", hash = "sha256:0bca4179119426a3c3c9d5661c3b244d68781064e50907a1e066bc55edc18e06"},
- {file = "ninja-1.11.1.2-py3-none-win_arm64.whl", hash = "sha256:ee7b1924c28e6cab5b866f7b229f07777d25d8cfccbbedf3da5ffb4f72f57877"},
- {file = "ninja-1.11.1.2.tar.gz", hash = "sha256:4fbd07b2b4232543726abafdd350453a2fabef4527664ca0e491c578aee5f857"},
+ {file = "ninja-1.11.1.3-py3-none-macosx_10_9_universal2.whl", hash = "sha256:2b4879ea3f1169f3d855182c57dcc84d1b5048628c8b7be0d702b81882a37237"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bc3ebc8b2e47716149f3541742b5cd8e0b08f51013b825c05baca3e34854370d"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a27e78ca71316c8654965ee94b286a98c83877bfebe2607db96897bbfe458af0"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2883ea46b3c5079074f56820f9989c6261fcc6fd873d914ee49010ecf283c3b2"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c4bdb9fd2d0c06501ae15abfd23407660e95659e384acd36e013b6dd7d8a8e4"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:114ed5c61c8474df6a69ab89097a20749b769e2c219a452cb2fadc49b0d581b0"},
+ {file = "ninja-1.11.1.3-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fa2247fce98f683bc712562d82b22b8a0a5c000738a13147ca2d1b68c122298"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:a38c6c6c8032bed68b70c3b065d944c35e9f903342875d3a3218c1607987077c"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_1_i686.whl", hash = "sha256:56ada5d33b8741d298836644042faddebc83ee669782d661e21563034beb5aba"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:53409151da081f3c198bb0bfc220a7f4e821e022c5b7d29719adda892ddb31bb"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_1_s390x.whl", hash = "sha256:1ad2112c2b0159ed7c4ae3731595191b1546ba62316fc40808edecd0306fefa3"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:28aea3c1c280cba95b8608d50797169f3a34280e3e9a6379b6e340f0c9eaeeb0"},
+ {file = "ninja-1.11.1.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b6966f83064a88a51693073eea3decd47e08c3965241e09578ef7aa3a7738329"},
+ {file = "ninja-1.11.1.3-py3-none-win32.whl", hash = "sha256:a4a3b71490557e18c010cbb26bd1ea9a0c32ee67e8f105e9731515b6e0af792e"},
+ {file = "ninja-1.11.1.3-py3-none-win_amd64.whl", hash = "sha256:04d48d14ea7ba11951c156599ab526bdda575450797ff57c6fdf99b2554d09c7"},
+ {file = "ninja-1.11.1.3-py3-none-win_arm64.whl", hash = "sha256:17978ad611d8ead578d83637f5ae80c2261b033db0b493a7ce94f88623f29e1b"},
+ {file = "ninja-1.11.1.3.tar.gz", hash = "sha256:edfa0d2e9d7ead1635b03e40a32ad56cc8f56798b6e2e9848d8300b174897076"},
]
[package.extras]
@@ -3259,6 +3247,51 @@ files = [
{file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
]
+[[package]]
+name = "numpy"
+version = "1.26.4"
+description = "Fundamental package for array computing in Python"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"},
+ {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"},
+ {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"},
+ {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"},
+ {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"},
+ {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"},
+ {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"},
+ {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"},
+ {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"},
+ {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"},
+ {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"},
+ {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"},
+ {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"},
+ {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"},
+ {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"},
+ {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"},
+ {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"},
+ {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"},
+ {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"},
+ {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"},
+ {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"},
+ {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"},
+ {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"},
+ {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"},
+ {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"},
+ {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"},
+ {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"},
+ {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"},
+ {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"},
+ {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"},
+ {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"},
+ {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"},
+ {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"},
+ {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"},
+ {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"},
+ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"},
+]
+
[[package]]
name = "numpy"
version = "2.0.2"
@@ -3315,66 +3348,66 @@ files = [
[[package]]
name = "numpy"
-version = "2.2.0"
+version = "2.2.2"
description = "Fundamental package for array computing in Python"
optional = false
python-versions = ">=3.10"
files = [
- {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"},
- {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"},
- {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"},
- {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"},
- {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"},
- {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"},
- {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"},
- {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"},
- {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"},
- {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"},
- {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"},
- {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"},
- {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"},
- {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"},
- {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"},
- {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"},
- {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"},
- {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"},
- {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"},
- {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"},
- {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"},
- {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"},
- {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"},
- {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"},
- {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"},
- {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"},
- {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"},
- {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"},
- {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"},
- {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"},
- {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"},
- {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"},
- {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"},
- {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"},
- {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"},
- {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"},
- {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"},
- {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"},
- {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"},
- {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"},
- {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"},
- {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"},
- {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"},
- {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"},
- {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"},
- {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"},
- {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"},
- {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"},
- {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"},
- {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"},
- {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"},
- {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"},
- {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"},
- {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"},
- {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"},
+ {file = "numpy-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7079129b64cb78bdc8d611d1fd7e8002c0a2565da6a47c4df8062349fee90e3e"},
+ {file = "numpy-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ec6c689c61df613b783aeb21f945c4cbe6c51c28cb70aae8430577ab39f163e"},
+ {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:40c7ff5da22cd391944a28c6a9c638a5eef77fcf71d6e3a79e1d9d9e82752715"},
+ {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:995f9e8181723852ca458e22de5d9b7d3ba4da3f11cc1cb113f093b271d7965a"},
+ {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78ea78450fd96a498f50ee096f69c75379af5138f7881a51355ab0e11286c97"},
+ {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fbe72d347fbc59f94124125e73fc4976a06927ebc503ec5afbfb35f193cd957"},
+ {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8e6da5cffbbe571f93588f562ed130ea63ee206d12851b60819512dd3e1ba50d"},
+ {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:09d6a2032faf25e8d0cadde7fd6145118ac55d2740132c1d845f98721b5ebcfd"},
+ {file = "numpy-2.2.2-cp310-cp310-win32.whl", hash = "sha256:159ff6ee4c4a36a23fe01b7c3d07bd8c14cc433d9720f977fcd52c13c0098160"},
+ {file = "numpy-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:64bd6e1762cd7f0986a740fee4dff927b9ec2c5e4d9a28d056eb17d332158014"},
+ {file = "numpy-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:642199e98af1bd2b6aeb8ecf726972d238c9877b0f6e8221ee5ab945ec8a2189"},
+ {file = "numpy-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d9fc9d812c81e6168b6d405bf00b8d6739a7f72ef22a9214c4241e0dc70b323"},
+ {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c7d1fd447e33ee20c1f33f2c8e6634211124a9aabde3c617687d8b739aa69eac"},
+ {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:451e854cfae0febe723077bd0cf0a4302a5d84ff25f0bfece8f29206c7bed02e"},
+ {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd249bc894af67cbd8bad2c22e7cbcd46cf87ddfca1f1289d1e7e54868cc785c"},
+ {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02935e2c3c0c6cbe9c7955a8efa8908dd4221d7755644c59d1bba28b94fd334f"},
+ {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a972cec723e0563aa0823ee2ab1df0cb196ed0778f173b381c871a03719d4826"},
+ {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6d6a0910c3b4368d89dde073e630882cdb266755565155bc33520283b2d9df8"},
+ {file = "numpy-2.2.2-cp311-cp311-win32.whl", hash = "sha256:860fd59990c37c3ef913c3ae390b3929d005243acca1a86facb0773e2d8d9e50"},
+ {file = "numpy-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:da1eeb460ecce8d5b8608826595c777728cdf28ce7b5a5a8c8ac8d949beadcf2"},
+ {file = "numpy-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac9bea18d6d58a995fac1b2cb4488e17eceeac413af014b1dd26170b766d8467"},
+ {file = "numpy-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae9f0c2d889b7b2d88a3791f6c09e2ef827c2446f1c4a3e3e76328ee4afd9a"},
+ {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3074634ea4d6df66be04f6728ee1d173cfded75d002c75fac79503a880bf3825"},
+ {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ec0636d3f7d68520afc6ac2dc4b8341ddb725039de042faf0e311599f54eb37"},
+ {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffbb1acd69fdf8e89dd60ef6182ca90a743620957afb7066385a7bbe88dc748"},
+ {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0349b025e15ea9d05c3d63f9657707a4e1d471128a3b1d876c095f328f8ff7f0"},
+ {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:463247edcee4a5537841d5350bc87fe8e92d7dd0e8c71c995d2c6eecb8208278"},
+ {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9dd47ff0cb2a656ad69c38da850df3454da88ee9a6fde0ba79acceee0e79daba"},
+ {file = "numpy-2.2.2-cp312-cp312-win32.whl", hash = "sha256:4525b88c11906d5ab1b0ec1f290996c0020dd318af8b49acaa46f198b1ffc283"},
+ {file = "numpy-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:5acea83b801e98541619af398cc0109ff48016955cc0818f478ee9ef1c5c3dcb"},
+ {file = "numpy-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b208cfd4f5fe34e1535c08983a1a6803fdbc7a1e86cf13dd0c61de0b51a0aadc"},
+ {file = "numpy-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0bbe7dd86dca64854f4b6ce2ea5c60b51e36dfd597300057cf473d3615f2369"},
+ {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:22ea3bb552ade325530e72a0c557cdf2dea8914d3a5e1fecf58fa5dbcc6f43cd"},
+ {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:128c41c085cab8a85dc29e66ed88c05613dccf6bc28b3866cd16050a2f5448be"},
+ {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:250c16b277e3b809ac20d1f590716597481061b514223c7badb7a0f9993c7f84"},
+ {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c8854b09bc4de7b041148d8550d3bd712b5c21ff6a8ed308085f190235d7ff"},
+ {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b6fb9c32a91ec32a689ec6410def76443e3c750e7cfc3fb2206b985ffb2b85f0"},
+ {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:57b4012e04cc12b78590a334907e01b3a85efb2107df2b8733ff1ed05fce71de"},
+ {file = "numpy-2.2.2-cp313-cp313-win32.whl", hash = "sha256:4dbd80e453bd34bd003b16bd802fac70ad76bd463f81f0c518d1245b1c55e3d9"},
+ {file = "numpy-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:5a8c863ceacae696aff37d1fd636121f1a512117652e5dfb86031c8d84836369"},
+ {file = "numpy-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b3482cb7b3325faa5f6bc179649406058253d91ceda359c104dac0ad320e1391"},
+ {file = "numpy-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9491100aba630910489c1d0158034e1c9a6546f0b1340f716d522dc103788e39"},
+ {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:41184c416143defa34cc8eb9d070b0a5ba4f13a0fa96a709e20584638254b317"},
+ {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7dca87ca328f5ea7dafc907c5ec100d187911f94825f8700caac0b3f4c384b49"},
+ {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bc61b307655d1a7f9f4b043628b9f2b721e80839914ede634e3d485913e1fb2"},
+ {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fad446ad0bc886855ddf5909cbf8cb5d0faa637aaa6277fb4b19ade134ab3c7"},
+ {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:149d1113ac15005652e8d0d3f6fd599360e1a708a4f98e43c9c77834a28238cb"},
+ {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:106397dbbb1896f99e044efc90360d098b3335060375c26aa89c0d8a97c5f648"},
+ {file = "numpy-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:0eec19f8af947a61e968d5429f0bd92fec46d92b0008d0a6685b40d6adf8a4f4"},
+ {file = "numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576"},
+ {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b0531f0b0e07643eb089df4c509d30d72c9ef40defa53e41363eca8a8cc61495"},
+ {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:e9e82dcb3f2ebbc8cb5ce1102d5f1c5ed236bf8a11730fb45ba82e2841ec21df"},
+ {file = "numpy-2.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d4142eb40ca6f94539e4db929410f2a46052a0fe7a2c1c59f6179c39938d2a"},
+ {file = "numpy-2.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:356ca982c188acbfa6af0d694284d8cf20e95b1c3d0aefa8929376fea9146f60"},
+ {file = "numpy-2.2.2.tar.gz", hash = "sha256:ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f"},
]
[[package]]
@@ -3641,14 +3674,14 @@ files = [
[[package]]
name = "nvidia-nvjitlink-cu12"
-version = "12.6.85"
+version = "12.8.61"
description = "Nvidia JIT LTO Library"
optional = false
python-versions = ">=3"
files = [
- {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"},
- {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"},
- {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c"},
+ {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17"},
+ {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0"},
+ {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c"},
]
[[package]]
@@ -3772,18 +3805,18 @@ sympy = "*"
[[package]]
name = "opencv-python"
-version = "4.10.0.84"
+version = "4.11.0.86"
description = "Wrapper package for OpenCV python bindings."
optional = true
python-versions = ">=3.6"
files = [
- {file = "opencv-python-4.10.0.84.tar.gz", hash = "sha256:72d234e4582e9658ffea8e9cae5b63d488ad06994ef12d81dc303b17472f3526"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:fc182f8f4cda51b45f01c64e4cbedfc2f00aff799debebc305d8d0210c43f251"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-macosx_12_0_x86_64.whl", hash = "sha256:71e575744f1d23f79741450254660442785f45a0797212852ee5199ef12eed98"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09a332b50488e2dda866a6c5573ee192fe3583239fb26ff2f7f9ceb0bc119ea6"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ace140fc6d647fbe1c692bcb2abce768973491222c067c131d80957c595b71f"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-win32.whl", hash = "sha256:2db02bb7e50b703f0a2d50c50ced72e95c574e1e5a0bb35a8a86d0b35c98c236"},
- {file = "opencv_python-4.10.0.84-cp37-abi3-win_amd64.whl", hash = "sha256:32dbbd94c26f611dc5cc6979e6b7aa1f55a64d6b463cc1dcd3c95505a63e48fe"},
+ {file = "opencv-python-4.11.0.86.tar.gz", hash = "sha256:03d60ccae62304860d232272e4a4fda93c39d595780cb40b161b310244b736a4"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:432f67c223f1dc2824f5e73cdfcd9db0efc8710647d4e813012195dc9122a52a"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:9d05ef13d23fe97f575153558653e2d6e87103995d54e6a35db3f282fe1f9c66"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b92ae2c8852208817e6776ba1ea0d6b1e0a1b5431e971a2a0ddd2a8cc398202"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b02611523803495003bd87362db3e1d2a0454a6a63025dc6658a9830570aa0d"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:810549cb2a4aedaa84ad9a1c92fbfdfc14090e2749cedf2c1589ad8359aa169b"},
+ {file = "opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec"},
]
[package.dependencies]
@@ -3798,18 +3831,18 @@ numpy = [
[[package]]
name = "opencv-python-headless"
-version = "4.10.0.84"
+version = "4.11.0.86"
description = "Wrapper package for OpenCV python bindings."
optional = false
python-versions = ">=3.6"
files = [
- {file = "opencv-python-headless-4.10.0.84.tar.gz", hash = "sha256:f2017c6101d7c2ef8d7bc3b414c37ff7f54d64413a1847d89970b6b7069b4e1a"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:a4f4bcb07d8f8a7704d9c8564c224c8b064c63f430e95b61ac0bffaa374d330e"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-macosx_12_0_x86_64.whl", hash = "sha256:5ae454ebac0eb0a0b932e3406370aaf4212e6a3fdb5038cc86c7aea15a6851da"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46071015ff9ab40fccd8a163da0ee14ce9846349f06c6c8c0f2870856ffa45db"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:377d08a7e48a1405b5e84afcbe4798464ce7ee17081c1c23619c8b398ff18295"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-win32.whl", hash = "sha256:9092404b65458ed87ce932f613ffbb1106ed2c843577501e5768912360fc50ec"},
- {file = "opencv_python_headless-4.10.0.84-cp37-abi3-win_amd64.whl", hash = "sha256:afcf28bd1209dd58810d33defb622b325d3cbe49dcd7a43a902982c33e5fad05"},
+ {file = "opencv-python-headless-4.11.0.86.tar.gz", hash = "sha256:996eb282ca4b43ec6a3972414de0e2331f5d9cda2b41091a49739c19fb843798"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:48128188ade4a7e517237c8e1e11a9cdf5c282761473383e77beb875bb1e61ca"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:a66c1b286a9de872c343ee7c3553b084244299714ebb50fbdcd76f07ebbe6c81"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6efabcaa9df731f29e5ea9051776715b1bdd1845d7c9530065c7951d2a2899eb"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0a27c19dd1f40ddff94976cfe43066fbbe9dfbb2ec1907d66c19caef42a57b"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:f447d8acbb0b6f2808da71fddd29c1cdd448d2bc98f72d9bb78a7a898fc9621b"},
+ {file = "opencv_python_headless-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:6c304df9caa7a6a5710b91709dd4786bf20a74d57672b3c31f7033cc638174ca"},
]
[package.dependencies]
@@ -3838,86 +3871,90 @@ et-xmlfile = "*"
[[package]]
name = "orjson"
-version = "3.10.12"
+version = "3.10.15"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
optional = false
python-versions = ">=3.8"
files = [
- {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"},
- {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"},
- {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"},
- {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"},
- {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"},
- {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"},
- {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"},
- {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"},
- {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"},
- {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"},
- {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"},
- {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"},
- {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"},
- {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"},
- {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"},
- {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"},
- {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"},
- {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"},
- {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"},
- {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"},
- {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"},
- {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"},
- {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"},
- {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"},
- {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"},
- {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"},
- {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"},
- {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"},
- {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"},
- {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"},
- {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"},
- {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"},
- {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"},
- {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"},
- {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"},
- {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"},
- {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"},
- {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"},
- {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"},
- {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"},
- {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"},
- {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"},
- {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"},
- {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"},
- {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"},
- {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"},
- {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"},
- {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"},
- {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"},
- {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"},
+ {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"},
+ {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"},
+ {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"},
+ {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"},
+ {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"},
+ {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"},
+ {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"},
+ {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"},
+ {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"},
+ {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"},
+ {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"},
+ {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"},
+ {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"},
+ {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"},
+ {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"},
+ {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"},
+ {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"},
+ {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"},
+ {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"},
+ {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"},
+ {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"},
+ {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"},
+ {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"},
+ {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"},
+ {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"},
+ {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"},
+ {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"},
+ {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"},
+ {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"},
+ {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"},
+ {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"},
+ {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"},
+ {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"},
+ {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"},
+ {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"},
+ {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"},
+ {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"},
+ {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"},
+ {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"},
+ {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"},
+ {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"},
+ {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"},
+ {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"},
+ {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"},
+ {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"},
+ {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"},
+ {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"},
+ {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"},
+ {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"},
]
[[package]]
@@ -4248,13 +4285,13 @@ virtualenv = ">=20.10.0"
[[package]]
name = "prompt-toolkit"
-version = "3.0.48"
+version = "3.0.50"
description = "Library for building powerful interactive command lines in Python"
optional = false
-python-versions = ">=3.7.0"
+python-versions = ">=3.8.0"
files = [
- {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"},
- {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"},
+ {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"},
+ {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"},
]
[package.dependencies]
@@ -4353,52 +4390,52 @@ files = [
[[package]]
name = "protobuf"
-version = "5.29.1"
+version = "5.29.3"
description = ""
optional = false
python-versions = ">=3.8"
files = [
- {file = "protobuf-5.29.1-cp310-abi3-win32.whl", hash = "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110"},
- {file = "protobuf-5.29.1-cp310-abi3-win_amd64.whl", hash = "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34"},
- {file = "protobuf-5.29.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18"},
- {file = "protobuf-5.29.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155"},
- {file = "protobuf-5.29.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d"},
- {file = "protobuf-5.29.1-cp38-cp38-win32.whl", hash = "sha256:50879eb0eb1246e3a5eabbbe566b44b10348939b7cc1b267567e8c3d07213853"},
- {file = "protobuf-5.29.1-cp38-cp38-win_amd64.whl", hash = "sha256:027fbcc48cea65a6b17028510fdd054147057fa78f4772eb547b9274e5219331"},
- {file = "protobuf-5.29.1-cp39-cp39-win32.whl", hash = "sha256:5a41deccfa5e745cef5c65a560c76ec0ed8e70908a67cc8f4da5fce588b50d57"},
- {file = "protobuf-5.29.1-cp39-cp39-win_amd64.whl", hash = "sha256:012ce28d862ff417fd629285aca5d9772807f15ceb1a0dbd15b88f58c776c98c"},
- {file = "protobuf-5.29.1-py3-none-any.whl", hash = "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0"},
- {file = "protobuf-5.29.1.tar.gz", hash = "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb"},
+ {file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"},
+ {file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"},
+ {file = "protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e"},
+ {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84"},
+ {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f"},
+ {file = "protobuf-5.29.3-cp38-cp38-win32.whl", hash = "sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252"},
+ {file = "protobuf-5.29.3-cp38-cp38-win_amd64.whl", hash = "sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107"},
+ {file = "protobuf-5.29.3-cp39-cp39-win32.whl", hash = "sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7"},
+ {file = "protobuf-5.29.3-cp39-cp39-win_amd64.whl", hash = "sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da"},
+ {file = "protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f"},
+ {file = "protobuf-5.29.3.tar.gz", hash = "sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620"},
]
[[package]]
name = "psutil"
-version = "6.1.0"
+version = "6.1.1"
description = "Cross-platform lib for process and system monitoring in Python."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
- {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"},
- {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"},
- {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:000d1d1ebd634b4efb383f4034437384e44a6d455260aaee2eca1e9c1b55f047"},
- {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5cd2bcdc75b452ba2e10f0e8ecc0b57b827dd5d7aaffbc6821b2a9a242823a76"},
- {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:045f00a43c737f960d273a83973b2511430d61f283a44c96bf13a6e829ba8fdc"},
- {file = "psutil-6.1.0-cp27-none-win32.whl", hash = "sha256:9118f27452b70bb1d9ab3198c1f626c2499384935aaf55388211ad982611407e"},
- {file = "psutil-6.1.0-cp27-none-win_amd64.whl", hash = "sha256:a8506f6119cff7015678e2bce904a4da21025cc70ad283a53b099e7620061d85"},
- {file = "psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688"},
- {file = "psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e"},
- {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38"},
- {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b"},
- {file = "psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a"},
- {file = "psutil-6.1.0-cp36-cp36m-win32.whl", hash = "sha256:6d3fbbc8d23fcdcb500d2c9f94e07b1342df8ed71b948a2649b5cb060a7c94ca"},
- {file = "psutil-6.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1209036fbd0421afde505a4879dee3b2fd7b1e14fee81c0069807adcbbcca747"},
- {file = "psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e"},
- {file = "psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be"},
- {file = "psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a"},
+ {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"},
+ {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"},
+ {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"},
+ {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"},
+ {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"},
+ {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"},
+ {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"},
+ {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"},
+ {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"},
+ {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"},
+ {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"},
+ {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"},
+ {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"},
+ {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"},
+ {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"},
+ {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"},
+ {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"},
]
[package.extras]
-dev = ["black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "wheel"]
+dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"]
test = ["pytest", "pytest-xdist", "setuptools"]
[[package]]
@@ -4428,53 +4465,53 @@ tests = ["pytest"]
[[package]]
name = "pyarrow"
-version = "18.1.0"
+version = "19.0.0"
description = "Python library for Apache Arrow"
optional = false
python-versions = ">=3.9"
files = [
- {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"},
- {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"},
- {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b"},
- {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71"},
- {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470"},
- {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56"},
- {file = "pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812"},
- {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854"},
- {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c"},
- {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21"},
- {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6"},
- {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe"},
- {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0"},
- {file = "pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a"},
- {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d"},
- {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee"},
- {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992"},
- {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54"},
- {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33"},
- {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30"},
- {file = "pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99"},
- {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b"},
- {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2"},
- {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191"},
- {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa"},
- {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c"},
- {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c"},
- {file = "pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181"},
- {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc"},
- {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386"},
- {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324"},
- {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8"},
- {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9"},
- {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba"},
- {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e"},
- {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76"},
- {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9"},
- {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754"},
- {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e"},
- {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7"},
- {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"},
- {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"},
+ {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"},
+ {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"},
+ {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503"},
+ {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17"},
+ {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34"},
+ {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44"},
+ {file = "pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c"},
+ {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a"},
+ {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735"},
+ {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4"},
+ {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1"},
+ {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042"},
+ {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263"},
+ {file = "pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2"},
+ {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68"},
+ {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351"},
+ {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b"},
+ {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c"},
+ {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451"},
+ {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1"},
+ {file = "pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136"},
+ {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463"},
+ {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352"},
+ {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d"},
+ {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae"},
+ {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098"},
+ {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04"},
+ {file = "pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73"},
+ {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89"},
+ {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a"},
+ {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7"},
+ {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8"},
+ {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d"},
+ {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1"},
+ {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d"},
+ {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"},
+ {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"},
]
[package.extras]
@@ -4563,18 +4600,18 @@ files = [
[[package]]
name = "pydantic"
-version = "2.10.3"
+version = "2.10.6"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"},
- {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"},
+ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"},
+ {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"},
]
[package.dependencies]
annotated-types = ">=0.6.0"
-pydantic-core = "2.27.1"
+pydantic-core = "2.27.2"
typing-extensions = ">=4.12.2"
[package.extras]
@@ -4583,111 +4620,111 @@ timezone = ["tzdata"]
[[package]]
name = "pydantic-core"
-version = "2.27.1"
+version = "2.27.2"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"},
- {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"},
- {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"},
- {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"},
- {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"},
- {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"},
- {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"},
- {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"},
- {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"},
- {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"},
- {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"},
- {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"},
- {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"},
- {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"},
- {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"},
- {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"},
- {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"},
- {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"},
- {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"},
- {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"},
- {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"},
- {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"},
- {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"},
- {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"},
- {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"},
- {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"},
- {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"},
- {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"},
- {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"},
- {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"},
- {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"},
- {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"},
- {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"},
- {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"},
- {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"},
- {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"},
- {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"},
- {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"},
- {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"},
- {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"},
- {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"},
- {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"},
- {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"},
- {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"},
- {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"},
- {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"},
- {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"},
- {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"},
- {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"},
- {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"},
- {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"},
- {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"},
- {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"},
- {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"},
+ {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"},
+ {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"},
+ {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"},
+ {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"},
+ {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"},
+ {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"},
+ {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"},
+ {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"},
+ {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"},
]
[package.dependencies]
@@ -4695,13 +4732,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pydantic-settings"
-version = "2.6.1"
+version = "2.7.1"
description = "Settings management using Pydantic"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"},
- {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"},
+ {file = "pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd"},
+ {file = "pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93"},
]
[package.dependencies]
@@ -4726,13 +4763,13 @@ files = [
[[package]]
name = "pygments"
-version = "2.18.0"
+version = "2.19.1"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
files = [
- {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
- {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
+ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
+ {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
]
[package.extras]
@@ -4769,13 +4806,13 @@ testutils = ["gitpython (>3)"]
[[package]]
name = "pymdown-extensions"
-version = "10.12"
+version = "10.14.1"
description = "Extension pack for Python Markdown."
optional = false
python-versions = ">=3.8"
files = [
- {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"},
- {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"},
+ {file = "pymdown_extensions-10.14.1-py3-none-any.whl", hash = "sha256:637951cbfbe9874ba28134fb3ce4b8bcadd6aca89ac4998ec29dcbafd554ae08"},
+ {file = "pymdown_extensions-10.14.1.tar.gz", hash = "sha256:b65801996a0cd4f42a3110810c306c45b7313c09b0610a6f773730f2a9e3c96b"},
]
[package.dependencies]
@@ -4783,17 +4820,17 @@ markdown = ">=3.6"
pyyaml = "*"
[package.extras]
-extra = ["pygments (>=2.12)"]
+extra = ["pygments (>=2.19.1)"]
[[package]]
name = "pymilvus"
-version = "2.5.0"
+version = "2.5.4"
description = "Python Sdk for Milvus"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pymilvus-2.5.0-py3-none-any.whl", hash = "sha256:a0e8653d8fe78019abfda79b3404ef7423f312501e8cbd7dc728051ce8732652"},
- {file = "pymilvus-2.5.0.tar.gz", hash = "sha256:4da14a3bd957a4921166f9355fd1f1ac5c5e4e80b46f12f64d9c9a6dcb8cb395"},
+ {file = "pymilvus-2.5.4-py3-none-any.whl", hash = "sha256:3f7ddaeae0c8f63554b8e316b73f265d022e05a457d47c366ce47293434a3aea"},
+ {file = "pymilvus-2.5.4.tar.gz", hash = "sha256:611732428ff669d57ded3d1f823bdeb10febf233d0251cce8498b287e5a10ce8"},
]
[package.dependencies]
@@ -4812,125 +4849,121 @@ model = ["milvus-model (>=0.1.0)"]
[[package]]
name = "pyobjc-core"
-version = "10.3.2"
+version = "11.0"
description = "Python<->ObjC Interoperability Module"
optional = true
python-versions = ">=3.8"
files = [
- {file = "pyobjc_core-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:acb40672d682851a5c7fd84e5041c4d069b62076168d72591abb5fcc871bb039"},
- {file = "pyobjc_core-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea5e77659619ad93c782ca07644b6efe7d7ec6f59e46128843a0a87c1af511a"},
- {file = "pyobjc_core-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:16644a92fb9661de841ba6115e5354db06a1d193a5e239046e840013c7b3874d"},
- {file = "pyobjc_core-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:76b8b911d94501dac89821df349b1860bb770dce102a1a293f524b5b09dd9462"},
- {file = "pyobjc_core-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8c6288fdb210b64115760a4504efbc4daffdc390d309e9318eb0e3e3b78d2828"},
- {file = "pyobjc_core-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:87901e9f7032f33eb4fa884e407bf2744d5a0791b379bfca783982a02be3f7fb"},
- {file = "pyobjc_core-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636971ab48a4198ca129e149fe58ccf85a7b4a9b93d27f5ae920d88eb2655431"},
- {file = "pyobjc_core-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:48e9ac3af42b2340dae709a8b894f5ef7e5132d8546adcd1797cffcc449dabdc"},
- {file = "pyobjc_core-10.3.2.tar.gz", hash = "sha256:dbf1475d864ce594288ce03e94e3a98dc7f0e4639971eb1e312bdf6661c21e0e"},
+ {file = "pyobjc_core-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:10866b3a734d47caf48e456eea0d4815c2c9b21856157db5917b61dee06893a1"},
+ {file = "pyobjc_core-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50675c0bb8696fe960a28466f9baf6943df2928a1fd85625d678fa2f428bd0bd"},
+ {file = "pyobjc_core-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a03061d4955c62ddd7754224a80cdadfdf17b6b5f60df1d9169a3b1b02923f0b"},
+ {file = "pyobjc_core-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c338c1deb7ab2e9436d4175d1127da2eeed4a1b564b3d83b9f3ae4844ba97e86"},
+ {file = "pyobjc_core-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b4e9dc4296110f251a4033ff3f40320b35873ea7f876bd29a1c9705bb5e08c59"},
+ {file = "pyobjc_core-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:02406ece449d0f41b31e579e47ca77ced3eb57533df955281bfcecc99da74fba"},
+ {file = "pyobjc_core-11.0.tar.gz", hash = "sha256:63bced211cb8a8fb5c8ff46473603da30e51112861bd02c438fbbbc8578d9a70"},
]
[[package]]
name = "pyobjc-framework-cocoa"
-version = "10.3.2"
+version = "11.0"
description = "Wrappers for the Cocoa frameworks on macOS"
optional = true
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "pyobjc_framework_Cocoa-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61f44c2adab28fdf3aa3d593c9497a2d9ceb9583ed9814adb48828c385d83ff4"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7caaf8b260e81b27b7b787332846f644b9423bfc1536f6ec24edbde59ab77a87"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c49e99fc4b9e613fb308651b99d52a8a9ae9916c8ef27aa2f5d585b6678a59bf"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1161b5713f9b9934c12649d73a6749617172e240f9431eff9e22175262fdfda"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:08e48b9ee4eb393447b2b781d16663b954bd10a26927df74f92e924c05568d89"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7faa448d2038ae0e0287a326d390002e744bb6470e45995e2dbd16c892e4495a"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:fcd53fee2be9708576617994b107aedc2c40824b648cd51e780e8399c0a447b6"},
- {file = "pyobjc_framework_Cocoa-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:838fcf0d10674bde9ff64a3f20c0e188f2dc5e804476d80509b81c4ac1dabc59"},
- {file = "pyobjc_framework_cocoa-10.3.2.tar.gz", hash = "sha256:673968e5435845bef969bfe374f31a1a6dc660c98608d2b84d5cae6eafa5c39d"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fbc65f260d617d5463c7fb9dbaaffc23c9a4fabfe3b1a50b039b61870b8daefd"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3ea7be6e6dd801b297440de02d312ba3fa7fd3c322db747ae1cb237e975f5d33"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:280a577b83c68175a28b2b7138d1d2d3111f2b2b66c30e86f81a19c2b02eae71"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15b2bd977ed340074f930f1330f03d42912d5882b697d78bd06f8ebe263ef92e"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5750001db544e67f2b66f02067d8f0da96bb2ef71732bde104f01b8628f9d7ea"},
+ {file = "pyobjc_framework_Cocoa-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddff25b0755d59873d186e1e07d6aaddb19d55e3ae890d69ff2d9babf8627657"},
+ {file = "pyobjc_framework_cocoa-11.0.tar.gz", hash = "sha256:00346a8cb81ad7b017b32ff7bf596000f9faa905807b1bd234644ebd47f692c5"},
]
[package.dependencies]
-pyobjc-core = ">=10.3.2"
+pyobjc-core = ">=11.0"
[[package]]
name = "pyobjc-framework-coreml"
-version = "10.3.2"
+version = "11.0"
description = "Wrappers for the framework CoreML on macOS"
optional = true
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "pyobjc_framework_CoreML-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fcac461545f007d648d2ff67f2734420c77173b467549e4a9d6b38a75dad2df7"},
- {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:feea183b192cc806485b7713f135e544e7fa7ece3cea0e8cde92db4ae19374ab"},
- {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:15c89f9f37e46924357eb1c9859dfe4802a409263bb502b6a997046548097983"},
- {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a975f2667d7e5ad81091db5a89a27c0e091f20ac4be8de309b3b20d177d83637"},
- {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:559967fa7dd82e75cf84ae53b176ea6da8d7705e589213aea9fe10ac0ce1d100"},
- {file = "pyobjc_framework_coreml-10.3.2.tar.gz", hash = "sha256:f2e6eabe41fa34e964b707ba7a1269d5e049d5a7ac5574f35c4faa0647f385ba"},
+ {file = "pyobjc_framework_CoreML-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:87991c6ed2510e9143b5d200a946cb1f1396e321ccd4b8b22a32616333b1cf32"},
+ {file = "pyobjc_framework_CoreML-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e290ad9c0ac5f057ce3885d35e33fadc115f59111f2e04f168c45e2890cb86e8"},
+ {file = "pyobjc_framework_CoreML-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:48320a57589634c206d659799284a5133aaa006cf4562f772697df5b479043e4"},
+ {file = "pyobjc_framework_CoreML-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cc73c6a2a3dd4181b679c12b83066e3a36e9b4213626821633f87ce5be4ad29d"},
+ {file = "pyobjc_framework_CoreML-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:45fd15a483f9c4c408da005e3b2816a71112050de2a666cb9a4de20518eb3aca"},
+ {file = "pyobjc_framework_CoreML-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9359e87e7f15c9db418be4a4bbbe2c4e70bf535599e92966432f91bd94ff5154"},
+ {file = "pyobjc_framework_coreml-11.0.tar.gz", hash = "sha256:143a1f73a0ea0a0ea103f3175cb87a61bbcb98f70f85320ed4c61302b9156d58"},
]
[package.dependencies]
-pyobjc-core = ">=10.3.2"
-pyobjc-framework-Cocoa = ">=10.3.2"
+pyobjc-core = ">=11.0"
+pyobjc-framework-Cocoa = ">=11.0"
[[package]]
name = "pyobjc-framework-quartz"
-version = "10.3.2"
+version = "11.0"
description = "Wrappers for the Quartz frameworks on macOS"
optional = true
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "pyobjc_framework_Quartz-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5574754c23895269751c2b78d2d2b33b6de415f562534a1432484558f0a5a293"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4697f3ef1991f7877c201778005dc4098ced3d19d938ebf916384c8f795488d3"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:604188ee8ff051ffe74a12cb3274403fe9c3fa02b15fc4132685c0f74285ffe5"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e27fb446e012c9571bc163cff5f3036e9e6fa5caca06b5d7882ad1c6b6aaf0c"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:d5bd6ef96a3d08c97cf2aca43a819113cdff494b5abebcedd7cf23b6d6e711f4"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3b55ec27cffff18d98d73694001a211ad4cdf717f7d8ad76235f845771d8b5d"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a58826db7e71de4654e5215b46f00f7825b17991078c9ba74ca729a4da024f82"},
- {file = "pyobjc_framework_Quartz-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ede1001c28d27fc76f89a3243b3127dbd7dd03f39a3324766ae895cdcd1ebf1"},
- {file = "pyobjc_framework_quartz-10.3.2.tar.gz", hash = "sha256:193e7752c93e2d1304f914e3a8c069f4b66de237376c5285ba7c72e9ee0e3b15"},
+ {file = "pyobjc_framework_Quartz-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da3ab13c9f92361959b41b0ad4cdd41ae872f90a6d8c58a9ed699bc08ab1c45c"},
+ {file = "pyobjc_framework_Quartz-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d251696bfd8e8ef72fbc90eb29fec95cb9d1cc409008a183d5cc3246130ae8c2"},
+ {file = "pyobjc_framework_Quartz-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cb4a9f2d9d580ea15e25e6b270f47681afb5689cafc9e25712445ce715bcd18e"},
+ {file = "pyobjc_framework_Quartz-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:973b4f9b8ab844574461a038bd5269f425a7368d6e677e3cc81fcc9b27b65498"},
+ {file = "pyobjc_framework_Quartz-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:66ab58d65348863b8707e63b2ec5cdc54569ee8189d1af90d52f29f5fdf6272c"},
+ {file = "pyobjc_framework_Quartz-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1032f63f2a4ee98366764e69c249f1d93813821e17d224cf626cf11fb1801fc4"},
+ {file = "pyobjc_framework_quartz-11.0.tar.gz", hash = "sha256:3205bf7795fb9ae34747f701486b3db6dfac71924894d1f372977c4d70c3c619"},
]
[package.dependencies]
-pyobjc-core = ">=10.3.2"
-pyobjc-framework-Cocoa = ">=10.3.2"
+pyobjc-core = ">=11.0"
+pyobjc-framework-Cocoa = ">=11.0"
[[package]]
name = "pyobjc-framework-vision"
-version = "10.3.2"
+version = "11.0"
description = "Wrappers for the framework Vision on macOS"
optional = true
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "pyobjc_framework_Vision-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:62efeeef9317d6014b26e4476de45f4b2853970272e1a236e45044ad8ac8b2fb"},
- {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cae03536f12ed5764ecfdcf9cf96b37e577cc6e8c466aeb23a6aa0682b45ae39"},
- {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba5ccd0bf12c29c2cdf1b52405c395929b5802e9120476b8e9a01af691ab33dc"},
- {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2b7edc178ebeb621ba9a239449f8ae1fc6b643f60914ff2be4dad69e901ca331"},
- {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1083e23ee4dae7cca8e2d094b1995909690b277c967975227d3395222c0c7377"},
- {file = "pyobjc_framework_vision-10.3.2.tar.gz", hash = "sha256:5cfea4a750657e2c8e7c8b0c26c7aac2578ba09ab8f66ffa0e2ee632410cacf3"},
+ {file = "pyobjc_framework_Vision-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a6707adc9df3510686c18d4f2a6d8df234c347329edb12793459867163a61c42"},
+ {file = "pyobjc_framework_Vision-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ca7cc48332d804a02b5b17f31bed52dd4b7c323f9e4ff4b4e7ecd35d39cc0759"},
+ {file = "pyobjc_framework_Vision-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1b07aa867dda47d2a4883cd969e248039988b49190ba097cbe9747156b5d1f30"},
+ {file = "pyobjc_framework_Vision-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b2fd9088d91d950b2127e98785b3d4c6b55516bf733af7cab4b30950571d32be"},
+ {file = "pyobjc_framework_Vision-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9821d930025d0c084a83ed216751d5b4f022cb4a47d42440b1c6766d8952620d"},
+ {file = "pyobjc_framework_Vision-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8b33f365741b92d840820c3fb0ef463a8a384dcc73a85cd6033a8d5bfd158655"},
+ {file = "pyobjc_framework_vision-11.0.tar.gz", hash = "sha256:45342e5253c306dbcd056a68bff04ffbfa00e9ac300a02aabf2e81053b771e39"},
]
[package.dependencies]
-pyobjc-core = ">=10.3.2"
-pyobjc-framework-Cocoa = ">=10.3.2"
-pyobjc-framework-CoreML = ">=10.3.2"
-pyobjc-framework-Quartz = ">=10.3.2"
+pyobjc-core = ">=11.0"
+pyobjc-framework-Cocoa = ">=11.0"
+pyobjc-framework-CoreML = ">=11.0"
+pyobjc-framework-Quartz = ">=11.0"
[[package]]
name = "pypdfium2"
-version = "4.30.0"
+version = "4.30.1"
description = "Python bindings to PDFium"
optional = false
python-versions = ">=3.6"
files = [
- {file = "pypdfium2-4.30.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b33ceded0b6ff5b2b93bc1fe0ad4b71aa6b7e7bd5875f1ca0cdfb6ba6ac01aab"},
- {file = "pypdfium2-4.30.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4e55689f4b06e2d2406203e771f78789bd4f190731b5d57383d05cf611d829de"},
- {file = "pypdfium2-4.30.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6e50f5ce7f65a40a33d7c9edc39f23140c57e37144c2d6d9e9262a2a854854"},
- {file = "pypdfium2-4.30.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3d0dd3ecaffd0b6dbda3da663220e705cb563918249bda26058c6036752ba3a2"},
- {file = "pypdfium2-4.30.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc3bf29b0db8c76cdfaac1ec1cde8edf211a7de7390fbf8934ad2aa9b4d6dfad"},
- {file = "pypdfium2-4.30.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1f78d2189e0ddf9ac2b7a9b9bd4f0c66f54d1389ff6c17e9fd9dc034d06eb3f"},
- {file = "pypdfium2-4.30.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:5eda3641a2da7a7a0b2f4dbd71d706401a656fea521b6b6faa0675b15d31a163"},
- {file = "pypdfium2-4.30.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e"},
- {file = "pypdfium2-4.30.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:f33bd79e7a09d5f7acca3b0b69ff6c8a488869a7fab48fdf400fec6e20b9c8be"},
- {file = "pypdfium2-4.30.0-py3-none-win32.whl", hash = "sha256:ee2410f15d576d976c2ab2558c93d392a25fb9f6635e8dd0a8a3a5241b275e0e"},
- {file = "pypdfium2-4.30.0-py3-none-win_amd64.whl", hash = "sha256:90dbb2ac07be53219f56be09961eb95cf2473f834d01a42d901d13ccfad64b4c"},
- {file = "pypdfium2-4.30.0-py3-none-win_arm64.whl", hash = "sha256:119b2969a6d6b1e8d55e99caaf05290294f2d0fe49c12a3f17102d01c441bd29"},
- {file = "pypdfium2-4.30.0.tar.gz", hash = "sha256:48b5b7e5566665bc1015b9d69c1ebabe21f6aee468b509531c3c8318eeee2e16"},
+ {file = "pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37"},
+ {file = "pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe"},
+ {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de7a3a36803171b3f66911131046d65a732f9e7834438191cb58235e6163c4e"},
+ {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8a4231efb13170354f568c722d6540b8d5b476b08825586d48ef70c40d16e03"},
+ {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f434a4934e8244aa95343ffcf24e9ad9f120dbb4785f631bb40a88c39292493"},
+ {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f454032a0bc7681900170f67d8711b3942824531e765f91c2f5ce7937f999794"},
+ {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:bbf9130a72370ee9d602e39949b902db669a2a1c24746a91e5586eb829055d9f"},
+ {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:5cb52884b1583b96e94fd78542c63bb42e06df5e8f9e52f8f31f5ad5a1e53367"},
+ {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1a9e372bd4867ff223cc8c338e33fe11055dad12f22885950fc27646cc8d9122"},
+ {file = "pypdfium2-4.30.1-py3-none-win32.whl", hash = "sha256:421f1cf205e213e07c1f2934905779547f4f4a2ff2f59dde29da3d511d3fc806"},
+ {file = "pypdfium2-4.30.1-py3-none-win_amd64.whl", hash = "sha256:598a7f20264ab5113853cba6d86c4566e4356cad037d7d1f849c8c9021007e05"},
+ {file = "pypdfium2-4.30.1-py3-none-win_arm64.whl", hash = "sha256:c2b6d63f6d425d9416c08d2511822b54b8e3ac38e639fc41164b1d75584b3a8c"},
+ {file = "pypdfium2-4.30.1.tar.gz", hash = "sha256:5f5c7c6d03598e107d974f66b220a49436aceb191da34cda5f692be098a814ce"},
]
[[package]]
@@ -5495,12 +5528,12 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
[[package]]
name = "rapidocr-onnxruntime"
-version = "1.4.3"
+version = "1.4.4"
description = "A cross platform OCR Library based on OnnxRuntime."
optional = true
python-versions = "<3.13,>=3.6"
files = [
- {file = "rapidocr_onnxruntime-1.4.3-py3-none-any.whl", hash = "sha256:d504fa0e7b1d907818f734dc87e4c98acc4c3feb814a732ad35dda8c03a671bd"},
+ {file = "rapidocr_onnxruntime-1.4.4-py3-none-any.whl", hash = "sha256:971d7d5f223a7a808662229df1ef69893809d8457d834e6373d3854bc1782cbf"},
]
[package.dependencies]
@@ -5535,18 +5568,19 @@ md = ["cmarkgfm (>=0.8.0)"]
[[package]]
name = "referencing"
-version = "0.35.1"
+version = "0.36.1"
description = "JSON Referencing + Python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
- {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
+ {file = "referencing-0.36.1-py3-none-any.whl", hash = "sha256:363d9c65f080d0d70bc41c721dce3c7f3e77fc09f269cd5c8813da18069a6794"},
+ {file = "referencing-0.36.1.tar.gz", hash = "sha256:ca2e6492769e3602957e9b831b94211599d2aade9477f5d44110d2530cf9aade"},
]
[package.dependencies]
attrs = ">=22.2.0"
rpds-py = ">=0.7.0"
+typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""}
[[package]]
name = "regex"
@@ -5852,121 +5886,26 @@ files = [
[[package]]
name = "safetensors"
-version = "0.4.5"
+version = "0.5.2"
description = ""
optional = false
python-versions = ">=3.7"
files = [
- {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"},
- {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6885016f34bef80ea1085b7e99b3c1f92cb1be78a49839203060f67b40aee761"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133620f443450429322f238fda74d512c4008621227fccf2f8cf4a76206fea7c"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3e0609ec12d2a77e882f07cced530b8262027f64b75d399f1504ffec0ba56"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f1dd769f064adc33831f5e97ad07babbd728427f98e3e1db6902e369122737"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6d156bdb26732feada84f9388a9f135528c1ef5b05fae153da365ad4319c4c5"},
- {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e347d77e2c77eb7624400ccd09bed69d35c0332f417ce8c048d404a096c593b"},
- {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9f556eea3aec1d3d955403159fe2123ddd68e880f83954ee9b4a3f2e15e716b6"},
- {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9483f42be3b6bc8ff77dd67302de8ae411c4db39f7224dec66b0eb95822e4163"},
- {file = "safetensors-0.4.5-cp310-none-win32.whl", hash = "sha256:7389129c03fadd1ccc37fd1ebbc773f2b031483b04700923c3511d2a939252cc"},
- {file = "safetensors-0.4.5-cp310-none-win_amd64.whl", hash = "sha256:e98ef5524f8b6620c8cdef97220c0b6a5c1cef69852fcd2f174bb96c2bb316b1"},
- {file = "safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c"},
- {file = "safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59b77e4b7a708988d84f26de3ebead61ef1659c73dcbc9946c18f3b1786d2688"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d3bc83e14d67adc2e9387e511097f254bd1b43c3020440e708858c684cbac68"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39371fc551c1072976073ab258c3119395294cf49cdc1f8476794627de3130df"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c19feda32b931cae0acd42748a670bdf56bee6476a046af20181ad3fee4090"},
- {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a659467495de201e2f282063808a41170448c78bada1e62707b07a27b05e6943"},
- {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad5e4b2476949bcd638a89f71b6916fa9a5cae5c1ae7eede337aca2100435c0"},
- {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a3a315a6d0054bc6889a17f5668a73f94f7fe55121ff59e0a199e3519c08565f"},
- {file = "safetensors-0.4.5-cp311-none-win32.whl", hash = "sha256:a01e232e6d3d5cf8b1667bc3b657a77bdab73f0743c26c1d3c5dd7ce86bd3a92"},
- {file = "safetensors-0.4.5-cp311-none-win_amd64.whl", hash = "sha256:cbd39cae1ad3e3ef6f63a6f07296b080c951f24cec60188378e43d3713000c04"},
- {file = "safetensors-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:473300314e026bd1043cef391bb16a8689453363381561b8a3e443870937cc1e"},
- {file = "safetensors-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:801183a0f76dc647f51a2d9141ad341f9665602a7899a693207a82fb102cc53e"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1524b54246e422ad6fb6aea1ac71edeeb77666efa67230e1faf6999df9b2e27f"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3139098e3e8b2ad7afbca96d30ad29157b50c90861084e69fcb80dec7430461"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65573dc35be9059770808e276b017256fa30058802c29e1038eb1c00028502ea"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd33da8e9407559f8779c82a0448e2133737f922d71f884da27184549416bfed"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3685ce7ed036f916316b567152482b7e959dc754fcc4a8342333d222e05f407c"},
- {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dde2bf390d25f67908278d6f5d59e46211ef98e44108727084d4637ee70ab4f1"},
- {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7469d70d3de970b1698d47c11ebbf296a308702cbaae7fcb993944751cf985f4"},
- {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a6ba28118636a130ccbb968bc33d4684c48678695dba2590169d5ab03a45646"},
- {file = "safetensors-0.4.5-cp312-none-win32.whl", hash = "sha256:c859c7ed90b0047f58ee27751c8e56951452ed36a67afee1b0a87847d065eec6"},
- {file = "safetensors-0.4.5-cp312-none-win_amd64.whl", hash = "sha256:b5a8810ad6a6f933fff6c276eae92c1da217b39b4d8b1bc1c0b8af2d270dc532"},
- {file = "safetensors-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:25e5f8e2e92a74f05b4ca55686234c32aac19927903792b30ee6d7bd5653d54e"},
- {file = "safetensors-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81efb124b58af39fcd684254c645e35692fea81c51627259cdf6d67ff4458916"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:585f1703a518b437f5103aa9cf70e9bd437cb78eea9c51024329e4fb8a3e3679"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b99fbf72e3faf0b2f5f16e5e3458b93b7d0a83984fe8d5364c60aa169f2da89"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b17b299ca9966ca983ecda1c0791a3f07f9ca6ab5ded8ef3d283fff45f6bcd5f"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76ded72f69209c9780fdb23ea89e56d35c54ae6abcdec67ccb22af8e696e449a"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2783956926303dcfeb1de91a4d1204cd4089ab441e622e7caee0642281109db3"},
- {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35"},
- {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523"},
- {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142"},
- {file = "safetensors-0.4.5-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:77d9b228da8374c7262046a36c1f656ba32a93df6cc51cd4453af932011e77f1"},
- {file = "safetensors-0.4.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:500cac01d50b301ab7bb192353317035011c5ceeef0fca652f9f43c000bb7f8d"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75331c0c746f03158ded32465b7d0b0e24c5a22121743662a2393439c43a45cf"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670e95fe34e0d591d0529e5e59fd9d3d72bc77b1444fcaa14dccda4f36b5a38b"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:098923e2574ff237c517d6e840acada8e5b311cb1fa226019105ed82e9c3b62f"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ca0902d2648775089fa6a0c8fc9e6390c5f8ee576517d33f9261656f851e3f"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0032bedc869c56f8d26259fe39cd21c5199cd57f2228d817a0e23e8370af25"},
- {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4b15f51b4f8f2a512341d9ce3475cacc19c5fdfc5db1f0e19449e75f95c7dc8"},
- {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f6594d130d0ad933d885c6a7b75c5183cb0e8450f799b80a39eae2b8508955eb"},
- {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:60c828a27e852ded2c85fc0f87bf1ec20e464c5cd4d56ff0e0711855cc2e17f8"},
- {file = "safetensors-0.4.5-cp37-none-win32.whl", hash = "sha256:6d3de65718b86c3eeaa8b73a9c3d123f9307a96bbd7be9698e21e76a56443af5"},
- {file = "safetensors-0.4.5-cp37-none-win_amd64.whl", hash = "sha256:5a2d68a523a4cefd791156a4174189a4114cf0bf9c50ceb89f261600f3b2b81a"},
- {file = "safetensors-0.4.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:e7a97058f96340850da0601a3309f3d29d6191b0702b2da201e54c6e3e44ccf0"},
- {file = "safetensors-0.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:63bfd425e25f5c733f572e2246e08a1c38bd6f2e027d3f7c87e2e43f228d1345"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3664ac565d0e809b0b929dae7ccd74e4d3273cd0c6d1220c6430035befb678e"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:313514b0b9b73ff4ddfb4edd71860696dbe3c1c9dc4d5cc13dbd74da283d2cbf"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31fa33ee326f750a2f2134a6174773c281d9a266ccd000bd4686d8021f1f3dac"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09566792588d77b68abe53754c9f1308fadd35c9f87be939e22c623eaacbed6b"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309aaec9b66cbf07ad3a2e5cb8a03205663324fea024ba391594423d0f00d9fe"},
- {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53946c5813b8f9e26103c5efff4a931cc45d874f45229edd68557ffb35ffb9f8"},
- {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:868f9df9e99ad1e7f38c52194063a982bc88fedc7d05096f4f8160403aaf4bd6"},
- {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9cc9449bd0b0bc538bd5e268221f0c5590bc5c14c1934a6ae359d44410dc68c4"},
- {file = "safetensors-0.4.5-cp38-none-win32.whl", hash = "sha256:83c4f13a9e687335c3928f615cd63a37e3f8ef072a3f2a0599fa09f863fb06a2"},
- {file = "safetensors-0.4.5-cp38-none-win_amd64.whl", hash = "sha256:b98d40a2ffa560653f6274e15b27b3544e8e3713a44627ce268f419f35c49478"},
- {file = "safetensors-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf727bb1281d66699bef5683b04d98c894a2803442c490a8d45cd365abfbdeb2"},
- {file = "safetensors-0.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96f1d038c827cdc552d97e71f522e1049fef0542be575421f7684756a748e457"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:139fbee92570ecea774e6344fee908907db79646d00b12c535f66bc78bd5ea2c"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c36302c1c69eebb383775a89645a32b9d266878fab619819ce660309d6176c9b"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d641f5b8149ea98deb5ffcf604d764aad1de38a8285f86771ce1abf8e74c4891"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4db6a61d968de73722b858038c616a1bebd4a86abe2688e46ca0cc2d17558f2"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b75a616e02f21b6f1d5785b20cecbab5e2bd3f6358a90e8925b813d557666ec1"},
- {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:788ee7d04cc0e0e7f944c52ff05f52a4415b312f5efd2ee66389fb7685ee030c"},
- {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87bc42bd04fd9ca31396d3ca0433db0be1411b6b53ac5a32b7845a85d01ffc2e"},
- {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4037676c86365a721a8c9510323a51861d703b399b78a6b4486a54a65a975fca"},
- {file = "safetensors-0.4.5-cp39-none-win32.whl", hash = "sha256:1500418454529d0ed5c1564bda376c4ddff43f30fce9517d9bee7bcce5a8ef50"},
- {file = "safetensors-0.4.5-cp39-none-win_amd64.whl", hash = "sha256:9d1a94b9d793ed8fe35ab6d5cea28d540a46559bafc6aae98f30ee0867000cab"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdadf66b5a22ceb645d5435a0be7a0292ce59648ca1d46b352f13cff3ea80410"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d42ffd4c2259f31832cb17ff866c111684c87bd930892a1ba53fed28370c918c"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd8a1f6d2063a92cd04145c7fd9e31a1c7d85fbec20113a14b487563fdbc0597"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951d2fcf1817f4fb0ef0b48f6696688a4e852a95922a042b3f96aaa67eedc920"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ac85d9a8c1af0e3132371d9f2d134695a06a96993c2e2f0bbe25debb9e3f67a"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e3cec4a29eb7fe8da0b1c7988bc3828183080439dd559f720414450de076fcab"},
- {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:21742b391b859e67b26c0b2ac37f52c9c0944a879a25ad2f9f9f3cd61e7fda8f"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7db3006a4915151ce1913652e907cdede299b974641a83fbc092102ac41b644"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f68bf99ea970960a237f416ea394e266e0361895753df06e3e06e6ea7907d98b"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8158938cf3324172df024da511839d373c40fbfaa83e9abf467174b2910d7b4c"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:540ce6c4bf6b58cb0fd93fa5f143bc0ee341c93bb4f9287ccd92cf898cc1b0dd"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bfeaa1a699c6b9ed514bd15e6a91e74738b71125a9292159e3d6b7f0a53d2cde"},
- {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:01c8f00da537af711979e1b42a69a8ec9e1d7112f208e0e9b8a35d2c381085ef"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0dd565f83b30f2ca79b5d35748d0d99dd4b3454f80e03dfb41f0038e3bdf180"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:023b6e5facda76989f4cba95a861b7e656b87e225f61811065d5c501f78cdb3f"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9633b663393d5796f0b60249549371e392b75a0b955c07e9c6f8708a87fc841f"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78dd8adfb48716233c45f676d6e48534d34b4bceb50162c13d1f0bdf6f78590a"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e8deb16c4321d61ae72533b8451ec4a9af8656d1c61ff81aa49f966406e4b68"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:52452fa5999dc50c4decaf0c53aa28371f7f1e0fe5c2dd9129059fbe1e1599c7"},
- {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d5f23198821e227cfc52d50fa989813513db381255c6d100927b012f0cfec63d"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f4beb84b6073b1247a773141a6331117e35d07134b3bb0383003f39971d414bb"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68814d599d25ed2fdd045ed54d370d1d03cf35e02dce56de44c651f828fb9b7b"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b6453c54c57c1781292c46593f8a37254b8b99004c68d6c3ce229688931a22"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adaa9c6dead67e2dd90d634f89131e43162012479d86e25618e821a03d1eb1dc"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73e7d408e9012cd17511b382b43547850969c7979efc2bc353f317abaf23c84c"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:775409ce0fcc58b10773fdb4221ed1eb007de10fe7adbdf8f5e8a56096b6f0bc"},
- {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:834001bed193e4440c4a3950a31059523ee5090605c907c66808664c932b549c"},
- {file = "safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310"},
+ {file = "safetensors-0.5.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:45b6092997ceb8aa3801693781a71a99909ab9cc776fbc3fa9322d29b1d3bef2"},
+ {file = "safetensors-0.5.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6d0d6a8ee2215a440e1296b843edf44fd377b055ba350eaba74655a2fe2c4bae"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86016d40bcaa3bcc9a56cd74d97e654b5f4f4abe42b038c71e4f00a089c4526c"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:990833f70a5f9c7d3fc82c94507f03179930ff7d00941c287f73b6fcbf67f19e"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dfa7c2f3fe55db34eba90c29df94bcdac4821043fc391cb5d082d9922013869"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46ff2116150ae70a4e9c490d2ab6b6e1b1b93f25e520e540abe1b81b48560c3a"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab696dfdc060caffb61dbe4066b86419107a24c804a4e373ba59be699ebd8d5"},
+ {file = "safetensors-0.5.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03c937100f38c9ff4c1507abea9928a6a9b02c9c1c9c3609ed4fb2bf413d4975"},
+ {file = "safetensors-0.5.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a00e737948791b94dad83cf0eafc09a02c4d8c2171a239e8c8572fe04e25960e"},
+ {file = "safetensors-0.5.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:d3a06fae62418ec8e5c635b61a8086032c9e281f16c63c3af46a6efbab33156f"},
+ {file = "safetensors-0.5.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1506e4c2eda1431099cebe9abf6c76853e95d0b7a95addceaa74c6019c65d8cf"},
+ {file = "safetensors-0.5.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5c5b5d9da594f638a259fca766046f44c97244cc7ab8bef161b3e80d04becc76"},
+ {file = "safetensors-0.5.2-cp38-abi3-win32.whl", hash = "sha256:fe55c039d97090d1f85277d402954dd6ad27f63034fa81985a9cc59655ac3ee2"},
+ {file = "safetensors-0.5.2-cp38-abi3-win_amd64.whl", hash = "sha256:78abdddd03a406646107f973c7843276e7b64e5e32623529dc17f3d94a20f589"},
+ {file = "safetensors-0.5.2.tar.gz", hash = "sha256:cb4a8d98ba12fa016f4241932b1fc5e702e5143f5374bba0bbcf7ddc1c4cf2b8"},
]
[package.dependencies]
@@ -5980,7 +5919,7 @@ jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[num
mlx = ["mlx (>=0.0.9)"]
numpy = ["numpy (>=1.21.6)"]
paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"]
-pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"]
+pinned-tf = ["safetensors[numpy]", "tensorflow (==2.18.0)"]
quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"]
tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"]
testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"]
@@ -6036,41 +5975,41 @@ test = ["asv", "numpydoc (>=1.7)", "pooch (>=1.6.0)", "pytest (>=7.0)", "pytest-
[[package]]
name = "scikit-learn"
-version = "1.6.0"
+version = "1.6.1"
description = "A set of python modules for machine learning and data mining"
optional = false
python-versions = ">=3.9"
files = [
- {file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"},
- {file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"},
- {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7a579606c73a0b3d210e33ea410ea9e1af7933fe324cb7e6fbafae4ea5948"},
- {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46d3ca0f11a540b8eaddaf5e38172d8cd65a86cb3e3632161ec96c0cffb774c"},
- {file = "scikit_learn-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be4577769c5dde6e1b53de8e6520f9b664ab5861dd57acee47ad119fd7405d6"},
- {file = "scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285"},
- {file = "scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b"},
- {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a"},
- {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c716d13ba0a2f8762d96ff78d3e0cde90bc9c9b5c13d6ab6bb9b2d6ca6705fd"},
- {file = "scikit_learn-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aafd94bafc841b626681e626be27bf1233d5a0f20f0a6fdb4bee1a1963c6643"},
- {file = "scikit_learn-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:04a5ba45c12a5ff81518aa4f1604e826a45d20e53da47b15871526cda4ff5174"},
- {file = "scikit_learn-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:21fadfc2ad7a1ce8bd1d90f23d17875b84ec765eecbbfc924ff11fb73db582ce"},
- {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30f34bb5fde90e020653bb84dcb38b6c83f90c70680dbd8c38bd9becbad7a127"},
- {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dad624cffe3062276a0881d4e441bc9e3b19d02d17757cd6ae79a9d192a0027"},
- {file = "scikit_learn-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fce7950a3fad85e0a61dc403df0f9345b53432ac0e47c50da210d22c60b6d85"},
- {file = "scikit_learn-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5453b2e87ef8accedc5a8a4e6709f887ca01896cd7cc8a174fe39bd4bb00aef"},
- {file = "scikit_learn-1.6.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5fe11794236fb83bead2af26a87ced5d26e3370b8487430818b915dafab1724e"},
- {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61fe3dcec0d82ae280877a818ab652f4988371e32dd5451e75251bece79668b1"},
- {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44e3a51e181933bdf9a4953cc69c6025b40d2b49e238233f149b98849beb4bf"},
- {file = "scikit_learn-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:a17860a562bac54384454d40b3f6155200c1c737c9399e6a97962c63fce503ac"},
- {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:98717d3c152f6842d36a70f21e1468fb2f1a2f8f2624d9a3f382211798516426"},
- {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:34e20bfac8ff0ebe0ff20fb16a4d6df5dc4cc9ce383e00c2ab67a526a3c67b18"},
- {file = "scikit_learn-1.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba06d75815406091419e06dd650b91ebd1c5f836392a0d833ff36447c2b1bfa"},
- {file = "scikit_learn-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b6916d1cec1ff163c7d281e699d7a6a709da2f2c5ec7b10547e08cc788ddd3ae"},
- {file = "scikit_learn-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66b1cf721a9f07f518eb545098226796c399c64abdcbf91c2b95d625068363da"},
- {file = "scikit_learn-1.6.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b35b60cf4cd6564b636e4a40516b3c61a4fa7a8b1f7a3ce80c38ebe04750bc3"},
- {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a73b1c2038c93bc7f4bf21f6c9828d5116c5d2268f7a20cfbbd41d3074d52083"},
- {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c3fa7d3dd5a0ec2d0baba0d644916fa2ab180ee37850c5d536245df916946bd"},
- {file = "scikit_learn-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:df778486a32518cda33818b7e3ce48c78cef1d5f640a6bc9d97c6d2e71449a51"},
- {file = "scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e"},
+ {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"},
+ {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"},
+ {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5"},
+ {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b"},
+ {file = "scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002"},
+ {file = "scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33"},
+ {file = "scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d"},
+ {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2"},
+ {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8"},
+ {file = "scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415"},
+ {file = "scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b"},
+ {file = "scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2"},
+ {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f"},
+ {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86"},
+ {file = "scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52"},
+ {file = "scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322"},
+ {file = "scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1"},
+ {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348"},
+ {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97"},
+ {file = "scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb"},
+ {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236"},
+ {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35"},
+ {file = "scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691"},
+ {file = "scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f"},
+ {file = "scikit_learn-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6849dd3234e87f55dce1db34c89a810b489ead832aaf4d4550b7ea85628be6c1"},
+ {file = "scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e7be3fa5d2eb9be7d77c3734ff1d599151bb523674be9b834e8da6abe132f44e"},
+ {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107"},
+ {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422"},
+ {file = "scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b"},
+ {file = "scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e"},
]
[package.dependencies]
@@ -6147,13 +6086,13 @@ jeepney = ">=0.6"
[[package]]
name = "semchunk"
-version = "2.2.0"
+version = "2.2.2"
description = "A fast and lightweight Python library for splitting text into semantically meaningful chunks."
optional = false
python-versions = ">=3.9"
files = [
- {file = "semchunk-2.2.0-py3-none-any.whl", hash = "sha256:7db19ca90ddb48f99265e789e07a7bb111ae25185f9cc3d44b94e1e61b9067fc"},
- {file = "semchunk-2.2.0.tar.gz", hash = "sha256:4de761ce614036fa3bea61adbe47e3ade7c96ac9b062f223b3ac353dbfd26743"},
+ {file = "semchunk-2.2.2-py3-none-any.whl", hash = "sha256:94ca19020c013c073abdfd06d79a7c13637b91738335f3b8cdb5655ee7cc94d2"},
+ {file = "semchunk-2.2.2.tar.gz", hash = "sha256:940e89896e64eeb01de97ba60f51c8c7b96c6a3951dfcf574f25ce2146752f52"},
]
[package.dependencies]
@@ -6173,13 +6112,13 @@ files = [
[[package]]
name = "sentence-transformers"
-version = "3.3.1"
+version = "3.4.0"
description = "State-of-the-Art Text Embeddings"
optional = false
python-versions = ">=3.9"
files = [
- {file = "sentence_transformers-3.3.1-py3-none-any.whl", hash = "sha256:abffcc79dab37b7d18d21a26d5914223dd42239cfe18cb5e111c66c54b658ae7"},
- {file = "sentence_transformers-3.3.1.tar.gz", hash = "sha256:9635dbfb11c6b01d036b9cfcee29f7716ab64cf2407ad9f403a2e607da2ac48b"},
+ {file = "sentence_transformers-3.4.0-py3-none-any.whl", hash = "sha256:f7d4ad81260149172a98108a3481d8e82c11d31f40d41885f43d481149237743"},
+ {file = "sentence_transformers-3.4.0.tar.gz", hash = "sha256:334288062d4b888cdd7b75913fead46b1e42bfe836f8343d23478d17f799e650"},
]
[package.dependencies]
@@ -6200,23 +6139,23 @@ train = ["accelerate (>=0.20.3)", "datasets"]
[[package]]
name = "setuptools"
-version = "75.6.0"
+version = "75.8.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.9"
files = [
- {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"},
- {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"},
+ {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"},
+ {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"},
]
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"]
core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
enabler = ["pytest-enabler (>=2.2)"]
-test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
-type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
+type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"]
[[package]]
name = "shapely"
@@ -6300,13 +6239,13 @@ files = [
[[package]]
name = "smmap"
-version = "5.0.1"
+version = "5.0.2"
description = "A pure Python implementation of a sliding window memory map manager"
optional = false
python-versions = ">=3.7"
files = [
- {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
- {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
+ {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"},
+ {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"},
]
[[package]]
@@ -6510,6 +6449,123 @@ files = [
{file = "tokenize_rt-6.1.0.tar.gz", hash = "sha256:e8ee836616c0877ab7c7b54776d2fefcc3bde714449a206762425ae114b53c86"},
]
+[[package]]
+name = "tokenizers"
+version = "0.19.1"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"},
+ {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"},
+ {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"},
+ {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"},
+ {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"},
+ {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"},
+ {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"},
+ {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"},
+ {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"},
+ {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"},
+ {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"},
+ {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"},
+ {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"},
+ {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"},
+ {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"},
+ {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"},
+ {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"},
+ {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"},
+ {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"},
+ {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"},
+ {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"},
+ {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"},
+ {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"},
+ {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"},
+ {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"},
+ {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"},
+ {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"},
+ {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"},
+ {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"},
+ {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"},
+ {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"},
+ {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"},
+ {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"},
+ {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"},
+ {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"},
+ {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"},
+ {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"},
+ {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"},
+ {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"},
+ {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"},
+ {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"},
+ {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"},
+ {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"},
+]
+
+[package.dependencies]
+huggingface-hub = ">=0.16.4,<1.0"
+
+[package.extras]
+dev = ["tokenizers[testing]"]
+docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
+testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"]
+
[[package]]
name = "tokenizers"
version = "0.21.0"
@@ -6838,13 +6894,81 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
[[package]]
name = "transformers"
-version = "4.47.0"
+version = "4.42.4"
+description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "transformers-4.42.4-py3-none-any.whl", hash = "sha256:6d59061392d0f1da312af29c962df9017ff3c0108c681a56d1bc981004d16d24"},
+ {file = "transformers-4.42.4.tar.gz", hash = "sha256:f956e25e24df851f650cb2c158b6f4352dfae9d702f04c113ed24fc36ce7ae2d"},
+]
+
+[package.dependencies]
+filelock = "*"
+huggingface-hub = ">=0.23.2,<1.0"
+numpy = ">=1.17,<2.0"
+packaging = ">=20.0"
+pyyaml = ">=5.1"
+regex = "!=2019.12.17"
+requests = "*"
+safetensors = ">=0.4.1"
+tokenizers = ">=0.19,<0.20"
+tqdm = ">=4.27"
+
+[package.extras]
+accelerate = ["accelerate (>=0.21.0)"]
+agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"]
+all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"]
+audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+benchmark = ["optimum-benchmark (>=0.2.0)"]
+codecarbon = ["codecarbon (==1.2.0)"]
+deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"]
+deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"]
+dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"]
+flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+ftfy = ["ftfy"]
+integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"]
+ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"]
+modelcreation = ["cookiecutter (==1.7.3)"]
+natten = ["natten (>=0.14.6,<0.15.0)"]
+onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"]
+onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+optuna = ["optuna"]
+quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.4.4)", "urllib3 (<2.0.0)"]
+ray = ["ray[tune] (>=2.7.0)"]
+retrieval = ["datasets (!=2.5.0)", "faiss-cpu"]
+ruff = ["ruff (==0.4.4)"]
+sagemaker = ["sagemaker (>=2.31.0)"]
+sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"]
+serving = ["fastapi", "pydantic", "starlette", "uvicorn"]
+sigopt = ["sigopt"]
+sklearn = ["scikit-learn"]
+speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.4.4)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"]
+tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"]
+tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+timm = ["timm (<=0.9.16)"]
+tokenizers = ["tokenizers (>=0.19,<0.20)"]
+torch = ["accelerate (>=0.21.0)", "torch"]
+torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"]
+torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17,<2.0)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"]
+video = ["av (==9.2.0)", "decord (==0.6.0)"]
+vision = ["Pillow (>=10.0.1,<=15.0)"]
+
+[[package]]
+name = "transformers"
+version = "4.48.1"
description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
optional = false
python-versions = ">=3.9.0"
files = [
- {file = "transformers-4.47.0-py3-none-any.whl", hash = "sha256:a8e1bafdaae69abdda3cad638fe392e37c86d2ce0ecfcae11d60abb8f949ff4d"},
- {file = "transformers-4.47.0.tar.gz", hash = "sha256:f8ead7a5a4f6937bb507e66508e5e002dc5930f7b6122a9259c37b099d0f3b19"},
+ {file = "transformers-4.48.1-py3-none-any.whl", hash = "sha256:24be0564b0a36d9e433d9a65de248f1545b6f6edce1737669605eb6a8141bbbb"},
+ {file = "transformers-4.48.1.tar.gz", hash = "sha256:7c1931facc3ee8adcbf86fc7a87461d54c1e40eca3bb57fef1ee9f3ecd32187e"},
]
[package.dependencies]
@@ -6861,16 +6985,16 @@ tqdm = ">=4.27"
[package.extras]
accelerate = ["accelerate (>=0.26.0)"]
-agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"]
-all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision"]
+agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=2.0)"]
+all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (>=2.8.1)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch (>=2.0)", "torchaudio", "torchvision"]
audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
benchmark = ["optimum-benchmark (>=0.3.0)"]
-codecarbon = ["codecarbon (==1.2.0)"]
+codecarbon = ["codecarbon (>=2.8.1)"]
deepspeed = ["accelerate (>=0.26.0)", "deepspeed (>=0.9.3)"]
-deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
-dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
-dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.21,<0.22)", "urllib3 (<2.0.0)"]
-dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-asyncio", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (>=2.8.1)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-asyncio", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch (>=2.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-asyncio", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.21,<0.22)", "urllib3 (<2.0.0)"]
+dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (>=2.8.1)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-asyncio", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch (>=2.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"]
flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
ftfy = ["ftfy"]
@@ -6891,17 +7015,17 @@ serving = ["fastapi", "pydantic", "starlette", "uvicorn"]
sigopt = ["sigopt"]
sklearn = ["scikit-learn"]
speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
-testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-asyncio", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"]
tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"]
tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
tiktoken = ["blobfile", "tiktoken"]
timm = ["timm (<=1.0.11)"]
tokenizers = ["tokenizers (>=0.21,<0.22)"]
-torch = ["accelerate (>=0.26.0)", "torch"]
+torch = ["accelerate (>=0.26.0)", "torch (>=2.0)"]
torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"]
-torchhub = ["filelock", "huggingface-hub (>=0.24.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.21,<0.22)", "torch", "tqdm (>=4.27)"]
+torchhub = ["filelock", "huggingface-hub (>=0.24.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.21,<0.22)", "torch (>=2.0)", "tqdm (>=4.27)"]
video = ["av (==9.2.0)"]
vision = ["Pillow (>=10.0.1,<=15.0)"]
@@ -6992,24 +7116,24 @@ typing-extensions = ">=3.7.4.3"
[[package]]
name = "types-openpyxl"
-version = "3.1.5.20241126"
+version = "3.1.5.20241225"
description = "Typing stubs for openpyxl"
optional = false
python-versions = ">=3.8"
files = [
- {file = "types_openpyxl-3.1.5.20241126-py3-none-any.whl", hash = "sha256:e50ad5c2dec2c92cca521abed5c039975226e8e76389f17ab0ef813595593fbe"},
- {file = "types_openpyxl-3.1.5.20241126.tar.gz", hash = "sha256:f599afab19f87aa11672ee675346401d82a0dac71988df9a5411cdb1e7477377"},
+ {file = "types_openpyxl-3.1.5.20241225-py3-none-any.whl", hash = "sha256:903d92f58f42135b0614d609868c619aee12e1c7b65ccf8472dfd2706bcc6f47"},
+ {file = "types_openpyxl-3.1.5.20241225.tar.gz", hash = "sha256:3c076f4c6f114e1859b6857ffd486e96c938c0434451c60dc54c2bcb62750d78"},
]
[[package]]
name = "types-pytz"
-version = "2024.2.0.20241003"
+version = "2024.2.0.20241221"
description = "Typing stubs for pytz"
optional = false
python-versions = ">=3.8"
files = [
- {file = "types-pytz-2024.2.0.20241003.tar.gz", hash = "sha256:575dc38f385a922a212bac00a7d6d2e16e141132a3c955078f4a4fd13ed6cb44"},
- {file = "types_pytz-2024.2.0.20241003-py3-none-any.whl", hash = "sha256:3e22df1336c0c6ad1d29163c8fda82736909eb977281cb823c57f8bae07118b7"},
+ {file = "types_pytz-2024.2.0.20241221-py3-none-any.whl", hash = "sha256:8fc03195329c43637ed4f593663df721fef919b60a969066e22606edf0b53ad5"},
+ {file = "types_pytz-2024.2.0.20241221.tar.gz", hash = "sha256:06d7cde9613e9f7504766a0554a270c369434b50e00975b3a4a0f6eed0f2c1a9"},
]
[[package]]
@@ -7039,13 +7163,13 @@ files = [
[[package]]
name = "tzdata"
-version = "2024.2"
+version = "2025.1"
description = "Provider of IANA time zone data"
optional = false
python-versions = ">=2"
files = [
- {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"},
- {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
+ {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"},
+ {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"},
]
[[package]]
@@ -7137,13 +7261,13 @@ files = [
[[package]]
name = "urllib3"
-version = "2.2.3"
+version = "2.3.0"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"},
- {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"},
+ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"},
+ {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"},
]
[package.extras]
@@ -7154,13 +7278,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "virtualenv"
-version = "20.28.0"
+version = "20.29.1"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.8"
files = [
- {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"},
- {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"},
+ {file = "virtualenv-20.29.1-py3-none-any.whl", hash = "sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779"},
+ {file = "virtualenv-20.29.1.tar.gz", hash = "sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35"},
]
[package.dependencies]
@@ -7263,87 +7387,101 @@ files = [
[[package]]
name = "wrapt"
-version = "1.17.0"
+version = "1.17.2"
description = "Module for decorators, wrappers and monkey patching."
optional = false
python-versions = ">=3.8"
files = [
- {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"},
- {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"},
- {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"},
- {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"},
- {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"},
- {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"},
- {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"},
- {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"},
- {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"},
- {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"},
- {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"},
- {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"},
- {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"},
- {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"},
- {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"},
- {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"},
- {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"},
- {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"},
- {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"},
- {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"},
- {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"},
- {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"},
- {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"},
- {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"},
- {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"},
- {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"},
- {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"},
- {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"},
- {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"},
- {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"},
- {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"},
- {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"},
- {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"},
- {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"},
- {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"},
- {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"},
- {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"},
- {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"},
- {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"},
- {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"},
- {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"},
- {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"},
- {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"},
- {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"},
- {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"},
- {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"},
- {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"},
- {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"},
- {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"},
- {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"},
- {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"},
- {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"},
- {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"},
- {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"},
- {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"},
- {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"},
- {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"},
- {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"},
- {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"},
- {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"},
- {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"},
- {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"},
- {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"},
- {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"},
- {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"},
+ {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"},
+ {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"},
+ {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"},
+ {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"},
+ {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"},
+ {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"},
+ {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"},
+ {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"},
+ {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"},
+ {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"},
+ {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"},
+ {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"},
+ {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"},
+ {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"},
+ {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"},
+ {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"},
+ {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"},
+ {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"},
+ {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"},
+ {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"},
+ {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"},
+ {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"},
+ {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"},
+ {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"},
+ {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"},
+ {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"},
+ {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"},
+ {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"},
+ {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"},
+ {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"},
+ {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"},
+ {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"},
+ {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"},
+ {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"},
+ {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"},
+ {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"},
+ {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"},
+ {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"},
+ {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"},
+ {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"},
+ {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"},
+ {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"},
+ {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"},
+ {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"},
+ {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"},
+ {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"},
+ {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"},
+ {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"},
+ {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"},
+ {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"},
+ {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"},
+ {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"},
+ {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"},
+ {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"},
+ {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"},
+ {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"},
+ {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"},
+ {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"},
+ {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"},
+ {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"},
+ {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"},
+ {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"},
+ {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"},
+ {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"},
+ {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"},
+ {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"},
+ {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"},
+ {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"},
+ {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"},
+ {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"},
+ {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"},
+ {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"},
+ {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"},
+ {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"},
+ {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"},
+ {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"},
+ {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"},
+ {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"},
+ {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"},
]
[[package]]
name = "xlsxwriter"
-version = "3.2.0"
+version = "3.2.1"
description = "A Python module for creating Excel XLSX files."
optional = false
python-versions = ">=3.6"
files = [
- {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"},
- {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"},
+ {file = "XlsxWriter-3.2.1-py3-none-any.whl", hash = "sha256:7e8f7c60b7a1660ef791d46ab5de78469cb978b991ca841af61f5832d2f9f4fe"},
+ {file = "XlsxWriter-3.2.1.tar.gz", hash = "sha256:97618759cb264fb6a93397f660cca156ffa9561743b1823dafb60dc4474e1902"},
]
[[package]]
@@ -7601,4 +7739,4 @@ tesserocr = ["tesserocr"]
[metadata]
lock-version = "2.0"
python-versions = "^3.9"
-content-hash = "c8c983158e3d50cf401b9454b07c0235368ec08a8a0d1bbd4dd4b461c14b3995"
+content-hash = "55214611820f7e98e0e5399ce9f01256a185001c7cd361039171dc8e2d983169"
diff --git a/pyproject.toml b/pyproject.toml
index a114589f..da019995 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "docling"
-version = "2.14.0" # DO NOT EDIT, updated automatically
+version = "2.15.1" # DO NOT EDIT, updated automatically
description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications."
authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "]
license = "MIT"
@@ -25,16 +25,16 @@ packages = [{include = "docling"}]
# actual dependencies:
######################
python = "^3.9"
-docling-core = { version = "^2.12.1", extras = ["chunking"] }
pydantic = "^2.0.0"
-docling-ibm-models = "^3.1.0"
+docling-core = { version = "^2.15.1", extras = ["chunking"] }
+docling-ibm-models = "^3.2.1"
deepsearch-glm = "^1.0.0"
-docling-parse = "^3.0.0"
+docling-parse = "^3.1.0"
filetype = "^1.2.0"
pypdfium2 = "^4.30.0"
pydantic-settings = "^2.3.0"
huggingface_hub = ">=0.23,<1"
-requests = "^2.32.3"
+requests = "^2.32.2"
easyocr = "^1.7"
tesserocr = { version = "^2.7.1", optional = true }
certifi = ">=2024.7.4"
diff --git a/tests/data/code_and_formula.pdf b/tests/data/code_and_formula.pdf
new file mode 100644
index 00000000..82cd8343
Binary files /dev/null and b/tests/data/code_and_formula.pdf differ
diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt b/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt
new file mode 100644
index 00000000..1f1a0db7
--- /dev/null
+++ b/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt
@@ -0,0 +1,13 @@
+
+Java Code Example
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Listing 1: Simple Java Program
+public static void print() { System.out.println( "Java Code" ); }
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Formula
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
+
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.json b/tests/data/groundtruth/docling_v1/code_and_formula.json
new file mode 100644
index 00000000..8b90e794
--- /dev/null
+++ b/tests/data/groundtruth/docling_v1/code_and_formula.json
@@ -0,0 +1 @@
+{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "code_and_formula.pdf", "filename-prov": null, "document-hash": "71dd5c52aa241a6d5275d5f681023b6bb3dee3346e171075d1247c87d49e7a82", "#-pages": 2, "collection-name": null, "description": null, "page-hashes": [{"hash": "d3280840ba2dff9749506fce3f05166336b768d2096f6b332fcbfacbc0540edf", "model": "default", "page": 1}, {"hash": "e9aac72f810d71aeb3710b13689d8c55e6eeda390fb497f09e865f1e94f74f2b", "model": "default", "page": 2}]}, "main-text": [{"prov": [{"bbox": [133.76800537109375, 653.6340942382812, 273.4540100097656, 667.99462890625], "page": 1, "span": [0, 17], "__ref_s3_data": null}], "text": "Java Code Example", "type": "subtitle-level-1", "payload": null, "name": "Section-header", "font": null}, {"prov": [{"bbox": [133.76800537109375, 501.4163513183594, 477.48065185546875, 642.8859252929688], "page": 1, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [236.17599487304688, 480.4953308105469, 375.069580078125, 490.45794677734375], "page": 1, "span": [0, 30], "__ref_s3_data": null}], "text": "Listing 1: Simple Java Program", "type": "paragraph", "payload": null, "name": "paragraph", "font": null}, {"prov": [{"bbox": [134.23899841308594, 443.9358215332031, 337.5928649902344, 474.2005310058594], "page": 1, "span": [0, 65], "__ref_s3_data": null}], "text": "public static void print() { System.out.println( \"Java Code\" ); }", "type": "paragraph", "payload": null, "name": "Code", "font": null}, {"prov": [{"bbox": [133.76800537109375, 290.80633544921875, 477.47589111328125, 432.27593994140625], "page": 1, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 86.87435150146484, 308.1142883300781, 96.83694458007812], "page": 1, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}, {"prov": [{"bbox": [133.76800537109375, 703.5241088867188, 191.51429748535156, 717.8846435546875], "page": 2, "span": [0, 7], "__ref_s3_data": null}], "text": "Formula", "type": "subtitle-level-1", "payload": null, "name": "Section-header", "font": null}, {"prov": [{"bbox": [133.76800537109375, 551.3063354492188, 477.48065185546875, 692.7759399414062], "page": 2, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 491.53033447265625, 477.4748229980469, 549.3139038085938], "page": 2, "span": [0, 369], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [280.5539855957031, 467.6203308105469, 330.69659423828125, 479.4553527832031], "page": 2, "span": [0, 12], "__ref_s3_data": null}], "text": "a 2 + 8 = 12", "type": "equation", "payload": null, "name": "Formula", "font": null}, {"prov": [{"bbox": [133.76800537109375, 318.1803283691406, 477.47589111328125, 459.64996337890625], "page": 2, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 246.44935607910156, 477.4748229980469, 316.1879577636719], "page": 2, "span": [0, 415], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 174.71835327148438, 477.4748229980469, 244.4569549560547], "page": 2, "span": [0, 415], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 136.7633514404297, 308.1142883300781, 146.7259521484375], "page": 2, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}], "figures": [], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 841.8900146484375, "page": 2, "width": 595.2760009765625}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null}
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.md b/tests/data/groundtruth/docling_v1/code_and_formula.md
new file mode 100644
index 00000000..4d77dc5c
--- /dev/null
+++ b/tests/data/groundtruth/docling_v1/code_and_formula.md
@@ -0,0 +1,19 @@
+## Java Code Example
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Listing 1: Simple Java Program
+
+public static void print() { System.out.println( "Java Code" ); }
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+## Formula
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.pages.json b/tests/data/groundtruth/docling_v1/code_and_formula.pages.json
new file mode 100644
index 00000000..27682fdd
--- /dev/null
+++ b/tests/data/groundtruth/docling_v1/code_and_formula.pages.json
@@ -0,0 +1 @@
+[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}], "headers": [{"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 595.2760009765625, "height": 841.8900146484375}, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}], "headers": [{"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}]
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt b/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt
new file mode 100644
index 00000000..ad417540
--- /dev/null
+++ b/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt
@@ -0,0 +1,14 @@
+
+Java Code Example
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Listing 1: Simple Java Program
+public static void print() { System.out.println( "Java Code" ); }
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Formula
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.
+a 2 + 8 = 12
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
+
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.json b/tests/data/groundtruth/docling_v2/code_and_formula.json
new file mode 100644
index 00000000..adcc14d1
--- /dev/null
+++ b/tests/data/groundtruth/docling_v2/code_and_formula.json
@@ -0,0 +1 @@
+{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "code_and_formula", "origin": {"mimetype": "application/pdf", "binary_hash": 2394749058180317456, "filename": "code_and_formula.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/texts/7"}, {"cref": "#/texts/8"}, {"cref": "#/texts/9"}, {"cref": "#/texts/10"}, {"cref": "#/texts/11"}, {"cref": "#/texts/12"}, {"cref": "#/texts/13"}], "name": "_root_", "label": "unspecified"}, "groups": [], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 667.99462890625, "r": 273.4540100097656, "b": 653.6340942382812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "Java Code Example", "text": "Java Code Example", "level": 1}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 642.8859252929688, "r": 477.48065185546875, "b": 501.4163513183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 1, "bbox": {"l": 236.17599487304688, "t": 490.45794677734375, "r": 375.069580078125, "b": 480.4953308105469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Listing 1: Simple Java Program", "text": "Listing 1: Simple Java Program"}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 1, "bbox": {"l": 134.23899841308594, "t": 474.2005310058594, "r": 337.5928649902344, "b": 443.9358215332031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "public static void print() { System.out.println( \"Java Code\" ); }", "text": "public static void print() { System.out.println( \"Java Code\" ); }", "code_language": "unknown"}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 432.27593994140625, "r": 477.47589111328125, "b": 290.80633544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 1, "bbox": {"l": 303.13299560546875, "t": 96.83694458007812, "r": 308.1142883300781, "b": 86.87435150146484, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 717.8846435546875, "r": 191.51429748535156, "b": 703.5241088867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Formula", "text": "Formula", "level": 1}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 692.7759399414062, "r": 477.48065185546875, "b": 551.3063354492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 549.3139038085938, "r": 477.4748229980469, "b": 491.53033447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 369]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"self_ref": "#/texts/9", "parent": {"cref": "#/body"}, "children": [], "label": "formula", "prov": [{"page_no": 2, "bbox": {"l": 280.5539855957031, "t": 479.4553527832031, "r": 330.69659423828125, "b": 467.6203308105469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "a 2 + 8 = 12", "text": "a 2 + 8 = 12"}, {"self_ref": "#/texts/10", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 459.64996337890625, "r": 477.47589111328125, "b": 318.1803283691406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/11", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 316.1879577636719, "r": 477.4748229980469, "b": 246.44935607910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 415]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"self_ref": "#/texts/12", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 244.4569549560547, "r": 477.4748229980469, "b": 174.71835327148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 415]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"self_ref": "#/texts/13", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 2, "bbox": {"l": 303.13299560546875, "t": 146.7259521484375, "r": 308.1142883300781, "b": 136.7633514404297, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}], "pictures": [], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 595.2760009765625, "height": 841.8900146484375}, "image": null, "page_no": 2}}}
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.md b/tests/data/groundtruth/docling_v2/code_and_formula.md
new file mode 100644
index 00000000..2e2636a3
--- /dev/null
+++ b/tests/data/groundtruth/docling_v2/code_and_formula.md
@@ -0,0 +1,25 @@
+## Java Code Example
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Listing 1: Simple Java Program
+
+```
+public static void print() { System.out.println( "Java Code" ); }
+```
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+## Formula
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.
+
+a 2 + 8 = 12
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
+
+Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
\ No newline at end of file
diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.pages.json b/tests/data/groundtruth/docling_v2/code_and_formula.pages.json
new file mode 100644
index 00000000..27682fdd
--- /dev/null
+++ b/tests/data/groundtruth/docling_v2/code_and_formula.pages.json
@@ -0,0 +1 @@
+[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}], "headers": [{"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 595.2760009765625, "height": 841.8900146484375}, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}], "headers": [{"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}]
\ No newline at end of file
diff --git a/tests/test_code_formula.py b/tests/test_code_formula.py
new file mode 100644
index 00000000..05e87246
--- /dev/null
+++ b/tests/test_code_formula.py
@@ -0,0 +1,66 @@
+from pathlib import Path
+
+from docling_core.types.doc import CodeItem, TextItem
+from docling_core.types.doc.labels import CodeLanguageLabel, DocItemLabel
+
+from docling.backend.docling_parse_backend import DoclingParseDocumentBackend
+from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend
+from docling.datamodel.base_models import InputFormat
+from docling.datamodel.document import ConversionResult
+from docling.datamodel.pipeline_options import PdfPipelineOptions
+from docling.document_converter import DocumentConverter, PdfFormatOption
+from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline
+
+
+def get_converter():
+
+ pipeline_options = PdfPipelineOptions()
+ pipeline_options.generate_page_images = True
+
+ pipeline_options.do_ocr = False
+ pipeline_options.do_table_structure = False
+ pipeline_options.do_code_enrichment = True
+ pipeline_options.do_formula_enrichment = True
+
+ converter = DocumentConverter(
+ format_options={
+ InputFormat.PDF: PdfFormatOption(
+ backend=DoclingParseV2DocumentBackend,
+ pipeline_cls=StandardPdfPipeline,
+ pipeline_options=pipeline_options,
+ )
+ }
+ )
+
+ return converter
+
+
+def test_code_and_formula_conversion():
+ pdf_path = Path("tests/data/code_and_formula.pdf")
+ converter = get_converter()
+
+ print(f"converting {pdf_path}")
+
+ doc_result: ConversionResult = converter.convert(pdf_path)
+
+ results = doc_result.document.texts
+
+ code_blocks = [el for el in results if isinstance(el, CodeItem)]
+ assert len(code_blocks) == 1
+
+ gt = 'public static void print() {\n System.out.println("Java Code");\n}'
+
+ predicted = code_blocks[0].text.strip()
+ assert predicted == gt, f"mismatch in text {predicted=}, {gt=}"
+ assert code_blocks[0].code_language == CodeLanguageLabel.JAVA
+
+ formula_blocks = [
+ el
+ for el in results
+ if isinstance(el, TextItem) and el.label == DocItemLabel.FORMULA
+ ]
+ assert len(formula_blocks) == 1
+
+ gt = "a ^ { 2 } + 8 = 1 2"
+ predicted = formula_blocks[0].text
+ assert predicted == gt, f"mismatch in text {predicted=}, {gt=}"
diff --git a/tests/test_e2e_ocr_conversion.py b/tests/test_e2e_ocr_conversion.py
index 73a943af..b3cdd312 100644
--- a/tests/test_e2e_ocr_conversion.py
+++ b/tests/test_e2e_ocr_conversion.py
@@ -60,6 +60,7 @@ def test_e2e_conversions():
RapidOcrOptions(),
EasyOcrOptions(force_full_page_ocr=True),
TesseractOcrOptions(force_full_page_ocr=True),
+ TesseractOcrOptions(force_full_page_ocr=True, lang=["auto"]),
TesseractCliOcrOptions(force_full_page_ocr=True),
RapidOcrOptions(force_full_page_ocr=True),
]
@@ -70,7 +71,9 @@ def test_e2e_conversions():
engines.append(OcrMacOptions(force_full_page_ocr=True))
for ocr_options in engines:
- print(f"Converting with ocr_engine: {ocr_options.kind}")
+ print(
+ f"Converting with ocr_engine: {ocr_options.kind}, language: {ocr_options.lang}"
+ )
converter = get_converter(ocr_options=ocr_options)
for pdf_path in pdf_paths:
print(f"converting {pdf_path}")