عن المشروع

einops هي مكتبة Python مفتوحة المصدر توفر عمليات مرنة وقوية على الموترات من خلال ترميز مستوحى من أينشتاين، مصممة لجعل كود معالجة الموترات أكثر وضوحًا وموثوقية. الاسم يشير إلى ترميز مستوحى من أينشتاين للعمليات، مستوحى تقريبًا من numpy.einsum. واجهة برمجة التطبيقات الأساسية بسيطة لكنها قوية، مبنية حول ثلاث وظائف رئيسية: rearrange (إعادة ترتيب العناصر وفقًا لنمط)، reduce (دمج إعادة الترتيب مع الاختزال مثل المتوسط أو القيمة القصوى)، وrepeat (نسخ على محور جديد). الإضافات اللاحقة تشمل pack وunpack لدمج عدة موترات ذات أبعاد مختلفة بشكل قابل للعكس، وeinsum مع دعم أسماء محاور متعددة الأحرف. تتضمن einops أيضًا طبقة EinMix، وهي طبقة خطية عامة مناسبة لمعماريات MLP Mixers وما شابهها، بالإضافة إلى أغلفة طبقات خاصة بالأطر (Rearrange، Reduce، إلخ) لـ PyTorch وTensorFlow وFlax وPaddle. يركز الترميز على المعلومات الدلالية: بدلاً من كتابة x.view(x.shape[0], -1)، يكتب المستخدمون rearrange(x, 'b c h w -> b (c h w)')، وهو ما يوثق أشكال الإدخال والإخراج. أسماء المحاور مثل 'time c h w -> time (c h w)' تشير إلى أن البيانات عبارة عن تسلسل فيديو وليست دفعة مستقلة. يمكن للمستخدمين أيضًا تثبيت أبعاد محددة (مثل c=256, h=19, w=19) بحيث تتحقق العملية من الأشكال في وقت التشغيل بدلاً من الاعتماد على التعليقات. النتائج محددة بدقة، لذا يمكن كتابة عمليات غامضة مثل depth-to-space بطريقة لا لبس فيها. تعمل نفس الصيغة بشكل موحد عبر التجميع أحادي وثنائي وثلاثي الأبعاد، ويتسق السلوك عبر الأطر حتى عندما تختلف واجهات برمجة التطبيقات الأصلية (على سبيل المثال، تختلف دلالات flatten بين NumPy/PyTorch وTensorFlow/Keras). تدعم einops NumPy وPyTorch وTensorFlow وJAX وCuPy وFlax وPaddle وOneFlow وtinygrad وPyTensor، وتعمل مع أي إطار ينفذ معيار Python array API، بما في ذلك NumPy >= 2.0 وMLX وpydata/sparse وcubed وnndonnx. تدعم torch.compile وtorch.jit.script لطبقات PyTorch. تتطلب المكتبة Python 3.10 أو أحدث وتُثبت عبر pip install einops. عُرض المشروع كعرض شفهي في ICLR 2022 ويستخدمه أكثر من 10,000 مشروع على GitHub.