pyxllib 0.3.88__tar.gz → 0.3.89__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.88/pyxllib.egg-info → pyxllib-0.3.89}/PKG-INFO +1 -1
  2. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/unixlib.py +2 -2
  3. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/packlib/__init__.py +6 -2
  4. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/xlsxlib.py +155 -132
  5. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/pupil.py +11 -1
  6. {pyxllib-0.3.88 → pyxllib-0.3.89/pyxllib.egg-info}/PKG-INFO +1 -1
  7. {pyxllib-0.3.88 → pyxllib-0.3.89}/setup.py +1 -1
  8. {pyxllib-0.3.88 → pyxllib-0.3.89}/LICENSE +0 -0
  9. {pyxllib-0.3.88 → pyxllib-0.3.89}/MANIFEST.in +0 -0
  10. {pyxllib-0.3.88 → pyxllib-0.3.89}/README.md +0 -0
  11. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/__init__.py +0 -0
  12. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/__init__.py +0 -0
  13. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/disjoint.py +0 -0
  14. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/geo.py +0 -0
  15. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/intervals.py +0 -0
  16. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/matcher.py +0 -0
  17. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/newbie.py +0 -0
  18. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/pupil.py +0 -0
  19. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/shapelylib.py +0 -0
  20. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/specialist.py +0 -0
  21. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/stat.py +0 -0
  22. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/treelib.py +0 -0
  23. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/algo/unitlib.py +0 -0
  24. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/__init__.py +0 -0
  25. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/expert.py +0 -0
  26. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/imfile.py +0 -0
  27. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/imhash.py +0 -0
  28. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/pupil.py +0 -0
  29. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/rgbfmt.py +0 -0
  30. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/trackbartools.py +0 -0
  31. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/xlcvlib.py +0 -0
  32. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/cv/xlpillib.py +0 -0
  33. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/__init__.py +0 -0
  34. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/echarts.py +0 -0
  35. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/oss.py +0 -0
  36. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/pglib.py +0 -0
  37. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/sqlite.py +0 -0
  38. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/data/sqllib.py +0 -0
  39. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/JLineViewer.py +0 -0
  40. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/__init__.py +0 -0
  41. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/autogui/__init__.py +0 -0
  42. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/autogui/autogui.py +0 -0
  43. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/autogui/virtualkey.py +0 -0
  44. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/demolib.py +0 -0
  45. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/kq5034lib.py +0 -0
  46. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/old.py +0 -0
  47. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/qt.py +0 -0
  48. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/seleniumlib.py +0 -0
  49. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/tk.py +0 -0
  50. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/utools.py +0 -0
  51. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/webhook.py +0 -0
  52. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/win32lib.py +0 -0
  53. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/ext/yuquelib.py +0 -0
  54. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/__init__.py +0 -0
  55. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/docxlib.py +0 -0
  56. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/gitlib.py +0 -0
  57. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/movielib.py +0 -0
  58. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/newbie.py +0 -0
  59. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/onenotelib.py +0 -0
  60. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/packlib/zipfile.py +0 -0
  61. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/pdflib.py +0 -0
  62. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/pupil.py +0 -0
  63. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/specialist/__init__.py +0 -0
  64. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/specialist/dirlib.py +0 -0
  65. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/specialist/download.py +0 -0
  66. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/file/specialist/filelib.py +0 -0
  67. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/__init__.py +0 -0
  68. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/deprecatedlib.py +0 -0
  69. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/ipyexec.py +0 -0
  70. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/newbie.py +0 -0
  71. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/sitepackages.py +0 -0
  72. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/__init__.py +0 -0
  73. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/bc.py +0 -0
  74. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/browser.py +0 -0
  75. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/common.py +0 -0
  76. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/datetime.py +0 -0
  77. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/tictoc.py +0 -0
  78. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/specialist/xllog.py +0 -0
  79. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/prog/xlosenv.py +0 -0
  80. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/stdlib/__init__.py +0 -0
  81. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  82. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  83. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  84. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/__init__.py +0 -0
  85. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/ahocorasick.py +0 -0
  86. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/charclasslib.py +0 -0
  87. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/jiebalib.py +0 -0
  88. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/jscode.py +0 -0
  89. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/latex/__init__.py +0 -0
  90. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/levenshtein.py +0 -0
  91. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/nestenv.py +0 -0
  92. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/newbie.py +0 -0
  93. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/pupil/__init__.py +0 -0
  94. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/pupil/common.py +0 -0
  95. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/pupil/xlalign.py +0 -0
  96. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/pycode.py +0 -0
  97. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/specialist/__init__.py +0 -0
  98. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/specialist/common.py +0 -0
  99. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/specialist/ptag.py +0 -0
  100. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/spellchecker.py +0 -0
  101. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/vbacode.py +0 -0
  102. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/text/xmllib.py +0 -0
  103. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/xl.py +0 -0
  104. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib/xlcv.py +0 -0
  105. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib.egg-info/SOURCES.txt +0 -0
  106. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib.egg-info/dependency_links.txt +0 -0
  107. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib.egg-info/requires.txt +3 -3
  108. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxllib.egg-info/top_level.txt +0 -0
  109. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/__init__.py +0 -0
  110. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/__init__.py +0 -0
  111. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/clientlib.py +0 -0
  112. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/specialist.py +0 -0
  113. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/torch_app.py +0 -0
  114. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/xlpaddle.py +0 -0
  115. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ai/xltorch.py +0 -0
  116. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/__init__.py +0 -0
  117. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/coco.py +0 -0
  118. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/datacls.py +0 -0
  119. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/datasets.py +0 -0
  120. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/gptlib.py +0 -0
  121. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/icdar/__init__.py +0 -0
  122. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/icdar/deteval.py +0 -0
  123. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/icdar/icdar2013.py +0 -0
  124. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/icdar/iou.py +0 -0
  125. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  126. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/imtextline.py +0 -0
  127. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/labelme.py +0 -0
  128. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/removeline.py +0 -0
  129. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/data/specialist.py +0 -0
  130. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/eval/__init__.py +0 -0
  131. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/paddleocr.py +0 -0
  132. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/__init__.py +0 -0
  133. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  134. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/__init__.py +0 -0
  135. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  136. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  137. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  138. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  139. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  140. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  141. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  142. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  143. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  144. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  145. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  146. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  147. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  148. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  149. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  150. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  151. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  152. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  153. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  154. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  155. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  156. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  157. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  158. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/__init__.py +0 -0
  159. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  160. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  161. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  162. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  163. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  164. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  165. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  166. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  167. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  168. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  169. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  170. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  171. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  172. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  173. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  174. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  175. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  176. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  177. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  178. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  179. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  180. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  181. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  182. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  183. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  184. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  185. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  186. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  187. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  188. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  189. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  190. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  191. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  192. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  193. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  194. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  195. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  196. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  197. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  198. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  199. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  200. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  201. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  202. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  203. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  204. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  205. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  206. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  207. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  208. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  209. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  210. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  211. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  212. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  213. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  214. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  215. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  216. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  217. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  218. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  219. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  220. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  221. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  222. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  223. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  224. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  225. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  226. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  227. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  228. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  229. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  230. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  231. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  232. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  233. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  234. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  235. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  236. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  237. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  238. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  239. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  240. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  241. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  242. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  243. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  244. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  245. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  246. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  247. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  248. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  249. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  250. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  251. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/__init__.py +0 -0
  252. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/eval.py +0 -0
  253. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/export_center.py +0 -0
  254. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/export_model.py +0 -0
  255. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  256. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  257. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  258. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  259. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  260. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  261. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  262. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  263. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  264. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  265. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  266. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  267. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/program.py +0 -0
  268. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  269. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/train.py +0 -0
  270. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  271. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  272. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/__init__.py +0 -0
  273. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  274. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  275. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  276. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  277. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  278. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  279. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  280. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  281. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  282. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  283. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  284. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  285. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  286. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  287. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  288. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  289. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  290. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  291. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  292. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  293. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  294. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  295. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  296. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  297. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  298. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  299. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  300. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  301. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  302. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  303. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  304. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  305. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  306. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  307. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  308. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  309. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  310. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  311. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  312. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  313. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  314. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  315. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  316. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/iou.py +0 -0
  317. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/logging.py +0 -0
  318. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/network.py +0 -0
  319. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  320. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/profiler.py +0 -0
  321. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/save_load.py +0 -0
  322. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/stats.py +0 -0
  323. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppocr/utils/utility.py +0 -0
  324. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/__init__.py +0 -0
  325. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/predict_system.py +0 -0
  326. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/__init__.py +0 -0
  327. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  328. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/matcher.py +0 -0
  329. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  330. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  331. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  332. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  333. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  334. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  335. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  336. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  337. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/ppstructure/utility.py +0 -0
  338. {pyxllib-0.3.88 → pyxllib-0.3.89}/pyxlpr/xlai.py +0 -0
  339. {pyxllib-0.3.88 → pyxllib-0.3.89}/requirements.txt +0 -0
  340. {pyxllib-0.3.88 → pyxllib-0.3.89}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.88
3
+ Version: 0.3.89
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -295,7 +295,7 @@ class XlSSHClient(paramiko.SSHClient):
295
295
  return (XlPath(k) / relpath).parent
296
296
  except ValueError:
297
297
  pass
298
- raise ValueError('找不到对应的map_path路径映射规则')
298
+ raise ValueError(f'找不到对应的map_path路径映射规则 {remote_path}')
299
299
 
300
300
  def __remote_dir(self, local_path, remote_dir):
301
301
  if remote_dir is not None:
@@ -415,7 +415,7 @@ class XlSSHClient(paramiko.SSHClient):
415
415
  remote_path = self.__remote_dir(local_path, None) / local_path.name
416
416
  local_dir = local_path.parent
417
417
  else:
418
- remote_path = self.Path(remote_path)
418
+ remote_path = self.Path(remote_path.as_posix())
419
419
  local_dir = self.__local_dir(remote_path, local_dir)
420
420
  local_path = local_dir / remote_path.name
421
421
 
@@ -276,14 +276,18 @@ def smart_compress_zip(root, paths, check_func=None):
276
276
 
277
277
  root = XlPath(root)
278
278
  num = len(paths)
279
+ outfile = None
279
280
  if num > 1:
280
- zipf = XlZipFile(root.name + '.zip', 'w', zipfile.ZIP_DEFLATED)
281
+ outfile = root.parent / XlPath(root.name + '.zip')
281
282
  elif num == 1:
282
- zipf = XlZipFile(XlPath(paths[0]).name + '.zip', 'w', zipfile.ZIP_DEFLATED)
283
+ outfile = root.parent / (XlPath(paths[0]).name + '.zip')
283
284
  else:
284
285
  return
286
+ zipf = XlZipFile(outfile, 'w', zipfile.ZIP_DEFLATED)
285
287
 
286
288
  for subroot in paths:
287
289
  add_path(XlPath(subroot))
288
290
 
289
291
  zipf.close()
292
+
293
+ return outfile
@@ -2,7 +2,7 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  # @Author : 陈坤泽
4
4
  # @Email : 877362867@qq.com
5
- # @Date : 2020/06/02
5
+ # @Date : 2024/01/07
6
6
 
7
7
  """
8
8
  扩展了些自己的openpyxl工具
@@ -48,7 +48,7 @@ from pyxllib.file.specialist import XlPath
48
48
 
49
49
 
50
50
  def __1_basic():
51
- """ 基础组件 """
51
+ """ 表格的组件功能 """
52
52
 
53
53
 
54
54
  def excel_addr(n, m) -> str:
@@ -92,8 +92,8 @@ def is_valid_excel_range(range):
92
92
  if ':' in range:
93
93
  start, end = range.split(':')
94
94
  return (is_valid_excel_cell(start) or start.isdigit() or re.fullmatch(r'[A-Z]+', start)) and \
95
- (is_valid_excel_cell(end) or end.isdigit() or re.fullmatch(r'[A-Z]+', end)) and \
96
- start <= end
95
+ (is_valid_excel_cell(end) or end.isdigit() or re.fullmatch(r'[A-Z]+', end)) and \
96
+ start <= end
97
97
  else:
98
98
  return is_valid_excel_cell(range)
99
99
 
@@ -279,6 +279,19 @@ def sort_excel_files(file_paths):
279
279
  return file_paths2
280
280
 
281
281
 
282
+ def excel2md5(file, reduction_degree=1):
283
+ try:
284
+ wb = openpyxl.load_workbook(file)
285
+ except (ValueError, TypeError) as e:
286
+ # 有些表格直接读取会失败,但使用read_only就能读了
287
+ wb = openpyxl.load_workbook(file, read_only=True)
288
+ except Exception as e: # 还有其他zipfile.BadZipFile等错误
289
+ print(file, str(e))
290
+ return ''
291
+
292
+ return wb.to_md5(reduction_degree)
293
+
294
+
282
295
  def convert_csv_to_xlsx(csv_file):
283
296
  """ 将 csv 文件转换为 xlsx 文件 """
284
297
  wb = Workbook()
@@ -317,8 +330,8 @@ def convert_xls_to_xlsx(xls_file):
317
330
  return wb
318
331
 
319
332
 
320
- def __2_extend_methods():
321
- """ 给各种类扩展的成员方法 """
333
+ def __2_openpyxl_class():
334
+ """ 对openpyxl已有类的功能的增强 """
322
335
 
323
336
 
324
337
  class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCell,但这里不能多重继承
@@ -1632,80 +1645,11 @@ class XlWorkbook(openpyxl.Workbook):
1632
1645
 
1633
1646
  return workbook_summary
1634
1647
 
1635
- def extract_summary3(self):
1636
- """ 另一套按照单元格提取摘要的程序 """
1637
- wb = self
1638
-
1639
- all_sheets_summary = []
1640
-
1641
- for ws in wb._sheets: # 非数据表,也要遍历出来,所以使用了_sheets
1642
- # 如果是标准工作表(Worksheet),使用现有的摘要提取机制
1643
- if isinstance(ws, openpyxl.worksheet.worksheet.Worksheet):
1644
- # 找到使用范围和表头范围
1645
- raw_used_range = ws.get_raw_usedrange()
1646
- if raw_used_range:
1647
- used_range = ws.get_usedrange()
1648
- summary = ({
1649
- "sheetName": ws.title,
1650
- "sheetType": "Worksheet",
1651
- "rawUsedRange": raw_used_range,
1652
- "usedRange": used_range,
1653
-
1654
- })
1655
- summary['tables'] = ws.find_tables(used_range)
1656
-
1657
- # 'cells': extract_cells_content(ws) # todo 改进点
1658
-
1659
- # todo 231213周三21:36,好久没看,我都不确定这种类型问题了,后面要再核对一遍
1660
- if not summary['cells']: # 如果没有数据,则大概率是数据透视表,是计算出来的,读取不到~
1661
- summary['sheetType'] = 'PivotTable'
1662
- del summary['cells']
1663
- else:
1664
- summary = ({
1665
- "sheetName": ws.title,
1666
- "sheetType": "DialogOrMacroSheet",
1667
- "usedRange": None,
1668
- })
1669
-
1670
- # 如果是其他类型的工作表,提供基础摘要
1671
- else:
1672
- summary = ({
1673
- "sheetName": ws.title,
1674
- "sheetType": ws.__class__.__name__ # 使用工作表的类名作为类型
1675
- })
1676
-
1677
- all_sheets_summary.append(summary)
1678
-
1679
- workbook_summary = {
1680
- "fileName": Path(self.path).name if self.path else None,
1681
- "sheetNames": wb.sheetnames,
1682
- "sheets": all_sheets_summary,
1683
- }
1684
-
1685
- return workbook_summary
1686
-
1687
1648
 
1688
1649
  inject_members(XlWorkbook, openpyxl.Workbook)
1689
1650
 
1690
1651
 
1691
- def __3_hash():
1692
- """ 表格的哈希表达 """
1693
-
1694
-
1695
- def excel2md5(file, reduction_degree=1):
1696
- try:
1697
- wb = openpyxl.load_workbook(file)
1698
- except (ValueError, TypeError) as e:
1699
- # 有些表格直接读取会失败,但使用read_only就能读了
1700
- wb = openpyxl.load_workbook(file, read_only=True)
1701
- except Exception as e: # 还有其他zipfile.BadZipFile等错误
1702
- print(file, str(e))
1703
- return ''
1704
-
1705
- return wb.to_md5(reduction_degree)
1706
-
1707
-
1708
- def __4_extract_summary():
1652
+ def __3_extract_summary():
1709
1653
  """ 提取表格摘要 """
1710
1654
 
1711
1655
 
@@ -1911,6 +1855,52 @@ def extract_header_structure(ws, header_range):
1911
1855
  return header_structure
1912
1856
 
1913
1857
 
1858
+ def determine_field_type_and_summary(ws, col, start_row, end_row, rows):
1859
+ """ 根据指定的列范围确定字段的摘要信息
1860
+
1861
+ :param rows: 由外部传入要抽样的数据编号
1862
+ """
1863
+ # 1 需要全量读取数据,获知主要格式,和数值范围
1864
+ data = defaultdict(list)
1865
+ for i in range(start_row, end_row + 1):
1866
+ cell = ws.cell(i, col)
1867
+ k, v = cell.get_number_format(), cell.value
1868
+ data[k].append(v)
1869
+
1870
+ data2 = sorted(data.items(), key=lambda item: len(item[1]), reverse=True)
1871
+ number_formats = [x[0] for x in data2]
1872
+
1873
+ # 2 获得要展示的样本值
1874
+ sample_values = []
1875
+ for i in rows:
1876
+ cell = ws.cell(i, col)
1877
+ value = cell.get_render_value()
1878
+ if isinstance(value, str) and len(value) > 20:
1879
+ value = value[:17] + '...'
1880
+ sample_values.append(value)
1881
+
1882
+ # 3 数值范围(只要判断主类型的数值范围就行了)
1883
+ numeric_range = None
1884
+ for x in data2:
1885
+ try:
1886
+ fmt, values = x
1887
+ values = [v for v in values if (v is not None and not isinstance(v, str))]
1888
+ numeric_range = [min(values), max(values)]
1889
+ numeric_range[0] = xl_render_value(numeric_range[0], fmt)
1890
+ numeric_range[1] = xl_render_value(numeric_range[1], fmt)
1891
+ break
1892
+ except (TypeError, ValueError) as e:
1893
+ pass
1894
+
1895
+ summary = {
1896
+ "number_formats": number_formats,
1897
+ "numeric_range": numeric_range,
1898
+ "sample_values": sample_values,
1899
+ }
1900
+
1901
+ return summary
1902
+
1903
+
1914
1904
  def extract_cells_content(ws):
1915
1905
  """ 提取一个工作表中的所有单元格内容 """
1916
1906
  cells = {}
@@ -1965,52 +1955,6 @@ def extract_field_summaries(ws, header_range, data_range, samples_num=5):
1965
1955
  return field_summaries
1966
1956
 
1967
1957
 
1968
- def determine_field_type_and_summary(ws, col, start_row, end_row, rows):
1969
- """ 根据指定的列范围确定字段的摘要信息
1970
-
1971
- :param rows: 由外部传入要抽样的数据编号
1972
- """
1973
- # 1 需要全量读取数据,获知主要格式,和数值范围
1974
- data = defaultdict(list)
1975
- for i in range(start_row, end_row + 1):
1976
- cell = ws.cell(i, col)
1977
- k, v = cell.get_number_format(), cell.value
1978
- data[k].append(v)
1979
-
1980
- data2 = sorted(data.items(), key=lambda item: len(item[1]), reverse=True)
1981
- number_formats = [x[0] for x in data2]
1982
-
1983
- # 2 获得要展示的样本值
1984
- sample_values = []
1985
- for i in rows:
1986
- cell = ws.cell(i, col)
1987
- value = cell.get_render_value()
1988
- if isinstance(value, str) and len(value) > 20:
1989
- value = value[:17] + '...'
1990
- sample_values.append(value)
1991
-
1992
- # 3 数值范围(只要判断主类型的数值范围就行了)
1993
- numeric_range = None
1994
- for x in data2:
1995
- try:
1996
- fmt, values = x
1997
- values = [v for v in values if (v is not None and not isinstance(v, str))]
1998
- numeric_range = [min(values), max(values)]
1999
- numeric_range[0] = xl_render_value(numeric_range[0], fmt)
2000
- numeric_range[1] = xl_render_value(numeric_range[1], fmt)
2001
- break
2002
- except (TypeError, ValueError) as e:
2003
- pass
2004
-
2005
- summary = {
2006
- "number_formats": number_formats,
2007
- "numeric_range": numeric_range,
2008
- "sample_values": sample_values,
2009
- }
2010
-
2011
- return summary
2012
-
2013
-
2014
1958
  class WorkbookSummary:
2015
1959
  """ 工作薄摘要相关处理功能 """
2016
1960
 
@@ -2233,8 +2177,6 @@ def extract_workbook_summary2(file_path, *,
2233
2177
  # todo py好像没办法提取Selection。但jsa、vba应该要尽力取出这些相关的特征,尤其在操作等场景很有用
2234
2178
  # res['SelectionAddress'] = ...
2235
2179
 
2236
- # todo 摘要精简?
2237
-
2238
2180
  return res
2239
2181
 
2240
2182
 
@@ -2541,10 +2483,91 @@ class WorkbookSummary3:
2541
2483
  return y
2542
2484
 
2543
2485
  @classmethod
2544
- def reduce4b(cls, y, summary_limit_len, *, cur_summary_len=None):
2486
+ def reduce4b(cls, y, summary_limit_len, *, cur_summary_len=None, active_sheet_weight=0.5):
2545
2487
  """
2488
+ :param active_sheet_weight: 当前活动表格被删除的权重,0.5表示按比例被删除的量只有其他表格的一半
2546
2489
  """
2547
- pass
2490
+ if cur_summary_len is None:
2491
+ cur_summary_len = len(json.dumps(y, ensure_ascii=False))
2492
+
2493
+ active_sheet = y['ActiveSheet']
2494
+
2495
+ # 1 预计要删除单元格数
2496
+ sheet_cells_num = [len(st['cells']) for st in y['sheets']]
2497
+ # 每个sheet本身其他摘要,按照5个单元格估算
2498
+ total_cells_num = sum(sheet_cells_num) + len(sheet_cells_num) * 5
2499
+ avg_cell_len = cur_summary_len / total_cells_num
2500
+ # 目标删除单元格数量,向上取整
2501
+ target_reduce_cells_num = int((cur_summary_len - summary_limit_len) / avg_cell_len + 0.5)
2502
+
2503
+ # 2 对当前活动表格,会减小删除权重
2504
+ # 标记当前活动表格的单元格数
2505
+ active_sheet_index = [i for i, st in enumerate(y['sheets']) if st['sheetName'] == active_sheet][0]
2506
+ active_cells_num = sheet_cells_num[active_sheet_index]
2507
+
2508
+ # 计算权重系数
2509
+ w = active_sheet_weight # 当前激活表的权重系数
2510
+ m = active_cells_num
2511
+ n = total_cells_num
2512
+ r = target_reduce_cells_num / n
2513
+
2514
+ # 计算非活动表格的额外权重系数
2515
+ w2 = 1 + m * (1 - w) / (n - m)
2516
+
2517
+ # 3 所有的单元格如果都不够删,那就先把所有cells删了再说
2518
+ if total_cells_num < target_reduce_cells_num:
2519
+ for st in y['sheets']:
2520
+ st['cells'] = {}
2521
+ return len(json.dumps(y, ensure_ascii=False))
2522
+
2523
+ # 4 否则每张表按照比例删单元格,只保留前面部分的单元格
2524
+ left_rate = 1 - r # 原始保留比例
2525
+ while True:
2526
+ for i, st in enumerate(y['sheets']):
2527
+ if i == active_sheet_index:
2528
+ # 当前激活的sheet保留更多单元格
2529
+ st['cells'] = dict(islice(st['cells'].items(), int(left_rate * w * sheet_cells_num[i])))
2530
+ else:
2531
+ # 其他sheet按照w2权重删除单元格
2532
+ st['cells'] = dict(islice(st['cells'].items(), int(left_rate * w2 * sheet_cells_num[i])))
2533
+ cur_summary_len = len(json.dumps(y, ensure_ascii=False))
2534
+ if cur_summary_len <= summary_limit_len:
2535
+ return cur_summary_len
2536
+ if left_rate * total_cells_num < 1:
2537
+ break
2538
+ else:
2539
+ left_rate *= 0.8 # 缩小保留比例,再试
2540
+
2541
+ return cur_summary_len
2542
+
2543
+ @classmethod
2544
+ def reduce5b(cls, y, summary_limit_len, *, cur_summary_len=None):
2545
+ """ 计算平均每张表的长度,保留前面部分的表格 """
2546
+ if cur_summary_len is None:
2547
+ cur_summary_len = len(json.dumps(y, ensure_ascii=False))
2548
+
2549
+ n = len(y['sheets'])
2550
+ active_sheet_name = y['ActiveSheet']
2551
+
2552
+ avg_sheet_len = cur_summary_len / n
2553
+ # target_reduce_sheet_num = int((cur_summary_len - summary_limit_len) / avg_sheet_len + 0.5)
2554
+ # y['sheets'] = y['sheets'][:n - target_reduce_sheet_num]
2555
+
2556
+ while y['sheets']:
2557
+ cur_summary_len = len(json.dumps(y, ensure_ascii=False))
2558
+ if cur_summary_len <= summary_limit_len:
2559
+ return cur_summary_len
2560
+
2561
+ # 如果最后一张表格是激活的表格,尝试删除前一张
2562
+ if y['sheets'][-1]['sheetName'] == active_sheet_name:
2563
+ if len(y['sheets']) > 1:
2564
+ y['sheets'] = y['sheets'][:-2] + [y['sheets'][-1]]
2565
+ else:
2566
+ y['sheets'] = []
2567
+ else:
2568
+ y['sheets'] = y['sheets'][:-1] # 删除最后一张表格的详细信息
2569
+
2570
+ return cur_summary_len
2548
2571
 
2549
2572
  @classmethod
2550
2573
  def summary2_to_summary3b(cls, summary2, summary_limit_len=4000):
@@ -2585,13 +2608,13 @@ class WorkbookSummary3:
2585
2608
  return y
2586
2609
 
2587
2610
  # 4 每张表都按比例删除后面部分的单元格
2588
- cur_summary_len = cls.reduce4_truncate_cells(y, summary_limit_len, cur_summary_len=cur_summary_len)
2611
+ cur_summary_len = cls.reduce4b(y, summary_limit_len, cur_summary_len=cur_summary_len)
2589
2612
  if cur_summary_len <= summary_limit_len:
2590
2613
  y['mode'] = ', '.join(mode_tags[:4])
2591
2614
  return y
2592
2615
 
2593
2616
  # 5 从后往前删每张表格的详细信息
2594
- cls.reduce5_truncate_sheets(y, summary_limit_len, cur_summary_len=cur_summary_len)
2617
+ cls.reduce5b(y, summary_limit_len, cur_summary_len=cur_summary_len)
2595
2618
  y['mode'] = ', '.join(mode_tags[:5])
2596
2619
  return y
2597
2620
 
@@ -2599,8 +2622,8 @@ class WorkbookSummary3:
2599
2622
  y = {
2600
2623
  'fileName': x['fileName'],
2601
2624
  'sheetNames': x['sheetNames'],
2602
- 'ActiveSheet': '', # 当期激活的工作表
2603
- 'SelectionAddress': '',
2625
+ 'ActiveSheet': x['ActiveSheet'], # 当期激活的工作表
2626
+ # 'SelectionAddress': '',
2604
2627
  'sheets': x['sheets'],
2605
2628
  'mode': 'Complete information',
2606
2629
  }
@@ -2622,7 +2645,7 @@ class WorkbookSummary3:
2622
2645
 
2623
2646
  def extract_workbook_summary3(file_path, summary_limit_len=4000, **kwargs):
2624
2647
  """ 增加了全局ratio的计算 """
2625
- data = extract_workbook_summary2plus(file_path, **kwargs)
2648
+ data = extract_workbook_summary2(file_path, **kwargs)
2626
2649
  if not data:
2627
2650
  return data
2628
2651
  data = WorkbookSummary3.summary2_to_summary3(data, summary_limit_len)
@@ -2631,7 +2654,7 @@ def extract_workbook_summary3(file_path, summary_limit_len=4000, **kwargs):
2631
2654
 
2632
2655
  def extract_workbook_summary3b(file_path, summary_limit_len=4000, **kwargs):
2633
2656
  """ 增加了全局ratio的计算 """
2634
- data = extract_workbook_summary2plus(file_path, mode=1, **kwargs)
2657
+ data = extract_workbook_summary2(file_path, mode=1, **kwargs)
2635
2658
  if not data:
2636
2659
  return data
2637
2660
  data = WorkbookSummary3.summary2_to_summary3b(data, summary_limit_len)
@@ -1000,7 +1000,17 @@ def xlmd5(content):
1000
1000
 
1001
1001
  @run_once()
1002
1002
  def get_hostname():
1003
- return socket.getfqdn()
1003
+ hostname = socket.getfqdn()
1004
+ return hostname
1005
+
1006
+
1007
+ @run_once()
1008
+ def get_hostname2():
1009
+ """ 更加定制化的操作 """
1010
+ hostname = socket.getfqdn()
1011
+ hostname = hostname.replace('-', '_')
1012
+ hostname = hostname.split('.')[0]
1013
+ return hostname
1004
1014
 
1005
1015
 
1006
1016
  @run_once()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.88
3
+ Version: 0.3.89
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.88', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
33
+ version='0.3.89', # 当前版本,每次更新上传到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