
    dVP                    .   d dl mZ d dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZ  G d d          Z G d d          Zg dZd	Z ej        e
          d             Z ej                    d             Z ej                    d             Z ej                    d             Zeej                            dg d          d'd                        Zed'd            Zd'dZed'd            Zeed'd                        Z ed'd            Z!ed'd            Z"eej        #                    d          d'd                        Z$eeej                            dg d          d'd                                    Z%eeej                            dg d          d'd                                    Z& ej                    d             Z'ed'd            Z(ej        d              Z)eeej                            d!d"d#g          d'd$                                    Z*eeej                            d!d"d#g          d'd%                                    Z+eeej                            d!d"d#g          d'd&                                    Z,dS )(    )annotationsN)assert_array_equalassert_chunks_equalassert_equalassert_identicalraise_if_dask_computesrequires_cftimerequires_daskc                     e Zd Z ej        d          d             Zej                            dg d          dd            Zej                            d	g d
          dd            Z	ddZ
ddZddZej                            d          eej                            dg d          dd                                    Zeej                            dg d          dd                        Zeej                            dg d          dd                        ZddZej                            dg d          dd            ZdS )TestDatetimeAccessorTautousec                   d}t           j                            dd|          }t          j        ddd          }t          j        ddd          }t	          j        dd|          | _        t          j        |||| j        gg d	d
          | _	        t           j        
                    | j        dd|f          | _        t          j        | j        ||| j        gg d	d
          | _        d S )Nd   
   r         
2000/01/01Hstartfreqperiodslonlattimedatacoordsdimsnamesize)nprandomrandlinspacepd
date_rangetimesxr	DataArrayr   choice	times_arr
times_dataselfntr   lonslatss        =lib/python3.11/site-packages/xarray/tests/test_accessor_dt.pysetupzTestDatetimeAccessor.setup   s    y~~b"b)){1b"%%{1b"%%]CLLL
L$
+'''	
 
 
	 ))$*BB<)HH,N$
+'''	
 
 
    field)yearmonthdayhourminutesecondmicrosecond
nanosecondweek
weekofyear	dayofweekweekday	dayofyearquarterdater   daysinmonthdays_in_monthis_month_startis_month_endis_quarter_startis_quarter_endis_year_startis_year_endis_leap_yearreturnNonec                p   |dv r | j                                         d         }nt          | j         |          }|j        j        dk    r|dvr|                    d          }dddd}|                    ||          }t          j        ||| j         gd	g
          }|dv rSt          j
        t          d          5  t          | j        j        j        |          }d d d            n# 1 swxY w Y   nt          | j        j        j        |          }|j        |j        k    sJ t          ||           d S )N)rB   rC   rB   b)rH   r   int64rD   rJ   )rE   rI   rC   r   r"   r    r!   z.dt.weekofyear and dt.week have been deprecatedmatch)r+   isocalendargetattrdtypekindastypegetr,   r-   pytestwarnsFutureWarningr   r   dtr   )r2   r9   r   translationsr"   expectedactuals          r6   test_field_accessz&TestDatetimeAccessor.test_field_access+   s   > ***:))++F3DD4:u--D:?c!!e3C&C&C;;w''D #* 
 

 u--<4F8TTT***%U   ; ; !!2E::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 TY^.66F~----6*****s   = C))C-0C-zfield, pandas_field))r:   r:   )rB   rB   )rE   r<   c                X   t          j        t          | j                                        |                              t                              }t          j        ||| j        gdg          }| j	        j
        j                                        |         }t          ||           d S Nr   rW   )r)   Indexr[   r+   rZ   r^   intr,   r-   r   r   rc   r   )r2   r9   pandas_fieldre   rf   s        r6   test_isocalendarz%TestDatetimeAccessor.test_isocalendarg   s     8GDJ$:$:$<$<lKKRRSVWWXX<5$*VH
 
 
 "..007Xv&&&&&r8   c                B    | j         j        j        j        }|dk    sJ d S )Nproleptic_gregorian)r   r   rc   calendar)r2   cals     r6   test_calendarz"TestDatetimeAccessor.test_calendary   s)    in(+++++++r8   c                f    d| j         j        j                            d          d         k    sJ d S )Nz2000-01-01 01:00:00%Y-%m-%d %H:%M:%S   )r   r   rc   strftime)r2   s    r6   test_strftimez"TestDatetimeAccessor.test_strftime}   s5    !TY^%6%?%?@S%T%TUV%WWWWWWWr8   c                `   | j                                         }t          j        t	          | j         j                                                d          }|                    |          }t          j	        t          d          5  |j        j         d d d            d S # 1 swxY w Y   d S Nint8)r   rc   rX   r   copyr%   arangelenr   r^   assign_coordsr`   raises	TypeErrorrc   r2   nontime_dataint_datas      r6   test_not_datetime_typez+TestDatetimeAccessor.test_not_datetime_type       y~~''9S001188@@#11x1@@]9E222 	! 	!  	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   	B##B'*B'z5ignore:dt.weekofyear and dt.week have been deprecated)r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   rK   rL   rM   rN   rO   rP   rQ   c                   dd l m} t          | j        j        |          }|                    | j        d          }t          j        || j	        j
        | j	        j        d          }t                      5  t          |j        |          }d d d            n# 1 swxY w Y   t          |j	        |j                  sJ t          ||           t!          |                                |                                           d S Nr   )   r   2   )chunksr   r   
dask.arrayarrayr[   r0   rc   
from_arrayr/   r,   r-   r   r    r!   r   
isinstanceArrayr   r   computer2   r9   dare   dask_times_arrdask_times_2drf   s          r6   test_dask_field_accessz+TestDatetimeAccessor.test_dask_field_access   s6   > 	 4?-u55t~jII49#3$).v
 
 
 $%% 	6 	6]-u55F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 &+rx00000FM222V^^%%x'7'7'9'9:::::   7BB B)r:   rB   rE   c                D   dd l m} t          | j        j                                        |          }|                    | j        d          }t          j	        || j
        j        | j
        j        d          }t                      5  |j                                        |         }d d d            n# 1 swxY w Y   t          |j
        |j                  sJ t!          ||           t#          |                                |                                           d S r   )r   r   r[   r0   rc   rZ   r   r/   r,   r-   r   r    r!   r   r   r   r   r   r   r   s          r6   test_isocalendar_daskz*TestDatetimeAccessor.test_isocalendar_dask   sI    	 4?-99;;UCCt~jII49#3$).v
 
 
 $%% 	; 	;"%1133E:F	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; &+rx00000FM222V^^%%x'7'7'9'9:::::s   	 B55B9<B9method, parameters)floorDceilr   roundr   )rv   rt   c                0   dd l m}  t          | j        j        |          |          }|                    | j        d          }t          j        || j	        j
        | j	        j        d          }t                      5   t          |j        |          |          }d d d            n# 1 swxY w Y   t          |j	        |j                  sJ t          ||           t!          |                                |                                           d S r   r   r2   method
parametersr   re   r   r   rf   s           r6   test_dask_accessor_methodz.TestDatetimeAccessor.test_dask_accessor_method   s[    	 674?-v66zBBt~jII49#3$).v
 
 
 $%% 	C 	C6W]-v66zBBF	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C &+rx00000FM222V^^%%x'7'7'9'9:::::    B++B/2B/c                D   t          j        ddd          }|                    t          j        t	          j        d          g                    }t          j        |          }t          j        g d          }t          |j	        |j
        j        j	                   d S )Nr   M   r   NaT)DJFr   MAMr   r   JJAr   r   SONr   r   r   nan)r)   r*   appendrj   r%   
datetime64r,   r-   r   valuesrc   season)r2   datesseasonss      r6   test_seasonsz!TestDatetimeAccessor.test_seasons   s    LsBGGGRXr}U';';&<==>>U##,  
 
$ 	7>58?+ABBBBBr8   r   r   r   c                    t          j        ddd          }t          j        |dg          } t	          ||          |          } t	          |j        |          |          }t          ||           d S )Nz
2014-01-01z
2014-05-01r   )r   r   r!   )r)   r*   r,   r-   r[   rc   r   r2   r   r   r   xdatesre   rf   s          r6   test_accessor_methodz)TestDatetimeAccessor.test_accessor_method  sz     lLsCCCe6(333)75&))*55+F++J778V,,,,,r8   NrR   rS   )__name__
__module____qualname__r`   fixturer7   markparametrizerg   rm   rr   rw   r   filterwarningsr
   r   r   r   r   r    r8   r6   r   r      sp       V^D!!!
 
 "!
, [	
 	
 	
 <+ + += <+< [	
 	
 	
 ' ' ' ', , , ,
 
 
 

! ! ! ! [ WXX[	
 	
 	
 8; ; ;9  ] YX<;" [	
 	
 	
 ; ; ;  ];" [	
 	
 	
 ; ; ;  ]; C C C C0 [MMM - - - - - -r8   r   c                     e Zd Z ej        d          d             ZddZej                            dg d          dd	            Z	ej                            d
g d          dd            Z
eej                            dg d          dd                        Zeej                            d
g d          dd                        ZdS )TestTimedeltaAccessorTr   c                   d}t           j                            dd|          }t          j        ddd          }t          j        ddd          }t	          j        dd|          | _        t          j        |||| j        gg d	d
          | _	        t           j        
                    | j        dd|f          | _        t          j        | j        ||| j        gg d	d
          | _        d S )Nr   r   r   r   r   1 day6Hr   r   r   r   r#   )r%   r&   r'   r(   r)   timedelta_ranger+   r,   r-   r   r.   r/   r0   r1   s        r6   r7   zTestTimedeltaAccessor.setup  s    y~~b"b)){1b"%%{1b"%%'gD"MMM
L$
+'''	
 
 
	 ))$*BB<)HH,N$
+'''	
 
 
r8   rR   rS   c                `   | j                                         }t          j        t	          | j         j                                                d          }|                    |          }t          j	        t          d          5  |j        j         d d d            d S # 1 swxY w Y   d S ry   r{   r   s      r6   r   z,TestTimedeltaAccessor.test_not_datetime_type'  r   r   r9   )dayssecondsmicrosecondsnanosecondsc                    t          j        t          | j        |          || j        gdg          }t          | j        j        j        |          }t          ||           d S ri   )r,   r-   r[   r+   r   r   rc   r   )r2   r9   re   rf   s       r6   rg   z'TestTimedeltaAccessor.test_field_access.  sc     <DJ&&UDJ<vh
 
 
 *E22Xv&&&&&r8   r   r   c                    t          j        ddd          }t          j        |dg          } t	          ||          |          } t	          |j        |          |          }t          ||           d S )Nr   z30 daysr   )r   endr   r   r   )r)   r   r,   r-   r[   rc   r   r   s          r6   test_accessor_methodsz+TestTimedeltaAccessor.test_accessor_methods8  s{     "idKKKe6(333)75&))*55+F++J778V,,,,,r8   c                   dd l m} t          | j        j        |          }|                    | j        d          }t          j        || j	        j
        | j	        j        d          }t                      5  t          |j        |          }d d d            n# 1 swxY w Y   t          |j	        |j                  sJ t          ||           t!          ||           d S r   )r   r   r[   r0   rc   r   r/   r,   r-   r   r    r!   r   r   r   r   r   r   s          r6   r   z,TestTimedeltaAccessor.test_dask_field_accessB  s    
 	 4?-u55t~jII49#3$).v
 
 
 $%% 	6 	6]-u55F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 &+rx00000FM222VX&&&&&r   c                0   dd l m}  t          | j        j        |          |          }|                    | j        d          }t          j        || j	        j
        | j	        j        d          }t                      5   t          |j        |          |          }d d d            n# 1 swxY w Y   t          |j	        |j                  sJ t          ||           t!          |                                |                                           d S r   r   r   s           r6   r   z/TestTimedeltaAccessor.test_dask_accessor_methodW  s[   
 	 674?-v66zBBt~jII49#3$).v
 
 
 $%% 	C 	C6W]-v66zBBF	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C &+rx00000FM222V^^%%x'7'7'9'9:::::r   Nr   )r   r   r   r`   r   r7   r   r   r   rg   r   r
   r   r   r   r8   r6   r   r     si       V^D!!!
 
 "!
,! ! ! ! [CCC ' ' ' ' [MMM - - - - [CCC ' ' '  ]'" [MMM ; ; ;  ]; ; ;r8   r   )365_day360_dayjulianall_leap366_day	gregorianro   r   )paramsc                    | j         S )N)param)requests    r6   rp   rp   x  s
    =r8   c                j    dd l }|                    t          j        t                    d| d          S )Nr   zhours since 2000-01-01T)unitsrp   only_use_cftime_datetimes)cftimenum2dater%   r}   _NT)rp   r   s     r6   r+   r+   }  s:    MMM??
	#&"&	    r8   c                    t           j                            ddt                    }t          j        ddd          }t          j        ddd          }t          j        |||| gg dd          S )Nr   r   r   r   r   r   r   )r%   r&   r'   r   r(   r,   r-   )r+   r   r4   r5   s       r6   r   r     so    9>>"b#&&D;q"b!!D;q"b!!D<dD%(/E/E/EF   r8   c                    t          j        ddd          }t          j        ddd          }t           j                            | ddt          f          }t          j        |||| gg dd          S )	Nr   r   r   r   r#   r   r   r   )r%   r(   r&   r.   r   r,   r-   )r+   r4   r5   r/   s       r6   times_3dr     sy    ;q"b!!D;q"b!!D	  b"c] ;;I<4u-4J4J4JQW   r8   r9   )r:   r;   r<   r=   rF   rD   rR   rS   c                &   t          | j        j        |          }t          j        t          t          j        j                            | j        j                  |          || j        j	        | j        j
                  }t          ||           d S )NrW   )r[   r   rc   r,   r-   codingcftimeindexCFTimeIndexr   r    r!   r   )r   r9   resultre   s       r6   rg   rg     s|    
 TY\5))F|	%11$)2BCCUKKyY^	  H """""r8   c                b    | j         j        d         j        }| j         j        j        |k    sJ d S )Nr   )r   r   rp   rc   )r   re   s     r6   test_calendar_cftimer     s2    y"+H9< H,,,,,,r8   c                 ~    t          j        t          j        dd          d          } | j        j        dk    sJ d S )N)   r   datetime64[ns]r\   )xyr   ro   )r,   r-   r%   zerosrc   rp   r   s    r6   test_calendar_datetime64_2dr     sC    </?@@@zRRRD74444444r8   c                     dd l m}  t          j        |                     dd          d          }t                      5  |j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r      r   r   r   r   zr   ro   )r   r   r,   r-   r   r   rc   rp   )r   r   s     r6    test_calendar_datetime64_3d_daskr    s    <
"233/  D 
 	!	! 9 9w#8888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s    A!!A%(A%c            	     2   ddl m}  t          j         | t          j                            ddd          dd	          d
                                          }t          d          5  |j	        j
        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )r   ru   i@B r   r#   zhours since 1970-01-01T00:00noleap)rp   r   r      max_computes)r   r   r,   r-   r%   r&   randintchunkr   rc   rp   )r   r   s     r6   test_calendar_dask_cftimer
    s      <Iay99*	
 	
 	

    egg 	 
 Q	/	/	/ , ,w8+++++, , , , , , , , , , , , , , , , , ,s   +BBBc                    t          j        t          d          5  | j        j                                         d d d            d S # 1 swxY w Y   d S )Nz3'CFTimeIndex' object has no attribute 'isocalendar'rX   )r`   r   AttributeErrorr   rc   rZ   r   s    r6   test_isocalendar_cftimer    s    	T
 
 
 # # 		  """# # # # # # # # # # # # # # # # # #   AAAc                    t          j        t          d          5  | j        j                                         d d d            d S # 1 swxY w Y   d S )Nz}'CFTimeIndex' object has no attribute `date`. Consider using the floor method instead, for instance: `.time.dt.floor\('D'\)`.rX   )r`   r   r  r   rc   rH   r   s    r6   test_date_cftimer    s    	 O
 
 
   			                 r  zignore::RuntimeWarningc                p   d}| j         j                            |          }t          j        t          j        j                            | j         j                  	                                d| j         j
        | j         j                  }|j                            |          }t          ||           dS )z5compare cftime formatting against datetime formattingz%Y%m%d%HstftimerW   N)r   rc   rv   r,   r-   r   r   r   r   to_datetimeindexr    r!   r   )r   date_formatr   datetime_arrayre   s        r6   test_cftime_strftime_accessr    s     KY\"";//F\
	))$)*:;;LLNNyY^	  N  ))+66H"""""r8   c                   dd l m} t          j        t	          t          j        j                            | j        j	                  |          |dg          }t          j        | j        j	        dg          
                    ddi          }t	          |j        |          }t          |j        |j                  sJ |j        |j        k    sJ t!          |                                |           d S )Nr   r   )r"   r!   r   r   )r   r   r,   r-   r[   r   r   r   r   r   r	  rc   r   r   r   r   r   r   )r   r9   r   re   r+   r   s         r6   test_dask_field_access_1dr    s     |	%11$)2BCCUKKX  H
 L)999??MMEUXu%%Ffk28,,,,,=EL((((!!8,,,,,r8   c                   dd l m} t          j        t	          t          j        j                            | j        	                                          |          
                    | j                  || j        | j                  }|                     dddd          } t	          | j        |          }t!          |j        |j                  sJ |j        | j        k    sJ t)          |                                |           d S )Nr   rW   r   r   r   )r   r   r,   r-   r[   r   r   r   r   ravelreshapeshaper    r!   r	  rc   r   r   r   r   r   r   )r   r   r9   r   re   r   s         r6   r   r   
  s     |I!--ho.C.C.E.EFF	
 	

'(.
!
!]  H ~~a2>>??HX[%((Ffk28,,,,,=HO++++!!8,,,,,r8   c                .    ddl m}  |            |          S )Nr   )_all_cftime_date_types)xarray.tests.test_coding_timesr  )rp   r  s     r6   cftime_date_typer   !  s(    EEEEEE!!##H--r8   c           	          t          j        t          j         fdt	          dd          D                                 }t          j        g d          }t          |j        |j        j        j                   d S )Nc                *    g | ]} d |d          S )i     r   ).0r;   r   s     r6   
<listcomp>z test_seasons.<locals>.<listcomp>+  s)    NNN""433NNNr8   ru      )r   r   r   r   r   r   r   r   r   r   r   r   )	r,   r-   r%   r   ranger   r   rc   r   )r   r   r   s   `  r6   r   r   (  s    L
NNNNq"NNNOO E l	
 	
 	
 G" w~ux'=>>>>>r8   c           
         t          j         | dddd           | dddd          g | dddd           | dddd          gg          S )Nru   r#     r  )r,   r-   )r   s    r6   cftime_rounding_dataarrayr*  A  sq    <aAq))+;+;Aq!R+H+HIaAr**,<,<Q1a,H,HI	
  r8   use_daskFTc           
     @   dd l m} d}t          j         |dddd           |dddd          g |dddd           |dddd          ggd          }|rddi}t	          d          5  |                     |          j                            |          }d d d            n# 1 swxY w Y   |                    |          }t          |j	        |j
                  sJ |j        |j        k    sJ n| j                            |          }t          ||           d S )	Nr   r   ru   r  r   r"   dim_0r  )r   r   r,   r-   r   r	  rc   r   r   r   r   r   r   r*  r   r+  r   r   re   r   r   s           r6   test_cftime_floor_accessorr0  K      D|aAq))+;+;Aq!Q+G+GHaAq))+;+;Aq!Q+G+GH	
   H  :1 $333 	L 	L.44V<<?EEdKKF	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L>>&))&+rx00000}/////*-33D99VX&&&&&   +.B%%B),B)c           
     @   dd l m} d}t          j         |dddd           |dddd          g |dddd           |dddd          ggd          }|rddi}t	          d	          5  |                     |          j                            |          }d d d            n# 1 swxY w Y   |                    |          }t          |j	        |j
                  sJ |j        |j        k    sJ n| j                            |          }t          ||           d S )
Nr   r   ru   r     r   r-  r.  r  )r   r   r,   r-   r   r	  rc   r   r   r   r   r   r   r/  s           r6   test_cftime_ceil_accessorr5  l  s    D|aAq))+;+;Aq!Q+G+GHaAq))+;+;Aq!Q+G+GH	
   H  91 $333 	K 	K.44V<<?DDTJJF	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K>>&))&+rx00000}/////*-22488VX&&&&&r2  c           
     @   dd l m} d}t          j         |dddd           |dddd          g |dddd           |dddd          ggd          }|rddi}t	          d          5  |                     |          j                            |          }d d d            n# 1 swxY w Y   |                    |          }t          |j	        |j
                  sJ |j        |j        k    sJ n| j                            |          }t          ||           d S )	Nr   r   ru   r  r   r-  r.  r  )r   r   r,   r-   r   r	  rc   r   r   r   r   r   r   r/  s           r6   test_cftime_round_accessorr7    r1  r2  r   )-
__future__r   numpyr%   pandasr)   r`   xarrayr,   xarray.testsr   r   r   r   r   r	   r
   r   r   _CFTIME_CALENDARSr   r   rp   r+   r   r   r   r   rg   r   r   r  r
  r  r  r   r  r  r   r   r   r*  r0  r5  r7  r   r8   r6   <module>r>     s   " " " " " "                              y- y- y- y- y- y- y- y-xZ; Z; Z; Z; Z; Z; Z; Z;z    
 ()))  *)          GGG 	# 	# 	#  	# - - - -
5 5 5 5
 9 9 9 9 , , ,  ,  # # # #     455# # # 65 # GGG - - -   
- GGG - - -   
-$ . . . ? ? ? ?0    eT]33' ' ' 43  '< eT]33' ' ' 43  '< eT]33' ' ' 43  ' ' 'r8   