docvortex 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {docvortex-0.5.0 → docvortex-0.5.1}/PKG-INFO +1 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/rust-acceleration.md +31 -8
- docvortex-0.5.1/docs/rust-pdf-round7.md +67 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/lib.rs +1 -1
- docvortex-0.5.1/rust/docvortex-python/src/dedup.rs +256 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/geometry.rs +107 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/lib.rs +4 -0
- docvortex-0.5.1/rust/docvortex-python/src/scripts.rs +166 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/_compute_backend.py +1 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/image.py +21 -8
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +6 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/char_geometry.py +148 -16
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/detection.py +88 -4
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/matching.py +40 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/materialize.py +7 -2
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/scripts.py +309 -38
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/line_merging.py +117 -25
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_annotations.py +108 -20
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_rules.py +146 -3
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_text_styles.py +3 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +122 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +24 -9
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/dedup.py +22 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/extract.py +38 -13
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/geometry.py +10 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/version.py +1 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/PKG-INFO +1 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/SOURCES.txt +4 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/compare_native_corpus.py +4 -5
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/compare_pdf_revisions.py +40 -12
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/flash_pdf.py +4 -4
- docvortex-0.5.1/tests/benchmarks/pdf_corpus.py +52 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/rust_pdf.py +13 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_benchmark_entrypoint.py +32 -0
- docvortex-0.5.1/tests/test_converter_lifecycle.py +140 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_native_parity.py +5 -1
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_native_round3.py +1 -0
- docvortex-0.5.1/tests/test_native_round6.py +239 -0
- docvortex-0.5.1/tests/test_native_round7.py +369 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_image_mtef.py +85 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_image_mtef.py +18 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/verify_native_abi.py +15 -1
- docvortex-0.5.0/rust/docvortex-python/src/dedup.rs +0 -68
- docvortex-0.5.0/rust/docvortex-python/src/scripts.rs +0 -67
- docvortex-0.5.0/tests/test_converter_lifecycle.py +0 -64
- {docvortex-0.5.0 → docvortex-0.5.1}/Cargo.lock +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/Cargo.toml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/LICENSE.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/MANIFEST.in +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/README.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/README.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/demo.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ebook/epub_01.epub +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ebook/epub_02.epub +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/README.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/docx_01.doc +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/docx_01.docx +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/pptx_01.ppt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/pptx_01.pptx +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/rtf_01.rtf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/xlsx_01.xls +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ms_office_docs/xlsx_01.xlsx +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/ofd/ofd_01.ofd +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/open_office_docs/docx_01.odt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/open_office_docs/pptx_01.odp +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/open_office_docs/xlsx_01.ods +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/caibao1.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/demo1.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/demo2.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/demo3.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/demo4.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/demo6.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs/small_ocr.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/web_docs/html_01.html +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/demo/web_docs/mhtml_01.mhtml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/ARCHITECTURE.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/HTML_PROTOCOL.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/JSON_PROTOCOL.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/METADATA.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/PDF_FONTS.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/RENDER_OWNERSHIP.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/USAGE.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-manual-annotations-2026-09-15.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-round2-annotations-2026-09-15.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-rule-generalization-2026-09-15.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/flash-title-coverage-2026-09-16.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/docs/sdk-0.4.md +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/pyproject.toml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/Cargo.toml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/annotation_geometry.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/columns.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/dedup.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/extraction.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/geometry.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/inline_pairs.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/note_index.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/row_geometry.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/scripts.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/spatial.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/statistics.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/src/tables.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-core/tests/contracts.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/Cargo.toml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/conversion.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/pdfium.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/spatial.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/statistics.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust/docvortex-python/src/tables.rs +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/rust-toolchain.toml +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/schemas/middle-2.0.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/schemas/model-2.0.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/setup.cfg +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/setup.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/image.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/names.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/csv.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/package.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/properties.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/anchors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/document.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/selector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/package.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/path.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/image.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/limits.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/opc.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/streams.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_interval_candidates.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_native_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_ordered_statistics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/analyzers/pdf.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/assets/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/assets/images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/assets/store.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/cli.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/html/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/html/contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/html/materializer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/html/parser.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/html/resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/codecs/json.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/links.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/markup/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/markup/anchors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/markup/formula.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/markup/projector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/markup/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/mathml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/normalization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/spans.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/content.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/document.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/html.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/rules.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/table/structure.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/content/tree.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/detection.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/filetypes.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/mhtml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/page_range.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/_document.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/classify.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/constants.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/font_runtime.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_coordinates.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_objects.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/pdfium.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/raster.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/_contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/_pdfium_bridge.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/text/groups.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/pdf/visuals.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/properties.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/document/source.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/errors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/export/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/export/_images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/export/bundle.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/export/files.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/export/middle.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_coordinates.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_hyperlink.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_image.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_image_operations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_image_payload.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_svg_raster.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/image_encoding.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/language.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/magika.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/type_identity.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/foundation/xml_names.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/options.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/content.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/document.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/lists.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/page_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/pages.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/paragraphs.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/postprocess/visual.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/public_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/context.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/html_table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/index.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/list_items.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/common/planner.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/math.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/package.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/html/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/html/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/html/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/html/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/formula.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/inline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/original.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/contracts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/docx.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/epub.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/fragments.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/html.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/latex.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/markdown.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/pdf.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/render/structured_content.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/epub/docvortex.css +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/fonts/NOTICE +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/fonts/manifest.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/html/docvortex.css +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/html/docvortex.min.css +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/result.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/schema.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex/visualization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/dependency_links.txt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/entry_points.txt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/not-zip-safe +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/requires.txt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/src/docvortex.egg-info/top_level.txt +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/native_pdf_table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/pdf_memory.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/pdf_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/benchmarks/pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_layout_block_expectations.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_manual_annotations.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_manual_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_reviewed_history.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_round2_annotations.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_round2_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_round3_annotations.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_round3_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/pdf_char_dedup.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/pdf_numeric_citations_review.json +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/fixtures/rtf/semantic.rtf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_architecture.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_brand_protocol.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_cli_logging.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_complete_pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_compute_backend.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_document_envelope.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_document_metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_export_image_names.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_format_matrix.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_geometry_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_history_geometry_tools.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_html_namespace.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_magika_runtime.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_mixed_font_script_reference.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_native_round4.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_native_round5.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_native_statistics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_analysis_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_cpu_evidence.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_font_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_font_runtime.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_model_text_normalization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_numeric_citations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_output_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_render_pool.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_source_row_merging.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdf_symbol_normalization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_pdfium_bridge.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_public_export_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_public_image_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_public_pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_refactor_raster.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_refactor_rendering.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_refactor_resources.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_release_ci_gate.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_render_ownership.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_renderer_branding.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_shared_boundaries.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_system_font_pdf_pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/test_validated_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_epub_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_flash_pdf_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_image_mtef_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_legacy_doc_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_legacy_xls_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_metafile_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_mhtml_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_mtef_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_mtef_v5_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_native_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_odf_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_ofd_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/_span_test_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/pdfs/test.pdf +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_backend_architecture.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_backend_block_object_regressions.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_assets.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_complex_fields.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_math.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_special_char_tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_table_context.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_docx_table_metafiles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_emfplus_integration.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_epub_backlinks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_epub_quoted_note_types.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_epub_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_csv.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_docx_equationxml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_epub.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_html.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_doc.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_ppt.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_xls.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_manual_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_markup_anchors.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_mhtml.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_model.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_mtef_v5.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_odf.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_ofd.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_metafile.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_office_title_types.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_extractor.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_formulas.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_graphics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_native_text.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_samples.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_scripts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_semantics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_titles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_round2_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_round3_annotations.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_rtf.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_rule_generalization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_shared_helpers.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_spatial_evidence.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_guess_suffix_ole2.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_html_css_build.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_html_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_html_security.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_latex_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_markdown_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_middle_json_block_models.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_middle_json_export.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_middle_json_validator.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_model_json.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_ofd_assembly.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_ofd_vector_tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_office_demo_exports.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_office_demo_pages.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_office_parser_regressions.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_objects.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_style.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_classify.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_demo_links.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_document.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_formula_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_object_clipping.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_original_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_pagination.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_structured_tables.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_table_cache.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_table_round2.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_text_dedup.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_text_styles.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_title_font_plan.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_title_space.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_pdf_visualization.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_postprocess_page_blocks.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_postprocess_pages.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_postprocess_paragraphs.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_postprocess_visual.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_render_api.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_render_html_table.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_render_image_renderer.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_render_list_index_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_structured_content_render.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_svg_raster.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_table_merge.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_table_merge_cell_merge.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_text_block_anchor.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_text_boundary_rules.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tests/unittest/test_text_utils.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/__init__.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/build_html_css.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/calibrate_pdf_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/capture_baseline.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/capture_platform_layout.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/compare_font_platforms.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/font_geometry.py +0 -0
- {docvortex-0.5.0 → docvortex-0.5.1}/tools/verify_native_wheel.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Optional Rust PDF kernels
|
|
2
2
|
|
|
3
3
|
See [Repository architecture](ARCHITECTURE.md) for the Python/Rust ownership boundary
|
|
4
|
-
and binding-module layout. The current private extension protocol is **
|
|
5
|
-
the Python loader and Rust core. Protocol 4 and
|
|
4
|
+
and binding-module layout. The current private extension protocol is **8**, shared by
|
|
5
|
+
the Python loader and Rust core. Protocol 4, 5, 6 and 7 references below describe historical
|
|
6
6
|
interfaces or rollout stages, not the current loader requirement. Rebuild editable
|
|
7
7
|
native installs and restart existing processes after updating native sources.
|
|
8
8
|
|
|
@@ -34,8 +34,9 @@ use an incremental accumulator matching the running CPython version's float-only
|
|
|
34
34
|
inputs, other runtimes and intermediate overflow retain Python computation. Rust owns
|
|
35
35
|
numeric batches and returns source ranges or indices. Canonical geometry reuses
|
|
36
36
|
unchanged Python float objects and zero-rotation tuples to bound retained memory. Original `Char` references and
|
|
37
|
-
copy-on-merge source-index behavior are retained.
|
|
38
|
-
immutable Unicode features
|
|
37
|
+
copy-on-merge source-index behavior are retained. Process-wide caches contain only
|
|
38
|
+
immutable Unicode features. Geometry, font and table preparation caches retain input
|
|
39
|
+
references only for the active analysis or candidate build, and never retain native handles.
|
|
39
40
|
|
|
40
41
|
## Kernels
|
|
41
42
|
|
|
@@ -103,6 +104,10 @@ real parsing, both on Python 3.10 and 3.14. The regular CI matrix exercises Pyth
|
|
|
103
104
|
Rust backends on Python 3.10–3.14. The release workflow retains the main-CI/tag gate,
|
|
104
105
|
then builds/tests every artifact before publishing all platform wheels, the pure wheel
|
|
105
106
|
and the source distribution. A local build is not evidence that remote matrix jobs passed.
|
|
107
|
+
Performance comparisons run locally. CI retains cross-platform builds, ABI checks,
|
|
108
|
+
installed-wheel parsing and Python/Rust correctness tests, without full-corpus timing
|
|
109
|
+
or benchmark artifact uploads. Workflow-only changes do not require another local
|
|
110
|
+
performance run when production source and extension fingerprints are unchanged.
|
|
106
111
|
|
|
107
112
|
On Intel macOS, the existing Magika/ONNX Runtime dependency stack currently prevents
|
|
108
113
|
full application installation on Python 3.14. That wheel is tested with full parsing
|
|
@@ -127,8 +132,11 @@ python tests/benchmarks/rust_pdf.py --backend python --suite shared --flash-base
|
|
|
127
132
|
python tests/benchmarks/rust_pdf.py --backend rust --suite shared --flash-baseline output/rust/reference --output output/rust/shared-rust --baseline output/rust/shared-python
|
|
128
133
|
```
|
|
129
134
|
|
|
130
|
-
The public/shared benchmark defaults to
|
|
131
|
-
|
|
135
|
+
The public/shared benchmark defaults to `--corpus all`: the layout manifest, recursively
|
|
136
|
+
discovered `demo/pdfs` PDFs and native table fixtures, deduplicated by resolved path.
|
|
137
|
+
Use `--corpus demo` for all demo PDFs, or repeatable `--path` arguments for explicit
|
|
138
|
+
inputs. The revision comparison also accepts `--extra-path` for local external samples.
|
|
139
|
+
Shared benchmarking consumes frozen baseline table
|
|
132
140
|
regions, so a different candidate set cannot masquerade as acceleration. Timings include
|
|
133
141
|
conversion into Rust and Python result construction. First invocation is separate from
|
|
134
142
|
five warmed runs. Output comparison and memory sampling are outside timing. Public
|
|
@@ -137,8 +145,8 @@ an export. Shared timings separate extraction, reuse, evidence and table recover
|
|
|
137
145
|
they do not include model inference or represent MinerU end-to-end latency.
|
|
138
146
|
|
|
139
147
|
Acceptance requires unchanged full outputs, related historical/manual tests, host API
|
|
140
|
-
and primitive-reuse tests, and installed-wheel verification.
|
|
141
|
-
|
|
148
|
+
and primitive-reuse tests, and installed-wheel verification. Freeze the timing targets
|
|
149
|
+
and aggregation method for each optimization round before measurement. Investigate sustained regressions
|
|
142
150
|
above 5% in time or RSS. Never refresh a gold file or remove fields to achieve parity;
|
|
143
151
|
record any remaining performance gap explicitly.
|
|
144
152
|
|
|
@@ -197,6 +205,21 @@ assert native state is actually used, not merely that an extension can be import
|
|
|
197
205
|
|
|
198
206
|
The experimental native mapping pre-grouping kernel remains disabled in production:
|
|
199
207
|
whole-entry measurements showed its packing cost exceeded its calculation benefit.
|
|
208
|
+
|
|
209
|
+
Sixth-round inline geometry uses private protocol 7. Ordinary script classification
|
|
210
|
+
batches contain at most 64 independent lines or 8,192 characters; a longer individual
|
|
211
|
+
line is processed alone without splitting its classification scope. Formula segments,
|
|
212
|
+
citation protection, first-match ties and final Python token materialization remain.
|
|
213
|
+
Fraction filtering uses directional character indices and each cell's own character
|
|
214
|
+
set and median height. Post-semantic line candidates preserve both same-baseline and
|
|
215
|
+
edge-alignment paths before the original business predicate runs.
|
|
216
|
+
|
|
217
|
+
Rule-band reuse requires identical, ordered, contiguous row references and strictly
|
|
218
|
+
ordered finite rules. Repeated rules and unsupported inputs retain the reference path.
|
|
219
|
+
At most 16 corridor band indices and 8,192 prepared marker lines / 16,384 glyphs are
|
|
220
|
+
retained within one candidate build. Eviction recomputes evidence. Candidate enumeration,
|
|
221
|
+
scoring, boundary double ownership, first-source choices and final conflict resolution
|
|
222
|
+
remain unchanged.
|
|
200
223
|
It is retained for differential coverage. No additional environment switch is exposed.
|
|
201
224
|
|
|
202
225
|
For four-way revision acceptance, freeze the old checkout with its matching binary and
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 第七轮 Flash PDF 热点优化
|
|
2
|
+
|
|
3
|
+
冻结第六轮 `843b599` 及协议 7 二进制,最终性能源码 `aa02418`、协议 8。继续 `codex/rust-pdf-round6` 和 draft PR #14,不合并、不发布。
|
|
4
|
+
|
|
5
|
+
17 份 demo/136 页公开解析 Rust 中位数之和:**16.378407 → 15.115506 秒,降低 7.71%**。10% 目标未达到。
|
|
6
|
+
达到目标还需减少 0.374940 秒,差 2.29 个百分点。输出等价与 5% 退化门槛未降低。
|
|
7
|
+
共享文本总和 3.270722 → 3.256694 秒,降低 0.43%;本轮不另设共享降幅目标。
|
|
8
|
+
|
|
9
|
+
## 阶段实现
|
|
10
|
+
|
|
11
|
+
| 阶段 | 提交 | 最终实现 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| P0 | 1fb7305 | 独立目录冻结 32 PDF/299 页、186 个区域、文件与源码/扩展 SHA256、依赖。默认 all 仍自动发现新 demo。 |
|
|
14
|
+
| P1 | 53df6cc | 每个标题阶段局部复用行高和栏 profile;保留排序副作用,语义变化失效,特殊对象参考路径。 |
|
|
15
|
+
| P2 | fdd78f3 | 单行 source_rows_plain 源框选择/裁剪/旋转;单行 4096 项有界字体身份强引用缓存,Unicode/字体字段转换保留 Python 语义;协议 8。 |
|
|
16
|
+
| P3 | 23af3c8 / 8546348 / aa02418 | 借用现有字符列表的映射保护/Glyph 几何融合、行内字体准备复用、256 块/8192 字有界文本投影;保留混合保护组和空页异常回调。 |
|
|
17
|
+
|
|
18
|
+
中文论文2 的栏 profile 实算 5310 → 450;caibao1 为 603 → 114。逐样本准备次数、阶段输出、单次 pilot RSS 与映射微测见独立目录。Profiler 和早期 pilot 不是正式收益;生成器恢复次数不能解释为行打包次数。
|
|
19
|
+
|
|
20
|
+
## 全部 demo 正式性能
|
|
21
|
+
|
|
22
|
+
秒数为首次正式五次中位数(第六轮 → 第七轮);RSS 为 Rust 跨版本具体指标裁决值。首次越过 5% 的耗时项另经反序复测,最终裁决列在报告中;不能只凭表中首次值判断持续退化。
|
|
23
|
+
|
|
24
|
+
| PDF | 公开解析秒 | 提取秒 | text_total 秒 | table_total 秒 | public/shared RSS 变化 |
|
|
25
|
+
|---|---:|---:|---:|---:|---:|
|
|
26
|
+
| 2407.00079v4_origi-10.pdf | 0.092811 → 0.086420 | 0.018243 → 0.016836 | 0.023782 → 0.024553 | 0.000000 → 0.000000 | +0.14%/-0.14% |
|
|
27
|
+
| IEBM_A_2667169_O-5.pdf | 0.170843 → 0.171224 | 0.017242 → 0.016133 | 0.028067 → 0.028045 | 0.000000 → 0.000000 | +0.11%/-0.07% |
|
|
28
|
+
| caibao1.pdf | 2.452101 → 2.373419 | 0.325596 → 0.328070 | 0.570571 → 0.585651 | 0.449374 → 0.430277 | +0.27%/+0.36% |
|
|
29
|
+
| demo1.pdf | 1.355296 → 1.207944 | 0.230689 → 0.201440 | 0.281070 → 0.277586 | 0.044858 → 0.047622 | +0.20%/+0.03% |
|
|
30
|
+
| demo2.pdf | 0.958604 → 0.862577 | 0.129966 → 0.118818 | 0.181621 → 0.175139 | 0.011604 → 0.011935 | -0.16%/+0.39% |
|
|
31
|
+
| demo3.pdf | 1.575423 → 1.427142 | 0.212203 → 0.192276 | 0.306598 → 0.300250 | 0.052482 → 0.049723 | +0.38%/-0.65% |
|
|
32
|
+
| demo4.pdf | 1.670767 → 1.512883 | 0.258111 → 0.227539 | 0.352949 → 0.356910 | 0.006059 → 0.005732 | +0.19%/+0.30% |
|
|
33
|
+
| demo6.pdf | 0.162215 → 0.148709 | 0.028103 → 0.027702 | 0.037096 → 0.041032 | 0.000000 → 0.000000 | -0.06%/+0.05% |
|
|
34
|
+
| mixed_elements_pages_03_06.pdf | 0.448107 → 0.368632 | 0.066917 → 0.054733 | 0.087373 → 0.080706 | 0.004059 → 0.003694 | -0.19%/+0.44% |
|
|
35
|
+
| mixed_elements_pages_07_10.pdf | 0.604619 → 0.550340 | 0.096087 → 0.096707 | 0.138526 → 0.137021 | 0.009868 → 0.008148 | -0.19%/+0.13% |
|
|
36
|
+
| mixed_elements_pages_11_15.pdf | 0.769893 → 0.711560 | 0.115946 → 0.109838 | 0.163836 → 0.163087 | 0.007440 → 0.007065 | -0.09%/-0.46% |
|
|
37
|
+
| mixed_elements_pages_39_40.pdf | 0.180964 → 0.157967 | 0.033202 → 0.030396 | 0.045920 → 0.040888 | 0.000000 → 0.000000 | -0.19%/+0.40% |
|
|
38
|
+
| 中文论文.pdf | 1.087292 → 1.018619 | 0.137678 → 0.120614 | 0.221531 → 0.217378 | 0.011400 → 0.011064 | -0.05%/+0.32% |
|
|
39
|
+
| 中文论文2.pdf | 3.476057 → 3.181534 | 0.362182 → 0.396619 | 0.671063 → 0.668371 | 0.016258 → 0.015684 | -0.12%/+0.40% |
|
|
40
|
+
| small_ocr.pdf | 0.566205 → 0.585576 | 0.000593 → 0.000533 | 0.001538 → 0.001431 | 0.000000 → 0.000000 | -0.56%/-0.04% |
|
|
41
|
+
| 中文论文3.pdf | 0.309775 → 0.286793 | 0.037955 → 0.035428 | 0.061237 → 0.060736 | 0.000000 → 0.000000 | +0.14%/+0.23% |
|
|
42
|
+
| 中文论文4.pdf | 0.497434 → 0.464168 | 0.048115 → 0.044714 | 0.097942 → 0.097910 | 0.020723 → 0.020392 | -0.09%/-0.06% |
|
|
43
|
+
|
|
44
|
+
正式比较仅在本机 Apple M4/16 GB、指定 `.venv4` 上进行。基线/候选 × Python/Rust 独立进程、一次预热、五次正式测量、交替顺序;RSS 独立采样。只对越过 5% 的具体指标反序复测,零基线新增工作量单列。最终源码的 profiler、测试与构建均未与计时并行。
|
|
45
|
+
|
|
46
|
+
32 份文档全部三组门槛(Rust 跨版本、Python 跨版本、当前双后端)通过,无持续 >5% 的耗时/RSS 退化。反序清单和全部原始值见 performance-gates.json。
|
|
47
|
+
|
|
48
|
+
## 等价性与验证
|
|
49
|
+
|
|
50
|
+
- 四组完整 32 PDF/299 页 ModelJson、MiddleJson、文本证据、来源、HTML、Markdown、诊断及素材摘要一致;186 个表格区域一致,不刷新历史金标。
|
|
51
|
+
- 515343 原始字符对照纯 Python 读取/几何参考一致;覆盖旋转、汉字映射、连字、重复来源、正负零及异常回调。
|
|
52
|
+
- 全部 demo 加密集样本 137 页标框像素及导出一致;人工检查 18 文档的 22 个代表页,包含公式、上下标、长表注与旋转表格。既有作者拆分和部分副标题/表下注释分类保持一致。
|
|
53
|
+
- 最终全量 Python 4469 passed/469 skipped;Rust 4937 passed/1 skipped;workspace test、clippy 与 fmt 通过。
|
|
54
|
+
- MinerU 核心接口各 119 passed;18 文档 × medium/high 固定输入共 36 组回放,四组一致。补充 CPU 复用/文本样式各 16 项通过。另有 6 项稀疏渲染调度失败在冻结第六轮同样复现,单列为既有宿主局限。
|
|
55
|
+
- 原生/纯 Python wheel、sdist 和实际安装通过;pypdfium2 5.10.1/5.13.0、协议 8 ABI、密集解析与 CLI 检查通过。性能快照扩展未被 wheel 重编译覆盖。
|
|
56
|
+
- aa02418 的主 CI 39 作业、Native wheels 7 作业全部通过。Python 3.10–3.14、Linux x86_64/aarch64、macOS ARM/Intel、Windows 正确性/构建/兼容矩阵保留;未恢复全平台性能对比。
|
|
57
|
+
- Intel macOS 3.14 仍有 magika/onnxruntime 应用依赖限制,完整依赖 smoke 使用 3.13,3.14 单独检查 ABI。
|
|
58
|
+
|
|
59
|
+
## 剩余热点与证据
|
|
60
|
+
|
|
61
|
+
当前热点为 PDFium 对象裁剪/矩阵/RGBA、源框 Python 记录准备、行构建、上下标分类打包和字体枚举;字体身份常不同,有界缓存收益有限。49.- 仍完整执行 7217 次候选展开和 7381 次区间检查,没有减少候选。
|
|
62
|
+
|
|
63
|
+
首次完整候选 8546348 降低 6.31%,但共享入口存在持续退化,已拒绝;pre-fix-public/pre-fix-shared 保留原始结果。混合字符组和空页准备修复后重跑最终完整比较。逐字段 Python 单遍映射变慢和逐行略去无样式几何遗漏邻行证据的尝试均撤销并保留回归测试。
|
|
64
|
+
|
|
65
|
+
独立本机证据:`output/pdf/rust-round7-20260926/REPORT.md`、`HOTSPOTS.md`、`stage-calls.json`、`performance-gates.json`、完整 accepted-public/accepted-shared 及 visual/review.json。第五/六轮产物和 tmp/ 保留。
|
|
66
|
+
|
|
67
|
+
最终源码 SHA256:`dc8d902972b309e11881778598fd12edfb5f312cef38e9c7580432eea3e23f80`;性能扩展 SHA256:`799152ec326e20412a433ea41322e922701236c85ed907d59850a095c7ccc1ac`。后续文档提交不改变生产源码和二进制;正式记录的测量提交字段保持原样。
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
//! 重复绘制、隐藏文字候选与映射分组的批量绑定。
|
|
2
|
+
|
|
3
|
+
use docvortex_core::dedup;
|
|
4
|
+
use pyo3::prelude::*;
|
|
5
|
+
use pyo3::types::{PyBool, PyDict, PyFloat, PyInt, PyList, PyString, PyTuple, PyType};
|
|
6
|
+
use std::collections::{HashMap, HashSet};
|
|
7
|
+
|
|
8
|
+
/// 普通整数使用有界读取,超大或自定义整数由 Python 参考实现处理。
|
|
9
|
+
fn plain_integer(value: &Bound<'_, PyAny>) -> Option<i64> {
|
|
10
|
+
value
|
|
11
|
+
.is_exact_instance_of::<PyInt>()
|
|
12
|
+
.then(|| value.extract::<i64>().ok())
|
|
13
|
+
.flatten()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/// 直接借用现有字符列表,一次准备映射保护区间与 Glyph 行框,不重新打包旧分组内核。
|
|
17
|
+
#[pyfunction]
|
|
18
|
+
pub(super) fn mapping_glyph_rows<'py>(
|
|
19
|
+
py: Python<'py>,
|
|
20
|
+
chars: &Bound<'py, PyList>,
|
|
21
|
+
bbox_type: &Bound<'py, PyType>,
|
|
22
|
+
) -> PyResult<Option<Vec<(usize, usize, Option<Bound<'py, PyTuple>>, f64)>>> {
|
|
23
|
+
let mut fonts = HashSet::new();
|
|
24
|
+
let mut text_flags = HashMap::new();
|
|
25
|
+
let mut output: Vec<(usize, usize, Option<Bound<'py, PyTuple>>, f64)> = Vec::new();
|
|
26
|
+
let mut previous: Option<(
|
|
27
|
+
Bound<'py, PyAny>,
|
|
28
|
+
i64,
|
|
29
|
+
Bound<'py, PyDict>,
|
|
30
|
+
f64,
|
|
31
|
+
Option<[f64; 2]>,
|
|
32
|
+
[f64; 4],
|
|
33
|
+
bool,
|
|
34
|
+
)> = None;
|
|
35
|
+
for (position, item) in chars.iter().enumerate() {
|
|
36
|
+
if !item.is_exact_instance_of::<PyDict>() {
|
|
37
|
+
return Ok(None);
|
|
38
|
+
}
|
|
39
|
+
let char = item.cast::<PyDict>()?;
|
|
40
|
+
if char
|
|
41
|
+
.iter()
|
|
42
|
+
.any(|(key, _value)| !key.is_exact_instance_of::<PyString>())
|
|
43
|
+
{
|
|
44
|
+
return Ok(None);
|
|
45
|
+
}
|
|
46
|
+
let (Some(text), Some(index), Some(font), Some(raw), Some(rotation)) = (
|
|
47
|
+
char.get_item(pyo3::intern!(py, "char"))?,
|
|
48
|
+
char.get_item(pyo3::intern!(py, "char_idx"))?,
|
|
49
|
+
char.get_item(pyo3::intern!(py, "font"))?,
|
|
50
|
+
char.get_item(pyo3::intern!(py, "bbox"))?,
|
|
51
|
+
char.get_item(pyo3::intern!(py, "rotation"))?,
|
|
52
|
+
) else {
|
|
53
|
+
return Ok(None);
|
|
54
|
+
};
|
|
55
|
+
if !text.is_exact_instance_of::<PyString>()
|
|
56
|
+
|| !font.is_exact_instance_of::<PyDict>()
|
|
57
|
+
|| !rotation.is_exact_instance_of::<PyFloat>()
|
|
58
|
+
{
|
|
59
|
+
return Ok(None);
|
|
60
|
+
}
|
|
61
|
+
let Some(index) = plain_integer(&index) else {
|
|
62
|
+
return Ok(None);
|
|
63
|
+
};
|
|
64
|
+
let font = font.cast_into::<PyDict>()?;
|
|
65
|
+
let font_id = font.as_ptr() as usize;
|
|
66
|
+
if !fonts.contains(&font_id) {
|
|
67
|
+
for (key, value) in font.iter() {
|
|
68
|
+
if !key.is_exact_instance_of::<PyString>()
|
|
69
|
+
|| !(value.is_none()
|
|
70
|
+
|| value.is_exact_instance_of::<PyString>()
|
|
71
|
+
|| value.is_exact_instance_of::<PyInt>()
|
|
72
|
+
|| value.is_exact_instance_of::<PyFloat>()
|
|
73
|
+
|| value.is_exact_instance_of::<PyBool>())
|
|
74
|
+
{
|
|
75
|
+
return Ok(None);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if fonts.len() >= 4096 {
|
|
79
|
+
fonts.clear();
|
|
80
|
+
}
|
|
81
|
+
fonts.insert(font_id);
|
|
82
|
+
}
|
|
83
|
+
let raw = if raw.get_type().is(bbox_type) {
|
|
84
|
+
raw.getattr(pyo3::intern!(py, "bbox"))?
|
|
85
|
+
} else {
|
|
86
|
+
raw
|
|
87
|
+
};
|
|
88
|
+
let Some(Some(box4)) = super::geometry::plain_coordinates::<4>(&raw) else {
|
|
89
|
+
return Ok(None);
|
|
90
|
+
};
|
|
91
|
+
let origin = char
|
|
92
|
+
.get_item(pyo3::intern!(py, "origin"))?
|
|
93
|
+
.unwrap_or_else(|| py.None().into_bound(py));
|
|
94
|
+
let Some(origin) = super::geometry::plain_coordinates::<2>(&origin) else {
|
|
95
|
+
return Ok(None);
|
|
96
|
+
};
|
|
97
|
+
let object = char
|
|
98
|
+
.get_item(pyo3::intern!(py, "text_object_id"))?
|
|
99
|
+
.unwrap_or_else(|| py.None().into_bound(py));
|
|
100
|
+
if !object.is_none() && !object.is_exact_instance_of::<PyInt>() {
|
|
101
|
+
return Ok(None);
|
|
102
|
+
}
|
|
103
|
+
let rotation = rotation.extract::<f64>()?;
|
|
104
|
+
let angle = if let Some(value) = char.get_item(pyo3::intern!(py, "writing_angle"))? {
|
|
105
|
+
if !value.is_exact_instance_of::<PyFloat>() {
|
|
106
|
+
return Ok(None);
|
|
107
|
+
}
|
|
108
|
+
value.extract::<f64>()?
|
|
109
|
+
} else {
|
|
110
|
+
-rotation
|
|
111
|
+
};
|
|
112
|
+
if !rotation.is_finite() || !angle.is_finite() {
|
|
113
|
+
return Ok(None);
|
|
114
|
+
}
|
|
115
|
+
let last_source =
|
|
116
|
+
if let Some(source) = char.get_item(pyo3::intern!(py, "source_indices"))? {
|
|
117
|
+
if !source.is_exact_instance_of::<PyTuple>() || source.len()? == 0 {
|
|
118
|
+
return Ok(None);
|
|
119
|
+
}
|
|
120
|
+
let mut maximum = i64::MIN;
|
|
121
|
+
for value in source.cast::<PyTuple>()?.iter() {
|
|
122
|
+
let Some(value) = plain_integer(&value) else {
|
|
123
|
+
return Ok(None);
|
|
124
|
+
};
|
|
125
|
+
maximum = maximum.max(value);
|
|
126
|
+
}
|
|
127
|
+
maximum
|
|
128
|
+
} else {
|
|
129
|
+
index
|
|
130
|
+
};
|
|
131
|
+
let Ok(text_key) = text.cast::<PyString>()?.to_str() else {
|
|
132
|
+
return Ok(None);
|
|
133
|
+
};
|
|
134
|
+
let has_text = if let Some(value) = text_flags.get(text_key) {
|
|
135
|
+
*value
|
|
136
|
+
} else {
|
|
137
|
+
let value = text.call_method0(pyo3::intern!(py, "strip"))?.is_truthy()?;
|
|
138
|
+
if text_key.len() <= 32 {
|
|
139
|
+
if text_flags.len() >= 4096 {
|
|
140
|
+
text_flags.clear();
|
|
141
|
+
}
|
|
142
|
+
text_flags.insert(text_key.to_owned(), value);
|
|
143
|
+
}
|
|
144
|
+
value
|
|
145
|
+
};
|
|
146
|
+
let same = if let Some((
|
|
147
|
+
obj,
|
|
148
|
+
maximum,
|
|
149
|
+
previous_font,
|
|
150
|
+
previous_rotation,
|
|
151
|
+
previous_origin,
|
|
152
|
+
previous_box,
|
|
153
|
+
previous_text,
|
|
154
|
+
)) = &previous
|
|
155
|
+
{
|
|
156
|
+
!obj.is_none()
|
|
157
|
+
&& obj.eq(&object)?
|
|
158
|
+
&& maximum.checked_add(1) == Some(index)
|
|
159
|
+
&& previous_font.eq(&font)?
|
|
160
|
+
&& *previous_rotation == rotation
|
|
161
|
+
&& previous_origin
|
|
162
|
+
.zip(origin)
|
|
163
|
+
.is_some_and(|(a, b)| a.iter().zip(b).all(|(x, y)| (x - y).abs() <= 0.001))
|
|
164
|
+
&& previous_box
|
|
165
|
+
.iter()
|
|
166
|
+
.zip(box4)
|
|
167
|
+
.all(|(x, y)| (x - y).abs() <= 0.001)
|
|
168
|
+
&& *previous_text
|
|
169
|
+
&& has_text
|
|
170
|
+
} else {
|
|
171
|
+
false
|
|
172
|
+
};
|
|
173
|
+
if same {
|
|
174
|
+
// 异字符保护组也返回完整区间;Unicode 转换在全部准备完成后由 Python 执行。
|
|
175
|
+
output.last_mut().expect("mapping group exists").1 = position + 1;
|
|
176
|
+
} else {
|
|
177
|
+
let box_tuple = if box4[2] > box4[0] && box4[3] > box4[1] {
|
|
178
|
+
Some(PyTuple::new(
|
|
179
|
+
py,
|
|
180
|
+
(0..4)
|
|
181
|
+
.map(|i| raw.get_item(i))
|
|
182
|
+
.collect::<PyResult<Vec<_>>>()?,
|
|
183
|
+
)?)
|
|
184
|
+
} else {
|
|
185
|
+
None
|
|
186
|
+
};
|
|
187
|
+
output.push((position, position + 1, box_tuple, angle));
|
|
188
|
+
}
|
|
189
|
+
previous = Some((object, last_source, font, rotation, origin, box4, has_text));
|
|
190
|
+
}
|
|
191
|
+
Ok(Some(output))
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/// 批量生成重复绘制候选,不在内层循环回调 Python。
|
|
195
|
+
#[pyfunction]
|
|
196
|
+
pub(super) fn paint_pairs(
|
|
197
|
+
py: Python<'_>,
|
|
198
|
+
records: Vec<dedup::PaintRecord>,
|
|
199
|
+
) -> Option<(Vec<dedup::Pair>, Vec<dedup::Offset>)> {
|
|
200
|
+
py.detach(move || dedup::paint_pairs(records))
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/// 检查来源索引后批量计算最早来源连通关系。
|
|
204
|
+
#[pyfunction]
|
|
205
|
+
pub(super) fn dedup_components(
|
|
206
|
+
py: Python<'_>,
|
|
207
|
+
count: usize,
|
|
208
|
+
pairs: Vec<dedup::Pair>,
|
|
209
|
+
) -> PyResult<Vec<usize>> {
|
|
210
|
+
if pairs.iter().any(|(a, b)| *a >= count || *b >= count) {
|
|
211
|
+
return Err(pyo3::exceptions::PyIndexError::new_err(
|
|
212
|
+
"glyph index out of range",
|
|
213
|
+
));
|
|
214
|
+
}
|
|
215
|
+
Ok(py.detach(move || dedup::components(count, &pairs)))
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/// 返回隐藏 OCR 的几何候选,文本比较与来源物化仍由 Python 拥有。
|
|
219
|
+
#[pyfunction]
|
|
220
|
+
pub(super) fn hidden_candidates(
|
|
221
|
+
py: Python<'_>,
|
|
222
|
+
records: Vec<dedup::HiddenRecord>,
|
|
223
|
+
) -> Option<Vec<(Vec<usize>, Vec<usize>)>> {
|
|
224
|
+
py.detach(move || dedup::hidden_candidates(records))
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// 在原始候选顺序下确认平移证据,并验证全部来源索引。
|
|
228
|
+
#[pyfunction]
|
|
229
|
+
pub(super) fn confirmed_offsets(
|
|
230
|
+
py: Python<'_>,
|
|
231
|
+
records: Vec<dedup::EvidenceRecord>,
|
|
232
|
+
pairs: Vec<dedup::Offset>,
|
|
233
|
+
exact: Vec<dedup::Pair>,
|
|
234
|
+
) -> PyResult<Vec<dedup::Pair>> {
|
|
235
|
+
if pairs
|
|
236
|
+
.iter()
|
|
237
|
+
.any(|p| p.0 >= records.len() || p.1 >= records.len())
|
|
238
|
+
|| exact
|
|
239
|
+
.iter()
|
|
240
|
+
.any(|(a, b)| *a >= records.len() || *b >= records.len())
|
|
241
|
+
{
|
|
242
|
+
return Err(pyo3::exceptions::PyIndexError::new_err(
|
|
243
|
+
"glyph index out of range",
|
|
244
|
+
));
|
|
245
|
+
}
|
|
246
|
+
Ok(py.detach(move || dedup::confirmed_offsets(records, pairs, exact)))
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/// 只传递一次每字符数值,返回分组范围以复用原有字符对象。
|
|
250
|
+
#[pyfunction]
|
|
251
|
+
pub(super) fn mapping_runs(
|
|
252
|
+
py: Python<'_>,
|
|
253
|
+
records: Vec<dedup::MappingRecord>,
|
|
254
|
+
) -> Option<Vec<(usize, usize)>> {
|
|
255
|
+
py.detach(move || dedup::mapping_runs(records))
|
|
256
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
use docvortex_core::extraction;
|
|
4
4
|
use docvortex_core::geometry::{self, Box4, Size};
|
|
5
5
|
use pyo3::prelude::*;
|
|
6
|
-
use pyo3::types::{PyFloat, PyList, PyTuple};
|
|
6
|
+
use pyo3::types::{PyFloat, PyInt, PyList, PyTuple};
|
|
7
7
|
|
|
8
8
|
use super::conversion::{box_tuple, read_boxes, BoxTuple};
|
|
9
9
|
|
|
@@ -212,3 +212,109 @@ pub(super) fn source_rows<'py>(
|
|
|
212
212
|
}
|
|
213
213
|
Ok(output)
|
|
214
214
|
}
|
|
215
|
+
|
|
216
|
+
/// 只借用内置浮点序列,特殊类型及异常数值返回参考路径而不执行转换回调。
|
|
217
|
+
pub(super) fn plain_coordinates<const N: usize>(
|
|
218
|
+
value: &Bound<'_, PyAny>,
|
|
219
|
+
) -> Option<Option<[f64; N]>> {
|
|
220
|
+
if value.is_none() {
|
|
221
|
+
return Some(None);
|
|
222
|
+
}
|
|
223
|
+
if (!value.is_exact_instance_of::<PyList>() && !value.is_exact_instance_of::<PyTuple>())
|
|
224
|
+
|| value.len().ok()? != N
|
|
225
|
+
{
|
|
226
|
+
return None;
|
|
227
|
+
}
|
|
228
|
+
let mut result = [0.0; N];
|
|
229
|
+
for (index, number) in result.iter_mut().enumerate() {
|
|
230
|
+
let item = value.get_item(index).ok()?;
|
|
231
|
+
if !item.is_exact_instance_of::<PyFloat>() {
|
|
232
|
+
return None;
|
|
233
|
+
}
|
|
234
|
+
*number = item.extract::<f64>().ok()?;
|
|
235
|
+
if !number.is_finite() {
|
|
236
|
+
return None;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
Some(Some(result))
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/// 每行只接收一份保序记录,融合普通数值校验及既有源框选择、裁剪和旋转。
|
|
243
|
+
#[pyfunction]
|
|
244
|
+
pub(super) fn source_rows_plain<'py>(
|
|
245
|
+
py: Python<'py>,
|
|
246
|
+
records: &Bound<'py, PyList>,
|
|
247
|
+
size: Size,
|
|
248
|
+
angle: i32,
|
|
249
|
+
) -> PyResult<Option<Bound<'py, PyList>>> {
|
|
250
|
+
let mut rows = Vec::with_capacity(records.len());
|
|
251
|
+
let mut originals = Vec::with_capacity(records.len());
|
|
252
|
+
for record in records.iter() {
|
|
253
|
+
if !record.is_exact_instance_of::<PyTuple>() || record.len()? != 6 {
|
|
254
|
+
return Ok(None);
|
|
255
|
+
}
|
|
256
|
+
let position = record.get_item(0)?;
|
|
257
|
+
if !position.is_exact_instance_of::<PyInt>() || position.extract::<usize>().is_err() {
|
|
258
|
+
return Ok(None);
|
|
259
|
+
}
|
|
260
|
+
let raw = record.get_item(1)?;
|
|
261
|
+
let side = record.get_item(2)?;
|
|
262
|
+
let tight = record.get_item(3)?;
|
|
263
|
+
let origin = record.get_item(4)?;
|
|
264
|
+
let rotation = record.get_item(5)?;
|
|
265
|
+
let (Some(r), Some(s), Some(t), Some(o)) = (
|
|
266
|
+
plain_coordinates::<4>(&raw),
|
|
267
|
+
plain_coordinates::<4>(&side),
|
|
268
|
+
plain_coordinates::<4>(&tight),
|
|
269
|
+
plain_coordinates::<2>(&origin),
|
|
270
|
+
) else {
|
|
271
|
+
return Ok(None);
|
|
272
|
+
};
|
|
273
|
+
if !rotation.is_exact_instance_of::<PyFloat>() {
|
|
274
|
+
return Ok(None);
|
|
275
|
+
}
|
|
276
|
+
let rotation = rotation.extract::<f64>()?;
|
|
277
|
+
if !rotation.is_finite() {
|
|
278
|
+
return Ok(None);
|
|
279
|
+
}
|
|
280
|
+
rows.push((r, s, t, o, rotation));
|
|
281
|
+
originals.push((position, raw, side, tight, origin));
|
|
282
|
+
}
|
|
283
|
+
let prepared = py.detach(move || geometry::source_rows(rows, size, angle));
|
|
284
|
+
let output = PyList::empty(py);
|
|
285
|
+
for ((position, raw, side, tight, origin), row) in originals.into_iter().zip(prepared) {
|
|
286
|
+
if let Some((s, t, o, ls, lt, lo)) = row {
|
|
287
|
+
let source = shared_coordinates(py, s, &[raw, side])?;
|
|
288
|
+
let tight = shared_coordinates(py, t, &[tight])?;
|
|
289
|
+
let origin = shared_coordinates(py, o, &[origin])?;
|
|
290
|
+
let local_source = if angle == 0 {
|
|
291
|
+
source.clone()
|
|
292
|
+
} else {
|
|
293
|
+
shared_coordinates(py, ls, &[])?
|
|
294
|
+
};
|
|
295
|
+
let local_tight = if angle == 0 {
|
|
296
|
+
tight.clone()
|
|
297
|
+
} else {
|
|
298
|
+
shared_coordinates(py, lt, &[])?
|
|
299
|
+
};
|
|
300
|
+
let local_origin = if angle == 0 {
|
|
301
|
+
origin.clone()
|
|
302
|
+
} else {
|
|
303
|
+
shared_coordinates(py, lo, &[])?
|
|
304
|
+
};
|
|
305
|
+
let values = PyTuple::new(
|
|
306
|
+
py,
|
|
307
|
+
[
|
|
308
|
+
source,
|
|
309
|
+
tight,
|
|
310
|
+
origin,
|
|
311
|
+
local_source,
|
|
312
|
+
local_tight,
|
|
313
|
+
local_origin,
|
|
314
|
+
],
|
|
315
|
+
)?;
|
|
316
|
+
output.append(PyTuple::new(py, [position, values.into_any()])?)?;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
Ok(Some(output))
|
|
320
|
+
}
|
|
@@ -20,6 +20,7 @@ fn _native(module: &Bound<'_, PyModule>) -> PyResult<()> {
|
|
|
20
20
|
module.add_function(wrap_pyfunction!(spatial::title_gaps, module)?)?;
|
|
21
21
|
module.add_function(wrap_pyfunction!(spatial::line_neighbors, module)?)?;
|
|
22
22
|
module.add_function(wrap_pyfunction!(dedup::mapping_runs, module)?)?;
|
|
23
|
+
module.add_function(wrap_pyfunction!(dedup::mapping_glyph_rows, module)?)?;
|
|
23
24
|
module.add_function(wrap_pyfunction!(pdfium::read_pdfium_chars, module)?)?;
|
|
24
25
|
module.add_function(wrap_pyfunction!(pdfium::read_pdfium_char_batches, module)?)?;
|
|
25
26
|
module.add_class::<pdfium::PdfiumCharacterBatches>()?;
|
|
@@ -46,6 +47,7 @@ fn _native(module: &Bound<'_, PyModule>) -> PyResult<()> {
|
|
|
46
47
|
module.add_function(wrap_pyfunction!(geometry::visual_runs, module)?)?;
|
|
47
48
|
module.add_function(wrap_pyfunction!(geometry::local_boxes, module)?)?;
|
|
48
49
|
module.add_function(wrap_pyfunction!(geometry::source_rows, module)?)?;
|
|
50
|
+
module.add_function(wrap_pyfunction!(geometry::source_rows_plain, module)?)?;
|
|
49
51
|
module.add_function(wrap_pyfunction!(dedup::paint_pairs, module)?)?;
|
|
50
52
|
module.add_function(wrap_pyfunction!(dedup::dedup_components, module)?)?;
|
|
51
53
|
module.add_function(wrap_pyfunction!(dedup::hidden_candidates, module)?)?;
|
|
@@ -58,5 +60,7 @@ fn _native(module: &Bound<'_, PyModule>) -> PyResult<()> {
|
|
|
58
60
|
module.add_function(wrap_pyfunction!(tables::component_specs, module)?)?;
|
|
59
61
|
module.add_function(wrap_pyfunction!(geometry::materialize_geometry, module)?)?;
|
|
60
62
|
module.add_function(wrap_pyfunction!(scripts::script_roles_raw, module)?)?;
|
|
63
|
+
module.add_function(wrap_pyfunction!(scripts::script_roles_raw_batch, module)?)?;
|
|
64
|
+
module.add_function(wrap_pyfunction!(scripts::script_roles_plain_batch, module)?)?;
|
|
61
65
|
Ok(())
|
|
62
66
|
}
|