
    d              "      l7   d dl mZ d dlmZ d dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z)  ej*        d	          Z+d
 Z, ej-        e'          d             Z.ej/        0                    d e            df e            df e            df e            df e            df e            df e            df e            df e            df e            df e            df e            df ed          df ed          df ed          df ed          df ed          df ed          df ed          df ed          df ed          df ed          df ed          df ed          dfge,          d             Z1ej/        0                    dedfedfedfedfedfedfedfedfedfedfedfedfedfedfge,          d             Z2ej/        0                    d e            df e            df ed          df ed          df e            df e            df ed          df ed          dfge,          d             Z3ej/        0                    ded e4fed e4fede4fede4fede5fede5fed e4fed e4fede5fede5fede4fede4fge,          d             Z6ej/        0                    d e            df e            d f e            d!f e            d"fge,          d#             Z7ej/        0                    d e            d$f e            d%f e            d&fge,          d'             Z8ej/        0                    d( e             e             e             e            ge,          d)             Z9ej/        0                    d*d+ e            fd, ed          fd  e            fd- ed          fd. e            fd/ ed          fd0 e            fd1 ed          fd2 e            fd3 ed          fd4 e            fd5 ed          fd6 e            fd7 ed          fd8 ed          fd9 ed          fd: ed          fd; ed          fd< ed          fd= ed          fd> ed          fd? ed          fge,          d@             Z:eedAZ;ej/        0                    dB e< ej=                              dCgz             ej/        0                    dDddg          ej/        0                    dEdFdGg          dH                                     Z>eedIZ?ej/        0                    dB e< ej=                              dCgz             ej/        0                    dDddg          ej/        0                    dEdJdKg          dL                                     Z@ej/        0                    dMg dN          dO             ZAej/        0                    dPdQdRge,          dS             ZBdT ZCdU ZD e             e             e             ed           ed           e             e             ed           ed           e             e             e             e             e             e             e             e            gZE ed           ed           ed           eddV           eddV           ed           ed           eddV           eddV           ed           ed           ed           ed           ed           ed           ed           ed          gZFej/        0                    dW eeEeF          e,          dX             ZG ed           ed           ed           eddV           eddV           ed           ed           eddV           eddV           ed           ed           ed           ed           ed           ed           ed           ed          gZHej/        0                    dW eIeFeH          e,          dY             ZJ e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            d ed          f e            dZ ed          f e            dZ ed[          f e            dZ ed[          f e            dZ ed\          f e            dZ ed\          fgZKej/        0                    d]eKe,          d^             ZLej/        0                    d]eKe,          d_             ZMd` ZNej/        0                    d( e             e             e             e             e             e            ge,          da             ZOdb ZPej/        0                    d e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          f e             edc          fge,          dd             ZQ ed          def ed          dff ed          dgf ed          dhf ed          dif ed          djfgZRej/        0                    dkeRe,          dl             ZSej/        0                    dkeRe,          dm             ZTej/        0                    dk ed          dnf ed          dof ed          dpf ed          dqf ed          drf ed          dsfge,          dt             ZUej/        0                    d(eEe,          du             ZVej/        0                    dW eIeEeF          e,          dv             ZWej/        0                    dW e< eI ejX        eEd          eF                     ed           ed          fgz   e,          dw             ZYdx ZZdy Z[ej/        0                    dzdn e            d{fdn ed          d|fd} e            d{fd} ed          d|fd| edc          d{fd| ed~          dnfd edc          d|fd ed~          d{fd{ ed          dfd ed          d{fd e            dfd e            dfd edc          dfge,          d             Z\ej/        0                    ddn e            ddfdn ed          ddfd| edc          ddfd| ed~          ddfd{ ed          ddfd ed          ddfd e            ddfd edc          ddfge,          d             Z]ej/        0                    ddd e            ddfdd ed          ddfdd edc          ddfdd ed~          ddfdd ed          ddfdd ed          ddfdd e            ddfdd edc          ddfge,          d             Z^ej/        0                    dzdn e            dfdn ed          dfdn ed          d{fd} ed          dfd edc          dfd edc          dnfd e            dfd edc          dfge,          d             Z_ej/        0                    ddn e            ddfdn ed          ddfdn ed          ddfd edc          ddfd| edcdV          ddfd e            ddfd ed          ddfge,          d             Z`ej/        0                    ddd e            ddfdd ed          ddfdd edc          ddfdd ed~          ddfdd ed          ddfdd e            ddfdd edc          ddfge,          d             Zaej/        0                    dzdn e            d|fdn ed          dfdn ed          d{fd} ed          dfd edc          dfd edc          d|fd e            dfd edc          dfge,          d             Zbej/        0                    ddn e            ddfdn ed          ddfdn ed          ddfd edc          ddfd| edcdV          ddfd e            ddfd ed          ddfge,          d             Zcej/        0                    ddd e            ddfdd ed          ddfdd edc          ddfdd ed~          ddfdd ed          ddfdd e            ddfdd edc          ddfge,          d             Zdej/        0                    ddn e            dfd e            dfd e            dfd e            dfd| e            dfd e            dfd e            dfd e            dfdn e            dfd e            dfd e            dfd e            dfdn e            dfd e            dfdn e            dfdn e            dfdn e            dfdn e            dfdn e            dfge,          d             Zeej/        0                    ddd e            fdd e            fdd e            fdd ed          fdd e            fdd ed          fge,          d             Zfej/        0                    d e            d|df e            dndf ed          d|df eddV          d|df e            d|df ed          d|df eddV          d|df eddV          ddf e            ddf e            ddf ed          ddf eddV          ddf e            d|df ed          d|df eddV          d|df eddV          ddf e            ddf e            d|df ed          ddf e            ddf e            ddf ed          ddf e            ddf e            ddf e            ddf e            ddf e            ddf e            ddfge,          d             Zgej/        0                    d e            d|df ed          d|df eddV          d|df e            dndf eddV          d{df e            ddf ed          ddf eddV          ddf ed          ddf e            ddf e            ddf ed          ddf eddV          ddf e            ddf ed          ddf eddV          ddf eddV          ddf e            ddf ed          ddf e            d|df e            ddf ed          ddf e            ddf e            ddf e            ddf e            ddf e            ddf e            ddf e            ddfge,          d             Zhdddd.ddddegfdddd.ddg dƢfdddd.ddg dƢfdddd.ddg dɢfdddd.ddg dˢfdddd.ddg d͢fdddd.ddg d͢fdddd.ddg dƢfdddd.ddg dƢfdddd.ddg dƢfdnddd.ddg dƢfdnddd.ddg dƢfddddddg dӢfdddd.ddg fddd ed~          ddg dբfddddddg dƢfddddddg dآfgZiej/        0                    deie,          dڄ             Zjdۄ Zkej/        0                    dg dݢ          dބ             Zld,dg dfd,dg dfd,dg dfd,dg dfd,dg dfd,dg dfgZmej/        0                    deme,          d             Znej/        0                    dg d          d             Zoej/        0                    dMg d          d             Zpej/        0                    dMg d          d             Zqd Zrej/        0                    ddddejs        fddde
fddde
fdddejs        fddde
fddde
fg          d             Ztd Zue)ej/        0                    dg d          d                         Zvd Zwej/        x                    d          d             Zyd Zzej/        0                    deeg          dd            Z{ej/        0                    deeg          dd            Z|ej/        0                    deeg          ej/        0                    dg d          dd                        Z}ej/        0                    deeg          dd            Z~dS (	      )annotations)productN)CFTimeIndex)_MONTH_ABBREVIATIONSBaseCFTimeOffsetDayHourMicrosecondMillisecondMinute
MonthBeginMonthEndQuarterBegin
QuarterEndSecondTick	YearBeginYearEnd_days_in_monthcftime_range
date_rangedate_range_likeget_date_typeto_cftime_datetime	to_offset)
infer_freq)	DataArray)_CFTIME_CALENDARS
has_cftimerequires_cftimecftimec                     t          |           S )z:Called on each parameter passed to pytest.mark.parametrize)strparams    @lib/python3.11/site-packages/xarray/tests/test_cftime_offsets.py_id_funcr'   )   s    u::    )paramsc                    | j         S Nr$   )requests    r&   calendarr-   .   s
    =r(   offset
expected_n      n)idsc                     | j         |k    sJ d S r+   r3   r.   s     r&   &test_cftime_offset_constructor_valid_nr7   3   s    > 8z!!!!!!r(   r/   	invalid_ng      ?c                    t          j        t                    5   | |           d d d            d S # 1 swxY w Y   d S )Nr3   pytestraises	TypeErrorr8   s     r&   (test_cftime_offset_constructor_invalid_nr?   U   s    * 
y	!	!                   s   488r/   expected_month      month   c                     | j         |k    sJ d S r+   rD   r@   s     r&   (test_year_offset_constructor_valid_monthrH   n   s     <>))))))r(   r/   invalid_month	exception   c                x    t          j        |          5   | |           d d d            d S # 1 swxY w Y   d S )NrD   )r<   r=   rI   s      r&   *test_year_offset_constructor_invalid_monthrN      s    & 
y	!	! $ $]####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   /33r/   expectedMSzAS-JANzQS-MARc                :    |                                  |k    sJ d S r+   )	rule_coderO   s     r&   test_rule_coderT      s'     ))))))r(   z<BaseCFTimeOffset: n=1>z<YearBegin: n=1, month=1>z<QuarterBegin: n=1, month=3>c                Z    t          |           |k    sJ t          |           |k    sJ d S r+   )r#   reprrO   s     r&   test_str_and_reprrW      s8     v;;(""""<<8######r(   r/   c                0    t          |           | k    sJ d S r+   r   r/   s    r&   test_to_offset_offset_inputr[      s#     V&&&&&&r(   freqrP   M2M2MSD2DH2HT2Tmin2minS2SL2Lms2msU2Uus2usc                0    t          |           |k    sJ d S r+   rY   r\   s     r&   test_to_offset_sub_annualrt      s!    : T??h&&&&&&r(   )AAS)	month_intmonth_label)r    multiple
offset_strrv   ru   c                   |}t           |         }| rd                    || g          }|r| | }t          |          }|r|r |||          }n(|r ||          }n|r ||          }n
 |            }||k    sJ d S )N-r4   rE   r3   rD   )_ANNUAL_OFFSET_TYPESjoinr   rx   rw   rz   r{   r]   offset_typeresultrP   s           r&   test_to_offset_annualr      s     D&z2K -xx{+,, #"D""t__F !I !;;;;	 !;***	 !;Y///;==Xr(   )QQSr   r   c                   |}t           |         }| rd                    || g          }|r| | }t          |          }|r|r |||          }n|rA|r ||          }np|t          k    r ||d          }nW|t          k    r ||d          }n>|r ||          }n/|t          k    r |d          }n|t          k    r |d          }||k    sJ d S )Nr}   r~   r3   r1   rB   rD   )_QUARTER_OFFSET_TYPESr   r   r   r   r   s           r&   test_to_offset_quarterr      sM    D'
3K -xx{+,, #"D""t__F -I -;;;;	 - 	="{X...HHl**&;;;;
**&;<<<	 -;Y///,&&"{+++HHJ&&"{,,,HXr(   r]   )Z7min2AMzM-zAS-zQS-1H1minc                    t          j        t                    5  t          |            d d d            d S # 1 swxY w Y   d S r+   )r<   r=   
ValueErrorr   )r]   s    r&   test_invalid_to_offset_strr     s    	z	"	"  $                    7;;)argumentexpected_date_args)
2000-01-01  r1   r1   )r   r   c                    t          |           } || }t          |t                    r || }t          ||           }||k    sJ d S )N)r-   )r   
isinstancetupler   )r-   r   r   	date_typerP   r   s         r&   test_to_cftime_datetimer   #  se     h''Iy,-H(E"" (9h'8<<<FXr(   c                     t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S )N2000)r<   r=   r   r    r(   r&   )test_to_cftime_datetime_error_no_calendarr   1  s    	z	"	" # #6"""# # # # # # # # # # # # # # # # # #r   c                     t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S Nr1   )r<   r=   r>   r   r   r(   r&   (test_to_cftime_datetime_error_type_errorr   6  s    	y	!	!  1                 r   r~   abc                    | |k    sJ d S r+   r   r   s     r&   test_neqr   c      666666r(   c                    | |k    sJ d S r+   r   r   s     r&   test_eqr   }  r   r(         ?   i  r/   rz   rP   c                    | |z  |k    sJ d S r+   r   r   s      r&   test_mulr     s    H((((((r(   c                    || z  |k    sJ d S r+   r   r   s      r&   	test_rmulr     s    f((((((r(   c                     dt                      z  t                      k    sJ dt                      z  t                      k    sJ dS )zITest more than one iteration through _next_higher_resolution is required.gư>gt(gLQ>N)r   r
   r   r   r(   r&   .test_mul_float_multiple_next_higher_resolutionr     sC    &((?kmm++++vxx;==000000r(   c                x    t          j        t          d          5  | dz   ddd           dS # 1 swxY w Y   dS )z\Test that the appropriate error is raised if a non-Tick offset is
    multiplied by a float.zunsupported operand typematchr   Nr;   rZ   s    r&   *test_nonTick_offset_multiplied_float_errorr     s     
y(B	C	C	C                   s   /33c                     t          j        t          d          5  t                      dz   ddd           dS # 1 swxY w Y   dS )zTest that the appropriate error is raised if a Tick offset is multiplied
    by a float which causes it not to be representable by a
    microsecond-precision timedelta.z5Could not convert to integer offset at any resolutionr   r   N)r<   r=   r   r
   r   r(   r&   'test_Microsecond_multiplied_float_errorr     s     
Q
 
 
   	                 s   ;??c                    |  |k    sJ d S r+   r   rO   s     r&   test_negr     s    ( 7hr(   r1   r1   rF   )r1   r1   r1   r2   )r1   r1   r1   r   r2   )r1   r1   r1   r   r   r2   )r1   r1   r1   r   r   r   r   )r1   r1   r1   r   r   r   r2   )r/   r   c                b    t          |          } |ddd          } || }| |z   }||k    sJ d S r   r   r/   r   r-   r   initialrP   r   s          r&   test_add_sub_monthlyr     sP    h''Ii1a  Gy,-HgFXr(   c                b    t          |          } |ddd          } || }|| z   }||k    sJ d S r   r   r   s          r&   test_radd_sub_monthlyr     sP    h''Ii1a  Gy,-HvFXr(   r1   r1   r1   )r1   r1   r2      )r1   r1   r2      :   )r1   r1   r2   r   ;   r   )r1   r1   r2   r   r   r   ip: )r1   r1   r2   r   r   r   i>B c                b    t          |          } |ddd          } || }|| z
  }||k    sJ d S )Nr1   rF   r   r   s          r&   test_rsub_sub_monthlyr     sR     h''Ii1a  Gy,-HvFXr(   c                    t          |          } |ddd          }t          j        t                    5  | |z
   d d d            d S # 1 swxY w Y   d S r   )r   r<   r=   r>   )r/   r-   r   r   s       r&   test_sub_errorr     s    h''Ii1a  G	y	!	!                   s   A		AAc                $    || z
  }| }||k    sJ d S r+   r   )r   r   r   rP   s       r&   test_minus_offsetr     s'    UFHXr(   c                t    t          j        t                    5  || z
   d d d            d S # 1 swxY w Y   d S r+   r;   r   s     r&   test_minus_offset_errorr     s     
y	!	!  	A                 s   -11c                h    t          |           } |ddd          }t          |          dk    sJ d S )Nr1      r   r   r   )r-   r   	references      r&   test_days_in_month_non_decemberr      sA    h''I	!Q""I)$$******r(   c                ~    | dk    rd}nd}t          |           } |ddd          }t          |          |k    sJ d S )N360_dayr      r1   rB   rC   r   )r-   rP   r   r   s       r&   test_days_in_month_decemberr   &  sX    9h''I	!R##I)$$000000r(   )initial_date_argsr/   r   )r1   r2   r1   )r1   rF   r1   )r1   r1      )r1   rF   rF      )r2   r   r1   i)r1   r1   r1   rC   rC   rC   rC   )r1   r2   r1   rC   rC   rC   rC   )r1   r1   rF   rC   rC   rC   rC   c                R    t          |           } || }||z   } || }||k    sJ d S r+   r   r-   r   r/   r   r   r   r   rP   s           r&   test_add_month_beginr   0  sL    ( h''Ii*+GvFy,-HXr(   )r   r/   expected_year_monthexpected_sub_day)r1   r1   r   )r1   r2   )r2   rF   )rC   rC   rC   rC   c                    t          |           } || }||z   }|dz   } || }	|t          |	          fz   |z   }
 ||
 }||k    sJ d S Nr1   r   r-   r   r/   r   r   r   r   r   reference_argsr   r   rP   s               r&   test_add_month_endr   K  s    " h''Ii*+GvF(4/N	>*I 	~i88::=MM  y,-HXr(   )initial_year_monthinitial_sub_dayr/   r   r   )r1   rF   )r2   r   c                    t          |           }|dz   } || }|t          |          fz   |z   }	 ||	 }
|
|z   }|dz   } || }|t          |          fz   |z   } || }||k    sJ d S r   r   r-   r   r   r/   r   r   r   r   r   r   r   r   r   rP   s                 r&   test_add_month_end_onOffsetr   j  s    8 h''I'$.N	>*InY7799OK  i*+GvF(4/N	>*I 	~i88::=MM  y,-HXr(   )r2   r1   r1   )rF   r1   r1   )r2   r2   r1   r1   r1   r2   )r2   r1   r1   rC   rC   rC   rC   c                R    t          |           } || }||z   } || }||k    sJ d S r+   r   r   s           r&   test_add_year_beginr     L     h''Ii*+GvFy,-HXr(   )r1   rB   )r2   rB   r2   rF   r1   c                    t          |           } || }||z   }|dz   } || }	|t          |	          fz   |z   }
 ||
 }||k    sJ d S r   r   r   s               r&   test_add_year_endr           h''Ii*+GvF(4/N	>*I 	~i88::=MM  y,-HXr(   )rF   rB   c                    t          |           }|dz   } || }|t          |          fz   |z   }	 ||	 }
|
|z   }|dz   } || }|t          |          fz   |z   } || }||k    sJ d S r   r   r   s                 r&   test_add_year_end_onOffsetr         6 h''I'$.N	>*InY7799OK  i*+GvF(4/N	>*I 	~i88::=MM  y,-HXr(   r1      r1   )r1   rB   r1   )r1   rF   r2   )r1   rF   r1   rC   rC   rC   rC   )r1   rB   r1   rC   rC   rC   rC   c                R    t          |           } || }||z   } || }||k    sJ d S r+   r   r   s           r&   test_add_quarter_beginr     r   r(   )r1   r   c                    t          |           } || }||z   }|dz   } || }	|t          |	          fz   |z   }
 ||
 }||k    sJ d S r   r   r   s               r&   test_add_quarter_endr     r   r(   )r2   r   )r1   	   c                    t          |           }|dz   } || }|t          |          fz   |z   }	 ||	 }
|
|z   }|dz   } || }|t          |          fz   |z   } || }||k    sJ d S r   r   r   s                 r&   test_add_quarter_end_onOffsetr  /  r   r(   )	date_argsr/   rP   Tr1   r1   r1   r1   )r1   r1   rC   F)r1   rF   r1   r1   )r1   rF   rC   c                h    t          |           } || }|                    |          }||k    sJ d S r+   )r   onOffset)r-   r  r/   rP   r   dater   s          r&   test_onOffsetr  ^  sE    4 h''I9i D__T""FXr(   )year_month_argssub_day_argsr/   r   c                    t          |           }|dz   } || }|t          |          fz   |z   } || }|                    |          }	|	sJ d S r   )r   r   r  )
r-   r	  r
  r/   r   r   r   r  r  r   s
             r&   *test_onOffset_month_or_quarter_or_year_endr  ~  sk     h''I$t+N	>*I>)#<#<">>MI9i D__T""FMMMMMr(   )r/   r   partial_expected_date_args)r2   r1   )r2   r2   r   )r1   r   r   )r1   r   )r1   r   r1   )r1   rC   )r1   rF   r2   r1   )r1   rF   r2   r1   r1   )r1   rF   r2   r1   r1   r1   )r1   rF   r2   r1   r1   r1   r1   )r1   rF   r2   r1   r1   r1   i  c                F   t          |           } || }t          |t          t          t          f          r|dz   }nBt          |t
          t          t          f          r|dz   } || }|t          |          fz   }n|} || }	|	                    |          }
|
|	k    sJ d S r   )
r   r   r   r   r   r   r   r   r   rollforwardr-   r/   r   r  r   r   r   r   r   rP   r   s              r&   test_rollforwardr    s    F h''Ii*+G&:|Y?@@ 87$>	FXz7;	<	< 83d:I~.	7>);T;T:VV7y,-H((FXr(   c                F   t          |           } || }t          |t          t          t          f          r|dz   }nBt          |t
          t          t          f          r|dz   } || }|t          |          fz   }n|} || }	|	                    |          }
|
|	k    sJ d S r   )
r   r   r   r   r   r   r   r   r   rollbackr  s              r&   test_rollbackr    s    H h''Ii*+G&:|Y?@@ 87$>	FXz7;	<	< 83d:I~.	7>);T;T:VV7y,-H__W%%FXr(   z
0001-01-01z
0001-01-04neither)r   r   r   r1   r1   r   bothleft)r   r   r   right)r   r   r  z0001-01-01T01:00:00)r  )r1   r1   r2   r1   )r1   r1   rF   r1   z0001-01-01 01:00:00r  z
0001-01-30z
0011-02-01z3AS-JUN)r   )r   r   r1   )r   r   r1   )
   r   r1   0010))r  r1   r1   )   r1   r1   )r   r1   r1   )r   r1   r1   z
0001-06-01z3QS-JUN)r   r   )r2   rB   r1   )rF   r   r1   )startendperiodsr]   	inclusive	normalizer   c           	        t          |          fd|D             }t          | t                    r |  } t          |t                    r | }t          | ||||||          }	|	j        }
t          |	t
                    sJ |"t          j                            |
|           d S |
|z
  }t          j	        d |D                       }t          j
        t          j        |                    dk     sJ d S )Nc                    g | ]} | S r   r   ).0argsr   s     r&   
<listcomp>z%test_cftime_range.<locals>.<listcomp>  s     FFF4ii&FFFr(   )r  r  r  r]   r   r!  r-   c                6    g | ]}|                                 S r   )total_seconds)r$  deltas     r&   r&  z%test_cftime_range.<locals>.<listcomp>  s$    EEEU5..00EEEr(   gMbP?)r   r   r   r   valuesr   nptestingassert_equalarraymaxabs)r  r  r  r]   r   r!  r-   r   expected_datesr   resulting_datesdeltasr   s               @r&   test_cftime_ranger4    s&    h''IFFFF3EFFFN% "	5!#u io  F mOfk*****

@@@@@ !>1EEfEEEFFvbfVnn%%------r(   c                 x    t          ddd          } | j        dk    sJ t          dd          } | j        J d S )Nr   r   foo)r  r  name)r  r  )r   r7  )r   s    r&   test_cftime_range_namer8    sO    >>>F;%222F;r(   r  r  r  r]   closed))NNrC   ru   N)r   NNru   N)Nr   Nru   N)r   2001NNN)NNNNN)r   r;  Nru   up)r   r;  rC   ru   Nc                    t          j        t                    5  t          | ||||           d d d            d S # 1 swxY w Y   d S )N)r:  )r<   r=   r   r   r9  s        r&    test_invalid_cftime_range_inputsr>    s     
z	"	" ? ?UC$v>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   <A A noleap))r2      r   r   r   r   r  r   r  r   rB   r   all_leap))r2      rA  rB  rC  rD  rE  r   ))r2   r   rA  rB  )r  r   )r  r   )rB   r   standard	gregorianjulian)r]   r-   expected_month_dayc                    dt          dd| |          j        }t          |          fd|D             }t          j                            ||           d S )Nr   z2000-02r;  )r  r  r]   r-   c                "    g | ]} g|R  S r   r   )r$  r%  r   years     r&   r&  z4test_calendar_specific_month_end.<locals>.<listcomp>  s+    FFF4		$&&&&FFFr(   )r   r*  r   r+  r,  r-  )r]   r-   rK  r   rP   r   rN  s        @@r&    test_calendar_specific_month_endrO    sx     DV$    h''IFFFFF3EFFFHJFH-----r(   )r-   r  r  expected_number_of_days))r?  r   r;  m  )rF  r   r;  n  )r   r   r;  h  )rH  r   r;  rR  )rI  r   r;  rR  )rJ  r   r;  rR  )r?  r;  2002rQ  )rF  r;  rT  rR  )r   r;  rT  rS  )rH  r;  rT  rQ  )rI  r;  rT  rQ  )rJ  r;  rT  rQ  c                X    t          ||dd|           }t          |          |k    sJ d S )Nra   r  )r]   r:  r-   )r   len)r-   r  r  rP  r   s        r&   test_calendar_year_lengthrW    s:    $ %3vQQQFv;;1111111r(   )ru   r^   ra   c                    t          dd|           j        }t          j        dd|           j        }t          j                            ||           d S Nz
2000-02-01rF   )r  r]   )r   	dayofweekpdr   r+  r,  assert_array_equalr]   r   rP   s      r&   !test_dayofweek_after_cftime_ranger^    P    ,===GF}\14@@@JHJ!!&(33333r(   c                    t          dd|           j        }t          j        dd|           j        }t          j                            ||           d S rY  )r   	dayofyearr[  r   r+  r,  r\  r]  s      r&   !test_dayofyear_after_cftime_rangerb    r_  r(   c                 \    ddl m}  t          dd          \  }t          ||           sJ d S )Nr   )DatetimeGregorianr   r1   )r  )r!   rd  r   r   )rd  r   s     r&   7test_cftime_range_standard_calendar_refers_to_gregorianre    sE    ((((((VQ///IVf/0000000r(   z'start,calendar,use_cftime,expected_typez
1990-01-01proleptic_gregorian
1400-01-01z
3400-01-01c                R    t          | dd||          }t          ||          sJ d S )Nr   ra   r  r]   r-   
use_cftime)r   r   )r  r-   rj  expected_typedrs        r&   test_date_rangerm    sA     
rh:
 
 
B b-(((((((r(   c                    t          j        t          d          5  t          ddddd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          d	ddd
d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ddddd           d d d            d S # 1 swxY w Y   d S )NzDate range is invalidr   rg  r1   ra   rH  Fri  z
2480-01-01rf  zInvalid calendar z
1900-01-01r?  )r<   r=   r   r   r   r(   r&   test_date_range_errorsro  )  s   	z)@	A	A	A 
 
!#
u	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z)@	A	A	A 
 
*	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z)<	=	=	= 
 
!#U	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s3   =AA#BBB*CCCz1start,freq,cal_src,cal_tgt,use_cftime,exp0,exp_pd))
2020-02-014MrH  r?  N
2020-02-28F)rp  r^   r?  rI  Tz
2020-02-29T)rr  3HrF  rI  Frr  T)
2020-03-30r^   r   rI  F
2020-03-31T)ru  r^   rI  r   Nrt  Fc                   t          | d||          }t          |||          }t          |          dk    sJ t          |          |k    sJ |d                                                             |          sJ |rt          |t          j                  sJ d S t          |t                    sJ |j
        |k    sJ d S )NrB   )r  r]   r-   rj  r   )r   r   rV  r   	isoformat
startswithr   r[  DatetimeIndexr   r-   )	r  r]   cal_srccal_tgtrj  exp0exp_pdsourceouts	            r&   test_date_range_liker  >  s     rwGGGF
&'j
A
A
ACs88r>>>>c??d""""q6((..... '#r/0000000#{+++++|w&&&&&&r(   c                 \    t          dddd          } t          | dd          }| |u sJ d S )Nr   rB   6HFr  r]   rj  rH  rw  )r   r   )srcr  s     r&   "test_date_range_like_same_calendarr  Z  s=    
\2DU
K
K
KC
#ze
<
<
<C#::::::r(   z ignore:Converting non-nanosecondc                    t          dddd          } | t          j        d          dk             } t          j        t
          d          5  t          | d	           d d d            n# 1 swxY w Y   t          t          j        d
dgddggt          j	                  d          } t          j        t
          d          5  t          | d           d d d            n# 1 swxY w Y   t          g dd          }t          j        t
          d          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nz
1899-02-03   ra   Fr  r  z[`date_range_like` was unable to generate a range as the source frequency was not inferable.r   rI  z
1999-01-01z
1999-01-02z
1999-01-03z
1999-01-04)dtype)xy)dimszH'source' must be a 1D array of datetime objects for inferring its range.r?  )r1   r2   rF   r   )time)
r   r+  aranger<   r=   r   r   r   r.  
datetime64)r  das     r&   test_date_range_like_errorsr  `  s*   
\2CE
J
J
JC
bimmr!
"C	k
 
 
 * * 	[)))	* * * * * * * * * * * * * * * 
L)L,+GH-	
 	
 	
   C 
X
 
 
 ' ' 	X&&&	' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
<<<i	0	0	0B	X
 
 
 & & 	H%%%	& & & & & & & & & & & & & & & & & &s6   A**A.1A.C""C&)C&D99D= D=c                     t                      } t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S r+   )r   r<   r=   NotImplementedErroras_timedelta)ticks    r&   "as_timedelta_not_implemented_errorr    s    66D	*	+	+                   s   A

AAfunctionreturnNonec                    | t           k    rt          st          j        d           t          j        t
          d          5   | ddd d           d d d            d S # 1 swxY w Y   d S )Nrequires cftimezFollowing pandas, deprecatedr   r   rF   r  )r  r:  r   r   r   r<   skipr=   r   r  s    r&   4test_cftime_or_date_range_closed_and_inclusive_errorr    s    <
%&&&	z)G	H	H	H D D47CCCCD D D D D D D D D D D D D D D D D Ds   AA#&A#c                    | t           k    rt          st          j        d           t          j        t
          d          5   | ddd           d d d            d S # 1 swxY w Y   d S )Nr  zArgument `closed` must ber   r   rF   r6  )r  r:  r  r  s    r&   .test_cftime_or_date_range_invalid_closed_valuer    s    <
%&&&	z)D	E	E	E 2 2511112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   AA"%A")r:  r   ))Nr  )r  r  )r  r  c                J   | t           k    rt          st          j        d           t          j        t
          d          5   | ddd|          } | ddd|          }t          j                            |j	        |j	                   d d d            d S # 1 swxY w Y   d S )	Nr  zFollowing pandasr   r   
2000-01-04ra   )r]   r:  )r]   r   )
r   r   r<   r  warnsFutureWarningr+  r,  r-  r*  )r  r:  r   result_closedresult_inclusives        r&    test_cftime_or_date_range_closedr    s   
 <
%&&&	m+=	>	>	> O O |#fUUU#8,SI
 
 
 	
 46F6MNNNO O O O O O O O O O O O O O O O O Os   A	BBBc                    | t           k    rt          st          j        d            | dd          } | ddd          }t          j                            |j        |j                   d S )Nr  r   r  r  )r   )r   r   r<   r  r+  r,  r-  r*  )r  result_Noneresult_boths      r&   (test_cftime_or_date_range_inclusive_Noner    sn    <
%&&&(<66K(<HHHKJK.0BCCCCCr(   )r  r  )
__future__r   	itertoolsr   numpyr+  pandasr[  r<   xarrayr   xarray.coding.cftime_offsetsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   xarray.coding.frequenciesr   xarray.core.dataarrayr   xarray.testsr   r   r    importorskipr!   r'   fixturer-   markparametrizer7   r?   rH   r   r>   rN   rT   rW   r[   rt   r   listitemsr   r   r   r   r   r   r   _EQ_TESTS_A_EQ_TESTS_Br   _EQ_TESTS_B_COPYzipr   
_MUL_TESTSr   r   r   r   r   r   
_ADD_TESTSr   r   r   r   r   rollr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  _CFTIME_RANGE_TESTSr4  r8  r>  "_CALENDAR_SPECIFIC_MONTH_END_TESTSrO  rW  r^  rb  re  rz  rm  ro  r  r  filterwarningsr  r  r  r  r  r  r   r(   r&   <module>r     s+   " " " " " "                                                                    0 1 0 0 0 0 0 + + + + + + G G G G G G G G G G		X	&	&  
 ()))  *) 				Q	a	A		q		
		1	1				A			"	Q	1q				A	a!	A	q1	A	!a	!a	q			1	q			114 	9   <" "= <" 	3	C	#	s	S	S	3	s	c
	s			c	c  	%   ( ) (
  	a	B				Q	q			1		q	A			"	!			a 	 	   * * * ,	Az"	!Z 	B
#	"j!	C#	#y!	q*%	Q
#	sI&	S)$	r:&	R$ 	!   $$ $% $$
 				T"	t	h	"	 	  	 	* *	 	* 				67	12	78
 	   $ $ $
 ||~~yy{{C   
' ' 
' 	hhjj	xx!}}}	zz||	

Q 	ccee	ssQxxx	ddff	ttayyy	ffhh	vv{{{		!	ffhh	vv{{{	kkA	{{Q 	{{Q 	a   !	kkA	{{Q 	{{Q 	a   !-0 	5   8' '9 8' %I66   $$'A';'A'C'C"D"Dy"P  dAY//c{33  43 0/ 
( )==   $$'A';'A'C'C"D"Dy"P  dAY//c{33  43 0/ 
: !S!S!STT  UT
 &!#?@   
  
# # #
   IKKGIIIAG!LNNJLLLqJQJLLHJJCEEDFF
FHH
FHHKMMKMM#( qINNNGaLLLIGaqL1JOOOL1AJ!JOOOHqMMMC!HHHD1III
FQKKK
FQKKKK!K!#* WW[+%F%FHUU  VU
 qINNNGaLLLIGaqL1JOOOL1AJ!JOOOHqMMMC!HHHD1III
FQKKK
FQKKKK!K!# * SS6F%G%GXVV  WV
 ,,q1112WYY77Q<<< Y[[!YY^^^$Z\\1jj1ooo&\^^Qq)))*XZZHHqMMM"Z\\1jj1ooo&	TVVQq			SUUAssQxxx	TVVQq			VXXq&&1+++VXXq&&1+++[]]A{{Q'''([]]A{{Q'''(SUUC	TVVS&&2,,,VXXsFFRLLL!VXXsKK#&&&'[]]Cs+++,'
. ;ZXVV) ) WV) ;ZXVV) ) WV)1 1 1 Y[[''))\\^^ZZ\\::<<T   
  
   				--3334	GGbMMM"	ii"ooo&	zzB'''(	+++,	XX^^^$	zzB'''(	b					66B<<< 	66B<<< 	b)))*	b)))* 	#   & ' &
 	S1XXXy	TAYYYVa[[[/"Va[[[$%[1/0[1,-
 9:8TT  UT 9:8TT  UT $	q9	M"	!'(	!+,	q			89	q			89 	      ;H==  >= SSk%B%BQQ  RQ DWRW[!$$k	2	233a''***+,-	     
+ + +1 1 1 9	JJLL),	JJOOOY/	JJLL),	JJOOOY/	JJ$$$i0	JJ$$$i0	JJ$$$i0	JJ$$$i0	JJ$$$i0	JJ%%%y1	

.CD	

.CD	

R 0 0 02GH 	#   & ' & N	HHJJ+	HHqMMM62.	HHrNNNFB/	HHrNNNFB/	HHrNNNFB/	HHsOOOVR0	

FLA	2E	 	     "  
XXZZ,	XX]]]FB/	XX^^^VR0	XX^^^VR0	XX^^^VR0	XX___fb1	xxzz6<@	xx"~~~v|D	 	%   ( ) (6 9	IIKK+	IINNNI.	IIA&&&	2	IINNNI.	IIOOOY/	IIOOOY/			-BC			B1FG	 	      N	GGIIw+	GGaLLL'2.	GG!$$$fb1	GGbMMM7B/	GGb***FB7			7LA	!g|D 	     "  
"ggii"-	"gglllGR0	"ggmmmWb1	"ggmmmWb1	WW1%%%vr2	,		7LA	,"wE 	#   & ' &6 9	LLNNI.	LL1%%%y1	LLq)))95	LL1%%%y1	LL2&&&
3	LL2&&&	2	0EF	r 2 2 24JK	 	      N	JJLL&"-	JJOOOVR0	JJQ'''4	JJ$$$gr2	JJ1---vr:	

flC	

QF 	     "  
"jjllFB/	"jj1ooovr2	"jj2&&&3	"jj2&&&3	ZZa(((&"5	,

flC	,

R 0 0 0&,G 	#   & ' &8 '	JJLL$'	zz||T*	JJLL%(	HHJJ&	LLNND)	||~~t,	LLNNE*	ZZ\\5)	IIKK&	yy{{D)	IIKK'	WWYY&	CCEE4 	ssuud#	DDFFD!	FFHHd#	FFHHd#	KKMM4(	KKMM4('* 	/   2 3 2 1	XXZZ 	xxzz"	"jjll#	ZZa((()	"ggii 	WW1%%%& 	   	 	 	 A	i(	i(	QF+	Qa	 	 	 )V4	Iw'	1y'*	1A				62	1A			
F3	F+	F+				Iv.		#	#	#Y7	y&)	a)V,	aq	!	!	!9f5	aq	!	!	!:v6	y&)	y&)	a)V,	Y'	Z(	A	6*	l+	/2	%'9:	(*?@	02JK	-/DE9< 	A  ! !D E! !D  A	i(	QF+	Qa	 	 	 )V4	i(	Qa	 	 	 )V4	Iw'	1y'*	1A				62	q			:v.	F+	F+				Iv.		#	#	#Y7	y'*	a)W-	aq	!	!	!9f5	aq	!	!	!:v6	y&)	a)V,	y&)	Y'	A	6*	Z(	l+	/2	%'9:	(*?@	02JK	-/DE;> 	C  " "F G" "F$ 		I 	444 	444 	))) 	))) 	222 	222 	444 		444 		444 	444 	444 	555 <sFE2>		B555 		444 		555SR j W   
!. !. 
!.H   1   ? ? ? 
8MMMN	:OOOP	9NNNO	:OOOP	;PPPQ	8MMMN& " .&   
. . 
. ;   "2 2# "2
 114 4 214 114 4 2141 1 1 -	z4)9:	,dK@	x{3	{E2+;<	z45	z45
 
) )
 
)
 
 
* 7  	 	' '	 	 '"   >??& & @?&>   lJ%?@@D D D A@D lJ%?@@2 2 2 A@2 lJ%?@@SSS 	O 	O 	O  A@	O lJ%?@@D D D A@D D Dr(   