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