# استيراد أدوات مساعدة

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

The transformers toolkit is not made to error-out on import of a model that has a specific dependency; instead, an object for which you are lacking a dependency will error-out when calling any method on it. As an example, if `torchvision` isn't installed, the fast image processors will not be available.

لا يزال هذا الكائن قابلاً للاستيراد:

```python
>>> from transformers import DetrImageProcessor
>>> print(DetrImageProcessor)
<class 'transformers.models.detr.image_processing_detr.DetrImageProcessor'>
```

ومع ذلك، تتحقق الدوال على ذلك الكائن من تبعياتها الاختيارية عند استدعائها. فعلى سبيل المثال، إذا لم يكن `torchvision` متاحًا، فإن هذا الاستدعاء يثير `ImportError`:

```python
>>> DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
ImportError:
DetrImageProcessor requires the Torchvision library but it was not found in your environment. Check out the instructions on the
installation page: https://pytorch.org/get-started/locally/ and follow the ones that match your environment.
Please note that you may need to restart your runtime after installation.
```

لننظر إلى كيفية تحديد تبعيات كائنات محددة.

## تحديد تبعيات الكائن

### بناءً على اسم الملف

جميع الكائنات الموجودة تحت اسم ملف معيّن لها اعتماد تلقائي على الأداة المرتبطة باسم الملف

**PyTorch**: جميع الملفات التي تبدأ بـ `modeling_` تعتمد تلقائياً على PyTorch

**مُقسِّمات الرموز**: جميع الملفات التي تبدأ بـ `tokenization_` وتنتهي بـ `_fast` لها اعتماد تلقائي على `tokenizers`

**الرؤية**: جميع الملفات التي تبدأ بـ `image_processing_` لها اعتماد تلقائي على مجموعة الاعتمادات `vision`؛ وفي وقت الكتابة، تحتوي هذه المجموعة فقط على اعتماد `pillow`.

**الرؤية + Torch + Torchvision**: جميع الملفات التي تبدأ بـ`image_processing_` وتنتهي بـ`_fast` لها اعتماد تلقائي على `vision` و`torch` و`torchvision`.

تُضاف جميع هذه التبعيات التلقائية فوق التبعيات الصريحة المفصّلة أدناه.

### التبعيات الصريحة للكائنات

نضيف طريقة تُسمى `requires` تُستخدم لتحديد اعتماديات كائن معيّن بشكل صريح. كمثال، تحتوي فئة `Trainer` على اعتماديتين أساسيتين: `torch` و`accelerate`. فيما يلي كيفية تحديد هذه الاعتماديات المطلوبة:

```python
from .utils.import_utils import requires

@requires(backends=("torch", "accelerate"))
class Trainer:
    ...
```

جميع الواجهات الخلفية التي يمكن إضافتها هنا هي الواجهات الخلفية المتاحة في وحدة `import_utils.py`.

بالإضافة إلى ذلك، يمكن تحديد إصدارات محددة في كل إطار عمل. على سبيل المثال، هذه هي الطريقة التي تحدد بها متطلبًا على torch>=2.6 في فئة `Trainer`:

```python
from .utils.import_utils import requires

@requires(backends=("torch>=2.6", "accelerate"))
class Trainer:
    ...
```

يمكنك تحديد العمليات التالية: `==`، `>`، `>=`، `<`، `<=`، `!=`.

## الطرق[[transformers.utils.import_utils.define_import_structure]]

#### transformers.utils.import_utils.define_import_structure[[transformers.utils.import_utils.define_import_structure]]

```python
transformers.utils.import_utils.define_import_structure(module_path: str, prefix: str | None = None)
```

تستقبل هذه الطريقة module_path كمدخل وتُنشئ بنية استيراد يمكن لـ _LazyModule فهمها ومعالجتها.

فيما يلي مثال على بنية استيراد المخرجات على مستوى src.transformers.models:

{ frozenset({'tokenizers'}): { 'albert.tokenization_albert_fast': {'AlbertTokenizer'} }, frozenset(): { 'albert.configuration_albert': {'AlbertConfig'}, 'align.processing_align': {'AlignProcessor'}, 'align.configuration_align': {'AlignConfig', 'AlignTextConfig', 'AlignVisionConfig'}, 'altclip.configuration_altclip': {'AltCLIPConfig', 'AltCLIPTextConfig', 'AltCLIPVisionConfig'}, 'altclip.processing_altclip': {'AltCLIPProcessor'} } }

هيكل الاستيراد هو قاموس (dict) مُعرَّف بمجموعات مجمّدة (frozensets) كمفاتيح، وبقواميس (dicts) من السلاسل النصية إلى مجموعات من الكائنات.

إذا لم يكن `prefix` قيمة None، فسيتم إضافة ذلك البادئة إلى جميع المفاتيح في القاموس المُعاد.

#### transformers.utils.import_utils.requires[[transformers.utils.import_utils.requires]]

```python
transformers.utils.import_utils.requires(backends = ())
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/import_utils.py#L2974)

يتيح هذا المُزيّن أمرين:
- إرفاق مجموعة `__backends` إلى كائن لمعرفة الخلفيات (backends) اللازمة لتنفيذه بشكل صحيح دون إنشاء مثيل له
- يُستخدم السلسلة النصية '@requires' لاستيراد الكائنات ديناميكيًا

#### transformers.requires_backends[[transformers.requires_backends]]

```python
transformers.requires_backends(obj, backends)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/import_utils.py#L2394)

**المعاملات:**

obj : الكائن المراد فحصه

backends : قائمة أو مجموعة (tuple) من الخوادم الخلفية (backends) التي يجب فحصها.

طريقة ترفع استثناءً تلقائيًا في حال عدم توفر الخوادم الخلفية المحددة. تُستخدم غالبًا أثناء

التهيئة للتأكد من تثبيت التبعيات المطلوبة:

```py
requires_backends(self, ["torch"])
```

يجب تعريف الخوادم الخلفية في `BACKEND_MAPPING` المُعرّف في `transformers.utils.import_utils`.

