pyxllib 0.3.100__tar.gz → 0.3.101__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.
- {pyxllib-0.3.100/pyxllib.egg-info → pyxllib-0.3.101}/PKG-INFO +1 -1
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/robustprocfile.py +128 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/multiprocs.py +47 -27
- {pyxllib-0.3.100 → pyxllib-0.3.101/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.100 → pyxllib-0.3.101}/setup.py +1 -1
- {pyxllib-0.3.100 → pyxllib-0.3.101}/LICENSE +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/MANIFEST.in +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/README.md +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib.egg-info/requires.txt +4 -4
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/requirements.txt +0 -0
- {pyxllib-0.3.100 → pyxllib-0.3.101}/setup.cfg +0 -0
@@ -13,6 +13,9 @@
|
|
13
13
|
from collections import defaultdict, Counter
|
14
14
|
import datetime
|
15
15
|
import re
|
16
|
+
import json
|
17
|
+
|
18
|
+
from tqdm import tqdm
|
16
19
|
|
17
20
|
from pyxllib.prog.pupil import check_counter, tprint
|
18
21
|
from pyxllib.file.specialist import XlPath, refinepath
|
@@ -189,3 +192,128 @@ def remove_repeat_base(infile,
|
|
189
192
|
new_len = len(data2)
|
190
193
|
print(f'去重后剩余 {new_len}/{src_len} ≈ {new_len / src_len:.2%} 的数据')
|
191
194
|
return data2
|
195
|
+
|
196
|
+
|
197
|
+
class CacheJsonlFile:
|
198
|
+
""" 流式存储文件 """
|
199
|
+
|
200
|
+
def __init__(self, parent_dir, prefix_stem, tag, batch_size=2000):
|
201
|
+
self.parent_dir = parent_dir
|
202
|
+
self.prefix_stem = prefix_stem
|
203
|
+
self.tag = tag
|
204
|
+
self.cache_text_lines = []
|
205
|
+
self.batch_size = batch_size
|
206
|
+
|
207
|
+
# 缓存时的文件名
|
208
|
+
self.cache_file = XlPath(parent_dir) / f'{prefix_stem}_{tag}.cache.jsonl'
|
209
|
+
self.total = 0
|
210
|
+
|
211
|
+
def append(self, data):
|
212
|
+
for x in data:
|
213
|
+
if isinstance(x, str):
|
214
|
+
self.cache_text_lines.append(x)
|
215
|
+
else:
|
216
|
+
self.cache_text_lines.append(json.dumps(x, ensure_ascii=False))
|
217
|
+
if len(self.cache_text_lines) >= self.batch_size:
|
218
|
+
self.flush()
|
219
|
+
|
220
|
+
def flush(self):
|
221
|
+
""" 刷新,将当前缓存写入文件 """
|
222
|
+
if self.cache_text_lines:
|
223
|
+
if self.total == 0: # 第一次写入时,删除旧缓存文件
|
224
|
+
self.cache_file.delete()
|
225
|
+
|
226
|
+
self.total += len(self.cache_text_lines)
|
227
|
+
self.parent_dir.mkdir(exist_ok=True, parents=True)
|
228
|
+
with open(self.cache_file, 'a', encoding='utf8') as f:
|
229
|
+
f.write('\n'.join(self.cache_text_lines) + '\n')
|
230
|
+
self.cache_text_lines = []
|
231
|
+
|
232
|
+
def save_all(self):
|
233
|
+
""" 最终存储的文件名 """
|
234
|
+
self.flush()
|
235
|
+
dst_file = self.cache_file.with_stem(f'{self.prefix_stem}_{self.tag}{self.total}_{get_timestamp()}')
|
236
|
+
self.cache_file.rename(dst_file)
|
237
|
+
|
238
|
+
|
239
|
+
class CacheJsonlGroupFiles:
|
240
|
+
def __init__(self, parent_dir, prefix_stem, tag, group_func=None, batch_size=2000):
|
241
|
+
self.files = {}
|
242
|
+
|
243
|
+
self.parent_dir = parent_dir
|
244
|
+
self.prefix_stem = prefix_stem
|
245
|
+
self.tag = tag
|
246
|
+
self.group_func = group_func
|
247
|
+
self.batch_size = batch_size
|
248
|
+
|
249
|
+
def append(self, data):
|
250
|
+
groups = defaultdict(list)
|
251
|
+
if self.group_func:
|
252
|
+
for x in data:
|
253
|
+
groups[self.group_func(x)].append(x)
|
254
|
+
else:
|
255
|
+
groups[''] = data
|
256
|
+
|
257
|
+
for k, v in groups.items():
|
258
|
+
if k not in self.files:
|
259
|
+
subtag = f'{k}_{self.tag}' if k not in ('', None) else self.tag
|
260
|
+
self.files[k] = CacheJsonlFile(self.parent_dir, self.prefix_stem, subtag, self.batch_size)
|
261
|
+
self.files[k].append(v)
|
262
|
+
|
263
|
+
def save_all(self):
|
264
|
+
for file in self.files.values():
|
265
|
+
file.save_all()
|
266
|
+
|
267
|
+
|
268
|
+
def process_single_file(root,
|
269
|
+
infile,
|
270
|
+
tag,
|
271
|
+
row_func,
|
272
|
+
*,
|
273
|
+
cur_idx=1,
|
274
|
+
total=None,
|
275
|
+
if_exists='skip',
|
276
|
+
group_func=None,
|
277
|
+
batch_size=2000):
|
278
|
+
# 1 缓存路径
|
279
|
+
srcdir = XlPath(root)
|
280
|
+
infile = XlPath.init(infile, root=srcdir)
|
281
|
+
relpath = infile.relative_to(srcdir)
|
282
|
+
|
283
|
+
dstdir = srcdir.parent / f'{srcdir.name}_{tag}' / relpath.parent
|
284
|
+
errdir = srcdir.parent / f'{srcdir.name}_{tag}error' / relpath.parent
|
285
|
+
|
286
|
+
# 2 判断是不是已处理过的文件
|
287
|
+
stem = re.split(r'\d+_\d{14}', relpath.stem)[0]
|
288
|
+
dstfiles = list(dstdir.glob_files(f'{stem}*'))
|
289
|
+
errfiles = list(errdir.glob_files(f'{stem}*'))
|
290
|
+
# cache文件不算,不用管
|
291
|
+
check_files = [f for f in (dstfiles + errfiles) if not f.name.endswith('.cache.jsonl')]
|
292
|
+
if check_files:
|
293
|
+
if if_exists == 'skip':
|
294
|
+
return
|
295
|
+
elif if_exists == 'overwrite':
|
296
|
+
for f in check_files:
|
297
|
+
f.delete()
|
298
|
+
elif if_exists == 'error':
|
299
|
+
raise FileExistsError(f'目标文件已存在:{check_files}')
|
300
|
+
else:
|
301
|
+
return
|
302
|
+
|
303
|
+
# 3 处理数据
|
304
|
+
dstcgf = CacheJsonlGroupFiles(dstdir, infile.stem, tag, group_func, batch_size)
|
305
|
+
errcgf = CacheJsonlGroupFiles(errdir, infile.stem, tag + 'error', batch_size=batch_size)
|
306
|
+
|
307
|
+
for line in tqdm(infile.yield_line(), disable=total):
|
308
|
+
row = row_func(line)
|
309
|
+
if row:
|
310
|
+
dstcgf.append([row])
|
311
|
+
else:
|
312
|
+
errcgf.append([line])
|
313
|
+
|
314
|
+
dstcgf.save_all()
|
315
|
+
errcgf.save_all()
|
316
|
+
if total:
|
317
|
+
tprint(f'处理第{cur_idx}/{total}个文件:{infile.name} ==> {tag}')
|
318
|
+
else:
|
319
|
+
tprint(f'处理文件:{infile.name} ==> {tag}')
|
@@ -10,8 +10,7 @@ import os
|
|
10
10
|
import subprocess
|
11
11
|
import sys
|
12
12
|
import time
|
13
|
-
|
14
|
-
import fire
|
13
|
+
import atexit
|
15
14
|
|
16
15
|
from pyxllib.prog.pupil import tprint
|
17
16
|
|
@@ -19,19 +18,38 @@ from pyxllib.prog.pupil import tprint
|
|
19
18
|
class MultiProcessLauncher:
|
20
19
|
def __init__(self):
|
21
20
|
self.workers = []
|
21
|
+
atexit.register(self.cleanup) # 在程序退出时注册清理方法
|
22
22
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
23
|
+
def _add_posix_process(self, cmd):
|
24
|
+
import ctypes
|
25
|
+
import signal
|
26
|
+
|
27
|
+
def _set_pdeathsig(sig=signal.SIGTERM):
|
28
|
+
""" Help function to ensure once parent process exits,
|
29
|
+
its children processes will automatically die on Linux.
|
30
|
+
"""
|
31
|
+
|
32
|
+
def callable():
|
33
|
+
libc = ctypes.CDLL("libc.so.6")
|
34
|
+
return libc.prctl(1, sig)
|
26
35
|
|
27
|
-
|
28
|
-
name = cmd.split()[0]
|
36
|
+
return callable
|
29
37
|
|
30
|
-
|
31
|
-
|
38
|
+
preexec_fn = _set_pdeathsig(signal.SIGTERM)
|
39
|
+
p = subprocess.Popen(cmd.split(), preexec_fn=preexec_fn)
|
40
|
+
|
41
|
+
return p
|
42
|
+
|
43
|
+
def add_process(self, cmd, name=None, **kwargs):
|
44
|
+
# 240329周五16:57,最新测试,好像不捕捉,主进程结束后子进程也是会自动结束的。跟我以前了解的机制似乎有点不一样。
|
45
|
+
# 但加着也算双重保险,不会出错吧。
|
46
|
+
if os.name == 'posix':
|
47
|
+
p = self._add_posix_process(cmd)
|
48
|
+
else:
|
49
|
+
p = subprocess.Popen(cmd)
|
32
50
|
|
33
51
|
worker = {
|
34
|
-
'name': name,
|
52
|
+
'name': cmd.split()[0] if name is None else name,
|
35
53
|
'process': p,
|
36
54
|
'cmd': cmd,
|
37
55
|
'status': 'running' # 初始状态设为running
|
@@ -40,6 +58,15 @@ class MultiProcessLauncher:
|
|
40
58
|
|
41
59
|
self.workers.append(worker)
|
42
60
|
|
61
|
+
def add_cur_py_process(self, cmd, name=None, **kwargs):
|
62
|
+
""" 添加当前python环境下的进程 """
|
63
|
+
if isinstance(cmd, str):
|
64
|
+
cmd = f'"{sys.executable}" {cmd}'
|
65
|
+
elif isinstance(cmd, list):
|
66
|
+
cmd = [sys.executable] + cmd
|
67
|
+
|
68
|
+
self.add_process(cmd, name, **kwargs)
|
69
|
+
|
43
70
|
def manage(self):
|
44
71
|
""" 进入交互管理界面 """
|
45
72
|
|
@@ -82,20 +109,13 @@ class MultiProcessLauncher:
|
|
82
109
|
time.sleep(seconds)
|
83
110
|
seconds = min(seconds + 1, 10)
|
84
111
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
fire.Fire()
|
96
|
-
else:
|
97
|
-
launcher = MultiProcessLauncher()
|
98
|
-
launcher.add_process(f"{sys.executable} multiprocs.py trial_func 5", name="a")
|
99
|
-
launcher.add_process(f"{sys.executable} multiprocs.py trial_func 10", name="b")
|
100
|
-
launcher.add_process(f"{sys.executable} multiprocs.py trial_func 15", name="c")
|
101
|
-
launcher.wait_all()
|
112
|
+
def cleanup(self):
|
113
|
+
""" 在退出时终止所有子进程 """
|
114
|
+
for worker in self.workers:
|
115
|
+
process = worker['process']
|
116
|
+
if process.poll() is None: # 如果进程还在运行
|
117
|
+
try:
|
118
|
+
process.terminate() # 尝试终止进程
|
119
|
+
process.wait() # 等待进程结束
|
120
|
+
except Exception as e:
|
121
|
+
print(f"Error terminating process {worker['name']}: {e}")
|
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
|
|
30
30
|
|
31
31
|
setup(
|
32
32
|
name='pyxllib', # pip 安装时用的名字
|
33
|
-
version='0.3.
|
33
|
+
version='0.3.101', # 当前版本,每次更新上传到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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
@@ -21,14 +21,14 @@ Jinja2
|
|
21
21
|
pandas>=0.23.4
|
22
22
|
|
23
23
|
[xlai]
|
24
|
-
visdom
|
25
|
-
pynvml
|
26
|
-
opsdroid-get-image-size
|
27
24
|
xlcocotools
|
25
|
+
opsdroid-get-image-size
|
26
|
+
pynvml
|
28
27
|
opencv-python
|
28
|
+
visdom
|
29
29
|
pillow
|
30
30
|
|
31
31
|
[xlcv]
|
32
|
-
opsdroid-get-image-size
|
33
32
|
pillow
|
34
33
|
opencv-python
|
34
|
+
opsdroid-get-image-size
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|