pyxllib 0.3.111__tar.gz → 0.3.112__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.111/pyxllib.egg-info → pyxllib-0.3.112}/PKG-INFO +1 -1
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/stat.py +14 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/pglib.py +75 -12
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/sqlite.py +12 -2
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/charclasslib.py +11 -4
- pyxllib-0.3.112/pyxllib/text/jinjalib.py +32 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/newbie.py +12 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/xmllib.py +1 -8
- {pyxllib-0.3.111 → pyxllib-0.3.112/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/gptlib.py +1 -13
- {pyxllib-0.3.111 → pyxllib-0.3.112}/setup.py +1 -1
- {pyxllib-0.3.111 → pyxllib-0.3.112}/LICENSE +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/MANIFEST.in +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/README.md +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib.egg-info/requires.txt +4 -4
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/requirements.txt +0 -0
- {pyxllib-0.3.111 → pyxllib-0.3.112}/setup.cfg +0 -0
@@ -254,6 +254,7 @@ def xlpivot(df, index=None, columns=None, values=None):
|
|
254
254
|
:param columns: 列划分方式
|
255
255
|
:param values: 显示的值
|
256
256
|
Callable[items, value]:输出一个函数
|
257
|
+
list[str]: 支持输入属性列表,表示显示原始值的意思。如果原始值不唯一,则逗号分开拼接后显示。但这种用法就不太算是传统意义的数据透视表了
|
257
258
|
:return: 数据透视表的表格
|
258
259
|
|
259
260
|
使用示例:
|
@@ -261,6 +262,8 @@ def xlpivot(df, index=None, columns=None, values=None):
|
|
261
262
|
x = items.iloc[0]
|
262
263
|
return f'{x["precision"]:.0f},{x["recall"]:.0f},{x["hmean"]:.2f},{x["fps"]}' # 返回显示的值
|
263
264
|
>> df2 = xlpivot(df, ['model_type'], ['dataset', 'total_frame'], {'precision,recall,hmean,fps': func})
|
265
|
+
|
266
|
+
注意技巧:如果要在分组后约束特定顺序,可以使用特殊前缀进行编号对齐
|
264
267
|
"""
|
265
268
|
|
266
269
|
# 1 将分组的格式标准化
|
@@ -275,6 +278,17 @@ def xlpivot(df, index=None, columns=None, values=None):
|
|
275
278
|
index_, columns_ = reset_groups(index), reset_groups(columns)
|
276
279
|
|
277
280
|
# 2 目标值的格式标准化
|
281
|
+
def make_col_func(col):
|
282
|
+
def func(rows):
|
283
|
+
if len(rows):
|
284
|
+
return ', '.join(map(str, rows[col].values))
|
285
|
+
return ''
|
286
|
+
|
287
|
+
return func
|
288
|
+
|
289
|
+
if isinstance(values, (list, tuple)):
|
290
|
+
values = {v: make_col_func(v) for v in values}
|
291
|
+
|
278
292
|
if callable(values):
|
279
293
|
values_ = {'values': values}
|
280
294
|
elif isinstance(values, dict):
|
@@ -41,7 +41,7 @@ from tqdm import tqdm
|
|
41
41
|
import psycopg
|
42
42
|
import psycopg.rows
|
43
43
|
|
44
|
-
from pyxllib.prog.newbie import round_int
|
44
|
+
from pyxllib.prog.newbie import round_int, human_readable_number
|
45
45
|
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
|
@@ -62,12 +62,10 @@ class Connection(psycopg.Connection, SqlBase):
|
|
62
62
|
"""
|
63
63
|
检索当前数据库的活动信息。
|
64
64
|
"""
|
65
|
-
sql =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
"""
|
70
|
-
return self.exec2dict(sql).fetchall()
|
65
|
+
sql = SqlBuilder('pg_stat_activity')
|
66
|
+
sql.select('pid', 'datname', 'usename', 'state', 'query', 'age(now(), query_start) AS "query_age"')
|
67
|
+
sql.where("state = 'active'")
|
68
|
+
return self.exec2dict(sql.build_select()).fetchall()
|
71
69
|
|
72
70
|
def __2_表格(self):
|
73
71
|
pass
|
@@ -147,9 +145,14 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
147
145
|
# cur.close()
|
148
146
|
return data
|
149
147
|
|
150
|
-
def exec2dict_batch(self, sql, batch_size=1000, **kwargs):
|
148
|
+
def exec2dict_batch(self, sql, batch_size=1000, use_offset=None, **kwargs):
|
151
149
|
""" 分批返回数据的版本
|
152
150
|
|
151
|
+
:param use_offset: 是否使用offset分页,会根据sql中是否含有where自动判断,但有时候最好明确指定以防错误
|
152
|
+
如果外部sql每次操作,会改变数据库的情况,导致sql的where规则虽然没变,但是数据本身发生变化,则offset应该要关闭
|
153
|
+
每次取对应的满足条件的数据即可
|
154
|
+
这种情况,也需要本函数内部主动执行commit_all的
|
155
|
+
否则,只是一种遍历查询,没有where或者where获取的数据情况是不会变化的,则要使用offset
|
153
156
|
:return:
|
154
157
|
第1个值,是一个迭代器,看起来仍然能一条一条返回,实际后台是按照batch_size打包获取的
|
155
158
|
第2个值,是数据总数
|
@@ -157,6 +160,9 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
157
160
|
if not isinstance(sql, SqlBuilder):
|
158
161
|
raise ValueError('暂时只能搭配SQLBuilder使用')
|
159
162
|
|
163
|
+
if use_offset is None:
|
164
|
+
use_offset = not sql._where
|
165
|
+
|
160
166
|
num = self.exec2one(sql.build_count())
|
161
167
|
offset = 0
|
162
168
|
|
@@ -164,9 +170,12 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
164
170
|
nonlocal offset
|
165
171
|
while True:
|
166
172
|
sql2 = sql.copy()
|
173
|
+
if not use_offset: # 如果不使用offset,那么缓存的sql操作需要全部提交,确保数据都更新后,再提取数据
|
174
|
+
self.commit_all()
|
167
175
|
sql2.limit(batch_size, offset)
|
168
176
|
rows = self.exec2dict(sql2.build_select(), **kwargs).fetchall()
|
169
|
-
|
177
|
+
if use_offset:
|
178
|
+
offset += len(rows)
|
170
179
|
if not rows:
|
171
180
|
break
|
172
181
|
yield from rows
|
@@ -340,10 +349,10 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
340
349
|
|
341
350
|
return vs
|
342
351
|
|
343
|
-
def export_jsonl(self, file_path, table_name, key_col=None, batch_size=1000):
|
352
|
+
def export_jsonl(self, file_path, table_name, key_col=None, batch_size=1000, print_mode=0):
|
344
353
|
""" 将某个表导出为本地jsonl文件
|
345
354
|
|
346
|
-
:param table_name: 表名
|
355
|
+
:param str|SqlBuilder table_name: 表名
|
347
356
|
支持传入SqlBuilder对象,这样可以更灵活的控制导出的数据规则
|
348
357
|
:param file_path: 导出的文件路径
|
349
358
|
:param batch_size: 每次读取的行数和保存的行数
|
@@ -377,10 +386,64 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
377
386
|
# 2 获取数据
|
378
387
|
file = StreamJsonlWriter(file_path, batch_size=batch_size) # 流式存储
|
379
388
|
rows, total = self.exec2dict_batch(sql, batch_size=batch_size)
|
380
|
-
for row in tqdm(rows, total=total, desc=table_name):
|
389
|
+
for row in tqdm(rows, total=total, desc=f'从{table_name}表导出数据', disable=not print_mode):
|
381
390
|
file.append_line(row)
|
382
391
|
file.flush()
|
383
392
|
|
393
|
+
def check_db_tables_size(self, db_name=None):
|
394
|
+
""" 查看指定数据下所有表格的大小 """
|
395
|
+
from datetime import datetime
|
396
|
+
import pandas as pd
|
397
|
+
|
398
|
+
if db_name is None:
|
399
|
+
# 使用sql获取当前self所在数据库
|
400
|
+
db_name = self.exec2one("SELECT current_database()")
|
401
|
+
|
402
|
+
data = []
|
403
|
+
tables = self.exec2col("SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
|
404
|
+
for table_name in tables:
|
405
|
+
row = {
|
406
|
+
'database': db_name,
|
407
|
+
'table_name': table_name,
|
408
|
+
}
|
409
|
+
sz = self.exec2one(f"SELECT pg_total_relation_size('public.{table_name}')")
|
410
|
+
if not sz:
|
411
|
+
continue
|
412
|
+
lines = self.exec2one(f"SELECT COUNT(*) FROM {table_name}")
|
413
|
+
row['size'], row['lines'] = sz, lines
|
414
|
+
row['readable_size'] = human_readable_number(sz, 'KB')
|
415
|
+
row['perline_size'] = human_readable_number(sz / lines, 'KB') if lines else -1
|
416
|
+
row['update_time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
417
|
+
data.append(row)
|
418
|
+
|
419
|
+
df = pd.DataFrame.from_dict(data)
|
420
|
+
if len(df):
|
421
|
+
df.sort_values(['size'], ascending=False, inplace=True)
|
422
|
+
df.reset_index(drop=True, inplace=True)
|
423
|
+
return df
|
424
|
+
|
425
|
+
def check_multi_db_size(self, db_list):
|
426
|
+
""" 这个功能一般要用postgres账号,才有权限处理所有数据库 """
|
427
|
+
from datetime import datetime
|
428
|
+
import pandas as pd
|
429
|
+
|
430
|
+
data = []
|
431
|
+
for db in db_list:
|
432
|
+
row = {
|
433
|
+
'name': db,
|
434
|
+
}
|
435
|
+
sz = self.exec2one(f"SELECT pg_database_size('{db}')")
|
436
|
+
row['size'] = sz
|
437
|
+
row['readable_size'] = human_readable_number(sz, 'KB')
|
438
|
+
row['update_time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
439
|
+
|
440
|
+
data.append(row)
|
441
|
+
|
442
|
+
df = pd.DataFrame.from_dict(data)
|
443
|
+
df.sort_values(['size'], ascending=False, inplace=True)
|
444
|
+
df.reset_index(drop=True, inplace=True)
|
445
|
+
return df
|
446
|
+
|
384
447
|
|
385
448
|
"""
|
386
449
|
【关于为什么XlprDb要和pglib合一个文件】
|
@@ -50,7 +50,13 @@ class SqlBuilder:
|
|
50
50
|
return self
|
51
51
|
|
52
52
|
def where(self, condition):
|
53
|
-
|
53
|
+
if isinstance(condition, (list, tuple)):
|
54
|
+
self._where.extend(condition)
|
55
|
+
elif isinstance(condition, str):
|
56
|
+
self._where.append(condition)
|
57
|
+
else:
|
58
|
+
raise ValueError(f'不支持的where条件类型{type(condition)}')
|
59
|
+
|
54
60
|
return self
|
55
61
|
|
56
62
|
def where_in(self, column, values):
|
@@ -85,7 +91,7 @@ class SqlBuilder:
|
|
85
91
|
self._offset = offset
|
86
92
|
return self
|
87
93
|
|
88
|
-
def __2_build_
|
94
|
+
def __2_build_初级命令(self):
|
89
95
|
pass
|
90
96
|
|
91
97
|
def build_select(self, *columns):
|
@@ -124,7 +130,11 @@ class SqlBuilder:
|
|
124
130
|
sql.append(f"WHERE {' AND '.join(self._where)}")
|
125
131
|
return '\n'.join(sql)
|
126
132
|
|
133
|
+
def __3_build_中级命令(self):
|
134
|
+
pass
|
135
|
+
|
127
136
|
def build_check_data_type(self, column):
|
137
|
+
""" 检查column的数据类型 """
|
128
138
|
sql = SqlBuilder('information_schema.columns')
|
129
139
|
sql.select(f"data_type")
|
130
140
|
sql.where(f"table_name='{self.table}' AND column_name='{column}'")
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
# @Author : 陈坤泽
|
4
4
|
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2023/12/29
|
5
6
|
|
6
7
|
"""
|
7
8
|
字符分类
|
@@ -67,7 +68,7 @@ def get_charclass_num(content):
|
|
67
68
|
return ct2
|
68
69
|
|
69
70
|
|
70
|
-
def get_charclass_rate(content):
|
71
|
+
def get_charclass_rate(content, round_digits=4):
|
71
72
|
""" 检查字符类型分布数量 """
|
72
73
|
ct = get_charclass_num(content)
|
73
74
|
|
@@ -80,12 +81,18 @@ def get_charclass_rate(content):
|
|
80
81
|
ct2 = Counter()
|
81
82
|
for k, v in ct.most_common():
|
82
83
|
ct2[k] = v / total
|
84
|
+
if round_digits is not None:
|
85
|
+
ct2[k] = round(ct2[k], round_digits)
|
83
86
|
return ct2
|
84
87
|
|
85
88
|
|
86
89
|
def check_language_from_counter(ct):
|
87
|
-
""" 检查语言类型
|
88
|
-
|
90
|
+
""" 检查语言类型
|
91
|
+
|
92
|
+
todo 这里的规则应该还可以再优化,以及不同的业务场景,这些规则应该也要再调整
|
93
|
+
这个比例最早是给表格设计的,表格很可能表头是中文,中间都是英文、数字数据,此时仍然归为中文
|
94
|
+
但如果是一般性的文档,可能要提高中文的比例,才能视为中文文档
|
95
|
+
"""
|
89
96
|
|
90
97
|
if '繁体汉字' in ct:
|
91
98
|
if safe_div(ct['繁体汉字'], ct['常用汉字']) > 0.1:
|
@@ -95,7 +102,7 @@ def check_language_from_counter(ct):
|
|
95
102
|
return '中文'
|
96
103
|
|
97
104
|
if '其他字符' in ct:
|
98
|
-
if ct['其他字符']
|
105
|
+
if safe_div(ct['其他字符'], ct['字母']) > 0.1:
|
99
106
|
return '其他'
|
100
107
|
|
101
108
|
if '字母' in ct:
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/05/26
|
6
|
+
|
7
|
+
from pyxllib.prog.pupil import check_install_package
|
8
|
+
|
9
|
+
# 一个xpath解析库
|
10
|
+
check_install_package('jinja2')
|
11
|
+
|
12
|
+
import jinja2
|
13
|
+
from jinja2 import Template, Environment
|
14
|
+
|
15
|
+
from pyxllib.file.specialist import XlPath
|
16
|
+
|
17
|
+
|
18
|
+
def set_template(s, *args, **kwargs):
|
19
|
+
""" todo 这个名字会不会太容易冲突了? """
|
20
|
+
return Template(s.strip(), *args, **kwargs)
|
21
|
+
|
22
|
+
|
23
|
+
def set_meta_template(s, meta_start='[[', meta_end=']]', **kwargs):
|
24
|
+
""" 支持预先用某些格式渲染后,再返回标准渲染模板 """
|
25
|
+
t = Template(s.strip(), variable_start_string=meta_start,
|
26
|
+
variable_end_string=meta_end).render(**kwargs)
|
27
|
+
return Template(t)
|
28
|
+
|
29
|
+
|
30
|
+
def get_jinja_template(name, **kwargs):
|
31
|
+
template = Environment(**kwargs).from_string((XlPath(__file__).parent / f'templates/{name}').read_text())
|
32
|
+
return template
|
@@ -286,3 +286,15 @@ def fold_dict(d, m=5):
|
|
286
286
|
vals = [f"'{k}': {v}" for k, v in d.items()]
|
287
287
|
line = [', '.join(vals[i:i + 5]) for i in range(0, len(vals), m)]
|
288
288
|
return '{' + ',\n'.join(line) + '}'
|
289
|
+
|
290
|
+
|
291
|
+
def remove_prefix(original_string, prefix):
|
292
|
+
if original_string.startswith(prefix):
|
293
|
+
return original_string[len(prefix):]
|
294
|
+
return original_string
|
295
|
+
|
296
|
+
|
297
|
+
def remove_suffix(original_string, suffix):
|
298
|
+
if original_string.endswith(suffix):
|
299
|
+
return original_string[:-len(suffix)]
|
300
|
+
return original_string
|
@@ -32,6 +32,7 @@ from pyxllib.algo.pupil import SearchBase
|
|
32
32
|
from pyxllib.text.newbie import xldictstr
|
33
33
|
from pyxllib.text.pupil import shorten, ensure_gbk, BookContents, strwidth, grp_chinese_char
|
34
34
|
from pyxllib.file.specialist import File, Dir, get_etag
|
35
|
+
from pyxllib.text.jinjalib import get_jinja_template
|
35
36
|
|
36
37
|
|
37
38
|
class XlBs4Tag(bs4.element.Tag):
|
@@ -670,14 +671,6 @@ class HtmlParser:
|
|
670
671
|
getattr(self, method)(x)
|
671
672
|
|
672
673
|
|
673
|
-
def get_jinja_template(name, **kwargs):
|
674
|
-
from jinja2 import Environment
|
675
|
-
from pyxllib.file.specialist import XlPath
|
676
|
-
|
677
|
-
template = Environment(**kwargs).from_string((XlPath(__file__).parent / f'templates/{name}').read_text())
|
678
|
-
return template
|
679
|
-
|
680
|
-
|
681
674
|
def concat_htmlbody(ls):
|
682
675
|
""" 对多份网页内容中的body进行拼接
|
683
676
|
"""
|
@@ -25,7 +25,6 @@ import io
|
|
25
25
|
import logging
|
26
26
|
import warnings
|
27
27
|
|
28
|
-
from jinja2 import Template
|
29
28
|
from openpyxl import Workbook
|
30
29
|
import pandas as pd
|
31
30
|
import requests
|
@@ -41,6 +40,7 @@ from pyxllib.prog.specialist import browser, TicToc
|
|
41
40
|
from pyxllib.algo.pupil import ValuesStat
|
42
41
|
from pyxllib.file.specialist import XlPath, JsonlDataFile, JsonlDataDir, TwinDirs, ensure_localdir
|
43
42
|
from pyxllib.file.xlsxlib import extract_workbook_summary
|
43
|
+
from pyxllib.text.jinjalib import set_template, set_meta_template
|
44
44
|
|
45
45
|
|
46
46
|
def __1_生成提问数据():
|
@@ -181,18 +181,6 @@ def check_conversation_lengths(all_texts, n_values=(4, 4),
|
|
181
181
|
# 比率越大,代表越接近中文场景,汉字越多,要注意len的控制不要让token某些场合超出长度
|
182
182
|
|
183
183
|
|
184
|
-
def set_template(s, *args, **kwargs):
|
185
|
-
""" todo 这个名字会不会太容易冲突了? """
|
186
|
-
return Template(s.strip(), *args, **kwargs)
|
187
|
-
|
188
|
-
|
189
|
-
def set_meta_template(s, meta_start='[[', meta_end=']]', **kwargs):
|
190
|
-
""" 支持预先用某些格式渲染后,再返回标准渲染模板 """
|
191
|
-
t = Template(s.strip(), variable_start_string=meta_start,
|
192
|
-
variable_end_string=meta_end).render(**kwargs)
|
193
|
-
return Template(t)
|
194
|
-
|
195
|
-
|
196
184
|
class StyleParser:
|
197
185
|
def __init__(self, text):
|
198
186
|
# 使用正则表达式拆分文本,并获取权重和风格
|
@@ -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.112', # 当前版本,每次更新上传到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
|