pyxllib 0.3.96__py3-none-any.whl → 0.3.200__py3-none-any.whl

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 (358) hide show
  1. pyxllib/__init__.py +21 -21
  2. pyxllib/algo/__init__.py +8 -8
  3. pyxllib/algo/disjoint.py +54 -54
  4. pyxllib/algo/geo.py +541 -529
  5. pyxllib/algo/intervals.py +964 -964
  6. pyxllib/algo/matcher.py +389 -311
  7. pyxllib/algo/newbie.py +166 -166
  8. pyxllib/algo/pupil.py +629 -461
  9. pyxllib/algo/shapelylib.py +67 -67
  10. pyxllib/algo/specialist.py +241 -240
  11. pyxllib/algo/stat.py +494 -458
  12. pyxllib/algo/treelib.py +149 -149
  13. pyxllib/algo/unitlib.py +66 -66
  14. {pyxlpr → pyxllib/autogui}/__init__.py +5 -5
  15. pyxllib/autogui/activewin.py +246 -0
  16. pyxllib/autogui/all.py +9 -0
  17. pyxllib/{ext/autogui → autogui}/autogui.py +852 -823
  18. pyxllib/autogui/uiautolib.py +362 -0
  19. pyxllib/{ext/autogui → autogui}/virtualkey.py +102 -102
  20. pyxllib/autogui/wechat.py +827 -0
  21. pyxllib/autogui/wechat_msg.py +421 -0
  22. pyxllib/autogui/wxautolib.py +84 -0
  23. pyxllib/cv/__init__.py +5 -5
  24. pyxllib/cv/expert.py +267 -267
  25. pyxllib/cv/imfile.py +159 -159
  26. pyxllib/cv/imhash.py +39 -39
  27. pyxllib/cv/pupil.py +9 -9
  28. pyxllib/cv/rgbfmt.py +1525 -1525
  29. pyxllib/cv/slidercaptcha.py +137 -0
  30. pyxllib/cv/trackbartools.py +251 -251
  31. pyxllib/cv/xlcvlib.py +1040 -1040
  32. pyxllib/cv/xlpillib.py +423 -423
  33. pyxllib/data/echarts.py +240 -129
  34. pyxllib/data/jsonlib.py +89 -0
  35. pyxllib/data/oss.py +72 -72
  36. pyxllib/data/pglib.py +1127 -643
  37. pyxllib/data/sqlite.py +568 -341
  38. pyxllib/data/sqllib.py +297 -297
  39. pyxllib/ext/JLineViewer.py +505 -492
  40. pyxllib/ext/__init__.py +6 -6
  41. pyxllib/ext/demolib.py +246 -246
  42. pyxllib/ext/drissionlib.py +277 -0
  43. pyxllib/ext/kq5034lib.py +12 -1606
  44. pyxllib/ext/old.py +663 -663
  45. pyxllib/ext/qt.py +449 -449
  46. pyxllib/ext/robustprocfile.py +497 -0
  47. pyxllib/ext/seleniumlib.py +76 -76
  48. pyxllib/ext/tk.py +173 -173
  49. pyxllib/ext/unixlib.py +827 -826
  50. pyxllib/ext/utools.py +351 -338
  51. pyxllib/ext/webhook.py +124 -101
  52. pyxllib/ext/win32lib.py +40 -40
  53. pyxllib/ext/wjxlib.py +88 -0
  54. pyxllib/ext/wpsapi.py +124 -0
  55. pyxllib/ext/xlwork.py +9 -0
  56. pyxllib/ext/yuquelib.py +1105 -173
  57. pyxllib/file/__init__.py +17 -17
  58. pyxllib/file/docxlib.py +761 -761
  59. pyxllib/file/gitlib.py +309 -309
  60. pyxllib/file/libreoffice.py +165 -0
  61. pyxllib/file/movielib.py +148 -139
  62. pyxllib/file/newbie.py +10 -10
  63. pyxllib/file/onenotelib.py +1469 -1469
  64. pyxllib/file/packlib/__init__.py +330 -293
  65. pyxllib/file/packlib/zipfile.py +2441 -2441
  66. pyxllib/file/pdflib.py +426 -426
  67. pyxllib/file/pupil.py +185 -185
  68. pyxllib/file/specialist/__init__.py +685 -685
  69. pyxllib/file/specialist/dirlib.py +799 -799
  70. pyxllib/file/specialist/download.py +193 -186
  71. pyxllib/file/specialist/filelib.py +2829 -2618
  72. pyxllib/file/xlsxlib.py +3131 -2976
  73. pyxllib/file/xlsyncfile.py +341 -0
  74. pyxllib/prog/__init__.py +5 -5
  75. pyxllib/prog/cachetools.py +64 -0
  76. pyxllib/prog/deprecatedlib.py +233 -233
  77. pyxllib/prog/filelock.py +42 -0
  78. pyxllib/prog/ipyexec.py +253 -253
  79. pyxllib/prog/multiprogs.py +940 -0
  80. pyxllib/prog/newbie.py +451 -444
  81. pyxllib/prog/pupil.py +1197 -1128
  82. pyxllib/prog/sitepackages.py +33 -33
  83. pyxllib/prog/specialist/__init__.py +391 -217
  84. pyxllib/prog/specialist/bc.py +203 -200
  85. pyxllib/prog/specialist/browser.py +497 -488
  86. pyxllib/prog/specialist/common.py +347 -347
  87. pyxllib/prog/specialist/datetime.py +199 -131
  88. pyxllib/prog/specialist/tictoc.py +240 -241
  89. pyxllib/prog/specialist/xllog.py +180 -180
  90. pyxllib/prog/xlosenv.py +108 -101
  91. pyxllib/stdlib/__init__.py +17 -17
  92. pyxllib/stdlib/tablepyxl/__init__.py +10 -10
  93. pyxllib/stdlib/tablepyxl/style.py +303 -303
  94. pyxllib/stdlib/tablepyxl/tablepyxl.py +130 -130
  95. pyxllib/text/__init__.py +8 -8
  96. pyxllib/text/ahocorasick.py +39 -39
  97. pyxllib/text/airscript.js +744 -0
  98. pyxllib/text/charclasslib.py +121 -109
  99. pyxllib/text/jiebalib.py +267 -264
  100. pyxllib/text/jinjalib.py +32 -0
  101. pyxllib/text/jsa_ai_prompt.md +271 -0
  102. pyxllib/text/jscode.py +922 -767
  103. pyxllib/text/latex/__init__.py +158 -158
  104. pyxllib/text/levenshtein.py +303 -303
  105. pyxllib/text/nestenv.py +1215 -1215
  106. pyxllib/text/newbie.py +300 -288
  107. pyxllib/text/pupil/__init__.py +8 -8
  108. pyxllib/text/pupil/common.py +1121 -1095
  109. pyxllib/text/pupil/xlalign.py +326 -326
  110. pyxllib/text/pycode.py +47 -47
  111. pyxllib/text/specialist/__init__.py +8 -8
  112. pyxllib/text/specialist/common.py +112 -112
  113. pyxllib/text/specialist/ptag.py +186 -186
  114. pyxllib/text/spellchecker.py +172 -172
  115. pyxllib/text/templates/echart_base.html +11 -0
  116. pyxllib/text/templates/highlight_code.html +17 -0
  117. pyxllib/text/templates/latex_editor.html +103 -0
  118. pyxllib/text/vbacode.py +17 -17
  119. pyxllib/text/xmllib.py +747 -685
  120. pyxllib/xl.py +42 -38
  121. pyxllib/xlcv.py +17 -17
  122. pyxllib-0.3.200.dist-info/METADATA +48 -0
  123. pyxllib-0.3.200.dist-info/RECORD +126 -0
  124. {pyxllib-0.3.96.dist-info → pyxllib-0.3.200.dist-info}/WHEEL +1 -2
  125. {pyxllib-0.3.96.dist-info → pyxllib-0.3.200.dist-info/licenses}/LICENSE +190 -190
  126. pyxllib/ext/autogui/__init__.py +0 -8
  127. pyxllib-0.3.96.dist-info/METADATA +0 -51
  128. pyxllib-0.3.96.dist-info/RECORD +0 -333
  129. pyxllib-0.3.96.dist-info/top_level.txt +0 -2
  130. pyxlpr/ai/__init__.py +0 -5
  131. pyxlpr/ai/clientlib.py +0 -1281
  132. pyxlpr/ai/specialist.py +0 -286
  133. pyxlpr/ai/torch_app.py +0 -172
  134. pyxlpr/ai/xlpaddle.py +0 -655
  135. pyxlpr/ai/xltorch.py +0 -705
  136. pyxlpr/data/__init__.py +0 -11
  137. pyxlpr/data/coco.py +0 -1325
  138. pyxlpr/data/datacls.py +0 -365
  139. pyxlpr/data/datasets.py +0 -200
  140. pyxlpr/data/gptlib.py +0 -1291
  141. pyxlpr/data/icdar/__init__.py +0 -96
  142. pyxlpr/data/icdar/deteval.py +0 -377
  143. pyxlpr/data/icdar/icdar2013.py +0 -341
  144. pyxlpr/data/icdar/iou.py +0 -340
  145. pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -463
  146. pyxlpr/data/imtextline.py +0 -473
  147. pyxlpr/data/labelme.py +0 -866
  148. pyxlpr/data/removeline.py +0 -179
  149. pyxlpr/data/specialist.py +0 -57
  150. pyxlpr/eval/__init__.py +0 -85
  151. pyxlpr/paddleocr.py +0 -776
  152. pyxlpr/ppocr/__init__.py +0 -15
  153. pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -226
  154. pyxlpr/ppocr/data/__init__.py +0 -135
  155. pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -26
  156. pyxlpr/ppocr/data/imaug/__init__.py +0 -67
  157. pyxlpr/ppocr/data/imaug/copy_paste.py +0 -170
  158. pyxlpr/ppocr/data/imaug/east_process.py +0 -437
  159. pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -244
  160. pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -114
  161. pyxlpr/ppocr/data/imaug/label_ops.py +0 -789
  162. pyxlpr/ppocr/data/imaug/make_border_map.py +0 -184
  163. pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -106
  164. pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -126
  165. pyxlpr/ppocr/data/imaug/operators.py +0 -433
  166. pyxlpr/ppocr/data/imaug/pg_process.py +0 -906
  167. pyxlpr/ppocr/data/imaug/randaugment.py +0 -143
  168. pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -239
  169. pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -533
  170. pyxlpr/ppocr/data/imaug/sast_process.py +0 -777
  171. pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -17
  172. pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -120
  173. pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -168
  174. pyxlpr/ppocr/data/lmdb_dataset.py +0 -115
  175. pyxlpr/ppocr/data/pgnet_dataset.py +0 -104
  176. pyxlpr/ppocr/data/pubtab_dataset.py +0 -107
  177. pyxlpr/ppocr/data/simple_dataset.py +0 -372
  178. pyxlpr/ppocr/losses/__init__.py +0 -61
  179. pyxlpr/ppocr/losses/ace_loss.py +0 -52
  180. pyxlpr/ppocr/losses/basic_loss.py +0 -135
  181. pyxlpr/ppocr/losses/center_loss.py +0 -88
  182. pyxlpr/ppocr/losses/cls_loss.py +0 -30
  183. pyxlpr/ppocr/losses/combined_loss.py +0 -67
  184. pyxlpr/ppocr/losses/det_basic_loss.py +0 -208
  185. pyxlpr/ppocr/losses/det_db_loss.py +0 -80
  186. pyxlpr/ppocr/losses/det_east_loss.py +0 -63
  187. pyxlpr/ppocr/losses/det_pse_loss.py +0 -149
  188. pyxlpr/ppocr/losses/det_sast_loss.py +0 -121
  189. pyxlpr/ppocr/losses/distillation_loss.py +0 -272
  190. pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -140
  191. pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -113
  192. pyxlpr/ppocr/losses/rec_aster_loss.py +0 -99
  193. pyxlpr/ppocr/losses/rec_att_loss.py +0 -39
  194. pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -44
  195. pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -70
  196. pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -30
  197. pyxlpr/ppocr/losses/rec_sar_loss.py +0 -28
  198. pyxlpr/ppocr/losses/rec_srn_loss.py +0 -47
  199. pyxlpr/ppocr/losses/table_att_loss.py +0 -109
  200. pyxlpr/ppocr/metrics/__init__.py +0 -44
  201. pyxlpr/ppocr/metrics/cls_metric.py +0 -45
  202. pyxlpr/ppocr/metrics/det_metric.py +0 -82
  203. pyxlpr/ppocr/metrics/distillation_metric.py +0 -73
  204. pyxlpr/ppocr/metrics/e2e_metric.py +0 -86
  205. pyxlpr/ppocr/metrics/eval_det_iou.py +0 -274
  206. pyxlpr/ppocr/metrics/kie_metric.py +0 -70
  207. pyxlpr/ppocr/metrics/rec_metric.py +0 -75
  208. pyxlpr/ppocr/metrics/table_metric.py +0 -50
  209. pyxlpr/ppocr/modeling/architectures/__init__.py +0 -32
  210. pyxlpr/ppocr/modeling/architectures/base_model.py +0 -88
  211. pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -60
  212. pyxlpr/ppocr/modeling/backbones/__init__.py +0 -54
  213. pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -268
  214. pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -246
  215. pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -285
  216. pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -265
  217. pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -186
  218. pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -138
  219. pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -258
  220. pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -48
  221. pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -210
  222. pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -143
  223. pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -307
  224. pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -286
  225. pyxlpr/ppocr/modeling/heads/__init__.py +0 -54
  226. pyxlpr/ppocr/modeling/heads/cls_head.py +0 -52
  227. pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -118
  228. pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -121
  229. pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -37
  230. pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -128
  231. pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -253
  232. pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -206
  233. pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -163
  234. pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -393
  235. pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -202
  236. pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -88
  237. pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -826
  238. pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -402
  239. pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -280
  240. pyxlpr/ppocr/modeling/heads/self_attention.py +0 -406
  241. pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -246
  242. pyxlpr/ppocr/modeling/necks/__init__.py +0 -32
  243. pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -111
  244. pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -188
  245. pyxlpr/ppocr/modeling/necks/fpn.py +0 -138
  246. pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -314
  247. pyxlpr/ppocr/modeling/necks/rnn.py +0 -92
  248. pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -284
  249. pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -110
  250. pyxlpr/ppocr/modeling/transforms/__init__.py +0 -28
  251. pyxlpr/ppocr/modeling/transforms/stn.py +0 -135
  252. pyxlpr/ppocr/modeling/transforms/tps.py +0 -308
  253. pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -156
  254. pyxlpr/ppocr/optimizer/__init__.py +0 -61
  255. pyxlpr/ppocr/optimizer/learning_rate.py +0 -228
  256. pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -49
  257. pyxlpr/ppocr/optimizer/optimizer.py +0 -160
  258. pyxlpr/ppocr/optimizer/regularizer.py +0 -52
  259. pyxlpr/ppocr/postprocess/__init__.py +0 -55
  260. pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -33
  261. pyxlpr/ppocr/postprocess/db_postprocess.py +0 -234
  262. pyxlpr/ppocr/postprocess/east_postprocess.py +0 -143
  263. pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -200
  264. pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -52
  265. pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -15
  266. pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -29
  267. pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -14
  268. pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -118
  269. pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -654
  270. pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -355
  271. pyxlpr/ppocr/tools/__init__.py +0 -14
  272. pyxlpr/ppocr/tools/eval.py +0 -83
  273. pyxlpr/ppocr/tools/export_center.py +0 -77
  274. pyxlpr/ppocr/tools/export_model.py +0 -129
  275. pyxlpr/ppocr/tools/infer/predict_cls.py +0 -151
  276. pyxlpr/ppocr/tools/infer/predict_det.py +0 -300
  277. pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -169
  278. pyxlpr/ppocr/tools/infer/predict_rec.py +0 -414
  279. pyxlpr/ppocr/tools/infer/predict_system.py +0 -204
  280. pyxlpr/ppocr/tools/infer/utility.py +0 -629
  281. pyxlpr/ppocr/tools/infer_cls.py +0 -83
  282. pyxlpr/ppocr/tools/infer_det.py +0 -134
  283. pyxlpr/ppocr/tools/infer_e2e.py +0 -122
  284. pyxlpr/ppocr/tools/infer_kie.py +0 -153
  285. pyxlpr/ppocr/tools/infer_rec.py +0 -146
  286. pyxlpr/ppocr/tools/infer_table.py +0 -107
  287. pyxlpr/ppocr/tools/program.py +0 -596
  288. pyxlpr/ppocr/tools/test_hubserving.py +0 -117
  289. pyxlpr/ppocr/tools/train.py +0 -163
  290. pyxlpr/ppocr/tools/xlprog.py +0 -748
  291. pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -94
  292. pyxlpr/ppocr/utils/__init__.py +0 -24
  293. pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -117
  294. pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -162
  295. pyxlpr/ppocr/utils/dict/be_dict.txt +0 -145
  296. pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -140
  297. pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -8421
  298. pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -163
  299. pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -167
  300. pyxlpr/ppocr/utils/dict/en_dict.txt +0 -63
  301. pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -136
  302. pyxlpr/ppocr/utils/dict/french_dict.txt +0 -136
  303. pyxlpr/ppocr/utils/dict/german_dict.txt +0 -143
  304. pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -162
  305. pyxlpr/ppocr/utils/dict/it_dict.txt +0 -118
  306. pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -4399
  307. pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -153
  308. pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -3688
  309. pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -185
  310. pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -153
  311. pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -153
  312. pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -96
  313. pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -130
  314. pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -91
  315. pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -134
  316. pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -125
  317. pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -128
  318. pyxlpr/ppocr/utils/dict/table_dict.txt +0 -277
  319. pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -2759
  320. pyxlpr/ppocr/utils/dict/te_dict.txt +0 -151
  321. pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -114
  322. pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -142
  323. pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -137
  324. pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -110
  325. pyxlpr/ppocr/utils/dict90.txt +0 -90
  326. pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -574
  327. pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -83
  328. pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -87
  329. pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -457
  330. pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -592
  331. pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -162
  332. pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -162
  333. pyxlpr/ppocr/utils/en_dict.txt +0 -95
  334. pyxlpr/ppocr/utils/gen_label.py +0 -81
  335. pyxlpr/ppocr/utils/ic15_dict.txt +0 -36
  336. pyxlpr/ppocr/utils/iou.py +0 -54
  337. pyxlpr/ppocr/utils/logging.py +0 -69
  338. pyxlpr/ppocr/utils/network.py +0 -84
  339. pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -6623
  340. pyxlpr/ppocr/utils/profiler.py +0 -110
  341. pyxlpr/ppocr/utils/save_load.py +0 -150
  342. pyxlpr/ppocr/utils/stats.py +0 -72
  343. pyxlpr/ppocr/utils/utility.py +0 -80
  344. pyxlpr/ppstructure/__init__.py +0 -13
  345. pyxlpr/ppstructure/predict_system.py +0 -187
  346. pyxlpr/ppstructure/table/__init__.py +0 -13
  347. pyxlpr/ppstructure/table/eval_table.py +0 -72
  348. pyxlpr/ppstructure/table/matcher.py +0 -192
  349. pyxlpr/ppstructure/table/predict_structure.py +0 -136
  350. pyxlpr/ppstructure/table/predict_table.py +0 -221
  351. pyxlpr/ppstructure/table/table_metric/__init__.py +0 -16
  352. pyxlpr/ppstructure/table/table_metric/parallel.py +0 -51
  353. pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -247
  354. pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -13
  355. pyxlpr/ppstructure/table/tablepyxl/style.py +0 -283
  356. pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -118
  357. pyxlpr/ppstructure/utility.py +0 -71
  358. pyxlpr/xlai.py +0 -10
pyxllib/prog/ipyexec.py CHANGED
@@ -1,253 +1,253 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- # @Author : 陈坤泽
4
- # @Email : 877362867@qq.com
5
- # @Date : 2023/08/26
6
-
7
- # from pyxllib.prog.pupil import check_install_package
8
-
9
- # check_install_package('IPython', 'ipython')
10
-
11
- import os
12
- import sys
13
- from multiprocessing import Process, Pipe
14
- from io import StringIO
15
- import threading
16
-
17
- # from IPython.core.interactiveshell import InteractiveShell
18
-
19
- from pyxllib.prog.pupil import format_exception
20
- from pyxllib.file.specialist import XlPath
21
-
22
- if sys.platform == 'win32':
23
- def timeout(seconds):
24
- def decorator(func):
25
- def wrapper(*args, **kwargs):
26
- result = None
27
- exception = None
28
-
29
- # 定义一个内部函数来运行目标函数
30
- def worker():
31
- nonlocal result, exception
32
- try:
33
- result = func(*args, **kwargs)
34
- except Exception as e:
35
- exception = e
36
-
37
- thread = threading.Thread(target=worker)
38
- thread.start()
39
- thread.join(timeout=seconds)
40
-
41
- if thread.is_alive():
42
- thread.join() # 确保线程结束
43
- raise TimeoutError(f"Function '{func.__name__}' exceeded {seconds} seconds of execution time.")
44
- if exception:
45
- raise exception
46
- return result
47
-
48
- return wrapper
49
-
50
- return decorator
51
-
52
-
53
- class InProcessExecutor:
54
- def __init__(self, base_dir=None):
55
- """ 注意为了应急,这里暂时是很不工程化的写法,一旦初始化这个类,工作目录、stdout、stderr 就被改变了 """
56
- self.base_dir = XlPath(base_dir) if base_dir else None
57
- self.user_ns = {}
58
-
59
- # 保存原始的工作目录、stdout 和 stderr
60
- self._original_cwd = os.getcwd()
61
- self._original_stdout = sys.stdout
62
- self._original_stderr = sys.stderr
63
-
64
- if self.base_dir:
65
- self.base_dir.mkdir(parents=True, exist_ok=True)
66
- os.chdir(self.base_dir)
67
-
68
- def _execute_code(self, code):
69
- response = {}
70
- try:
71
- # 捕获输出
72
- old_stdout, old_stderr = sys.stdout, sys.stderr
73
- redirected_output = StringIO()
74
- sys.stdout, sys.stderr = redirected_output, redirected_output
75
-
76
- # 使用 exec 执行代码
77
- exec(code, self.user_ns)
78
-
79
- # 恢复原始的 stdout 和 stderr
80
- sys.stdout, sys.stderr = old_stdout, old_stderr
81
-
82
- response['output'] = redirected_output.getvalue().strip()
83
-
84
- except Exception as e:
85
- response['error'] = format_exception(e)
86
-
87
- return response
88
-
89
- # @timeout(10) # 先把超时写死了,以后有空再研究怎么加到函数的timeout参数里
90
- def execute(self, code: str, silent=False):
91
- """ 在主进程中执行代码 """
92
- response = self._execute_code(code)
93
-
94
- if not silent and response.get('output'):
95
- print(response['output'])
96
-
97
- if response.get('error'):
98
- print(f"执行错误: {response['error']}")
99
-
100
- return response
101
-
102
- def get_var(self, var_name: str):
103
- """ 获取指定的变量值 """
104
- return self.user_ns.get(var_name, None)
105
-
106
- def set_var(self, var_name: str, value):
107
- """ 设置变量的值 """
108
- self.user_ns[var_name] = value
109
-
110
- def close(self):
111
- """ 恢复原始的工作目录、stdout 和 stderr """
112
- os.chdir(self._original_cwd)
113
- sys.stdout = self._original_stdout
114
- sys.stderr = self._original_stderr
115
-
116
-
117
- class SubprocessExecutor:
118
- """ 子进程版本 """
119
-
120
- def __init__(self, base_dir=None):
121
- """ 初始化执行器并启动子进程 """
122
- self.parent_conn, self.child_conn = Pipe()
123
- self.base_dir = XlPath(base_dir)
124
- self.process = Process(target=self._child_process, args=(self.child_conn, base_dir))
125
- self.process.start()
126
-
127
- def _child_process(self, conn, base_dir):
128
- """ 子进程主循环 """
129
- if base_dir:
130
- os.chdir(base_dir)
131
-
132
- user_ns = {} # 初始化一个空的用户命名空间来替代 InteractiveShell 的 user_ns
133
-
134
- while True:
135
- message = conn.recv() # 从父进程接收消息
136
- if message.get('action') == 'exit':
137
- break
138
- elif message.get('action') == 'execute':
139
- code = message.get('code')
140
- response = self._execute_code(code, user_ns) # 传递user_ns为参数
141
- conn.send(response)
142
- elif message.get('action') == 'get_var':
143
- var_name = message.get('name')
144
- response = {'output': str(user_ns.get(var_name, None))}
145
- conn.send(response)
146
- elif message.get('action') == 'set_var':
147
- var_name = message.get('name')
148
- value = message.get('value')
149
- user_ns[var_name] = value
150
-
151
- def _execute_code(self, code, user_ns):
152
- response = {}
153
- try:
154
- # Capture output
155
- old_stdout, old_stderr = sys.stdout, sys.stderr
156
- redirected_output = StringIO()
157
- sys.stdout, sys.stderr = redirected_output, redirected_output
158
-
159
- # 使用 exec 来执行代码
160
- exec(code, user_ns) # 使用传入的用户命名空间来执行代码
161
-
162
- # Restore original stdout and stderr
163
- sys.stdout, sys.stderr = old_stdout, old_stderr
164
-
165
- response['output'] = redirected_output.getvalue().strip()
166
-
167
- except Exception as e:
168
- response['error'] = format_exception(e)
169
-
170
- return response
171
-
172
- # @timeout(10)
173
- def execute(self, code: str, silent=False):
174
- """ 在子进程中执行代码 """
175
- self.parent_conn.send({'action': 'execute', 'code': code})
176
- response = self.parent_conn.recv()
177
-
178
- # 如果不处于静默模式,则处理响应
179
- if not silent:
180
- if response.get('output'):
181
- print(response['output'], end='')
182
- if response.get('error'):
183
- print(f"Error: {response['error']}")
184
-
185
- return response
186
-
187
- def get_var(self, var_name: str):
188
- """ 获取指定的环境变量值 """
189
- self.parent_conn.send({'action': 'get_var', 'name': var_name})
190
- response = self.parent_conn.recv()
191
- return response['output']
192
-
193
- def set_var(self, var_name: str, value):
194
- """ 设置环境变量的值 """
195
- self.parent_conn.send({'action': 'set_var', 'name': var_name, 'value': value})
196
-
197
- def close(self):
198
- """ 关闭子进程 """
199
- self.parent_conn.send({'action': 'exit'})
200
- self.process.join()
201
-
202
-
203
- if os.getppid() == os.getpid(): # 主进程的时候,另外建立子进程运行更好,也便于调试
204
- AutoProcessExecutor = SubprocessExecutor
205
- else: # 并发跑的时候,只能在每个进程里,不能另外再套进程
206
- AutoProcessExecutor = InProcessExecutor
207
-
208
-
209
- class InteractiveExecutor(SubprocessExecutor):
210
- """ 这个类是比较定制化的,还不算通用工具类
211
-
212
- 但对我来说,暂时会经常用到,所以就写到这里来了
213
- """
214
-
215
- def execute(self, code: str, silent=False):
216
- """ 在子进程中执行代码
217
-
218
- 相比父类,运行前会先记录当前文件清单,运行后会记录新的文件清单,然后对比两个文件清单,找出新的文件
219
- 1. 为了简化问题,暂时只考虑工作目录下的直接文件,不考虑子目录,也不考虑对同名文件可能进行的修改
220
- 2. 假设操作都只会在工作目录里,不会对工作目录外的文件使用绝对路径等手动操作
221
- """
222
- # 1 记录运行前的文件清单
223
- files1 = {f.name for f in self.base_dir.glob_files()}
224
-
225
- # 2 执行代码
226
- self.parent_conn.send({'action': 'execute', 'code': code})
227
- response = self.parent_conn.recv()
228
-
229
- # 3 记录运行后的文件清单
230
- files2 = {f.name for f in self.base_dir.glob_files()}
231
- out_files = list(files2 - files1) # 相减后视为新增的文件
232
- if out_files:
233
- response['out_files'] = out_files
234
-
235
- # 如果不处于静默模式,则处理响应
236
- if not silent:
237
- if response['output']:
238
- print(response['output'])
239
- if 'error' in response:
240
- print(f"Error: {response['error']}")
241
-
242
- return response
243
-
244
-
245
- if __name__ == '__main__':
246
- # 读取指定工作目录里的文件;只在指定工作目录里创建文件
247
- ie = SubprocessExecutor(XlPath.desktop())
248
- ie.execute('with open("a.txt", "r", encoding="utf8") as f: print(f.read())')
249
- # Hello
250
- r = ie.execute('with open("b.txt", "w", encoding="utf8") as f: f.write ("hello123")')
251
- print(r) # {'output': '', 'files': {'b.txt'}}
252
-
253
- print(ie.get_var('test')) # 索引不存在时返回None
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2023/08/26
6
+
7
+ # from pyxllib.prog.pupil import check_install_package
8
+
9
+ # check_install_package('IPython', 'ipython')
10
+
11
+ import os
12
+ import sys
13
+ from multiprocessing import Process, Pipe
14
+ from io import StringIO
15
+ import threading
16
+
17
+ # from IPython.core.interactiveshell import InteractiveShell
18
+
19
+ from pyxllib.prog.pupil import format_exception
20
+ from pyxllib.file.specialist import XlPath
21
+
22
+ if sys.platform == 'win32':
23
+ def timeout(seconds):
24
+ def decorator(func):
25
+ def wrapper(*args, **kwargs):
26
+ result = None
27
+ exception = None
28
+
29
+ # 定义一个内部函数来运行目标函数
30
+ def worker():
31
+ nonlocal result, exception
32
+ try:
33
+ result = func(*args, **kwargs)
34
+ except Exception as e:
35
+ exception = e
36
+
37
+ thread = threading.Thread(target=worker)
38
+ thread.start()
39
+ thread.join(timeout=seconds)
40
+
41
+ if thread.is_alive():
42
+ thread.join() # 确保线程结束
43
+ raise TimeoutError(f"Function '{func.__name__}' exceeded {seconds} seconds of execution time.")
44
+ if exception:
45
+ raise exception
46
+ return result
47
+
48
+ return wrapper
49
+
50
+ return decorator
51
+
52
+
53
+ class InProcessExecutor:
54
+ def __init__(self, base_dir=None):
55
+ """ 注意为了应急,这里暂时是很不工程化的写法,一旦初始化这个类,工作目录、stdout、stderr 就被改变了 """
56
+ self.base_dir = XlPath(base_dir) if base_dir else None
57
+ self.user_ns = {}
58
+
59
+ # 保存原始的工作目录、stdout 和 stderr
60
+ self._original_cwd = os.getcwd()
61
+ self._original_stdout = sys.stdout
62
+ self._original_stderr = sys.stderr
63
+
64
+ if self.base_dir:
65
+ self.base_dir.mkdir(parents=True, exist_ok=True)
66
+ os.chdir(self.base_dir)
67
+
68
+ def _execute_code(self, code):
69
+ response = {}
70
+ try:
71
+ # 捕获输出
72
+ old_stdout, old_stderr = sys.stdout, sys.stderr
73
+ redirected_output = StringIO()
74
+ sys.stdout, sys.stderr = redirected_output, redirected_output
75
+
76
+ # 使用 exec 执行代码
77
+ exec(code, self.user_ns)
78
+
79
+ # 恢复原始的 stdout 和 stderr
80
+ sys.stdout, sys.stderr = old_stdout, old_stderr
81
+
82
+ response['output'] = redirected_output.getvalue().strip()
83
+
84
+ except Exception as e:
85
+ response['error'] = format_exception(e)
86
+
87
+ return response
88
+
89
+ # @timeout(10) # 先把超时写死了,以后有空再研究怎么加到函数的timeout参数里
90
+ def execute(self, code: str, silent=False):
91
+ """ 在主进程中执行代码 """
92
+ response = self._execute_code(code)
93
+
94
+ if not silent and response.get('output'):
95
+ print(response['output'])
96
+
97
+ if response.get('error'):
98
+ print(f"执行错误: {response['error']}")
99
+
100
+ return response
101
+
102
+ def get_var(self, var_name: str):
103
+ """ 获取指定的变量值 """
104
+ return self.user_ns.get(var_name, None)
105
+
106
+ def set_var(self, var_name: str, value):
107
+ """ 设置变量的值 """
108
+ self.user_ns[var_name] = value
109
+
110
+ def close(self):
111
+ """ 恢复原始的工作目录、stdout 和 stderr """
112
+ os.chdir(self._original_cwd)
113
+ sys.stdout = self._original_stdout
114
+ sys.stderr = self._original_stderr
115
+
116
+
117
+ class SubprocessExecutor:
118
+ """ 子进程版本 """
119
+
120
+ def __init__(self, base_dir=None):
121
+ """ 初始化执行器并启动子进程 """
122
+ self.parent_conn, self.child_conn = Pipe()
123
+ self.base_dir = XlPath(base_dir)
124
+ self.process = Process(target=self._child_process, args=(self.child_conn, base_dir))
125
+ self.process.start()
126
+
127
+ def _child_process(self, conn, base_dir):
128
+ """ 子进程主循环 """
129
+ if base_dir:
130
+ os.chdir(base_dir)
131
+
132
+ user_ns = {} # 初始化一个空的用户命名空间来替代 InteractiveShell 的 user_ns
133
+
134
+ while True:
135
+ message = conn.recv() # 从父进程接收消息
136
+ if message.get('action') == 'exit':
137
+ break
138
+ elif message.get('action') == 'execute':
139
+ code = message.get('code')
140
+ response = self._execute_code(code, user_ns) # 传递user_ns为参数
141
+ conn.send(response)
142
+ elif message.get('action') == 'get_var':
143
+ var_name = message.get('name')
144
+ response = {'output': str(user_ns.get(var_name, None))}
145
+ conn.send(response)
146
+ elif message.get('action') == 'set_var':
147
+ var_name = message.get('name')
148
+ value = message.get('value')
149
+ user_ns[var_name] = value
150
+
151
+ def _execute_code(self, code, user_ns):
152
+ response = {}
153
+ try:
154
+ # Capture output
155
+ old_stdout, old_stderr = sys.stdout, sys.stderr
156
+ redirected_output = StringIO()
157
+ sys.stdout, sys.stderr = redirected_output, redirected_output
158
+
159
+ # 使用 exec 来执行代码
160
+ exec(code, user_ns) # 使用传入的用户命名空间来执行代码
161
+
162
+ # Restore original stdout and stderr
163
+ sys.stdout, sys.stderr = old_stdout, old_stderr
164
+
165
+ response['output'] = redirected_output.getvalue().strip()
166
+
167
+ except Exception as e:
168
+ response['error'] = format_exception(e)
169
+
170
+ return response
171
+
172
+ # @timeout(10)
173
+ def execute(self, code: str, silent=False):
174
+ """ 在子进程中执行代码 """
175
+ self.parent_conn.send({'action': 'execute', 'code': code})
176
+ response = self.parent_conn.recv()
177
+
178
+ # 如果不处于静默模式,则处理响应
179
+ if not silent:
180
+ if response.get('output'):
181
+ print(response['output'], end='')
182
+ if response.get('error'):
183
+ print(f"Error: {response['error']}")
184
+
185
+ return response
186
+
187
+ def get_var(self, var_name: str):
188
+ """ 获取指定的环境变量值 """
189
+ self.parent_conn.send({'action': 'get_var', 'name': var_name})
190
+ response = self.parent_conn.recv()
191
+ return response['output']
192
+
193
+ def set_var(self, var_name: str, value):
194
+ """ 设置环境变量的值 """
195
+ self.parent_conn.send({'action': 'set_var', 'name': var_name, 'value': value})
196
+
197
+ def close(self):
198
+ """ 关闭子进程 """
199
+ self.parent_conn.send({'action': 'exit'})
200
+ self.process.join()
201
+
202
+
203
+ if os.getppid() == os.getpid(): # 主进程的时候,另外建立子进程运行更好,也便于调试
204
+ AutoProcessExecutor = SubprocessExecutor
205
+ else: # 并发跑的时候,只能在每个进程里,不能另外再套进程
206
+ AutoProcessExecutor = InProcessExecutor
207
+
208
+
209
+ class InteractiveExecutor(SubprocessExecutor):
210
+ """ 这个类是比较定制化的,还不算通用工具类
211
+
212
+ 但对我来说,暂时会经常用到,所以就写到这里来了
213
+ """
214
+
215
+ def execute(self, code: str, silent=False):
216
+ """ 在子进程中执行代码
217
+
218
+ 相比父类,运行前会先记录当前文件清单,运行后会记录新的文件清单,然后对比两个文件清单,找出新的文件
219
+ 1. 为了简化问题,暂时只考虑工作目录下的直接文件,不考虑子目录,也不考虑对同名文件可能进行的修改
220
+ 2. 假设操作都只会在工作目录里,不会对工作目录外的文件使用绝对路径等手动操作
221
+ """
222
+ # 1 记录运行前的文件清单
223
+ files1 = {f.name for f in self.base_dir.glob_files()}
224
+
225
+ # 2 执行代码
226
+ self.parent_conn.send({'action': 'execute', 'code': code})
227
+ response = self.parent_conn.recv()
228
+
229
+ # 3 记录运行后的文件清单
230
+ files2 = {f.name for f in self.base_dir.glob_files()}
231
+ out_files = list(files2 - files1) # 相减后视为新增的文件
232
+ if out_files:
233
+ response['out_files'] = out_files
234
+
235
+ # 如果不处于静默模式,则处理响应
236
+ if not silent:
237
+ if response['output']:
238
+ print(response['output'])
239
+ if 'error' in response:
240
+ print(f"Error: {response['error']}")
241
+
242
+ return response
243
+
244
+
245
+ if __name__ == '__main__':
246
+ # 读取指定工作目录里的文件;只在指定工作目录里创建文件
247
+ ie = SubprocessExecutor(XlPath.desktop())
248
+ ie.execute('with open("a.txt", "r", encoding="utf8") as f: print(f.read())')
249
+ # Hello
250
+ r = ie.execute('with open("b.txt", "w", encoding="utf8") as f: f.write ("hello123")')
251
+ print(r) # {'output': '', 'files': {'b.txt'}}
252
+
253
+ print(ie.get_var('test')) # 索引不存在时返回None