docvortex 0.5.0__tar.gz → 0.5.1__tar.gz

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