pyxllib 0.3.129__tar.gz → 0.3.130__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.130/PKG-INFO +86 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/intervals.py +1 -1
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/newbie.py +54 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/pupil.py +1 -1
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/specialist/filelib.py +1 -1
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/xlsxlib.py +1 -1
- pyxllib-0.3.130/pyxllib/file/xlsyncfile.py +316 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/__init__.py +2 -1
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/nestenv.py +1 -1
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/specialist/ptag.py +2 -2
- pyxllib-0.3.130/pyxllib.egg-info/PKG-INFO +86 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/setup.py +1 -1
- pyxllib-0.3.129/PKG-INFO +0 -38
- pyxllib-0.3.129/pyxllib.egg-info/PKG-INFO +0 -38
- {pyxllib-0.3.129 → pyxllib-0.3.130}/LICENSE +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/MANIFEST.in +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/README.md +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/templates/echart_base.html +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/templates/highlight_code.html +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/templates/latex_editor.html +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib.egg-info/requires.txt +15 -15
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/openai2/_core/chat.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/requirements.txt +0 -0
- {pyxllib-0.3.129 → pyxllib-0.3.130}/setup.cfg +0 -0
pyxllib-0.3.130/PKG-INFO
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: pyxllib
|
3
|
+
Version: 0.3.130
|
4
|
+
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
|
+
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
|
+
Author: code4101
|
7
|
+
Author-email: 877362867@qq.com
|
8
|
+
License: Apache License 2.0
|
9
|
+
Keywords: pyxllib,pyxlpr
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
11
|
+
Classifier: Intended Audience :: Developers
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
13
|
+
Classifier: Operating System :: OS Independent
|
14
|
+
Requires-Python: >=3.6
|
15
|
+
Description-Content-Type: text/markdown
|
16
|
+
License-File: LICENSE
|
17
|
+
Requires-Dist: arrow
|
18
|
+
Requires-Dist: charset-normalizer
|
19
|
+
Requires-Dist: requests
|
20
|
+
Requires-Dist: qiniu
|
21
|
+
Requires-Dist: pyyaml
|
22
|
+
Requires-Dist: loguru
|
23
|
+
Requires-Dist: humanfriendly
|
24
|
+
Requires-Dist: tqdm
|
25
|
+
Requires-Dist: ujson
|
26
|
+
Requires-Dist: Deprecated
|
27
|
+
Requires-Dist: pyperclip
|
28
|
+
Requires-Dist: envariable
|
29
|
+
Requires-Dist: decorator
|
30
|
+
Requires-Dist: more-itertools
|
31
|
+
Requires-Dist: fire
|
32
|
+
Requires-Dist: xlrd
|
33
|
+
Requires-Dist: pympler
|
34
|
+
Requires-Dist: lxml
|
35
|
+
Requires-Dist: beautifulsoup4
|
36
|
+
Requires-Dist: numpy
|
37
|
+
Requires-Dist: Jinja2
|
38
|
+
Requires-Dist: pandas>=0.23.4
|
39
|
+
Requires-Dist: pillow
|
40
|
+
Provides-Extra: xlcv
|
41
|
+
Requires-Dist: opencv-python; extra == "xlcv"
|
42
|
+
Requires-Dist: pillow; extra == "xlcv"
|
43
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
44
|
+
Provides-Extra: xlai
|
45
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlai"
|
46
|
+
Requires-Dist: pynvml; extra == "xlai"
|
47
|
+
Requires-Dist: opencv-python; extra == "xlai"
|
48
|
+
Requires-Dist: visdom; extra == "xlai"
|
49
|
+
Requires-Dist: pillow; extra == "xlai"
|
50
|
+
Provides-Extra: xlall
|
51
|
+
Requires-Dist: xlrd; extra == "xlall"
|
52
|
+
Requires-Dist: html2text; extra == "xlall"
|
53
|
+
Requires-Dist: flask-restful; extra == "xlall"
|
54
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
55
|
+
Requires-Dist: flask-jwt-extended; extra == "xlall"
|
56
|
+
Requires-Dist: flask; extra == "xlall"
|
57
|
+
Requires-Dist: ujson; extra == "xlall"
|
58
|
+
Requires-Dist: arts; extra == "xlall"
|
59
|
+
Requires-Dist: flask-wtf; extra == "xlall"
|
60
|
+
Requires-Dist: opencv-python; extra == "xlall"
|
61
|
+
Requires-Dist: sentencepiece; extra == "xlall"
|
62
|
+
Requires-Dist: openai2; extra == "xlall"
|
63
|
+
Requires-Dist: fastapi; extra == "xlall"
|
64
|
+
Requires-Dist: zhconv; extra == "xlall"
|
65
|
+
Requires-Dist: pillow; extra == "xlall"
|
66
|
+
Requires-Dist: uvicorn; extra == "xlall"
|
67
|
+
Requires-Dist: flask-cors; extra == "xlall"
|
68
|
+
|
69
|
+
# 1 install
|
70
|
+
|
71
|
+
```
|
72
|
+
pip install pyxllib
|
73
|
+
```
|
74
|
+
|
75
|
+
more details: https://www.yuque.com/xlpr/pyxllib/install
|
76
|
+
|
77
|
+
# 2 document
|
78
|
+
|
79
|
+
document: https://www.yuque.com/xlpr/pyxllib.
|
80
|
+
Work hard to improve, welcome more assistant partners.
|
81
|
+
|
82
|
+
# 3 Acknowledge
|
83
|
+
|
84
|
+
This project uses PyCharm to develop.
|
85
|
+
Thanks to [JetBrains'](https://www.jetbrains.com/?from=pyxllib) support
|
86
|
+
of [free license for open sourse project development](https://pycharm.iswbm.com/c01/c01_05.html).
|
@@ -164,3 +164,57 @@ def cvsecs(time):
|
|
164
164
|
return time
|
165
165
|
|
166
166
|
return sum(mult * part for mult, part in zip(factors, reversed(time)))
|
167
|
+
|
168
|
+
|
169
|
+
def find_optimal_page_size(total_items, page_sizes, seen_items=0):
|
170
|
+
"""
|
171
|
+
找到最优的分页大小,使得最后一页的新样本数尽可能多,已见样本数尽可能少。
|
172
|
+
本函数由gpt-o1生成。
|
173
|
+
|
174
|
+
:param int total_items: 总的条目数(样本数)。
|
175
|
+
:param List[int] page_sizes: 可供选择的分页大小列表。
|
176
|
+
:param int seen_items: 已经看过的样本数,默认为0。
|
177
|
+
:return: Tuple[int, int, int], 包含最优的分页大小、最后一页的新样本数、最后一页的已见样本数。
|
178
|
+
|
179
|
+
>>> find_optimal_page_size(64, [2, 5, 10, 14, 20, 50, 100])
|
180
|
+
(100, 64, 0)
|
181
|
+
>>> find_optimal_page_size(64, [2, 5, 10, 14, 20, 50, 100], seen_items=55)
|
182
|
+
(50, 9, 5)
|
183
|
+
"""
|
184
|
+
page_sizes = sorted(set(page_sizes), reverse=True) # 去重并从大到小排序
|
185
|
+
max_new_items = -1
|
186
|
+
min_seen_items_in_page = total_items + 1 # 初始化为一个大于可能的最大值
|
187
|
+
optimal_page_size = None
|
188
|
+
total_new_items = total_items - seen_items # 总的新样本数
|
189
|
+
|
190
|
+
for page_size in page_sizes:
|
191
|
+
if page_size <= 0:
|
192
|
+
continue # 跳过非正整数的分页大小
|
193
|
+
|
194
|
+
total_pages = -(-total_items // page_size) # 等价于 math.ceil(total_items / page_size)
|
195
|
+
start_index = (total_pages - 1) * page_size + 1
|
196
|
+
end_index = min(total_pages * page_size, total_items)
|
197
|
+
last_page_indices = range(start_index, end_index + 1)
|
198
|
+
|
199
|
+
# 计算新样本数和已见样本数
|
200
|
+
new_items_in_page = len([i for i in last_page_indices if i > seen_items])
|
201
|
+
seen_items_in_page = len([i for i in last_page_indices if i <= seen_items])
|
202
|
+
|
203
|
+
# 更新最优分页大小
|
204
|
+
if new_items_in_page > max_new_items:
|
205
|
+
max_new_items = new_items_in_page
|
206
|
+
min_seen_items_in_page = seen_items_in_page
|
207
|
+
optimal_page_size = page_size
|
208
|
+
# 如果已达到最大可能的新样本数且已见样本数为 0,提前退出
|
209
|
+
if max_new_items == total_new_items and min_seen_items_in_page == 0:
|
210
|
+
break
|
211
|
+
elif new_items_in_page == max_new_items and seen_items_in_page < min_seen_items_in_page:
|
212
|
+
min_seen_items_in_page = seen_items_in_page
|
213
|
+
optimal_page_size = page_size
|
214
|
+
if min_seen_items_in_page == 0:
|
215
|
+
break
|
216
|
+
# 如果当前的 page_size 已经小于或等于最大新样本数,后续的 page_size 不会有更好的结果,可以退出循环
|
217
|
+
elif page_size <= max_new_items:
|
218
|
+
break
|
219
|
+
|
220
|
+
return optimal_page_size, max_new_items, min_seen_items_in_page
|
@@ -923,7 +923,7 @@ class XlPath(type(pathlib.Path())):
|
|
923
923
|
res.add(p.relative_to(self).as_posix())
|
924
924
|
return res
|
925
925
|
|
926
|
-
def relpath(self, ref_dir) ->
|
926
|
+
def relpath(self, ref_dir) -> 'XlPath':
|
927
927
|
r""" 当前路径,相对于ref_dir的路径位置
|
928
928
|
|
929
929
|
>>> File('C:/a/b/c.txt').relpath('C:/a/')
|
@@ -766,7 +766,7 @@ class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCel
|
|
766
766
|
# openpyxl的机制,如果没有配置日期格式,读取到的是默认的'mm-dd-yy',其实在中文场景,默认格式应该是后者
|
767
767
|
if fmt == 'mm-dd-yy':
|
768
768
|
return 'yyyy/m/d' # 中文的默认日期格式
|
769
|
-
elif fmt == 'yyyy\-mm\-dd': # 不知道为什么会有提取到这种\的情况,先暴力替换了
|
769
|
+
elif fmt == r'yyyy\-mm\-dd': # 不知道为什么会有提取到这种\的情况,先暴力替换了
|
770
770
|
fmt = 'yyyy-mm-dd'
|
771
771
|
return fmt
|
772
772
|
|
@@ -0,0 +1,316 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/10/12
|
6
|
+
|
7
|
+
"""
|
8
|
+
我们自己的一套利用后端服务进行文件同步的工具
|
9
|
+
"""
|
10
|
+
|
11
|
+
import os
|
12
|
+
|
13
|
+
from tqdm import tqdm
|
14
|
+
import requests
|
15
|
+
|
16
|
+
from pyxllib.file.specialist import XlPath, GetEtag
|
17
|
+
|
18
|
+
|
19
|
+
class SyncFileClient:
|
20
|
+
"""
|
21
|
+
|
22
|
+
注意:该类填写的路径,一律是相对local_root、remote_root的路径,不是当前实际工作目录下的路径!
|
23
|
+
可以通过把local_host设为空的来实现一些特殊精细化的操作
|
24
|
+
但一般推荐还是都把local_root、remote_root设置上
|
25
|
+
"""
|
26
|
+
|
27
|
+
def __1_basic(self):
|
28
|
+
pass
|
29
|
+
|
30
|
+
def __init__(self, host, token=None):
|
31
|
+
"""
|
32
|
+
:param host: 可以只写主机名
|
33
|
+
"""
|
34
|
+
token = token or os.environ.get("XL_COMMON_SERVER_TOKEN")
|
35
|
+
self.headers = {
|
36
|
+
'Authorization': f'Bearer {token}',
|
37
|
+
}
|
38
|
+
self.local_root = None
|
39
|
+
self.remote_root = None
|
40
|
+
self.host = self.link_host(host)
|
41
|
+
|
42
|
+
def link_host(self, hostname):
|
43
|
+
from requests.exceptions import Timeout
|
44
|
+
|
45
|
+
host = f'https://xmutpriu.com/{hostname}'
|
46
|
+
resp = requests.get(f'{host}/common/get_local_server', headers=self.headers)
|
47
|
+
ip = resp.json()['ip']
|
48
|
+
|
49
|
+
if ip:
|
50
|
+
try:
|
51
|
+
resp = requests.get(f'{ip}/{hostname}/healthy', timeout=5)
|
52
|
+
if resp.status_code == 200 and resp.json() == 'OK':
|
53
|
+
host = f'{ip}/{hostname}'
|
54
|
+
except Timeout:
|
55
|
+
pass
|
56
|
+
except Exception as e:
|
57
|
+
raise e
|
58
|
+
|
59
|
+
remote_root = requests.get(f'{host}/common/get_wkdir', headers=self.headers).json()['wkdir']
|
60
|
+
self.remote_root = XlPath(remote_root)
|
61
|
+
|
62
|
+
return host
|
63
|
+
|
64
|
+
def get_abs_local_path(self, local_path, remote_path=None):
|
65
|
+
# 1 如果需要,从远程路径推测本地路径
|
66
|
+
if local_path is None and remote_path is not None:
|
67
|
+
local_path = remote_path
|
68
|
+
|
69
|
+
# 2 本地存储的文件路径
|
70
|
+
if self.local_root:
|
71
|
+
return self.local_root / local_path
|
72
|
+
else:
|
73
|
+
return XlPath(local_path)
|
74
|
+
|
75
|
+
def get_abs_remote_path(self, remote_path, local_path=None):
|
76
|
+
# 1 如果需要,从本地路径推测远程路径
|
77
|
+
if remote_path is None and local_path is not None:
|
78
|
+
remote_path = local_path
|
79
|
+
|
80
|
+
# 2 远程存储的文件路径
|
81
|
+
if self.remote_root:
|
82
|
+
return self.remote_root / remote_path
|
83
|
+
else:
|
84
|
+
return XlPath(remote_path)
|
85
|
+
|
86
|
+
def __2_sync(self):
|
87
|
+
pass
|
88
|
+
|
89
|
+
def upload_file(self, local_file=None, remote_file=None, relpath=True):
|
90
|
+
"""
|
91
|
+
:param str remote_file: 要存储的远程文件路径,默认可以不指定,自动通过local_file存储到对称位置
|
92
|
+
|
93
|
+
使用示例:
|
94
|
+
sfc = SyncFileClient('codepc_mi15')
|
95
|
+
sfc.upload_file('abc/README.md')
|
96
|
+
sfc.upload_file('abc/README.md', 'bcd/1.md')
|
97
|
+
"""
|
98
|
+
file = [local_file]
|
99
|
+
if remote_file:
|
100
|
+
file.append(remote_file)
|
101
|
+
return self.upload_files([file], relpath=relpath)
|
102
|
+
|
103
|
+
def upload_files(self, files, relpath=True):
|
104
|
+
"""
|
105
|
+
:param list[local_file<, remote_path>] files:
|
106
|
+
remote_path可选,未写的时候会自动填充
|
107
|
+
:return:
|
108
|
+
|
109
|
+
todo 加进度条?不过问了下gpt,这个实现好像有点复杂,先不折腾了。本来其实就推荐单个单个文件上传,在外部进行进度展示管控。
|
110
|
+
|
111
|
+
使用示例:
|
112
|
+
sfc = SyncFileClient('codepc_mi15')
|
113
|
+
print(sfc.upload_files(['data/d231120禅宗1期4阶.xlsx', 'data/d231120禅宗1期4阶2.xlsx']))
|
114
|
+
"""
|
115
|
+
# 1 映射出目标路径
|
116
|
+
files2 = []
|
117
|
+
for file in files:
|
118
|
+
if not isinstance(file, (list, tuple)):
|
119
|
+
local_file, remote_file = file, None
|
120
|
+
else:
|
121
|
+
local_file, remote_file = file
|
122
|
+
|
123
|
+
if relpath:
|
124
|
+
local_file = self.get_abs_local_path(local_file, remote_file)
|
125
|
+
remote_file = self.get_abs_remote_path(remote_file, local_file)
|
126
|
+
|
127
|
+
files2.append([local_file, remote_file.as_posix()])
|
128
|
+
|
129
|
+
files3 = [('files', (remote_file, open(local_file, 'rb'))) for local_file, remote_file in files2]
|
130
|
+
|
131
|
+
# 4 发送请求
|
132
|
+
resp = requests.post(f'{self.host}/common/upload_files',
|
133
|
+
headers=self.headers,
|
134
|
+
files=files3)
|
135
|
+
return resp.json()
|
136
|
+
|
137
|
+
def download_file(self, remote_file=None, local_file=None, relpath=True):
|
138
|
+
"""
|
139
|
+
:param str remote_file: 要下载的远程文件路径,相对get_wkdir下的路径
|
140
|
+
:param str local_file: 下载到本地的文件路径,默认可以不指定,自动通过remote_file存储到对称位置
|
141
|
+
|
142
|
+
使用示例:
|
143
|
+
sfc = SyncFileClient('http://yourserver.com', headers={"Authorization": "Bearer your_token"})
|
144
|
+
sfc.download_file('.vscode/launch.json', 'launch.json')
|
145
|
+
"""
|
146
|
+
if relpath:
|
147
|
+
local_file = self.get_abs_local_path(local_file, remote_file)
|
148
|
+
remote_file = self.get_abs_remote_path(remote_file, local_file)
|
149
|
+
|
150
|
+
data = {'file': remote_file.as_posix()}
|
151
|
+
# 使用 stream=True 开启流式处理
|
152
|
+
with requests.post(f'{self.host}/common/download_file',
|
153
|
+
headers=self.headers, json=data, stream=True) as resp:
|
154
|
+
if resp.status_code == 200:
|
155
|
+
# 以二进制方式写入文件
|
156
|
+
with open(local_file, 'wb') as f:
|
157
|
+
# 分块写入文件,每次 1MB (1024 * 1024 bytes)
|
158
|
+
for chunk in resp.iter_content(chunk_size=1024 * 1024):
|
159
|
+
if chunk: # 忽略keep-alive的空块
|
160
|
+
f.write(chunk)
|
161
|
+
return local_file
|
162
|
+
else:
|
163
|
+
# 处理其他状态码,抛出异常或进行错误处理
|
164
|
+
print(f"Error: Unable to download file, status code {resp.status_code}")
|
165
|
+
return None
|
166
|
+
|
167
|
+
def verify_etag(self, local_file=None, remote_file=None, relpath=True):
|
168
|
+
"""
|
169
|
+
:param relpath: 是否使用的是相对路径
|
170
|
+
当不使用relpath的时候,注意local_file、remote_file都是手动必填的XlPath类型字段
|
171
|
+
:return:
|
172
|
+
"""
|
173
|
+
if relpath:
|
174
|
+
local_file = self.get_abs_local_path(local_file, remote_file)
|
175
|
+
remote_file = self.get_abs_remote_path(remote_file, local_file)
|
176
|
+
local_etag = GetEtag.from_file(local_file)
|
177
|
+
json_data = {'file': remote_file.as_posix(), 'etag': local_etag}
|
178
|
+
resp = requests.post(f'{self.host}/common/check_file_etag',
|
179
|
+
headers=self.headers,
|
180
|
+
json=json_data)
|
181
|
+
return resp.json()
|
182
|
+
|
183
|
+
def upload_dir(self,
|
184
|
+
local_dir=None,
|
185
|
+
remote_dir=None,
|
186
|
+
*,
|
187
|
+
delete_local_file=False,
|
188
|
+
verify_etag=False,
|
189
|
+
relpath=True):
|
190
|
+
"""
|
191
|
+
:param local_dir: 本地目录
|
192
|
+
:param remote_dir: 远程目录
|
193
|
+
:param delete_local_file: 每个文件上传成功后,是否删除本地文件
|
194
|
+
默认不删除,一般不删除是配合etag校验使用的
|
195
|
+
:param verify_etag: 上传前是否校验etag,如果服务器上对应位置已经有对应etag的文件,其实就不用上传了
|
196
|
+
|
197
|
+
该方法已修改以支持上传子目录和空目录
|
198
|
+
"""
|
199
|
+
if relpath:
|
200
|
+
# D:\home\chenkunze\data\temp2,举个具体的例子案例值,供参考理解
|
201
|
+
local_dir = self.get_abs_local_path(local_dir, remote_dir)
|
202
|
+
# /home/chenkunze/data/temp2
|
203
|
+
remote_dir = self.get_abs_remote_path(remote_dir, local_dir)
|
204
|
+
|
205
|
+
for root, dirs, files in os.walk(local_dir):
|
206
|
+
# root拿到的是这样的绝对路径:D:\home\chenkunze\data\temp2\数值问题
|
207
|
+
# '数值问题'
|
208
|
+
subdir = XlPath(root).relpath(local_dir)
|
209
|
+
if not files and not dirs:
|
210
|
+
# 如果该目录为空,则在远程服务器上创建空目录
|
211
|
+
self.create_remote_dir(remote_dir / subdir, relpath=False)
|
212
|
+
|
213
|
+
for file in tqdm(files, desc=f'上传目录:{root}'):
|
214
|
+
local_path = local_dir / subdir / file
|
215
|
+
remote_path = remote_dir / subdir / file
|
216
|
+
if verify_etag and self.verify_etag(local_path, remote_path, relpath=False):
|
217
|
+
pass # 如果etag校验通过,跳过上传
|
218
|
+
else:
|
219
|
+
self.upload_file(local_path, remote_path, relpath=False)
|
220
|
+
|
221
|
+
if delete_local_file:
|
222
|
+
os.remove(local_path)
|
223
|
+
|
224
|
+
def create_remote_dir(self, remote_dir, relpath=True):
|
225
|
+
"""
|
226
|
+
创建远程目录的辅助方法
|
227
|
+
"""
|
228
|
+
if relpath:
|
229
|
+
remote_dir = self.get_abs_remote_path(remote_dir)
|
230
|
+
json_data = {'dir': remote_dir.as_posix()}
|
231
|
+
resp = requests.post(f'{self.host}/common/create_dir',
|
232
|
+
headers=self.headers,
|
233
|
+
json=json_data)
|
234
|
+
return resp.json()
|
235
|
+
|
236
|
+
def download_dir(self, remote_dir=None, local_dir=None, *, verify_etag=False, relpath=True):
|
237
|
+
"""
|
238
|
+
下载远程目录到本地
|
239
|
+
:param remote_dir: 远程目录路径,相对路径或绝对路径都支持
|
240
|
+
:param local_dir: 本地保存目录,默认会自动映射到对应的远程位置
|
241
|
+
:param verify_etag: 是否进行etag校验,跳过已经在本地存在并且未修改的文件
|
242
|
+
:return:
|
243
|
+
|
244
|
+
示例:
|
245
|
+
sfc = SyncFileClient('codepc_mi15')
|
246
|
+
sfc.download_dir('data/temp2')
|
247
|
+
"""
|
248
|
+
# 1. 获取绝对路径
|
249
|
+
if relpath:
|
250
|
+
local_dir = self.get_abs_local_path(local_dir, remote_dir)
|
251
|
+
remote_dir = self.get_abs_remote_path(remote_dir, local_dir)
|
252
|
+
|
253
|
+
# 2. 从服务器获取远程目录的文件和子目录结构
|
254
|
+
json_data = {'dir': remote_dir.as_posix()}
|
255
|
+
resp = requests.post(f'{self.host}/common/list_dir', headers=self.headers, json=json_data)
|
256
|
+
if resp.status_code != 200:
|
257
|
+
raise Exception(f"Failed to list remote directory: {resp.text}")
|
258
|
+
|
259
|
+
dir_structure = resp.json() # 期望返回格式为 {'dirs': [...], 'files': [...]}
|
260
|
+
|
261
|
+
# 3. 创建本地目录
|
262
|
+
if not local_dir.exists():
|
263
|
+
local_dir.mkdir(parents=True)
|
264
|
+
|
265
|
+
# 4. 先处理子目录
|
266
|
+
for subdir in dir_structure.get('dirs', []):
|
267
|
+
local_subdir = local_dir / subdir
|
268
|
+
if not local_subdir.exists():
|
269
|
+
local_subdir.mkdir(parents=True)
|
270
|
+
|
271
|
+
# 递归下载子目录中的文件
|
272
|
+
self.download_dir(remote_dir / subdir, local_dir / subdir, verify_etag=verify_etag)
|
273
|
+
|
274
|
+
# 5. 下载文件
|
275
|
+
for file in tqdm(dir_structure.get('files', []), desc=f'下载目录:{remote_dir}'):
|
276
|
+
remote_file = remote_dir / file
|
277
|
+
local_file = local_dir / file
|
278
|
+
|
279
|
+
# 校验etag,如果verify_etag为True并且校验成功,则跳过下载
|
280
|
+
if verify_etag and self.verify_etag(local_file, remote_file, relpath=False):
|
281
|
+
continue
|
282
|
+
|
283
|
+
# 下载文件
|
284
|
+
self.download_file(remote_file, local_file, relpath=False)
|
285
|
+
|
286
|
+
def download_path(self, remote_path=None, local_path=None, *, verify_etag=False, relpath=True):
|
287
|
+
"""
|
288
|
+
下载远程文件或目录到本地
|
289
|
+
:param remote_path: 远程路径,可以是文件或者目录
|
290
|
+
:param local_path: 本地保存路径,默认会自动映射到对应的远程位置
|
291
|
+
:param verify_etag: 是否进行etag校验,跳过已经在本地存在并且未修改的文件
|
292
|
+
:return:
|
293
|
+
"""
|
294
|
+
if relpath:
|
295
|
+
# 获取远程路径的绝对路径
|
296
|
+
remote_path = self.get_abs_remote_path(remote_path, local_path)
|
297
|
+
local_path = self.get_abs_local_path(local_path, remote_path)
|
298
|
+
|
299
|
+
# 判断是文件还是目录
|
300
|
+
json_data = {'path': remote_path.as_posix()}
|
301
|
+
resp = requests.post(f'{self.host}/common/check_path_type', headers=self.headers, json=json_data)
|
302
|
+
|
303
|
+
if resp.status_code != 200:
|
304
|
+
raise Exception(f"Failed to check remote path type: {resp.text}")
|
305
|
+
|
306
|
+
path_info = resp.json()
|
307
|
+
|
308
|
+
if path_info['type'] == 'file':
|
309
|
+
# 如果是文件,调用 download_file
|
310
|
+
self.download_file(remote_file=remote_path, local_file=local_path, relpath=False)
|
311
|
+
elif path_info['type'] == 'dir':
|
312
|
+
# 如果是目录,调用 download_dir
|
313
|
+
self.download_dir(remote_dir=remote_path, local_dir=local_path,
|
314
|
+
verify_etag=verify_etag, relpath=False)
|
315
|
+
else:
|
316
|
+
raise ValueError(f"Unknown path type: {path_info['type']}")
|
@@ -102,6 +102,7 @@ def distribute_package(root, version=None, repository=None, *,
|
|
102
102
|
:param version_file: 保存版本号的文件,注意看正则规则,需要满足特定的范式,才会自动更新版本号
|
103
103
|
:param delete_dist: 上传完是否自动删除dist目录,要检查上传包是否有遗漏时,要关闭
|
104
104
|
"""
|
105
|
+
import sys
|
105
106
|
from pyxllib.file.specialist import XlPath
|
106
107
|
|
107
108
|
# 1 切换工作目录
|
@@ -114,7 +115,7 @@ def distribute_package(root, version=None, repository=None, *,
|
|
114
115
|
f.write_text(s)
|
115
116
|
|
116
117
|
# 3 打包
|
117
|
-
subprocess.run('
|
118
|
+
subprocess.run(f'{sys.executable} setup.py sdist')
|
118
119
|
|
119
120
|
# 4 上传
|
120
121
|
if upload:
|
@@ -143,7 +143,7 @@ def brieftexstr(s):
|
|
143
143
|
# BRACE3 = '{(' + grp_bracket(3)[1:-1] + ')}'
|
144
144
|
# BRACE4 = '{(' + grp_bracket(4)[1:-1] + ')}'
|
145
145
|
# BRACE5 = '{(' + grp_bracket(5)[1:-1] + ')}'
|
146
|
-
"""使用示例
|
146
|
+
r""" 使用示例
|
147
147
|
>> m = re.search(r'\\multicolumn' + BRACE3*3, r'\multicolumn{2}{|c|}{$2^{12}$个数}')
|
148
148
|
>> m.groups()
|
149
149
|
('2', '|c|', '$2^{12}$个数')
|
@@ -160,7 +160,7 @@ def grp_topic(*, type_value=None):
|
|
160
160
|
|
161
161
|
|
162
162
|
def grp_figure(cnt_groups=0, parpic=False):
|
163
|
-
"""生成跟图片匹配相关的表达式
|
163
|
+
r""" 生成跟图片匹配相关的表达式
|
164
164
|
|
165
165
|
D:\2017LaTeX\D招培试卷\高中地理,用过 \captionfig{3-3.eps}{图~3}
|
166
166
|
奕本从2018秋季教材开始使用多种图片格式
|
@@ -0,0 +1,86 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: pyxllib
|
3
|
+
Version: 0.3.130
|
4
|
+
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
|
+
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
|
+
Author: code4101
|
7
|
+
Author-email: 877362867@qq.com
|
8
|
+
License: Apache License 2.0
|
9
|
+
Keywords: pyxllib,pyxlpr
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
11
|
+
Classifier: Intended Audience :: Developers
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
13
|
+
Classifier: Operating System :: OS Independent
|
14
|
+
Requires-Python: >=3.6
|
15
|
+
Description-Content-Type: text/markdown
|
16
|
+
License-File: LICENSE
|
17
|
+
Requires-Dist: arrow
|
18
|
+
Requires-Dist: charset-normalizer
|
19
|
+
Requires-Dist: requests
|
20
|
+
Requires-Dist: qiniu
|
21
|
+
Requires-Dist: pyyaml
|
22
|
+
Requires-Dist: loguru
|
23
|
+
Requires-Dist: humanfriendly
|
24
|
+
Requires-Dist: tqdm
|
25
|
+
Requires-Dist: ujson
|
26
|
+
Requires-Dist: Deprecated
|
27
|
+
Requires-Dist: pyperclip
|
28
|
+
Requires-Dist: envariable
|
29
|
+
Requires-Dist: decorator
|
30
|
+
Requires-Dist: more-itertools
|
31
|
+
Requires-Dist: fire
|
32
|
+
Requires-Dist: xlrd
|
33
|
+
Requires-Dist: pympler
|
34
|
+
Requires-Dist: lxml
|
35
|
+
Requires-Dist: beautifulsoup4
|
36
|
+
Requires-Dist: numpy
|
37
|
+
Requires-Dist: Jinja2
|
38
|
+
Requires-Dist: pandas>=0.23.4
|
39
|
+
Requires-Dist: pillow
|
40
|
+
Provides-Extra: xlcv
|
41
|
+
Requires-Dist: opencv-python; extra == "xlcv"
|
42
|
+
Requires-Dist: pillow; extra == "xlcv"
|
43
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
44
|
+
Provides-Extra: xlai
|
45
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlai"
|
46
|
+
Requires-Dist: pynvml; extra == "xlai"
|
47
|
+
Requires-Dist: opencv-python; extra == "xlai"
|
48
|
+
Requires-Dist: visdom; extra == "xlai"
|
49
|
+
Requires-Dist: pillow; extra == "xlai"
|
50
|
+
Provides-Extra: xlall
|
51
|
+
Requires-Dist: xlrd; extra == "xlall"
|
52
|
+
Requires-Dist: html2text; extra == "xlall"
|
53
|
+
Requires-Dist: flask-restful; extra == "xlall"
|
54
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
55
|
+
Requires-Dist: flask-jwt-extended; extra == "xlall"
|
56
|
+
Requires-Dist: flask; extra == "xlall"
|
57
|
+
Requires-Dist: ujson; extra == "xlall"
|
58
|
+
Requires-Dist: arts; extra == "xlall"
|
59
|
+
Requires-Dist: flask-wtf; extra == "xlall"
|
60
|
+
Requires-Dist: opencv-python; extra == "xlall"
|
61
|
+
Requires-Dist: sentencepiece; extra == "xlall"
|
62
|
+
Requires-Dist: openai2; extra == "xlall"
|
63
|
+
Requires-Dist: fastapi; extra == "xlall"
|
64
|
+
Requires-Dist: zhconv; extra == "xlall"
|
65
|
+
Requires-Dist: pillow; extra == "xlall"
|
66
|
+
Requires-Dist: uvicorn; extra == "xlall"
|
67
|
+
Requires-Dist: flask-cors; extra == "xlall"
|
68
|
+
|
69
|
+
# 1 install
|
70
|
+
|
71
|
+
```
|
72
|
+
pip install pyxllib
|
73
|
+
```
|
74
|
+
|
75
|
+
more details: https://www.yuque.com/xlpr/pyxllib/install
|
76
|
+
|
77
|
+
# 2 document
|
78
|
+
|
79
|
+
document: https://www.yuque.com/xlpr/pyxllib.
|
80
|
+
Work hard to improve, welcome more assistant partners.
|
81
|
+
|
82
|
+
# 3 Acknowledge
|
83
|
+
|
84
|
+
This project uses PyCharm to develop.
|
85
|
+
Thanks to [JetBrains'](https://www.jetbrains.com/?from=pyxllib) support
|
86
|
+
of [free license for open sourse project development](https://pycharm.iswbm.com/c01/c01_05.html).
|
@@ -50,7 +50,7 @@ _dir = Path(__file__).parent
|
|
50
50
|
|
51
51
|
setup(
|
52
52
|
name='pyxllib', # pip 安装时用的名字
|
53
|
-
version='0.3.
|
53
|
+
version='0.3.130', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
54
54
|
author='code4101',
|
55
55
|
author_email='877362867@qq.com',
|
56
56
|
url='https://github.com/XLPRUtils/pyxllib',
|