pyxllib 0.3.150__tar.gz → 0.3.151__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 (366) hide show
  1. pyxllib-0.3.151/MANIFEST.in +4 -0
  2. {pyxllib-0.3.150/pyxllib.egg-info → pyxllib-0.3.151}/PKG-INFO +13 -13
  3. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/activewin.py +9 -2
  4. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/wpsapi.py +67 -3
  5. pyxllib-0.3.151/pyxllib/text/airscript.js +441 -0
  6. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/jscode.py +172 -3
  7. {pyxllib-0.3.150 → pyxllib-0.3.151/pyxllib.egg-info}/PKG-INFO +13 -13
  8. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib.egg-info/SOURCES.txt +1 -0
  9. {pyxllib-0.3.150 → pyxllib-0.3.151}/setup.py +1 -1
  10. pyxllib-0.3.150/MANIFEST.in +0 -4
  11. {pyxllib-0.3.150 → pyxllib-0.3.151}/LICENSE +0 -0
  12. {pyxllib-0.3.150 → pyxllib-0.3.151}/README.md +0 -0
  13. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/__init__.py +0 -0
  14. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/__init__.py +0 -0
  15. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/disjoint.py +0 -0
  16. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/geo.py +0 -0
  17. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/intervals.py +0 -0
  18. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/matcher.py +0 -0
  19. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/newbie.py +0 -0
  20. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/pupil.py +0 -0
  21. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/shapelylib.py +0 -0
  22. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/specialist.py +0 -0
  23. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/stat.py +0 -0
  24. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/treelib.py +0 -0
  25. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/algo/unitlib.py +0 -0
  26. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/__init__.py +0 -0
  27. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/all.py +0 -0
  28. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/autogui.py +0 -0
  29. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/uiautolib.py +0 -0
  30. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/virtualkey.py +0 -0
  31. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/wechat.py +0 -0
  32. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/autogui/wechat_msg.py +0 -0
  33. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/__init__.py +0 -0
  34. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/expert.py +0 -0
  35. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/imfile.py +0 -0
  36. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/imhash.py +0 -0
  37. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/pupil.py +0 -0
  38. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/rgbfmt.py +0 -0
  39. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/trackbartools.py +0 -0
  40. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/xlcvlib.py +0 -0
  41. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/cv/xlpillib.py +0 -0
  42. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/__init__.py +0 -0
  43. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/echarts.py +0 -0
  44. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/jsonlib.py +0 -0
  45. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/oss.py +0 -0
  46. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/pglib.py +0 -0
  47. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/sqlite.py +0 -0
  48. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/data/sqllib.py +0 -0
  49. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/JLineViewer.py +0 -0
  50. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/__init__.py +0 -0
  51. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/demolib.py +0 -0
  52. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/drissionlib.py +0 -0
  53. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/kq5034lib.py +0 -0
  54. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/old.py +0 -0
  55. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/qt.py +0 -0
  56. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/robustprocfile.py +0 -0
  57. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/seleniumlib.py +0 -0
  58. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/tk.py +0 -0
  59. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/unixlib.py +0 -0
  60. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/utools.py +0 -0
  61. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/webhook.py +0 -0
  62. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/win32lib.py +0 -0
  63. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/ext/yuquelib.py +0 -0
  64. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/__init__.py +0 -0
  65. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/docxlib.py +0 -0
  66. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/gitlib.py +0 -0
  67. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/libreoffice.py +0 -0
  68. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/movielib.py +0 -0
  69. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/newbie.py +0 -0
  70. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/onenotelib.py +0 -0
  71. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/packlib/__init__.py +0 -0
  72. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/packlib/zipfile.py +0 -0
  73. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/pdflib.py +0 -0
  74. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/pupil.py +0 -0
  75. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/specialist/__init__.py +0 -0
  76. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/specialist/dirlib.py +0 -0
  77. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/specialist/download.py +0 -0
  78. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/specialist/filelib.py +0 -0
  79. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/xlsxlib.py +0 -0
  80. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/file/xlsyncfile.py +0 -0
  81. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/__init__.py +0 -0
  82. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/cachetools.py +0 -0
  83. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/deprecatedlib.py +0 -0
  84. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/filelock.py +0 -0
  85. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/ipyexec.py +0 -0
  86. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/multiprogs.py +0 -0
  87. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/newbie.py +0 -0
  88. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/pupil.py +0 -0
  89. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/sitepackages.py +0 -0
  90. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/__init__.py +0 -0
  91. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/bc.py +0 -0
  92. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/browser.py +0 -0
  93. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/common.py +0 -0
  94. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/datetime.py +0 -0
  95. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/tictoc.py +0 -0
  96. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/specialist/xllog.py +0 -0
  97. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/prog/xlosenv.py +0 -0
  98. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/stdlib/__init__.py +0 -0
  99. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  100. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  101. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  102. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/__init__.py +0 -0
  103. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/ahocorasick.py +0 -0
  104. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/charclasslib.py +0 -0
  105. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/jiebalib.py +0 -0
  106. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/jinjalib.py +0 -0
  107. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/latex/__init__.py +0 -0
  108. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/levenshtein.py +0 -0
  109. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/nestenv.py +0 -0
  110. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/newbie.py +0 -0
  111. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/pupil/__init__.py +0 -0
  112. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/pupil/common.py +0 -0
  113. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/pupil/xlalign.py +0 -0
  114. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/pycode.py +0 -0
  115. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/specialist/__init__.py +0 -0
  116. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/specialist/common.py +0 -0
  117. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/specialist/ptag.py +0 -0
  118. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/spellchecker.py +0 -0
  119. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/templates/echart_base.html +0 -0
  120. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/templates/highlight_code.html +0 -0
  121. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/templates/latex_editor.html +0 -0
  122. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/vbacode.py +0 -0
  123. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/text/xmllib.py +0 -0
  124. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/xl.py +0 -0
  125. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib/xlcv.py +0 -0
  126. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib.egg-info/dependency_links.txt +0 -0
  127. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib.egg-info/requires.txt +12 -12
  128. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxllib.egg-info/top_level.txt +0 -0
  129. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/__init__.py +0 -0
  130. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/__init__.py +0 -0
  131. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/clientlib.py +0 -0
  132. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/specialist.py +0 -0
  133. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/torch_app.py +0 -0
  134. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/xlpaddle.py +0 -0
  135. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ai/xltorch.py +0 -0
  136. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/__init__.py +0 -0
  137. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/coco.py +0 -0
  138. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/datacls.py +0 -0
  139. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/datasets.py +0 -0
  140. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/gptlib.py +0 -0
  141. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/icdar/__init__.py +0 -0
  142. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/icdar/deteval.py +0 -0
  143. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/icdar/icdar2013.py +0 -0
  144. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/icdar/iou.py +0 -0
  145. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  146. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/imtextline.py +0 -0
  147. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/labelme.py +0 -0
  148. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/removeline.py +0 -0
  149. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/specialist.py +0 -0
  150. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/data/tiktokenlib.py +0 -0
  151. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/eval/__init__.py +0 -0
  152. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/openai2/__init__.py +0 -0
  153. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/openai2/_core/chat.py +0 -0
  154. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
  155. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/openai2/_core/group_chat.py +0 -0
  156. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/openai2/openai2.py +0 -0
  157. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/paddleocr.py +0 -0
  158. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/__init__.py +0 -0
  159. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  160. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/__init__.py +0 -0
  161. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  162. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  163. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  164. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  165. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  166. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  167. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  168. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  169. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  170. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  171. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  172. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  173. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  174. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  175. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  176. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  177. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  178. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  179. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  180. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  181. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  182. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  183. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  184. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/__init__.py +0 -0
  185. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  186. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  187. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  188. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  189. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  190. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  191. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  192. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  193. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  194. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  195. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  196. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  197. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  198. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  199. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  200. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  201. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  202. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  203. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  204. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  205. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  206. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  207. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  208. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  209. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  210. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  211. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  212. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  213. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  214. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  215. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  216. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  217. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  218. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  219. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  220. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  221. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  222. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  223. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  224. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  225. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  226. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  227. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  228. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  229. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  230. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  231. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  232. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  233. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  234. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  235. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  236. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  237. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  238. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  239. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  240. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  241. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  242. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  243. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  244. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  245. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  246. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  247. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  248. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  249. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  250. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  251. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  252. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  253. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  254. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  255. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  256. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  257. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  258. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  259. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  260. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  261. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  262. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  263. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  264. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  265. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  266. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  267. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  268. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  269. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  270. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  271. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  272. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  273. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  274. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  275. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  276. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  277. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/__init__.py +0 -0
  278. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/eval.py +0 -0
  279. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/export_center.py +0 -0
  280. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/export_model.py +0 -0
  281. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  282. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  283. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  284. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  285. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  286. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  287. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  288. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  289. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  290. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  291. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  292. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  293. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/program.py +0 -0
  294. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  295. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/train.py +0 -0
  296. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  297. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  298. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/__init__.py +0 -0
  299. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  300. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  301. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  302. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  303. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  304. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  305. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  306. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  307. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  308. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  309. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  310. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  311. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  312. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  313. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  314. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  315. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  316. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  317. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  318. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  319. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  320. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  321. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  322. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  323. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  324. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  325. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  326. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  327. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  328. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  329. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  330. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  331. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  332. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  333. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  334. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  335. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  336. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  337. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  338. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  339. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  340. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  341. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  342. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/iou.py +0 -0
  343. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/logging.py +0 -0
  344. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/network.py +0 -0
  345. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  346. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/profiler.py +0 -0
  347. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/save_load.py +0 -0
  348. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/stats.py +0 -0
  349. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppocr/utils/utility.py +0 -0
  350. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/__init__.py +0 -0
  351. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/predict_system.py +0 -0
  352. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/__init__.py +0 -0
  353. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  354. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/matcher.py +0 -0
  355. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  356. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  357. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  358. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  359. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  360. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  361. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  362. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  363. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/ppstructure/utility.py +0 -0
  364. {pyxllib-0.3.150 → pyxllib-0.3.151}/pyxlpr/xlai.py +0 -0
  365. {pyxllib-0.3.150 → pyxllib-0.3.151}/requirements.txt +0 -0
  366. {pyxllib-0.3.150 → pyxllib-0.3.151}/setup.cfg +0 -0
@@ -0,0 +1,4 @@
1
+ include README.md
2
+ include requirements.txt
3
+ recursive-include pyxllib *.html *.js
4
+ recursive-include pyxlpr *.py *.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.150
3
+ Version: 0.3.151
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,29 +42,29 @@ Requires-Dist: opencv-python; extra == "xlcv"
42
42
  Requires-Dist: pillow; extra == "xlcv"
43
43
  Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
- Requires-Dist: pynvml; extra == "xlai"
46
45
  Requires-Dist: pillow; extra == "xlai"
47
46
  Requires-Dist: visdom; extra == "xlai"
48
- Requires-Dist: opencv-python; extra == "xlai"
47
+ Requires-Dist: pynvml; extra == "xlai"
49
48
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
49
+ Requires-Dist: opencv-python; extra == "xlai"
50
50
  Provides-Extra: xlall
51
51
  Requires-Dist: flask-jwt-extended; extra == "xlall"
52
+ Requires-Dist: openai2; extra == "xlall"
53
+ Requires-Dist: arts; extra == "xlall"
54
+ Requires-Dist: ujson; extra == "xlall"
52
55
  Requires-Dist: pillow; extra == "xlall"
53
- Requires-Dist: flask-cors; extra == "xlall"
54
- Requires-Dist: zhconv; extra == "xlall"
55
- Requires-Dist: xlrd; extra == "xlall"
56
- Requires-Dist: flask-restful; extra == "xlall"
57
56
  Requires-Dist: flask-wtf; extra == "xlall"
58
- Requires-Dist: openai2; extra == "xlall"
57
+ Requires-Dist: xlrd; extra == "xlall"
58
+ Requires-Dist: zhconv; extra == "xlall"
59
+ Requires-Dist: html2text; extra == "xlall"
59
60
  Requires-Dist: flask; extra == "xlall"
60
- Requires-Dist: ujson; extra == "xlall"
61
+ Requires-Dist: uvicorn; extra == "xlall"
62
+ Requires-Dist: flask-cors; extra == "xlall"
63
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
61
64
  Requires-Dist: fastapi; extra == "xlall"
62
65
  Requires-Dist: sentencepiece; extra == "xlall"
63
- Requires-Dist: arts; extra == "xlall"
64
66
  Requires-Dist: opencv-python; extra == "xlall"
65
- Requires-Dist: uvicorn; extra == "xlall"
66
- Requires-Dist: html2text; extra == "xlall"
67
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
67
+ Requires-Dist: flask-restful; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -6,6 +6,7 @@
6
6
 
7
7
  import platform
8
8
  import sys
9
+ import time
9
10
 
10
11
  import cv2
11
12
  import psutil
@@ -90,8 +91,14 @@ class ActiveWindowCapture(OriginalMSS):
90
91
  @xlcache(property=True)
91
92
  def window(self):
92
93
  """ 当前激活窗口 """
93
- win = uiautomation.GetForegroundControl()
94
- return win
94
+ # 可以小等一会等到有效窗口
95
+ for i in range(4):
96
+ win = uiautomation.GetForegroundControl()
97
+ if win:
98
+ return
99
+ else:
100
+ time.sleep(0.5)
101
+ return
95
102
 
96
103
  @xlcache(property=True)
97
104
  def process(self):
@@ -24,7 +24,7 @@ class WpsApi:
24
24
  以及对高并发稳定性的考虑等
25
25
  """
26
26
 
27
- def __init__(self, token, *, name=None, base_url=None, logger=None,
27
+ def __init__(self, token=None, *, name=None, base_url=None, logger=None,
28
28
  folder_id=None):
29
29
  """
30
30
  :param str token: 登录的token
@@ -35,7 +35,7 @@ class WpsApi:
35
35
  """
36
36
  # 这里登录获得的是自己账号的token
37
37
  # Get the token from https://solution.wps.cn/weboffice-go-sdk/api/script/token
38
- self.token = token
38
+ self.token = token or os.getenv('WPS_API_TOKEN')
39
39
  self.name = name or self.token[-6:]
40
40
  self.base_url = base_url or 'https://solution.wps.cn/weboffice-go-sdk/api'
41
41
  self.default_template = 'https://kdocs.cn/l/cjVHm9Zy9jU1' # 空白表格,默认的一个表格模板文件,用于创建新文件、测试等
@@ -208,6 +208,8 @@ class WpsApi:
208
208
  :param return_mode: 返回格式
209
209
  None,提取到的结果
210
210
  json: 返回json格式
211
+
212
+ 注意这个接口使用的都是wpsapi 1.0版本
211
213
  """
212
214
  reply = self.post('script/evaluate', {
213
215
  'file_id': str(file_id),
@@ -223,11 +225,73 @@ class WpsApi:
223
225
  return reply['return']
224
226
 
225
227
 
228
+ class WpsOnlineWorkbook:
229
+ def __init__(self, file_id=None, token=None):
230
+ """
231
+ 初始化WpsOnlineWorkbook实例。
232
+
233
+ :param file_id: 可选参数,指定要操作的文件ID。如果未提供,将创建一个新文件。
234
+ :param token: 可选参数,用于与WPS API交互的令牌。如果未提供,将从环境变量中获取。
235
+ """
236
+ self.wpsapi = WpsApi(token=token)
237
+ self.file_id = file_id or self.create()
238
+
239
+ def create(self, src_file_id=None):
240
+ """
241
+ 创建一个新的在线工作簿,并返回文件ID。
242
+
243
+ :return: 新创建的文件ID
244
+ """
245
+ new_file_id = self.wpsapi.save_as_file(src_file_id) # 使用默认模板创建新文件
246
+ self.file_id = new_file_id
247
+ return new_file_id
248
+
249
+ def save_as_file(self, dst_folder_id=None):
250
+ """
251
+ 将当前工作簿另存为新文件。
252
+
253
+ :param dst_folder_id: 可选参数,指定保存文件的目标文件夹ID
254
+ :return: 新文件的ID
255
+ """
256
+ new_file_id = self.wpsapi.save_as_file(self.file_id, dst_folder_id)
257
+ return new_file_id
258
+
259
+ def delete(self):
260
+ """
261
+ 删除当前工作簿。
262
+ """
263
+ self.wpsapi.delete_file(self.file_id)
264
+
265
+ def download(self, target_file_path):
266
+ """
267
+ 下载当前工作簿到本地。
268
+
269
+ :param target_file_path: 本地保存文件的路径
270
+ """
271
+ self.wpsapi.download(self.file_id, target_file_path)
272
+
273
+ def run_airscript(self, code, return_mode=None):
274
+ """
275
+ 在当前工作簿上运行AirScript代码。
276
+
277
+ :param code: 要执行的AirScript代码
278
+ :param return_mode: 返回格式,None表示提取结果,'json'表示返回json格式
279
+ :return: 执行结果
280
+ """
281
+ from pyxllib.text.jscode import assemble_dependencies_from_jstools, remove_js_comments
282
+
283
+ # 这里的版本默认支持扩展的js工具
284
+ code = assemble_dependencies_from_jstools(code)
285
+ code = remove_js_comments(code)
286
+ print(code)
287
+ return self.wpsapi.run_airscript(self.file_id, code, return_mode)
288
+
289
+
226
290
  class WpsGroupApi(WpsApi):
227
291
  """ 团队版的api
228
292
  """
229
293
 
230
- def __init__(self, token, *, group_id=None, group_folder_id=None, **kwargs):
294
+ def __init__(self, token=None, *, group_id=None, group_folder_id=None, **kwargs):
231
295
  super().__init__(token, **kwargs)
232
296
  self.group_id = group_id
233
297
  self.group_folder_id = group_folder_id # 团队版的默认存储目录
@@ -0,0 +1,441 @@
1
+ function __1_定位工具() {
2
+
3
+ }
4
+
5
+ // 根据提供的 pattern 在 range 中寻找 cell
6
+ // 如果没有提供 range,默认在 ActiveSheet.UsedRange 中寻找
7
+ function findCell(pattern, range = ActiveSheet.UsedRange) {
8
+ const cell = range.Find(pattern, range, xlValues, xlWhole)
9
+ return cell
10
+ }
11
+
12
+ function levenshteinDistance(a, b) {
13
+ const matrix = [];
14
+
15
+ let i;
16
+ for (i = 0; i <= b.length; i++) {
17
+ matrix[i] = [i];
18
+ }
19
+
20
+ let j;
21
+ for (j = 0; j <= a.length; j++) {
22
+ matrix[0][j] = j;
23
+ }
24
+
25
+ for (i = 1; i <= b.length; i++) {
26
+ for (j = 1; j <= a.length; j++) {
27
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
28
+ matrix[i][j] = matrix[i - 1][j - 1];
29
+ } else {
30
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1));
31
+ }
32
+ }
33
+ }
34
+
35
+ return matrix[b.length][a.length];
36
+ }
37
+
38
+ // 兼容1.0版本的常规使用方式
39
+ function findColumn(pattern, range = ActiveSheet.UsedRange) {
40
+ let cell = findCell(pattern, range);
41
+ let columnIndex;
42
+ if (!cell) {
43
+ let minDistance = Infinity;
44
+ for (let i = 1; i <= range.Columns.Count; i++) {
45
+ const columnName = range.Cells(1, i).Value;
46
+ const distance = levenshteinDistance(pattern, columnName);
47
+ if (distance < minDistance) {
48
+ minDistance = distance;
49
+ columnIndex = i;
50
+ }
51
+ }
52
+ } else {
53
+ columnIndex = cell.Column;
54
+ }
55
+ return columnIndex;
56
+ }
57
+
58
+
59
+ // 2.0版本里支持缓存模式的查询
60
+ const findColumn2 = Object.assign(
61
+ function (pattern, range = ActiveSheet.UsedRange, cache = true) {
62
+ // 定义内部缓存
63
+ const sheetName = range.Parent.Name;
64
+ const rangeAddress = range.Address;
65
+ const cacheKey = `${sheetName}-${rangeAddress}-${pattern}`;
66
+
67
+ // 检查缓存命中
68
+ if (cache && findColumn2._cache[cacheKey] !== undefined) {
69
+ return findColumn2._cache[cacheKey];
70
+ }
71
+
72
+ // 查找列逻辑
73
+ let cell = findCell(pattern, range); // 精确匹配
74
+ let columnIndex;
75
+
76
+ if (!cell) { // 模糊匹配
77
+ let minDistance = Infinity;
78
+ for (let i = 1; i <= range.Columns.Count; i++) {
79
+ const columnName = range.Cells(1, i).Value;
80
+ const distance = levenshteinDistance(pattern, columnName);
81
+ if (distance < minDistance) {
82
+ minDistance = distance;
83
+ columnIndex = i;
84
+ }
85
+ }
86
+ } else {
87
+ columnIndex = cell.Column;
88
+ }
89
+
90
+ // 若启用缓存,存入缓存
91
+ if (cache) {
92
+ findColumn2._cache[cacheKey] = columnIndex;
93
+ }
94
+
95
+ return columnIndex;
96
+ },
97
+ {
98
+ // 缓存对象
99
+ _cache: {},
100
+
101
+ // 清除缓存方法
102
+ clearCache() {
103
+ this._cache = {};
104
+ }
105
+ }
106
+ );
107
+
108
+
109
+ // 判断一个 cells 集合是否为空
110
+ function isEmpty(cells) {
111
+ for (let i = 1; i <= cells.Count; i++) {
112
+ if (cells.Item(i).Text) {
113
+ return false;
114
+ }
115
+ }
116
+ return true;
117
+ }
118
+
119
+ // 根据提供的 pattern 在 range 中寻找 row
120
+ // 如果没有提供 range,默认在 ActiveSheet.UsedRange 中寻找
121
+ function findRow(pattern, range = ActiveSheet.UsedRange) {
122
+ const cell = findCell(pattern, range)
123
+ if (cell) {
124
+ return cell.Row
125
+ }
126
+ }
127
+
128
+ // 获取实际使用的区域
129
+ function getUsedRange(sheet = ActiveSheet, maxRows = 500, maxColumns = 100, startFromA1 = true) {
130
+ /* 允许通过"表格上下文"信息,调整这里数据行的上限500行,或者列上限100列
131
+ 注意,如果分析预设的表格数据在这个限定参数内可以不改
132
+ 只有表格未知,或者明确数据量超过设置时,需要重新调整这里的参数
133
+ 调整的时候千万不要故意凑的刚刚好,可以设置一定的冗余区间
134
+ 比如数据说有4101条,那么这里阈值设置为5000也是可以的,比较保险。
135
+ */
136
+
137
+ // 默认获得的区间,有可能是有冗余的空行,所以还要进一步优化
138
+ let usedRange = sheet.UsedRange;
139
+
140
+ let lastRow = Math.min(usedRange.Rows.Count, maxRows);
141
+ let lastColumn = Math.min(usedRange.Columns.Count, maxColumns);
142
+
143
+ let firstRow = 1;
144
+ let firstColumn = 1;
145
+
146
+ // 找到最后一个非空行
147
+ for (; lastRow >= firstRow; lastRow--) {
148
+ if (!isEmpty(usedRange.Rows(lastRow).Cells)) {
149
+ break;
150
+ }
151
+ }
152
+
153
+ // 找到最后一个非空列
154
+ for (; lastColumn >= firstColumn; lastColumn--) {
155
+ if (!isEmpty(usedRange.Columns(lastColumn).Cells)) {
156
+ break;
157
+ }
158
+ }
159
+
160
+ // 如果表格不是从"A1"开始,找到第一个非空行和非空列
161
+ if (!startFromA1) {
162
+ for (; firstRow <= lastRow; firstRow++) {
163
+ if (!isEmpty(usedRange.Rows(firstRow).Cells)) {
164
+ break;
165
+ }
166
+ }
167
+
168
+ for (; firstColumn <= lastColumn; firstColumn++) {
169
+ if (!isEmpty(usedRange.Columns(firstColumn).Cells)) {
170
+ break;
171
+ }
172
+ }
173
+ }
174
+
175
+ // 创建一个新的 Range 对象,它只包含非空的行和列
176
+ let newUsedRange = sheet.Range(
177
+ usedRange.Cells(firstRow, firstColumn),
178
+ usedRange.Cells(lastRow, lastColumn)
179
+ );
180
+
181
+ return newUsedRange; // 返回新的实际数据区域
182
+ }
183
+
184
+ function __2_json数据导入导出() {
185
+
186
+ }
187
+
188
+ function clearSheetData(header = 1, dataStartRow = 2, sheet = ActiveSheet) {
189
+ let headerStartRow, headerEndRow, dataEndRow;
190
+
191
+ // 检查 header 参数,-1 表示不处理表头
192
+ if (header === -1) {
193
+ headerStartRow = headerEndRow = null;
194
+ } else if (typeof header === 'number') {
195
+ headerStartRow = headerEndRow = header;
196
+ } else if (Array.isArray(header)) {
197
+ [headerStartRow, headerEndRow] = header;
198
+ }
199
+
200
+ // 检查 dataStartRow 参数,-1 表示不处理数据区域
201
+ if (dataStartRow === -1) {
202
+ dataStartRow = dataEndRow = null;
203
+ } else if (typeof dataStartRow === 'number') {
204
+ let usedRange = sheet.UsedRange;
205
+ dataEndRow = usedRange.Row + usedRange.Rows.Count - 1;
206
+ } else if (Array.isArray(dataStartRow)) {
207
+ [dataStartRow, dataEndRow] = dataStartRow;
208
+ }
209
+
210
+ // 清空表头区域(保留格式),若未设置为 -1
211
+ if (headerStartRow !== null && headerEndRow !== null) {
212
+ sheet.Rows(headerStartRow + ':' + headerEndRow).ClearContents();
213
+ }
214
+
215
+ // 删除数据区域(不保留格式),若未设置为 -1
216
+ if (dataStartRow !== null && dataEndRow !== null) {
217
+ sheet.Rows(dataStartRow + ':' + dataEndRow).Clear();
218
+ }
219
+ }
220
+
221
+ function writeJsonToSheet(jsonData, headerRow = 1, dataStartRow = 2, sheet = ActiveSheet) {
222
+ let columns = jsonData.columns || [];
223
+ let data = jsonData.data || [];
224
+
225
+ // 若存在 index,则将其添加为第一列
226
+ if (jsonData.index) {
227
+ columns = ['index', ...columns];
228
+ data = jsonData.index.map((idx, i) => [idx, ...data[i]]);
229
+ }
230
+
231
+ const startCol = sheet.UsedRange.Column;
232
+
233
+ // 写入表头
234
+ for (let j = 0; j < columns.length; j++) {
235
+ sheet.Cells(headerRow, startCol + j).Value2 = columns[j];
236
+ }
237
+
238
+ // 写入数据内容
239
+ for (let i = 0; i < data.length; i++) {
240
+ for (let j = 0; j < data[i].length; j++) {
241
+ sheet.Cells(dataStartRow + i, startCol + j).Value2 = data[i][j];
242
+ }
243
+ }
244
+ }
245
+
246
+
247
+ function writeArrToSheet(arr, cel) {
248
+ // 遍历数组,将每行的数据写入 Excel
249
+ for (let i = 0; i < arr.length; i++) {
250
+ const row = arr[i];
251
+ // 如果当前行存在,则遍历该行的元素
252
+ if (Array.isArray(row)) {
253
+ for (let j = 0; j < row.length; j++) {
254
+ cel.Offset(i, j).Value2 = row[j];
255
+ }
256
+ }
257
+ }
258
+ }
259
+
260
+
261
+ // 将选中sheetName,及指定字段fields的数据,打包成list[dict]格式
262
+ // 使用示例:tableDataToCompactJSON('酒水', ['名称', '标签'], 4)
263
+ function tableDataToJSON(sheetName, fields, startRow = null, endRow = null) {
264
+ const sheet = Sheets(sheetName);
265
+ const urg = getUsedRange(sheet);
266
+
267
+ // 获取起始和结束行,支持默认算法
268
+ const dataStartRow = startRow || (urg.Find(fields[0]).Row + 1); // 默认为字段列的下一行
269
+ const dataEndRow = endRow || (urg.Row + urg.Rows.Count - 1); // 默认为表格的最后一行
270
+
271
+ // 查找各字段对应的列位置
272
+ const fieldColumns = fields.reduce((acc, field) => {
273
+ acc[field] = findColumn(field, urg);
274
+ return acc;
275
+ }, {});
276
+
277
+ // 遍历每一行数据并提取指定字段
278
+ const jsonData = [];
279
+ for (let i = dataStartRow; i <= dataEndRow; i++) {
280
+ const rowData = {};
281
+ fields.forEach(field => {
282
+ // 注意:提取单元格的文本内容。注意如果单元格是undefined,好像这个field是自动过滤掉不保存的,下游要注意特殊处理
283
+ rowData[field] = sheet.Cells(i, fieldColumns[field]).Value2;
284
+ });
285
+ jsonData.push(rowData); // 将行数据加入 JSON 数组
286
+ }
287
+ return jsonData;
288
+ }
289
+
290
+ // 返回格式{field1: [x1, x2, ...], field2: [y1, y2, ...]}
291
+ function tableDataToCompactJSON(sheetName, fields, startRow = null, endRow = null) {
292
+ const sheet = Sheets(sheetName);
293
+ const urg = getUsedRange(sheet);
294
+
295
+ // 获取起始和结束行,默认使用字段列下一行至数据区域最后一行
296
+ const dataStartRow = startRow || (urg.Find(fields[0]).Row + 1);
297
+ const dataEndRow = endRow || (urg.Row + urg.Rows.Count - 1);
298
+
299
+ // 查找各字段对应的列位置
300
+ const fieldColumns = fields.reduce((acc, field) => {
301
+ acc[field] = findColumn(field, urg);
302
+ return acc;
303
+ }, {});
304
+
305
+ // 创建紧凑的JSON结构
306
+ const compactJSON = fields.reduce((acc, field) => {
307
+ acc[field] = []; // 初始化每个字段的列表
308
+ return acc;
309
+ }, {});
310
+
311
+ // 遍历每一行数据并填充到紧凑结构中
312
+ for (let i = dataStartRow; i <= dataEndRow; i++) {
313
+ fields.forEach(field => {
314
+ compactJSON[field].push(sheet.Cells(i, fieldColumns[field]).Value2);
315
+ });
316
+ }
317
+ return compactJSON;
318
+ }
319
+
320
+
321
+ function __3_py服务工具箱() {
322
+
323
+ }
324
+
325
+ // 调用python后端服务
326
+ function runPyScript(script, query = '', host = '{{JSA_POST_DEFAULT_HOST}}') {
327
+ const url = `{{JSA_POST_HOST_URL}}/${host}/common/run_py`;
328
+
329
+ try {
330
+ // 使用 HTTP 模块发送 POST 请求
331
+ const response = HTTP.post(url, {query, script}, {
332
+ headers: {
333
+ 'Authorization': 'Bearer {{JSA_POST_TOKEN}}',
334
+ 'Content-Type': 'application/json'
335
+ }
336
+ });
337
+
338
+ // 获取并解析响应
339
+ const output = response.json().output;
340
+ return output;
341
+ } catch (error) {
342
+ return {result: `\n执行报错:\n${error.message}`};
343
+ }
344
+ }
345
+
346
+ function runIsolatedPyScript(script, host = '{{JSA_POST_DEFAULT_HOST}}') {
347
+ const url = `{{JSA_POST_HOST_URL}}/${host}/common/run_isolated_py`;
348
+ try {
349
+ // 判断 script 的类型: script可以只输入py代码,也可以输入配置好的整个字典数据
350
+ const payload = typeof script === 'string' ? {script} : script;
351
+ const response = HTTP.post(url, payload, {
352
+ headers: {
353
+ 'Authorization': 'Bearer {{JSA_POST_TOKEN}}',
354
+ 'Content-Type': 'application/json'
355
+ }
356
+ });
357
+ return response.json();
358
+ } catch (error) {
359
+ return {result: `\n执行报错:\n${error.message}`};
360
+ }
361
+ }
362
+
363
+
364
+ function getPyTaskResult(taskId, retries = 1, host = '{{JSA_POST_DEFAULT_HOST}}', delay = 5000) {
365
+ const url = `{{JSA_POST_HOST_URL}}/${host}/common/get_task_result/${taskId}`;
366
+
367
+ for (let attempt = 0; attempt < retries; attempt++) {
368
+ try {
369
+ // 发送 GET 请求获取任务结果
370
+ const response = HTTP.get(url, {
371
+ headers: {
372
+ 'Authorization': 'Bearer {{JSA_POST_TOKEN}}',
373
+ 'Content-Type': 'application/json'
374
+ }
375
+ });
376
+
377
+ const result = response.json();
378
+
379
+ // 如果任务完成,则返回结果
380
+ if (!result.error) {
381
+ return result;
382
+ }
383
+
384
+ console.log(`任务尚未完成,重试第 ${attempt + 1} 次...`);
385
+ } catch (error) {
386
+ console.error(`获取任务结果时出错: ${error.message}`);
387
+ }
388
+
389
+ // 如果需要重试,则等待一段时间
390
+ if (attempt < retries - 1) {
391
+ Sleep(delay);
392
+ }
393
+ }
394
+
395
+ // 超过重试次数仍未成功
396
+ return {error: "任务超时未完成"};
397
+ }
398
+
399
+
400
+ function __4_日期处理() {
401
+
402
+ }
403
+
404
+
405
+ // 将 Excel 日期转换为 JavaScript 日期
406
+ function xlDateToJSDate(xlDate) {
407
+ return new Date((xlDate - 25569) * 24 * 3600 * 1000);
408
+ }
409
+
410
+ // 判断日期是否在本周
411
+ function isCurrentWeek(date) {
412
+ const today = new Date();
413
+ today.setHours(0, 0, 0, 0); // 把时间设为午夜以准确地比较日期
414
+ const firstDayOfWeek = new Date(today.setDate(today.getDate() - today.getDay()));
415
+ const lastDayOfWeek = new Date(today.setDate(today.getDate() - today.getDay() + 6));
416
+ return date >= firstDayOfWeek && date <= lastDayOfWeek;
417
+ }
418
+
419
+ // 判断日期是否在当前月份
420
+ function isCurrentMonth(date) {
421
+ const currentDate = new Date();
422
+ currentDate.setHours(0, 0, 0, 0); // 把时间设为午夜stdcode以准确地比较日期
423
+ return date.getMonth() === currentDate.getMonth() && date.getFullYear() === currentDate.getFullYear();
424
+ }
425
+
426
+ // 判断日期是否在下周
427
+ function isNextWeek(date) {
428
+ const today = new Date();
429
+ today.setHours(0, 0, 0, 0); // 把时间设为午夜以准确地比较日期
430
+ const nextWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 7);
431
+ return date > today && date <= nextWeek;
432
+ }
433
+
434
+ // 判断日期是否在下个月
435
+ function isNextMonth(date) {
436
+ const today = new Date();
437
+ today.setHours(0, 0, 0, 0); // 把时间设为午夜以准确地比较日期
438
+ const nextMonth = new Date(today.getFullYear(), today.getMonth() + 1, 1);
439
+ const endDateOfNextMonth = new Date(today.getFullYear(), today.getMonth() + 2, 0);
440
+ return date >= nextMonth && date <= endDateOfNextMonth;
441
+ }