docvortex 0.4.25__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.1/Cargo.lock +138 -0
- docvortex-0.5.1/Cargo.toml +12 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/MANIFEST.in +4 -0
- {docvortex-0.4.25/src/docvortex.egg-info → docvortex-0.5.1}/PKG-INFO +4 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/README.md +3 -0
- docvortex-0.5.1/docs/ARCHITECTURE.md +138 -0
- docvortex-0.5.1/docs/rust-acceleration.md +257 -0
- docvortex-0.5.1/docs/rust-pdf-round7.md +67 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/pyproject.toml +2 -2
- docvortex-0.5.1/rust/docvortex-core/Cargo.toml +5 -0
- docvortex-0.5.1/rust/docvortex-core/src/annotation_geometry.rs +82 -0
- docvortex-0.5.1/rust/docvortex-core/src/columns.rs +117 -0
- docvortex-0.5.1/rust/docvortex-core/src/dedup.rs +385 -0
- docvortex-0.5.1/rust/docvortex-core/src/extraction.rs +96 -0
- docvortex-0.5.1/rust/docvortex-core/src/geometry.rs +262 -0
- docvortex-0.5.1/rust/docvortex-core/src/inline_pairs.rs +142 -0
- docvortex-0.5.1/rust/docvortex-core/src/lib.rs +42 -0
- docvortex-0.5.1/rust/docvortex-core/src/note_index.rs +174 -0
- docvortex-0.5.1/rust/docvortex-core/src/row_geometry.rs +92 -0
- docvortex-0.5.1/rust/docvortex-core/src/scripts.rs +572 -0
- docvortex-0.5.1/rust/docvortex-core/src/spatial.rs +309 -0
- docvortex-0.5.1/rust/docvortex-core/src/statistics.rs +363 -0
- docvortex-0.5.1/rust/docvortex-core/src/tables.rs +479 -0
- docvortex-0.5.1/rust/docvortex-core/tests/contracts.rs +112 -0
- docvortex-0.5.1/rust/docvortex-python/Cargo.toml +13 -0
- docvortex-0.5.1/rust/docvortex-python/src/conversion.rs +26 -0
- docvortex-0.5.1/rust/docvortex-python/src/dedup.rs +256 -0
- docvortex-0.5.1/rust/docvortex-python/src/geometry.rs +320 -0
- docvortex-0.5.1/rust/docvortex-python/src/lib.rs +66 -0
- docvortex-0.5.1/rust/docvortex-python/src/pdfium.rs +226 -0
- docvortex-0.5.1/rust/docvortex-python/src/scripts.rs +166 -0
- docvortex-0.5.1/rust/docvortex-python/src/spatial.rs +107 -0
- docvortex-0.5.1/rust/docvortex-python/src/statistics.rs +45 -0
- docvortex-0.5.1/rust/docvortex-python/src/tables.rs +272 -0
- docvortex-0.5.1/rust-toolchain.toml +3 -0
- docvortex-0.5.1/setup.py +33 -0
- docvortex-0.5.1/src/docvortex/_compute_backend.py +57 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/tables.py +19 -2
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/image.py +21 -8
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +6 -0
- docvortex-0.5.1/src/docvortex/analyzers/native/pdf/_interval_candidates.py +70 -0
- docvortex-0.5.1/src/docvortex/analyzers/native/pdf/_native_geometry.py +15 -0
- docvortex-0.5.1/src/docvortex/analyzers/native/pdf/_ordered_statistics.py +30 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_script_geometry.py +68 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +18 -4
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +61 -5
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +62 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +83 -6
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/char_geometry.py +325 -99
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/common.py +17 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/detection.py +97 -5
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/matching.py +40 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/materialize.py +7 -2
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/scripts.py +347 -33
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/line_layout.py +84 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/line_merging.py +159 -29
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/native_text.py +191 -14
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_annotations.py +471 -30
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_detection.py +1 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_rules.py +409 -16
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_text_styles.py +3 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +134 -25
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +37 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +24 -9
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/images.py +47 -4
- docvortex-0.5.1/src/docvortex/document/pdf/text/_pdfium_bridge.py +99 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/dedup.py +204 -4
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/extract.py +205 -12
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/geometry.py +10 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/visuals.py +13 -9
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/version.py +1 -1
- {docvortex-0.4.25 → docvortex-0.5.1/src/docvortex.egg-info}/PKG-INFO +4 -1
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex.egg-info/SOURCES.txt +56 -1
- docvortex-0.5.1/src/docvortex.egg-info/not-zip-safe +1 -0
- docvortex-0.5.1/tests/benchmarks/compare_native_corpus.py +114 -0
- docvortex-0.5.1/tests/benchmarks/compare_pdf_revisions.py +194 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/benchmarks/flash_pdf.py +65 -14
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/benchmarks/native_pdf_table.py +68 -6
- docvortex-0.5.1/tests/benchmarks/pdf_corpus.py +52 -0
- docvortex-0.5.1/tests/benchmarks/pdf_memory.py +221 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/benchmarks/pipeline.py +1 -0
- docvortex-0.5.1/tests/benchmarks/rust_pdf.py +338 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_benchmark_entrypoint.py +37 -1
- docvortex-0.5.1/tests/test_compute_backend.py +58 -0
- docvortex-0.5.1/tests/test_converter_lifecycle.py +140 -0
- docvortex-0.5.1/tests/test_native_parity.py +287 -0
- docvortex-0.5.1/tests/test_native_round3.py +257 -0
- docvortex-0.5.1/tests/test_native_round4.py +307 -0
- docvortex-0.5.1/tests/test_native_round5.py +319 -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.1/tests/test_native_statistics.py +198 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_cpu_evidence.py +23 -2
- docvortex-0.5.1/tests/test_pdfium_bridge.py +250 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_refactor_raster.py +94 -8
- docvortex-0.5.1/tests/unittest/test_docx_table_metafiles.py +223 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_image_mtef.py +85 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_mhtml.py +4 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_image_mtef.py +18 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_tables.py +25 -0
- docvortex-0.5.1/tools/verify_native_abi.py +93 -0
- docvortex-0.5.1/tools/verify_native_wheel.py +87 -0
- docvortex-0.4.25/tests/test_converter_lifecycle.py +0 -64
- {docvortex-0.4.25 → docvortex-0.5.1}/LICENSE.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/README.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/demo.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ebook/epub_01.epub +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ebook/epub_02.epub +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/README.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/docx_01.doc +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/docx_01.docx +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/pptx_01.ppt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/pptx_01.pptx +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/rtf_01.rtf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/xlsx_01.xls +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ms_office_docs/xlsx_01.xlsx +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/ofd/ofd_01.ofd +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/open_office_docs/docx_01.odt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/open_office_docs/pptx_01.odp +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/open_office_docs/xlsx_01.ods +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/caibao1.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/demo1.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/demo2.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/demo3.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/demo4.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/demo6.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs/small_ocr.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/web_docs/html_01.html +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/demo/web_docs/mhtml_01.mhtml +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/HTML_PROTOCOL.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/JSON_PROTOCOL.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/METADATA.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/PDF_FONTS.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/RENDER_OWNERSHIP.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/USAGE.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-manual-annotations-2026-09-15.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-round2-annotations-2026-09-15.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-rule-generalization-2026-09-15.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/flash-title-coverage-2026-09-16.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/docs/sdk-0.4.md +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/schemas/middle-2.0.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/schemas/model-2.0.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/setup.cfg +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/image.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/names.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/csv.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/package.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/properties.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/anchors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/document.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/html/selector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/mhtml/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/images.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/package.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/path.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/image.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/limits.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/opc.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/streams.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/analyzers/pdf.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/assets/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/assets/images.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/assets/store.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/cli.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/html/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/html/contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/html/materializer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/html/parser.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/html/resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/codecs/json.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/links.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/markup/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/markup/anchors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/markup/formula.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/markup/projector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/markup/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/mathml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/normalization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/spans.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/content.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/document.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/html.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/rules.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/table/structure.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/content/tree.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/detection.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/filetypes.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/mhtml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/page_range.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/_document.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/classify.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/constants.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/font_runtime.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_coordinates.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_objects.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/pdfium.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/raster.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/_contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/pdf/text/groups.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/properties.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/document/source.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/errors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/export/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/export/_images.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/export/bundle.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/export/files.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/export/middle.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_coordinates.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_hyperlink.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_image.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_image_operations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_image_payload.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_svg_raster.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/image_encoding.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/language.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/magika.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/type_identity.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/foundation/xml_names.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/options.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/content.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/document.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/lists.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/page_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/pages.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/paragraphs.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/postprocess/visual.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/public_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/context.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/html_table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/index.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/list_items.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/common/planner.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/math.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/docx/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/package.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/epub/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/html/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/html/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/html/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/html/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/latex/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/markdown/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/formula.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/inline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/original.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/contracts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/docx.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/epub.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/fragments.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/html.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/latex.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/markdown.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/pdf.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/render/structured_content.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/epub/docvortex.css +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/fonts/NOTICE +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/fonts/manifest.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/html/docvortex.css +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/html/docvortex.min.css +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/result.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/schema.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex/visualization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex.egg-info/dependency_links.txt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex.egg-info/entry_points.txt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex.egg-info/requires.txt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/src/docvortex.egg-info/top_level.txt +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/benchmarks/pdf_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_layout_block_expectations.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_manual_annotations.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_manual_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_reviewed_history.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_round2_annotations.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_round2_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_round3_annotations.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_round3_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/pdf_char_dedup.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/pdf_numeric_citations_review.json +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/fixtures/rtf/semantic.rtf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_architecture.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_brand_protocol.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_cli_logging.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_complete_pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_document_envelope.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_document_metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_export_image_names.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_format_matrix.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_geometry_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_history_geometry_tools.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_html_namespace.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_magika_runtime.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_mixed_font_script_reference.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_analysis_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_font_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_font_runtime.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_model_text_normalization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_numeric_citations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_output_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_render_pool.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_source_row_merging.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_pdf_symbol_normalization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_public_export_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_public_image_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_public_pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_refactor_rendering.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_refactor_resources.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_release_ci_gate.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_render_ownership.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_renderer_branding.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_shared_boundaries.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_system_font_pdf_pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/test_validated_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_epub_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_flash_pdf_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_legacy_doc_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_legacy_xls_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_metafile_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_mhtml_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_mtef_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_mtef_v5_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_native_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_odf_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_ofd_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/_span_test_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/pdfs/test.pdf +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_backend_architecture.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_backend_block_object_regressions.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_assets.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_complex_fields.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_math.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_special_char_tables.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_docx_table_context.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_emfplus_integration.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_epub_backlinks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_epub_quoted_note_types.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_epub_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_csv.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_docx_equationxml.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_epub.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_html.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_doc.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_ppt.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_xls.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_manual_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_markup_anchors.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_model.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_mtef_v5.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_odf.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_ofd.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_metafile.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_office_title_types.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_extractor.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_formulas.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_graphics.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_native_text.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_samples.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_scripts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_semantics.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_titles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_round2_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_round3_annotations.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_rtf.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_rule_generalization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_shared_helpers.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_spatial_evidence.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_guess_suffix_ole2.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_html_css_build.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_html_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_html_security.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_latex_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_markdown_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_middle_json_block_models.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_middle_json_export.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_middle_json_validator.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_model_json.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_ofd_assembly.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_ofd_vector_tables.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_office_demo_exports.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_office_demo_pages.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_office_parser_regressions.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_objects.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_style.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_classify.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_demo_links.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_document.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_formula_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_object_clipping.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_original_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_pagination.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_structured_tables.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_table_cache.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_table_round2.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_text_dedup.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_text_styles.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_title_font_plan.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_title_space.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_pdf_visualization.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_postprocess_page_blocks.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_postprocess_pages.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_postprocess_paragraphs.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_postprocess_visual.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_render_api.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_render_html_table.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_render_image_renderer.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_render_list_index_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_structured_content_render.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_svg_raster.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_table_merge.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_table_merge_cell_merge.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_text_block_anchor.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_text_boundary_rules.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tests/unittest/test_text_utils.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/__init__.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/build_html_css.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/calibrate_pdf_geometry.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/capture_baseline.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/capture_platform_layout.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/compare_font_platforms.py +0 -0
- {docvortex-0.4.25 → docvortex-0.5.1}/tools/font_geometry.py +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "docvortex-core"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
|
|
9
|
+
[[package]]
|
|
10
|
+
name = "docvortex-python"
|
|
11
|
+
version = "0.1.0"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"docvortex-core",
|
|
14
|
+
"pyo3",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[[package]]
|
|
18
|
+
name = "heck"
|
|
19
|
+
version = "0.5.0"
|
|
20
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
21
|
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
22
|
+
|
|
23
|
+
[[package]]
|
|
24
|
+
name = "libc"
|
|
25
|
+
version = "0.2.189"
|
|
26
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
27
|
+
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
|
|
28
|
+
|
|
29
|
+
[[package]]
|
|
30
|
+
name = "once_cell"
|
|
31
|
+
version = "1.21.4"
|
|
32
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
33
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
34
|
+
|
|
35
|
+
[[package]]
|
|
36
|
+
name = "portable-atomic"
|
|
37
|
+
version = "1.15.0"
|
|
38
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
39
|
+
checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
|
|
40
|
+
|
|
41
|
+
[[package]]
|
|
42
|
+
name = "proc-macro2"
|
|
43
|
+
version = "1.0.107"
|
|
44
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
45
|
+
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
|
|
46
|
+
dependencies = [
|
|
47
|
+
"unicode-ident",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[[package]]
|
|
51
|
+
name = "pyo3"
|
|
52
|
+
version = "0.28.2"
|
|
53
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
54
|
+
checksum = "cf85e27e86080aafd5a22eae58a162e133a589551542b3e5cee4beb27e54f8e1"
|
|
55
|
+
dependencies = [
|
|
56
|
+
"libc",
|
|
57
|
+
"once_cell",
|
|
58
|
+
"portable-atomic",
|
|
59
|
+
"pyo3-build-config",
|
|
60
|
+
"pyo3-ffi",
|
|
61
|
+
"pyo3-macros",
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
[[package]]
|
|
65
|
+
name = "pyo3-build-config"
|
|
66
|
+
version = "0.28.2"
|
|
67
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
68
|
+
checksum = "8bf94ee265674bf76c09fa430b0e99c26e319c945d96ca0d5a8215f31bf81cf7"
|
|
69
|
+
dependencies = [
|
|
70
|
+
"target-lexicon",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
[[package]]
|
|
74
|
+
name = "pyo3-ffi"
|
|
75
|
+
version = "0.28.2"
|
|
76
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
77
|
+
checksum = "491aa5fc66d8059dd44a75f4580a2962c1862a1c2945359db36f6c2818b748dc"
|
|
78
|
+
dependencies = [
|
|
79
|
+
"libc",
|
|
80
|
+
"pyo3-build-config",
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
[[package]]
|
|
84
|
+
name = "pyo3-macros"
|
|
85
|
+
version = "0.28.2"
|
|
86
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
87
|
+
checksum = "f5d671734e9d7a43449f8480f8b38115df67bef8d21f76837fa75ee7aaa5e52e"
|
|
88
|
+
dependencies = [
|
|
89
|
+
"proc-macro2",
|
|
90
|
+
"pyo3-macros-backend",
|
|
91
|
+
"quote",
|
|
92
|
+
"syn",
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
[[package]]
|
|
96
|
+
name = "pyo3-macros-backend"
|
|
97
|
+
version = "0.28.2"
|
|
98
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
99
|
+
checksum = "22faaa1ce6c430a1f71658760497291065e6450d7b5dc2bcf254d49f66ee700a"
|
|
100
|
+
dependencies = [
|
|
101
|
+
"heck",
|
|
102
|
+
"proc-macro2",
|
|
103
|
+
"pyo3-build-config",
|
|
104
|
+
"quote",
|
|
105
|
+
"syn",
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
[[package]]
|
|
109
|
+
name = "quote"
|
|
110
|
+
version = "1.0.47"
|
|
111
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
112
|
+
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
|
|
113
|
+
dependencies = [
|
|
114
|
+
"proc-macro2",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
[[package]]
|
|
118
|
+
name = "syn"
|
|
119
|
+
version = "2.0.119"
|
|
120
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
121
|
+
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
|
|
122
|
+
dependencies = [
|
|
123
|
+
"proc-macro2",
|
|
124
|
+
"quote",
|
|
125
|
+
"unicode-ident",
|
|
126
|
+
]
|
|
127
|
+
|
|
128
|
+
[[package]]
|
|
129
|
+
name = "target-lexicon"
|
|
130
|
+
version = "0.13.5"
|
|
131
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
132
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
133
|
+
|
|
134
|
+
[[package]]
|
|
135
|
+
name = "unicode-ident"
|
|
136
|
+
version = "1.0.26"
|
|
137
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
138
|
+
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
|
|
@@ -7,3 +7,7 @@ recursive-include tests *.py *.json *.pdf *.xor *.rtf
|
|
|
7
7
|
recursive-include demo *.py *.md *.pdf *.doc *.docx *.ppt *.pptx *.xls *.xlsx *.rtf *.odt *.odp *.ods *.epub *.html *.mhtml *.ofd
|
|
8
8
|
recursive-include src/docvortex/resources *
|
|
9
9
|
global-exclude __pycache__ *.py[cod] .DS_Store
|
|
10
|
+
include Cargo.toml Cargo.lock rust-toolchain.toml
|
|
11
|
+
recursive-include rust *.toml *.rs
|
|
12
|
+
include tools/verify_native_wheel.py tools/verify_native_abi.py
|
|
13
|
+
global-exclude *.so *.pyd
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docvortex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A fast, multi-format document parsing and conversion engine
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Repository, https://github.com/myhloli/DocVortex
|
|
@@ -201,6 +201,9 @@ reads metadata without parsing the document body.
|
|
|
201
201
|
|
|
202
202
|
## Development
|
|
203
203
|
|
|
204
|
+
See [Repository architecture](docs/ARCHITECTURE.md) for directory responsibilities,
|
|
205
|
+
the Python/Rust boundary, and pure Python or native development commands.
|
|
206
|
+
|
|
204
207
|
From a local checkout:
|
|
205
208
|
|
|
206
209
|
```bash
|
|
@@ -147,6 +147,9 @@ reads metadata without parsing the document body.
|
|
|
147
147
|
|
|
148
148
|
## Development
|
|
149
149
|
|
|
150
|
+
See [Repository architecture](docs/ARCHITECTURE.md) for directory responsibilities,
|
|
151
|
+
the Python/Rust boundary, and pure Python or native development commands.
|
|
152
|
+
|
|
150
153
|
From a local checkout:
|
|
151
154
|
|
|
152
155
|
```bash
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Repository architecture
|
|
2
|
+
|
|
3
|
+
DocVortex is a Python document engine with optional Rust acceleration. The Python
|
|
4
|
+
package owns the public SDK and document pipeline; the Rust crates implement private
|
|
5
|
+
batch computations and their Python bindings. They are built and released together.
|
|
6
|
+
|
|
7
|
+
## Repository layout
|
|
8
|
+
|
|
9
|
+
| Location | Responsibility |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `src/docvortex/` | Importable Python package and runtime resources |
|
|
12
|
+
| `rust/docvortex-core/` | Python-independent numeric kernels and Rust contract tests |
|
|
13
|
+
| `rust/docvortex-python/` | PyO3 argument validation, conversion, bindings and PDFium bridge |
|
|
14
|
+
| Root `pyproject.toml`, `setup.py`, `MANIFEST.in` | Python metadata, optional extension build and source distribution |
|
|
15
|
+
| Root `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml` | Shared Rust workspace, dependencies and compiler |
|
|
16
|
+
| `tests/` | Python unit/integration tests, Python/Rust parity tests and benchmarks |
|
|
17
|
+
| `tools/` | Development, regression review and distribution verification tools |
|
|
18
|
+
| `docs/`, `schemas/`, `demo/` | Architecture/protocol documentation, JSON schemas and runnable examples |
|
|
19
|
+
|
|
20
|
+
The Python `src` layout separates importable code from repository tools. It does not
|
|
21
|
+
require other languages to live under `src`. The Cargo workspace at the repository
|
|
22
|
+
root manages both crates, so Python and Rust development commands use the same working
|
|
23
|
+
directory. Rust sources are included in the sdist; the compiled extension is installed
|
|
24
|
+
as `docvortex._native`, alongside the Python package, rather than as a second SDK.
|
|
25
|
+
|
|
26
|
+
## Document pipeline and ownership
|
|
27
|
+
|
|
28
|
+
The public entry points live in `docvortex.api` and are re-exported by `docvortex`:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
source -> document preparation -> analyzers -> ModelJson
|
|
32
|
+
-> postprocess + asset materialization -> MiddleJson / DocumentResult
|
|
33
|
+
-> render -> RenderArtifact -> export / saved files
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`parse` combines analysis and postprocessing; `convert` additionally renders and
|
|
37
|
+
exports the result. The major package boundaries are:
|
|
38
|
+
|
|
39
|
+
- `document`: source preparation, document access and PDF primitives/handle lifetime.
|
|
40
|
+
- `analyzers`: format-specific interpretation and ModelJson construction.
|
|
41
|
+
- `postprocess`: deterministic transformation into the common document representation.
|
|
42
|
+
- `render`: output-format layout and rendering.
|
|
43
|
+
- `export`: materialized files and result bundles.
|
|
44
|
+
- `schema`, `result`, `assets`: document protocols, stage results and asset ownership.
|
|
45
|
+
|
|
46
|
+
`analyzers/native` means parsing information already present in the source document.
|
|
47
|
+
It is Python code and works without Rust. By contrast, `docvortex._native` is a private
|
|
48
|
+
compiled extension. These two uses of “native” describe different responsibilities.
|
|
49
|
+
|
|
50
|
+
## Optional compute backend
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
Python document/PDF algorithms
|
|
54
|
+
-> _compute_backend.get_native()
|
|
55
|
+
-> Python reference implementation, or
|
|
56
|
+
-> docvortex._native (PyO3 validation and conversion)
|
|
57
|
+
-> docvortex-core (numeric batches)
|
|
58
|
+
-> Python-owned objects and parsing decisions
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Python retains Unicode/text interpretation, public objects, algorithmic decisions and
|
|
62
|
+
reference implementations. The core crate does not access Python objects or PDFium.
|
|
63
|
+
Bindings validate transport records and preserve Python error and object-reuse
|
|
64
|
+
semantics. Numeric work releases the GIL only at the existing explicit boundaries.
|
|
65
|
+
|
|
66
|
+
The PDFium bridge is a separate boundary: it borrows function pointers and a text-page
|
|
67
|
+
handle from the active pypdfium2 instance, under the existing Python guard and GIL.
|
|
68
|
+
It does not load another PDFium library, take ownership of handles or close them.
|
|
69
|
+
Subsequent numeric geometry conversion can release the GIL after reading finishes.
|
|
70
|
+
|
|
71
|
+
`DOCVORTEX_COMPUTE_BACKEND=python|rust|auto` selects the backend once per process.
|
|
72
|
+
`python` never imports the extension; `rust` requires a compatible extension; `auto`
|
|
73
|
+
falls back on a missing or incompatible extension. Computation errors propagate.
|
|
74
|
+
The current private protocol is **6**. Rebuild an editable extension after changing
|
|
75
|
+
native sources and restart processes that cached the backend. Module-only refactors
|
|
76
|
+
preserve the protocol and all Python-visible registrations.
|
|
77
|
+
|
|
78
|
+
Within the binding crate, `lib.rs` declares modules and registers the existing flat
|
|
79
|
+
Python extension interface. Rust modules do not become Python submodules:
|
|
80
|
+
|
|
81
|
+
| Module | Responsibility |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| `geometry` | Character geometry, coordinate conversion, visual runs, anchor pairs and coordinate-object reuse |
|
|
84
|
+
| `statistics` | Ordered clustering, typography and lane-gap statistics |
|
|
85
|
+
| `tables` | Table kernels, column accumulation, row geometry and note-metric state |
|
|
86
|
+
| `spatial` | Baseline indices, title gaps, neighboring lines and annotation geometry |
|
|
87
|
+
| `scripts` | Script-role classification and inline pairing |
|
|
88
|
+
| `dedup` | Duplicate-paint, hidden-text and mapping-run candidates |
|
|
89
|
+
| `conversion` | Shared box extraction, tuple conversion and transport aliases |
|
|
90
|
+
| `pdfium` | Borrowed PDFium calls and bounded character batches |
|
|
91
|
+
|
|
92
|
+
Keep binding helpers internal to the crate. New functions and methods must include
|
|
93
|
+
Chinese comments explaining their responsibility. Place numeric kernels in the core
|
|
94
|
+
crate, Python transport handling in the bindings, and document decisions in Python.
|
|
95
|
+
|
|
96
|
+
## Development and verification
|
|
97
|
+
|
|
98
|
+
Run commands from the repository root in a virtual environment. For pure Python
|
|
99
|
+
development (no native compilation):
|
|
100
|
+
|
|
101
|
+
```sh
|
|
102
|
+
DOCVORTEX_BUILD_NATIVE=0 python -m pip install -e ".[test,dev]"
|
|
103
|
+
DOCVORTEX_COMPUTE_BACKEND=python python -m pytest -q
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For release-mode native development:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
DOCVORTEX_BUILD_NATIVE=1 python -m pip install -e ".[test,dev]"
|
|
110
|
+
DOCVORTEX_COMPUTE_BACKEND=rust python -m pytest -q tests/test_compute_backend.py tests/test_native_parity.py tests/test_native_statistics.py tests/test_native_round3.py tests/test_native_round4.py tests/test_native_round5.py tests/test_pdfium_bridge.py tests/test_architecture.py
|
|
111
|
+
cargo fmt --all --check
|
|
112
|
+
cargo clippy --workspace --all-targets -- -D warnings
|
|
113
|
+
cargo test -p docvortex-core --locked
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
These environment assignments use POSIX shell syntax. In PowerShell, set the matching
|
|
117
|
+
`$env:DOCVORTEX_BUILD_NATIVE` or `$env:DOCVORTEX_COMPUTE_BACKEND` before the command.
|
|
118
|
+
For source-only Python runs, `PYTHONPATH=src` is available; installed-wheel validation
|
|
119
|
+
must omit it and use a fresh environment without an editable DocVortex installation.
|
|
120
|
+
Disabling native compilation does not remove a binary left by an earlier editable
|
|
121
|
+
build; use the explicit Python runtime backend or a clean wheel installation.
|
|
122
|
+
|
|
123
|
+
Use the existing parity suites for transport, numeric and object-identity contracts,
|
|
124
|
+
and the core crate's tests for Python-independent kernels. Distribution checks must
|
|
125
|
+
cover a complete sdist, a pure Python wheel and a native wheel built from that sdist.
|
|
126
|
+
The existing CI owns the cross-platform matrix. See [Rust acceleration](rust-acceleration.md)
|
|
127
|
+
for installed-wheel smoke checks, real-document comparisons and benchmark commands.
|
|
128
|
+
|
|
129
|
+
## Layout rationale
|
|
130
|
+
|
|
131
|
+
Keep `src/docvortex` and `rust` while Python remains the public product. Renaming `rust`
|
|
132
|
+
to `crates` would not change these boundaries. Independent `python` and `rust` product
|
|
133
|
+
roots become useful if Rust gains its own supported SDK and release lifecycle; that
|
|
134
|
+
is not the current distribution model.
|
|
135
|
+
|
|
136
|
+
References: [Python src layout](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/),
|
|
137
|
+
[Cargo workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html),
|
|
138
|
+
[setuptools-rust mixed packages](https://setuptools-rust.readthedocs.io/en/latest/).
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Optional Rust PDF kernels
|
|
2
|
+
|
|
3
|
+
See [Repository architecture](ARCHITECTURE.md) for the Python/Rust ownership boundary
|
|
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
|
+
interfaces or rollout stages, not the current loader requirement. Rebuild editable
|
|
7
|
+
native installs and restart existing processes after updating native sources.
|
|
8
|
+
|
|
9
|
+
DocVortex keeps its Python API, document types, parsing decisions and PDFium runtime.
|
|
10
|
+
The private `docvortex._native` extension accelerates batches of already materialized
|
|
11
|
+
numbers and indices. It does not bundle or call a second PDFium library and does not
|
|
12
|
+
create a thread pool. The existing PDFium lock and handle lifetimes are unchanged.
|
|
13
|
+
|
|
14
|
+
## Runtime selection
|
|
15
|
+
|
|
16
|
+
Set `DOCVORTEX_COMPUTE_BACKEND` before the first PDF computation in a process:
|
|
17
|
+
|
|
18
|
+
| Value | Behavior |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `auto` (default) | Load a compatible native extension when available; otherwise use Python. |
|
|
21
|
+
| `python` | Use the Python reference kernels without importing the extension. |
|
|
22
|
+
| `rust` | Require the extension and its matching private protocol; missing or incompatible binaries raise an error. |
|
|
23
|
+
|
|
24
|
+
Selection is cached for the process. Restart the process after changing the variable
|
|
25
|
+
or rebuilding an editable extension. Computation errors are never silently retried
|
|
26
|
+
in Python. The few explicit algorithmic reference paths preserve extreme coordinates,
|
|
27
|
+
unusual Python inputs, and script-reference ties whose choice depends on Python set
|
|
28
|
+
iteration. These paths do not weaken any parsing decision or output comparison.
|
|
29
|
+
|
|
30
|
+
Python owns Unicode classification, normalization, font equality, version-dependent
|
|
31
|
+
rounding, HTML generation and public object construction. Stable table-column means
|
|
32
|
+
use an incremental accumulator matching the running CPython version's float-only
|
|
33
|
+
`sum`: sequential for 3.10–3.11 and compensated for 3.12–3.14. Integer/mixed/custom
|
|
34
|
+
inputs, other runtimes and intermediate overflow retain Python computation. Rust owns
|
|
35
|
+
numeric batches and returns source ranges or indices. Canonical geometry reuses
|
|
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. 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.
|
|
40
|
+
|
|
41
|
+
## Kernels
|
|
42
|
+
|
|
43
|
+
- Ordered statistics: exact median clustering for baseline and body-height groups;
|
|
44
|
+
stable first/last-cluster decisions return only source indices.
|
|
45
|
+
- Typography and lanes: bounded font metadata reuse and batched numeric statistics;
|
|
46
|
+
original lane-member sorting and Python text/font-family classification remain.
|
|
47
|
+
- Table text: stable visual rows and lazy per-recovery occupancy reuse without changing
|
|
48
|
+
candidates, interval boundary ownership or diagnostics.
|
|
49
|
+
- Shared script geometry: baseline clusters, component membership and script roles.
|
|
50
|
+
- Character geometry: clipping, rotation, visual run boundaries and canonical samples.
|
|
51
|
+
- Character extraction: the private bridge borrows function pointers from the active
|
|
52
|
+
pypdfium2 instance and reads characters in one synchronous call under the original
|
|
53
|
+
lock and GIL. It owns no PDFium handles or callbacks and loads no second library.
|
|
54
|
+
Unsupported ctypes ABI/inputs use the reference reader with a recorded reason;
|
|
55
|
+
errors after entering the bridge propagate. Coordinate conversion can then release
|
|
56
|
+
the GIL. Raw numerical records stay within the call; Python records and coordinate
|
|
57
|
+
results are materialized in batches of at most 1,024. Font sharing, object/source IDs
|
|
58
|
+
and writing-direction assignment retain whole-page scope. The original protocol-4
|
|
59
|
+
list reader remains compatible. Wheel smoke checks require an actually completed
|
|
60
|
+
bridge call using bounded batches.
|
|
61
|
+
- Deduplication: paint buckets, translated-run evidence, source components and hidden
|
|
62
|
+
OCR geometry. Unicode matching and final copies remain in Python.
|
|
63
|
+
- Tables: region selection, batched rule coverage and merging, grid connectivity,
|
|
64
|
+
rectangular component checks and glyph-to-cell assignment. Candidate ordering,
|
|
65
|
+
confidence thresholds, diagnostics, primitive limits and HTML remain unchanged.
|
|
66
|
+
- Dense pages: bounded interval queries replace the quadratic candidate-list fallback;
|
|
67
|
+
candidate consumption preserves original line indices. Rule-table candidates retain
|
|
68
|
+
compact interval drafts and share note statistics before stable score materialization.
|
|
69
|
+
Short-tail attachment sweeps preceding rows without repeatedly scanning whole lanes.
|
|
70
|
+
- Visual assets: the existing rendering workers crop, orient and JPEG-encode images,
|
|
71
|
+
returning indexed encoded blocks instead of full-page pixels. Scheduling limits,
|
|
72
|
+
timeout/recovery, crop/encoding parameters and public asset bytes are preserved.
|
|
73
|
+
After a crop task closes its images, the worker collects the youngest Python GC
|
|
74
|
+
generation: closed pypdfium2 document/page reference cycles can otherwise retain
|
|
75
|
+
whole PDF inputs across tasks. This does not change PDFium handle ownership or
|
|
76
|
+
require allocator-specific memory trimming.
|
|
77
|
+
|
|
78
|
+
## Development and distribution
|
|
79
|
+
|
|
80
|
+
The Cargo workspace contains a Python-independent core crate and a PyO3 binding crate.
|
|
81
|
+
`rust-toolchain.toml` pins the compiler; `Cargo.lock` pins dependencies. Build release
|
|
82
|
+
kernels even for editable performance testing:
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
DOCVORTEX_BUILD_NATIVE=1 python -m pip install -e .
|
|
86
|
+
DOCVORTEX_COMPUTE_BACKEND=rust python -m pytest tests/test_native_parity.py
|
|
87
|
+
cargo test -p docvortex-core --locked
|
|
88
|
+
cargo clippy --workspace --all-targets -- -D warnings
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`DOCVORTEX_BUILD_NATIVE=0` builds a pure Python wheel. `auto` builds native code when
|
|
92
|
+
Cargo is available and otherwise builds pure Python. If a compiler is available but
|
|
93
|
+
compilation fails, installation fails visibly instead of publishing a broken binary.
|
|
94
|
+
Official binary builds always set `DOCVORTEX_BUILD_NATIVE=1`.
|
|
95
|
+
|
|
96
|
+
GIL-enabled CPython 3.10–3.14 uses `cp310-abi3` wheels for Linux x86_64/aarch64,
|
|
97
|
+
Windows x86_64 and macOS arm64/x86_64. Linux binary builds target manylinux_2_28;
|
|
98
|
+
older glibc systems can use the pure Python wheel. Other interpreters can build the
|
|
99
|
+
pure package; this does not extend compatibility guarantees of its dependencies.
|
|
100
|
+
Free-threaded native wheels are not part of this change.
|
|
101
|
+
|
|
102
|
+
The native wheel workflow tests installed artifacts against Python output and exercises
|
|
103
|
+
real parsing, both on Python 3.10 and 3.14. The regular CI matrix exercises Python and
|
|
104
|
+
Rust backends on Python 3.10–3.14. The release workflow retains the main-CI/tag gate,
|
|
105
|
+
then builds/tests every artifact before publishing all platform wheels, the pure wheel
|
|
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.
|
|
111
|
+
|
|
112
|
+
On Intel macOS, the existing Magika/ONNX Runtime dependency stack currently prevents
|
|
113
|
+
full application installation on Python 3.14. That wheel is tested with full parsing
|
|
114
|
+
on Python 3.10 and 3.13, and its binary kernels are loaded and executed separately on
|
|
115
|
+
Python 3.14. This ABI check is not a claim that the complete dependency stack installs
|
|
116
|
+
there. The Rust change does not alter those existing dependency requirements.
|
|
117
|
+
|
|
118
|
+
## Benchmarks and regression gates
|
|
119
|
+
|
|
120
|
+
Use `PYTHONPATH=src` for a source checkout; omit it when validating an installed wheel.
|
|
121
|
+
Every output directory must be new. Run CPU benchmarks without concurrent tests/builds.
|
|
122
|
+
The independent process-tree memory auditor additionally requires `psutil`.
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
python tests/benchmarks/flash_pdf.py --backend python --runs 5 --profile --output output/rust/reference
|
|
126
|
+
python tests/benchmarks/flash_pdf.py --backend rust --runs 5 --profile --output output/rust/native --baseline output/rust/reference
|
|
127
|
+
python tests/benchmarks/native_pdf_table.py --backend python --runs 5 --output output/rust/table-python
|
|
128
|
+
python tests/benchmarks/native_pdf_table.py --backend rust --runs 5 --output output/rust/table-rust --baseline output/rust/table-python
|
|
129
|
+
python tests/benchmarks/rust_pdf.py --backend python --suite public --output output/rust/public-python
|
|
130
|
+
python tests/benchmarks/rust_pdf.py --backend rust --suite public --output output/rust/public-rust --baseline output/rust/public-python
|
|
131
|
+
python tests/benchmarks/rust_pdf.py --backend python --suite shared --flash-baseline output/rust/reference --output output/rust/shared-python
|
|
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
|
|
133
|
+
```
|
|
134
|
+
|
|
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
|
|
140
|
+
regions, so a different candidate set cannot masquerade as acceleration. Timings include
|
|
141
|
+
conversion into Rust and Python result construction. First invocation is separate from
|
|
142
|
+
five warmed runs. Output comparison and memory sampling are outside timing. Public
|
|
143
|
+
`parse` includes geometry, image materialization and postprocessing, but not rendering
|
|
144
|
+
an export. Shared timings separate extraction, reuse, evidence and table recovery;
|
|
145
|
+
they do not include model inference or represent MinerU end-to-end latency.
|
|
146
|
+
|
|
147
|
+
Acceptance requires unchanged full outputs, related historical/manual tests, host API
|
|
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
|
|
150
|
+
above 5% in time or RSS. Never refresh a gold file or remove fields to achieve parity;
|
|
151
|
+
record any remaining performance gap explicitly.
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
Optional host replay lives outside the independent engine test tree:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
python tools/mineru_native_replay.py --mineru-source ../Magic-PDF --backend python --flash-baseline output/rust/reference --output output/rust/host-python
|
|
158
|
+
python tools/mineru_native_replay.py --mineru-source ../Magic-PDF --backend rust --flash-baseline output/rust/reference --output output/rust/host-rust --baseline output/rust/host-python
|
|
159
|
+
python tests/benchmarks/compare_native_corpus.py --runs 5 --output output/rust/corpus
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Host replay compares actual medium/high native stages with frozen model inputs and
|
|
163
|
+
records fallback inputs and per-page extraction counts; it does not measure live inference.
|
|
164
|
+
|
|
165
|
+
MinerU revisions whose scheduling tests mock the old full-page raster entry can use
|
|
166
|
+
`python -m pytest -p tools.mineru_render_test_adapter -o addopts= HOST_TEST_PATH`.
|
|
167
|
+
This explicit test-only plugin forwards that mock to the encoded-crop worker boundary;
|
|
168
|
+
it retains page-selection, configuration, title-gating and image-closure assertions.
|
|
169
|
+
The frozen third-round source reproduces the unadapted mock failures too. Real worker
|
|
170
|
+
behavior is checked separately with engine tests and complete PDF/asset comparisons;
|
|
171
|
+
the plugin does not change MinerU application code or production dispatch.
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
Fourth-round kernels require private protocol 5. Rebuild editable native installs after
|
|
175
|
+
updating Python sources; an older extension is rejected by forced Rust selection.
|
|
176
|
+
Statistics preserve even-median arithmetic and stable tie order. Non-finite inputs use
|
|
177
|
+
explicit reference paths. Occupancy caches are local to one table recovery and do not
|
|
178
|
+
retain documents. Font metadata reuse is limited to one typography call and primitive
|
|
179
|
+
dictionary values.
|
|
180
|
+
|
|
181
|
+
Dense table-column clustering preserves first-match decisions and strict-prefix reuse,
|
|
182
|
+
but no longer re-sums each cluster's complete history. Each corridor's anchors are
|
|
183
|
+
prepared once; repeated row appearances still count as separate query positions.
|
|
184
|
+
Table-note body heights use persistent counts indexed by vertical prefixes and stable
|
|
185
|
+
height ranks. A core-row range may skip extra exclusion only when all occurrences of
|
|
186
|
+
every source ID lie inside the exclusion band; other ranges use exact member filtering.
|
|
187
|
+
Marker interpretation remains Python-owned and cached within one candidate build.
|
|
188
|
+
Marker queries visit only untested rows in the current core range and stop on the
|
|
189
|
+
first match. Two compact row bitmaps record tested and matching positions, with at
|
|
190
|
+
most 128 recently used markers per corridor. Eviction recomputes evidence; it never
|
|
191
|
+
removes candidates. No dense source-by-marker matrix of false results is populated.
|
|
192
|
+
Existing first-source cache decisions are respected, including duplicate source IDs.
|
|
193
|
+
Non-contiguous row selections retain the reference path.
|
|
194
|
+
|
|
195
|
+
Row geometry indices preserve original ordering, including non-monotonic bottoms.
|
|
196
|
+
They return coordinate source indices so Python reuses the original float objects;
|
|
197
|
+
ties retain the earlier value, including signed zero. Candidate scoring, all interval
|
|
198
|
+
candidates, annotation stopping rules and merge ordering are unchanged. Contexts keep
|
|
199
|
+
strong row references only within the active call and are never global caches.
|
|
200
|
+
|
|
201
|
+
Installed-wheel checks include `tests/test_native_round4.py`: every prefix's float bits,
|
|
202
|
+
coverage, first-match clustering, quantile ranks, repeated sources, coordinate identity
|
|
203
|
+
and indexed annotation chains are checked against the independent reference. The tests
|
|
204
|
+
assert native state is actually used, not merely that an extension can be imported.
|
|
205
|
+
|
|
206
|
+
The experimental native mapping pre-grouping kernel remains disabled in production:
|
|
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.
|
|
223
|
+
It is retained for differential coverage. No additional environment switch is exposed.
|
|
224
|
+
|
|
225
|
+
For four-way revision acceptance, freeze the old checkout with its matching binary and
|
|
226
|
+
write `benchmark-revision.json` containing its `commit`. Then run:
|
|
227
|
+
|
|
228
|
+
```sh
|
|
229
|
+
python tests/benchmarks/compare_pdf_revisions.py --reference-source OLD_CHECKOUT --extra-path LOCAL_EXTERNAL.pdf --output output/rust/revisions
|
|
230
|
+
python tools/generate_dense_pdf.py output/dense-table.pdf
|
|
231
|
+
python tools/verify_native_wheel.py output/dense-table.pdf
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The revision benchmark compares complete ModelJson, MiddleJson, diagnostics and asset
|
|
235
|
+
hashes, records real source fingerprints, checkpoints every timing run, samples process
|
|
236
|
+
tree RSS separately, and reverses order for regressions above 5%. Local external PDFs
|
|
237
|
+
are identified by SHA256 and are not uploaded to CI. The wheel matrix instead generates
|
|
238
|
+
a deterministic 120-row synthetic table and exercises both pypdfium2 5.10.1 and 5.13.0.
|
|
239
|
+
|
|
240
|
+
Validation tools set the upstream `ORT_DISABLE_TELEMETRY=1` before importing ONNX Runtime
|
|
241
|
+
and record the setting. API suppression alone cannot retract its initialization event
|
|
242
|
+
([upstream details](https://github.com/microsoft/onnxruntime/blob/main/docs/Privacy.md)).
|
|
243
|
+
This prevents a telemetry SDK shutdown race observed on the
|
|
244
|
+
local macOS stack from masking completed PDF results; production runtime settings are
|
|
245
|
+
unchanged. Failed runs remain excluded, and formal comparisons use the same telemetry
|
|
246
|
+
setting for both revisions and backends. Regression retests reverse only affected pairs.
|
|
247
|
+
|
|
248
|
+
RSS is collected in a separate process after one entrypoint warmup. Public parsing is
|
|
249
|
+
sampled before model serialization; shared sampling retains the evidence snapshots but
|
|
250
|
+
does not encode or hash JSON. Output equality is checked after sampling. The complete
|
|
251
|
+
descendant tree includes rendering workers and multiprocessing helpers. This avoids
|
|
252
|
+
mistaking allocator retention from full-output JSON validation for parser memory use.
|
|
253
|
+
Existing timing runs can be audited without discarding their original memory records:
|
|
254
|
+
|
|
255
|
+
```sh
|
|
256
|
+
python tests/benchmarks/pdf_memory.py --timing-report output/rust/revisions/report.json --output output/rust/memory-audit
|
|
257
|
+
```
|
|
@@ -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`。后续文档提交不改变生产源码和二进制;正式记录的测量提交字段保持原样。
|