pyxllib 0.3.121__tar.gz → 0.3.123__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.121/pyxllib.egg-info → pyxllib-0.3.123}/PKG-INFO +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/pglib.py +5 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/specialist/download.py +8 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/specialist/filelib.py +4 -4
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/xlsxlib.py +9 -2
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/pupil.py +2 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/jiebalib.py +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/openai2/_core/chat.py +192 -14
- {pyxllib-0.3.121 → pyxllib-0.3.123}/setup.py +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.123}/LICENSE +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/MANIFEST.in +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/README.md +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib.egg-info/requires.txt +11 -11
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/requirements.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.123}/setup.cfg +0 -0
@@ -58,13 +58,17 @@ class Connection(psycopg.Connection, SqlBase):
|
|
58
58
|
def __1_库(self):
|
59
59
|
pass
|
60
60
|
|
61
|
-
def get_db_activities(self):
|
61
|
+
def get_db_activities(self, datname=None):
|
62
62
|
"""
|
63
63
|
检索当前数据库的活动信息。
|
64
|
+
|
65
|
+
:param datname: 这个字段理论上应该要能自动检测出来才对,但这会急着没空钻研,先手动输入吧
|
64
66
|
"""
|
65
67
|
sql = SqlBuilder('pg_stat_activity')
|
66
68
|
sql.select('pid', 'datname', 'usename', 'state', 'query', 'age(now(), query_start) AS "query_age"')
|
67
69
|
sql.where("state = 'active'")
|
70
|
+
if datname:
|
71
|
+
sql.where(f"datname = '{datname}'")
|
68
72
|
return self.exec2dict(sql.build_select()).fetchall()
|
69
73
|
|
70
74
|
def __2_表格(self):
|
@@ -17,13 +17,20 @@ from pyxllib.file.specialist import File, Dir
|
|
17
17
|
|
18
18
|
|
19
19
|
def download_file(url, fn=None, *, encoding=None, if_exists=None, ext=None, temp=False):
|
20
|
-
""" 类似writefile,只是源数据是从url里下载
|
20
|
+
r""" 类似writefile,只是源数据是从url里下载
|
21
21
|
|
22
22
|
:param url: 数据下载链接
|
23
23
|
:param fn: 保存位置,会从url智能提取文件名
|
24
24
|
:param if_exists: 详见 File.write 参数解释
|
25
25
|
:para temp: 将文件写到临时文件夹
|
26
26
|
:return:
|
27
|
+
|
28
|
+
>> download_file(image_url) # 保存在当前工作目录下
|
29
|
+
D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg
|
30
|
+
>> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png") # 指定路径
|
31
|
+
D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png
|
32
|
+
>> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024") # 暂不支持目录
|
33
|
+
ValueError: 不能用目录初始化一个File对象 D:\home\chenkunze\slns\xlproject\xlsln\ckz2023
|
27
34
|
"""
|
28
35
|
if not fn: fn = url.split('/')[-1]
|
29
36
|
root = Dir.TEMP if temp else None
|
@@ -1112,7 +1112,7 @@ class XlPath(type(pathlib.Path())):
|
|
1112
1112
|
s = str(best_match)
|
1113
1113
|
encoding = best_match.encoding
|
1114
1114
|
else:
|
1115
|
-
with open(self, 'r', encoding=encoding) as f:
|
1115
|
+
with open(self, 'r', encoding=encoding, errors=errors) as f:
|
1116
1116
|
s = f.read()
|
1117
1117
|
|
1118
1118
|
# 如果用\r\n作为换行符会有一些意外不好处理
|
@@ -1212,7 +1212,7 @@ class XlPath(type(pathlib.Path())):
|
|
1212
1212
|
:param int max_items: 限制读取的条目数,默认为None,表示读取所有条目
|
1213
1213
|
:param int batch_size:
|
1214
1214
|
默认为None,表示一次性读取所有数据
|
1215
|
-
|
1215
|
+
如果设置了数值,则会流式读取,常用于太大,超过内存大小等的jsonl文件读取
|
1216
1216
|
注意如果设置了大小,只是底层每次一批读取的大小,但返回的data仍然是一维的数据格式迭代器
|
1217
1217
|
:return: 返回读取到的数据列表,如果return_mode为True,则同时返回文件编码格式
|
1218
1218
|
|
@@ -1248,10 +1248,10 @@ class XlPath(type(pathlib.Path())):
|
|
1248
1248
|
else:
|
1249
1249
|
return data
|
1250
1250
|
|
1251
|
-
def write_jsonl(self, list_data, ensure_ascii=False, default=None, mode='w'):
|
1251
|
+
def write_jsonl(self, list_data, ensure_ascii=False, default=None, mode='w', errors=None):
|
1252
1252
|
""" 由于这种格式主要是跟商汤这边对接,就尽量跟它们的格式进行兼容 """
|
1253
1253
|
content = '\n'.join([json.dumps(x, ensure_ascii=ensure_ascii, default=default) for x in list_data])
|
1254
|
-
self.write_text_unix(content + '\n', mode=mode)
|
1254
|
+
self.write_text_unix(content + '\n', mode=mode, errors=errors)
|
1255
1255
|
|
1256
1256
|
def add_json_line(self, data, ensure_ascii=False, default=None, mode='a'):
|
1257
1257
|
""" 在文件末尾添加一行JSON数据 """
|
@@ -121,7 +121,7 @@ def is_valid_excel_address(address):
|
|
121
121
|
return is_valid_excel_cell(address)
|
122
122
|
|
123
123
|
|
124
|
-
@run_once('str'
|
124
|
+
@run_once('str')
|
125
125
|
def xlfmt2pyfmt_date(xl_fmt):
|
126
126
|
""" 日期的渲染操作
|
127
127
|
|
@@ -2478,7 +2478,11 @@ def extract_workbook_summary2(file_path, *,
|
|
2478
2478
|
res['fileName'] = file_path.name
|
2479
2479
|
start_time = time.time()
|
2480
2480
|
wb, suffix = load_as_xlsx_file(file_path, keep_links=keep_links, keep_vba=keep_vba)
|
2481
|
-
|
2481
|
+
if suffix:
|
2482
|
+
res['fileType'] = suffix
|
2483
|
+
else:
|
2484
|
+
res['error'] = 'fileType error'
|
2485
|
+
|
2482
2486
|
load_time = time.time() - start_time
|
2483
2487
|
if wb is None: # 不支持的文件类型,不报错,只是返回最基本的文件名信息
|
2484
2488
|
if return_mode == 1:
|
@@ -2959,6 +2963,9 @@ class WorkbookSummary3:
|
|
2959
2963
|
return y
|
2960
2964
|
|
2961
2965
|
x = summary2
|
2966
|
+
if 'error' in x:
|
2967
|
+
return x
|
2968
|
+
|
2962
2969
|
y = {
|
2963
2970
|
'fileName': x['fileName'],
|
2964
2971
|
'fileType': x['fileType'],
|
@@ -1129,6 +1129,7 @@ def support_multi_processes(default_processes=1):
|
|
1129
1129
|
def wrapper(*args, **kwargs):
|
1130
1130
|
process_count = int(kwargs.pop('process_count', default_processes))
|
1131
1131
|
process_id = kwargs.pop('process_id', None)
|
1132
|
+
shell = kwargs.pop('shell', False)
|
1132
1133
|
|
1133
1134
|
if process_count == 1 or process_id is not None:
|
1134
1135
|
if process_id is None:
|
@@ -1150,7 +1151,7 @@ def support_multi_processes(default_processes=1):
|
|
1150
1151
|
for k, v in kwargs.items():
|
1151
1152
|
cmds.append(f'--{k}') # 添加关键字参数的键
|
1152
1153
|
cmds.append(str(v)) # 添加关键字参数的值
|
1153
|
-
mpl.add_process_python(sys.argv[0], cmds)
|
1154
|
+
mpl.add_process_python(sys.argv[0], cmds, shell=shell)
|
1154
1155
|
mpl.run_endless()
|
1155
1156
|
|
1156
1157
|
return wrapper
|
@@ -1,9 +1,14 @@
|
|
1
|
+
import os
|
1
2
|
from json import dumps as jsonDumps
|
2
3
|
from json import loads as jsonLoads
|
3
4
|
from pathlib import Path
|
4
5
|
from typing import List, Literal
|
6
|
+
import base64
|
7
|
+
|
5
8
|
from openai import OpenAI, AsyncOpenAI
|
6
9
|
|
10
|
+
from pyxllib.file.specialist import download_file
|
11
|
+
|
7
12
|
|
8
13
|
class AKPool:
|
9
14
|
""" 轮询获取api_key """
|
@@ -106,24 +111,35 @@ class Chat:
|
|
106
111
|
"""
|
107
112
|
|
108
113
|
recently_request_data: dict # 最近一次请求所用的参数
|
114
|
+
default_api_key = None
|
115
|
+
default_base_url = "https://console.chatdata.online/v1"
|
109
116
|
|
110
117
|
def __init__(self,
|
111
118
|
# kwargs
|
112
|
-
api_key: str|AKPool,
|
119
|
+
api_key: str | AKPool = None,
|
113
120
|
base_url: str = None, # base_url 参数用于修改基础URL
|
114
121
|
timeout=None,
|
115
122
|
max_retries=None,
|
116
123
|
http_client=None,
|
117
124
|
# request_kwargs
|
118
|
-
model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview",
|
119
|
-
|
125
|
+
model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview",
|
126
|
+
"gpt-4", "gpt-4-0314", "gpt-4-0613",
|
127
|
+
"gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-0613", "gpt-3.5-turbo",
|
128
|
+
"gpt-4o", "gpt-4-turbo"] = "gpt-3.5-turbo",
|
120
129
|
# Chat
|
121
|
-
msg_max_count: int=None,
|
130
|
+
msg_max_count: int = None,
|
122
131
|
# kwargs
|
123
132
|
**kwargs,
|
124
133
|
):
|
134
|
+
"""
|
135
|
+
|
136
|
+
:param kwargs: 主要是供OpenAI初始化时使用的参数
|
137
|
+
|
138
|
+
"""
|
139
|
+
api_key = api_key or self.default_api_key or os.environ.get("OPENAI_API_KEY")
|
140
|
+
|
125
141
|
api_base = kwargs.pop('api_base', None)
|
126
|
-
base_url = base_url or api_base
|
142
|
+
base_url = base_url or api_base or self.default_base_url or os.environ.get("OPENAI_BASE_URL")
|
127
143
|
MsgMaxCount = kwargs.pop('MsgMaxCount', None)
|
128
144
|
msg_max_count = msg_max_count or MsgMaxCount
|
129
145
|
|
@@ -134,16 +150,22 @@ class Chat:
|
|
134
150
|
|
135
151
|
self.reset_api_key(api_key)
|
136
152
|
self._kwargs = kwargs
|
137
|
-
self._request_kwargs = {'model':model}
|
153
|
+
self._request_kwargs = {'model': model}
|
138
154
|
self._messages = Temque(maxlen=msg_max_count)
|
139
155
|
|
140
|
-
def
|
156
|
+
def __1_原作者提供功能(self):
|
157
|
+
pass
|
158
|
+
|
159
|
+
def reset_api_key(self, api_key: str | AKPool):
|
141
160
|
if isinstance(api_key, AKPool):
|
142
161
|
self._akpool = api_key
|
143
162
|
else:
|
144
163
|
self._akpool = AKPool([api_key])
|
145
164
|
|
146
|
-
def request(self, text: str=None, **kwargs):
|
165
|
+
def request(self, text: str = None, **kwargs):
|
166
|
+
"""
|
167
|
+
:param kwargs: 支持本次请求的参数覆盖全局 self._request_kwargs 的参数
|
168
|
+
"""
|
147
169
|
messages = [{"role": "user", "content": text}]
|
148
170
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
149
171
|
assert messages
|
@@ -160,7 +182,7 @@ class Chat:
|
|
160
182
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
161
183
|
return answer
|
162
184
|
|
163
|
-
def stream_request(self, text: str=None, **kwargs):
|
185
|
+
def stream_request(self, text: str = None, **kwargs):
|
164
186
|
messages = [{"role": "user", "content": text}]
|
165
187
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
166
188
|
assert messages
|
@@ -180,7 +202,7 @@ class Chat:
|
|
180
202
|
yield content
|
181
203
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
182
204
|
|
183
|
-
async def async_request(self, text: str=None, **kwargs):
|
205
|
+
async def async_request(self, text: str = None, **kwargs):
|
184
206
|
messages = [{"role": "user", "content": text}]
|
185
207
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
186
208
|
assert messages
|
@@ -197,7 +219,7 @@ class Chat:
|
|
197
219
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
198
220
|
return answer
|
199
221
|
|
200
|
-
async def async_stream_request(self, text: str=None, **kwargs):
|
222
|
+
async def async_stream_request(self, text: str = None, **kwargs):
|
201
223
|
messages = [{"role": "user", "content": text}]
|
202
224
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
203
225
|
assert messages
|
@@ -221,7 +243,7 @@ class Chat:
|
|
221
243
|
'''
|
222
244
|
回滚对话
|
223
245
|
'''
|
224
|
-
self._messages.core[-2 * n
|
246
|
+
self._messages.core[-2 * n:] = []
|
225
247
|
for x in self._messages.core[-2:]:
|
226
248
|
x = x["obj"]
|
227
249
|
print(f"[{x['role']}]:{x['content']}")
|
@@ -241,7 +263,7 @@ class Chat:
|
|
241
263
|
def fetch_messages(self):
|
242
264
|
return list(self._messages)
|
243
265
|
|
244
|
-
def add_dialogs(self, *ms: dict|system_msg|user_msg|assistant_msg):
|
266
|
+
def add_dialogs(self, *ms: dict | system_msg | user_msg | assistant_msg):
|
245
267
|
'''
|
246
268
|
添加历史对话
|
247
269
|
'''
|
@@ -274,4 +296,160 @@ class Chat:
|
|
274
296
|
""" 载入存档 """
|
275
297
|
jt = Path(fpath).read_text(encoding="utf8")
|
276
298
|
self._messages.add_many(*jsonLoads(jt))
|
277
|
-
return True
|
299
|
+
return True
|
300
|
+
|
301
|
+
def __2_扩展功能(self):
|
302
|
+
pass
|
303
|
+
|
304
|
+
def add_message(self, message):
|
305
|
+
""" 添加单条历史消息记录 """
|
306
|
+
self._messages.add_many(message)
|
307
|
+
|
308
|
+
def add_messages(self, messages: list[dict]):
|
309
|
+
""" 添加多条历史消息记录 """
|
310
|
+
self._messages.add_many(*messages)
|
311
|
+
|
312
|
+
def parse_cont_to_conts(self, in_cont) -> list[dict]:
|
313
|
+
""" 自定义的一套内容设置格式,用来简化openai源生的配置逻辑
|
314
|
+
|
315
|
+
:return: 注意虽然看似输入是一个cont,实际可能解析出多个conts,所以返回的是list类型
|
316
|
+
"""
|
317
|
+
|
318
|
+
def encode_image(image_path):
|
319
|
+
""" 读取本地图片文件 """
|
320
|
+
with open(image_path, "rb") as image_file:
|
321
|
+
return base64.b64encode(image_file.read()).decode('utf-8')
|
322
|
+
|
323
|
+
def parse_image_file(image_file):
|
324
|
+
suffix = Path(image_file).suffix[1:].lower()
|
325
|
+
if suffix == 'jpg':
|
326
|
+
suffix = 'jpeg'
|
327
|
+
base64_image = encode_image(image_file)
|
328
|
+
image_url = {'url': f"data:image/{suffix};base64,{base64_image}"}
|
329
|
+
return image_url
|
330
|
+
|
331
|
+
if isinstance(in_cont, str):
|
332
|
+
return [{"type": "text", "text": in_cont}]
|
333
|
+
|
334
|
+
if isinstance(in_cont, dict):
|
335
|
+
if 'image_url' in in_cont and isinstance(in_cont['image_url'], str):
|
336
|
+
url = in_cont['image_url']
|
337
|
+
return [{"type": "image_url", "image_url": {'url': url}}]
|
338
|
+
if 'image_file' in in_cont:
|
339
|
+
image_url = parse_image_file(in_cont['image_file'])
|
340
|
+
in_cont.pop('image_file')
|
341
|
+
if in_cont:
|
342
|
+
image_url.update(in_cont)
|
343
|
+
return [{"type": "image_url", "image_url": image_url}]
|
344
|
+
|
345
|
+
if 'image_urls' in in_cont:
|
346
|
+
return [{"type": "image_url", "image_url": {'url': x}} for x in in_cont['image_urls']]
|
347
|
+
if 'image_files' in in_cont:
|
348
|
+
return [{"type": "image_url", "image_url": parse_image_file(x)} for x in in_cont['image_files']]
|
349
|
+
|
350
|
+
return [in_cont]
|
351
|
+
else:
|
352
|
+
raise ValueError
|
353
|
+
|
354
|
+
def parse_conts_to_message(self, conts, role='user'):
|
355
|
+
""" 可以用一种简化的格式,来配置用户要提问的信息内容
|
356
|
+
|
357
|
+
:param conts:
|
358
|
+
str, 单条文本提问
|
359
|
+
list,
|
360
|
+
类似这样的数据,可以完全兼容openai的格式
|
361
|
+
[
|
362
|
+
{"type": "text", "text": "What’s in this image?"},
|
363
|
+
{
|
364
|
+
"type": "image_url",
|
365
|
+
"image_url": {
|
366
|
+
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
|
367
|
+
},
|
368
|
+
},
|
369
|
+
]
|
370
|
+
也可以简化:用我这里自定义的简化格式
|
371
|
+
'text' 文本格式直接输入
|
372
|
+
{'image_url': 'https://...'}
|
373
|
+
{'image_file': 'path/to/file'}
|
374
|
+
"""
|
375
|
+
message = {"role": role}
|
376
|
+
|
377
|
+
if isinstance(conts, str):
|
378
|
+
message["content"] = conts
|
379
|
+
else:
|
380
|
+
conts = conts if isinstance(conts, (list, tuple)) else [conts]
|
381
|
+
message["content"] = []
|
382
|
+
for x in conts:
|
383
|
+
message["content"] += self.parse_cont_to_conts(x)
|
384
|
+
|
385
|
+
return message
|
386
|
+
|
387
|
+
def add_message_from_conts(self, conts, role='user'):
|
388
|
+
""" 添加content版本的message """
|
389
|
+
message = self.parse_conts_to_message(conts, role=role)
|
390
|
+
self._messages.add_many(message)
|
391
|
+
|
392
|
+
def query(self, conts=None, response_json=None, **kwargs):
|
393
|
+
""" 提交一个请求,并获得回复结果
|
394
|
+
|
395
|
+
:param conts:
|
396
|
+
None, content可以不输入,这种一般是外部已经提前配置好各种add_message,这里只要直接请求即可
|
397
|
+
str, 常规的文本提问使用
|
398
|
+
list, 一般是搭配图片的提问使用
|
399
|
+
:param response_json: 是否返回json格式
|
400
|
+
注意就算这个参数为True,提示里也要显示说明需要json格式。官方示例是在初始的role=system中配置
|
401
|
+
"""
|
402
|
+
# 1 total_messages
|
403
|
+
if conts:
|
404
|
+
messages = [self.parse_conts_to_message(conts)]
|
405
|
+
messages += (kwargs.pop('messages', None) or [])
|
406
|
+
else:
|
407
|
+
messages = []
|
408
|
+
total_messages = list(self._messages + messages)
|
409
|
+
assert total_messages
|
410
|
+
|
411
|
+
if response_json:
|
412
|
+
kwargs['response_format'] = {"type": "json_object"}
|
413
|
+
|
414
|
+
# 2 请求结果
|
415
|
+
self.recently_request_data = {
|
416
|
+
'api_key': (api_key := self._akpool.fetch_key()),
|
417
|
+
}
|
418
|
+
completion = OpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
|
419
|
+
**self._request_kwargs, # 全局参数
|
420
|
+
**kwargs, # 单次请求的参数覆盖全局参数
|
421
|
+
"messages": total_messages,
|
422
|
+
"stream": False,
|
423
|
+
})
|
424
|
+
answer: str = completion.choices[0].message.content
|
425
|
+
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
426
|
+
return answer
|
427
|
+
|
428
|
+
def query_image(self, prompt,
|
429
|
+
size='1024x1024', model='dall-e-3', quality='standard', n=1,
|
430
|
+
save_file=None,
|
431
|
+
**kwargs):
|
432
|
+
""" 生成图片,注意,此功能不支持引用旧历史记录,而是一个独立的记录来请求model获得一张图
|
433
|
+
|
434
|
+
:param save_file: 指定保存到本地某个位置
|
435
|
+
"""
|
436
|
+
self.recently_request_data = {
|
437
|
+
'api_key': (api_key := self._akpool.fetch_key()),
|
438
|
+
}
|
439
|
+
client = OpenAI(api_key=api_key, **self._kwargs)
|
440
|
+
response = client.images.generate(
|
441
|
+
model=model,
|
442
|
+
prompt=prompt,
|
443
|
+
size=size,
|
444
|
+
quality=quality,
|
445
|
+
n=n,
|
446
|
+
**kwargs
|
447
|
+
)
|
448
|
+
image_url = response.data[0].url
|
449
|
+
self.add_message_from_conts(prompt, 'user')
|
450
|
+
self.add_message_from_conts([{'image_url': image_url}], 'assistant')
|
451
|
+
|
452
|
+
if save_file:
|
453
|
+
download_file(image_url, save_file)
|
454
|
+
|
455
|
+
return image_url
|
@@ -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.123', # 当前版本,每次更新上传到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
|