pyxllib 0.3.109__tar.gz → 0.3.110__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.109/pyxllib.egg-info → pyxllib-0.3.110}/PKG-INFO +1 -1
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/pupil.py +29 -14
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/pglib.py +17 -17
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/sqlite.py +22 -3
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/kq5034lib.py +1 -1
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/specialist/filelib.py +2 -2
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/bc.py +5 -2
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/browser.py +8 -2
- {pyxllib-0.3.109 → pyxllib-0.3.110/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.109 → pyxllib-0.3.110}/setup.py +1 -1
- {pyxllib-0.3.109 → pyxllib-0.3.110}/LICENSE +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/MANIFEST.in +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/README.md +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib.egg-info/requires.txt +3 -3
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/requirements.txt +0 -0
- {pyxllib-0.3.109 → pyxllib-0.3.110}/setup.cfg +0 -0
@@ -6,8 +6,10 @@
|
|
6
6
|
|
7
7
|
from bisect import bisect_right
|
8
8
|
from collections import defaultdict, Counter
|
9
|
+
import datetime
|
9
10
|
import math
|
10
11
|
import re
|
12
|
+
from statistics import quantiles
|
11
13
|
import sys
|
12
14
|
import textwrap
|
13
15
|
|
@@ -194,7 +196,8 @@ class ValuesStat2:
|
|
194
196
|
def __len__(self):
|
195
197
|
return self.n
|
196
198
|
|
197
|
-
def
|
199
|
+
def _summary(self, unit=None, precision=4, percentile_count=5):
|
200
|
+
""" 返回字典结构的总结 """
|
198
201
|
""" 文本汇总性的报告
|
199
202
|
|
200
203
|
:param percentile_count: 包括两个极值端点的切分点数,
|
@@ -204,8 +207,6 @@ class ValuesStat2:
|
|
204
207
|
:param unit: 展示数值时使用的单位
|
205
208
|
:param precision: 展示数值时的精度
|
206
209
|
"""
|
207
|
-
import datetime
|
208
|
-
from statistics import quantiles
|
209
210
|
|
210
211
|
# 1 各种细分的格式化方法
|
211
212
|
def fmt0(v):
|
@@ -238,19 +239,20 @@ class ValuesStat2:
|
|
238
239
|
fmt = fmtb = fmt1
|
239
240
|
|
240
241
|
# 2 生成统计报告
|
241
|
-
desc =
|
242
|
+
desc = {}
|
242
243
|
if self.raw_n and self.raw_n > self.n:
|
243
|
-
desc
|
244
|
+
desc["总数"] = f"{fmt0(self.n)}/{fmt0(self.raw_n)}≈{self.n / self.raw_n:.2%}"
|
245
|
+
else:
|
246
|
+
desc["总数"] = f"{fmt0(self.n)}"
|
244
247
|
|
245
|
-
desc.append(f"总数:{fmt0(self.n)}")
|
246
248
|
if self.sum is not None:
|
247
|
-
desc
|
249
|
+
desc["总和"] = f"{fmt(self.sum)}"
|
248
250
|
if self.mean is not None and self.std is not None:
|
249
|
-
desc
|
251
|
+
desc["均值±标准差"] = f"{fmt(self.mean)}±{fmtb(self.std)}"
|
250
252
|
elif self.mean is not None:
|
251
|
-
desc
|
253
|
+
desc["均值"] = f"{fmt(self.mean)}"
|
252
254
|
elif self.std is not None:
|
253
|
-
desc
|
255
|
+
desc["标准差"] = f"{fmtb(self.std)}"
|
254
256
|
|
255
257
|
if self.values:
|
256
258
|
dist = [self.values[0]]
|
@@ -259,11 +261,24 @@ class ValuesStat2:
|
|
259
261
|
dist += quartiles
|
260
262
|
dist.append(self.values[-1])
|
261
263
|
|
262
|
-
desc
|
263
|
-
elif self.dist:
|
264
|
-
desc
|
264
|
+
desc["分布"] = '/'.join([fmt(v) for v in dist])
|
265
|
+
elif self.dist:
|
266
|
+
desc["分布"] = '/'.join([fmt(v) for v in self.dist])
|
265
267
|
|
266
|
-
return
|
268
|
+
return desc
|
269
|
+
|
270
|
+
def summary(self, unit=None, precision=4, percentile_count=5):
|
271
|
+
""" 文本汇总性的报告
|
272
|
+
|
273
|
+
:param percentile_count: 包括两个极值端点的切分点数,
|
274
|
+
设置2,就是不设置分位数,就是只展示最小、最大值
|
275
|
+
如果设置了3,就表示"中位数、二分位数",在展示的时候,会显示50%位置的分位数值
|
276
|
+
如果设置了5,就相当于"四分位数",会显示25%、50%、75%位置的分位数值
|
277
|
+
:param unit: 展示数值时使用的单位
|
278
|
+
:param precision: 展示数值时的精度
|
279
|
+
"""
|
280
|
+
desc = self._summary(unit, precision, percentile_count)
|
281
|
+
return '\t'.join([f"{key}: {value}" for key, value in desc.items()])
|
267
282
|
|
268
283
|
def calculate_ratios(self, x_values, fmt=False):
|
269
284
|
""" 计算并返回一个字典,其中包含每个 x_values 中的值与其小于等于该值的元素的比例
|
@@ -46,7 +46,7 @@ from pyxllib.prog.pupil import utc_now, utc_timestamp
|
|
46
46
|
from pyxllib.prog.specialist import XlOsEnv
|
47
47
|
from pyxllib.algo.pupil import ValuesStat2
|
48
48
|
from pyxllib.file.specialist import get_etag
|
49
|
-
from pyxllib.data.sqlite import SqlBase,
|
49
|
+
from pyxllib.data.sqlite import SqlBase, SqlBuilder
|
50
50
|
|
51
51
|
|
52
52
|
class Connection(psycopg.Connection, SqlBase):
|
@@ -154,7 +154,7 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
154
154
|
第1个值,是一个迭代器,看起来仍然能一条一条返回,实际后台是按照batch_size打包获取的
|
155
155
|
第2个值,是数据总数
|
156
156
|
"""
|
157
|
-
if not isinstance(sql,
|
157
|
+
if not isinstance(sql, SqlBuilder):
|
158
158
|
raise ValueError('暂时只能搭配SQLBuilder使用')
|
159
159
|
|
160
160
|
num = self.exec2one(sql.build_count())
|
@@ -256,42 +256,42 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
256
256
|
def __6_高级统计(self):
|
257
257
|
pass
|
258
258
|
|
259
|
-
def
|
260
|
-
|
259
|
+
def get_column_valuesstat(self, table_name, column, percentile_count=5,
|
260
|
+
filter_condition=None, by_data=False):
|
261
261
|
""" 获得指定表格的某个字段的统计特征ValuesStat2对象
|
262
262
|
|
263
263
|
:param table_name: 表名
|
264
|
-
:param
|
264
|
+
:param column: 用于计算统计数据的字段名
|
265
265
|
:param percentile_count: 分位数的数量,例如 3 表示只计算中位数
|
266
266
|
:param by_data: 是否获得原始数据
|
267
267
|
默认只获得统计特征,不获得原始数据
|
268
268
|
"""
|
269
269
|
|
270
270
|
def init_from_db_data():
|
271
|
-
sql =
|
271
|
+
sql = SqlBuilder(table_name)
|
272
272
|
if filter_condition:
|
273
273
|
sql.where(filter_condition)
|
274
|
-
values = self.exec2col(sql.build_select(
|
274
|
+
values = self.exec2col(sql.build_select(column))
|
275
275
|
if data_type == 'numeric':
|
276
276
|
values = [x and float(x) for x in values]
|
277
277
|
return ValuesStat2(raw_values=values, data_type=data_type)
|
278
278
|
|
279
279
|
def init_from_db():
|
280
280
|
# 1 构建基础的 SQL 查询
|
281
|
-
sql =
|
281
|
+
sql = SqlBuilder(table_name)
|
282
282
|
sql.select("COUNT(*) AS total_count")
|
283
|
-
sql.select(f"COUNT({
|
284
|
-
sql.select(f"MIN({
|
285
|
-
sql.select(f"MAX({
|
286
|
-
if 'timestamp' in data_type:
|
283
|
+
sql.select(f"COUNT({column}) AS non_null_count")
|
284
|
+
sql.select(f"MIN({column}) AS min_value")
|
285
|
+
sql.select(f"MAX({column}) AS max_value")
|
286
|
+
if data_type and 'timestamp' in data_type:
|
287
287
|
percentile_type = 'PERCENTILE_DISC'
|
288
288
|
# todo 其实时间类也可以"泛化"一种平均值、标准差算法的,这需要获取全量数据,然后自己计算
|
289
289
|
elif data_type == 'text':
|
290
290
|
percentile_type = 'PERCENTILE_DISC'
|
291
291
|
else: # 默认是正常的数值类型
|
292
|
-
sql.select(f"SUM({
|
293
|
-
sql.select(f"AVG({
|
294
|
-
sql.select(f"STDDEV({
|
292
|
+
sql.select(f"SUM({column}) AS total_sum")
|
293
|
+
sql.select(f"AVG({column}) AS average")
|
294
|
+
sql.select(f"STDDEV({column}) AS standard_deviation")
|
295
295
|
percentile_type = 'PERCENTILE_CONT'
|
296
296
|
|
297
297
|
percentiles = []
|
@@ -300,7 +300,7 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
300
300
|
step = 1 / (percentile_count - 1)
|
301
301
|
percentiles = [(i * step) for i in range(1, percentile_count - 1)]
|
302
302
|
for p in percentiles:
|
303
|
-
sql.select(f"{percentile_type}({p:.2f}) WITHIN GROUP (ORDER BY {
|
303
|
+
sql.select(f"{percentile_type}({p:.2f}) WITHIN GROUP (ORDER BY {column}) "
|
304
304
|
f"AS percentile_{int(p * 100)}")
|
305
305
|
|
306
306
|
if filter_condition:
|
@@ -326,7 +326,7 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
326
326
|
|
327
327
|
return x
|
328
328
|
|
329
|
-
data_type = self.get_column_data_type(table_name,
|
329
|
+
data_type = self.get_column_data_type(table_name, column)
|
330
330
|
if by_data:
|
331
331
|
vs = init_from_db_data()
|
332
332
|
else:
|
@@ -19,7 +19,7 @@ warnings.filterwarnings('ignore', message="pandas only support SQLAlchemy connec
|
|
19
19
|
warnings.filterwarnings('ignore', message="pandas only supports SQLAlchemy connectable")
|
20
20
|
|
21
21
|
|
22
|
-
class
|
22
|
+
class SqlBuilder:
|
23
23
|
def __init__(self, table=''):
|
24
24
|
self.table = table
|
25
25
|
self._select = []
|
@@ -53,6 +53,25 @@ class SQLBuilder:
|
|
53
53
|
self._where.append(condition)
|
54
54
|
return self
|
55
55
|
|
56
|
+
def where_in(self, column, values):
|
57
|
+
if values is None:
|
58
|
+
return self
|
59
|
+
|
60
|
+
if isinstance(values, str):
|
61
|
+
values = [values]
|
62
|
+
values_str = ', '.join(f"'{str(value)}'" for value in values)
|
63
|
+
if len(values) == 1:
|
64
|
+
self._where.append(f"{column} = {values_str[0]}")
|
65
|
+
else:
|
66
|
+
self._where.append(f"{column} IN ({values_str})")
|
67
|
+
return self
|
68
|
+
|
69
|
+
def where_or(self, *conditions):
|
70
|
+
""" 输入的这一批条件,作为OR组合后成为一个整体条件
|
71
|
+
"""
|
72
|
+
self._where.append(f"({' OR '.join(conditions)})")
|
73
|
+
return self
|
74
|
+
|
56
75
|
def group_by(self, *columns):
|
57
76
|
self._group_by.extend(columns)
|
58
77
|
return self
|
@@ -106,7 +125,7 @@ class SQLBuilder:
|
|
106
125
|
return '\n'.join(sql)
|
107
126
|
|
108
127
|
def build_check_data_type(self, column):
|
109
|
-
sql =
|
128
|
+
sql = SqlBuilder('information_schema.columns')
|
110
129
|
sql.select(f"data_type")
|
111
130
|
sql.where(f"table_name='{self.table}' AND column_name='{column}'")
|
112
131
|
return sql.build_select()
|
@@ -381,7 +400,7 @@ class SqlBase:
|
|
381
400
|
|
382
401
|
def get_column_data_type(self, table_name, col_name):
|
383
402
|
""" 获取表格中某一列的数据类型 """
|
384
|
-
return self.exec2one(
|
403
|
+
return self.exec2one(SqlBuilder(table_name).build_check_data_type(col_name))
|
385
404
|
|
386
405
|
|
387
406
|
class Connection(sqlite3.Connection, SqlBase):
|
@@ -1437,9 +1437,9 @@ class XlPath(type(pathlib.Path())):
|
|
1437
1437
|
dst = XlPath(dst)
|
1438
1438
|
if dst.exist_preprcs(if_exists):
|
1439
1439
|
if self.is_file():
|
1440
|
-
shutil.copy2(self, dst)
|
1440
|
+
return shutil.copy2(self, dst)
|
1441
1441
|
else:
|
1442
|
-
shutil.copytree(self, dst)
|
1442
|
+
return shutil.copytree(self, dst)
|
1443
1443
|
|
1444
1444
|
def move(self, dst, if_exists=None):
|
1445
1445
|
if not self.exists():
|
@@ -16,7 +16,10 @@ from pyxllib.file.specialist import File, Dir, filesmatch, get_encoding, XlPath
|
|
16
16
|
# BCompare.exe, bcompare函数要用
|
17
17
|
|
18
18
|
class BCompare(Explorer):
|
19
|
-
def __init__(self, app='
|
19
|
+
def __init__(self, app='bcomp', shell=False):
|
20
|
+
"""
|
21
|
+
240512周日20:06,本来写的是BCompare,但是友鑫mac电脑上发现似乎有问题,所以改成bcomp,这种在windows上也能用
|
22
|
+
"""
|
20
23
|
super().__init__(app, shell)
|
21
24
|
|
22
25
|
@classmethod
|
@@ -48,7 +51,7 @@ class BCompare(Explorer):
|
|
48
51
|
default_suffix = None
|
49
52
|
for i, arg in enumerate(args):
|
50
53
|
f = XlPath.safe_init(arg)
|
51
|
-
if f.is_file(): # 是文件对象,且存在
|
54
|
+
if f is not None and f.is_file(): # 是文件对象,且存在
|
52
55
|
new_args.append(f)
|
53
56
|
if not default_suffix:
|
54
57
|
default_suffix = f.suffix
|
@@ -13,6 +13,7 @@ import subprocess
|
|
13
13
|
import sys
|
14
14
|
import datetime
|
15
15
|
import platform
|
16
|
+
import re
|
16
17
|
|
17
18
|
import pandas as pd
|
18
19
|
from bs4 import BeautifulSoup
|
@@ -118,9 +119,12 @@ class Explorer:
|
|
118
119
|
TODO 获得返回值分析
|
119
120
|
"""
|
120
121
|
args = [self.app] + list(args)
|
122
|
+
|
121
123
|
if 'shell' not in kwargs:
|
122
124
|
kwargs.update({'shell': self.shell})
|
123
|
-
|
125
|
+
if re.match(r'open\s', self.app):
|
126
|
+
args = args[0] + ' ' + args[1]
|
127
|
+
kwargs.update({'shell': True})
|
124
128
|
try:
|
125
129
|
if wait:
|
126
130
|
subprocess.run(args, **kwargs)
|
@@ -161,6 +165,7 @@ class Browser(Explorer):
|
|
161
165
|
# 这里默认设置为 'google-chrome',如果你想使用其他的浏览器,例如Firefox,可以修改为 'firefox'
|
162
166
|
app = 'google-chrome'
|
163
167
|
else:
|
168
|
+
app = 'open -a "Google Chrome"'
|
164
169
|
# 其他系统的处理
|
165
170
|
pass
|
166
171
|
super().__init__(app, shell)
|
@@ -232,7 +237,8 @@ class Browser(Explorer):
|
|
232
237
|
:param file: 默认可以不输入,会按七牛的etag哈希值生成临时文件
|
233
238
|
如果输入,则按照指定的名称生成文件
|
234
239
|
"""
|
235
|
-
|
240
|
+
f = XlPath.safe_init(arg)
|
241
|
+
if f is not None and f.is_file():
|
236
242
|
file = arg
|
237
243
|
else:
|
238
244
|
file = str(self.to_brower_file(arg, file, clsmsg=clsmsg, to_html_args=to_html_args))
|
@@ -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.110', # 当前版本,每次更新上传到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
|