تحصل على مصفوفة من سمة التقويم وتغير عنصرًا فيها دون خطأ. هل يكفي ذلك لتغيير الأيام التي يختارها التقويم نفسه؟ نفحص مصفوفتين معادتين وتقويمًا أصليًا ثم تقويمًا جديدًا صريحًا.
السمة والنسخة
تعيد سمات weekmask وholidays نسخًا من بيانات busdaycalendar الداخلية. [1]
تصف الوثيقة القناع بأنه سبع خانات من الاثنين إلى الأحد، وقائمة الاستبعاد بأنها تواريخ إضافية غير صالحة. [1]
نسأل عن كتابة عنصر داخل مصفوفة معادة، لا عن تعيين مصفوفة جديدة للسمة نفسها. نجاح الكتابة في الكائن الذي حصلنا عليه لا يكفي لإثبات أن التقويم الذي نمرره لاحقًا تغير.
تعديلان ناجحان
شغّلنا NumPy 2.3.5 على CPython 3.12.14. أنشأنا cal=np.busdaycalendar(weekmask="1010100",holidays=["2026-11-18"]). هذا تقويم مؤلف، لا تقويم عطلات مؤسسة.
تواريخنا من datetime64[D] هي ["2026-11-16","2026-11-18","2026-11-20","2026-11-21"]. يحدد مرجع Python أيامها بأنها الاثنين والأربعاء والجمعة والسبت.
أعاد np.is_busday(D,busdaycal=cal) القيم [True,False,True,False]، بنوع bool والشكل (4,). الأربعاء مختار أسبوعيًا لكنه في قائمة الاستبعاد؛ السبت غير مختار.
حفظنا w=cal.weekmask وh=cal.holidays. كانت w من bool بالشكل (7,)، وh من datetime64[D] بالشكل (1,). في تشغيلنا أمكن الكتابة فيهما.
نفذنا w[0]=False وh[0]=np.datetime64("2026-11-20","D"). صارت نسخة القناع [False,False,True,False,True,False,False]، وقائمة النسخة ["2026-11-20"]. لم يقع استثناء في هذين الإسنادين.
التغيير في w يزيل الاثنين من النسخة، والتغيير في h ينقل الاستبعاد المؤلف من الأربعاء إلى الجمعة في النسخة. سجلنا القيم الجديدة بدل الاستدلال من غياب الاستثناء وحده.
أي تقويم استعملنا؟
استدعينا np.is_busday(D,busdaycal=cal) مرة أخرى بالتقويم الأصلي نفسه؛ بقيت القيم [True,False,True,False]. وعند قراءة cal.weekmask وcal.holidays من جديد وجدنا القناع 1010100 والتاريخ 2026-11-18 كما قبل التعديل.
إذن لدينا ثلاث جهات في المثال: التقويم cal، والمصفوفة w، والمصفوفة h. قيم المصفوفتين المعدلتين ليست إعدادات جديدة للتقويم الذي حفظناه.
للتحكم، كونّا mask_text="".join("1" if b else "0" for b in w.tolist())، فكان 0010100. ثم أنشأنا new_cal=np.busdaycalendar(weekmask=mask_text,holidays=h).
باستعمال new_cal أعاد is_busday القيم [False,True,False,False]. الاثنين أصبح غير مختار، والأربعاء لم يعد مستبعدًا في الإعداد الجديد، والجمعة مستبعدة، والسبت بقي غير مختار.
إعادة البناء هنا نداء صريح بالقناع النصي والقائمة المعدلة. ليست أثرًا جانبيًا تلقائيًا لكتابة w أو h. احتفظنا بالتقويمين كي تظهر المقارنة أمام البيانات نفسها.
في محاولة أولى للتحكم، أعطى تمرير مصفوفة bool المعادة مباشرةً إلى وسيط weekmask استثناء TypeError في إصدارنا. التحكم الناجح الموصوف يستعمل السلسلة ذات السبع خانات؛ لا يثبت قبول مصفوفة bool في ذلك الوسيط.

مرجع وحدود
أنتج مرجع Python الأعلام المتوقعة من weekday لكل تاريخ وعضويته في مجموعة الاستبعاد، وفق قناع نصي محدد. لا يستدعي المرجع busdaycalendar أو is_busday لتوليد المتوقع.
للشبكة أخذنا الأقنعة 1111100 و1010100 و0000011، و14 تاريخ بداية متتابعًا من 2026-12-01. لكل بداية قائمة من 14 يومًا؛ اخترنا للاستبعاد أول تاريخ مختار أو آخر تاريخ مختار في الأسبوع الأول.
قارنّا أيضًا إلغاء أول يوم مختار أو آخر يوم مختار في نسخة القناع، ونقل تاريخ نسخة الاستبعاد سبعة أيام إلى الأمام. لكل قناع يومان مختاران على الأقل قبل الإلغاء، ليبقى يوم بعده.
عدد الحالات 3×14×2×2=168؛ أضفنا مثال نوفمبر خارج الشبكة فصار المجموع 169. تحققنا من الأعلام قبل الكتابة؛ ونجاح تغييري النسختين وقيمهما؛ وثبات التقويم الأصلي وأعلامه؛ وناتج التقويم المعاد بناؤه؛ ومن الأنواع والأشكال وثبات بايتات مصفوفتَي المدخل والاستبعاد الأصليتين.
هذه خمس مجموعات لكل حالة: 169×5=845 مرت. استدعينا is_busday ثلاث مرات لكل حالة، أي 507 نداءات، وأنشأنا تقويمين لكل حالة، أي 338 إنشاءً.
النطاق تواريخ معلومة أحادية datetime64[D]، وثلاثة أقنعة غير خالية، وتاريخ استبعاد واحد يحتفظ به التقويم الأصلي، وتعديل عنصر واحد في كل نسخة، وقناع نصي لإعادة البناء. لم نفحص NaT أو سمات فارغة أو التعيين المباشر للسمة أو دقة وأبعادًا أخرى أو out أو إزاحات وعدًا بين تاريخين أو أداء وتزامنًا.
لم نختبر تقويم جهة حقيقية أو ساعات ومناطق زمنية. عند مراجعة برنامج، تحقق من الكائن الذي تستعمله الحسابات بعد التغيير، واحفظ الإعدادات الجديدة في تقويم جديد صريح ضمن النطاق الذي اختبرته.
| التقويم | القناع | الاستبعاد | الأعلام |
|---|---|---|---|
| الأصلي قبل | 1010100 | 2026-11-18 | True,False,True,False |
| الأصلي بعد تعديل النسختين | 1010100 | 2026-11-18 | True,False,True,False |
| جديد بإعدادات النسختين | 0010100 | 2026-11-20 | False,True,False,False |
للتوسع: تقويم مدة الخدمة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
