pyxllib 0.3.115__tar.gz → 0.3.116__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.115/pyxllib.egg-info → pyxllib-0.3.116}/PKG-INFO +2 -1
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/pupil.py +7 -4
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/stat.py +1 -1
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/specialist/filelib.py +44 -8
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/xlsxlib.py +14 -2
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/cachetools.py +2 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/pupil.py +102 -12
- {pyxllib-0.3.115 → pyxllib-0.3.116/pyxllib.egg-info}/PKG-INFO +2 -1
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib.egg-info/requires.txt +10 -2
- {pyxllib-0.3.115 → pyxllib-0.3.116}/setup.py +11 -4
- {pyxllib-0.3.115 → pyxllib-0.3.116}/LICENSE +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/MANIFEST.in +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/README.md +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/requirements.txt +0 -0
- {pyxllib-0.3.115 → pyxllib-0.3.116}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyxllib
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.116
|
4
4
|
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
5
|
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
6
|
Author: code4101
|
@@ -15,6 +15,7 @@ Requires-Python: >=3.6
|
|
15
15
|
Description-Content-Type: text/markdown
|
16
16
|
Provides-Extra: xlcv
|
17
17
|
Provides-Extra: xlai
|
18
|
+
Provides-Extra: xlall
|
18
19
|
License-File: LICENSE
|
19
20
|
|
20
21
|
# 1 install
|
@@ -455,9 +455,10 @@ def matchpairs(xs, ys, cmp_func, least_score=sys.float_info.epsilon, *,
|
|
455
455
|
def get_number_width(n):
|
456
456
|
""" 判断数值n的长度
|
457
457
|
|
458
|
+
参考资料:https://jstrieb.github.io/posts/digit-length/
|
459
|
+
|
458
460
|
>>> get_number_width(0)
|
459
|
-
|
460
|
-
AssertionError
|
461
|
+
1
|
461
462
|
>>> get_number_width(9)
|
462
463
|
1
|
463
464
|
>>> get_number_width(10)
|
@@ -465,8 +466,10 @@ def get_number_width(n):
|
|
465
466
|
>>> get_number_width(97)
|
466
467
|
2
|
467
468
|
"""
|
468
|
-
assert n > 0
|
469
|
-
return math.ceil(math.log10(n + 1))
|
469
|
+
# assert n > 0
|
470
|
+
# return math.ceil(math.log10(n + 1))
|
471
|
+
|
472
|
+
return 1 if n == 0 else (math.floor(math.log10(n)) + 1)
|
470
473
|
|
471
474
|
|
472
475
|
class SearchBase:
|
@@ -449,7 +449,7 @@ def print_full_dataframe(df):
|
|
449
449
|
'display.max_colwidth', None):
|
450
450
|
print(df)
|
451
451
|
|
452
|
-
pd.options
|
452
|
+
pd.options.display.max_rows = 60
|
453
453
|
|
454
454
|
|
455
455
|
def custom_fillna(df, default_fill_value='', numeric_fill_value=None, specific_fill=None):
|
@@ -887,6 +887,7 @@ class XlPath(type(pathlib.Path())):
|
|
887
887
|
return 0
|
888
888
|
|
889
889
|
def mtime(self):
|
890
|
+
""" 文件的修改时间 """
|
890
891
|
# windows会带小数,linux使用%Ts只有整数部分。
|
891
892
|
# 这里不用四舍五入,取整数部分就是对应的。
|
892
893
|
return int(os.stat(self).st_mtime)
|
@@ -1287,6 +1288,7 @@ class XlPath(type(pathlib.Path())):
|
|
1287
1288
|
|
1288
1289
|
def write_auto(self, data, *args, if_exists=None, **kwargs):
|
1289
1290
|
""" 根据文件后缀自动识别写入函数 """
|
1291
|
+
self.parent.mkdir(exist_ok=True, parents=True)
|
1290
1292
|
mode = self.suffix.lower()[1:]
|
1291
1293
|
write_func = getattr(self, 'write_' + mode, None)
|
1292
1294
|
if self.exist_preprcs(if_exists):
|
@@ -2283,8 +2285,11 @@ class PathGroups(Groups):
|
|
2283
2285
|
return ls
|
2284
2286
|
|
2285
2287
|
|
2286
|
-
def cache_file(file, make_data_func: Callable[[], Any] = None, *,
|
2287
|
-
|
2288
|
+
def cache_file(file, make_data_func: Callable[[], Any] = None, *,
|
2289
|
+
mode='read_first',
|
2290
|
+
cache_time=None,
|
2291
|
+
**kwargs):
|
2292
|
+
""" 能将局部函数功能结果缓存进文件的功能
|
2288
2293
|
|
2289
2294
|
输入的文件file如果存在则直接读取内容;
|
2290
2295
|
否则用make_data_func生成,并且备份一个file文件
|
@@ -2292,20 +2297,51 @@ def cache_file(file, make_data_func: Callable[[], Any] = None, *, reset=False, *
|
|
2292
2297
|
:param file: 需要缓存的文件路径
|
2293
2298
|
:param make_data_func: 如果文件不存在,则需要生成一份,要提供数据生成函数
|
2294
2299
|
cache_file可以当装饰器用,此时不用显式指定该参数
|
2295
|
-
:param
|
2300
|
+
:param mode:
|
2301
|
+
read_first(默认): 优先尝试从已有文件读取
|
2302
|
+
generate_first: 函数生成优先
|
2303
|
+
:param cache_time: 文件缓存时间,单位为秒,默认为None,表示始终使用缓存文件
|
2304
|
+
如果设置60,表示超过60秒后,需要重新优先从函数获得更新内容
|
2296
2305
|
:param kwargs: 可以传递read、write支持的扩展参数
|
2297
|
-
:return:
|
2306
|
+
:return: 读取到的数据
|
2298
2307
|
"""
|
2308
|
+
from datetime import datetime, timedelta
|
2309
|
+
from pyxllib.prog.pupil import format_exception
|
2299
2310
|
|
2300
2311
|
def decorator(func):
|
2301
2312
|
def wrapper(*args2, **kwargs2):
|
2313
|
+
|
2302
2314
|
f = XlPath.init(file, XlPath.tempdir())
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2315
|
+
|
2316
|
+
# 1 优先看是不是需要先从文件读取数据
|
2317
|
+
if mode == 'read_first' and f.is_file():
|
2318
|
+
if cache_time is None:
|
2319
|
+
return f.read_auto(**kwargs)
|
2320
|
+
|
2321
|
+
current_time = datetime.now()
|
2322
|
+
last_modified = datetime.fromtimestamp(f.mtime()) # 获取文件的修改时间
|
2323
|
+
if not isinstance(cache_time, timedelta):
|
2324
|
+
cache_time2 = timedelta(seconds=cache_time)
|
2325
|
+
else:
|
2326
|
+
cache_time2 = cache_time
|
2327
|
+
|
2328
|
+
if cache_time is None or (current_time - last_modified <= cache_time2):
|
2329
|
+
return f.read_auto(**kwargs)
|
2330
|
+
|
2331
|
+
# 2 如果需要重新生成数据,且没有已存在的保底文件
|
2332
|
+
if not f.is_file():
|
2306
2333
|
data = func(*args2, **kwargs2)
|
2307
2334
|
f.write_auto(data, **kwargs)
|
2308
|
-
|
2335
|
+
return data
|
2336
|
+
|
2337
|
+
# 3 需要重新生成,但是有保底文件
|
2338
|
+
try:
|
2339
|
+
data = func(*args2, **kwargs2)
|
2340
|
+
f.write_auto(data, **kwargs)
|
2341
|
+
return data
|
2342
|
+
except Exception as e:
|
2343
|
+
print(format_exception(e))
|
2344
|
+
return f.read_auto(**kwargs)
|
2309
2345
|
|
2310
2346
|
return wrapper
|
2311
2347
|
|
@@ -36,6 +36,7 @@ from openpyxl import Workbook
|
|
36
36
|
from openpyxl.cell.cell import MergedCell
|
37
37
|
from openpyxl.styles import Font, Alignment
|
38
38
|
from openpyxl.utils.cell import get_column_letter, column_index_from_string
|
39
|
+
import openpyxl.worksheet.formula
|
39
40
|
import pandas as pd
|
40
41
|
|
41
42
|
try:
|
@@ -518,7 +519,7 @@ def is_string_type(value):
|
|
518
519
|
try:
|
519
520
|
pd.to_datetime(value, errors='raise')
|
520
521
|
return False
|
521
|
-
except (ValueError, TypeError, OverflowError):
|
522
|
+
except (ValueError, TypeError, OverflowError, AttributeError):
|
522
523
|
pass
|
523
524
|
|
524
525
|
# 检查是否为浮点数类型
|
@@ -573,10 +574,18 @@ class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCel
|
|
573
574
|
|
574
575
|
TODO 这个函数还是可以看看能不能有更好的实现、提速
|
575
576
|
"""
|
577
|
+
|
578
|
+
def try_offset(x, y):
|
579
|
+
try:
|
580
|
+
return isinstance(self.offset(x, y), MergedCell)
|
581
|
+
except ValueError:
|
582
|
+
# 有可能会越界:ValueError: Row numbers must be between 1 and 1048576
|
583
|
+
return False
|
584
|
+
|
576
585
|
_type, status = 0, {}
|
577
586
|
if isinstance(self, MergedCell):
|
578
587
|
_type = 1
|
579
|
-
elif
|
588
|
+
elif try_offset(1, 0) or try_offset(0, 1):
|
580
589
|
# 这里只能判断可能是合并单元格,具体是不是合并单元格,还要
|
581
590
|
rng = self.in_range()
|
582
591
|
status['rng'] = rng
|
@@ -761,7 +770,10 @@ class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCel
|
|
761
770
|
注意,遇到公式是很难计算处理的,大概率只能保持原公式显示
|
762
771
|
因为日期用的比较多,需要时常获得真实的渲染效果,所以这里封装一个接口
|
763
772
|
"""
|
773
|
+
|
764
774
|
x = self.value
|
775
|
+
if isinstance(x, openpyxl.worksheet.formula.ArrayFormula): # 数组公式要特别渲染
|
776
|
+
return x.text
|
765
777
|
xl_fmt = self.get_number_format()
|
766
778
|
return xl_render_value(x, xl_fmt)
|
767
779
|
|
@@ -24,6 +24,8 @@ from cached_property import cached_property_with_ttl # 限时缓存,单位秒
|
|
24
24
|
from cached_property import threaded_cached_property_with_ttl # 线程 + 限时
|
25
25
|
|
26
26
|
|
27
|
+
# todo 240609周日21:19 https://github.com/awolverp/cachebox,据说这个缓存库速度更快的多
|
28
|
+
|
27
29
|
# 进一步封装的更通用、自己常用的装饰器
|
28
30
|
|
29
31
|
def xlcache(maxsize=128, *, ttl=None, lock=None, property=False):
|
@@ -555,6 +555,9 @@ class Timeout:
|
|
555
555
|
return wrapper
|
556
556
|
|
557
557
|
def __enter__(self):
|
558
|
+
if self.seconds == 0: # 可以设置0来关闭超时功能
|
559
|
+
return
|
560
|
+
|
558
561
|
def overtime(signum, frame):
|
559
562
|
raise TimeoutError(f'with 上下文代码块运行超时 > [{self.seconds} 秒]')
|
560
563
|
|
@@ -568,6 +571,9 @@ class Timeout:
|
|
568
571
|
self.alarm.start()
|
569
572
|
|
570
573
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
574
|
+
if self.seconds == 0:
|
575
|
+
return
|
576
|
+
|
571
577
|
# with已经运行完了,马上关闭警告器
|
572
578
|
self.alarm.cancel()
|
573
579
|
|
@@ -973,30 +979,78 @@ class OutputLogger(logging.Logger):
|
|
973
979
|
self.print(msg)
|
974
980
|
|
975
981
|
|
982
|
+
class ProcessWorker:
|
983
|
+
""" 代表一个单独的工作进程 """
|
984
|
+
|
985
|
+
def __init__(self, name, process, port=None, locations=None,
|
986
|
+
raw_cmd=None):
|
987
|
+
"""
|
988
|
+
|
989
|
+
:param name: 进程昵称
|
990
|
+
:param process: 进程对象
|
991
|
+
:param port: 是否有执行所在端口
|
992
|
+
:param locations: 是否有url地址映射,一般用于nginx等配置
|
993
|
+
"""
|
994
|
+
self.name = name
|
995
|
+
self.process = process
|
996
|
+
self.port = port
|
997
|
+
self.locations = locations
|
998
|
+
self.raw_cmd = raw_cmd
|
999
|
+
|
1000
|
+
def terminate(self):
|
1001
|
+
""" 比较优雅结束进程的方法 """
|
1002
|
+
if self.process is not None:
|
1003
|
+
self.process.terminate()
|
1004
|
+
|
1005
|
+
def kill(self):
|
1006
|
+
""" 有时候需要强硬的kill方法来结束进程 """
|
1007
|
+
if self.process is not None:
|
1008
|
+
self.process.kill()
|
1009
|
+
|
1010
|
+
|
976
1011
|
class MultiProcessLauncher:
|
977
1012
|
""" 注意这个类暂时只有linux能使用 """
|
978
1013
|
|
979
1014
|
def __init__(self):
|
980
1015
|
self.workers = []
|
981
1016
|
|
982
|
-
def add_process_cmd(self,
|
1017
|
+
def add_process_cmd(self,
|
1018
|
+
cmd,
|
1019
|
+
name=None,
|
1020
|
+
shell=False,
|
1021
|
+
**kwargs):
|
1022
|
+
"""
|
1023
|
+
|
1024
|
+
:param shell: 默认直接跟系统交互,此时cmd应该输入数组格式
|
1025
|
+
如果shell=True,则启用shell进行交互操作,这种情况会更适合管道等模式的处理,此时cmd应该输入字符串格式
|
1026
|
+
|
1027
|
+
"""
|
983
1028
|
if name is None:
|
984
|
-
|
1029
|
+
cmd2 = cmd.split() if isinstance(cmd, str) else cmd
|
1030
|
+
name = cmd2[0]
|
985
1031
|
|
986
|
-
|
987
|
-
|
988
|
-
|
1032
|
+
proc = subprocess.Popen(cmd,
|
1033
|
+
shell=shell,
|
1034
|
+
preexec_fn=self._set_pdeathsig())
|
1035
|
+
|
1036
|
+
worker = ProcessWorker(name, proc, raw_cmd=cmd, **kwargs)
|
989
1037
|
self.workers.append(worker)
|
1038
|
+
return worker
|
990
1039
|
|
991
|
-
def add_process_python_module(self, module, args='', name=None):
|
1040
|
+
def add_process_python_module(self, module, args='', name=None, shell=False):
|
992
1041
|
""" 添加并启动一个Python模块作为后台进程。
|
993
1042
|
|
994
1043
|
:param module: 要执行的Python模块名(python -m 后面的部分)
|
995
|
-
:param args: 模块的参数
|
1044
|
+
:param str|list args: 模块的参数
|
996
1045
|
:param name: 进程的名称,默认为模块名
|
997
1046
|
"""
|
998
|
-
cmd = f'{sys.executable} -m {module}
|
999
|
-
|
1047
|
+
cmd = [f'{sys.executable}', '-m', f'{module}']
|
1048
|
+
if isinstance(args, str):
|
1049
|
+
cmd.append(args)
|
1050
|
+
else:
|
1051
|
+
cmd += list(args)
|
1052
|
+
|
1053
|
+
return self.add_process_cmd(cmd, name, shell=shell)
|
1000
1054
|
|
1001
1055
|
def stop_all(self):
|
1002
1056
|
""" 停止所有后台进程 """
|
@@ -1004,14 +1058,48 @@ class MultiProcessLauncher:
|
|
1004
1058
|
worker.process.terminate()
|
1005
1059
|
self.workers = []
|
1006
1060
|
|
1007
|
-
def _set_pdeathsig(self, sig=
|
1061
|
+
def _set_pdeathsig(self, sig=None):
|
1008
1062
|
""" 在主服务退出时,这些进程也会全部自动关闭 """
|
1009
1063
|
|
1010
1064
|
def callable():
|
1065
|
+
import signal
|
1066
|
+
sig2 = signal.SIGTERM if sig is None else sig
|
1011
1067
|
libc = ctypes.CDLL("libc.so.6")
|
1012
|
-
return libc.prctl(1,
|
1068
|
+
return libc.prctl(1, sig2)
|
1069
|
+
|
1070
|
+
if sys.platform == 'win32':
|
1071
|
+
# windows系统暂设为空
|
1072
|
+
return None
|
1073
|
+
else:
|
1074
|
+
return callable
|
1013
1075
|
|
1014
|
-
|
1076
|
+
def run_endless(self):
|
1077
|
+
""" 一直运行,直到用户输入kill命令
|
1078
|
+
|
1079
|
+
poll:
|
1080
|
+
如果进程仍在运行,poll()方法返回None。
|
1081
|
+
如果进程已经结束,poll()方法返回进程的退出码(exit code)。
|
1082
|
+
如果进程正常结束,退出码通常为0。
|
1083
|
+
如果进程异常结束,退出码通常是一个非零值,表示异常的类型或错误码。
|
1084
|
+
"""
|
1085
|
+
import pandas as pd
|
1086
|
+
from pyxllib.algo.stat import print_full_dataframe
|
1087
|
+
|
1088
|
+
while True:
|
1089
|
+
cmd = input('>>>')
|
1090
|
+
if cmd == 'kill':
|
1091
|
+
self.stop_all()
|
1092
|
+
break
|
1093
|
+
elif cmd == 'count':
|
1094
|
+
# 需要实际检查现有进程
|
1095
|
+
m = sum([1 for worker in self.workers if worker.process.poll() is None])
|
1096
|
+
print(f'有{m}个进程正在运行')
|
1097
|
+
elif cmd == 'list': # 列出所有进程(转df查看)
|
1098
|
+
ls = []
|
1099
|
+
for worker in self.workers:
|
1100
|
+
ls.append([worker.name, worker.process.pid, worker.process.poll(), worker.raw_cmd])
|
1101
|
+
df = pd.DataFrame(ls, columns=['name', 'pid', 'poll', 'args'])
|
1102
|
+
print_full_dataframe(df)
|
1015
1103
|
|
1016
1104
|
|
1017
1105
|
def xlmd5(content):
|
@@ -1096,6 +1184,8 @@ def safe_div(a, b):
|
|
1096
1184
|
|
1097
1185
|
def inplace_decorate(parent, func_name, wrapper):
|
1098
1186
|
""" 将指定的函数替换为装饰器版本
|
1187
|
+
允许在运行时动态地将一个函数或方法替换为其装饰版本。通常用于添加日志、性能测试、事务处理等。
|
1188
|
+
(既然可以写成装饰版本,相当于其实要完全替换成另外的函数也是可以的)
|
1099
1189
|
|
1100
1190
|
当然,因为py一切皆对象,这里处理的不是函数,而是其他变量等对象也是可以的
|
1101
1191
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyxllib
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.116
|
4
4
|
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
5
|
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
6
|
Author: code4101
|
@@ -15,6 +15,7 @@ Requires-Python: >=3.6
|
|
15
15
|
Description-Content-Type: text/markdown
|
16
16
|
Provides-Extra: xlcv
|
17
17
|
Provides-Extra: xlai
|
18
|
+
Provides-Extra: xlall
|
18
19
|
License-File: LICENSE
|
19
20
|
|
20
21
|
# 1 install
|
@@ -21,12 +21,20 @@ Jinja2
|
|
21
21
|
pandas>=0.23.4
|
22
22
|
|
23
23
|
[xlai]
|
24
|
-
|
24
|
+
opsdroid-get-image-size
|
25
25
|
pillow
|
26
|
+
pynvml
|
27
|
+
xlcocotools
|
28
|
+
visdom
|
26
29
|
opencv-python
|
30
|
+
|
31
|
+
[xlall]
|
27
32
|
opsdroid-get-image-size
|
28
|
-
|
33
|
+
pillow
|
29
34
|
pynvml
|
35
|
+
xlcocotools
|
36
|
+
visdom
|
37
|
+
opencv-python
|
30
38
|
|
31
39
|
[xlcv]
|
32
40
|
opsdroid-get-image-size
|
@@ -28,18 +28,23 @@ xlcocotools
|
|
28
28
|
|
29
29
|
# 全量的依赖,自用
|
30
30
|
xlall = """
|
31
|
+
flask
|
32
|
+
flask-cors
|
31
33
|
xlrd
|
32
|
-
|
33
|
-
|
34
|
+
flask-wtf
|
35
|
+
flask-restful
|
34
36
|
zhconv
|
35
37
|
sentencepiece
|
38
|
+
ujson
|
39
|
+
html2text
|
40
|
+
flask-jwt-extended
|
36
41
|
"""
|
37
42
|
|
38
43
|
_dir = Path(__file__).parent
|
39
44
|
|
40
45
|
setup(
|
41
46
|
name='pyxllib', # pip 安装时用的名字
|
42
|
-
version='0.3.
|
47
|
+
version='0.3.116', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
43
48
|
author='code4101',
|
44
49
|
author_email='877362867@qq.com',
|
45
50
|
url='https://github.com/XLPRUtils/pyxllib',
|
@@ -67,5 +72,7 @@ setup(
|
|
67
72
|
# ①静态版:pip install pyxllib[xlcv]
|
68
73
|
# ②开发版:python setup.py develop easy_install pyxllib[xlcv]
|
69
74
|
extras_require={'xlcv': '\n'.join(set((xlcv).splitlines())),
|
70
|
-
'xlai': '\n'.join(set((xlcv + xlai).splitlines()))
|
75
|
+
'xlai': '\n'.join(set((xlcv + xlai).splitlines())),
|
76
|
+
'xlall': '\n'.join(set((xlcv + xlai).splitlines())),
|
77
|
+
},
|
71
78
|
)
|
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
|