+
    4j_                         R t ^ RIt^ RIHtHtHt ^ RIHtHt ^ RI	H
t
HtHtHtHt R R ltR R ltR	 R
 ltR R ltR R ltR R lt. ROtR# )z/Helpful functions used internally within arrow.N)AnyOptionalcast)WEEKLYrrule)MAX_ORDINALMAX_TIMESTAMPMAX_TIMESTAMP_MSMAX_TIMESTAMP_USMIN_ORDINALc                z    V ^8  d   QhR\         \        P                  ,          R\        R\        P                  /# )   
start_dateweekdayreturn)r   datetimedateint)formats   "\/home/user/pdf2html-billing-ledger-validate/.venv/lib/python3.14/site-packages/arrow/util.py__annotate__r      s3      '25    c           
         V^ 8  g   V^8  d   \        R4      h\        \        P                  \        \        W^R7      ^ ,          4      # )aa  Get next weekday from the specified start date.

:param start_date: Datetime object representing the start date.
:param weekday: Next weekday to obtain. Can be a value between 0 (Monday) and 6 (Sunday).
:return: Datetime object corresponding to the next weekday after start_date.

Usage::

    # Get first Monday after epoch
    >>> next_weekday(datetime(1970, 1, 1), 0)
    1970-01-05 00:00:00

    # Get first Thursday after epoch
    >>> next_weekday(datetime(1970, 1, 1), 3)
    1970-01-01 00:00:00

    # Get first Sunday after epoch
    >>> next_weekday(datetime(1970, 1, 1), 6)
    1970-01-04 00:00:00
z2Weekday must be between 0 (Monday) and 6 (Sunday).)freqdtstart	byweekdaycount)
ValueErrorr   r   r   r   )r   r   s   &&r   next_weekdayr      sD    . {gkMNN6:J1M r   c                0    V ^8  d   QhR\         R\        /# )r   valuer   )r   bool)r   s   "r   r   r   0   s     
 
 
 
r   c                    \        V \        4      '       d   R# \        V \        \        \        34      '       g   R#  \        V 4       R#   \
         d     R# i ; i)z$Check if value is a valid timestamp.FT)
isinstancer!   r   floatstrr   r    s   &r   is_timestampr'   0   sJ    %ec5#.//e s   A
 
AAc                (    V ^8  d   QhR\         RR/# )r   r    r   N)r   )r   s   "r   r   r   =   s     	> 	>C 	>D 	>r   c                    \        V \        4      '       g   \        V \        4      '       g   \        R\	        V 4       R24      h\
        T u;8:  d   \        8:  g   M \        RV  R24      hR# )zeRaise an exception if value is an invalid Gregorian ordinal.

:param value: the input to be checked

z%Ordinal must be an integer (got type z).zOrdinal z is out of range.N)r#   r!   r   	TypeErrortyper   r   r   r&   s   &r   validate_ordinalr,   =   s]     %j&<&<?U}BOPP5/K/8E7*;<== 0r   c                0    V ^8  d   QhR\         R\         /# )r   	timestampr   )r$   )r   s   "r   r   r   I   s     	 	5 	U 	r   c                    V \         8  d=   V \        8  d   V R,          p V # V \        8  d   V R,          p V # \        RV : R24      hV # )zHNormalize millisecond and microsecond timestamps into normal timestamps.i  i@B zThe specified timestamp z is too large.)r   r	   r
   r   )r.   s   &r   normalize_timestampr0   I   s_    = ''I
 	 ))"I  7	}NSTTr   c                \    V ^8  d   QhR\         R\         R\         R\        P                  /# )r   iso_yeariso_weekiso_dayr   )r   r   r   )r   s   "r   r   r   V   s,      s c C HMM r   c                f   ^Tu;8:  d   ^58:  g   M \        R4      h^Tu;8:  d   ^8:  g   M \        R4      h\        P                  ! V ^^4      p\        P                  ! VP	                  4       ^,
          4      pW4,
          pV\        P                  ! V^,
          V^,
          R7      ,           pV# )zConverts an ISO week date into a datetime object.

:param iso_year: the year
:param iso_week: the week number, each year has either 52 or 53 weeks
:param iso_day: the day numbered 1 through 7, beginning with Monday

z-ISO Calendar week value must be between 1-53.z*ISO Calendar day value must be between 1-7)daysweeks)r   r   r   	timedelta
isoweekday)r2   r3   r4   
fourth_jandelta
year_start	gregorians   &&&    r   iso_to_gregorianr>   V   s     BHII1EFF xA.Jz446:;E#JX//Wq[STUUIr   c                (    V ^8  d   QhR\         RR/# )r   boundsr   N)r%   )r   s   "r   r   r   n   s     
 
C 
D 
r   c                 `    V R 8w  d'   V R8w  d   V R8w  d   V R8w  d   \        R4      hR# R# R# R# )z()z(]z[)z[]z@Invalid bounds. Please select between '()', '(]', '[)', or '[]'.N)r   )r@   s   &r   validate_boundsrB   n   s8    ~&D.Vt^$N
 	
 AO^.~r   )r   r'   r,   r>   )__doc__r   typingr   r   r   dateutil.rruler   r   arrow.constantsr   r   r	   r
   r   r   r'   r,   r0   r>   rB   __all__ r   r   <module>rI      sD    5  & & ( >
	>	0
 Sr   