pyxllib 0.3.148__tar.gz → 0.3.149__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 (364) hide show
  1. {pyxllib-0.3.148/pyxllib.egg-info → pyxllib-0.3.149}/PKG-INFO +16 -16
  2. pyxllib-0.3.149/pyxllib/ext/wpsapi.py +398 -0
  3. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/multiprogs.py +1 -1
  4. {pyxllib-0.3.148 → pyxllib-0.3.149/pyxllib.egg-info}/PKG-INFO +16 -16
  5. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib.egg-info/SOURCES.txt +1 -0
  6. {pyxllib-0.3.148 → pyxllib-0.3.149}/setup.py +1 -1
  7. {pyxllib-0.3.148 → pyxllib-0.3.149}/LICENSE +0 -0
  8. {pyxllib-0.3.148 → pyxllib-0.3.149}/MANIFEST.in +0 -0
  9. {pyxllib-0.3.148 → pyxllib-0.3.149}/README.md +0 -0
  10. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/__init__.py +0 -0
  11. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/__init__.py +0 -0
  12. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/disjoint.py +0 -0
  13. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/geo.py +0 -0
  14. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/intervals.py +0 -0
  15. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/matcher.py +0 -0
  16. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/newbie.py +0 -0
  17. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/pupil.py +0 -0
  18. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/shapelylib.py +0 -0
  19. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/specialist.py +0 -0
  20. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/stat.py +0 -0
  21. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/treelib.py +0 -0
  22. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/algo/unitlib.py +0 -0
  23. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/__init__.py +0 -0
  24. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/activewin.py +0 -0
  25. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/all.py +0 -0
  26. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/autogui.py +0 -0
  27. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/uiautolib.py +0 -0
  28. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/virtualkey.py +0 -0
  29. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/wechat.py +0 -0
  30. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/autogui/wechat_msg.py +0 -0
  31. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/__init__.py +0 -0
  32. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/expert.py +0 -0
  33. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/imfile.py +0 -0
  34. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/imhash.py +0 -0
  35. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/pupil.py +0 -0
  36. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/rgbfmt.py +0 -0
  37. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/trackbartools.py +0 -0
  38. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/xlcvlib.py +0 -0
  39. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/cv/xlpillib.py +0 -0
  40. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/__init__.py +0 -0
  41. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/echarts.py +0 -0
  42. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/jsonlib.py +0 -0
  43. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/oss.py +0 -0
  44. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/pglib.py +0 -0
  45. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/sqlite.py +0 -0
  46. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/data/sqllib.py +0 -0
  47. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/JLineViewer.py +0 -0
  48. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/__init__.py +0 -0
  49. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/demolib.py +0 -0
  50. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/drissionlib.py +0 -0
  51. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/kq5034lib.py +0 -0
  52. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/old.py +0 -0
  53. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/qt.py +0 -0
  54. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/robustprocfile.py +0 -0
  55. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/seleniumlib.py +0 -0
  56. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/tk.py +0 -0
  57. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/unixlib.py +0 -0
  58. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/utools.py +0 -0
  59. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/webhook.py +0 -0
  60. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/win32lib.py +0 -0
  61. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/ext/yuquelib.py +0 -0
  62. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/__init__.py +0 -0
  63. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/docxlib.py +0 -0
  64. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/gitlib.py +0 -0
  65. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/libreoffice.py +0 -0
  66. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/movielib.py +0 -0
  67. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/newbie.py +0 -0
  68. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/onenotelib.py +0 -0
  69. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/packlib/__init__.py +0 -0
  70. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/packlib/zipfile.py +0 -0
  71. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/pdflib.py +0 -0
  72. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/pupil.py +0 -0
  73. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/specialist/__init__.py +0 -0
  74. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/specialist/dirlib.py +0 -0
  75. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/specialist/download.py +0 -0
  76. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/specialist/filelib.py +0 -0
  77. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/xlsxlib.py +0 -0
  78. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/file/xlsyncfile.py +0 -0
  79. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/__init__.py +0 -0
  80. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/cachetools.py +0 -0
  81. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/deprecatedlib.py +0 -0
  82. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/filelock.py +0 -0
  83. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/ipyexec.py +0 -0
  84. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/newbie.py +0 -0
  85. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/pupil.py +0 -0
  86. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/sitepackages.py +0 -0
  87. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/__init__.py +0 -0
  88. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/bc.py +0 -0
  89. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/browser.py +0 -0
  90. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/common.py +0 -0
  91. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/datetime.py +0 -0
  92. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/tictoc.py +0 -0
  93. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/specialist/xllog.py +0 -0
  94. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/prog/xlosenv.py +0 -0
  95. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/stdlib/__init__.py +0 -0
  96. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  97. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  98. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  99. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/__init__.py +0 -0
  100. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/ahocorasick.py +0 -0
  101. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/charclasslib.py +0 -0
  102. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/jiebalib.py +0 -0
  103. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/jinjalib.py +0 -0
  104. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/jscode.py +0 -0
  105. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/latex/__init__.py +0 -0
  106. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/levenshtein.py +0 -0
  107. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/nestenv.py +0 -0
  108. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/newbie.py +0 -0
  109. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/pupil/__init__.py +0 -0
  110. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/pupil/common.py +0 -0
  111. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/pupil/xlalign.py +0 -0
  112. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/pycode.py +0 -0
  113. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/specialist/__init__.py +0 -0
  114. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/specialist/common.py +0 -0
  115. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/specialist/ptag.py +0 -0
  116. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/spellchecker.py +0 -0
  117. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/templates/echart_base.html +0 -0
  118. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/templates/highlight_code.html +0 -0
  119. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/templates/latex_editor.html +0 -0
  120. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/vbacode.py +0 -0
  121. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/text/xmllib.py +0 -0
  122. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/xl.py +0 -0
  123. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib/xlcv.py +0 -0
  124. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib.egg-info/dependency_links.txt +0 -0
  125. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib.egg-info/requires.txt +15 -15
  126. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxllib.egg-info/top_level.txt +0 -0
  127. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/__init__.py +0 -0
  128. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/__init__.py +0 -0
  129. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/clientlib.py +0 -0
  130. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/specialist.py +0 -0
  131. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/torch_app.py +0 -0
  132. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/xlpaddle.py +0 -0
  133. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ai/xltorch.py +0 -0
  134. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/__init__.py +0 -0
  135. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/coco.py +0 -0
  136. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/datacls.py +0 -0
  137. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/datasets.py +0 -0
  138. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/gptlib.py +0 -0
  139. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/icdar/__init__.py +0 -0
  140. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/icdar/deteval.py +0 -0
  141. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/icdar/icdar2013.py +0 -0
  142. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/icdar/iou.py +0 -0
  143. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  144. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/imtextline.py +0 -0
  145. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/labelme.py +0 -0
  146. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/removeline.py +0 -0
  147. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/specialist.py +0 -0
  148. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/data/tiktokenlib.py +0 -0
  149. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/eval/__init__.py +0 -0
  150. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/openai2/__init__.py +0 -0
  151. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/openai2/_core/chat.py +0 -0
  152. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
  153. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/openai2/_core/group_chat.py +0 -0
  154. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/openai2/openai2.py +0 -0
  155. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/paddleocr.py +0 -0
  156. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/__init__.py +0 -0
  157. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  158. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/__init__.py +0 -0
  159. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  160. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  161. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  162. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  163. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  164. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  165. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  166. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  167. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  168. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  169. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  170. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  171. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  172. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  173. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  174. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  175. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  176. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  177. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  178. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  179. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  180. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  181. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  182. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/__init__.py +0 -0
  183. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  184. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  185. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  186. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  187. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  188. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  189. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  190. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  191. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  192. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  193. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  194. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  195. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  196. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  197. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  198. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  199. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  200. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  201. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  202. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  203. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  204. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  205. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  206. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  207. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  208. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  209. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  210. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  211. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  212. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  213. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  214. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  215. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  216. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  217. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  218. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  219. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  220. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  221. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  222. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  223. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  224. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  225. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  226. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  227. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  228. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  229. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  230. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  231. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  232. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  233. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  234. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  235. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  236. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  237. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  238. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  239. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  240. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  241. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  242. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  243. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  244. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  245. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  246. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  247. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  248. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  249. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  250. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  251. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  252. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  253. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  254. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  255. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  256. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  257. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  258. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  259. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  260. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  261. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  262. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  263. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  264. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  265. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  266. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  267. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  268. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  269. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  270. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  271. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  272. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  273. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  274. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  275. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/__init__.py +0 -0
  276. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/eval.py +0 -0
  277. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/export_center.py +0 -0
  278. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/export_model.py +0 -0
  279. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  280. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  281. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  282. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  283. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  284. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  285. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  286. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  287. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  288. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  289. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  290. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  291. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/program.py +0 -0
  292. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  293. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/train.py +0 -0
  294. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  295. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  296. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/__init__.py +0 -0
  297. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  298. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  299. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  300. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  301. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  302. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  303. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  304. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  305. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  306. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  307. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  308. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  309. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  310. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  311. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  312. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  313. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  314. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  315. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  316. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  317. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  318. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  319. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  320. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  321. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  322. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  323. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  324. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  325. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  326. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  327. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  328. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  329. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  330. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  331. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  332. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  333. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  334. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  335. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  336. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  337. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  338. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  339. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  340. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/iou.py +0 -0
  341. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/logging.py +0 -0
  342. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/network.py +0 -0
  343. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  344. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/profiler.py +0 -0
  345. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/save_load.py +0 -0
  346. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/stats.py +0 -0
  347. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/utility.py +0 -0
  348. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/__init__.py +0 -0
  349. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/predict_system.py +0 -0
  350. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/__init__.py +0 -0
  351. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  352. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/matcher.py +0 -0
  353. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  354. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  355. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  356. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  357. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  358. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  359. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  360. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  361. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/ppstructure/utility.py +0 -0
  362. {pyxllib-0.3.148 → pyxllib-0.3.149}/pyxlpr/xlai.py +0 -0
  363. {pyxllib-0.3.148 → pyxllib-0.3.149}/requirements.txt +0 -0
  364. {pyxllib-0.3.148 → pyxllib-0.3.149}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.148
3
+ Version: 0.3.149
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,29 +42,29 @@ Requires-Dist: pillow; extra == "xlcv"
42
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
43
  Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
+ Requires-Dist: pillow; extra == "xlai"
46
+ Requires-Dist: opencv-python; extra == "xlai"
45
47
  Requires-Dist: visdom; extra == "xlai"
46
48
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
47
49
  Requires-Dist: pynvml; extra == "xlai"
48
- Requires-Dist: pillow; extra == "xlai"
49
- Requires-Dist: opencv-python; extra == "xlai"
50
50
  Provides-Extra: xlall
51
- Requires-Dist: flask-jwt-extended; extra == "xlall"
52
- Requires-Dist: flask-restful; extra == "xlall"
53
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
54
- Requires-Dist: uvicorn; extra == "xlall"
51
+ Requires-Dist: pillow; extra == "xlall"
52
+ Requires-Dist: opencv-python; extra == "xlall"
53
+ Requires-Dist: flask-cors; extra == "xlall"
54
+ Requires-Dist: zhconv; extra == "xlall"
55
55
  Requires-Dist: sentencepiece; extra == "xlall"
56
- Requires-Dist: flask-wtf; extra == "xlall"
56
+ Requires-Dist: ujson; extra == "xlall"
57
+ Requires-Dist: html2text; extra == "xlall"
57
58
  Requires-Dist: openai2; extra == "xlall"
58
- Requires-Dist: arts; extra == "xlall"
59
- Requires-Dist: xlrd; extra == "xlall"
59
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
60
+ Requires-Dist: uvicorn; extra == "xlall"
60
61
  Requires-Dist: flask; extra == "xlall"
61
- Requires-Dist: ujson; extra == "xlall"
62
62
  Requires-Dist: fastapi; extra == "xlall"
63
- Requires-Dist: html2text; extra == "xlall"
64
- Requires-Dist: pillow; extra == "xlall"
65
- Requires-Dist: opencv-python; extra == "xlall"
66
- Requires-Dist: zhconv; extra == "xlall"
67
- Requires-Dist: flask-cors; extra == "xlall"
63
+ Requires-Dist: xlrd; extra == "xlall"
64
+ Requires-Dist: arts; extra == "xlall"
65
+ Requires-Dist: flask-restful; extra == "xlall"
66
+ Requires-Dist: flask-jwt-extended; extra == "xlall"
67
+ Requires-Dist: flask-wtf; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -0,0 +1,398 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Date : 2024/07/31
5
+
6
+ import time
7
+ import json
8
+ from pathlib import Path
9
+ from unittest.mock import MagicMock
10
+ import traceback
11
+ import datetime
12
+ import tempfile
13
+
14
+ import requests
15
+
16
+ from DrissionPage import ChromiumPage
17
+ from DrissionPage._pages.chromium_tab import ChromiumTab
18
+
19
+
20
+ def format_exception(e, mode=3):
21
+ if mode == 1:
22
+ # 仅获取异常类型的名称
23
+ text = ''.join(traceback.format_exception_only(type(e), e)).strip()
24
+ elif mode == 2:
25
+ # 获取异常类型的名称和附加的错误信息
26
+ text = f"{type(e).__name__}: {e}"
27
+ elif mode == 3:
28
+ text = ''.join(traceback.format_exception(type(e), e, e.__traceback__))
29
+ else:
30
+ raise ValueError
31
+ return text
32
+
33
+
34
+ def get_dp_tab(dp_page=None):
35
+ """ 智能获取一个标签页tab
36
+
37
+ :param dp_page:
38
+ 默认None, 返回默认的page,一般就是当前页面
39
+ True, 新建一个page
40
+ str, 新建一个对应url的page
41
+ func(tab), 通过规则筛选tab,返回符合条件的第1个tab,否则新建一个tab
42
+ """
43
+
44
+ if isinstance(dp_page, ChromiumPage):
45
+ return dp_page.latest_tab
46
+ elif isinstance(dp_page, ChromiumTab):
47
+ return dp_page
48
+ elif callable(dp_page):
49
+ page0 = ChromiumPage()
50
+ for tab in page0.get_tabs():
51
+ if dp_page(tab):
52
+ return tab
53
+ return page0.new_tab()
54
+ elif dp_page is True:
55
+ return ChromiumPage().new_tab()
56
+ elif isinstance(dp_page, str):
57
+ return ChromiumPage().new_tab(dp_page)
58
+ else:
59
+ return ChromiumPage().latest_tab
60
+
61
+
62
+ class WpsApi:
63
+ """ 基于wps给的一些基础api,进行了一定的增强封装
64
+
65
+ 官方很多功能都没有提供,所以有些功能都是做了一些"骚操作"的
66
+ 以及对高并发稳定性的考虑等
67
+ """
68
+
69
+ def __init__(self, token, *, name=None, base_url=None, logger=None,
70
+ folder_id=None):
71
+ """
72
+ :param str token: 登录的token
73
+ :param str name: 记一个账号昵称,方便区分,默认会有token后6位
74
+ :param str base_url: 基础url,一般不用改
75
+ :param logger: 日志记录器,可以不输入,默认置空不记录
76
+ :param folder_id: 默认的文件夹id,有些文件操作相关的功能,需要放到指定目录下
77
+ """
78
+ # 这里登录获得的是自己账号的token
79
+ # Get the token from https://solution.wps.cn/weboffice-go-sdk/api/script/token
80
+ self.token = token
81
+ self.name = name or self.token[-6:]
82
+ self.base_url = base_url or 'https://solution.wps.cn/weboffice-go-sdk/api'
83
+ self.default_template = 'https://kdocs.cn/l/cjVHm9Zy9jU1' # 空白表格,默认的一个表格模板文件,用于创建新文件、测试等
84
+
85
+ self.logger = logger or MagicMock()
86
+ self._folder_id = folder_id or None
87
+
88
+ def __1_基本请求(self):
89
+ pass
90
+
91
+ def request(self, method, endpoint, data=None, **kwargs):
92
+ headers = {
93
+ 'Authorization': self.token,
94
+ 'Content-Type': 'application/json',
95
+ }
96
+ # 重试机制
97
+ for i in range(5):
98
+ try:
99
+ # 根据 method 动态选择请求方式
100
+ resp = requests.request(method, f"{self.base_url}/{endpoint}", headers=headers,
101
+ data=json.dumps(data), timeout=5, **kwargs)
102
+ return resp.json()
103
+ except Exception as e:
104
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
105
+ time.sleep(5) # 等待5秒后再重试
106
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
107
+
108
+ def post(self, endpoint, data=None, **kwargs):
109
+ headers = {
110
+ 'Authorization': self.token,
111
+ 'Content-Type': 'application/json',
112
+ }
113
+ # 重试机制
114
+ for i in range(5):
115
+ try:
116
+ resp = requests.post(f"{self.base_url}/{endpoint}", headers=headers,
117
+ data=json.dumps(data), timeout=5, **kwargs)
118
+ return resp.json()
119
+ except Exception as e:
120
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
121
+ time.sleep(5) # 等待5秒后再重试
122
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
123
+
124
+ def put(self, endpoint, data=None, **kwargs):
125
+ """ 主要是上传文件用的 """
126
+ headers = { # 注意这个相比post删掉了'Content-Type'
127
+ 'Authorization': self.token,
128
+ }
129
+ # 重试机制
130
+ for i in range(5):
131
+ try:
132
+ # 注意put版本相比post,不仅改了requests.put,还改了data的传输形式
133
+ resp = requests.put(f"{self.base_url}/{endpoint}", headers=headers,
134
+ data=data, timeout=5, **kwargs)
135
+ return resp.json()
136
+ except Exception as e:
137
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
138
+ time.sleep(5) # 等待5秒后再重试
139
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
140
+
141
+ def __2_目录操作(self):
142
+ pass
143
+
144
+ def create_folder(self, name):
145
+ """ 创建目录
146
+
147
+ wps未提供
148
+ 检索已创建成功目录id
149
+ 删除指定目录
150
+ """
151
+ resp_json = self.post('files/folder', {'name': name})
152
+ # 创建成功返回:{'folder_id': 316928828842}
153
+ # 如果文件已存在,返回的是:{'msg': '文件名冲突', 'result': 'fileNameConflict'}
154
+ return resp_json['folder_id']
155
+
156
+ def get_folder_id(self, check_folder=True):
157
+ """
158
+ :param bool check_folder: 是否严格校验缓存的目录是否有效,如果无效会自动重置
159
+ 一般情况下为了效率的话,可以不开
160
+ 为了保险稳定性的话,最好打开
161
+ """
162
+ if self._folder_id is None:
163
+ # 1 看本地是否有缓存folder_id
164
+ config_dir = Path(tempfile.gettempdir()) / 'WpsApiPresetFolders'
165
+ config_dir.mkdir(exist_ok=True)
166
+ config_file = config_dir / f'{self.token}.txt'
167
+ if config_file.is_file():
168
+ self._folder_id = config_file.read_text()
169
+
170
+ if check_folder:
171
+ try:
172
+ file_id = self.save_as_file()
173
+ self.delete_file(file_id)
174
+ return self._folder_id
175
+ except ValueError as e: # 目录可能被删掉了,还是要重新创建的
176
+ self._folder_id = None
177
+ else:
178
+ return self._folder_id
179
+
180
+ # 2 获得folder_id,并保存到本地
181
+ for i in range(5):
182
+ try:
183
+ now_tag = datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f') # 以当前时间点新建一个目录
184
+ self._folder_id = str(self.create_folder(now_tag)) # 虽然是一串数字,但大部分场合都是要当做str形式使用
185
+ config_file.write_text(self._folder_id)
186
+ break
187
+ except KeyError as e:
188
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{format_exception(e)}')
189
+ time.sleep(2)
190
+ else:
191
+ raise ValueError('无法获取folder_id,命名全部冲突的概率极低,请检查是否联网')
192
+
193
+ return self._folder_id
194
+
195
+ @property
196
+ def folder_id(self):
197
+ self.get_folder_id()
198
+ return self._folder_id
199
+
200
+ def __3_基础功能(self):
201
+ pass
202
+
203
+ def save_as_file(self, src_file_id=None, dst_folder_id=None):
204
+ """ 另存文件 """
205
+ # 1
206
+ if src_file_id is None:
207
+ src_file_id = self.default_template.split('/')[-1]
208
+ if dst_folder_id is None:
209
+ dst_folder_id = self.folder_id
210
+
211
+ # 2
212
+ resp_json = self.post('files/save_as', {
213
+ 'source_fileid': str(src_file_id),
214
+ 'target_parentid': int(dst_folder_id),
215
+ })
216
+
217
+ # 3
218
+ if 'new_fileid' in resp_json:
219
+ return resp_json['new_fileid']
220
+ else:
221
+ traceback.print_exc()
222
+ raise ValueError
223
+
224
+ def delete_file(self, file_id):
225
+ """ 这里要输入的是表格的url
226
+
227
+ 删除成功:{'result': 'ok'}
228
+ 如果不存在,返回:{'result': 'fileNotExists', 'msg': '文件(夹)不存在'}
229
+ 注意这个接口其实不支持删除目录,输入目录类id会得到:{'result': 'InvalidArgument', 'msg': '请求参数错误'}
230
+ """
231
+ return self.post('files/delete', {'file_id': str(file_id)})
232
+
233
+ def download(self, source_file_id, target_file_path):
234
+ """ 下载文件到本地
235
+
236
+ 注意使用团队版api上传的文件,如果不是.ksheet而是.xlsx等类型,这里下载会报错:{'result': 'InvalidArgument'}
237
+ """
238
+ resp_json = self.post('files/export_xlsx', {'file_id': str(source_file_id)})
239
+ # 使用requests下载文件
240
+ with requests.get(resp_json['url'], stream=True) as r:
241
+ r.raise_for_status()
242
+ with open(target_file_path, 'wb') as f:
243
+ for chunk in r.iter_content(chunk_size=8192):
244
+ if chunk:
245
+ f.write(chunk)
246
+
247
+ def run_airscript(self, file_id, code, return_mode=None):
248
+ """ 执行as/jsa脚本
249
+
250
+ :param return_mode: 返回格式
251
+ None,提取到的结果
252
+ json: 返回json格式
253
+ """
254
+ reply = self.post('script/evaluate', {
255
+ 'file_id': str(file_id),
256
+ 'code': code,
257
+ })
258
+
259
+ if return_mode == 'json':
260
+ return reply
261
+
262
+ if 'error' in reply:
263
+ raise Exception('evaluate script failed: {}\nstack: {}'.format(reply['error'], reply['stack']))
264
+
265
+ return reply['return']
266
+
267
+
268
+ class WpsGroupApi(WpsApi):
269
+ """ 团队版的api
270
+ """
271
+
272
+ def __init__(self, token, *, group_id=None, group_folder_id=None, **kwargs):
273
+ super().__init__(token, **kwargs)
274
+ self.group_id = group_id
275
+ self.group_folder_id = group_folder_id # 团队版的默认存储目录
276
+
277
+ def upload_file(self, local_file, remote_file_name=None, group_folder_id=None, group_id=None):
278
+ """ 只有团队版才有上传文件的功能,但上传后的文件,和其他文件功能,爬虫的处理,都是兼容的
279
+
280
+ :param local_file: 要上传的本地文件
281
+ :param remote_file_name: 存储在远程的参考文件名
282
+ 注意这个是要写后缀的,否则会成为无法识别类型的文件
283
+ 写xlsx是可以的,但是一般建议是写成 .ksheet,这是官方标准的智能表格格式,目前测试也只有这种格式才支持api再重复下载
284
+ :param group_folder_id: 团队目录id
285
+ :param group_id: 团队id
286
+ """
287
+ # 1 配置参数
288
+ local_file = Path(local_file)
289
+ remote_file_name = remote_file_name or local_file.name
290
+ group_folder_id = group_folder_id or self.group_folder_id
291
+ group_id = group_id or self.group_id
292
+
293
+ # 2 上传文件
294
+ files = {
295
+ "file": (remote_file_name, open(local_file, "rb"))
296
+ }
297
+ data = {
298
+ "group_id": str(group_id),
299
+ "parent_id": str(group_folder_id)
300
+ }
301
+ resp = self.put('files/upload', data, files=files)
302
+ print(resp)
303
+ # {'result': 'InvalidArguments', 'msg': "request Content-Type isn't multipart/form-data"}
304
+ return resp.get('file_id', '')
305
+
306
+
307
+ class WpsWeb:
308
+ """ wps网页版的爬虫 """
309
+
310
+ def __init__(self, dp_page=None):
311
+ """ 初始化及登录 """
312
+ # 1 找是否已经存在页面,确定页面的复用规则,并激活窗口
313
+ if dp_page is None:
314
+ def dp_page(tab):
315
+ if tab.url.startswith('https://www.kdocs.cn'):
316
+ return tab
317
+
318
+ tab = get_dp_tab(dp_page)
319
+ tab.set.activate()
320
+
321
+ # # 2 看是否需要登录
322
+ while not tab.url == 'https://www.kdocs.cn/latest':
323
+ tab.get('https://www.kdocs.cn')
324
+
325
+ self.tab = tab
326
+ self.page = self.tab.page
327
+
328
+ def get_token(self):
329
+ """ 获取token的值
330
+ 需要确保账号提前有登录好
331
+ """
332
+ tab = self.page.new_tab('https://solution.wps.cn/weboffice-go-sdk/api/script/token')
333
+ tab.wait.load_start()
334
+ token = json.loads(tab('tag:pre').inner_html)['token']
335
+ return token
336
+
337
+ def share_file(self, file_id, link_permission=1):
338
+ """ 分享文件
339
+
340
+ :param link_permission:
341
+ 0,关闭分享
342
+ 1,查看权限
343
+ 2,评论权限
344
+ 3,编辑权限
345
+ """
346
+ # 1 访问文档
347
+ if not str(file_id).startswith('https://www.kdocs.cn/l/'):
348
+ file_id = f'https://www.kdocs.cn/l/{file_id}'
349
+ tab = self.tab
350
+ tab.get(file_id)
351
+
352
+ # 2 获得当前文档的权限设置情况
353
+ tab('tag:span@@text()=分享').click()
354
+ for i in range(5):
355
+ eles = tab.eles('tag:div@@class=kso-group-item__after')
356
+ if len(eles) > 2:
357
+ break
358
+ tab.wait(1)
359
+ if '开启后分享' in eles[0].text:
360
+ cur_permission = 0
361
+ else:
362
+ eles[1].click() # 点开按钮触发后,才能获得当前文件权限
363
+ premission_text = eles[1]('tag:span@@class=permission-text').text
364
+ if '可查看' in premission_text:
365
+ cur_permission = 1
366
+ elif '可评论' in premission_text:
367
+ cur_permission = 2
368
+ elif '可编辑' in premission_text:
369
+ cur_permission = 3
370
+ else:
371
+ raise ValueError
372
+
373
+ # 3 是否需要修改权限
374
+ if cur_permission != link_permission:
375
+ if link_permission == 0: # 目标是关闭分享
376
+ eles[0].click()
377
+ else:
378
+ # 其他都是要开启分享,如果当前没启用分享,要先启用
379
+ if cur_permission == 0:
380
+ eles[0].click()
381
+ tab.wait(2)
382
+ eles[1].click() # trick, 这句是写在if里面的,只有这种情况需要重新点链接权限,否则前面已经点开确认过
383
+ dst_text = ['查看', '查看和评论', '编辑'][link_permission - 1]
384
+ eles2 = tab.eles('tag:div@@class=kso-shareV3-menu-item') # 这一组标签比较特别,需要自己遍历处理
385
+ for ele in eles2:
386
+ if ele.text == dst_text:
387
+ # DrissionPage.errors.NoRectError: 该元素没有位置及大小。
388
+ ele.wait.clickable(timeout=10)
389
+ ele.click()
390
+ break
391
+
392
+
393
+ class WpsScriptApi:
394
+ """ wps的"脚本令牌"调用模式 """
395
+
396
+
397
+ if __name__ == '__main__':
398
+ pass
@@ -799,7 +799,7 @@ class LauncherDashboard:
799
799
 
800
800
  # 处理 port 和 locations
801
801
  port = row['port'] if not pd.isna(row['port']) else "N/A"
802
- locations = ", ".join(row['locations']) if isinstance(row['locations'], list) else "N/A"
802
+ locations = str(row['locations'])
803
803
 
804
804
  # 格式化输出
805
805
  output.append(f"{idx:<5} {name:<15} {pid:<10} {status:<10} {port:<10} {locations:<20} {args_str}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.148
3
+ Version: 0.3.149
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,29 +42,29 @@ Requires-Dist: pillow; extra == "xlcv"
42
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
43
  Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
+ Requires-Dist: pillow; extra == "xlai"
46
+ Requires-Dist: opencv-python; extra == "xlai"
45
47
  Requires-Dist: visdom; extra == "xlai"
46
48
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
47
49
  Requires-Dist: pynvml; extra == "xlai"
48
- Requires-Dist: pillow; extra == "xlai"
49
- Requires-Dist: opencv-python; extra == "xlai"
50
50
  Provides-Extra: xlall
51
- Requires-Dist: flask-jwt-extended; extra == "xlall"
52
- Requires-Dist: flask-restful; extra == "xlall"
53
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
54
- Requires-Dist: uvicorn; extra == "xlall"
51
+ Requires-Dist: pillow; extra == "xlall"
52
+ Requires-Dist: opencv-python; extra == "xlall"
53
+ Requires-Dist: flask-cors; extra == "xlall"
54
+ Requires-Dist: zhconv; extra == "xlall"
55
55
  Requires-Dist: sentencepiece; extra == "xlall"
56
- Requires-Dist: flask-wtf; extra == "xlall"
56
+ Requires-Dist: ujson; extra == "xlall"
57
+ Requires-Dist: html2text; extra == "xlall"
57
58
  Requires-Dist: openai2; extra == "xlall"
58
- Requires-Dist: arts; extra == "xlall"
59
- Requires-Dist: xlrd; extra == "xlall"
59
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
60
+ Requires-Dist: uvicorn; extra == "xlall"
60
61
  Requires-Dist: flask; extra == "xlall"
61
- Requires-Dist: ujson; extra == "xlall"
62
62
  Requires-Dist: fastapi; extra == "xlall"
63
- Requires-Dist: html2text; extra == "xlall"
64
- Requires-Dist: pillow; extra == "xlall"
65
- Requires-Dist: opencv-python; extra == "xlall"
66
- Requires-Dist: zhconv; extra == "xlall"
67
- Requires-Dist: flask-cors; extra == "xlall"
63
+ Requires-Dist: xlrd; extra == "xlall"
64
+ Requires-Dist: arts; extra == "xlall"
65
+ Requires-Dist: flask-restful; extra == "xlall"
66
+ Requires-Dist: flask-jwt-extended; extra == "xlall"
67
+ Requires-Dist: flask-wtf; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -61,6 +61,7 @@ pyxllib/ext/unixlib.py
61
61
  pyxllib/ext/utools.py
62
62
  pyxllib/ext/webhook.py
63
63
  pyxllib/ext/win32lib.py
64
+ pyxllib/ext/wpsapi.py
64
65
  pyxllib/ext/yuquelib.py
65
66
  pyxllib/file/__init__.py
66
67
  pyxllib/file/docxlib.py
@@ -50,7 +50,7 @@ _dir = Path(__file__).parent
50
50
 
51
51
  setup(
52
52
  name='pyxllib', # pip 安装时用的名字
53
- version='0.3.148', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
53
+ version='0.3.149', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
54
54
  author='code4101',
55
55
  author_email='877362867@qq.com',
56
56
  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