pyxllib 0.3.137__tar.gz → 0.3.138__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. {pyxllib-0.3.137/pyxllib.egg-info → pyxllib-0.3.138}/PKG-INFO +16 -16
  2. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/geo.py +12 -0
  3. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/autogui.py +31 -1
  4. pyxllib-0.3.138/pyxllib/autogui/uiautolib.py +162 -0
  5. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/wechat.py +174 -52
  6. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/wechat_msgbox.py +83 -3
  7. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/tictoc.py +4 -8
  8. {pyxllib-0.3.137 → pyxllib-0.3.138/pyxllib.egg-info}/PKG-INFO +16 -16
  9. {pyxllib-0.3.137 → pyxllib-0.3.138}/setup.py +1 -1
  10. pyxllib-0.3.137/pyxllib/autogui/uiautolib.py +0 -56
  11. {pyxllib-0.3.137 → pyxllib-0.3.138}/LICENSE +0 -0
  12. {pyxllib-0.3.137 → pyxllib-0.3.138}/MANIFEST.in +0 -0
  13. {pyxllib-0.3.137 → pyxllib-0.3.138}/README.md +0 -0
  14. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/__init__.py +0 -0
  15. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/__init__.py +0 -0
  16. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/disjoint.py +0 -0
  17. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/intervals.py +0 -0
  18. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/matcher.py +0 -0
  19. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/newbie.py +0 -0
  20. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/pupil.py +0 -0
  21. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/shapelylib.py +0 -0
  22. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/specialist.py +0 -0
  23. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/stat.py +0 -0
  24. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/treelib.py +0 -0
  25. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/algo/unitlib.py +0 -0
  26. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/__init__.py +0 -0
  27. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/activewin.py +0 -0
  28. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/all.py +0 -0
  29. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/autogui/virtualkey.py +0 -0
  30. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/__init__.py +0 -0
  31. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/expert.py +0 -0
  32. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/imfile.py +0 -0
  33. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/imhash.py +0 -0
  34. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/pupil.py +0 -0
  35. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/rgbfmt.py +0 -0
  36. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/trackbartools.py +0 -0
  37. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/xlcvlib.py +0 -0
  38. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/cv/xlpillib.py +0 -0
  39. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/__init__.py +0 -0
  40. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/echarts.py +0 -0
  41. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/jsonlib.py +0 -0
  42. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/oss.py +0 -0
  43. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/pglib.py +0 -0
  44. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/sqlite.py +0 -0
  45. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/data/sqllib.py +0 -0
  46. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/JLineViewer.py +0 -0
  47. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/__init__.py +0 -0
  48. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/demolib.py +0 -0
  49. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/drissionlib.py +0 -0
  50. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/kq5034lib.py +0 -0
  51. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/old.py +0 -0
  52. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/qt.py +0 -0
  53. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/robustprocfile.py +0 -0
  54. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/seleniumlib.py +0 -0
  55. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/tk.py +0 -0
  56. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/unixlib.py +0 -0
  57. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/utools.py +0 -0
  58. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/webhook.py +0 -0
  59. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/win32lib.py +0 -0
  60. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/ext/yuquelib.py +0 -0
  61. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/__init__.py +0 -0
  62. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/docxlib.py +0 -0
  63. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/gitlib.py +0 -0
  64. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/libreoffice.py +0 -0
  65. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/movielib.py +0 -0
  66. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/newbie.py +0 -0
  67. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/onenotelib.py +0 -0
  68. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/packlib/__init__.py +0 -0
  69. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/packlib/zipfile.py +0 -0
  70. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/pdflib.py +0 -0
  71. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/pupil.py +0 -0
  72. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/specialist/__init__.py +0 -0
  73. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/specialist/dirlib.py +0 -0
  74. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/specialist/download.py +0 -0
  75. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/specialist/filelib.py +0 -0
  76. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/xlsxlib.py +0 -0
  77. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/file/xlsyncfile.py +0 -0
  78. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/__init__.py +0 -0
  79. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/cachetools.py +0 -0
  80. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/deprecatedlib.py +0 -0
  81. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/ipyexec.py +0 -0
  82. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/multiprocs.py +0 -0
  83. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/newbie.py +0 -0
  84. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/pupil.py +0 -0
  85. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/scheduler.py +0 -0
  86. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/sitepackages.py +0 -0
  87. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/__init__.py +0 -0
  88. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/bc.py +0 -0
  89. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/browser.py +0 -0
  90. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/common.py +0 -0
  91. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/datetime.py +0 -0
  92. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/specialist/xllog.py +0 -0
  93. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/prog/xlosenv.py +0 -0
  94. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/stdlib/__init__.py +0 -0
  95. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  96. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  97. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  98. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/__init__.py +0 -0
  99. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/ahocorasick.py +0 -0
  100. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/charclasslib.py +0 -0
  101. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/jiebalib.py +0 -0
  102. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/jinjalib.py +0 -0
  103. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/jscode.py +0 -0
  104. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/latex/__init__.py +0 -0
  105. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/levenshtein.py +0 -0
  106. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/nestenv.py +0 -0
  107. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/newbie.py +0 -0
  108. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/pupil/__init__.py +0 -0
  109. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/pupil/common.py +0 -0
  110. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/pupil/xlalign.py +0 -0
  111. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/pycode.py +0 -0
  112. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/specialist/__init__.py +0 -0
  113. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/specialist/common.py +0 -0
  114. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/specialist/ptag.py +0 -0
  115. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/spellchecker.py +0 -0
  116. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/templates/echart_base.html +0 -0
  117. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/templates/highlight_code.html +0 -0
  118. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/templates/latex_editor.html +0 -0
  119. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/vbacode.py +0 -0
  120. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/text/xmllib.py +0 -0
  121. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/xl.py +0 -0
  122. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib/xlcv.py +0 -0
  123. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib.egg-info/SOURCES.txt +0 -0
  124. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib.egg-info/dependency_links.txt +0 -0
  125. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib.egg-info/requires.txt +15 -15
  126. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxllib.egg-info/top_level.txt +0 -0
  127. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/__init__.py +0 -0
  128. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/__init__.py +0 -0
  129. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/clientlib.py +0 -0
  130. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/specialist.py +0 -0
  131. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/torch_app.py +0 -0
  132. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/xlpaddle.py +0 -0
  133. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ai/xltorch.py +0 -0
  134. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/__init__.py +0 -0
  135. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/coco.py +0 -0
  136. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/datacls.py +0 -0
  137. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/datasets.py +0 -0
  138. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/gptlib.py +0 -0
  139. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/icdar/__init__.py +0 -0
  140. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/icdar/deteval.py +0 -0
  141. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/icdar/icdar2013.py +0 -0
  142. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/icdar/iou.py +0 -0
  143. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  144. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/imtextline.py +0 -0
  145. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/labelme.py +0 -0
  146. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/removeline.py +0 -0
  147. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/specialist.py +0 -0
  148. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/data/tiktokenlib.py +0 -0
  149. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/eval/__init__.py +0 -0
  150. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/openai2/__init__.py +0 -0
  151. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/openai2/_core/chat.py +0 -0
  152. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
  153. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/openai2/_core/group_chat.py +0 -0
  154. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/openai2/openai2.py +0 -0
  155. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/paddleocr.py +0 -0
  156. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/__init__.py +0 -0
  157. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  158. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/__init__.py +0 -0
  159. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  160. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  161. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  162. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  163. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  164. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  165. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  166. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  167. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  168. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  169. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  170. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  171. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  172. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  173. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  174. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  175. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  176. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  177. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  178. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  179. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  180. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  181. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  182. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/__init__.py +0 -0
  183. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  184. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  185. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  186. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  187. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  188. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  189. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  190. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  191. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  192. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  193. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  194. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  195. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  196. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  197. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  198. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  199. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  200. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  201. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  202. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  203. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  204. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  205. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  206. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  207. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  208. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  209. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  210. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  211. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  212. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  213. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  214. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  215. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  216. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  217. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  218. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  219. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  220. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  221. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  222. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  223. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  224. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  225. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  226. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  227. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  228. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  229. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  230. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  231. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  232. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  233. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  234. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  235. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  236. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  237. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  238. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  239. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  240. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  241. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  242. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  243. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  244. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  245. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  246. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  247. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  248. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  249. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  250. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  251. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  252. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  253. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  254. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  255. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  256. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  257. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  258. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  259. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  260. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  261. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  262. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  263. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  264. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  265. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  266. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  267. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  268. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  269. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  270. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  271. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  272. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  273. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  274. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  275. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/__init__.py +0 -0
  276. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/eval.py +0 -0
  277. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/export_center.py +0 -0
  278. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/export_model.py +0 -0
  279. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  280. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  281. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  282. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  283. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  284. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  285. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  286. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  287. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  288. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  289. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  290. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  291. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/program.py +0 -0
  292. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  293. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/train.py +0 -0
  294. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  295. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  296. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/__init__.py +0 -0
  297. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  298. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  299. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  300. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  301. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  302. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  303. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  304. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  305. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  306. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  307. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  308. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  309. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  310. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  311. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  312. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  313. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  314. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  315. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  316. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  317. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  318. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  319. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  320. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  321. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  322. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  323. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  324. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  325. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  326. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  327. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  328. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  329. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  330. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  331. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  332. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  333. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  334. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  335. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  336. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  337. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  338. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  339. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  340. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/iou.py +0 -0
  341. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/logging.py +0 -0
  342. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/network.py +0 -0
  343. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  344. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/profiler.py +0 -0
  345. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/save_load.py +0 -0
  346. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/stats.py +0 -0
  347. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppocr/utils/utility.py +0 -0
  348. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/__init__.py +0 -0
  349. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/predict_system.py +0 -0
  350. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/__init__.py +0 -0
  351. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  352. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/matcher.py +0 -0
  353. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  354. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  355. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  356. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  357. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  358. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  359. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  360. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  361. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/ppstructure/utility.py +0 -0
  362. {pyxllib-0.3.137 → pyxllib-0.3.138}/pyxlpr/xlai.py +0 -0
  363. {pyxllib-0.3.137 → pyxllib-0.3.138}/requirements.txt +0 -0
  364. {pyxllib-0.3.137 → pyxllib-0.3.138}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.137
3
+ Version: 0.3.138
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -38,33 +38,33 @@ Requires-Dist: Jinja2
38
38
  Requires-Dist: pandas>=0.23.4
39
39
  Requires-Dist: pillow
40
40
  Provides-Extra: xlcv
41
+ Requires-Dist: pillow; extra == "xlcv"
41
42
  Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
42
43
  Requires-Dist: opencv-python; extra == "xlcv"
43
- Requires-Dist: pillow; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
+ Requires-Dist: pillow; extra == "xlai"
45
46
  Requires-Dist: opsdroid-get-image-size; extra == "xlai"
46
- Requires-Dist: pynvml; extra == "xlai"
47
- Requires-Dist: visdom; extra == "xlai"
48
47
  Requires-Dist: opencv-python; extra == "xlai"
49
- Requires-Dist: pillow; extra == "xlai"
48
+ Requires-Dist: visdom; extra == "xlai"
49
+ Requires-Dist: pynvml; extra == "xlai"
50
50
  Provides-Extra: xlall
51
- Requires-Dist: flask-restful; extra == "xlall"
52
- Requires-Dist: flask; extra == "xlall"
53
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
51
+ Requires-Dist: ujson; extra == "xlall"
54
52
  Requires-Dist: flask-jwt-extended; extra == "xlall"
55
- Requires-Dist: openai2; extra == "xlall"
56
- Requires-Dist: opencv-python; extra == "xlall"
53
+ Requires-Dist: flask-restful; extra == "xlall"
57
54
  Requires-Dist: pillow; extra == "xlall"
58
- Requires-Dist: fastapi; extra == "xlall"
59
- Requires-Dist: ujson; extra == "xlall"
55
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
56
+ Requires-Dist: xlrd; extra == "xlall"
60
57
  Requires-Dist: zhconv; extra == "xlall"
61
- Requires-Dist: flask-cors; extra == "xlall"
62
- Requires-Dist: html2text; extra == "xlall"
63
- Requires-Dist: uvicorn; extra == "xlall"
58
+ Requires-Dist: fastapi; extra == "xlall"
64
59
  Requires-Dist: sentencepiece; extra == "xlall"
65
60
  Requires-Dist: flask-wtf; extra == "xlall"
66
- Requires-Dist: xlrd; extra == "xlall"
61
+ Requires-Dist: uvicorn; extra == "xlall"
62
+ Requires-Dist: flask; extra == "xlall"
63
+ Requires-Dist: opencv-python; extra == "xlall"
64
+ Requires-Dist: html2text; extra == "xlall"
65
+ Requires-Dist: openai2; extra == "xlall"
67
66
  Requires-Dist: arts; extra == "xlall"
67
+ Requires-Dist: flask-cors; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -33,6 +33,18 @@ def ltrb2xywh(p):
33
33
  return [p[0], p[1], p[2] - p[0], p[3] - p[1]]
34
34
 
35
35
 
36
+ def ltrb2polygon(p):
37
+ """ ltrb坐标转多边形
38
+
39
+ :param list|tuple p: [left, top, right, bottom]
40
+ :rtype: list
41
+
42
+ >>> ltrb2polygon([100, 50, 200, 150])
43
+ [[100, 50], [200, 50], [200, 150], [100, 150]]
44
+ """
45
+ return [p[:2], [p[2], p[1]], p[2:], [p[0], p[3]]]
46
+
47
+
36
48
  def rect2polygon(src_pts):
37
49
  """ 矩形对角线两个点,转成四边形四个点的模式来表达
38
50
  (输入左上、右下两个顶点坐标)
@@ -27,7 +27,7 @@ except ModuleNotFoundError:
27
27
  from pyxllib.prog.newbie import first_nonnone, round_int
28
28
  from pyxllib.prog.pupil import xlwait, DictTool, check_install_package
29
29
  from pyxllib.prog.specialist import TicToc
30
- from pyxllib.algo.geo import ComputeIou, ltrb2xywh, xywh2ltrb
30
+ from pyxllib.algo.geo import ComputeIou, ltrb2xywh, xywh2ltrb, ltrb2polygon
31
31
  from pyxllib.algo.shapelylib import ShapelyPolygon
32
32
  from pyxllib.file.specialist import File, Dir, XlPath
33
33
  from pyxllib.cv.expert import xlcv, xlpil
@@ -816,6 +816,36 @@ def list_windows(mode=1):
816
816
  return ls
817
817
 
818
818
 
819
+ class UiTracePath:
820
+ """ 在window窗口上用鼠标勾画路径 """
821
+
822
+ @classmethod
823
+ def from_polygon(cls, points, duration_per_circle=3, num_circles=1):
824
+ """
825
+ 让鼠标顺时针围绕任意多边形移动。
826
+
827
+ :param points: 多边形顶点的坐标列表,按顺时针或逆时针顺序排列
828
+ :param duration_per_circle: 每圈耗时
829
+ :param num_circles: 总圈数
830
+ """
831
+ num_points = len(points)
832
+ segment_duration = duration_per_circle / num_points # 每条边的耗时
833
+
834
+ for _ in range(num_circles):
835
+ # 顺时针移动鼠标
836
+ for i in range(num_points):
837
+ start = points[i]
838
+ pyautogui.moveTo(start[0], start[1])
839
+ end = points[(i + 1) % num_points]
840
+ # 使用 moveTo 的 duration 参数控制每条边的移动时间
841
+ pyautogui.moveTo(end[0], end[1], duration=segment_duration)
842
+
843
+ @classmethod
844
+ def from_ltrb(cls, ltrb, **kwargs):
845
+ points = ltrb2polygon(ltrb)
846
+ return cls.from_polygon(points, **kwargs)
847
+
848
+
819
849
  if __name__ == '__main__':
820
850
  with TicToc(__name__):
821
851
  agld = AutoGuiLabelData(r'D:\slns\py4101\py4101\touhou\label')
@@ -0,0 +1,162 @@
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 textwrap
12
+
13
+ import psutil
14
+ import pandas as pd
15
+
16
+ # ui组件大多是树形组织结构,auto库自带树形操作太弱。没有专业的树形结构库,能搞个毛线。
17
+ from anytree import NodeMixin
18
+
19
+ import win32gui
20
+ import win32process
21
+ import uiautomation as auto
22
+
23
+
24
+ def get_windows_info():
25
+ """ 得到当前机器的全部窗口信息清单 """
26
+ window_list = []
27
+
28
+ def get_all_hwnd(hwnd, mouse):
29
+ thread_id, process_id = win32process.GetWindowThreadProcessId(hwnd)
30
+ proc = psutil.Process(process_id)
31
+
32
+ is_window = win32gui.IsWindow(hwnd)
33
+ is_enabled = win32gui.IsWindowEnabled(hwnd)
34
+ is_visible = win32gui.IsWindowVisible(hwnd)
35
+ text = win32gui.GetWindowText(hwnd)
36
+
37
+ data = {
38
+ 'proc_name': proc.name(),
39
+ 'process_id': process_id,
40
+ 'thread_id': thread_id,
41
+ 'hwnd': hwnd,
42
+ 'ClassName': win32gui.GetClassName(hwnd),
43
+ 'ControlTypeName': '',
44
+ 'WindowText': text,
45
+ 'IsWindow': is_window,
46
+ 'IsWindowEnabled': is_enabled,
47
+ 'IsWindowVisible': is_visible
48
+ }
49
+
50
+ if not data['proc_name'].endswith('.tmp') and is_visible:
51
+ ctrl = auto.ControlFromHandle(hwnd)
52
+ data['ControlTypeName'] = ctrl.ControlTypeName
53
+
54
+ window_list.append(data)
55
+
56
+ win32gui.EnumWindows(get_all_hwnd, 0)
57
+ return pd.DataFrame(window_list)
58
+
59
+
60
+ class UiCtrlNode(NodeMixin):
61
+ def __0_构建(self):
62
+ pass
63
+
64
+ def __init__(self, ctrl, parent=None, *, build_depth=-1):
65
+ """
66
+ :param ctrl: 当前节点
67
+ :param parent: 父结点
68
+ :param build_depth: 自动构建多少层树节点,默认-1表示构建全部节点
69
+ """
70
+ # 初始化节点信息
71
+ self.ctrl = ctrl
72
+ self.ctrl_type = ctrl.ControlTypeName
73
+ self.text = ctrl.Name
74
+ self.parent = parent # 指定父节点,用于形成树结构
75
+
76
+ # 自动递归创建子节点
77
+ self.build_children(build_depth)
78
+
79
+ @classmethod
80
+ def get_window(cls, class_name=None, name=None, *, build_depth=-1, **kwargs):
81
+ # wake_up_window(class_name, name=name)
82
+ if class_name is not None:
83
+ kwargs['ClassName'] = class_name
84
+ if name is not None:
85
+ kwargs['Name'] = name
86
+ ctrl = auto.WindowControl(**kwargs)
87
+ return cls(ctrl, build_depth=build_depth)
88
+
89
+ def build_children(self, build_depth, child_node_class=None):
90
+ """ 创建并添加子节点到树中 """
91
+ if build_depth == 0:
92
+ return
93
+ child_node_class = child_node_class or self.__class__
94
+ for child_ctrl in self.ctrl.GetChildren():
95
+ child_node_class(child_ctrl, parent=self, build_depth=build_depth - 1)
96
+
97
+ def __1_调试(self):
98
+ pass
99
+
100
+ def trace_rect(self, duration_per_circle=3, num_circles=1):
101
+ """ 用鼠标勾画出当前组件的矩形位置区域 """
102
+ from pyxllib.autogui.autogui import UiTracePath
103
+
104
+ rect = self.ctrl.BoundingRectangle
105
+ ltrb = [rect.left, rect.top, rect.right, rect.bottom]
106
+ UiTracePath.from_ltrb(ltrb,
107
+ duration_per_circle=duration_per_circle,
108
+ num_circles=num_circles)
109
+
110
+ def __2_功能(self):
111
+ pass
112
+
113
+ def __getitem__(self, index):
114
+ """ 通过索引直接访问子节点
115
+
116
+ ui操作经常要各种结构化的访问,加个这个简化引用方式
117
+ """
118
+ return self.children[index]
119
+
120
+ def get_ctrl_hash_tag(self, level=1):
121
+ """ 生成节点的哈希字符串,以反映子树结构,一般用来对节点做分类及映射到对应处理函数 """
122
+ # 当前节点的类型标识符
123
+ hash_strs = [f"{level}{self.ctrl_type[0].lower()}"]
124
+ # 遍历所有子节点,递归生成子节点的哈希值
125
+ for child in self.children:
126
+ hash_strs.append(f"{child.get_ctrl_hash_tag(level + 1)}")
127
+ return ''.join(hash_strs)
128
+
129
+ def __3_展示(self):
130
+ pass
131
+
132
+ def _format_text(self, text):
133
+ """ 将换行替换为空格的小工具方法 """
134
+ return text.replace('\n', ' ')
135
+
136
+ def __repr__(self):
137
+ """ 用于在打印节点时显示关键信息 """
138
+ return f"UiNode(ctrl_type={self.ctrl_type}, text={self._format_text(self.text)})"
139
+
140
+ def render_tree(self):
141
+ """ 展示以self为根节点的整体内容结构 """
142
+ # 1 渲染自身
143
+ line = [self.ctrl_type]
144
+ line.append(self._format_text(self.text))
145
+
146
+ # 加上控件的坐标信息
147
+ rect = self.ctrl.BoundingRectangle
148
+ line.append(f"[{rect.left}, {rect.top}, {rect.right}, {rect.bottom}]")
149
+
150
+ # 我的hash值
151
+ tag = self.get_ctrl_hash_tag()
152
+ if len(tag) <= 64:
153
+ line.append(tag)
154
+
155
+ lines = [' '.join(line)]
156
+
157
+ # 2 子结点情况
158
+ for child in self.children:
159
+ line = child.render_tree()
160
+ line = textwrap.indent(line, ' ')
161
+ lines.append(line)
162
+ return '\n'.join(lines)
@@ -15,6 +15,7 @@ import os
15
15
  from typing import (Iterable, Callable, List)
16
16
  import json
17
17
  import re
18
+ import textwrap
18
19
 
19
20
  import ctypes
20
21
  from ctypes import wintypes
@@ -23,6 +24,7 @@ from anytree import NodeMixin, RenderTree
23
24
 
24
25
  import win32clipboard
25
26
 
27
+ from pyxllib.prog.pupil import print2string
26
28
  from pyxllib.autogui.wechat_msgbox import msg_parsers
27
29
  from pyxllib.autogui.uiautolib import UiCtrlNode
28
30
 
@@ -224,11 +226,14 @@ def wake_up_window(class_name, name):
224
226
  if hwnd := win32gui.FindWindow(class_name, name):
225
227
  # 恢复窗口
226
228
  win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
227
- # 尝试将窗口置前
228
- try:
229
- win32gui.SetForegroundWindow(hwnd)
230
- except Exception as e:
231
- print(f"尝试将窗口置前时出错: {e}")
229
+ # 检查窗口是否已在前
230
+ if win32gui.GetForegroundWindow() != hwnd:
231
+ # 尝试将窗口置前
232
+ try:
233
+ win32gui.SetForegroundWindow(hwnd)
234
+ except Exception as e:
235
+ pass
236
+ # print(f"尝试将窗口置前时出错: {e}")
232
237
 
233
238
 
234
239
  def is_window_visible(class_name, name):
@@ -249,63 +254,183 @@ def is_window_visible(class_name, name):
249
254
  return False
250
255
 
251
256
 
252
- class WechatMsgNode(UiCtrlNode):
253
- """ 微信消息的节点类型 """
257
+ def __4_wx():
258
+ pass
259
+
260
+
261
+ class MsgNode(UiCtrlNode):
262
+ """ 一条消息的节点 """
254
263
 
255
- def __init__(self, msg_box_ctrl, parent=None):
256
- super().__init__(msg_box_ctrl, parent)
264
+ def __init__(self, msg_ctrl, parent=None, *, build_depth=-1):
265
+ super().__init__(msg_ctrl, parent, build_depth=build_depth)
257
266
  self.time = None # 每条消息都建立一个最近出现的时间作为时间戳?
258
267
  self.msg_type = None # 消息类型:system, receive, send
259
- self.content_type = None # 内容类型:text、image、file
268
+ self.content_type = None # 内容类型:text、image、file、time
260
269
 
261
270
  self.user = None # 用户名
262
271
  self.user2 = None # 群聊时用户会多一个群聊昵称
263
272
  self.cite_text = None # 引用的内容,引用的不一定是文本,但是统一转成文本显示的
264
273
 
265
- def parse_ctrl(self):
274
+ self.render_text = None # 供人预览,和简化给ai查看的格式
275
+
276
+ def build_children(self, build_depth, child_node_class=None):
277
+ if build_depth == 0:
278
+ return
279
+ child_node_class = child_node_class or UiCtrlNode
280
+ for child_ctrl in self.ctrl.GetChildren():
281
+ child_node_class(child_ctrl, parent=self, build_depth=build_depth - 1)
282
+
283
+ def init(self):
266
284
  """ 解析出更精细的结构化信息 """
267
285
  from pyxllib.autogui.wechat_msgbox import msg_parsers
268
- tag = self.get_hash_tag()
286
+
287
+ tag = self.get_ctrl_hash_tag()
269
288
  if tag in msg_parsers:
270
289
  msg_parsers[tag](self)
271
290
 
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()
291
+ def render_tree(self):
292
+ """ 展示以self为根节点的整体内容结构 """
293
+ # 1 未解析过的节点,原样输出树形结构供添加解析
294
+ if not self.msg_type:
295
+ return super().render_tree()
296
+
297
+ # 2 已设置好预览文本的直接输出
298
+ if self.render_text:
299
+ return self.render_text
300
+
301
+ # 3 否则用一套通用的机制渲染输出
302
+ fmt = self._format_text
303
+ # 定义类型到符号的映射
304
+ type_to_symbol = {
305
+ 'send': '↑',
306
+ 'receive': '↓',
307
+ 'system': '⚙️' # 假设 'system' 类型对应的符号是 ⚙️
308
+ }
309
+ # 根据 msg_type 获取相应的符号
310
+ msg = [f"{type_to_symbol.get(self.msg_type, self.msg_type)}"]
311
+
312
+ if self.user:
313
+ msg.append(f"{self.user}: ")
314
+ msg.append(fmt(self.text))
315
+
316
+ if self.cite_text:
317
+ msg.append(f"【引用】{fmt(self.cite_text)}")
318
+ return ' '.join(msg)
319
+
320
+ def is_match(self, msg_node):
321
+ """ 两条msg_node是否对应的上 """
322
+ from datetime import datetime
323
+
324
+ # 1 比如内容一致
325
+ if self.render_tree() == msg_node.render_tree():
326
+ return 2 # 强一致
327
+
328
+ # 2 或者"撤回"格式对应的上
329
+ is_recall = (self.content_type == 'recall' or msg_node.content_type == 'recall')
330
+ user_matches = is_recall and (self.user == msg_node.user or self.user2 == msg_node.user2)
331
+ if is_recall and user_matches:
332
+ return 1 # 弱一致
333
+
334
+ # 3 判断是否为 'system'、'time' 类型
335
+ is_system_time_type = (self.msg_type == msg_node.msg_type == 'time')
336
+ if is_system_time_type:
337
+ # 检查时间匹配,确保都是 datetime 类型,并只比较年月日时分部分
338
+ same_time = (
339
+ isinstance(self.time, datetime) and
340
+ isinstance(msg_node.time, datetime) and
341
+ self.time.strftime('%Y-%m-%d %H:%M') == msg_node.time.strftime('%Y-%m-%d %H:%M')
342
+ )
343
+ if same_time:
344
+ return 2
345
+
346
+ if self.text == '以下是新消息' or msg_node.text == '以下是新消息':
347
+ return 1
348
+
349
+ # 4 如果有一条.content_type=='button_more',也直接弱匹配
350
+ if self.content_type == 'button_more' or msg_node.content_type == 'button_more':
351
+ return 1
352
+
353
+
354
+ class ChatBoxNode(UiCtrlNode):
355
+ """ 当前会话消息窗的节点 """
356
+
357
+ def __init__(self, chat_box_ctrl, parent=None, *, build_depth=-1):
358
+ super().__init__(chat_box_ctrl, parent, build_depth=build_depth)
359
+
360
+ def build_children(self, build_depth, child_node_class=None):
361
+ # 1 遍历消息初始化
362
+ if build_depth == 0:
363
+ return
364
+ for child_ctrl in self.ctrl.GetChildren():
365
+ node = MsgNode(child_ctrl, parent=self, build_depth=build_depth - 1)
366
+ node.init() # 节点扩展的初始化操作
367
+
368
+ # 2 设置每条消息的时间
369
+ last_time = None
370
+ for c in self.children:
371
+ if c.time:
372
+ last_time = c.time
373
+ else:
374
+ c.time = last_time
375
+
376
+ def findidx_system_time(self):
377
+ """ 最后条系统时间标记 """
378
+ for idx in range(len(self.children) - 1, -1, -1):
379
+ if self.children[idx].content_type == 'time':
380
+ return idx
381
+ return -1
382
+
383
+ def findidx_last_send(self):
384
+ """ 最后条发出去的消息 """
385
+ for idx in range(len(self.children) - 1, -1, -1):
386
+ if self.children[idx].content_type == 'receive':
387
+ return idx
388
+ return -1
389
+
390
+ def findidx_last_match(self, old_chat_box):
391
+ """
392
+ :param old_chat_box: 旧的消息队列
393
+ :return: 在当前 self.children 中首次匹配到的 old_chat_box 最后几条消息的起始下标
394
+ """
395
+ x, y = old_chat_box.children, self.children
396
+ n, m = len(x), len(y)
397
+
398
+ def check_bais(k):
399
+ """ 检查偏移量k是否能匹配 """
400
+ # i, j分别指向"最后一条"数据,然后开始匹配
401
+ i, j = n - 1, m - k - 1
402
+ while min(i, j) > 0: # 不匹配第0条,第0条太特别
403
+ if y[j].is_match(x[i]):
404
+ i, j = i - 1, j - 1
405
+ continue
406
+ return False
407
+ return True
305
408
 
409
+ for k in range(m):
410
+ if check_bais(k):
411
+ return m - k - 1
306
412
 
307
- def __4_wx():
308
- pass
413
+ return -1 # 如果没有匹配,返回 -1
414
+
415
+
416
+ class WeChatMainWnd(UiCtrlNode):
417
+
418
+ def build_children(self, build_depth, child_node_class=None):
419
+ if build_depth == 0:
420
+ return
421
+ # 跳过两级
422
+ ctrl = self.ctrl.GetChildren()[0].GetChildren()[0]
423
+ for child_ctrl in ctrl.GetChildren():
424
+ UiCtrlNode(child_ctrl, parent=self, build_depth=build_depth - 1)
425
+
426
+ def wake_up_window(self):
427
+ wake_up_window('WeChatMainWndForPC', '微信')
428
+
429
+ @classmethod
430
+ def get_window(cls, class_name='WeChatMainWndForPC', name='微信', build_depth=-1):
431
+ wake_up_window(class_name, name=name)
432
+ ctrl = auto.WindowControl(ClassName=class_name, Name=name)
433
+ return cls(ctrl, build_depth=build_depth)
309
434
 
310
435
 
311
436
  class WxOperation:
@@ -398,11 +523,8 @@ class WxOperation:
398
523
 
399
524
  def get_messages(self):
400
525
  """ 获得当前会话窗口的结构化对话记录 """
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()
526
+ msg_box = ChatBoxNode(self.wx_window.ListControl(Name='消息'))
527
+ print(msg_box.render_tree())
406
528
 
407
529
  def at_at_everyone(self, group_chat_name: str):
408
530
  """