Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[i18n-ar] Translated file : docs/source/ar/pr_checks.md into Arabic #33067

Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 185 additions & 0 deletions docs/source/ar/pr_checks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# الفحوصات على طلب سحب (Pull Request)

عند فتح طلب سحب على 🤗 Transformers، سيتم تشغيل عدد كبير من الفحوصات للتأكد من أن التصحيح الذي تقوم بإضافته لا يتسبب في كسر أي شيء موجود. وتنقسم هذه الفحوصات إلى أربعة أنواع:
- الاختبارات العادية
- بناء الوثائق
- أسلوب كتابة الكود والوثائق
- اتساق المستودع العام

في هذه الوثيقة، سنحاول شرح ماهية هذه الفحوصات المختلفة والسبب وراءها، بالإضافة إلى كيفية تصحيح الأخطاء فيها محلياً في حال فشل أحدها في طلب السحب الخاص بك.

ملاحظة: من الناحية المثالية، تتطلب هذه الفحوصات أن يكون لديك تثبيت تطويري:

```bash
pip install transformers[dev]
```

أو لتثبيت قابل للتحرير:

```bash
pip install -e .[dev]
```

داخل مستودع Transformers. نظرًا لأن عدد التبعيات الاختيارية لـ Transformers قد زاد بشكل كبير، فمن المحتمل ألا تتمكن من الحصول عليها جميعًا. إذا فشل التثبيت الإنمائي، فتأكد من تثبيت إطار عمل التعلم العميق الذي تعمل به (PyTorch أو TensorFlow و/أو Flax) ثم قم بتشغيل الأمر التالي:

```bash
pip install transformers[quality]
```

أو لتثبيت قابل للتحرير:

```bash
pip install -e .[quality]
```

## الاختبارات

جميع الوظائف التي تبدأ بـ `ci/circleci: run_tests_` تقوم بتشغيل أجزاء من مجموعة اختبارات Transformers. يركز كل من هذه الوظائف على جزء من المكتبة في بيئة معينة: على سبيل المثال، تقوم وظيفة `ci/circleci: run_tests_pipelines_tf` بتشغيل اختبار الأنابيب في بيئة مثبت فيها TensorFlow فقط.

ملاحظة: لتجنب تشغيل الاختبارات عندما لا يكون هناك تغيير حقيقي في الوحدات النمطية التي تختبرها، يتم تشغيل جزء فقط من مجموعة الاختبارات في كل مرة: يتم تشغيل أداة مساعدة لتحديد الاختلافات في المكتبة بين ما قبل وما بعد طلب السحب (ما يعرضه GitHub في علامة التبويب "تغييرات الملفات") ويختار الاختبارات التي تأثرت بهذا الاختلاف. يمكن تشغيل هذه الأداة المساعدة محليًا باستخدام الأمر التالي:

```bash
python utils/tests_fetcher.py
```

من جذر مستودع Transformers. ستقوم بما يلي:

1. التحقق من كل ملف في الاختلافات إذا كانت التغييرات في الكود أو فقط في التعليقات أو التوثيق. يتم الاحتفاظ فقط بالملفات التي بها تغييرات حقيقية في الكود.
2. إنشاء خريطة داخلية تعطي لكل ملف من ملفات كود المصدر للمكتبة جميع الملفات التي تؤثر عليها بشكل متكرر. يقال إن الوحدة النمطية أ تؤثر على الوحدة النمطية ب إذا كانت الوحدة النمطية ب تستورد الوحدة النمطية أ. بالنسبة للتأثير المتكرر، نحتاج إلى سلسلة من الوحدات النمطية التي تنتقل من الوحدة النمطية أ إلى الوحدة النمطية ب والتي تستورد كل منها الوحدة النمطية السابقة.
3. تطبيق هذه الخريطة على الملفات التي تم جمعها في الخطوة 1، والتي تعطينا قائمة بملفات النموذج التي تأثرت بطلب السحب.
4. تعيين كل من هذه الملفات إلى ملف (ملفات) الاختبار المقابلة والحصول على قائمة الاختبارات التي سيتم تشغيلها.

عند تنفيذ البرنامج النصي محليًا، يجب أن تحصل على نتائج الخطوات 1 و3 و4 مطبوعة وبالتالي معرفة الاختبارات التي يتم تشغيلها. كما سيقوم البرنامج النصي بإنشاء ملف باسم `test_list.txt` يحتوي على قائمة الاختبارات التي سيتم تشغيلها، ويمكنك تشغيلها محليًا باستخدام الأمر التالي:

```bash
python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt)
```

وللتأكد فقط، يتم أيضًا تشغيل مجموعة الاختبارات الكاملة يوميًا.

## بناء الوثائق
```bash
python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt)
```

وللتأكد فقط، يتم أيضًا تشغيل مجموعة الاختبارات الكاملة يوميًا.

## بناء الوثائق

تقوم وظيفة `build_pr_documentation` ببناء وإنشاء معاينة للوثائق للتأكد من أن كل شيء يبدو على ما يرام بمجرد دمج طلب السحب الخاص بك. سيقوم بوت بإضافة رابط لمعاينة الوثائق في طلب السحب الخاص بك. يتم تحديث أي تغييرات تجريها على طلب السحب تلقائيًا في المعاينة. إذا فشلت عملية بناء الوثائق، فانقر فوق **تفاصيل** بجانب الوظيفة الفاشلة لمعرفة أين حدث الخطأ. غالبًا ما يكون الخطأ بسيطًا مثل ملف مفقود في `toctree`.

إذا كنت مهتمًا ببناء أو معاينة الوثائق محليًا، فراجع ملف [`README.md`](https://github.com/huggingface/transformers/tree/main/docs) في مجلد الوثائق.

## أسلوب كتابة الكود والوثائق

يتم تطبيق تنسيق الكود على جميع ملفات المصدر والأمثلة والاختبارات باستخدام `black` و`ruff`. لدينا أيضًا أداة مخصصة للعناية بتنسيق التوثيقات وملفات `rst` (`utils/style_doc.py`)، وكذلك ترتيب الاستيراد الكسول الذي يتم تنفيذه في ملفات `__init__.py` الخاصة بـ Transformers (`utils/custom_init_isort.py`). يمكن إطلاق كل هذا عن طريق تنفيذ الأمر التالي:

```bash
make style
```

وتتحقق CI من تطبيق هذه التنسيقات داخل فحص `ci/circleci: check_code_quality`. كما يقوم بتشغيل `ruff`، الذي سيلقي نظرة أساسية على كودك وسيشتكي إذا وجد متغيرًا غير معرف، أو متغيرًا غير مستخدم. لتشغيل هذا الفحص محليًا، استخدم الأمر التالي:

```bash
make quality
```

قد يستغرق هذا الكثير من الوقت، لذا لتشغيل نفس الشيء على الملفات التي قمت بتعديلها في الفرع الحالي فقط، قم بتشغيل الأمر التالي:

```bash
make fixup
```

سيقوم هذا الأمر الأخير أيضًا بتشغيل جميع الفحوصات الإضافية لاتساق المستودع. دعونا نلقي نظرة عليها.

## اتساق المستودع

هذا يجمع جميع الاختبارات للتأكد من أن طلب السحب الخاص بك يترك المستودع في حالة جيدة، ويتم تنفيذه بواسطة فحص `ci/circleci: check_repository_consistency`. يمكنك تشغيل هذا الفحص محليًا عن طريق تنفيذ ما يلي:

```bash
make repo-consistency
```

وهذا يتحقق من أن:

- جميع الأشياء المضافة إلى init موثقة (يتم تنفيذها بواسطة `utils/check_repo.py`)
- تحتوي جميع ملفات `__init__.py` على نفس المحتوى في قسميها (يتم تنفيذها بواسطة `utils/check_inits.py`)
- جميع الأكواد المحددة على أنها نسخة من وحدة نمطية أخرى متسقة مع الأصل (يتم تنفيذها بواسطة `utils/check_copies.py`)
- تحتوي جميع فئات التهيئة على الأقل نقطة تفتيش صالحة مذكورة في توثيقاتها (يتم تنفيذها بواسطة `utils/check_config_docstrings.py`)
- تحتوي جميع فئات التهيئة فقط على السمات المستخدمة في ملفات النمذجة المقابلة (يتم تنفيذها بواسطة `utils/check_config_attributes.py`)
- تحتوي ترجمات READMEs وفهرس الوثائق على نفس قائمة النماذج مثل README الرئيسي (يتم تنفيذها بواسطة `utils/check_copies.py`)
- الجداول التي يتم إنشاؤها تلقائيًا في الوثائق محدثة (يتم تنفيذها بواسطة `utils/check_table.py`)
- تحتوي المكتبة على جميع الأشياء المتاحة حتى إذا لم يتم تثبيت جميع التبعيات الاختيارية (يتم تنفيذها بواسطة `utils/check_dummies.py`)
- جميع التوثيقات توثق الحجج في توقيع الكائن بشكل صحيح (يتم تنفيذها بواسطة `utils/check_docstrings.py`)

إذا فشل هذا الفحص، فإن العنصرين الأولين يتطلبان إصلاحًا يدويًا، ويمكن إصلاح العناصر الأربعة الأخيرة تلقائيًا عن طريق تشغيل الأمر التالي:

```bash
make fix-copies
```

وتتعلق الفحوصات الإضافية بطلبات السحب التي تضيف نماذج جديدة، خاصةً أن:

- جميع النماذج المضافة موجودة في خريطة تلقائية (يتم تنفيذها بواسطة `utils/check_repo.py`)
<!-- TODO Sylvain، أضف فحصًا للتأكد من تنفيذ الاختبارات العامة.-->
- جميع النماذج تمت اختبارها بشكل صحيح (يتم تنفيذها بواسطة `utils/check_repo.py`)

<!-- TODO Sylvain، أضف ما يلي
- جميع النماذج تمت إضافتها إلى README الرئيسي، داخل الوثائق الرئيسية
- جميع نقاط التفتيش المستخدمة موجودة بالفعل على Hub

-->

### فحص النسخ

نظرًا لأن مكتبة Transformers لديها آراء قوية فيما يتعلق بكود النماذج، ويجب تنفيذ كل نموذج بالكامل في ملف واحد دون الاعتماد على نماذج أخرى، فقد أضفنا آلية للتحقق مما إذا كانت نسخة كود طبقة نموذج معين تظل متسقة مع الأصل. بهذه الطريقة، عندما يكون هناك إصلاح للأخطاء، يمكننا معرفة جميع النماذج الأخرى المتأثرة واختيار تمرير التعديل أو كسر النسخة.

<Tip>

إذا كان الملف نسخة كاملة من ملف آخر، فيجب تسجيله في ثابت `FULL_COPIES` في ملف `utils/check_copies.py`.

</Tip>

تعتمد هذه الآلية على التعليقات من النوع `# Copied from xxx`. يجب أن يحتوي `xxx` على المسار الكامل إلى الفئة أو الدالة التي يتم نسخها أدناه. على سبيل المثال، `RobertaSelfOutput` هي نسخة مباشرة من فئة `BertSelfOutput`، لذا يمكنك أن ترى [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L289) أنه يحتوي على تعليق:

```py
# Copied from transformers.models.bert.modeling_bert.BertSelfOutput
```

ملاحظة: بدلاً من تطبيق هذا على فئة كاملة، يمكنك تطبيقه على الطرق ذات الصلة التي يتم نسخها من. على سبيل المثال [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L598) يمكنك أن ترى كيف يتم نسخ `RobertaPreTrainedModel._init_weights` من الطريقة نفسها في `BertPreTrainedModel` مع التعليق:

```py
# Copied from transformers.models.bert.modeling_bert.BertPreTrainedModel._init_weights
```

في بعض الأحيان، تكون النسخة مطابقة تمامًا باستثناء الأسماء: على سبيل المثال في `RobertaAttention`، نستخدم `RobertaSelfAttention` بدلاً من `BertSelfAttention` ولكن بخلاف ذلك، يكون الكود مطابقًا تمامًا. ولهذا السبب يدعم `# Copied from` استبدالات السلاسل البسيطة بالبناء التالي: `Copied from xxx with foo->bar`. وهذا يعني أن الكود منسوخ مع جميع مثيلات `foo` التي يتم استبدالها بـ `bar`. يمكنك أن ترى كيف يتم استخدامه [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L304C1-L304C86) في `RobertaAttention` مع التعليق:

```py
# Copied from transformers.models.bert.modeling_bert.BertAttention with Bert->Roberta
```

ملاحظة: لا ينبغي أن تكون هناك أي مسافات حول السهم (ما لم تكن المسافة جزءًا من النمط الذي سيتم استبداله بالطبع).

يمكنك إضافة عدة أنماط مفصولة بفواصل. على سبيل المثال، هنا `CamemberForMaskedLM` هو نسخة مباشرة من `RobertaForMaskedLM` مع استبدالين: `Roberta` إلى `Camembert` و`ROBERTA` إلى `CAMEMBERT`. يمكنك أن ترى [هنا](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/camembert/modeling_camembert.py#L929) كيف يتم ذلك مع التعليق:

```py
# Copied from transformers.models.roberta.modeling_roberta.RobertaForMaskedLM with Roberta->Camembert, ROBERTA->CAMEMBERT
```

إذا كانت الأسبقية مهمة (لأن أحد الاستبدالات قد يتعارض مع استبدال سابق)، يتم تنفيذ الاستبدالات من اليسار إلى اليمين.

<Tip>

إذا غيرت الاستبدالات التنسيق (إذا قمت باستبدال اسم قصير باسم طويل جدًا، على سبيل المثال)، يتم التحقق من النسخة بعد تطبيق التنسيق التلقائي.

</Tip>

وهناك طريقة أخرى عندما تكون الأنماط مجرد أشكال مختلفة لحالة الاستبدال نفسها (مع متغيرات الأحرف الكبيرة والصغيرة) هي إضافة خيار `all-casing`. [هنا](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/mobilebert/modeling_mobilebert.py#L1237) مثال في `MobileBertForSequenceClassification` مع التعليق:
```py
# Copied from transformers.models.bert.modeling_bert.BertForSequenceClassification with Bert->MobileBert all-casing
```

في هذه الحالة، يتم نسخ الكود من `BertForSequenceClassification` عن طريق استبدال ما يلي:
- `Bert` بـ `MobileBert` (على سبيل المثال عند استخدام `MobileBertModel` في التهيئة)
- `bert` بـ `mobilebert` (على سبيل المثال عند تحديد `self.mobilebert`)
- `BERT` بـ `MOBILEBERT` (في ثابت `MOBILEBERT_INPUTS_DOCSTRING`)