إذا جمعت كل نتيجة False تحت عنوان «أيام مستبعدة»، فقد يدخل تاريخ مفقود في العدد. نقارن ثلاث حالات في بيانات مؤلفة: يوم مستبعد، ويوم لا يختاره قناعنا، وقيمة NaT.
نتيجة دون سبب
تعيد is_busday نتيجة منطقية لصلاحية اليوم وفق القناع والاستبعادات. [1]
التنفيذ المحدد الذي راجعناه يستبعد NaT من النتيجة True. [2]
وتفحص isnat وجود NaT في قيم datetime أو timedelta. [3]
لذلك نفصل سؤالين في هذا المقال: هل المدخل تاريخ معلوم في تجربتنا؟ وهل يختاره التقويم المؤلف؟ لا نستنتج سبب الرفض من علم منطقي واحد.
أربعة مدخلات
شغّلنا NumPy 2.3.5 على CPython 3.12.14. أنشأنا D=np.array(["2026-11-16","2026-11-14","NaT","2026-11-17"],dtype="datetime64[D]")، وH=np.array(["2026-11-16"],dtype="datetime64[D]").
اخترنا weekmask="1111100"، أي الاثنين إلى الجمعة في شروطنا. ليست H قائمة عطلات جهة حقيقية؛ اخترنا استبعاد الاثنين المذكور للتمييز بين حالتين معلومتين.
أعاد np.is_busday(D,weekmask="1111100",holidays=H) القيم [False,False,False,True]، بنوع bool والشكل (4,). يتساوى علم الاثنين المستبعد مع علم السبت غير المختار ومع علم NaT.
يعرف مرجع Python أن 16 نوفمبر اثنين و14 نوفمبر سبت و17 نوفمبر ثلاثاء. الاثنين يختاره القناع لكنه في H؛ السبت لا يختاره القناع؛ الثلاثاء يختاره ولا يوجد في H. لا يعين المرجع يوم أسبوع لقيمة NaT.
لو عددنا نتائج False فقط لوجدنا ثلاثة مدخلات. هذا عدد الأعلام السالبة في النداء، وليس عدد التواريخ المعلومة غير الصالحة في تصنيفنا.
فصل المفقود
أعاد np.isnat(D) القيم [False,False,True,False]، بنوع bool والشكل (4,). ظهرت قيمة NaT في الخانة الثالثة وحدها.
حفظنا B= np.is_busday(D,weekmask="1111100",holidays=H)، وN=np.isnat(D)، ثم حسبنا (~B)&(~N). أعطت النتيجة [True,True,False,False].
في فئة «معلوم غير صالح» عندنا، الاثنين والسبت True، وقيمة NaT False، والثلاثاء الصالح False. العدد هنا اثنان، لأننا أضفنا شرط العلم بالتاريخ إلى شرط عدم اختياره.
هذا التصنيف لا يحدد أي اليومين المعلومين استبعدته H وأيهما رفضه القناع. احتفظنا بالقناع وقائمة الاستبعاد عندما فسرنا المثال؛ لم نسم النتيجة تشخيصًا عامًا لسبب False.
ولا يقدر هذا القناع تاريخًا بديلًا للمفقود، أو يرحله إلى يوم آخر، أو يحسب مدة أو إزاحة. إنه تصنيف للمدخلات المسجلة في التجربة.

مرجع وحدود
تعامل مرجعنا مع العلامة المؤلفة "NaT" بوصفها مفقودة. وللتواريخ الأخرى استعمل datetime.date.fromisoformat ثم weekday وفحص عضوية التاريخ في مجموعة H. لم يستدع المرجع is_busday أو isnat لإنتاج المتوقع.
للشبكة أخذنا 14 يومًا متتابعًا من 2026-12-01، وأدخلنا NaT في كل واحد من 15 موضعًا ممكنًا. قارنا الأقنعة 1111100 و1010100 و0000011 مع ثلاث قوائم استبعاد: فارغة، أو 2026-12-02، أو ذلك اليوم مع 2026-12-05.
العدد 15×3×3=135 حالة شبكية؛ أضفنا مثال نوفمبر خارج تلك الشبكة فصار المجموع 136. لكل حالة خمسة فحوص: أعلام الصلاحية، وأعلام المفقود، والتصنيف المركب أمام المتوقع؛ ثم الشكل ونوع bool؛ ثم ثبات بايتات مصفوفتَي المدخل والاستبعاد.
استدعينا الدالتين مرة لكل حالة، أي 272 نداءً. مرت 136×5=680 مجموعة تحقق؛ حفظنا القيم الفعلية لكل حالة مع إعداداتها.
النطاق مصفوفات أحادية datetime64[D]، وقيمة NaT واحدة لكل حالة، وأقنعة فيها يوم مختار على الأقل، وقوائم استبعاد مؤلفة بتواريخ معلومة. لم نفحص دقة أخرى أو أبعادًا أخرى أو out أو busdaycal أو صيغًا تاريخية معطوبة أو NaT داخل قائمة الاستبعاد أو أداء.
ولم ننشئ تقويم مؤسسة أو نحسب ساعات خدمة أو مناطق زمنية. استخدم الأعلام مع شروط التقويم وحالة المدخل عندما تصف العدد، ثم تحقق من الحالات التي يحتاجها برنامجك خارج النطاق المحدد.
| المدخل | is_busday | isnat | معلوم غير صالح |
|---|---|---|---|
| 2026-11-16 | False | False | True |
| 2026-11-14 | False | False | True |
| NaT | False | True | False |
| 2026-11-17 | True | False | False |
للتوسع: تقويم مدة الخدمة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
