الكتابة "u2" نجحت مع dtype وأعطت uint16، لكنها سببت KeyError عند تمريرها مباشرة إلى typename. سنقرأ رمز char الذي رجع، ثم نختبر float16 كحالة لا تنجح فيها خطوة الرمز أيضًا.
وصف ورمز
typename تصف رمز النوع؛ وdtype تنشئ كائن نوع. [1] [3]
في المصدر المقروء تستعمل typename المفتاح كما هو في جدول أوصاف. [2] لذلك نراجع الكتابة الدقيقة التي مررناها.
تجربتنا على NumPy 2.3.5 وCPython 3.12.14 في هذا الحاسوب. المدخلات نصوص لوصف النوع؛ لم ننشئ قيمًا عددية أوعنصرًا من مصفوفة كي نستخرج نوعه.
نحفظ أربع ملاحظات في كائن dtype: name وchar وkind وitemsize. لا نساوي اسم الوصف النصي الذي تعرضه typename باسم dtype المطبوع في سجلنا، ولا نحول نصًا واصفًا إلى ادعاء بأن بيانات انتقلت بين نوعين.
من u2 إلى H
استدعينا np.typename("u2") مباشرة. وقع KeyError، وسجلنا مفتاح الخطأ "u2". لم ترجع الدالة نصًا وصفيًا في هذا النداء؛ سجل الخطأ ليس قيمة نجاح.
وفي نداء منفصل أنشأنا dt=np.dtype("u2"). رجع كائن من numpy.dtypes.UInt16DType، باسـم uint16 ورمز char="H" وفئة kind="u" وحجم عنصر 2 بايت.
بعد ذلك استدعينا np.typename(dt.char). رجع النص "unsigned short" من builtins.str. لم نمرر "u2" في هذا النداء؛ أخذنا H من الخاصية المسجلة، ولذلك لا نسمي النجاح اللاحق قبولًا للكتابة الأصلية.
السجل يميز ثلاثة أشياء: كتابة النوع التي قبلتها dtype، والرمز H، والنص الوصفي الذي أعادته typename. جمعها في خانة اسم واحدة يخفي أي مدخل نجح وأي مدخل فشل.
النص الوصفي من حقائق واجهة المكتبة الموثقة، وليس تسمية مؤلفة نزعم أصالتها. القيمة المضافة في مثالنا هي مقارنة النداءات المختلفة على كتابة جديدة، مع حفظ النتائج وأسماء مدخلاتها.
رمز مستخرج ولا وصف
من np.dtype("f2") حصلنا على كائن float16، وchar="e" وkind="f" وحجم عنصر 2 بايت. نجح إنشاء وصف النوع مثلما نجح مع u2، لكن ذلك لا يحسم نجاح النداء التالي.
استدعينا np.typename(dt.char) للكائن الجديد، فوقع KeyError بمفتاح "e". وكذلك رفع الاستدعاء المباشر np.typename("f2") خطأً بمفتاح "f2". الخطآن منفصلان، مع نجاح dtype بينهما.
إذن لا يصلح المثال الأول وعدًا بأن أخذ char سيجعل كل نوع مقبولًا لدى typename. نجح H في المثال الأول، وفشل e في التحكم؛ نحتفظ بشرط دعم المفتاح نفسه عند وصف المسار.
راجعنا أيضًا الكتابتين "f2" و"float16". سجلتا الاسم float16 والرمز e نفسيهما في الدفعة، وفشل النداء بالرمز في كلتيهما. هاتان كتابتان مختلفتان، وليستا نوعين مختلفين في سجل الأسماء.
ومن الملاحظات على هذا الحاسوب أن i4 أعطت int32 والرمز l، وu4 أعطت uint32 والرمز L. لا نستبدل هذه الرموز بافتراض عن أسماء C أوعن حاسوب آخر؛ نحفظ الرمز الذي خرج مع الاسم وحجم العنصر.
لم نستخدم الكلمات الوصفية لاستنتاج عرض التخزين. لا يلغي النص الذي يظهر عند دعم المفتاح الحاجة إلى قراءة name وitemsize الفعليين في وصف النوع الذي نراجعه.

العد والنطاق
كتبنا 20 نصًا مستقلًا: i1 وi2 وi4 وi8 وu1 وu2 وu4 وu8 وf2 وf4 وf8 وc8 وc16 وbool وint16 وuint16 وfloat16 وfloat32 وcomplex64 وobject. تمثل هذه الكتابات 15 اسم dtype مختلفًا؛ بعض الأسماء القصيرة والطويلة بدائل مقصودة.
لكل كتابة ثلاثة نداءات: typename على النص مباشرة، ثم dtype على النص، ثم typename على char المأخوذ من كائن النوع. صارت 20×3=60 محاولة في الدفعة المكتملة، مع مدخل كل محاولة وناتجها أوخطئها.
عادت 20 كائنًا من dtype و18 نصًا من نداء الرمز؛ المجموع 38 عودة ناجحة. وسجلنا 20 KeyError في المسار المباشر وخطأين للرمز e، فصار عدد سجلات الخطأ 22. لا نصف المحاولات الستين بأنها 60 نصًا معادًا.
أسماء كائنات النوع وخصائصها، ومفاتيح الأخطاء ورسائلها، حقول مرافقة. لا نعدها أعدادًا خرجت من دالة عددية أوعناصر في مصفوفة منطقية. وقد بقيت نصوص المدخل كما أعلنّاها.
سبق هذه الدفعة فحص أول توقف بعد ثمانية نداءات عند توقع خاطئ لرمز i4، ثم 22 نداء dtype للتشخيص سجلت مستقلة. صححنا رمزي l وL قبل الدفعة المكتملة؛ عدها الستون لا يشمل محاولات التجهيز الثلاثين.
أعلن مرجع الدفعة الكتابات وحقول أوصافها، مع رموز المنصة من التشخيص المسجل، وأوصاف الواجهة الموثقة. لم تستخدم typename أوالشفرة البعيدة لصنع التوقعات؛ حقول char هنا مرتبطة بتشخيص محلي صريح، لا تنبؤ مستقل بالمنصة.
لم ننشئ مصفوفات أونحول بيانات أونختبر السماح بالتحويل أوعلاقات الأنواع أوأنواعًا مخصصة أوبنى حقول أوأوصافًا زمنية أوترتيب بايتات أوأداءً أوإصدارات أخرى. قراءة الجدول البعيد لا تثبت مطابقته لثنائية المكتبة المثبتة؛ احتفظ بإصدار التشغيل وبحدود المفاتيح التي اختبرناها.
| Spelling | dtype name / char | Direct typename | typename(char) |
|---|---|---|---|
| u2 | uint16 / H | KeyError | unsigned short |
| f2 | float16 / e | KeyError | KeyError |
| uint16 | uint16 / H | KeyError | unsigned short |
| float16 | float16 / e | KeyError | KeyError |
للتوسع: معنى رمز النوع.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
