علوم وفضاء

busday_count: هل عكس التاريخين يقلب الإشارة فقط؟

الجمعة إلى السبت 1، والعكس صفر.
كل نداء يستبعد نهايته المحددة.

قد تتوقع أن تبديل تاريخ البداية والنهاية يعطي سالب العدد الأول. نقارن اتجاهي العد على تواريخ مؤلفة تختلف صلاحية طرفيها، ثم نحفظ الطرف المستبعد في كل نداء.

النهاية تخص النداء

تعد busday_count الأيام الصالحة دون يوم النهاية المحدد في النداء. [1]

في التنفيذ المحدد، يصحح الفرع العكسي الطرفين بعد تبديلهما قبل العد، ثم يعكس إشارة العدد. [2]

عند تبديل الوسيطين تتبدل هوية النهاية المستبعدة. لذلك نكتب زوجًا مرتبًا في بطاقة النتيجة؛ لا نحذف ترتيب التاريخين لمجرد أن المسافة التقويمية بينهما واحدة.

الجمعة والسبت

شغّلنا NumPy 2.3.5 على CPython 3.12.14. أنشأنا A=np.array("2026-11-20",dtype="datetime64[D]") وB=np.array("2026-11-21",dtype="datetime64[D]") وH=np.array([],dtype="datetime64[D]").

أعاد np.busday_count(A,B,weekmask="1111100",holidays=H) القيمة 1. بدأ مرجعنا من الجمعة، فعدها لأنها مختارة وغير مستبعدة، ثم وصل إلى السبت الذي يوقف العد قبل دخوله.

أعاد np.busday_count(B,A,weekmask="1111100",holidays=H) القيمة 0. بدأ المرجع من السبت غير المختار، ثم وصل إلى الجمعة؛ وهي النهاية في هذا النداء فلا يدخلها العد.

إذن سالب النتيجة الأولى −1 ليس النتيجة الثانية في المثال. بقي القناع وقائمة الاستبعاد ثابتين؛ تغير ترتيب وسيطي التاريخ فقط.

النتيجتان من int64 وبشكل (). الصفر في النداء العكسي لا يعني تساوي التاريخين أو عدم وجود يوم تقويمي بينهما؛ لم نجد يومًا صالحًا في مسار العد الذي يبدأ بالسبت وينتهي قبل الجمعة.

والتوثيق يصف اتجاه العد السابق بأنه سالب؛ تحفظ تجربتنا أيضًا إمكان ظهور صفر عندما لا يدخل يوم صالح في ذلك الاتجاه. لا نستنتج عددًا سالبًا غير صفري من ترتيب التاريخين وحده. [1]

صلاحية الطرفين

استبدلنا السبت في تحكم مستقل بالاثنين 2026-11-23، مع القناع نفسه وقائمة فارغة. من الجمعة إلى الاثنين دخلت الجمعة فقط: النتيجة 1. من الاثنين إلى الجمعة دخل الاثنين فقط وتجاوز المرجع السبت والأحد غير المختارين: النتيجة −1.

في تحكم ثانٍ حافظنا على الجمعة والسبت الأصليين، وغيّرنا القناع إلى 1111111. صار السبت مختارًا؛ النتيجتان 1 و−1. لا ندعي أن ذلك قناع عمل جهة حقيقية.

وفي تحكم ثالث حافظنا على القناع 1111100، ووضعنا الجمعة 2026-11-20 في قائمة الاستبعاد. أصبحت الجمعة والسبت غير صالحين في شروطنا؛ سجلنا 0 في الاتجاهين.

في فحوصنا، إذا سمينا الطرف الأسبق L والأحدث U، وكتبنا V للتاريخ الصالح بقيمة 1 ولغيره بقيمة 0، فقد تحقق C(L,U)+C(U,L)=V(L)−V(U). نحدد L وU بالترتيب الزمني قبل تطبيق هذه المقارنة.

الأيام الداخلية المشتركة تدخل العدين بإشارتين متعاكستين في مرجعنا؛ يبقى أثر الطرفين المختلفين. عندما تساوت صلاحيتهما في الحالات المفحوصة تقابل العددان، وعندما اختلفت ظهر فرق الطرفين.

هذه مراجعة لحسابنا المحدد، وليست وعدًا بعكس أي مدة خدمة أو إزاحة أو موعد. لا تحول الناتج إلى مهلة جهة دون تقويمها وقاعدة حسابها.

تحكمات صلاحية الطرفين.
اختيار الطرفين يغير المقارنة بين الاتجاهين.

مرجع وحدود

بدأ مرجع Python من تاريخ البداية، وفحص weekday وعضوية التاريخ في مجموعة الاستبعاد. إن كان اليوم صالحًا أضاف +1 في الاتجاه المتقدم أو −1 في المتراجع، ثم انتقل يومًا تقويميًا واحدًا؛ توقف فور الوصول إلى النهاية قبل فحصها.

لم يستدع المرجع busday_count أو is_busday أو busday_offset لإنتاج المتوقع. حفظنا أيضًا التواريخ الصالحة التي مر بها في الاتجاهين، ليمكن مراجعة العدد مع مساره.

للشبكة، اخترنا 14 تاريخًا متتابعًا من 2026-12-01 حتى 2026-12-14 لكل من الوسيطين، وثلاثة أقنعة 1111100 و1010100 و0000011، وثلاث قوائم استبعاد: فارغة؛ أو 2026-12-03؛ أو ذلك التاريخ مع 2026-12-08.

عدد الحالات 14×14×3×3=1764، وفيها تاريخان متساويان واتجاهان مختلفان. أضفنا مثال نوفمبر وثلاثة تحكماته خارج الشبكة فصار المجموع 1768.

لكل حالة خمس مجموعات: العدد الأول أمام مرجع الخطوات؛ والعدد المعكوس أمامه؛ وعلاقة مجموع العددين بصلاحية الطرفين المرتبين زمنيًا؛ والنوع والشكل والإشارة والصفر عند تساوي الطرفين؛ وثبات بايتات المدخلات الثلاثة.

مرت 1768×5=8840 مجموعة. استدعينا الدالة مرتين لكل حالة، أي 3536 نداءً. لم نسم عدد المجموعات عددًا للحالات أو للنداءات.

النطاق قيم مفردة منتهية datetime64[D]، والأقنعة والقوائم المؤلفة المذكورة. لم نفحص NaT أو دقة وأشكالًا أخرى أو broadcasting أو busdaycal أو out أو الإزاحات أو ضمانات الكتابة عبر الذاكرة أو أداء. لم نشغّل إصدارًا أقدم، أو نحسب ساعات ومناطق زمنية أو مهلة تقويم حقيقي.

الحالةأسبق إلى أحدثأحدث إلى أسبق
الجمعة والسبت / قناع 111110010
الجمعة والاثنين / قناع 11111001-1
الجمعة والسبت / قناع 11111111-1
الجمعة مستبعدة والسبت غير مختار00

للتوسع: حدود الفئات والعضوية.

المراجع

  1. NumPy busday_count
  2. NumPy 2.3.5 count implementation

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.