pyxllib 0.3.126__tar.gz → 0.3.128__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.126/pyxllib.egg-info → pyxllib-0.3.128}/PKG-INFO +1 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/pglib.py +1 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/drissionlib.py +5 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/yuquelib.py +1 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/xlsxlib.py +45 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/pupil.py +76 -4
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/xllog.py +1 -2
- {pyxllib-0.3.126 → pyxllib-0.3.128/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib.egg-info/requires.txt +17 -15
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/openai2/_core/chat.py +148 -26
- {pyxllib-0.3.126 → pyxllib-0.3.128}/requirements.txt +4 -3
- {pyxllib-0.3.126 → pyxllib-0.3.128}/setup.py +1 -1
- {pyxllib-0.3.126 → pyxllib-0.3.128}/LICENSE +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/MANIFEST.in +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/README.md +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/templates/echart_base.html +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/templates/highlight_code.html +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/templates/latex_editor.html +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.126 → pyxllib-0.3.128}/setup.cfg +0 -0
@@ -194,7 +194,7 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
194
194
|
@classmethod
|
195
195
|
def cvt_type(cls, val):
|
196
196
|
if isinstance(val, (dict, list)):
|
197
|
-
val = json.dumps(val, ensure_ascii=False)
|
197
|
+
val = json.dumps(val, ensure_ascii=False, default=str)
|
198
198
|
# 注意list数组类型读、写都会自动适配py
|
199
199
|
return val
|
200
200
|
|
@@ -74,7 +74,11 @@ def get_dp_tab(dp_page=None) -> 'XlPage':
|
|
74
74
|
elif dp_page is True:
|
75
75
|
return ChromiumPage().new_tab()
|
76
76
|
elif isinstance(dp_page, str):
|
77
|
-
|
77
|
+
def dp_page2(tab): # 默认开启页面复用。 todo 以后可以改进成可选参数
|
78
|
+
if tab.url.startswith(dp_page):
|
79
|
+
return tab
|
80
|
+
|
81
|
+
return get_dp_page(dp_page2)
|
78
82
|
else:
|
79
83
|
return ChromiumPage().latest_tab
|
80
84
|
|
@@ -197,7 +197,7 @@ class Yuque:
|
|
197
197
|
elif return_mode == 'md':
|
198
198
|
return res['data']['body']
|
199
199
|
elif return_mode == 'title_and_md':
|
200
|
-
return
|
200
|
+
return res["data"]["title"], res["data"]["body"]
|
201
201
|
|
202
202
|
def export_markdown(self, url, output_dir=None, post_mode=1):
|
203
203
|
""" 导出md格式文件
|
@@ -3018,12 +3018,51 @@ def extract_workbook_summary3(file_path, summary_limit_len=4000, **kwargs):
|
|
3018
3018
|
return data
|
3019
3019
|
|
3020
3020
|
|
3021
|
+
def summary2_add_enums(summary2, enum_values):
|
3022
|
+
# 1 预备
|
3023
|
+
if enum_values is True:
|
3024
|
+
enum_values = (20, 10)
|
3025
|
+
max_len, max_num = enum_values
|
3026
|
+
|
3027
|
+
# 2 枚举值
|
3028
|
+
for sheet in summary2['sheets']:
|
3029
|
+
# 2.1 遍历计数
|
3030
|
+
cols = defaultdict(Counter)
|
3031
|
+
for addr, val in sheet['cells'].items():
|
3032
|
+
n = len(str(val))
|
3033
|
+
if not n or n > max_len:
|
3034
|
+
continue
|
3035
|
+
col = re.match(r'[A-Z]+', addr).group()
|
3036
|
+
cols[col][val] += 1
|
3037
|
+
|
3038
|
+
# 2.2 添加枚举值列
|
3039
|
+
enums = {}
|
3040
|
+
keys = sorted(cols.keys(), key=column_index_from_string)
|
3041
|
+
for k in keys:
|
3042
|
+
ct = cols[k]
|
3043
|
+
if len(ct) > max_num:
|
3044
|
+
continue
|
3045
|
+
vals = ct.most_common()
|
3046
|
+
if vals[0][1] == 1: # 都只出现了一次,也不认为是枚举值,跳过。或者是小数据表,一般也能全量展示。
|
3047
|
+
continue
|
3048
|
+
enums[k] = [v for v, _ in vals]
|
3049
|
+
|
3050
|
+
# 2.3 保存
|
3051
|
+
if enums:
|
3052
|
+
sheet['enums'] = enums
|
3053
|
+
# enums2 = json.dumps(enums, ensure_ascii=False, default=str)
|
3054
|
+
# sheet['enums'] = json.loads(enums2)
|
3055
|
+
|
3056
|
+
return summary2
|
3057
|
+
|
3058
|
+
|
3021
3059
|
def extract_workbook_summary3b(file_path,
|
3022
3060
|
summary_limit_len=4000,
|
3023
3061
|
timeout_seconds=10,
|
3024
3062
|
return_mode=0,
|
3025
3063
|
debug=False,
|
3026
3064
|
len_mode=0,
|
3065
|
+
enum_values=False,
|
3027
3066
|
**kwargs):
|
3028
3067
|
"""
|
3029
3068
|
|
@@ -3036,6 +3075,9 @@ def extract_workbook_summary3b(file_path,
|
|
3036
3075
|
:param len_mode:
|
3037
3076
|
0, 使用len作为token长度评估
|
3038
3077
|
1, 使用模型评估实际token长度
|
3078
|
+
:param enum_values: 是否展示每列枚举值
|
3079
|
+
False, 默认不展示
|
3080
|
+
True, 展示,并且默认参数 (20, 10) 表示长度超过20的丢弃,只保留枚举类型不超过10种值的列
|
3039
3081
|
:param kwargs: 其他是summary2读取文件的时候的参数,其实都不太关键,一般不用特地设置
|
3040
3082
|
"""
|
3041
3083
|
res = {}
|
@@ -3056,7 +3098,10 @@ def extract_workbook_summary3b(file_path,
|
|
3056
3098
|
res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
|
3057
3099
|
# res = convert_to_json_compatible(res)
|
3058
3100
|
summary2_res = copy.deepcopy(res)
|
3101
|
+
if enum_values:
|
3102
|
+
res = summary2_add_enums(res, enum_values)
|
3059
3103
|
summary2_time = time.time() - start_time - load_time
|
3104
|
+
|
3060
3105
|
start_time = time.time()
|
3061
3106
|
if len_mode == 1:
|
3062
3107
|
res = WorkbookSummary3plus.summary2_to_summary3b(res, summary_limit_len)
|
@@ -603,6 +603,7 @@ def inject_members(from_obj, to_obj, member_list=None, *,
|
|
603
603
|
# 把XlDocxTable的成员方法绑定到docx.table.Table里
|
604
604
|
>> inject_members(XlDocxTable, docx.table.Table)
|
605
605
|
|
606
|
+
240826周一,其他可参考学习的三方现成工具库:from fastcore.foundation import patch
|
606
607
|
"""
|
607
608
|
# 1 整理需要注入的方法清单
|
608
609
|
dst = set(dir(to_obj))
|
@@ -1029,10 +1030,13 @@ class MultiProcessLauncher:
|
|
1029
1030
|
if name is None:
|
1030
1031
|
cmd2 = cmd.split() if isinstance(cmd, str) else cmd
|
1031
1032
|
name = cmd2[0]
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1033
|
+
if sys.platform == 'darwin':
|
1034
|
+
proc = subprocess.Popen(cmd,
|
1035
|
+
shell=shell)
|
1036
|
+
else:
|
1037
|
+
proc = subprocess.Popen(cmd,
|
1038
|
+
shell=shell,
|
1039
|
+
preexec_fn=self._set_pdeathsig())
|
1036
1040
|
|
1037
1041
|
worker = ProcessWorker(name, proc, raw_cmd=cmd, **kwargs)
|
1038
1042
|
self.workers.append(worker)
|
@@ -1118,6 +1122,73 @@ class MultiProcessLauncher:
|
|
1118
1122
|
print_full_dataframe(df)
|
1119
1123
|
|
1120
1124
|
|
1125
|
+
def support_multi_processes_hyx(default_processes=1):
|
1126
|
+
""" 对函数进行扩展,支持并发多进程运行
|
1127
|
+
增加重跑
|
1128
|
+
注意被装饰的函数,需要支持 process_count、process_id 两个参数,来获得总进程数,当前进程id的信息
|
1129
|
+
"""
|
1130
|
+
|
1131
|
+
def decorator(func):
|
1132
|
+
|
1133
|
+
def wrapper(*args, **kwargs):
|
1134
|
+
process_count = int(kwargs.pop('process_count', default_processes))
|
1135
|
+
process_id = kwargs.pop('process_id', None)
|
1136
|
+
shell = kwargs.pop('shell', False)
|
1137
|
+
|
1138
|
+
if process_count == 1 or process_id is not None:
|
1139
|
+
if process_id is None:
|
1140
|
+
return func(*args, **kwargs)
|
1141
|
+
else:
|
1142
|
+
return func(*args, **kwargs, process_count=process_count, process_id=int(process_id))
|
1143
|
+
else:
|
1144
|
+
mpl = MultiProcessLauncher()
|
1145
|
+
for i in range(int(process_count)):
|
1146
|
+
if isinstance(process_id, int) and i != process_id:
|
1147
|
+
continue
|
1148
|
+
|
1149
|
+
'''
|
1150
|
+
sys.argv[0] 为 /Users/youx/NutstoreCloudBridge/slns/xlproject/xlproject/m2404ragdata/b清洗/hyx240806统计图表数.py
|
1151
|
+
将其转化为 xlproject.m2404ragdata.b清洗.hyx240806统计图表数
|
1152
|
+
'''
|
1153
|
+
header = 'xlproject.code4101'
|
1154
|
+
|
1155
|
+
root_directory_name = 'xlproject'
|
1156
|
+
occurrence = 2
|
1157
|
+
path = sys.argv[0]
|
1158
|
+
|
1159
|
+
# 查找第 occurrence 次出现的 root_directory_name 位置
|
1160
|
+
positions = [i for i in range(len(path)) if path.startswith(root_directory_name, i)]
|
1161
|
+
if len(positions) < occurrence:
|
1162
|
+
raise ValueError(
|
1163
|
+
f"Path does not contain {occurrence} occurrences of the root directory name: {root_directory_name}")
|
1164
|
+
|
1165
|
+
# 提取并转换为模块名称
|
1166
|
+
index = positions[occurrence - 1]
|
1167
|
+
module_name = os.path.splitext(path[index:])[0].replace(os.path.sep, '.')
|
1168
|
+
|
1169
|
+
# todo 这样使用有个坑,process_count、process_id都是以str类型传入的,开发者下游使用容易出问题
|
1170
|
+
cmds = [
|
1171
|
+
'run_python_module',
|
1172
|
+
'--wait_mode',
|
1173
|
+
'60',
|
1174
|
+
module_name,
|
1175
|
+
func.__name__,
|
1176
|
+
'--process_count', str(process_count),
|
1177
|
+
'--process_id', str(i)
|
1178
|
+
]
|
1179
|
+
cmds.extend(map(str, args)) # 添加位置参数
|
1180
|
+
for k, v in kwargs.items():
|
1181
|
+
cmds.append(f'--{k}') # 添加关键字参数的键
|
1182
|
+
cmds.append(str(v)) # 添加关键字参数的值
|
1183
|
+
|
1184
|
+
mpl.add_process_python_module(header, cmds, shell=shell)
|
1185
|
+
mpl.run_endless()
|
1186
|
+
|
1187
|
+
return wrapper
|
1188
|
+
|
1189
|
+
return decorator
|
1190
|
+
|
1191
|
+
|
1121
1192
|
def support_multi_processes(default_processes=1):
|
1122
1193
|
""" 对函数进行扩展,支持并发多进程运行
|
1123
1194
|
|
@@ -1151,6 +1222,7 @@ def support_multi_processes(default_processes=1):
|
|
1151
1222
|
for k, v in kwargs.items():
|
1152
1223
|
cmds.append(f'--{k}') # 添加关键字参数的键
|
1153
1224
|
cmds.append(str(v)) # 添加关键字参数的值
|
1225
|
+
|
1154
1226
|
mpl.add_process_python(sys.argv[0], cmds, shell=shell)
|
1155
1227
|
mpl.run_endless()
|
1156
1228
|
|
@@ -53,8 +53,7 @@ def get_xllog(name='xllog', *, log_file=None):
|
|
53
53
|
xllog = logging.getLogger('pyxllib.xllog')
|
54
54
|
fmt = '%(asctime)s %(message)s'
|
55
55
|
if log_file:
|
56
|
-
|
57
|
-
file_handler = logging.FileHandler(f'{log_file}', 'w')
|
56
|
+
file_handler = logging.FileHandler(f'{log_file}', 'a')
|
58
57
|
file_handler.setLevel(logging.DEBUG)
|
59
58
|
file_handler.setFormatter(logging.Formatter(fmt))
|
60
59
|
xllog.addHandler(file_handler)
|
@@ -3,7 +3,7 @@ charset-normalizer
|
|
3
3
|
requests
|
4
4
|
qiniu
|
5
5
|
pyyaml
|
6
|
-
|
6
|
+
loguru
|
7
7
|
humanfriendly
|
8
8
|
tqdm
|
9
9
|
ujson
|
@@ -13,39 +13,41 @@ envariable
|
|
13
13
|
decorator
|
14
14
|
more-itertools
|
15
15
|
fire
|
16
|
+
xlrd
|
16
17
|
pympler
|
17
18
|
lxml
|
18
19
|
beautifulsoup4
|
19
20
|
numpy
|
20
21
|
Jinja2
|
21
22
|
pandas>=0.23.4
|
23
|
+
pillow
|
22
24
|
|
23
25
|
[xlai]
|
24
|
-
|
26
|
+
pillow
|
25
27
|
visdom
|
26
28
|
opsdroid-get-image-size
|
27
29
|
opencv-python
|
28
|
-
|
30
|
+
pynvml
|
29
31
|
|
30
32
|
[xlall]
|
31
|
-
|
32
|
-
|
33
|
+
pillow
|
34
|
+
fastapi
|
35
|
+
xlrd
|
36
|
+
flask-wtf
|
37
|
+
sentencepiece
|
38
|
+
flask
|
33
39
|
zhconv
|
34
40
|
ujson
|
35
|
-
html2text
|
36
|
-
uvicorn
|
37
|
-
opsdroid-get-image-size
|
38
41
|
flask-jwt-extended
|
39
|
-
|
40
|
-
|
42
|
+
arts
|
43
|
+
uvicorn
|
41
44
|
flask-restful
|
45
|
+
opsdroid-get-image-size
|
46
|
+
flask-cors
|
42
47
|
opencv-python
|
43
|
-
|
44
|
-
flask
|
45
|
-
pillow
|
46
|
-
sentencepiece
|
48
|
+
html2text
|
47
49
|
|
48
50
|
[xlcv]
|
49
|
-
opencv-python
|
50
51
|
pillow
|
52
|
+
opencv-python
|
51
53
|
opsdroid-get-image-size
|
@@ -16,6 +16,8 @@ from unittest.mock import MagicMock
|
|
16
16
|
import math
|
17
17
|
from types import SimpleNamespace
|
18
18
|
|
19
|
+
import requests
|
20
|
+
from loguru import logger as loguru_logger
|
19
21
|
from tqdm import tqdm
|
20
22
|
from joblib import Parallel, delayed
|
21
23
|
from openai import OpenAI, AsyncOpenAI
|
@@ -143,7 +145,7 @@ class Chat:
|
|
143
145
|
model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview",
|
144
146
|
"gpt-4", "gpt-4-0314", "gpt-4-0613",
|
145
147
|
"gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-0613", "gpt-3.5-turbo",
|
146
|
-
"gpt-4o", "gpt-4-turbo"] = "gpt-
|
148
|
+
"gpt-4o", "gpt-4-turbo"] = "gpt-4o-mini",
|
147
149
|
# Chat
|
148
150
|
msg_max_count: int = None,
|
149
151
|
# kwargs
|
@@ -289,20 +291,35 @@ class Chat:
|
|
289
291
|
self._messages.add_many(*messages)
|
290
292
|
|
291
293
|
def __getattr__(self, name):
|
292
|
-
match name: # 兼容旧代码
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
raise AttributeError(name)
|
294
|
+
# match name: # 兼容旧代码
|
295
|
+
# case 'asy_request':
|
296
|
+
# return self.async_request
|
297
|
+
# case 'forge':
|
298
|
+
# return self.add_dialogs
|
299
|
+
# case 'pin':
|
300
|
+
# return self.pin_messages
|
301
|
+
# case 'unpin':
|
302
|
+
# return self.unpin_messages
|
303
|
+
# case 'dump':
|
304
|
+
# return self._dump
|
305
|
+
# case 'load':
|
306
|
+
# return self._load
|
307
|
+
# raise AttributeError(name)
|
308
|
+
|
309
|
+
if name == 'asy_request':
|
310
|
+
return self.async_request
|
311
|
+
elif name == 'forge':
|
312
|
+
return self.add_dialogs
|
313
|
+
elif name == 'pin':
|
314
|
+
return self.pin_messages
|
315
|
+
elif name == 'unpin':
|
316
|
+
return self.unpin_messages
|
317
|
+
elif name == 'dump':
|
318
|
+
return self._dump
|
319
|
+
elif name == 'load':
|
320
|
+
return self._load
|
321
|
+
else:
|
322
|
+
raise AttributeError(name)
|
306
323
|
|
307
324
|
def _dump(self, fpath: str):
|
308
325
|
""" 存档 """
|
@@ -480,6 +497,106 @@ class Chat:
|
|
480
497
|
return image_url
|
481
498
|
|
482
499
|
|
500
|
+
class Chat2:
|
501
|
+
default_api_key = None
|
502
|
+
default_base_url = 'https://beta.gpt4api.plus'
|
503
|
+
|
504
|
+
def __init__(self, api_key=None,
|
505
|
+
gizmo_id=None,
|
506
|
+
*,
|
507
|
+
base_url=None,
|
508
|
+
model='gpt-4o-mini'):
|
509
|
+
"""
|
510
|
+
:param gizmo_id: gpts的id,比如 https://chatgpt.com/g/g-ABCD1234-ce-shi。则id就是"g-ABCD1234"
|
511
|
+
后面的gpts的名称变了没关系,前面前缀的id不要变就行
|
512
|
+
"""
|
513
|
+
self.api_key = api_key or self.default_api_key
|
514
|
+
self.base_url = base_url or self.default_base_url
|
515
|
+
self.gizmo_id = gizmo_id # 是否有action模块需要点击确认
|
516
|
+
|
517
|
+
self.headers = {
|
518
|
+
'Authorization': f'Bearer {self.api_key}'
|
519
|
+
}
|
520
|
+
self.session_state = {
|
521
|
+
'stream': False,
|
522
|
+
'model': model,
|
523
|
+
}
|
524
|
+
|
525
|
+
self.messages = list() # 历史记录
|
526
|
+
|
527
|
+
def _upload_file(self, file_path, file_type='my_files', parent_payload=None):
|
528
|
+
""" 上传文件
|
529
|
+
|
530
|
+
:param payload: 如果传入外部主payload自动,会自动添加已上传的文件的状态内容信息
|
531
|
+
"""
|
532
|
+
# 1 请求
|
533
|
+
url = f"{self.base_url}/chat/uploaded"
|
534
|
+
payload = {'type': file_type}
|
535
|
+
if 'conversation_id' in self.session_state:
|
536
|
+
payload['conversation_id'] = self.session_state['conversation_id']
|
537
|
+
files = [
|
538
|
+
('files', (Path(file_path).name, open(file_path, 'rb')))
|
539
|
+
]
|
540
|
+
resp = requests.post(url, headers=self.headers, data=payload, files=files)
|
541
|
+
resp_json = resp.json()
|
542
|
+
|
543
|
+
# 2 保存状态
|
544
|
+
self.session_state['conversation_id'] = resp_json['conversation_id']
|
545
|
+
self.messages.append(resp_json)
|
546
|
+
if parent_payload:
|
547
|
+
key_name = 'attachments' if file_type == 'my_files' else 'parts'
|
548
|
+
if key_name not in parent_payload:
|
549
|
+
parent_payload[key_name] = []
|
550
|
+
parent_payload[key_name].append(resp_json[key_name[:-1]])
|
551
|
+
|
552
|
+
return resp_json
|
553
|
+
|
554
|
+
def _upload_image(self, image_path, parent_payload=None):
|
555
|
+
""" 上传图片 """
|
556
|
+
return self._upload_file(image_path, 'multimodal', parent_payload=parent_payload)
|
557
|
+
|
558
|
+
def query(self, message, *, files=None, images=None):
|
559
|
+
# 1 预备
|
560
|
+
if self.gizmo_id:
|
561
|
+
url = f"{self.base_url}/chat/action"
|
562
|
+
else:
|
563
|
+
url = f"{self.base_url}/chat/all-tools"
|
564
|
+
|
565
|
+
headers = self.headers.copy()
|
566
|
+
headers['Content-Type'] = 'application/json'
|
567
|
+
|
568
|
+
# 2 api初步配置
|
569
|
+
payload = self.session_state.copy()
|
570
|
+
payload['message'] = message
|
571
|
+
if self.gizmo_id:
|
572
|
+
payload['gizmo_id'] = self.gizmo_id
|
573
|
+
|
574
|
+
# 3 添加文件
|
575
|
+
if files:
|
576
|
+
if isinstance(files, str):
|
577
|
+
files = [files]
|
578
|
+
for file in files:
|
579
|
+
self._upload_file(file, parent_payload=payload)
|
580
|
+
|
581
|
+
# 4 添加图片
|
582
|
+
if images:
|
583
|
+
if isinstance(images, str):
|
584
|
+
images = [images]
|
585
|
+
for image in images:
|
586
|
+
self._upload_image(image, parent_payload=payload)
|
587
|
+
|
588
|
+
# 5 请求
|
589
|
+
resp = requests.post(url, headers=headers, data=json.dumps(payload))
|
590
|
+
resp_json = resp.json()
|
591
|
+
|
592
|
+
# 6 保存状态
|
593
|
+
self.session_state['conversation_id'] = resp_json['conversation_id']
|
594
|
+
self.session_state['parent_message_id'] = resp_json['message_id']
|
595
|
+
self.messages.append(resp_json)
|
596
|
+
|
597
|
+
return '\n\n'.join(resp_json['contents'][-1]['message']['content']['parts'])
|
598
|
+
|
599
|
+
|
483
600
|
def __2_信息摘要():
|
484
601
|
pass
|
485
602
|
|
@@ -580,8 +697,7 @@ class CompressContent:
|
|
580
697
|
expect_len=None,
|
581
698
|
max_round=-1,
|
582
699
|
text_spliter=None,
|
583
|
-
|
584
|
-
model='gpt-3.5-turbo',
|
700
|
+
model='gpt-4o-mini',
|
585
701
|
soft_merge_prompt=None,
|
586
702
|
calc_len=None,
|
587
703
|
logger=None,
|
@@ -606,7 +722,6 @@ class CompressContent:
|
|
606
722
|
:param func text_spliter: 文本分割器,默认使用均切
|
607
723
|
均匀切分,在不超过segment_len的情况下,尽量保持每段文本长度相同
|
608
724
|
后续要支持langchain里分割算法,觉得那个切法更泛用,虽然效率估计更低
|
609
|
-
:param str style: 提取风格。暂未实装,涉及到如何跟已有prompts配合。
|
610
725
|
:param str model: 使用的模型
|
611
726
|
:param soft_merge_prompt: 最后一轮合并后,如果已经满足要求,是否要加一段提示词,再优化下描述,避免暴力合并效果过于生硬
|
612
727
|
|
@@ -621,6 +736,9 @@ class CompressContent:
|
|
621
736
|
|
622
737
|
expect_len = expect_len or segment_len // 2
|
623
738
|
logger = logger or MagicMock()
|
739
|
+
if logger is True:
|
740
|
+
logger = loguru_logger
|
741
|
+
|
624
742
|
calc_len = calc_len or len
|
625
743
|
|
626
744
|
if text_spliter is None:
|
@@ -641,22 +759,21 @@ class CompressContent:
|
|
641
759
|
contents2.extend(text_spliter(content))
|
642
760
|
|
643
761
|
# 3 单个提取的接口
|
644
|
-
def extract_info(content, prompt):
|
762
|
+
def extract_info(i, content, prompt):
|
645
763
|
chat = Chat(model=model)
|
646
764
|
chat.add_system_prompt(prompt)
|
647
765
|
summary = chat.query(content)
|
648
|
-
logger.
|
766
|
+
logger.debug(f'>>> 第{i}块原始内容:\n{content}\n\n>>> 提取信息:{summary}\n\n')
|
649
767
|
return summary
|
650
768
|
|
651
769
|
# 4 (并发)提取信息
|
652
770
|
prompt_idx = min(round_num, len(extra_prompts) - 1)
|
653
771
|
backend = 'threading' if max_workers != 1 else 'sequential'
|
654
772
|
parallel = Parallel(n_jobs=max_workers, backend=backend, return_as='generator')
|
655
|
-
|
656
|
-
|
657
|
-
# disable = False
|
773
|
+
logger.debug(f'>>> 提取信息轮次:{round_num},使用提示词:\n{extra_prompts[prompt_idx]}')
|
774
|
+
tasks = [delayed(extract_info)(i, c, extra_prompts[prompt_idx]) for i, c in enumerate(contents2, start=1)]
|
658
775
|
contents = list(tqdm(parallel(tasks), total=len(contents2),
|
659
|
-
desc=f'round {round_num} 提取信息', disable=
|
776
|
+
desc=f'round {round_num} 提取信息', disable=isinstance(logger, MagicMock)))
|
660
777
|
|
661
778
|
# 5 合并数据
|
662
779
|
contents = ['\n\n'.join(contents)]
|
@@ -682,8 +799,13 @@ class CompressContent:
|
|
682
799
|
**kwargs)
|
683
800
|
|
684
801
|
@classmethod
|
685
|
-
def with_query(cls, content, query, extra_prompts=None, **kwargs):
|
686
|
-
""" 通用的信息压缩,根据用户的问题,进行信息压缩
|
802
|
+
def with_query(cls, content, query=None, extra_prompts=None, **kwargs):
|
803
|
+
""" 通用的信息压缩,根据用户的问题,进行信息压缩
|
804
|
+
但如果没传入query参数,也会自动改回common机制处理
|
805
|
+
"""
|
806
|
+
if not query:
|
807
|
+
return cls.common(content, extra_prompts, **kwargs)
|
808
|
+
|
687
809
|
return cls.basic(content,
|
688
810
|
extra_prompts or xlprompts.compress_content_with_query.render(query=query),
|
689
811
|
**kwargs)
|
@@ -3,7 +3,7 @@ charset-normalizer
|
|
3
3
|
requests
|
4
4
|
qiniu
|
5
5
|
pyyaml
|
6
|
-
|
6
|
+
loguru
|
7
7
|
humanfriendly
|
8
8
|
tqdm
|
9
9
|
ujson
|
@@ -13,10 +13,11 @@ envariable
|
|
13
13
|
decorator
|
14
14
|
more-itertools
|
15
15
|
fire
|
16
|
-
|
16
|
+
xlrd
|
17
17
|
pympler
|
18
18
|
lxml
|
19
19
|
beautifulsoup4
|
20
20
|
numpy
|
21
21
|
Jinja2
|
22
|
-
pandas>=0.23.4
|
22
|
+
pandas>=0.23.4
|
23
|
+
pillow
|
@@ -48,7 +48,7 @@ _dir = Path(__file__).parent
|
|
48
48
|
|
49
49
|
setup(
|
50
50
|
name='pyxllib', # pip 安装时用的名字
|
51
|
-
version='0.3.
|
51
|
+
version='0.3.128', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
52
52
|
author='code4101',
|
53
53
|
author_email='877362867@qq.com',
|
54
54
|
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
|