pyxllib 0.3.135__tar.gz → 0.3.137__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 (363) hide show
  1. {pyxllib-0.3.135/pyxllib.egg-info → pyxllib-0.3.137}/PKG-INFO +13 -13
  2. pyxllib-0.3.137/pyxllib/autogui/uiautolib.py +56 -0
  3. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/wechat.py +79 -6
  4. pyxllib-0.3.137/pyxllib/autogui/wechat_msgbox.py +339 -0
  5. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/kq5034lib.py +34 -3
  6. {pyxllib-0.3.135 → pyxllib-0.3.137/pyxllib.egg-info}/PKG-INFO +13 -13
  7. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib.egg-info/SOURCES.txt +2 -0
  8. {pyxllib-0.3.135 → pyxllib-0.3.137}/setup.py +1 -1
  9. {pyxllib-0.3.135 → pyxllib-0.3.137}/LICENSE +0 -0
  10. {pyxllib-0.3.135 → pyxllib-0.3.137}/MANIFEST.in +0 -0
  11. {pyxllib-0.3.135 → pyxllib-0.3.137}/README.md +0 -0
  12. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/__init__.py +0 -0
  13. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/__init__.py +0 -0
  14. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/disjoint.py +0 -0
  15. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/geo.py +0 -0
  16. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/intervals.py +0 -0
  17. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/matcher.py +0 -0
  18. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/newbie.py +0 -0
  19. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/pupil.py +0 -0
  20. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/shapelylib.py +0 -0
  21. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/specialist.py +0 -0
  22. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/stat.py +0 -0
  23. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/treelib.py +0 -0
  24. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/algo/unitlib.py +0 -0
  25. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/__init__.py +0 -0
  26. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/activewin.py +0 -0
  27. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/all.py +0 -0
  28. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/autogui.py +0 -0
  29. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/autogui/virtualkey.py +0 -0
  30. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/__init__.py +0 -0
  31. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/expert.py +0 -0
  32. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/imfile.py +0 -0
  33. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/imhash.py +0 -0
  34. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/pupil.py +0 -0
  35. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/rgbfmt.py +0 -0
  36. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/trackbartools.py +0 -0
  37. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/xlcvlib.py +0 -0
  38. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/cv/xlpillib.py +0 -0
  39. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/__init__.py +0 -0
  40. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/echarts.py +0 -0
  41. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/jsonlib.py +0 -0
  42. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/oss.py +0 -0
  43. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/pglib.py +0 -0
  44. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/sqlite.py +0 -0
  45. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/data/sqllib.py +0 -0
  46. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/JLineViewer.py +0 -0
  47. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/__init__.py +0 -0
  48. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/demolib.py +0 -0
  49. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/drissionlib.py +0 -0
  50. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/old.py +0 -0
  51. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/qt.py +0 -0
  52. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/robustprocfile.py +0 -0
  53. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/seleniumlib.py +0 -0
  54. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/tk.py +0 -0
  55. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/unixlib.py +0 -0
  56. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/utools.py +0 -0
  57. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/webhook.py +0 -0
  58. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/win32lib.py +0 -0
  59. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/ext/yuquelib.py +0 -0
  60. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/__init__.py +0 -0
  61. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/docxlib.py +0 -0
  62. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/gitlib.py +0 -0
  63. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/libreoffice.py +0 -0
  64. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/movielib.py +0 -0
  65. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/newbie.py +0 -0
  66. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/onenotelib.py +0 -0
  67. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/packlib/__init__.py +0 -0
  68. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/packlib/zipfile.py +0 -0
  69. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/pdflib.py +0 -0
  70. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/pupil.py +0 -0
  71. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/specialist/__init__.py +0 -0
  72. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/specialist/dirlib.py +0 -0
  73. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/specialist/download.py +0 -0
  74. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/specialist/filelib.py +0 -0
  75. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/xlsxlib.py +0 -0
  76. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/file/xlsyncfile.py +0 -0
  77. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/__init__.py +0 -0
  78. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/cachetools.py +0 -0
  79. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/deprecatedlib.py +0 -0
  80. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/ipyexec.py +0 -0
  81. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/multiprocs.py +0 -0
  82. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/newbie.py +0 -0
  83. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/pupil.py +0 -0
  84. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/scheduler.py +0 -0
  85. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/sitepackages.py +0 -0
  86. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/__init__.py +0 -0
  87. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/bc.py +0 -0
  88. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/browser.py +0 -0
  89. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/common.py +0 -0
  90. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/datetime.py +0 -0
  91. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/tictoc.py +0 -0
  92. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/specialist/xllog.py +0 -0
  93. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/prog/xlosenv.py +0 -0
  94. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/stdlib/__init__.py +0 -0
  95. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  96. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  97. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  98. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/__init__.py +0 -0
  99. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/ahocorasick.py +0 -0
  100. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/charclasslib.py +0 -0
  101. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/jiebalib.py +0 -0
  102. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/jinjalib.py +0 -0
  103. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/jscode.py +0 -0
  104. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/latex/__init__.py +0 -0
  105. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/levenshtein.py +0 -0
  106. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/nestenv.py +0 -0
  107. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/newbie.py +0 -0
  108. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/pupil/__init__.py +0 -0
  109. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/pupil/common.py +0 -0
  110. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/pupil/xlalign.py +0 -0
  111. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/pycode.py +0 -0
  112. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/specialist/__init__.py +0 -0
  113. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/specialist/common.py +0 -0
  114. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/specialist/ptag.py +0 -0
  115. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/spellchecker.py +0 -0
  116. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/templates/echart_base.html +0 -0
  117. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/templates/highlight_code.html +0 -0
  118. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/templates/latex_editor.html +0 -0
  119. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/vbacode.py +0 -0
  120. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/text/xmllib.py +0 -0
  121. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/xl.py +0 -0
  122. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib/xlcv.py +0 -0
  123. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib.egg-info/dependency_links.txt +0 -0
  124. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib.egg-info/requires.txt +12 -12
  125. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxllib.egg-info/top_level.txt +0 -0
  126. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/__init__.py +0 -0
  127. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/__init__.py +0 -0
  128. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/clientlib.py +0 -0
  129. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/specialist.py +0 -0
  130. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/torch_app.py +0 -0
  131. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/xlpaddle.py +0 -0
  132. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ai/xltorch.py +0 -0
  133. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/__init__.py +0 -0
  134. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/coco.py +0 -0
  135. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/datacls.py +0 -0
  136. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/datasets.py +0 -0
  137. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/gptlib.py +0 -0
  138. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/icdar/__init__.py +0 -0
  139. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/icdar/deteval.py +0 -0
  140. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/icdar/icdar2013.py +0 -0
  141. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/icdar/iou.py +0 -0
  142. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  143. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/imtextline.py +0 -0
  144. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/labelme.py +0 -0
  145. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/removeline.py +0 -0
  146. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/specialist.py +0 -0
  147. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/data/tiktokenlib.py +0 -0
  148. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/eval/__init__.py +0 -0
  149. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/openai2/__init__.py +0 -0
  150. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/openai2/_core/chat.py +0 -0
  151. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
  152. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/openai2/_core/group_chat.py +0 -0
  153. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/openai2/openai2.py +0 -0
  154. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/paddleocr.py +0 -0
  155. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/__init__.py +0 -0
  156. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  157. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/__init__.py +0 -0
  158. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  159. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  160. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  161. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  162. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  163. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  164. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  165. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  166. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  167. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  168. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  169. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  170. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  171. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  172. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  173. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  174. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  175. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  176. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  177. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  178. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  179. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  180. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  181. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/__init__.py +0 -0
  182. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  183. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  184. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  185. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  186. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  187. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  188. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  189. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  190. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  191. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  192. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  193. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  194. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  195. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  196. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  197. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  198. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  199. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  200. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  201. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  202. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  203. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  204. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  205. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  206. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  207. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  208. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  209. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  210. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  211. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  212. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  213. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  214. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  215. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  216. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  217. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  218. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  219. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  220. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  221. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  222. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  223. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  224. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  225. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  226. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  227. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  228. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  229. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  230. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  231. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  232. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  233. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  234. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  235. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  236. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  237. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  238. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  239. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  240. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  241. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  242. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  243. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  244. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  245. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  246. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  247. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  248. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  249. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  250. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  251. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  252. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  253. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  254. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  255. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  256. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  257. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  258. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  259. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  260. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  261. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  262. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  263. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  264. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  265. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  266. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  267. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  268. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  269. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  270. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  271. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  272. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  273. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  274. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/__init__.py +0 -0
  275. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/eval.py +0 -0
  276. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/export_center.py +0 -0
  277. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/export_model.py +0 -0
  278. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  279. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  280. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  281. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  282. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  283. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  284. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  285. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  286. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  287. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  288. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  289. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  290. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/program.py +0 -0
  291. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  292. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/train.py +0 -0
  293. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  294. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  295. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/__init__.py +0 -0
  296. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  297. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  298. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  299. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  300. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  301. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  302. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  303. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  304. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  305. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  306. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  307. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  308. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  309. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  310. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  311. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  312. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  313. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  314. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  315. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  316. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  317. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  318. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  319. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  320. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  321. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  322. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  323. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  324. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  325. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  326. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  327. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  328. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  329. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  330. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  331. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  332. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  333. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  334. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  335. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  336. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  337. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  338. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  339. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/iou.py +0 -0
  340. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/logging.py +0 -0
  341. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/network.py +0 -0
  342. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  343. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/profiler.py +0 -0
  344. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/save_load.py +0 -0
  345. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/stats.py +0 -0
  346. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppocr/utils/utility.py +0 -0
  347. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/__init__.py +0 -0
  348. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/predict_system.py +0 -0
  349. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/__init__.py +0 -0
  350. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  351. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/matcher.py +0 -0
  352. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  353. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  354. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  355. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  356. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  357. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  358. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  359. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  360. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/ppstructure/utility.py +0 -0
  361. {pyxllib-0.3.135 → pyxllib-0.3.137}/pyxlpr/xlai.py +0 -0
  362. {pyxllib-0.3.135 → pyxllib-0.3.137}/requirements.txt +0 -0
  363. {pyxllib-0.3.135 → pyxllib-0.3.137}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.135
3
+ Version: 0.3.137
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,29 +42,29 @@ Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
42
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
43
  Requires-Dist: pillow; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
- Requires-Dist: pynvml; extra == "xlai"
46
45
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
46
+ Requires-Dist: pynvml; extra == "xlai"
47
+ Requires-Dist: visdom; extra == "xlai"
47
48
  Requires-Dist: opencv-python; extra == "xlai"
48
49
  Requires-Dist: pillow; extra == "xlai"
49
- Requires-Dist: visdom; extra == "xlai"
50
50
  Provides-Extra: xlall
51
- Requires-Dist: sentencepiece; extra == "xlall"
52
- Requires-Dist: flask-wtf; extra == "xlall"
53
- Requires-Dist: ujson; extra == "xlall"
54
- Requires-Dist: uvicorn; extra == "xlall"
55
- Requires-Dist: arts; extra == "xlall"
56
- Requires-Dist: flask-jwt-extended; extra == "xlall"
57
- Requires-Dist: fastapi; extra == "xlall"
58
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
59
51
  Requires-Dist: flask-restful; extra == "xlall"
60
- Requires-Dist: flask-cors; extra == "xlall"
61
- Requires-Dist: html2text; extra == "xlall"
62
52
  Requires-Dist: flask; extra == "xlall"
53
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
54
+ Requires-Dist: flask-jwt-extended; extra == "xlall"
63
55
  Requires-Dist: openai2; extra == "xlall"
64
56
  Requires-Dist: opencv-python; extra == "xlall"
65
57
  Requires-Dist: pillow; extra == "xlall"
58
+ Requires-Dist: fastapi; extra == "xlall"
59
+ Requires-Dist: ujson; extra == "xlall"
66
60
  Requires-Dist: zhconv; extra == "xlall"
61
+ Requires-Dist: flask-cors; extra == "xlall"
62
+ Requires-Dist: html2text; extra == "xlall"
63
+ Requires-Dist: uvicorn; extra == "xlall"
64
+ Requires-Dist: sentencepiece; extra == "xlall"
65
+ Requires-Dist: flask-wtf; extra == "xlall"
67
66
  Requires-Dist: xlrd; extra == "xlall"
67
+ Requires-Dist: arts; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2024/11/05
6
+
7
+ """
8
+ 以uiautomation为核心的相关工具库
9
+ """
10
+
11
+ import uiautomation as auto
12
+
13
+ # ui组件大多是树形组织结构,没有专业的树形结构库,能搞个毛线。什么?auto库有自带树形操作?那点基础功能能干毛线。
14
+ from anytree import NodeMixin, RenderTree
15
+
16
+
17
+ class UiCtrlNode(NodeMixin):
18
+ def __init__(self, ctrl, parent=None):
19
+ # 初始化节点信息
20
+ self.ctrl = ctrl
21
+ self.ctrl_type = ctrl.ControlTypeName
22
+ self.text = ctrl.Name
23
+ self.parent = parent # 指定父节点,用于形成树结构
24
+
25
+ # 自动递归创建子节点
26
+ self.build_children()
27
+
28
+ def build_children(self):
29
+ """ 创建并添加子节点到树中 """
30
+ for child_ctrl in self.ctrl.GetChildren():
31
+ self.__class__(child_ctrl, parent=self) # 递归构建子节点
32
+
33
+ def __repr__(self):
34
+ """ 用于在打印节点时显示关键信息 """
35
+ return f"UiNode(ctrl_type={self.ctrl_type}, text={self.text.replace('\n', ' ')})"
36
+
37
+ def __getitem__(self, index):
38
+ """ 通过索引直接访问子节点
39
+
40
+ ui操作经常要各种结构化的访问,加个这个简化引用方式
41
+ """
42
+ return self.children[index]
43
+
44
+ def render_tree(self):
45
+ """ 可视化输出树结构信息进行数据结构分析 """
46
+ for pre, fill, node in RenderTree(self): # 使用 self.root 确保从根节点渲染
47
+ print(f"{pre}{node.ctrl_type} {node.get_hash_tag()} {node.text.replace('\n', ' ')}")
48
+
49
+ def get_hash_tag(self, level=1):
50
+ """ 生成节点的哈希字符串,以反映子树结构,一般用来对节点做分类及映射到对应处理函数 """
51
+ # 当前节点的类型标识符
52
+ hash_strs = [f"{level}{self.ctrl_type[0].lower()}"]
53
+ # 遍历所有子节点,递归生成子节点的哈希值
54
+ for child in self.children:
55
+ hash_strs.append(f"{child.get_hash_tag(level + 1)}")
56
+ return ''.join(hash_strs)
@@ -13,13 +13,19 @@ from copy import deepcopy
13
13
  from typing import Iterable
14
14
  import os
15
15
  from typing import (Iterable, Callable, List)
16
+ import json
17
+ import re
16
18
 
17
19
  import ctypes
18
20
  from ctypes import wintypes
19
21
  import uiautomation as auto
22
+ from anytree import NodeMixin, RenderTree
20
23
 
21
24
  import win32clipboard
22
25
 
26
+ from pyxllib.autogui.wechat_msgbox import msg_parsers
27
+ from pyxllib.autogui.uiautolib import UiCtrlNode
28
+
23
29
 
24
30
  def __1_config():
25
31
  pass
@@ -243,6 +249,61 @@ def is_window_visible(class_name, name):
243
249
  return False
244
250
 
245
251
 
252
+ class WechatMsgNode(UiCtrlNode):
253
+ """ 微信消息的节点类型 """
254
+
255
+ def __init__(self, msg_box_ctrl, parent=None):
256
+ super().__init__(msg_box_ctrl, parent)
257
+ self.time = None # 每条消息都建立一个最近出现的时间作为时间戳?
258
+ self.msg_type = None # 消息类型:system, receive, send
259
+ self.content_type = None # 内容类型:text、image、file
260
+
261
+ self.user = None # 用户名
262
+ self.user2 = None # 群聊时用户会多一个群聊昵称
263
+ self.cite_text = None # 引用的内容,引用的不一定是文本,但是统一转成文本显示的
264
+
265
+ def parse_ctrl(self):
266
+ """ 解析出更精细的结构化信息 """
267
+ from pyxllib.autogui.wechat_msgbox import msg_parsers
268
+ tag = self.get_hash_tag()
269
+ if tag in msg_parsers:
270
+ msg_parsers[tag](self)
271
+
272
+ def _format_text(self, text):
273
+ """ 将换行替换为空格的小工具方法 """
274
+ return text.replace('\n', ' ')
275
+
276
+ def render_tree(self, node=None, prefix="", is_root=True):
277
+ """ 可视化输出树结构信息进行数据结构分析 """
278
+ if node is None:
279
+ node = self # 从根节点开始渲染
280
+
281
+ # 检查当前节点是否有 msg_type 标记
282
+ if node.msg_type:
283
+ # 如果有 msg_type 标记,则输出该节点信息,跳过子节点
284
+ msg = [f"{prefix}{node.msg_type}"]
285
+ if node.user:
286
+ msg.append(f"{node.user}:")
287
+ msg.append(self._format_text(node.text))
288
+ if node.cite_text:
289
+ msg.append(f"【引用】{self._format_text(node.cite_text)}")
290
+ print(' '.join(msg))
291
+ return # 不再递归渲染子节点
292
+
293
+ # 否则正常输出当前节点信息
294
+ print(f"{prefix}{node.ctrl_type} {node.get_hash_tag()} {self._format_text(node.text)}")
295
+
296
+ # 递归渲染子节点,非根节点开始增加缩进
297
+ for child in node.children:
298
+ self.render_tree(child, prefix + (" " if not is_root else ""), is_root=False)
299
+
300
+ def check_parser(self):
301
+ """ 检查解析效果 """
302
+ for c in self.root.children:
303
+ c.parse_ctrl()
304
+ self.root.render_tree()
305
+
306
+
246
307
  def __4_wx():
247
308
  pass
248
309
 
@@ -260,7 +321,7 @@ class WxOperation:
260
321
 
261
322
  Methods:
262
323
  -------
263
- __goto_chat_box(name):
324
+ goto_chat_box(name):
264
325
  跳转到 指定好友窗口
265
326
  __send_text(*msgs):
266
327
  发送文本。
@@ -293,14 +354,14 @@ class WxOperation:
293
354
  # 微信窗口置顶
294
355
  self.wx_window.SetTopmost(isTopmost=True)
295
356
 
296
- def __match_nickname(self, name) -> bool:
357
+ def match_nickname(self, name):
297
358
  """获取当前面板的好友昵称"""
298
359
  self.input_edit = self.wx_window.EditControl(Name=name)
299
360
  if self.input_edit.Exists(Interval.MAX_SEARCH_SECOND, searchIntervalSeconds=Interval.MAX_SEARCH_INTERVAL):
300
- return True
361
+ return self.input_edit
301
362
  return False
302
363
 
303
- def __goto_chat_box(self, name: str) -> bool:
364
+ def goto_chat_box(self, name: str) -> bool:
304
365
  """
305
366
  跳转到指定 name好友的聊天窗口。
306
367
 
@@ -310,6 +371,10 @@ class WxOperation:
310
371
  Returns:
311
372
  None
312
373
  """
374
+ if ctrl := self.match_nickname(name):
375
+ ctrl.SetFocus()
376
+ return ctrl
377
+
313
378
  assert name, "无法跳转到名字为空的聊天窗口"
314
379
  self.wx_window.SendKeys(text='{Ctrl}F', waitTime=Interval.BASE_INTERVAL)
315
380
  self.wx_window.SendKeys(text='{Ctrl}A', waitTime=Interval.BASE_INTERVAL)
@@ -331,6 +396,14 @@ class WxOperation:
331
396
  self.wx_window.SendKeys(text='{Esc}', waitTime=Interval.BASE_INTERVAL)
332
397
  return False
333
398
 
399
+ def get_messages(self):
400
+ """ 获得当前会话窗口的结构化对话记录 """
401
+ msg_box = WechatMsgNode(self.wx_window.ListControl(Name='消息'))
402
+ # for c in msg_box.children:
403
+ # c.parse_ctrl()
404
+ # msg_box.render_tree()
405
+ msg_box.check_parser()
406
+
334
407
  def at_at_everyone(self, group_chat_name: str):
335
408
  """
336
409
  @全部人的操作
@@ -517,8 +590,8 @@ class WxOperation:
517
590
  raise TypeError("发送的文件路径必须是可迭代的")
518
591
 
519
592
  # 如果当前面板已经是需发送好友, 则无需再次搜索跳转
520
- if not self.__match_nickname(name=name):
521
- if not self.__goto_chat_box(name=name):
593
+ if not self.match_nickname(name=name):
594
+ if not self.goto_chat_box(name=name):
522
595
  raise NameError('昵称不匹配')
523
596
 
524
597
  # 设置输入框为当前焦点
@@ -0,0 +1,339 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2024/11/05
6
+
7
+ """
8
+ 微信 消息框中不同消息结构的解析器 工具
9
+ """
10
+
11
+ import re
12
+ import json
13
+
14
+ # 定义全局字典
15
+ msg_parsers = {}
16
+
17
+
18
+ # 定义装饰器
19
+ def register_tool(key):
20
+ def decorator(func):
21
+ # 将函数添加到全局字典中,键为传入的key参数
22
+ msg_parsers[key] = func
23
+ return func
24
+
25
+ return decorator
26
+
27
+
28
+ @register_tool("1b2p3p3b3p")
29
+ def 系统_查看更多消息(node):
30
+ node.msg_type = 'system'
31
+ node.content_type = 'button_more'
32
+
33
+
34
+ @register_tool("1l2t")
35
+ def 系统_时间标签(node):
36
+ node.msg_type = 'system'
37
+ node.content_type = 'time'
38
+ node.time = node.text
39
+
40
+
41
+ # 刚刚发送的特殊时间标签
42
+ @register_tool("1l2p3p3p3t3p3p")
43
+ def 系统_时间标签2(node):
44
+ node.msg_type = 'system'
45
+ node.content_type = 'time'
46
+ node.time = node.text
47
+
48
+
49
+ @register_tool("1l2p3p3t3p")
50
+ def 系统_撤回消息(node):
51
+ node.msg_type = 'system'
52
+ node.content_type = 'recall'
53
+
54
+
55
+ @register_tool("1l2p3p3p4p5p6p7t3b")
56
+ def 发送_文本(node):
57
+ node.msg_type = 'send'
58
+ node.content_type = 'text'
59
+ node.user = node[0][2].text
60
+
61
+
62
+ @register_tool("1l2p3p3p4p5p6p7p7p8p8b3b")
63
+ def 发送_图片(node):
64
+ node.msg_type = 'send'
65
+ node.content_type = 'image'
66
+ node.user = node[0][2].text
67
+
68
+
69
+ @register_tool("1l2p3p3p4p5p6p7p7p8p9t9p9b8b3b")
70
+ def 发送_视频(node):
71
+ node.msg_type = 'send'
72
+ node.content_type = 'video'
73
+ node.user = node[0][2].text
74
+
75
+
76
+ @register_tool("1l2p3p3p4p5p6p7p7p8p9p10p11t6p7p8p9p10p11t7b3b")
77
+ def 发送_文本_引用文本(node):
78
+ node.msg_type = 'send'
79
+ node.content_type = 'text'
80
+ node.user = node[0][2].text
81
+ quoted_node = node[0][1][0][0] # 引用的层级结构
82
+ node.text = quoted_node[0][1][0][0][0][0].text
83
+ node.cite_text = quoted_node[1][0][0][0][0][0].text
84
+
85
+
86
+ @register_tool("1l2p3p3p4p5p6p7p7p8p9p10p11t6p7p8p9p10p11t11t11p12b7b3b")
87
+ def 发送_文本_引用图片(node):
88
+ node.msg_type = 'send'
89
+ node.content_type = 'text'
90
+ node.user = node[0][2].text
91
+ quoted_node = node[0][1][0][0]
92
+ node.text = quoted_node[0][1][0][0][0][0].text
93
+ node.cite_text = f'{quoted_node[1][0][0][0][0][0].text} : [图片]'
94
+
95
+
96
+ # 引用文件
97
+ @register_tool("1l2p3p3p4p5p6p7p7p8p9p10p11t6p7p8p9p10p11p12t11p12b7b3b")
98
+ def 发送_文本_引用文件(node):
99
+ node.msg_type = 'send'
100
+ node.content_type = 'text'
101
+ node.user = node[0][2].text
102
+ quoted_node = node[0][1][0][0]
103
+ node.text = quoted_node[0][1][0][0][0][0].text
104
+ node.cite_text = f'[文件] {quoted_node[1][0][0][0][0][0][0].text}'
105
+
106
+
107
+ # 发送文件
108
+ @register_tool("1l2p3p3p4p5p6p7p8p9p10t10p11t11t9p10p10p8p9t7b7b3b")
109
+ def 发送_文本_引用文件(node):
110
+ node.msg_type = 'send'
111
+ node.content_type = 'file'
112
+ node.user = node[0][2].text
113
+ file_node = node[0][1][0][0][0][0]
114
+ desc = {
115
+ 'name': file_node[0][0][0].text,
116
+ 'size': file_node[0][0][1][0].text,
117
+ 'platform': file_node[1][0].text
118
+ }
119
+ node.text = json.dumps(desc, ensure_ascii=False)
120
+
121
+
122
+ # 发送链接
123
+ @register_tool("1l2p3p3p4p5p6p7p8t8p9t9p9b8p9b9t7b3b")
124
+ def 发送_链接(node):
125
+ node.msg_type = 'send'
126
+ node.content_type = 'link'
127
+ node.user = node[0][2].text
128
+ link_node = node[0][1][0][0]
129
+ desc = {
130
+ 'title': link_node[0][0][0].text,
131
+ 'head': link_node[0][0][1][0].text,
132
+ 'author': link_node[0][0][2][1].text
133
+ }
134
+ node.text = json.dumps(desc, ensure_ascii=False)
135
+
136
+
137
+ # 转发消息
138
+ @register_tool("1l2p3p3p4p5p6p7p8t8p9t9t9t8p9p9t7b3b")
139
+ def 发送_转发消息(node):
140
+ node.msg_type = 'send'
141
+ node.content_type = 'messages'
142
+ node.user = node[0][2].text
143
+
144
+
145
+ @register_tool("1l2p3b3p4p5p6p7t3p")
146
+ def 接收_文本(node):
147
+ node.msg_type = 'receive'
148
+ node.content_type = 'text'
149
+ node.user = node[0][0].text
150
+
151
+
152
+ @register_tool("1l2p3b3p4p5p6p7p7b3p")
153
+ def 接收_图片(node):
154
+ node.msg_type = 'receive'
155
+ node.content_type = 'image'
156
+ node.user = node[0][0].text
157
+
158
+
159
+ @register_tool("1l2p3b3p4p5p6p7p8b8p8t7b3p")
160
+ def 接收_语音(node):
161
+ node.msg_type = 'receive'
162
+ node.content_type = 'voice'
163
+ node.user = node[0][0].text
164
+
165
+
166
+ @register_tool("1l2p3b3p4p5p6p7p8t8p9t9p9b8p9b9t7b3p")
167
+ def 接收_链接(node):
168
+ node.msg_type = 'receive'
169
+ node.content_type = 'link'
170
+ node.user = node[0][0].text
171
+ link_node = node[0][1][0][0][0][0] # 链接内容的层级结构
172
+ desc = {
173
+ 'title': link_node[0].text,
174
+ 'head': link_node[1][0].text, # 文章开头部分
175
+ 'author': link_node[2][1].text
176
+ }
177
+ node.text = json.dumps(desc, ensure_ascii=False)
178
+
179
+
180
+ @register_tool("1l2p3b3p4p5t4p5p6p7t3p")
181
+ def 群接收_文本(node):
182
+ node.msg_type = 'receive'
183
+ node.content_type = 'text'
184
+ node.user = node[0][0].text
185
+ node.user2 = node[0][1][0][0].text
186
+
187
+
188
+ @register_tool("1l2p3b3p4p5t4p5p6p7p7b3p")
189
+ def 群接收_图片(node):
190
+ node.msg_type = 'receive'
191
+ node.content_type = 'image'
192
+ node.user = node[0][0].text
193
+ node.user2 = node[0][1][0][0].text
194
+
195
+
196
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8p9p10t10p11t11t9p10p10p7b7b3p")
197
+ def 群接收_文件(node):
198
+ node.msg_type = 'receive'
199
+ node.content_type = 'file'
200
+ node.user = node[0][0].text
201
+ file_node = node[0][1] # 文件信息的节点
202
+ node.user2 = file_node[0][0].text
203
+ file_info_node = file_node[1][0][0][0][0]
204
+ desc = {
205
+ 'name': file_info_node[0][0].text,
206
+ 'size': file_info_node[0][1][0].text
207
+ }
208
+ node.text = json.dumps(desc, ensure_ascii=False)
209
+
210
+
211
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8p9p10t10p11t11t9p10p10p8p9t7b7b3p")
212
+ def 群接收_文件2(node):
213
+ node.msg_type = 'receive'
214
+ node.content_type = 'file'
215
+ node.user = node[0][0].text
216
+ node.user2 = node[0][1][0][0].text
217
+ file_info_node = node[0][1][1][0][0][0]
218
+ desc = {
219
+ 'name': file_info_node[0][0][0].text,
220
+ 'size': file_info_node[0][0][1][0].text,
221
+ 'platform': file_info_node[1][0].text
222
+ }
223
+ node.text = json.dumps(desc, ensure_ascii=False)
224
+
225
+
226
+ @register_tool("1l2p3b3p4p5t4p5p6p7b3p")
227
+ def 群接收_动画表情(node):
228
+ node.msg_type = 'receive'
229
+ node.content_type = 'emoji'
230
+ node.user = node[0][0].text
231
+ node.user2 = node[0][1][0][0].text
232
+
233
+
234
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8t8p9t9p9b8p9b9t7b3p")
235
+ def 群接收_链接_有公众号作者名(node):
236
+ node.msg_type = 'receive'
237
+ node.content_type = 'link'
238
+ node.user = node[0][0].text
239
+ link_node = node[0][1]
240
+ node.user2 = link_node[0][0].text
241
+ link_info_node = link_node[1][0][0][0]
242
+ desc = {
243
+ 'title': link_info_node[0].text,
244
+ 'head': link_info_node[1][0].text, # 文章开头的一小部分
245
+ 'author': link_info_node[2][0].text
246
+ }
247
+ node.text = json.dumps(desc, ensure_ascii=False)
248
+
249
+
250
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8t8p9t9p9b7b3p")
251
+ def 群接收_链接_无公众号作者名(node):
252
+ node.msg_type = 'receive'
253
+ node.content_type = 'link'
254
+ node.user = node[0][0].text
255
+ link_node = node[0][1]
256
+ node.user2 = link_node[0][0].text
257
+ link_info_node = link_node[1][0][0][0]
258
+ desc = {
259
+ 'title': link_info_node[0].text,
260
+ 'head': link_info_node[1][0].text # 文章开头的一小部分
261
+ }
262
+ node.text = json.dumps(desc, ensure_ascii=False)
263
+
264
+
265
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8b8p9p8p9p10p10t8p9p7b3p")
266
+ def 群接收_视频(node):
267
+ node.msg_type = 'receive'
268
+ node.content_type = 'video'
269
+ node.user = node[0][0].text
270
+ video_node = node[0][1]
271
+ node.user2 = video_node[0][0].text
272
+ video_info_node = video_node[1][0][0][0]
273
+ desc = {
274
+ 'author': video_info_node[2][0][1].text
275
+ }
276
+ node.text = json.dumps(desc, ensure_ascii=False)
277
+
278
+
279
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8t8p9t8t7b3p")
280
+ def 群接收_视频2(node):
281
+ node.msg_type = 'receive'
282
+ node.content_type = 'video'
283
+ node.user = node[0][0].text
284
+ video_node = node[0][1]
285
+ node.user2 = video_node[0][0].text
286
+ video_info_node = video_node[1][0][0][0]
287
+ desc = {
288
+ 'title': video_info_node[0].text,
289
+ 'head': video_info_node[1][0].text,
290
+ 'duration': video_info_node[2].text
291
+ }
292
+ node.text = json.dumps(desc, ensure_ascii=False)
293
+
294
+
295
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8p9b9t8t8b8p9t9t7b3p")
296
+ def 群接收_小程序(node):
297
+ node.msg_type = 'receive'
298
+ node.content_type = 'applet'
299
+ node.user = node[0][0].text
300
+ applet_node = node[0][1]
301
+ node.user2 = applet_node[0][0].text
302
+ applet_info_node = applet_node[1][0][0][0]
303
+ desc = {
304
+ 'name': applet_info_node[0][1].text,
305
+ 'title': applet_info_node[1].text,
306
+ 'footnote': applet_info_node[3][1].text
307
+ }
308
+ node.text = json.dumps(desc, ensure_ascii=False)
309
+
310
+
311
+ @register_tool("1l2p3p3p4p5l6p7p7t7p3p")
312
+ def 群接收_拍一拍(node):
313
+ node.msg_type = 'receive'
314
+ node.content_type = 'shake'
315
+ node.text = node[0][1][0][0].text
316
+ node.user = re.search(r'"(.+?)" 拍了拍 "', node.text).group(1)
317
+
318
+
319
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8t4p5p6p7p8p9t5b3p")
320
+ def 群接收_引用消息(node):
321
+ node.msg_type = 'receive'
322
+ node.content_type = 'text'
323
+ node.user = node[0][0].text
324
+ quoted_node = node[0][1]
325
+ node.user2 = quoted_node[0][0].text
326
+ node.text = quoted_node[1][0][0][0][0].text
327
+ node.cite_text = quoted_node[2][0][0][0][0][0].text
328
+
329
+
330
+ @register_tool("1l2p3b3p4p5t4p5p6p7p8t4p5p6p7p8p9p10t9p10b5b3p")
331
+ def 群接收_引用文件(node):
332
+ node.msg_type = 'receive'
333
+ node.content_type = 'text'
334
+ node.user = node[0][0].text
335
+ quoted_node = node[0][1]
336
+ node.user2 = quoted_node[0][0].text
337
+ node.text = quoted_node[1][0][0][0][0].text
338
+ file_node = quoted_node[2][0][0][0][0][0][0]
339
+ node.cite_text = f'[文件] {file_node.text}'
@@ -850,13 +850,44 @@ class 网课考勤:
850
850
  df = df.drop(items.index)
851
851
 
852
852
  # 3 匹配完后,还有目标金额的数据要列出来
853
+
854
+ # items = df[df['收支金额(元)'] == f'`{value:.2f}']
855
+ # # todo 这个要识别到'交易单号'中间的日期,降序排序
856
+ # for idx, row in items.iterrows():
857
+ # last_row += 1
858
+ # ws.cell2(last_row, '交易单号').value = row['微信支付业务单号']
859
+ # ws.cell2(last_row, '交易订单号').value = row['业务凭证号'][1:]
860
+ # ws.cell2(last_row, '订单金额').value = row['收支金额(元)']
861
+
862
+ # todo:新增测试用:
863
+ # 初始化一个空的 DataFrame,用于存储遍历结果
864
+ result_df = pd.DataFrame(columns=['微信支付业务单号', '业务凭证号', '收支金额'])
865
+ # 遍历符合条件的数据并存储到 result_df 中
853
866
  items = df[df['收支金额(元)'] == f'`{value:.2f}']
854
- # todo 这个要识别到'交易单号'中间的日期,降序排序
855
867
  for idx, row in items.iterrows():
868
+ # 将 row 中的数据添加到 result_df 中
869
+ result_df = pd.concat([
870
+ result_df,
871
+ pd.DataFrame({
872
+ '微信支付业务单号': [row['微信支付业务单号']],
873
+ '业务凭证号': [row['业务凭证号'][1:]], # 去掉业务凭证号的第一个字符
874
+ '收支金额': [row['收支金额(元)']]
875
+ })
876
+ ], ignore_index=True)
877
+
878
+ # 提取日期部分,并将其转为可排序的格式
879
+ result_df['日期'] = result_df['微信支付业务单号'].str[11:19] # 提取日期部分,假设日期位于固定位置
880
+ result_df['日期'] = pd.to_datetime(result_df['日期'], format='%Y%m%d')
881
+
882
+ # 按日期降序排序
883
+ result_df = result_df.sort_values(by='日期', ascending=False).drop(columns=['日期'])
884
+
885
+ # 将排序后的 DataFrame 写入到工作表中
886
+ for idx, row in result_df.iterrows():
856
887
  last_row += 1
857
888
  ws.cell2(last_row, '交易单号').value = row['微信支付业务单号']
858
- ws.cell2(last_row, '交易订单号').value = row['业务凭证号'][1:]
859
- ws.cell2(last_row, '订单金额').value = row['收支金额(元)']
889
+ ws.cell2(last_row, '交易订单号').value = row['业务凭证号']
890
+ ws.cell2(last_row, '订单金额').value = row['收支金额']
860
891
 
861
892
  # 4 保存
862
893
  self.wb.save(self.表格路径)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.135
3
+ Version: 0.3.137
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,29 +42,29 @@ Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
42
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
43
  Requires-Dist: pillow; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
- Requires-Dist: pynvml; extra == "xlai"
46
45
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
46
+ Requires-Dist: pynvml; extra == "xlai"
47
+ Requires-Dist: visdom; extra == "xlai"
47
48
  Requires-Dist: opencv-python; extra == "xlai"
48
49
  Requires-Dist: pillow; extra == "xlai"
49
- Requires-Dist: visdom; extra == "xlai"
50
50
  Provides-Extra: xlall
51
- Requires-Dist: sentencepiece; extra == "xlall"
52
- Requires-Dist: flask-wtf; extra == "xlall"
53
- Requires-Dist: ujson; extra == "xlall"
54
- Requires-Dist: uvicorn; extra == "xlall"
55
- Requires-Dist: arts; extra == "xlall"
56
- Requires-Dist: flask-jwt-extended; extra == "xlall"
57
- Requires-Dist: fastapi; extra == "xlall"
58
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
59
51
  Requires-Dist: flask-restful; extra == "xlall"
60
- Requires-Dist: flask-cors; extra == "xlall"
61
- Requires-Dist: html2text; extra == "xlall"
62
52
  Requires-Dist: flask; extra == "xlall"
53
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
54
+ Requires-Dist: flask-jwt-extended; extra == "xlall"
63
55
  Requires-Dist: openai2; extra == "xlall"
64
56
  Requires-Dist: opencv-python; extra == "xlall"
65
57
  Requires-Dist: pillow; extra == "xlall"
58
+ Requires-Dist: fastapi; extra == "xlall"
59
+ Requires-Dist: ujson; extra == "xlall"
66
60
  Requires-Dist: zhconv; extra == "xlall"
61
+ Requires-Dist: flask-cors; extra == "xlall"
62
+ Requires-Dist: html2text; extra == "xlall"
63
+ Requires-Dist: uvicorn; extra == "xlall"
64
+ Requires-Dist: sentencepiece; extra == "xlall"
65
+ Requires-Dist: flask-wtf; extra == "xlall"
67
66
  Requires-Dist: xlrd; extra == "xlall"
67
+ Requires-Dist: arts; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70