pyxllib 0.3.91__tar.gz → 0.3.92__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 (340) hide show
  1. {pyxllib-0.3.91/pyxllib.egg-info → pyxllib-0.3.92}/PKG-INFO +1 -1
  2. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/echarts.py +2 -2
  3. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/xlsxlib.py +146 -122
  4. {pyxllib-0.3.91 → pyxllib-0.3.92/pyxllib.egg-info}/PKG-INFO +1 -1
  5. {pyxllib-0.3.91 → pyxllib-0.3.92}/setup.py +1 -1
  6. {pyxllib-0.3.91 → pyxllib-0.3.92}/LICENSE +0 -0
  7. {pyxllib-0.3.91 → pyxllib-0.3.92}/MANIFEST.in +0 -0
  8. {pyxllib-0.3.91 → pyxllib-0.3.92}/README.md +0 -0
  9. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/__init__.py +0 -0
  10. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/__init__.py +0 -0
  11. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/disjoint.py +0 -0
  12. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/geo.py +0 -0
  13. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/intervals.py +0 -0
  14. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/matcher.py +0 -0
  15. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/newbie.py +0 -0
  16. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/pupil.py +0 -0
  17. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/shapelylib.py +0 -0
  18. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/specialist.py +0 -0
  19. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/stat.py +0 -0
  20. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/treelib.py +0 -0
  21. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/unitlib.py +0 -0
  22. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/__init__.py +0 -0
  23. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/expert.py +0 -0
  24. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/imfile.py +0 -0
  25. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/imhash.py +0 -0
  26. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/pupil.py +0 -0
  27. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/rgbfmt.py +0 -0
  28. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/trackbartools.py +0 -0
  29. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/xlcvlib.py +0 -0
  30. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/xlpillib.py +0 -0
  31. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/__init__.py +0 -0
  32. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/oss.py +0 -0
  33. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/pglib.py +0 -0
  34. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/sqlite.py +0 -0
  35. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/sqllib.py +0 -0
  36. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/JLineViewer.py +0 -0
  37. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/__init__.py +0 -0
  38. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/__init__.py +0 -0
  39. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/autogui.py +0 -0
  40. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/virtualkey.py +0 -0
  41. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/demolib.py +0 -0
  42. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/kq5034lib.py +0 -0
  43. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/old.py +0 -0
  44. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/qt.py +0 -0
  45. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/seleniumlib.py +0 -0
  46. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/tk.py +0 -0
  47. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/unixlib.py +0 -0
  48. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/utools.py +0 -0
  49. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/webhook.py +0 -0
  50. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/win32lib.py +0 -0
  51. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/yuquelib.py +0 -0
  52. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/__init__.py +0 -0
  53. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/docxlib.py +0 -0
  54. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/gitlib.py +0 -0
  55. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/movielib.py +0 -0
  56. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/newbie.py +0 -0
  57. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/onenotelib.py +0 -0
  58. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/packlib/__init__.py +0 -0
  59. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/packlib/zipfile.py +0 -0
  60. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/pdflib.py +0 -0
  61. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/pupil.py +0 -0
  62. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/__init__.py +0 -0
  63. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/dirlib.py +0 -0
  64. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/download.py +0 -0
  65. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/filelib.py +0 -0
  66. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/__init__.py +0 -0
  67. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/deprecatedlib.py +0 -0
  68. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/ipyexec.py +0 -0
  69. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/newbie.py +0 -0
  70. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/pupil.py +0 -0
  71. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/sitepackages.py +0 -0
  72. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/__init__.py +0 -0
  73. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/bc.py +0 -0
  74. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/browser.py +0 -0
  75. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/common.py +0 -0
  76. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/datetime.py +0 -0
  77. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/tictoc.py +0 -0
  78. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/xllog.py +0 -0
  79. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/xlosenv.py +0 -0
  80. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/__init__.py +0 -0
  81. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  82. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  83. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  84. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/__init__.py +0 -0
  85. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/ahocorasick.py +0 -0
  86. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/charclasslib.py +0 -0
  87. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/jiebalib.py +0 -0
  88. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/jscode.py +0 -0
  89. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/latex/__init__.py +0 -0
  90. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/levenshtein.py +0 -0
  91. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/nestenv.py +0 -0
  92. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/newbie.py +0 -0
  93. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/__init__.py +0 -0
  94. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/common.py +0 -0
  95. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/xlalign.py +0 -0
  96. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pycode.py +0 -0
  97. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/__init__.py +0 -0
  98. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/common.py +0 -0
  99. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/ptag.py +0 -0
  100. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/spellchecker.py +0 -0
  101. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/vbacode.py +0 -0
  102. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/xmllib.py +0 -0
  103. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/xl.py +0 -0
  104. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/xlcv.py +0 -0
  105. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/SOURCES.txt +0 -0
  106. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/dependency_links.txt +0 -0
  107. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/requires.txt +4 -4
  108. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/top_level.txt +0 -0
  109. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/__init__.py +0 -0
  110. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/__init__.py +0 -0
  111. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/clientlib.py +0 -0
  112. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/specialist.py +0 -0
  113. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/torch_app.py +0 -0
  114. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/xlpaddle.py +0 -0
  115. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/xltorch.py +0 -0
  116. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/__init__.py +0 -0
  117. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/coco.py +0 -0
  118. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/datacls.py +0 -0
  119. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/datasets.py +0 -0
  120. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/gptlib.py +0 -0
  121. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/__init__.py +0 -0
  122. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/deteval.py +0 -0
  123. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/icdar2013.py +0 -0
  124. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/iou.py +0 -0
  125. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  126. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/imtextline.py +0 -0
  127. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/labelme.py +0 -0
  128. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/removeline.py +0 -0
  129. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/specialist.py +0 -0
  130. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/eval/__init__.py +0 -0
  131. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/paddleocr.py +0 -0
  132. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/__init__.py +0 -0
  133. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  134. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/__init__.py +0 -0
  135. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  136. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  137. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  138. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  139. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  140. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  141. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  142. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  143. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  144. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  145. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  146. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  147. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  148. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  149. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  150. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  151. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  152. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  153. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  154. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  155. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  156. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  157. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  158. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/__init__.py +0 -0
  159. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  160. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  161. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  162. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  163. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  164. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  165. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  166. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  167. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  168. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  169. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  170. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  171. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  172. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  173. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  174. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  175. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  176. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  177. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  178. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  179. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  180. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  181. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  182. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  183. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  184. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  185. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  186. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  187. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  188. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  189. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  190. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  191. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  192. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  193. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  194. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  195. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  196. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  197. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  198. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  199. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  200. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  201. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  202. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  203. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  204. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  205. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  206. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  207. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  208. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  209. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  210. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  211. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  212. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  213. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  214. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  215. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  216. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  217. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  218. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  219. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  220. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  221. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  222. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  223. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  224. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  225. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  226. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  227. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  228. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  229. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  230. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  231. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  232. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  233. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  234. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  235. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  236. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  237. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  238. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  239. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  240. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  241. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  242. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  243. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  244. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  245. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  246. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  247. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  248. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  249. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  250. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  251. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/__init__.py +0 -0
  252. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/eval.py +0 -0
  253. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/export_center.py +0 -0
  254. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/export_model.py +0 -0
  255. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  256. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  257. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  258. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  259. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  260. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  261. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  262. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  263. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  264. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  265. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  266. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  267. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/program.py +0 -0
  268. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  269. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/train.py +0 -0
  270. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  271. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  272. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/__init__.py +0 -0
  273. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  274. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  275. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  276. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  277. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  278. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  279. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  280. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  281. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  282. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  283. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  284. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  285. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  286. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  287. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  288. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  289. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  290. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  291. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  292. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  293. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  294. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  295. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  296. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  297. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  298. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  299. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  300. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  301. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  302. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  303. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  304. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  305. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  306. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  307. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  308. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  309. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  310. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  311. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  312. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  313. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  314. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  315. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  316. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/iou.py +0 -0
  317. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/logging.py +0 -0
  318. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/network.py +0 -0
  319. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  320. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/profiler.py +0 -0
  321. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/save_load.py +0 -0
  322. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/stats.py +0 -0
  323. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/utility.py +0 -0
  324. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/__init__.py +0 -0
  325. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/predict_system.py +0 -0
  326. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/__init__.py +0 -0
  327. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  328. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/matcher.py +0 -0
  329. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  330. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  331. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  332. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  333. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  334. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  335. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  336. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  337. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/utility.py +0 -0
  338. {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/xlai.py +0 -0
  339. {pyxllib-0.3.91 → pyxllib-0.3.92}/requirements.txt +0 -0
  340. {pyxllib-0.3.91 → pyxllib-0.3.92}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.91
3
+ Version: 0.3.92
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -29,7 +29,7 @@ class XlChart(Chart):
29
29
  def set_title(self, title):
30
30
  self.set_global_opts(title_opts=pyecharts.options.TitleOpts(title=title))
31
31
 
32
- def add_series(self, name, data, *, type=None, color=None, is_selected=True, labels=None,
32
+ def add_series(self, name, data, *, type=None, color=None, labels=None,
33
33
  **kwargs):
34
34
  """ 垃圾pyecharts,毁我青春~~
35
35
 
@@ -54,7 +54,7 @@ class XlChart(Chart):
54
54
  kwargs['label']['formatter'] = fmt
55
55
 
56
56
  self._append_color(color)
57
- self._append_legend(name, is_selected)
57
+ self._append_legend(name)
58
58
 
59
59
  self.options.get('series').append(
60
60
  {
@@ -721,40 +721,58 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
721
721
  right=self.max_column, bottom=self.max_row)
722
722
  return raw_used_range
723
723
 
724
- @run_once('id,str') # 同一个表,同一行不会重复计算
725
724
  def is_empty_row(self, row, start_col, end_col):
726
- cur_col = start_col
727
- # 特地提前检查下最后一列的那个单元格
728
- if self.cell(row, end_col).value is not None:
729
- return False
730
- while cur_col <= end_col:
731
- if self.cell(row, cur_col).value is not None:
725
+ if not hasattr(self, 'is_empty_row_cache'):
726
+ self.is_empty_row_cache = {}
727
+ key = (row, start_col, end_col)
728
+
729
+ def is_empty_row_core():
730
+ cur_col = start_col
731
+ # 特地提前检查下最后一列的那个单元格
732
+ if self.cell(row, end_col).value is not None:
732
733
  return False
733
- # 步长随着尝试的增加,也逐渐降低采样率
734
- n = cur_col - start_col + 1
735
- # 在最大值m=16384列情况下,/1000,最多检索3404个单元格,/100,最多检索569次,/50最多检索320次
736
- # cur_col += (n // 50) + 1
737
- # 再变形,加强前面权重,大大降低后面权重
738
- if n <= 100:
739
- cur_col += 1
740
- else: # 最多54次
741
- cur_col += (n // 10)
734
+ while cur_col <= end_col:
735
+ if self.cell(row, cur_col).value is not None:
736
+ return False
737
+ # 步长随着尝试的增加,也逐渐降低采样率
738
+ n = cur_col - start_col + 1
739
+ # 在最大值m=16384列情况下,/1000,最多检索3404个单元格,/100,最多检索569次,/50最多检索320次
740
+ # cur_col += (n // 50) + 1
741
+ # 再变形,加强前面权重,大大降低后面权重
742
+ if n <= 100:
743
+ cur_col += 1
744
+ else: # 最多54次
745
+ cur_col += (n // 10)
746
+
747
+ return True
748
+
749
+ if key not in self.is_empty_row_cache:
750
+ self.is_empty_row_cache[key] = is_empty_row_core()
751
+
752
+ return self.is_empty_row_cache[key]
742
753
 
743
- return True
744
-
745
- @run_once('id,str') # 同一个表,同一列不会重复计算
746
754
  def is_empty_column(self, col, start_row, end_row):
747
- cur_row = start_row
748
- # 特地提前检查下最后一行的那个单元格
749
- if self.cell(end_row, col).value is not None:
750
- return False
751
- while cur_row <= end_row:
752
- if self.cell(cur_row, col).value is not None:
755
+ if not hasattr(self, 'is_empty_column_cache'):
756
+ self.is_empty_column_cache = {}
757
+ key = (col, start_row, end_row)
758
+
759
+ def is_empty_column_core():
760
+ cur_row = start_row
761
+ # 特地提前检查下最后一行的那个单元格
762
+ if self.cell(end_row, col).value is not None:
753
763
  return False
754
- n = cur_row - start_row + 1
755
- # 在最大值n=1048576行情况下,/1000,最多检索7535个单元格,/100,最多检索987次,/50最多检索530次
756
- cur_row += (n // 1000) + 1
757
- return True
764
+ while cur_row <= end_row:
765
+ if self.cell(cur_row, col).value is not None:
766
+ return False
767
+ n = cur_row - start_row + 1
768
+ # 在最大值n=1048576行情况下,/1000,最多检索7535个单元格,/100,最多检索987次,/50最多检索530次
769
+ cur_row += (n // 1000) + 1
770
+ return True
771
+
772
+ if key not in self.is_empty_column_cache:
773
+ self.is_empty_column_cache[key] = is_empty_column_core()
774
+
775
+ return self.is_empty_column_cache[key]
758
776
 
759
777
  def find_last_non_empty_row(self, start_row, end_row, start_col, end_col, m=30):
760
778
  # 1 如果剩余行数不多(小于等于m),直接遍历这些行
@@ -864,7 +882,6 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
864
882
  # 如果所有分割点都是空的,则返回-1
865
883
  return -1
866
884
 
867
- @run_once('id,str') # 同一个表,同一行不会重复计算
868
885
  def get_usedrange(self):
869
886
  """ 定位有效数据区间。
870
887
 
@@ -891,48 +908,48 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
891
908
 
892
909
  :param reset_bounds: 计算出新区域后,是否重置ws的边界值
893
910
  """
894
- from pyxllib.prog.newbie import get_global_var
895
-
896
- # 初始化边界值
897
- left, right, top, bottom = self.min_column, self.max_column, self.min_row, self.max_row
898
-
899
- # start_time = time.time()
900
- # 使用优化后的函数找到最下方的行和最右边的列
901
- bottom = self.find_last_non_empty_row(top, bottom, left, right)
902
- if bottom == -1:
903
- return 'A1' # 空表返回A1占位
904
- right = self.find_last_non_empty_column(left, right, top, bottom)
905
- if right == -1:
906
- return 'A1'
907
-
908
- # 使用优化后的函数找到最上方的行和最左边的列
909
- top = self.find_first_non_empty_row(top, bottom, left, right)
910
- if top == -1:
911
- return 'A1'
912
- left = self.find_first_non_empty_column(left, right, top, bottom)
913
- if left == -1:
914
- return 'A1'
915
- # get_global_var('get_usedrange_time')[-1] += time.time() - start_time
916
-
917
- # 2 然后还要再扩范围(根据合并单元格情况)
918
- # start_time = time.time()
919
- top0, bottom0, left0, right0 = top, bottom, left, right
920
- for merged_range in self.merged_cells.ranges:
921
- l, t, r, b = merged_range.bounds
922
- if top0 <= b <= bottom0 or top0 <= t <= bottom0:
923
- if left0 <= r and l < left:
924
- left = l
925
- if l <= right0 and r > right:
926
- right = r
927
- if left0 <= r <= right0 or left0 <= l <= right0:
928
- if top0 <= b and t < top:
929
- top = t
930
- if t <= bottom0 and b > bottom:
931
- bottom = b
932
- # get_global_var('expandrange_time')[-1] += time.time() - start_time
933
-
934
- used_range = build_range_address(left=left, top=top, right=right, bottom=bottom)
935
- return used_range
911
+ if not hasattr(self, 'usedrange_cache'):
912
+ # 初始化边界值
913
+ left, right, top, bottom = self.min_column, self.max_column, self.min_row, self.max_row
914
+
915
+ # start_time = time.time()
916
+ # 使用优化后的函数找到最下方的行和最右边的列
917
+ bottom = self.find_last_non_empty_row(top, bottom, left, right)
918
+ if bottom == -1:
919
+ return 'A1' # 空表返回A1占位
920
+ right = self.find_last_non_empty_column(left, right, top, bottom)
921
+ if right == -1:
922
+ return 'A1'
923
+
924
+ # 使用优化后的函数找到最上方的行和最左边的列
925
+ top = self.find_first_non_empty_row(top, bottom, left, right)
926
+ if top == -1:
927
+ return 'A1'
928
+ left = self.find_first_non_empty_column(left, right, top, bottom)
929
+ if left == -1:
930
+ return 'A1'
931
+ # get_global_var('get_usedrange_time')[-1] += time.time() - start_time
932
+
933
+ # 2 然后还要再扩范围(根据合并单元格情况)
934
+ # start_time = time.time()
935
+ top0, bottom0, left0, right0 = top, bottom, left, right
936
+ for merged_range in self.merged_cells.ranges:
937
+ l, t, r, b = merged_range.bounds
938
+ if top0 <= b <= bottom0 or top0 <= t <= bottom0:
939
+ if left0 <= r and l < left:
940
+ left = l
941
+ if l <= right0 and r > right:
942
+ right = r
943
+ if left0 <= r <= right0 or left0 <= l <= right0:
944
+ if top0 <= b and t < top:
945
+ top = t
946
+ if t <= bottom0 and b > bottom:
947
+ bottom = b
948
+ # get_global_var('expandrange_time')[-1] += time.time() - start_time
949
+
950
+ self.used_range = build_range_address(left=left, top=top, right=right, bottom=bottom)
951
+
952
+ return self.used_range
936
953
 
937
954
  def copy_worksheet(self, dst_ws):
938
955
  """跨工作薄时复制表格内容的功能
@@ -967,7 +984,6 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
967
984
  else:
968
985
  yield tuple(cells)
969
986
 
970
- @run_once('id,str')
971
987
  def search(self, pattern, min_row=None, max_row=None, min_col=None, max_col=None, order=None, direction=0):
972
988
  """ 查找满足pattern正则表达式的单元格
973
989
 
@@ -987,40 +1003,50 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
987
1003
  >> ws.search('年段')
988
1004
  <Cell '预算总表'.B2>
989
1005
  """
990
- # 1 定界
991
- x1, x2 = max(min_row or 1, 1), min(max_row or self.max_row, self.max_row)
992
- y1, y2 = max(min_col or 1, 1), min(max_col or self.max_column, self.max_column)
993
-
994
- # 2 遍历
995
- if isinstance(pattern, datetime.date):
996
- pattern = f'^{(pattern - datetime.date(1899, 12, 30)).days}$'
997
-
998
- if isinstance(pattern, (list, tuple)):
999
- cel = None
1000
- for p in pattern:
1001
- cel = self.search(p, x1, x2, y1, y2, order)
1002
- if cel:
1003
- # up, down, left, right 找到的单元格四边界
1004
- l, u, r, d = getattr(cel.in_range(), 'bounds', (cel.column, cel.row, cel.column, cel.row))
1005
- if direction == 0:
1006
- x1, x2, y1, y2 = max(x1, d + 1), x2, max(y1, l), min(y2, r)
1007
- elif direction == 1:
1008
- x1, x2, y1, y2 = max(x1, u), min(x2, d), max(y1, r + 1), y2
1009
- elif direction == 2:
1010
- x1, x2, y1, y2 = x1, min(x2, u - 1), max(y1, l), min(y2, r)
1011
- elif direction == 3:
1012
- x1, x2, y1, y2 = max(x1, u), min(x2, d), y1, min(y2, l - 1)
1006
+ if not hasattr(self, 'search_cache'):
1007
+ self.search_cache = {}
1008
+ key = (pattern, min_row, max_row, min_col, max_col, order, direction)
1009
+
1010
+ def get_search_core():
1011
+ # 1 定界
1012
+ x1, x2 = max(min_row or 1, 1), min(max_row or self.max_row, self.max_row)
1013
+ y1, y2 = max(min_col or 1, 1), min(max_col or self.max_column, self.max_column)
1014
+
1015
+ # 2 遍历
1016
+ if isinstance(pattern, datetime.date):
1017
+ pattern = f'^{(pattern - datetime.date(1899, 12, 30)).days}$'
1018
+
1019
+ if isinstance(pattern, (list, tuple)):
1020
+ cel = None
1021
+ for p in pattern:
1022
+ cel = self.search(p, x1, x2, y1, y2, order)
1023
+ if cel:
1024
+ # up, down, left, right 找到的单元格四边界
1025
+ l, u, r, d = getattr(cel.in_range(), 'bounds', (cel.column, cel.row, cel.column, cel.row))
1026
+ if direction == 0:
1027
+ x1, x2, y1, y2 = max(x1, d + 1), x2, max(y1, l), min(y2, r)
1028
+ elif direction == 1:
1029
+ x1, x2, y1, y2 = max(x1, u), min(x2, d), max(y1, r + 1), y2
1030
+ elif direction == 2:
1031
+ x1, x2, y1, y2 = x1, min(x2, u - 1), max(y1, l), min(y2, r)
1032
+ elif direction == 3:
1033
+ x1, x2, y1, y2 = max(x1, u), min(x2, d), y1, min(y2, l - 1)
1034
+ else:
1035
+ raise ValueError(f'direction参数值错误{direction}')
1013
1036
  else:
1014
- raise ValueError(f'direction参数值错误{direction}')
1015
- else:
1016
- return None
1017
- return cel
1018
- else:
1019
- if isinstance(pattern, str): pattern = re.compile(pattern)
1020
- for x, y in product(range(x1, x2 + 1), range(y1, y2 + 1), order=order):
1021
- cell = self.cell(x, y)
1022
- if cell.celltype() == 1: continue # 过滤掉合并单元格位置
1023
- if pattern.search(str(cell.value)): return cell # 返回满足条件的第一个值
1037
+ return None
1038
+ return cel
1039
+ else:
1040
+ if isinstance(pattern, str): pattern = re.compile(pattern)
1041
+ for x, y in product(range(x1, x2 + 1), range(y1, y2 + 1), order=order):
1042
+ cell = self.cell(x, y)
1043
+ if cell.celltype() == 1: continue # 过滤掉合并单元格位置
1044
+ if pattern.search(str(cell.value)): return cell # 返回满足条件的第一个值
1045
+
1046
+ if key not in self.search_cache:
1047
+ self.search_cache[key] = get_search_core()
1048
+
1049
+ return self.search_cache[key]
1024
1050
 
1025
1051
  findcel = search
1026
1052
 
@@ -1571,12 +1597,12 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
1571
1597
  current_alignment_dict.pop('wrapText', None)
1572
1598
  cell.alignment = Alignment(wrapText=True, **current_alignment_dict)
1573
1599
 
1574
- @run_once('id,str')
1575
1600
  def get_sorted_merged_cells(self):
1576
1601
  """ 将合并单元格按照行列顺序排列。
1577
1602
  """
1578
- rngs = list(sorted(self.merged_cells.ranges, key=lambda x: (x.min_row, x.min_col)))
1579
- return rngs
1603
+ if not hasattr(self, 'sorted_merged_cells'):
1604
+ self.sorted_merged_cells = list(sorted(self.merged_cells.ranges, key=lambda x: (x.min_row, x.min_col)))
1605
+ return self.sorted_merged_cells
1580
1606
 
1581
1607
 
1582
1608
  inject_members(XlWorksheet, openpyxl.worksheet.worksheet.Worksheet, white_list=['_cells_by_row'])
@@ -2390,7 +2416,8 @@ def extract_workbook_summary2(file_path, *,
2390
2416
  if mode == 1:
2391
2417
  ws = wb.active
2392
2418
  res['ActiveSheet'] = ws.title
2393
- res['Selection'] = ws.selected_cell
2419
+ if hasattr(ws, 'selected_cell'):
2420
+ res['Selection'] = ws.selected_cell
2394
2421
 
2395
2422
  # res = convert_to_json_compatible(res)
2396
2423
 
@@ -2845,7 +2872,8 @@ class WorkbookSummary3:
2845
2872
  'sheets': x['sheets'],
2846
2873
  'mode': 'Complete information',
2847
2874
  'ActiveSheet': x['ActiveSheet'], # 当期激活的工作表
2848
- 'Selection': x['Selection'],
2875
+ # 最多截取250个字符。(一般情况下这个很小的,只是在很极端情况,比如离散选中了非常多区域,这个可能就会太长
2876
+ 'Selection': x['Selection'][:250],
2849
2877
  }
2850
2878
 
2851
2879
  # 处理前确保下cells字段存在,避免后续很多处理过程要特判
@@ -2876,6 +2904,7 @@ def extract_workbook_summary3b(file_path,
2876
2904
  summary_limit_len=4000,
2877
2905
  timeout_seconds=60,
2878
2906
  return_mode=0,
2907
+ debug=False,
2879
2908
  **kwargs):
2880
2909
  """
2881
2910
 
@@ -2885,17 +2914,9 @@ def extract_workbook_summary3b(file_path,
2885
2914
  :param kwargs: 其他是summary2读取文件的时候的参数,其实都不太关键,一般不用特地设置
2886
2915
  """
2887
2916
  res = {}
2888
- res['fileName'] = file_path.name
2917
+ res['fileName'] = Path(file_path).name
2889
2918
  load_time = summary2_time = summary3_time = -1
2890
2919
 
2891
- # with Timeout(timeout_seconds):
2892
- # start_time = time.time()
2893
- # res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
2894
- # summary2_time = time.time() - start_time - load_time
2895
- # start_time = time.time()
2896
- # res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
2897
- # summary3_time = time.time() - start_time
2898
-
2899
2920
  try:
2900
2921
  with Timeout(timeout_seconds):
2901
2922
  start_time = time.time()
@@ -2905,10 +2926,13 @@ def extract_workbook_summary3b(file_path,
2905
2926
  start_time = time.time()
2906
2927
  res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
2907
2928
  summary3_time = time.time() - start_time
2908
- except TimeoutError:
2929
+ except TimeoutError as e:
2930
+ if debug:
2931
+ raise e
2909
2932
  res['error'] = f'超时,未完成摘要提取:{timeout_seconds}秒'
2910
2933
  except Exception as e:
2911
- # raise e
2934
+ if debug:
2935
+ raise e
2912
2936
  res['error'] = f'提取摘要时发生错误:{format_exception(e, 2)}'
2913
2937
 
2914
2938
  if return_mode == 1:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.91
3
+ Version: 0.3.92
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
30
30
 
31
31
  setup(
32
32
  name='pyxllib', # pip 安装时用的名字
33
- version='0.3.91', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
33
+ version='0.3.92', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
34
34
  author='code4101',
35
35
  author_email='877362867@qq.com',
36
36
  url='https://github.com/XLPRUtils/pyxllib',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes