pyxllib 0.3.106__tar.gz → 0.3.108__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 (345) hide show
  1. {pyxllib-0.3.106/pyxllib.egg-info → pyxllib-0.3.108}/PKG-INFO +1 -1
  2. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/pupil.py +72 -0
  3. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/pglib.py +71 -0
  4. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/kq5034lib.py +3 -2
  5. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/libreoffice.py +14 -8
  6. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/movielib.py +9 -0
  7. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/xlsxlib.py +33 -22
  8. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/newbie.py +5 -1
  9. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/tictoc.py +1 -1
  10. {pyxllib-0.3.106 → pyxllib-0.3.108/pyxllib.egg-info}/PKG-INFO +1 -1
  11. {pyxllib-0.3.106 → pyxllib-0.3.108}/setup.py +1 -1
  12. {pyxllib-0.3.106 → pyxllib-0.3.108}/LICENSE +0 -0
  13. {pyxllib-0.3.106 → pyxllib-0.3.108}/MANIFEST.in +0 -0
  14. {pyxllib-0.3.106 → pyxllib-0.3.108}/README.md +0 -0
  15. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/__init__.py +0 -0
  16. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/__init__.py +0 -0
  17. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/disjoint.py +0 -0
  18. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/geo.py +0 -0
  19. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/intervals.py +0 -0
  20. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/matcher.py +0 -0
  21. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/newbie.py +0 -0
  22. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/shapelylib.py +0 -0
  23. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/specialist.py +0 -0
  24. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/stat.py +0 -0
  25. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/treelib.py +0 -0
  26. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/algo/unitlib.py +0 -0
  27. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/__init__.py +0 -0
  28. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/expert.py +0 -0
  29. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/imfile.py +0 -0
  30. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/imhash.py +0 -0
  31. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/pupil.py +0 -0
  32. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/rgbfmt.py +0 -0
  33. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/trackbartools.py +0 -0
  34. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/xlcvlib.py +0 -0
  35. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/cv/xlpillib.py +0 -0
  36. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/__init__.py +0 -0
  37. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/echarts.py +0 -0
  38. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/jsonlib.py +0 -0
  39. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/oss.py +0 -0
  40. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/sqlite.py +0 -0
  41. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/data/sqllib.py +0 -0
  42. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/JLineViewer.py +0 -0
  43. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/__init__.py +0 -0
  44. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/autogui/__init__.py +0 -0
  45. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/autogui/autogui.py +0 -0
  46. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/autogui/virtualkey.py +0 -0
  47. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/demolib.py +0 -0
  48. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/drissionlib.py +0 -0
  49. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/old.py +0 -0
  50. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/qt.py +0 -0
  51. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/robustprocfile.py +0 -0
  52. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/seleniumlib.py +0 -0
  53. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/tk.py +0 -0
  54. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/unixlib.py +0 -0
  55. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/utools.py +0 -0
  56. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/webhook.py +0 -0
  57. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/win32lib.py +0 -0
  58. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/ext/yuquelib.py +0 -0
  59. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/__init__.py +0 -0
  60. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/docxlib.py +0 -0
  61. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/gitlib.py +0 -0
  62. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/newbie.py +0 -0
  63. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/onenotelib.py +0 -0
  64. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/packlib/__init__.py +0 -0
  65. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/packlib/zipfile.py +0 -0
  66. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/pdflib.py +0 -0
  67. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/pupil.py +0 -0
  68. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/specialist/__init__.py +0 -0
  69. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/specialist/dirlib.py +0 -0
  70. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/specialist/download.py +0 -0
  71. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/file/specialist/filelib.py +0 -0
  72. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/__init__.py +0 -0
  73. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/deprecatedlib.py +0 -0
  74. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/ipyexec.py +0 -0
  75. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/multiprocs.py +0 -0
  76. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/pupil.py +0 -0
  77. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/sitepackages.py +0 -0
  78. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/__init__.py +0 -0
  79. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/bc.py +0 -0
  80. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/browser.py +0 -0
  81. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/common.py +0 -0
  82. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/datetime.py +0 -0
  83. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/specialist/xllog.py +0 -0
  84. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/prog/xlosenv.py +0 -0
  85. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/stdlib/__init__.py +0 -0
  86. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  87. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  88. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  89. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/__init__.py +0 -0
  90. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/ahocorasick.py +0 -0
  91. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/charclasslib.py +0 -0
  92. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/jiebalib.py +0 -0
  93. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/jscode.py +0 -0
  94. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/latex/__init__.py +0 -0
  95. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/levenshtein.py +0 -0
  96. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/nestenv.py +0 -0
  97. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/newbie.py +0 -0
  98. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/pupil/__init__.py +0 -0
  99. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/pupil/common.py +0 -0
  100. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/pupil/xlalign.py +0 -0
  101. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/pycode.py +0 -0
  102. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/specialist/__init__.py +0 -0
  103. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/specialist/common.py +0 -0
  104. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/specialist/ptag.py +0 -0
  105. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/spellchecker.py +0 -0
  106. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/vbacode.py +0 -0
  107. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/text/xmllib.py +0 -0
  108. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/xl.py +0 -0
  109. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib/xlcv.py +0 -0
  110. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib.egg-info/SOURCES.txt +0 -0
  111. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib.egg-info/dependency_links.txt +0 -0
  112. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib.egg-info/requires.txt +3 -3
  113. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxllib.egg-info/top_level.txt +0 -0
  114. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/__init__.py +0 -0
  115. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/__init__.py +0 -0
  116. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/clientlib.py +0 -0
  117. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/specialist.py +0 -0
  118. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/torch_app.py +0 -0
  119. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/xlpaddle.py +0 -0
  120. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ai/xltorch.py +0 -0
  121. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/__init__.py +0 -0
  122. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/coco.py +0 -0
  123. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/datacls.py +0 -0
  124. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/datasets.py +0 -0
  125. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/gptlib.py +0 -0
  126. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/icdar/__init__.py +0 -0
  127. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/icdar/deteval.py +0 -0
  128. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/icdar/icdar2013.py +0 -0
  129. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/icdar/iou.py +0 -0
  130. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  131. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/imtextline.py +0 -0
  132. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/labelme.py +0 -0
  133. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/removeline.py +0 -0
  134. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/data/specialist.py +0 -0
  135. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/eval/__init__.py +0 -0
  136. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/paddleocr.py +0 -0
  137. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/__init__.py +0 -0
  138. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  139. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/__init__.py +0 -0
  140. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  141. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  142. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  143. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  144. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  145. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  146. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  147. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  148. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  149. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  150. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  151. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  152. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  153. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  154. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  155. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  156. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  157. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  158. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  159. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  160. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  161. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  162. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  163. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/__init__.py +0 -0
  164. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  165. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  166. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  167. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  168. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  169. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  170. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  171. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  172. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  173. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  174. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  175. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  176. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  177. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  178. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  179. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  180. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  181. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  182. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  183. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  184. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  185. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  186. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  187. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  188. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  189. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  190. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  191. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  192. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  193. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  194. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  195. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  196. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  197. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  198. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  199. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  200. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  201. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  202. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  203. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  204. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  205. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  206. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  207. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  208. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  209. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  210. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  211. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  212. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  213. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  214. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  215. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  216. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  217. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  218. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  219. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  220. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  221. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  222. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  223. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  224. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  225. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  226. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  227. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  228. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  229. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  230. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  231. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  232. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  233. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  234. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  235. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  236. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  237. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  238. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  239. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  240. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  241. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  242. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  243. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  244. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  245. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  246. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  247. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  248. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  249. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  250. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  251. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  252. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  253. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  254. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  255. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  256. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/__init__.py +0 -0
  257. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/eval.py +0 -0
  258. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/export_center.py +0 -0
  259. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/export_model.py +0 -0
  260. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  261. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  262. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  263. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  264. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  265. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  266. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  267. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  268. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  269. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  270. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  271. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  272. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/program.py +0 -0
  273. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  274. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/train.py +0 -0
  275. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  276. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  277. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/__init__.py +0 -0
  278. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  279. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  280. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  281. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  282. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  283. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  284. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  285. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  286. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  287. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  288. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  289. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  290. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  291. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  292. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  293. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  294. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  295. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  296. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  297. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  298. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  299. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  300. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  301. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  302. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  303. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  304. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  305. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  306. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  307. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  308. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  309. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  310. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  311. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  312. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  313. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  314. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  315. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  316. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  317. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  318. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  319. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  320. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  321. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/iou.py +0 -0
  322. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/logging.py +0 -0
  323. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/network.py +0 -0
  324. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  325. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/profiler.py +0 -0
  326. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/save_load.py +0 -0
  327. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/stats.py +0 -0
  328. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppocr/utils/utility.py +0 -0
  329. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/__init__.py +0 -0
  330. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/predict_system.py +0 -0
  331. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/__init__.py +0 -0
  332. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  333. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/matcher.py +0 -0
  334. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  335. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  336. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  337. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  338. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  339. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  340. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  341. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  342. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/ppstructure/utility.py +0 -0
  343. {pyxllib-0.3.106 → pyxllib-0.3.108}/pyxlpr/xlai.py +0 -0
  344. {pyxllib-0.3.106 → pyxllib-0.3.108}/requirements.txt +0 -0
  345. {pyxllib-0.3.106 → pyxllib-0.3.108}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.106
3
+ Version: 0.3.108
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -152,6 +152,78 @@ class ValuesStat:
152
152
  raise ValueError("无效的数据数量")
153
153
 
154
154
 
155
+ class ValuesStat2:
156
+ """ 240509周四17:33,第2代统计器
157
+ """
158
+
159
+ def __init__(self, values=None, raw_values=None):
160
+ from statistics import pstdev, mean
161
+
162
+ # 支持输入可能带有非数值类型的raw_values
163
+ if raw_values:
164
+ values = [x for x in raw_values if isinstance(x, (int, float))] # todo 可能需要更泛用的判断数值的方法
165
+
166
+ self.raw_values = raw_values
167
+ values = values or []
168
+ self.values = sorted(values)
169
+ if self.raw_values:
170
+ self.raw_n = len(self.raw_values)
171
+ else:
172
+ self.raw_n = 0
173
+ self.n = len(values)
174
+ self.sum = sum(values)
175
+ if self.n:
176
+ self.mean = mean(self.values)
177
+ self.std = pstdev(self.values)
178
+ self.min, self.max = self.values[0], self.values[-1]
179
+ else:
180
+ self.mean = self.std = self.min = self.max = float('nan')
181
+
182
+ self.dist = []
183
+
184
+ def __len__(self):
185
+ return self.n
186
+
187
+ def summary(self, unit='万', precision=4, percentile=5):
188
+ """ 文本汇总性的报告
189
+
190
+ :param percentile: 包括两个极值端点的切分点数,
191
+ 设置2,就是不设置分位数,就是只展示最小、最大值
192
+ 如果设置了3,就表示"中位数、二分位数",在展示的时候,会显示50%位置的分位数值
193
+ 如果设置了5,就相当于"四分位数",会显示25%、50%、75%位置的分位数值
194
+ :param unit: 展示数值时使用的单位
195
+ :param precision: 展示数值时的精度
196
+ """
197
+ from statistics import quantiles
198
+
199
+ def fmt0(v):
200
+ return human_readable_number(v, '万')
201
+
202
+ def fmt(v):
203
+ return human_readable_number(v, unit, precision)
204
+
205
+ desc = []
206
+ if self.raw_n and self.raw_n > self.n:
207
+ desc.append(f"非数值数量:{fmt0(self.raw_n - self.n)}")
208
+
209
+ desc.append(f"总数:{fmt0(self.n)}")
210
+ desc.append(f"总和:{fmt(self.sum)}")
211
+ desc.append(f'均值±标准差:{fmt(self.mean)}±{fmt(self.std)}')
212
+
213
+ if self.values:
214
+ dist = [self.values[0]]
215
+ if percentile > 2:
216
+ quartiles = quantiles(self.values, n=percentile - 1)
217
+ dist += quartiles
218
+ dist.append(self.values[-1])
219
+
220
+ desc.append(f"分布:{'/'.join([fmt(v) for v in dist])}")
221
+ elif self.dist: # 此时当前函数的percentile设置失效,以dist中存储的情况为准
222
+ desc.append(f"分布:{'/'.join([fmt(v) for v in self.dist])}")
223
+
224
+ return '\t'.join(desc)
225
+
226
+
155
227
  class Groups:
156
228
  def __init__(self, data):
157
229
  """ 分组
@@ -44,6 +44,7 @@ import psycopg.rows
44
44
  from pyxllib.prog.newbie import round_int
45
45
  from pyxllib.prog.pupil import utc_now, utc_timestamp
46
46
  from pyxllib.prog.specialist import XlOsEnv
47
+ from pyxllib.algo.pupil import ValuesStat2
47
48
  from pyxllib.file.specialist import get_etag
48
49
  from pyxllib.data.sqlite import SqlBase
49
50
 
@@ -230,6 +231,76 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
230
231
 
231
232
  self.commit_base(commit, query, params)
232
233
 
234
+ def __6_高级统计(self):
235
+ pass
236
+
237
+ def get_field_valuesstat(self, table_name, field_name, percentile_count=5,
238
+ cvt_numeric=True, by_data=False):
239
+ """ 获得指定表格的某个字段的统计特征ValuesStat2对象
240
+
241
+ :param table_name: 表名
242
+ :param field_name: 用于计算统计数据的字段名
243
+ :param percentile_count: 分位数的数量,例如 3 表示只计算中位数
244
+ :param by_data: 是否获得原始数据
245
+ 默认只获得统计特征,不获得原始数据
246
+ """
247
+
248
+ def init_from_db_data():
249
+ values = self.exec2col(f'SELECT {field_name} FROM {table_name}')
250
+ if cvt_numeric: # 这个是numeric格式字段,是"字符串",要做个转换
251
+ values = [x and float(x) for x in values]
252
+
253
+ return ValuesStat2(raw_values=values)
254
+
255
+ def init_from_db():
256
+ # 构建基础的 SQL 查询
257
+ sql_query = f"""
258
+ SELECT
259
+ COUNT(*) AS total_count,
260
+ COUNT({field_name}) AS non_null_count,
261
+ SUM({field_name}) AS total_sum,
262
+ AVG({field_name}) AS average,
263
+ STDDEV({field_name}) AS standard_deviation,
264
+ MIN({field_name}) AS min_value,
265
+ MAX({field_name}) AS max_value
266
+ """
267
+
268
+ percentiles = []
269
+ # 根据分位点的数量动态添加分位数计算
270
+ if percentile_count > 2:
271
+ step = 1 / (percentile_count - 1)
272
+ percentiles = [(i * step) for i in range(1, percentile_count - 1)]
273
+ percentiles_query = ", ".join(
274
+ f"PERCENTILE_CONT({p:.2f}) WITHIN GROUP (ORDER BY {field_name}) AS percentile_{int(p * 100)}"
275
+ for p in percentiles
276
+ )
277
+ sql_query += ", " + percentiles_query
278
+
279
+ sql_query += f" FROM {table_name};"
280
+
281
+ # 执行 SQL 查询
282
+ row = self.exec2dict(sql_query).fetchone()
283
+
284
+ # 创建一个新实例并将从数据库获得的数据填充到相应的属性
285
+ x = ValuesStat2()
286
+ x.raw_n = row['total_count']
287
+ x.n = row['non_null_count']
288
+ x.sum = row['total_sum']
289
+ x.mean = row['average']
290
+ x.std = row['standard_deviation']
291
+
292
+ # 如果计算了分位数,填充相应属性
293
+ x.dist = [row['min_value']] + [row[f"percentile_{int(p * 100)}"] for p in percentiles] + [row['max_value']]
294
+ if cvt_numeric:
295
+ x.dist = [float(x) for x in x.dist]
296
+
297
+ return x
298
+
299
+ if by_data:
300
+ return init_from_db_data()
301
+ else:
302
+ return init_from_db()
303
+
233
304
 
234
305
  """
235
306
  【关于为什么XlprDb要和pglib合一个文件】
@@ -135,13 +135,14 @@ class Xiaoetong:
135
135
 
136
136
 
137
137
  class 网课考勤:
138
- def __init__(self, today=None):
138
+ def __init__(self, today=None, *, 表格路径=None):
139
139
  self.返款标题 = ''
140
- self.表格路径 = r'考勤.xlsx'
140
+ self.表格路径 = 表格路径 or r'考勤.xlsx'
141
141
  self.在线表格 = 'https://docs.qq.com/sheet/DUlF1UnRackJ2Vm5U' # 生成日报用
142
142
  self.开课日期 = '2022-01-08'
143
143
  self.视频返款 = [20, 15, 10, 5, 0, 0] # 直播(当堂)/第1天(当天)/第2天/第3天/第4天/第5天,完成观看的依次返款额。
144
144
  self.打卡返款 = {5: 100, 10: 150, 15: 200} # 打卡满5/10/15次的返款额
145
+ self.课程链接 = []
145
146
  self._init(today)
146
147
 
147
148
  self.driver = None # 浏览器脚本
@@ -59,7 +59,7 @@ def infer_file_format(file_path):
59
59
 
60
60
  class UpgradeOfficeFile:
61
61
  @classmethod
62
- def to_dir(cls, file_path, out_dir=None, fmt=None):
62
+ def to_dir(cls, file_path, out_dir=None, fmt=None, timeout=10):
63
63
  """ 将doc文件转换为docx文件
64
64
 
65
65
  :param file_path: 待升级的文件路径
@@ -86,20 +86,26 @@ class UpgradeOfficeFile:
86
86
  executor,
87
87
  '--headless', # 无界面模式
88
88
  '--convert-to', fmt, # 转换为docx格式
89
- '--outdir', out_dir, # 输出目录
89
+ '--outdir', str(out_dir), # 输出目录
90
90
  file_path # 输入文件路径
91
91
  ]
92
92
 
93
- subprocess.run(command, check=True)
93
+ subprocess.run(command, timeout=timeout, check=True)
94
94
 
95
95
  # 返回转换后的文件路径
96
96
  base_name = os.path.basename(file_path)
97
97
  name, _ = os.path.splitext(base_name)
98
98
  new_file_path = os.path.join(out_dir, f"{name}.{fmt}")
99
+
100
+ # todo 以目标文件是否存在判断转换是否成功也是有一定bug的,可能目标文件本来就存在
101
+ # 但如果严谨判断,就要分析subprocess.run的输出结果了,那个太麻烦,先用简便方法处理
102
+ if not Path(new_file_path).exists():
103
+ raise ValueError(f"升级文档失败")
104
+
99
105
  return new_file_path
100
106
 
101
107
  @classmethod
102
- def to_file(cls, in_file, out_file=None, fmt=None):
108
+ def to_file(cls, in_file, out_file=None, fmt=None, timeout=10):
103
109
  """ 可以指定转换出的文件名的版本
104
110
 
105
111
  :param in_file: 待转换的文件路径
@@ -126,7 +132,7 @@ class UpgradeOfficeFile:
126
132
  out_file.parent.mkdir(parents=True, exist_ok=True)
127
133
 
128
134
  # 调用upgrade_office_file函数进行转换
129
- temp_file = cls.to_dir(in_file, out_dir=out_file.parent, fmt=fmt)
135
+ temp_file = cls.to_dir(in_file, out_dir=out_file.parent, fmt=fmt, timeout=timeout)
130
136
 
131
137
  # 将生成的临时文件重命名为out_file
132
138
  os.rename(temp_file, out_file)
@@ -134,7 +140,7 @@ class UpgradeOfficeFile:
134
140
  return out_file
135
141
 
136
142
  @classmethod
137
- def to_tempfile(cls, in_file, fmt=None, *, timestamp_stem=False, create_subdir=False):
143
+ def to_tempfile(cls, in_file, fmt=None, *, timestamp_stem=False, create_subdir=False, timeout=10):
138
144
  """ 将文件转换为临时文件
139
145
 
140
146
  :param timestamp_stem: 时间戳文件名
@@ -151,8 +157,8 @@ class UpgradeOfficeFile:
151
157
 
152
158
  if timestamp_stem:
153
159
  stem = datetime.now().strftime('%Y%m%d.%H%M%S.%f')
154
- out_file = cls.to_file(in_file, out_file=root / f"{stem}.{fmt}", fmt=fmt)
160
+ out_file = cls.to_file(in_file, out_file=root / f"{stem}.{fmt}", fmt=fmt, timeout=timeout)
155
161
  else:
156
- out_file = cls.to_dir(in_file, out_dir=root, fmt=fmt)
162
+ out_file = cls.to_dir(in_file, out_dir=root, fmt=fmt, timeout=timeout)
157
163
 
158
164
  return out_file
@@ -10,6 +10,7 @@ check_install_package('moviepy')
10
10
 
11
11
  import cv2
12
12
  from moviepy.editor import VideoFileClip
13
+ from moviepy.editor import cvsecs
13
14
  import numpy as np
14
15
  from tqdm import tqdm
15
16
 
@@ -137,3 +138,11 @@ class XlVideoFileClip(VideoFileClip):
137
138
 
138
139
 
139
140
  inject_members(XlVideoFileClip, VideoFileClip)
141
+
142
+
143
+ def clip_video(input_file, output_file, start_time, end_time):
144
+ start_time = cvsecs(start_time)
145
+ end_time = cvsecs(end_time)
146
+ clip = VideoFileClip(input_file).subclip(start_time, end_time)
147
+ clip.write_videofile(output_file)
148
+ clip.reader.close()
@@ -2650,30 +2650,39 @@ class WorkbookSummary3:
2650
2650
  for addr, _ in row:
2651
2651
  new_cells[addr] = cells[addr]
2652
2652
 
2653
- new_cells = {}
2654
- for rows in rows_groups:
2653
+ total_new_cells = []
2654
+ for rows in reversed(rows_groups):
2655
+ new_cells = {}
2655
2656
  if len(rows) < 10:
2656
2657
  extract_cells_from_rows(rows)
2657
2658
  else: # 压缩中间的数据
2658
2659
  # 如果评估到最终摘要可能太小,要收敛下删除的范围
2659
2660
  n, m = len(rows), len(rows[0])
2660
2661
  target_n = int(target_reduce_cells_num / m + 0.5) # 本来应该删除多少行才行
2661
- cur_n = n - 4 if target_n > n - 4 else target_n # 实际删除多少行
2662
- left_n = n - cur_n # 剩余多少行
2663
- b = left_n // 2
2664
- a = left_n - b
2665
-
2666
- extract_cells_from_rows(rows[:a])
2667
- addr = combine_addresses(rows[a][0][0], rows[-b - 1][-1][0])
2668
- # new_cells[addr] = '这块区域的内容跟前面几行、后面几行的内容结构是一致的,省略显示'
2669
- new_cells[addr] = '...'
2670
- extract_cells_from_rows(rows[-b:])
2671
-
2672
- target_reduce_cells_num -= cur_n * m
2673
- if target_reduce_cells_num <= 0:
2674
- break
2675
-
2676
- sheet['cells'] = new_cells
2662
+ if target_n <= 0: # 如果删除的行数太少,那么就不压缩了
2663
+ extract_cells_from_rows(rows)
2664
+ else:
2665
+ cur_n = n - 4 if target_n > n - 4 else target_n # 实际删除多少行
2666
+ left_n = n - cur_n # 剩余多少行
2667
+ b = left_n // 2
2668
+ a = left_n - b
2669
+
2670
+ extract_cells_from_rows(rows[:a])
2671
+ addr = combine_addresses(rows[a][0][0], rows[-b - 1][-1][0])
2672
+ # new_cells[addr] = '这块区域的内容跟前面几行、后面几行的内容结构是一致的,省略显示'
2673
+ new_cells[addr] = '...'
2674
+ extract_cells_from_rows(rows[-b:])
2675
+
2676
+ target_reduce_cells_num -= cur_n * m
2677
+ # 240429周一21:57,这两行不能开,否则会过渡精简。如果压缩够了,那么后面的单元格需要全量补上。
2678
+ # if target_reduce_cells_num <= 0: # 满足以后不是直接break,而是要把后续的内容都保留
2679
+ # break
2680
+ total_new_cells.append(new_cells)
2681
+
2682
+ new_cells2 = {}
2683
+ for rows in reversed(total_new_cells):
2684
+ new_cells2.update(rows)
2685
+ sheet['cells'] = new_cells2
2677
2686
 
2678
2687
  @classmethod
2679
2688
  def reduce4_truncate_cells(cls, y, summary_limit_len, *, cur_summary_len=None):
@@ -2805,6 +2814,7 @@ class WorkbookSummary3:
2805
2814
  if cur_summary_len is None:
2806
2815
  cur_summary_len = cls.count_length(y)
2807
2816
 
2817
+ cur_summary_len0 = cur_summary_len
2808
2818
  active_sheet = y['ActiveSheet']
2809
2819
 
2810
2820
  # 1 预计要删除单元格数
@@ -2836,7 +2846,8 @@ class WorkbookSummary3:
2836
2846
  return cls.count_length(y)
2837
2847
 
2838
2848
  # 4 否则每张表按照比例删单元格,只保留前面部分的单元格
2839
- left_rate = 1 - r # 原始保留比例
2849
+ # todo 这里应该有更好的筛选机制,后续可以思考思考
2850
+ left_rate = min((summary_limit_len + cur_summary_len) / 2 * cur_summary_len, 0.9) # 首轮减小一点调整幅度
2840
2851
  while True:
2841
2852
  for i, st in enumerate(y['sheets']):
2842
2853
  if i == active_sheet_index:
@@ -2848,10 +2859,10 @@ class WorkbookSummary3:
2848
2859
  cur_summary_len = cls.count_length(y)
2849
2860
  if cur_summary_len <= summary_limit_len:
2850
2861
  return cur_summary_len
2851
- if left_rate * total_cells_num < 1:
2862
+ if left_rate * total_cells_num < 1: # 都没有单元格,别删了
2852
2863
  break
2853
- else:
2854
- left_rate *= 0.8 # 缩小保留比例,再试
2864
+ else: # 更新保留比率,再试
2865
+ left_rate *= min(summary_limit_len / cur_summary_len, 0.9)
2855
2866
 
2856
2867
  return cur_summary_len
2857
2868
 
@@ -267,13 +267,17 @@ def human_readable_number(value, base_type='K', precision=4):
267
267
  'K': (['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'], 1000),
268
268
  'KB': (['', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], 1024),
269
269
  'KiB': (['', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'], 1024),
270
- '万': (['', '万', '亿', '万亿', '亿亿'], 10000)
270
+ '万': (['', '万', '亿', '万亿', '亿亿'], 10000),
271
+ '秒': (['秒', [60, '分'], [60, '时'], [24, '天'], [7, '周'], [4.345, '月'], [12, '年']], 60),
271
272
  }.get(base_type, ([''], 1)) # 默认为空单位和基数1
272
273
 
273
274
  x, i = abs(value), 0
274
275
  while x >= base and i < len(units) - 1:
275
276
  x /= base
276
277
  i += 1
278
+ if isinstance(units[i], list):
279
+ base = units[i][0]
280
+ units[i] = units[i][1]
277
281
 
278
282
  x = f'{x:.{precision}g}' # 四舍五入到指定精度
279
283
  prefix = '-' if value < 0 else '' # 负数处理
@@ -70,7 +70,7 @@ class TicToc:
70
70
 
71
71
  def tocvalue(self, restart=False):
72
72
  """
73
- Return time elapsed since last call to tic().
73
+ Return time elapsed seconds since last call to tic().
74
74
 
75
75
  Optional argument:
76
76
  restart - Boolean specifying whether to restart the timer
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.106
3
+ Version: 0.3.108
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
30
30
 
31
31
  setup(
32
32
  name='pyxllib', # pip 安装时用的名字
33
- version='0.3.106', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
33
+ version='0.3.108', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
34
34
  author='code4101',
35
35
  author_email='877362867@qq.com',
36
36
  url='https://github.com/XLPRUtils/pyxllib',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes