Skip to content

رفعِ چند باگِ واقعی و پاک‌سازیِ کد، به‌همراهِ تستِ رگرسیون#18087

Open
Milomilo777 wants to merge 1 commit into
PaddlePaddle:mainfrom
Milomilo777:fix/static-analysis-bugfixes
Open

رفعِ چند باگِ واقعی و پاک‌سازیِ کد، به‌همراهِ تستِ رگرسیون#18087
Milomilo777 wants to merge 1 commit into
PaddlePaddle:mainfrom
Milomilo777:fix/static-analysis-bugfixes

Conversation

@Milomilo777

Copy link
Copy Markdown

خلاصه

رفعِ چند باگِ واقعیِ شناسایی‌شده با تحلیلِ ایستا در ماژول‌های گوناگون، به‌همراه پاک‌سازیِ کدِ مرده/تکراری. همه‌ی تغییرها کوچک، هدفمند و حافظِ رفتارِ درستِ موجودند.

رفعِ باگ‌ها (نقص‌های واقعی)

۱) شرطِ شکسته‌ی مدیریتِ استثنا در مجموعه‌داده‌ی ابرتفکیک‌پذیری
به‌سببِ کوتاه‌مداریِ عملگرِ منطقیِ «یا»، شرطِ گرفتنِ استثنا فقط به یک استثنا تقلیل می‌یافت و بررسیِ طولِ کلمه به‌کلی مرده بود؛ کلماتِ بلندتر از حدِ مجاز هرگز ردّ نمی‌شدند. اکنون گرفتنِ استثنا و بررسیِ طول از هم جدا شده‌اند.

ppocr/data/lmdb_dataset.py

۲) پنهان‌شدنِ کلاسِ سفارشی در شبکه‌ی پشتیِ PP-HGNetV2
یک واردسازیِ تکراری، کلاسِ سفارشیِ مخصوصِ سخت‌افزارِ NPU را پنهان می‌کرد و نسخه‌ی استاندارد را جایگزینش می‌نمود. تنها نامِ متناقض از واردسازیِ تکراری حذف شد تا کلاسِ سفارشی دوباره به‌کار رود.

ppocr/modeling/backbones/rec_pphgnetv2.py

۳) انتقالِ نادرستِ آرگومان هنگامِ فراخوانیِ کلاسِ والد در پس‌پردازشِ SER
بازکردنِ آرگومان‌های موضعی پس از آرگومانِ کلیدی، در صورتِ وجودِ آرگومانِ اضافی خطای زمان‌اجرا تولید می‌کرد. آرگومان به‌صورتِ موضعی منتقل شد.

ppocr/postprocess/vqa_token_ser_layoutlm_postprocess.py

۴) تعریفِ تکراریِ کلاس‌های زیان در دیستیلیشن
دو کلاس عیناً دوبار تعریف شده بودند (تعریفِ دوم، اولی را پنهان می‌کرد). نسخه‌های تکراری حذف شدند (۲۱۶ خط کدِ مرده).

ppocr/losses/distillation_loss.py

۵) باگ‌های زیرپروژه‌ی بنچمارکِ DBNet
این مسیر خارج از پوششِ لینتِ CI است و باگ‌ها نهفته مانده بودند: نام‌های تعریف‌نشده، عدم‌تطابقِ نگه‌دارنده‌های قالبِ رشته، استثنای پرتاب‌نشده، نامِ کلاسِ اشتباه (کپی‌وپیست)، آرگومان‌های گم‌شده‌ی خط‌فرمان، و فراخوانیِ رابطِ ناسازگار (PyTorch به‌جای Paddle).

benchmark/PaddleOCR_DBNet/models/backbone/resnet.py
benchmark/PaddleOCR_DBNet/tools/infer.py
benchmark/PaddleOCR_DBNet/utils/cal_recall/rrc_evaluation_funcs.py
benchmark/PaddleOCR_DBNet/utils/ocr_metric/icdar2015/detection/icdar2013.py
benchmark/PaddleOCR_DBNet/utils/ocr_metric/icdar2015/detection/mtwi2018.py
benchmark/analysis.py

پاک‌سازی (کدِ مرده/تکراری)

حذفِ واردسازی‌های تکراری و یک اعلانِ سراسریِ بلااستفاده؛ بدونِ تغییرِ رفتار.

ppocr/data/imaug/label_ops.py
ppocr/modeling/heads/det_ct_head.py
ppocr/modeling/heads/self_attention.py
ppocr/modeling/transforms/tsrn.py
ppstructure/table/table_metric/table_metric.py

تست و اعتبارسنجی

یک تستِ رگرسیونِ بدونِ وابستگی به فریم‌ورکِ سنگین برای باگِ شماره ۱ افزوده شد (با همان الگوی ماژول‌های جایگزینِ موجود در مخزن). این تست روی کدِ پیش از اصلاح شکست می‌خورد و پس از اصلاح پاس می‌شود.

tests/test_lmdb_sr_max_len.py

بررسی‌های زیر به‌صورتِ محلی و مطابقِ پیکربندیِ CI بدونِ خطا گذشتند:

black==24.10.0  (formatting)
flake8 --select=E9,F63,F7,F82,E721
py_compile  (all changed files)
existing safe-loading tests  (lmdb / yaml / latexocr)

اعتبارسنجیِ کاملِ زمان‌اجرا نیازمندِ نصبِ کاملِ PaddlePaddle است؛ از این رو تمرکزِ اعتبارسنجی بر تحلیلِ ایستا، قالب‌بندی، و تست‌های بدونِ فریم‌ورک بوده است.

@CLAassistant

CLAassistant commented Jun 2, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@paddle-bot

paddle-bot Bot commented Jun 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

- ppocr/data/lmdb_dataset.py: split "except IOError or len(word) > max_len"
  (the `or` made the length check dead) into a real except + length guard
- ppocr/modeling/backbones/rec_pphgnetv2.py: stop a duplicate import from
  shadowing the custom NPU AdaptiveAvgPool2D class
- ppocr/postprocess/vqa_token_ser_layoutlm_postprocess.py: forward `batch`
  positionally to avoid TypeError when *args is non-empty
- ppocr/losses/distillation_loss.py: remove duplicate DistillationKLDivLoss
  and DistillationDKDLoss class definitions (dead, shadowed code)
- benchmark/PaddleOCR_DBNet: fix NameErrors (model_zoo, precision, model_dir,
  logger, xmin/ymin, num_overlaps_gt, evaluator name), a missing `raise`,
  a %-format placeholder mismatch, and missing argparse arguments
- remove duplicate imports and an unused `global` in several modules
- tests: add a paddle-free regression test for the LMDB SR max-length guard

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Milomilo777 Milomilo777 force-pushed the fix/static-analysis-bugfixes branch from 1e57fc3 to 3b32e6c Compare June 2, 2026 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants