pyxllib 0.3.123__tar.gz → 0.3.124__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.123/pyxllib.egg-info → pyxllib-0.3.124}/PKG-INFO +1 -1
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/pupil.py +0 -21
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/echarts.py +56 -12
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/sqlite.py +10 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/pdflib.py +1 -1
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/pupil.py +50 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/__init__.py +128 -1
- {pyxllib-0.3.123 → pyxllib-0.3.124/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/xlpaddle.py +5 -8
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/openai2/_core/chat.py +5 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/setup.py +1 -1
- {pyxllib-0.3.123 → pyxllib-0.3.124}/LICENSE +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/MANIFEST.in +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/README.md +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib.egg-info/requires.txt +11 -11
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/requirements.txt +0 -0
- {pyxllib-0.3.123 → pyxllib-0.3.124}/setup.cfg +0 -0
@@ -7,7 +7,6 @@
|
|
7
7
|
from bisect import bisect_right
|
8
8
|
from collections import defaultdict, Counter
|
9
9
|
import datetime
|
10
|
-
import math
|
11
10
|
import re
|
12
11
|
from statistics import quantiles
|
13
12
|
import sys
|
@@ -482,26 +481,6 @@ def matchpairs(xs, ys, cmp_func, least_score=sys.float_info.epsilon, *,
|
|
482
481
|
return pairs
|
483
482
|
|
484
483
|
|
485
|
-
def get_number_width(n):
|
486
|
-
""" 判断数值n的长度
|
487
|
-
|
488
|
-
参考资料:https://jstrieb.github.io/posts/digit-length/
|
489
|
-
|
490
|
-
>>> get_number_width(0)
|
491
|
-
1
|
492
|
-
>>> get_number_width(9)
|
493
|
-
1
|
494
|
-
>>> get_number_width(10)
|
495
|
-
2
|
496
|
-
>>> get_number_width(97)
|
497
|
-
2
|
498
|
-
"""
|
499
|
-
# assert n > 0
|
500
|
-
# return math.ceil(math.log10(n + 1))
|
501
|
-
|
502
|
-
return 1 if n == 0 else (math.floor(math.log10(n)) + 1)
|
503
|
-
|
504
|
-
|
505
484
|
class SearchBase:
|
506
485
|
""" 一个dfs、bfs模板类 """
|
507
486
|
|
@@ -75,28 +75,71 @@ class XlChart(Chart):
|
|
75
75
|
inject_members(XlChart, Chart)
|
76
76
|
|
77
77
|
|
78
|
+
class XlLine(Line):
|
79
|
+
@classmethod
|
80
|
+
def from_dict(cls, yaxis, xaxis=None, *, title=None,
|
81
|
+
xaxis_name=None, yaxis_name=None, **kwargs):
|
82
|
+
""" 查看一个数据的折线图
|
83
|
+
|
84
|
+
:param list|dict yaxis: 列表数据,或者字典name: values表示的多组数据
|
85
|
+
"""
|
86
|
+
c = cls()
|
87
|
+
|
88
|
+
if isinstance(yaxis, (list, tuple)):
|
89
|
+
yaxis = {'value': yaxis}
|
90
|
+
if xaxis is None:
|
91
|
+
xaxis = list(range(max([len(v) for v in yaxis.values()])))
|
92
|
+
c.add_xaxis(xaxis)
|
93
|
+
for k, v in yaxis.items():
|
94
|
+
c.add_yaxis(k, v)
|
95
|
+
|
96
|
+
configs = {
|
97
|
+
'tooltip_opts': opts.TooltipOpts(trigger="axis"),
|
98
|
+
**kwargs,
|
99
|
+
}
|
100
|
+
c.set_global_opts(tooltip_opts=opts.TooltipOpts(trigger="axis"))
|
101
|
+
if title:
|
102
|
+
configs['title_opts'] = opts.TitleOpts(title=title)
|
103
|
+
if xaxis_name:
|
104
|
+
configs['xaxis_opts'] = opts.AxisOpts(name=xaxis_name, axislabel_opts=opts.LabelOpts(rotate=45, interval=0))
|
105
|
+
if yaxis_name:
|
106
|
+
configs['yaxis_opts'] = opts.AxisOpts(name=yaxis_name)
|
107
|
+
c.set_global_opts(**configs)
|
108
|
+
return c
|
109
|
+
|
110
|
+
|
78
111
|
class XlBar(Bar):
|
79
112
|
|
80
113
|
@classmethod
|
81
|
-
def from_dict(cls, yaxis, xaxis=None, *, title=None
|
114
|
+
def from_dict(cls, yaxis, xaxis=None, *, title=None,
|
115
|
+
xaxis_name=None, yaxis_name=None, **kwargs):
|
82
116
|
""" 查看一个数据的条形图
|
83
117
|
|
84
|
-
:param dict yaxis: 列表数据,或者字典name: values表示的多组数据
|
118
|
+
:param list|dict yaxis: 列表数据,或者字典name: values表示的多组数据
|
85
119
|
"""
|
86
|
-
|
120
|
+
c = cls()
|
87
121
|
|
122
|
+
if isinstance(yaxis, (list, tuple)):
|
123
|
+
yaxis = {'value': yaxis}
|
88
124
|
if xaxis is None:
|
89
125
|
xaxis = list(range(max([len(v) for v in yaxis.values()])))
|
90
|
-
|
91
|
-
b.add_xaxis(xaxis)
|
92
|
-
|
126
|
+
c.add_xaxis(xaxis)
|
93
127
|
for k, v in yaxis.items():
|
94
|
-
|
128
|
+
c.add_yaxis(k, v)
|
95
129
|
|
130
|
+
configs = {
|
131
|
+
'tooltip_opts': opts.TooltipOpts(trigger="axis"),
|
132
|
+
**kwargs,
|
133
|
+
}
|
134
|
+
c.set_global_opts(tooltip_opts=opts.TooltipOpts(trigger="axis"))
|
96
135
|
if title:
|
97
|
-
|
98
|
-
|
99
|
-
|
136
|
+
configs['title_opts'] = opts.TitleOpts(title=title)
|
137
|
+
if xaxis_name:
|
138
|
+
configs['xaxis_opts'] = opts.AxisOpts(name=xaxis_name)
|
139
|
+
if yaxis_name:
|
140
|
+
configs['yaxis_opts'] = opts.AxisOpts(name=yaxis_name)
|
141
|
+
c.set_global_opts(**configs)
|
142
|
+
return c
|
100
143
|
|
101
144
|
@classmethod
|
102
145
|
def from_list(cls, yaxis, xaxis=None, *, title=None):
|
@@ -128,11 +171,13 @@ class XlBar(Bar):
|
|
128
171
|
for i in range(groups):
|
129
172
|
labels.append(f"{min_val + interval * i:.2f}-{min_val + interval * (i + 1):.2f}")
|
130
173
|
# t = cls.from_dict({'value': group_counts}, xaxis=labels, title=title)
|
131
|
-
|
174
|
+
|
132
175
|
return cls.from_dict({'value': group_counts}, xaxis=labels, title=title)
|
133
176
|
|
134
177
|
|
135
178
|
class XlRadar(Radar):
|
179
|
+
""" 雷达图 """
|
180
|
+
|
136
181
|
def __init__(self, *args, **kwargs):
|
137
182
|
super().__init__(*args, **kwargs)
|
138
183
|
self.color_idx = 0
|
@@ -193,4 +238,3 @@ def draw_pareto_chart(data, accuracy=0.1, *, title='帕累托累积权重', valu
|
|
193
238
|
if __name__ == '__main__':
|
194
239
|
with TicToc(__name__):
|
195
240
|
pass
|
196
|
-
|
@@ -59,6 +59,16 @@ class SqlBuilder:
|
|
59
59
|
|
60
60
|
return self
|
61
61
|
|
62
|
+
def where_dict_match(self, items):
|
63
|
+
""" 输入一个字典,要求每个key的字段对应上具体的某个取值value """
|
64
|
+
for k, v in items.items():
|
65
|
+
if isinstance(v, str):
|
66
|
+
self._where.append(f"{k} = '{v}'")
|
67
|
+
elif isinstance(v, (int, float)):
|
68
|
+
self._where.append(f"{k} = {v}")
|
69
|
+
else:
|
70
|
+
raise TypeError
|
71
|
+
|
62
72
|
def where_in(self, column, values):
|
63
73
|
if values is None:
|
64
74
|
return self
|
@@ -19,7 +19,7 @@ from pyxllib.prog.newbie import round_int, decode_bitflags
|
|
19
19
|
from pyxllib.prog.pupil import DictTool, inject_members, dprint
|
20
20
|
from pyxllib.prog.specialist import browser
|
21
21
|
from pyxllib.algo.newbie import round_unit
|
22
|
-
from pyxllib.
|
22
|
+
from pyxllib.prog.pupil import get_number_width
|
23
23
|
from pyxllib.file.specialist import XlPath, writefile, get_etag
|
24
24
|
from pyxllib.cv.expert import xlcv, xlpil
|
25
25
|
from pyxlpr.data.labelme import LabelmeDict
|
@@ -1314,3 +1314,53 @@ def tprint(*args, **kwargs):
|
|
1314
1314
|
def is_valid_identifier(name):
|
1315
1315
|
""" 判断是否是合法的标识符 """
|
1316
1316
|
return re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', name)
|
1317
|
+
|
1318
|
+
|
1319
|
+
def get_number_width(n):
|
1320
|
+
""" 判断数值n的长度
|
1321
|
+
|
1322
|
+
参考资料:https://jstrieb.github.io/posts/digit-length/
|
1323
|
+
|
1324
|
+
>>> get_number_width(0)
|
1325
|
+
1
|
1326
|
+
>>> get_number_width(9)
|
1327
|
+
1
|
1328
|
+
>>> get_number_width(10)
|
1329
|
+
2
|
1330
|
+
>>> get_number_width(97)
|
1331
|
+
2
|
1332
|
+
"""
|
1333
|
+
# assert n > 0
|
1334
|
+
# return math.ceil(math.log10(n + 1))
|
1335
|
+
|
1336
|
+
return 1 if n == 0 else (math.floor(math.log10(n)) + 1)
|
1337
|
+
|
1338
|
+
|
1339
|
+
def aligned_range(start, stop=None, step=1):
|
1340
|
+
""" 返回按照域宽对齐的数字序列 """
|
1341
|
+
if stop is None:
|
1342
|
+
start, stop = 0, start
|
1343
|
+
|
1344
|
+
max_width = get_number_width(stop - step)
|
1345
|
+
format_str = '{:0' + str(max_width) + 'd}'
|
1346
|
+
|
1347
|
+
return [format_str.format(i) for i in range(start, stop, step)]
|
1348
|
+
|
1349
|
+
|
1350
|
+
def percentage_and_value(numbers, precision=2, *, total=None, sep='.'):
|
1351
|
+
""" 对输入的一串数值,转换成一种特殊的表达格式 "百分比.次数"
|
1352
|
+
|
1353
|
+
:param list numbers: 数值列表
|
1354
|
+
:param int precision: 百分比的精度(小数点后的位数),默认为 2
|
1355
|
+
:param int total: 总数,如果不输入,则默认为输入数值的和
|
1356
|
+
:param str sep: 分隔符
|
1357
|
+
:return: 整数部分是比例,小数部分是原始数值的整数部分
|
1358
|
+
"""
|
1359
|
+
if total is None:
|
1360
|
+
total = sum(numbers)
|
1361
|
+
width = get_number_width(total)
|
1362
|
+
result = []
|
1363
|
+
for num in numbers:
|
1364
|
+
percent = safe_div(num, total) * 10 ** precision
|
1365
|
+
result.append(f"{percent:.0f}{sep}{num:0{width}d}")
|
1366
|
+
return result
|
@@ -25,7 +25,7 @@ import requests
|
|
25
25
|
from humanfriendly import parse_size
|
26
26
|
|
27
27
|
from pyxllib.prog.newbie import human_readable_size
|
28
|
-
from pyxllib.prog.pupil import get_installed_packages
|
28
|
+
from pyxllib.prog.pupil import get_installed_packages, aligned_range, percentage_and_value
|
29
29
|
from pyxllib.prog.xlosenv import XlOsEnv
|
30
30
|
from pyxllib.file.specialist import cache_file
|
31
31
|
|
@@ -215,3 +215,130 @@ class ProgressBar:
|
|
215
215
|
time.sleep(1)
|
216
216
|
pbar.n = self.progress
|
217
217
|
pbar.refresh()
|
218
|
+
|
219
|
+
|
220
|
+
class BitMaskTool:
|
221
|
+
""" 二进制位掩码工具
|
222
|
+
|
223
|
+
概念术语
|
224
|
+
bitval,每一个位上的具体取值,0或1
|
225
|
+
bitsum,所有位上的取值的和,即二进制数的十进制表示
|
226
|
+
"""
|
227
|
+
|
228
|
+
def __init__(self, bit_names=None, bitsum_counter=None):
|
229
|
+
""" 初始化 BitMaskTool 对象
|
230
|
+
|
231
|
+
:param list bit_names: 每一位功能开启时,显示的标签名。未输入时,填充0,1,2,3...注意总数,要按域宽对齐
|
232
|
+
:param dict/list bitsum_counter: 各种值出现的次数,可以是一个字典或者一个包含出现次数的列表
|
233
|
+
"""
|
234
|
+
# 1 每一位功能开启时,显示的标签名。未输入时,填充0,1,2,3...注意总数,要按域宽对齐
|
235
|
+
if bit_names is None:
|
236
|
+
bit_names = list(aligned_range(len(bit_names)))
|
237
|
+
self.bit_names = bit_names
|
238
|
+
# 2 各种值出现的次数
|
239
|
+
if isinstance(bitsum_counter, (list, tuple)):
|
240
|
+
bitsum_counter = Counter(bitsum_counter)
|
241
|
+
self.bitsum_counter = bitsum_counter or {}
|
242
|
+
|
243
|
+
def get_bitsum_names(self, bitsum):
|
244
|
+
""" 从bitsum得到names的拼接
|
245
|
+
|
246
|
+
>> get_bitsum_names(3)
|
247
|
+
'语义定位,图表'
|
248
|
+
"""
|
249
|
+
if not isinstance(bitsum, int):
|
250
|
+
try:
|
251
|
+
bitsum = int(bitsum)
|
252
|
+
except ValueError:
|
253
|
+
bitsum = 0
|
254
|
+
|
255
|
+
tags = []
|
256
|
+
for i, k in enumerate(self.bit_names):
|
257
|
+
if (1 << i) & bitsum:
|
258
|
+
tags.append(k)
|
259
|
+
return ','.join(tags)
|
260
|
+
|
261
|
+
def count_bitsum_relations(self, target_bitsum, relation='='):
|
262
|
+
""" 计算特定关系的 bitsum 数量
|
263
|
+
|
264
|
+
:param int target_bitsum: 目标 bitsum
|
265
|
+
:param str relation: 关系类型,可以是 '=', '⊂', '⊃'
|
266
|
+
假设bitval对应的bit_names为n1,n2,n3,n4。
|
267
|
+
那么bitsum相当于是bitval的一个集合
|
268
|
+
比如a={n1,n3,n4},b={n1,n3},因为a完全包含b,所以认为a⊃b,或者a⊋b、b⊂a、b⊊a
|
269
|
+
:return int: 符合条件的 bitsum 数量
|
270
|
+
"""
|
271
|
+
count = 0
|
272
|
+
if relation == '=':
|
273
|
+
# 直接计算等于 target_bitsum 的数量
|
274
|
+
count = self.bitsum_counter.get(target_bitsum, 0)
|
275
|
+
elif relation == '⊂':
|
276
|
+
# 计算所有被 target_bitsum 包含的 bitsum 的数量
|
277
|
+
for bitsum, num in self.bitsum_counter.items():
|
278
|
+
if bitsum and bitsum & target_bitsum == bitsum:
|
279
|
+
count += num
|
280
|
+
elif relation == '⊃':
|
281
|
+
# 计算所有包含 target_bitsum 的 bitsum 的数量
|
282
|
+
for bitsum, num in self.bitsum_counter.items():
|
283
|
+
if bitsum & target_bitsum == target_bitsum:
|
284
|
+
count += num
|
285
|
+
return count
|
286
|
+
|
287
|
+
def check_bitflag(self, max_bitsum_len=None, reletion='=',
|
288
|
+
filter_zero=False, sort_by=None, *,
|
289
|
+
min_bitsum_len=0):
|
290
|
+
""" 检查并返回 bitsum 关系的 DataFrame
|
291
|
+
|
292
|
+
:param int max_bitsum_len: 最大 bitsum 长度
|
293
|
+
:param str reletion: 关系类型,可以是 '=', '⊂', '⊃'
|
294
|
+
支持输入多个字符,表示要同时计算多种关系
|
295
|
+
:param bool filter_zero: 是否过滤掉零值
|
296
|
+
:param None|str sort_by: 排序字段
|
297
|
+
None, 默认排序
|
298
|
+
count, 按照数量从大到小排序
|
299
|
+
bitsum, 按照 bitsum 从小到大排序
|
300
|
+
:param int min_bitsum_len: 最小 bitsum 长度
|
301
|
+
:return: 包含 bitsum 关系的 DataFrame
|
302
|
+
"""
|
303
|
+
from itertools import combinations
|
304
|
+
|
305
|
+
total = sum(self.bitsum_counter.values())
|
306
|
+
rows, columns = [], ['类型', '名称', '百分比.次数']
|
307
|
+
rows.append([-1, '总计', total])
|
308
|
+
|
309
|
+
if max_bitsum_len is None:
|
310
|
+
max_bitsum_len = len(self.bit_names)
|
311
|
+
|
312
|
+
bitvals = [(1 << i) for i in range(len(self.bit_names))]
|
313
|
+
for m in range(min_bitsum_len, max_bitsum_len + 1):
|
314
|
+
for comb in combinations(bitvals, m):
|
315
|
+
bitsum = sum(comb)
|
316
|
+
count = self.count_bitsum_relations(bitsum, relation=reletion)
|
317
|
+
if filter_zero and count == 0:
|
318
|
+
continue
|
319
|
+
rows.append([f'{reletion}{bitsum}',
|
320
|
+
self.get_bitsum_names(bitsum),
|
321
|
+
count])
|
322
|
+
|
323
|
+
if sort_by == 'count':
|
324
|
+
rows.sort(key=lambda x: x[2], reverse=True)
|
325
|
+
elif sort_by == 'bitsum':
|
326
|
+
rows.sort(key=lambda x: int(x[0][1:]) if isinstance(x[0], str) else x[0])
|
327
|
+
|
328
|
+
df = pd.DataFrame.from_records(rows, columns=columns)
|
329
|
+
df['百分比.次数'] = percentage_and_value(df['百分比.次数'], 2, total=total)
|
330
|
+
return df
|
331
|
+
|
332
|
+
def report(self):
|
333
|
+
""" 生成统计报告 """
|
334
|
+
html_content = []
|
335
|
+
|
336
|
+
html_content.append('<h1>1 包含每一位bitval特征的数量</h1>')
|
337
|
+
df1 = self.check_bitflag(1, '⊃')
|
338
|
+
html_content.append(df1.to_html())
|
339
|
+
|
340
|
+
html_content.append('<h1>2 每一种具体bitsum组合的数量</h1>')
|
341
|
+
df2 = self.check_bitflag(reletion='=', filter_zero=True, sort_by='bitsum')
|
342
|
+
html_content.append(df2.to_html())
|
343
|
+
|
344
|
+
return '\n'.join(html_content)
|
@@ -22,6 +22,8 @@ import humanfriendly
|
|
22
22
|
|
23
23
|
import paddle
|
24
24
|
import paddle.inference as paddle_infer
|
25
|
+
import paddle.io
|
26
|
+
# from paddle.io import DataLoader, Dataset
|
25
27
|
|
26
28
|
from pyxllib.algo.pupil import natural_sort
|
27
29
|
from pyxllib.xl import XlPath, browser
|
@@ -53,18 +55,13 @@ class SequenceDataset(paddle.io.Dataset):
|
|
53
55
|
if self.labels is not None:
|
54
56
|
return x, self.labels[index]
|
55
57
|
else:
|
56
|
-
return x
|
58
|
+
return x
|
57
59
|
|
58
60
|
|
59
61
|
def build_testdata_loader(samples, *, labels=None, transform=None, **kwargs):
|
60
|
-
""" 简化的一个创建paddle的DataLoader的函数。主要用于简化部署阶段的推理。
|
61
|
-
|
62
|
-
:param samples: list类型的输入格式
|
63
62
|
"""
|
64
|
-
|
65
|
-
|
66
|
-
paddle.fluid.dataloader.fetcher._WARNING_TO_LOG = False
|
67
|
-
|
63
|
+
简化的一个创建paddle的DataLoader的函数。主要用于简化部署阶段的推理。
|
64
|
+
"""
|
68
65
|
if isinstance(samples, paddle.io.DataLoader):
|
69
66
|
return samples
|
70
67
|
elif isinstance(samples, paddle.io.Dataset):
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import os
|
2
|
+
import json
|
2
3
|
from json import dumps as jsonDumps
|
3
4
|
from json import loads as jsonLoads
|
4
5
|
from pathlib import Path
|
@@ -423,6 +424,10 @@ class Chat:
|
|
423
424
|
})
|
424
425
|
answer: str = completion.choices[0].message.content
|
425
426
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
427
|
+
|
428
|
+
if response_json:
|
429
|
+
answer = json.loads(answer)
|
430
|
+
|
426
431
|
return answer
|
427
432
|
|
428
433
|
def query_image(self, prompt,
|
@@ -45,7 +45,7 @@ _dir = Path(__file__).parent
|
|
45
45
|
|
46
46
|
setup(
|
47
47
|
name='pyxllib', # pip 安装时用的名字
|
48
|
-
version='0.3.
|
48
|
+
version='0.3.124', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
49
49
|
author='code4101',
|
50
50
|
author_email='877362867@qq.com',
|
51
51
|
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
|