pyxllib 0.3.116__tar.gz → 0.3.118__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 (349) hide show
  1. {pyxllib-0.3.116/pyxllib.egg-info → pyxllib-0.3.118}/PKG-INFO +1 -1
  2. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/pupil.py +30 -0
  3. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/pglib.py +20 -5
  4. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/sqlite.py +18 -1
  5. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/drissionlib.py +1 -2
  6. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/specialist/filelib.py +17 -0
  7. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/xlsxlib.py +16 -4
  8. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/pupil.py +61 -0
  9. pyxllib-0.3.118/pyxllib/prog/scheduler.py +129 -0
  10. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/browser.py +3 -0
  11. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/tictoc.py +10 -7
  12. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/charclasslib.py +6 -1
  13. {pyxllib-0.3.116 → pyxllib-0.3.118/pyxllib.egg-info}/PKG-INFO +1 -1
  14. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib.egg-info/SOURCES.txt +1 -0
  15. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib.egg-info/requires.txt +14 -8
  16. {pyxllib-0.3.116 → pyxllib-0.3.118}/setup.py +4 -3
  17. {pyxllib-0.3.116 → pyxllib-0.3.118}/LICENSE +0 -0
  18. {pyxllib-0.3.116 → pyxllib-0.3.118}/MANIFEST.in +0 -0
  19. {pyxllib-0.3.116 → pyxllib-0.3.118}/README.md +0 -0
  20. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/__init__.py +0 -0
  21. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/__init__.py +0 -0
  22. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/disjoint.py +0 -0
  23. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/geo.py +0 -0
  24. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/intervals.py +0 -0
  25. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/matcher.py +0 -0
  26. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/newbie.py +0 -0
  27. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/shapelylib.py +0 -0
  28. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/specialist.py +0 -0
  29. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/stat.py +0 -0
  30. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/treelib.py +0 -0
  31. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/algo/unitlib.py +0 -0
  32. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/__init__.py +0 -0
  33. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/expert.py +0 -0
  34. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/imfile.py +0 -0
  35. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/imhash.py +0 -0
  36. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/pupil.py +0 -0
  37. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/rgbfmt.py +0 -0
  38. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/trackbartools.py +0 -0
  39. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/xlcvlib.py +0 -0
  40. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/cv/xlpillib.py +0 -0
  41. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/__init__.py +0 -0
  42. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/echarts.py +0 -0
  43. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/jsonlib.py +0 -0
  44. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/oss.py +0 -0
  45. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/data/sqllib.py +0 -0
  46. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/JLineViewer.py +0 -0
  47. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/__init__.py +0 -0
  48. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/autogui/__init__.py +0 -0
  49. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/autogui/autogui.py +0 -0
  50. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/autogui/virtualkey.py +0 -0
  51. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/demolib.py +0 -0
  52. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/kq5034lib.py +0 -0
  53. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/old.py +0 -0
  54. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/qt.py +0 -0
  55. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/robustprocfile.py +0 -0
  56. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/seleniumlib.py +0 -0
  57. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/tk.py +0 -0
  58. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/unixlib.py +0 -0
  59. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/utools.py +0 -0
  60. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/webhook.py +0 -0
  61. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/win32lib.py +0 -0
  62. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/ext/yuquelib.py +0 -0
  63. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/__init__.py +0 -0
  64. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/docxlib.py +0 -0
  65. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/gitlib.py +0 -0
  66. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/libreoffice.py +0 -0
  67. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/movielib.py +0 -0
  68. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/newbie.py +0 -0
  69. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/onenotelib.py +0 -0
  70. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/packlib/__init__.py +0 -0
  71. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/packlib/zipfile.py +0 -0
  72. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/pdflib.py +0 -0
  73. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/pupil.py +0 -0
  74. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/specialist/__init__.py +0 -0
  75. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/specialist/dirlib.py +0 -0
  76. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/file/specialist/download.py +0 -0
  77. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/__init__.py +0 -0
  78. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/cachetools.py +0 -0
  79. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/deprecatedlib.py +0 -0
  80. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/ipyexec.py +0 -0
  81. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/multiprocs.py +0 -0
  82. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/newbie.py +0 -0
  83. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/sitepackages.py +0 -0
  84. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/__init__.py +0 -0
  85. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/bc.py +0 -0
  86. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/common.py +0 -0
  87. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/datetime.py +0 -0
  88. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/specialist/xllog.py +0 -0
  89. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/prog/xlosenv.py +0 -0
  90. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/stdlib/__init__.py +0 -0
  91. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  92. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  93. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  94. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/__init__.py +0 -0
  95. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/ahocorasick.py +0 -0
  96. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/jiebalib.py +0 -0
  97. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/jinjalib.py +0 -0
  98. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/jscode.py +0 -0
  99. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/latex/__init__.py +0 -0
  100. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/levenshtein.py +0 -0
  101. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/nestenv.py +0 -0
  102. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/newbie.py +0 -0
  103. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/pupil/__init__.py +0 -0
  104. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/pupil/common.py +0 -0
  105. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/pupil/xlalign.py +0 -0
  106. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/pycode.py +0 -0
  107. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/specialist/__init__.py +0 -0
  108. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/specialist/common.py +0 -0
  109. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/specialist/ptag.py +0 -0
  110. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/spellchecker.py +0 -0
  111. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/vbacode.py +0 -0
  112. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/text/xmllib.py +0 -0
  113. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/xl.py +0 -0
  114. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib/xlcv.py +0 -0
  115. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib.egg-info/dependency_links.txt +0 -0
  116. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxllib.egg-info/top_level.txt +0 -0
  117. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/__init__.py +0 -0
  118. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/__init__.py +0 -0
  119. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/clientlib.py +0 -0
  120. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/specialist.py +0 -0
  121. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/torch_app.py +0 -0
  122. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/xlpaddle.py +0 -0
  123. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ai/xltorch.py +0 -0
  124. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/__init__.py +0 -0
  125. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/coco.py +0 -0
  126. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/datacls.py +0 -0
  127. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/datasets.py +0 -0
  128. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/gptlib.py +0 -0
  129. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/icdar/__init__.py +0 -0
  130. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/icdar/deteval.py +0 -0
  131. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/icdar/icdar2013.py +0 -0
  132. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/icdar/iou.py +0 -0
  133. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  134. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/imtextline.py +0 -0
  135. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/labelme.py +0 -0
  136. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/removeline.py +0 -0
  137. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/specialist.py +0 -0
  138. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/data/tiktokenlib.py +0 -0
  139. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/eval/__init__.py +0 -0
  140. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/paddleocr.py +0 -0
  141. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/__init__.py +0 -0
  142. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  143. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/__init__.py +0 -0
  144. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  145. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  146. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  147. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  148. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  149. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  150. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  151. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  152. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  153. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  154. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  155. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  156. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  157. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  158. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  159. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  160. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  161. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  162. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  163. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  164. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  165. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  166. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  167. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/__init__.py +0 -0
  168. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  169. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  170. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  171. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  172. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  173. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  174. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  175. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  176. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  177. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  178. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  179. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  180. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  181. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  182. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  183. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  184. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  185. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  186. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  187. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  188. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  189. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  190. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  191. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  192. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  193. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  194. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  195. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  196. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  197. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  198. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  199. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  200. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  201. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  202. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  203. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  204. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  205. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  206. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  207. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  208. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  209. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  210. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  211. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  212. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  213. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  214. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  215. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  216. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  217. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  218. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  219. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  220. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  221. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  222. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  223. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  224. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  225. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  226. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  227. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  228. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  229. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  230. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  231. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  232. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  233. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  234. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  235. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  236. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  237. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  238. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  239. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  240. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  241. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  242. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  243. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  244. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  245. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  246. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  247. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  248. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  249. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  250. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  251. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  252. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  253. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  254. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  255. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  256. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  257. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  258. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  259. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  260. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/__init__.py +0 -0
  261. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/eval.py +0 -0
  262. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/export_center.py +0 -0
  263. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/export_model.py +0 -0
  264. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  265. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  266. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  267. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  268. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  269. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  270. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  271. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  272. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  273. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  274. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  275. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  276. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/program.py +0 -0
  277. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  278. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/train.py +0 -0
  279. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  280. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  281. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/__init__.py +0 -0
  282. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  283. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  284. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  285. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  286. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  287. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  288. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  289. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  290. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  291. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  292. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  293. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  294. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  295. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  296. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  297. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  298. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  299. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  300. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  301. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  302. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  303. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  304. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  305. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  306. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  307. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  308. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  309. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  310. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  311. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  312. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  313. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  314. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  315. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  316. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  317. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  318. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  319. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  320. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  321. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  322. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  323. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  324. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  325. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/iou.py +0 -0
  326. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/logging.py +0 -0
  327. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/network.py +0 -0
  328. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  329. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/profiler.py +0 -0
  330. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/save_load.py +0 -0
  331. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/stats.py +0 -0
  332. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/utility.py +0 -0
  333. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/__init__.py +0 -0
  334. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/predict_system.py +0 -0
  335. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/__init__.py +0 -0
  336. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  337. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/matcher.py +0 -0
  338. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  339. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  340. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  341. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  342. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  343. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  344. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  345. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  346. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/ppstructure/utility.py +0 -0
  347. {pyxllib-0.3.116 → pyxllib-0.3.118}/pyxlpr/xlai.py +0 -0
  348. {pyxllib-0.3.116 → pyxllib-0.3.118}/requirements.txt +0 -0
  349. {pyxllib-0.3.116 → pyxllib-0.3.118}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.116
3
+ Version: 0.3.118
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -157,6 +157,9 @@ class ValuesStat:
157
157
 
158
158
  class ValuesStat2:
159
159
  """ 240509周四17:33,第2代统计器
160
+
161
+ 240628周五14:05 todo 关于各种特殊格式数据,怎么计算是个问题
162
+ 这问题可能有些复杂,近期估计没空折腾,留以后有空折腾的一个大坑了
160
163
  """
161
164
 
162
165
  def __init__(self, values=None, raw_values=None, data_type=None):
@@ -307,6 +310,33 @@ class ValuesStat2:
307
310
 
308
311
  return ratio_dict
309
312
 
313
+ def group_count(self, max_entries=None, min_count=None):
314
+ """ 统计每种取值出现的次数,并根据条件过滤结果
315
+
316
+ :param max_entries: 最多显示的条目数
317
+ :param min_count: 显示的条目至少出现的次数
318
+ """
319
+ from collections import Counter
320
+
321
+ # 使用Counter来计数每个值出现的次数
322
+ counts = Counter(self.values or self.raw_values)
323
+
324
+ # 根据min_count过滤计数结果
325
+ if min_count is not None:
326
+ counts = {k: v for k, v in counts.items() if v >= min_count}
327
+
328
+ # 根据max_entries限制结果数量
329
+ if max_entries is not None:
330
+ # 按出现次数降序排列,然后选取前max_entries项
331
+ most_common = counts.most_common(max_entries)
332
+ # 转换回字典形式
333
+ counts = dict(most_common)
334
+ else:
335
+ # 如果没有指定max_entries,则保持所有满足min_count的结果
336
+ counts = dict(sorted(counts.items(), key=lambda item: item[1], reverse=True))
337
+
338
+ return counts
339
+
310
340
 
311
341
  class Groups:
312
342
  def __init__(self, data):
@@ -42,7 +42,7 @@ import psycopg
42
42
  import psycopg.rows
43
43
 
44
44
  from pyxllib.prog.newbie import round_int, human_readable_number
45
- from pyxllib.prog.pupil import utc_now, utc_timestamp
45
+ from pyxllib.prog.pupil import utc_now, utc_timestamp, is_valid_identifier
46
46
  from pyxllib.prog.specialist import XlOsEnv
47
47
  from pyxllib.algo.pupil import ValuesStat2
48
48
  from pyxllib.file.specialist import get_etag, StreamJsonlWriter
@@ -271,12 +271,14 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
271
271
  def __6_高级统计(self):
272
272
  pass
273
273
 
274
- def get_column_valuesstat(self, table_name, column, percentile_count=5,
275
- filter_condition=None, by_data=False):
274
+ def get_column_valuesstat(self, table_name, column, filter_condition=None,
275
+ percentile_count=5,
276
+ by_data=False, data_type=None):
276
277
  """ 获得指定表格的某个字段的统计特征ValuesStat2对象
277
278
 
278
279
  :param table_name: 表名
279
280
  :param column: 用于计算统计数据的字段名
281
+ 不一定是标准的字段名
280
282
  :param percentile_count: 分位数的数量,例如 3 表示只计算中位数
281
283
  :param by_data: 是否获得原始数据
282
284
  默认只获得统计特征,不获得原始数据
@@ -289,7 +291,15 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
289
291
  values = self.exec2col(sql.build_select(column))
290
292
  if data_type == 'numeric':
291
293
  values = [x and float(x) for x in values]
292
- return ValuesStat2(raw_values=values, data_type=data_type)
294
+ vs = ValuesStat2(raw_values=values, data_type=data_type)
295
+
296
+ if data_type == 'text' and is_valid_identifier(column):
297
+ vs0 = self.get_column_valuesstat(table_name, column, filter_condition=filter_condition,
298
+ percentile_count=percentile_count, by_data=False)
299
+ vs.n = vs0.n
300
+ vs.dist = vs0.dist
301
+
302
+ return vs
293
303
 
294
304
  def init_from_db():
295
305
  # 1 构建基础的 SQL 查询
@@ -341,7 +351,12 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
341
351
 
342
352
  return x
343
353
 
344
- data_type = self.get_column_data_type(table_name, column)
354
+ data_type = data_type or self.get_column_data_type(table_name, column)
355
+
356
+ # 如果不是标准的列名,强制获取数据
357
+ if not is_valid_identifier(column):
358
+ by_data = True
359
+
345
360
  if by_data:
346
361
  vs = init_from_db_data()
347
362
  else:
@@ -89,7 +89,11 @@ class SqlBuilder:
89
89
  """ 使用一种特殊的格式化标记来设置规则
90
90
 
91
91
  :param desc: 例如 'id%2=1'
92
+
93
+ todo 我好像傻了,画蛇添足,这个功能好像直接用 .where 就能完成~
92
94
  """
95
+ if not desc:
96
+ return
93
97
  column, divisor_remainder = desc.split('%')
94
98
  divisor, remainder = map(int, divisor_remainder.split('='))
95
99
  return self.where_mod(column, divisor, remainder)
@@ -146,6 +150,7 @@ class SqlBuilder:
146
150
  sql.append(f"WHERE {' AND '.join(self._where)}")
147
151
  return '\n'.join(sql)
148
152
 
153
+
149
154
  def __3_build_中级命令(self):
150
155
  pass
151
156
 
@@ -166,7 +171,6 @@ class SqlBuilder:
166
171
  sql._where = self._where.copy()
167
172
  return sql.build_select()
168
173
 
169
-
170
174
  class SqlBase:
171
175
  """ Sql语法通用的功能 """
172
176
 
@@ -364,6 +368,19 @@ class SqlBase:
364
368
  f'UPDATE {table_name} SET {kvs} WHERE {ops}',
365
369
  self.cvt_types(vals))
366
370
 
371
+ def delete_row(self, table_name, where, *, commit=False):
372
+ """ 【删】删除数据
373
+
374
+ :param dict where: 怎么匹配到对应记录
375
+ :param commit: 建议减小commit频率,会极大降低性能
376
+ :return:
377
+ """
378
+ ops = ' AND '.join([f'{k}=%s' for k in where.keys()])
379
+ vals = list(where.values())
380
+ self.commit_base(commit,
381
+ f'DELETE FROM {table_name} WHERE {ops}',
382
+ self.cvt_types(vals))
383
+
367
384
  def select_col(self, table_name, col):
368
385
  """ 获得一列数据,常使用的功能,所以做了一个封装
369
386
 
@@ -18,7 +18,6 @@ from DrissionPage._base.base import BasePage, BaseElement
18
18
  from pyxllib.prog.pupil import inject_members
19
19
  from pyxllib.text.pupil import strfind
20
20
 
21
-
22
21
  def get_latest_not_dev_tab(page=None):
23
22
  """ 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
24
23
  if page is None:
@@ -80,7 +79,7 @@ class XlBasePage(BasePage):
80
79
  'tag:downloads-item')
81
80
  for item in items:
82
81
  loc = unquote(item.sr('tag:img').attr('src').replace('+', ' '))
83
- file = re.search(r'path=(.+?)(&scale=\d+x)?$', loc).group(1)
82
+ file = re.search(r'path=(.+?)(&scale=(\d+(\.\d+)?)x)?$', loc).group(1)
84
83
 
85
84
  files.append({
86
85
  'file': file,
@@ -1124,6 +1124,22 @@ class XlPath(type(pathlib.Path())):
1124
1124
  else:
1125
1125
  return s
1126
1126
 
1127
+ def read_text2(self):
1128
+ """ 智能识别编码的文本读取,这里收集了我见过的一些常见类型 """
1129
+ for encoding in ['utf8',
1130
+ 'gbk',
1131
+ 'gb18030',
1132
+ 'utf_16',
1133
+ 'cp932', # 日文,Shift-JIS
1134
+ 'Big5', # 繁体字,Big5
1135
+ 'big5hkscs', # 繁体字
1136
+ ]:
1137
+ try:
1138
+ content = self.read_text(encoding=encoding)
1139
+ return content, encoding
1140
+ except (UnicodeDecodeError, UnicodeError):
1141
+ continue
1142
+
1127
1143
  def readlines_batch(self, batch_size, *, encoding='utf8'):
1128
1144
  """ 将文本行打包,每次返回一个批次多行数据
1129
1145
 
@@ -2312,6 +2328,7 @@ def cache_file(file, make_data_func: Callable[[], Any] = None, *,
2312
2328
  def wrapper(*args2, **kwargs2):
2313
2329
 
2314
2330
  f = XlPath.init(file, XlPath.tempdir())
2331
+ f.parent.mkdir(exist_ok=True, parents=True)
2315
2332
 
2316
2333
  # 1 优先看是不是需要先从文件读取数据
2317
2334
  if mode == 'read_first' and f.is_file():
@@ -7,6 +7,8 @@
7
7
  """
8
8
  扩展了些自己的openpyxl工具
9
9
  """
10
+ import copy
11
+
10
12
  import time
11
13
 
12
14
  from pyxllib.prog.pupil import check_install_package, run_once
@@ -2463,7 +2465,7 @@ def extract_workbook_summary2(file_path, *,
2463
2465
  """
2464
2466
  :param keep_links: 是否保留外部表格链接数据。如果保留,打开好像会有点问题。
2465
2467
  :param mode:
2466
- 0,最原始的summary3摘要
2468
+ 0,最原始的summary2摘要
2467
2469
  1,添加当前工作表、单元格位置的信息
2468
2470
  :param kwargs: 捕捉其他参数,主要是向下兼容,其实现在并没有用
2469
2471
 
@@ -3015,7 +3017,10 @@ def extract_workbook_summary3b(file_path,
3015
3017
 
3016
3018
  :param summary_limit_len: 摘要长度限制
3017
3019
  :param timeout_seconds: 超时限制
3018
- :param return_mode: 返回模式,0表示只返回摘要,1表示返回摘要和耗时
3020
+ :param return_mode: 返回模式
3021
+ 0,表示只返回摘要
3022
+ 1,表示返回摘要和耗时
3023
+ 2, 再增加返回summary2
3019
3024
  :param len_mode:
3020
3025
  0, 使用len作为token长度评估
3021
3026
  1, 使用模型评估实际token长度
@@ -3024,6 +3029,7 @@ def extract_workbook_summary3b(file_path,
3024
3029
  res = {}
3025
3030
  res['fileName'] = Path(file_path).name
3026
3031
  load_time = summary2_time = summary3_time = -1
3032
+ summary2_res = {}
3027
3033
 
3028
3034
  def reduce_summary(summary):
3029
3035
  """ 如果转json后的summary超过4K,去掉可能的sheets字段 """
@@ -3037,6 +3043,7 @@ def extract_workbook_summary3b(file_path,
3037
3043
  start_time = time.time()
3038
3044
  res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
3039
3045
  # res = convert_to_json_compatible(res)
3046
+ summary2_res = copy.deepcopy(res)
3040
3047
  summary2_time = time.time() - start_time - load_time
3041
3048
  start_time = time.time()
3042
3049
  if len_mode == 1:
@@ -3055,8 +3062,13 @@ def extract_workbook_summary3b(file_path,
3055
3062
  res['error'] = f'提取摘要时发生错误:{format_exception(e, 2)}'
3056
3063
  reduce_summary(res)
3057
3064
 
3058
- if return_mode == 1:
3059
- return res, {'load_time': human_readable_number(load_time),
3065
+ time_dict = {'load_time': human_readable_number(load_time),
3060
3066
  'summary2_time': human_readable_number(summary2_time),
3061
3067
  'summary3_time': human_readable_number(summary3_time)}
3068
+
3069
+ if return_mode == 1:
3070
+ return res, time_dict
3071
+ elif return_mode == 2:
3072
+ return res, time_dict, summary2_res
3073
+
3062
3074
  return res
@@ -34,6 +34,7 @@ import threading
34
34
  import time
35
35
  import traceback
36
36
  from urllib.parse import urlparse
37
+ import re
37
38
 
38
39
  from pyxllib.prog.newbie import classproperty, typename
39
40
 
@@ -1037,6 +1038,21 @@ class MultiProcessLauncher:
1037
1038
  self.workers.append(worker)
1038
1039
  return worker
1039
1040
 
1041
+ def add_process_python(self, file, args='', name=None, shell=False):
1042
+ """ 添加并启动一个Python模块作为后台进程。
1043
+
1044
+ :param file: 要执行的Python文件路径
1045
+ :param str|list args: 模块的参数
1046
+ :param name: 进程的名称,默认为模块名
1047
+ """
1048
+ cmd = [f'{sys.executable}', f'{file}']
1049
+ if isinstance(args, str):
1050
+ cmd.append(args)
1051
+ else:
1052
+ cmd += list(args)
1053
+
1054
+ return self.add_process_cmd(cmd, name, shell=shell)
1055
+
1040
1056
  def add_process_python_module(self, module, args='', name=None, shell=False):
1041
1057
  """ 添加并启动一个Python模块作为后台进程。
1042
1058
 
@@ -1102,6 +1118,46 @@ class MultiProcessLauncher:
1102
1118
  print_full_dataframe(df)
1103
1119
 
1104
1120
 
1121
+ def support_multi_processes(default_processes=1):
1122
+ """ 对函数进行扩展,支持并发多进程运行
1123
+
1124
+ 注意被装饰的函数,需要支持 process_count、process_id 两个参数,来获得总进程数,当前进程id的信息
1125
+ """
1126
+
1127
+ def decorator(func):
1128
+
1129
+ def wrapper(*args, **kwargs):
1130
+ process_count = int(kwargs.pop('process_count', default_processes))
1131
+ process_id = kwargs.pop('process_id', None)
1132
+
1133
+ if process_count == 1 or process_id is not None:
1134
+ if process_id is None:
1135
+ return func(*args, **kwargs)
1136
+ else:
1137
+ return func(*args, **kwargs, process_count=process_count, process_id=int(process_id))
1138
+ else:
1139
+ mpl = MultiProcessLauncher()
1140
+ for i in range(int(process_count)):
1141
+ if isinstance(process_id, int) and i != process_id:
1142
+ continue
1143
+
1144
+ # todo 这样使用有个坑,process_count、process_id都是以str类型传入的,开发者下游使用容易出问题
1145
+ cmds = [func.__name__,
1146
+ '--process_count', str(process_count),
1147
+ '--process_id', str(i)
1148
+ ]
1149
+ cmds.extend(map(str, args)) # 添加位置参数
1150
+ for k, v in kwargs.items():
1151
+ cmds.append(f'--{k}') # 添加关键字参数的键
1152
+ cmds.append(str(v)) # 添加关键字参数的值
1153
+ mpl.add_process_python(sys.argv[0], cmds)
1154
+ mpl.run_endless()
1155
+
1156
+ return wrapper
1157
+
1158
+ return decorator
1159
+
1160
+
1105
1161
  def xlmd5(content):
1106
1162
  if isinstance(content, str):
1107
1163
  content = content.encode('utf-8')
@@ -1252,3 +1308,8 @@ def check_counter(data, top_n=10):
1252
1308
  def tprint(*args, **kwargs):
1253
1309
  """ 带时间戳的print """
1254
1310
  print(utc_now2(), *args, **kwargs)
1311
+
1312
+
1313
+ def is_valid_identifier(name):
1314
+ """ 判断是否是合法的标识符 """
1315
+ return re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', name)
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2024/06/18
6
+
7
+
8
+ from pyxllib.prog.pupil import check_install_package
9
+
10
+ check_install_package('croniter')
11
+
12
+ import datetime
13
+ import time
14
+ import sys
15
+
16
+ from croniter import croniter
17
+
18
+
19
+ class SchedulerUtils:
20
+ @classmethod
21
+ def calculate_future_time(cls, start_time, wait_seconds):
22
+ """ 计算延迟时间
23
+
24
+ :param datetime start_time: 开始时间
25
+ :param int wait_seconds: 等待秒数
26
+ todo 先只支持秒数这种标准秒数,后续可以考虑支持更多智能的"1小时"等这种解析
27
+ """
28
+ return start_time + datetime.timedelta(seconds=wait_seconds)
29
+
30
+ @classmethod
31
+ def calculate_next_cron_time(cls, cron_tag, base_time=None):
32
+ """ 使用crontab标记的运行周期,然后计算相对当前时间,下一次要启动运行的时间
33
+
34
+ :param str cron_tag:
35
+ 30 2 * * 1: 这部分是时间和日期的设定,具体含义如下:
36
+ 30: 表示分钟,即每小时的第 30 分钟。
37
+ 2: 表示小时,即凌晨 2 点。
38
+ 第三个星号 *: 表示日,这里的星号意味着每天。
39
+ 第四个星号 *: 表示月份,星号同样表示每个月。
40
+ 1: 表示星期中的日子,这里的 1 代表星期一。
41
+ """
42
+
43
+ # 如果没有提供基准时间,则使用当前时间
44
+ if base_time is None:
45
+ base_time = datetime.datetime.now()
46
+ # 初始化 croniter 对象
47
+ cron = croniter(cron_tag, base_time)
48
+ # 计算下一次运行时间
49
+ next_time = cron.get_next(datetime.datetime)
50
+ return next_time
51
+
52
+ @classmethod
53
+ def wait_until_time(cls, dst_time):
54
+ """
55
+ :param datetime dst_time: 一直等待到目标时间
56
+ 期间可以用time.sleep进行等待
57
+ """
58
+ # 一般来说,只要计算一轮待等待秒数就行。但是time.sleep机制好像不一定准确的,所以使用无限循环重试会更好。
59
+ while True:
60
+ # 先计算当前时间和目标时间的相差秒数
61
+ wait_seconds = (dst_time - datetime.datetime.now()).total_seconds()
62
+ if wait_seconds <= 0:
63
+ break
64
+ time.sleep(max(1, wait_seconds)) # 最少等待1秒
65
+
66
+ @classmethod
67
+ def smart_wait(cls, start_time, end_time, wait_tag, print_mode=0):
68
+ """ 智能等待,一般用在对进程的管理重启上
69
+
70
+ :param datetime start_time: 程序启动的时间
71
+ :param datetime end_time: 程序结束的时间
72
+ :param str|float|int wait_tag: 等待标记
73
+ 如果是str,则按照crontab解析
74
+ 如果是int,则表示等待的秒数
75
+ 如果是float,则表示等待的秒数
76
+ """
77
+ # 1 尝试把wait_tag转成数值
78
+ try:
79
+ wait_tag = float(wait_tag)
80
+ except ValueError: # 转不成也没关系
81
+ pass
82
+
83
+ if start_time is None:
84
+ start_time = datetime.datetime.now()
85
+ if end_time is None:
86
+ end_time = datetime.datetime.now()
87
+
88
+ # 2 计算下一次启动时间
89
+ if isinstance(wait_tag, str):
90
+ # 按照crontab解析
91
+ next_time = cls.calculate_next_cron_time(wait_tag, end_time)
92
+ elif wait_tag >= 0:
93
+ # 正值则是从end_time开始往后等待
94
+ next_time = cls.calculate_future_time(end_time, wait_tag)
95
+ elif wait_tag < 0:
96
+ # 负值则是从start_time开始往前等待
97
+ next_time = cls.calculate_future_time(start_time, wait_tag)
98
+ else:
99
+ raise ValueError
100
+
101
+ if print_mode:
102
+ print(f'等待到时间{next_time}...')
103
+
104
+ cls.wait_until_time(next_time)
105
+
106
+
107
+ def trial():
108
+ # 设置基准时间
109
+ base_time = datetime.datetime.now()
110
+ # 定义crontab表达式
111
+ cron_expression = '30 2 * * 1' # 每周一凌晨2点30分执行
112
+ # 测试延迟功能
113
+ delayed_time = SchedulerUtils.calculate_future_time(base_time, 10) # 延迟10秒
114
+ # 测试crontab计算下一次运行时间
115
+ next_run_time = SchedulerUtils.calculate_next_cron_time(cron_expression, base_time)
116
+
117
+ print(base_time, delayed_time, next_run_time, sep='\n')
118
+
119
+
120
+ if __name__ == '__main__':
121
+ import fire
122
+
123
+ # 1 如果输入命令行参数,使用fire机制运行
124
+ if len(sys.argv) > 1:
125
+ fire.Fire()
126
+ exit()
127
+
128
+ # 2 否则执行这里的测试代码
129
+ trial()
@@ -230,6 +230,9 @@ class Browser(Explorer):
230
230
  file = file.rename(get_etag(str(file)) + file.suffix, if_exists='replace')
231
231
  self.__call__(arg, file, **kwargs)
232
232
 
233
+ def url(self, *args, wait=True, **kwargs):
234
+ super().__call__(*args, wait=wait, **kwargs)
235
+
233
236
  def __call__(self, arg, file=None, *, wait=True, clsmsg=True, to_html_args=None,
234
237
  **kwargs): # NOQA Browser的操作跟标准接口略有差异
235
238
  """ 该版本会把arg转存文件重设为文件名
@@ -12,6 +12,7 @@ from humanfriendly import format_timespan
12
12
 
13
13
  from pyxllib.algo.pupil import natural_sort, ValuesStat
14
14
  from pyxllib.text.pupil import shorten, listalign
15
+ from pyxllib.prog.newbie import human_readable_number
15
16
 
16
17
  __tictoc = """
17
18
  基于 pytictoc 代码,做了些自定义扩展
@@ -40,13 +41,15 @@ class TicToc:
40
41
  TicToc.elapsed #t.end - t.start; i.e., time elapsed from t.start when t.toc() or t.tocvalue() was last called
41
42
  """
42
43
 
43
- def __init__(self, title='', *, disable=False):
44
+ def __init__(self, title='', *, disable=False, min_display_seconds=None):
44
45
  """Create instance of TicToc class."""
45
46
  self.start = timeit.default_timer()
46
47
  self.end = float('nan')
47
48
  self.elapsed = float('nan')
48
49
  self.title = title
49
50
  self.disable = disable
51
+ # 只有达到这个时间,才会显示耗时
52
+ self.min_display_seconds = min_display_seconds
50
53
 
51
54
  def tic(self):
52
55
  """Start the timer."""
@@ -64,7 +67,7 @@ class TicToc:
64
67
  self.elapsed = self.end - self.start
65
68
  if not self.disable:
66
69
  # print(f'{self.title} {msg} {self.elapsed:.3f} 秒.')
67
- print(f'{self.title} {msg} elapsed {format_timespan(self.elapsed)}.')
70
+ print(f'{self.title} {msg} elapsed {human_readable_number(self.elapsed, "秒")}.')
68
71
  if restart:
69
72
  self.start = timeit.default_timer()
70
73
 
@@ -84,14 +87,14 @@ class TicToc:
84
87
  @staticmethod
85
88
  def process_time(msg='time.process_time():'):
86
89
  """计算从python程序启动到目前为止总用时"""
87
- print(f'{msg} {format_timespan(time.process_time())}.')
90
+ print(f'{msg} {human_readable_number(time.process_time(), "秒")}.')
88
91
 
89
92
  def __enter__(self):
90
93
  """Start the timer when using TicToc in a context manager."""
91
94
  from pyxllib.prog.specialist import get_xllog
92
95
 
93
96
  if self.title == '__main__' and not self.disable:
94
- get_xllog().info(f'time.process_time(): {format_timespan(time.process_time())}.')
97
+ get_xllog().info(f'time.process_time(): {human_readable_number(time.process_time(), "秒")}.')
95
98
  self.start = timeit.default_timer()
96
99
 
97
100
  def __exit__(self, exc_type, exc_val, exc_tb):
@@ -102,10 +105,10 @@ class TicToc:
102
105
  xllog = get_xllog()
103
106
 
104
107
  if exc_tb is None:
105
- if not self.disable:
106
- xllog.info(f'{self.title} finished in {format_timespan(elapsed)}.')
108
+ if not self.disable and (self.min_display_seconds is None or elapsed >= self.min_display_seconds):
109
+ xllog.info(f'{self.title} finished in {human_readable_number(elapsed, "秒")}.')
107
110
  else:
108
- xllog.info(f'{self.title} interrupt in {format_timespan(elapsed)},')
111
+ xllog.info(f'{self.title} interrupt in {human_readable_number(elapsed, "秒")},')
109
112
 
110
113
 
111
114
  __timer = """
@@ -69,7 +69,10 @@ def get_charclass_num(content):
69
69
 
70
70
 
71
71
  def get_charclass_rate(content, round_digits=4):
72
- """ 检查字符类型分布数量 """
72
+ """ 检查字符类型分布数量
73
+
74
+ :param str content: 文本内容
75
+ """
73
76
  ct = get_charclass_num(content)
74
77
 
75
78
  # 这一类权重要翻倍
@@ -93,6 +96,8 @@ def check_language_from_counter(ct):
93
96
  这个比例最早是给表格设计的,表格很可能表头是中文,中间都是英文、数字数据,此时仍然归为中文
94
97
  但如果是一般性的文档,可能要提高中文的比例,才能视为中文文档
95
98
  """
99
+ ct['常用汉字'] = ct.get('常用汉字', 0)
100
+ ct['偏僻汉字'] = ct.get('偏僻汉字', 0)
96
101
 
97
102
  if '繁体汉字' in ct:
98
103
  if safe_div(ct['繁体汉字'], ct['常用汉字']) > 0.1:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.116
3
+ Version: 0.3.118
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -80,6 +80,7 @@ pyxllib/prog/ipyexec.py
80
80
  pyxllib/prog/multiprocs.py
81
81
  pyxllib/prog/newbie.py
82
82
  pyxllib/prog/pupil.py
83
+ pyxllib/prog/scheduler.py
83
84
  pyxllib/prog/sitepackages.py
84
85
  pyxllib/prog/xlosenv.py
85
86
  pyxllib/prog/specialist/__init__.py
@@ -21,22 +21,28 @@ Jinja2
21
21
  pandas>=0.23.4
22
22
 
23
23
  [xlai]
24
+ opencv-python
24
25
  opsdroid-get-image-size
25
- pillow
26
26
  pynvml
27
- xlcocotools
28
27
  visdom
29
- opencv-python
28
+ pillow
30
29
 
31
30
  [xlall]
31
+ flask-jwt-extended
32
+ ujson
33
+ flask-wtf
34
+ opencv-python
32
35
  opsdroid-get-image-size
36
+ zhconv
37
+ html2text
38
+ xlrd
39
+ flask
40
+ sentencepiece
41
+ flask-cors
42
+ flask-restful
33
43
  pillow
34
- pynvml
35
- xlcocotools
36
- visdom
37
- opencv-python
38
44
 
39
45
  [xlcv]
46
+ opencv-python
40
47
  opsdroid-get-image-size
41
48
  pillow
42
- opencv-python
@@ -22,8 +22,8 @@ opencv-python
22
22
  xlai = """
23
23
  pynvml
24
24
  visdom
25
- xlcocotools
26
25
  """
26
+ # xlcocotools
27
27
  # fvcore
28
28
 
29
29
  # 全量的依赖,自用
@@ -39,12 +39,13 @@ ujson
39
39
  html2text
40
40
  flask-jwt-extended
41
41
  """
42
+ # pywin32
42
43
 
43
44
  _dir = Path(__file__).parent
44
45
 
45
46
  setup(
46
47
  name='pyxllib', # pip 安装时用的名字
47
- version='0.3.116', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
48
+ version='0.3.118', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
48
49
  author='code4101',
49
50
  author_email='877362867@qq.com',
50
51
  url='https://github.com/XLPRUtils/pyxllib',
@@ -73,6 +74,6 @@ setup(
73
74
  # ②开发版:python setup.py develop easy_install pyxllib[xlcv]
74
75
  extras_require={'xlcv': '\n'.join(set((xlcv).splitlines())),
75
76
  'xlai': '\n'.join(set((xlcv + xlai).splitlines())),
76
- 'xlall': '\n'.join(set((xlcv + xlai).splitlines())),
77
+ 'xlall': '\n'.join(set((xlcv + xlall).splitlines())),
77
78
  },
78
79
  )
File without changes
File without changes
File without changes
File without changes