
    o[weL                        d dl m Z mZ d dlZd dlZd dlZd dlZd dlm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 d dlmZ d dlmZ d dlmZmZmZ ej         !                    d ed	          ef ed	          ef ed	d
          efg          d             Z"d Z#ej         !                    deeeg          ej         !                    ddej$        e e%d          ed	dddg	          d                         Z&ej         !                    deeg          ej         !                    dg d          ej         !                    dg d          d                                     Z'ej         !                    dg d          d             Z(ej         !                    dddg          d             Z)ej         !                    dg d          d              Z*ej         !                    d!d" d# d$ g          d%             Z+ej         !                    d&eg d'feg d(fg          d)             Z,dd+Z-ej         !                    d&eg d,fed-gfg          d.             Z.ej         !                    d/ e-ed0           e-ed0          z   d1 2          d3             Z/d4 d5 d6 d7 d8 d9 d: d; d<Z0ej         !                    d= e1e02                                                    ej         !                    d>d?d@ej$        dAfdB edC          dDf edE          dDf e dFdGdG          dHf edI          dHf edIdJK          dHf edIdLK          dHf ej3        dM          4                     e dFdGdG                    dHfg          dN                         Z5ej         !                    dOej$        efeej$        f ej6        d	          ej$        fg          dP             Z7ej         !                    d=g dQ          ej         !                    d edRdSgdTU           edRdSgdLdTV           ej8        dRdSg           ej8        dRdSg edWK          X           edYdZgdTU          g          d[                         Z9ej         !                    d=g dQ          ej         !                    d\eeej8        g          d]                         Z:ej         !                    d^d_ej;        d_fd_ej<        d_fd_ej=        d`fd_ej>        d`fd`ej;        d_fd`ej<        d_fd`ej=        d_fd`ej>        d`fg          da             Z?db Z@dc ZAej         !                    dd ed            ed           B                                 ejC         ed           D                                ej         E                    e
 def          g           ed            ed           F                                 ejC         ed           G                                ej         E                    e
 dhf          g           ed           H                    dJ          eg          di             ZIej         !                    dd ej6        d dj           ejJ        dkdj          g          dl             ZKej         !                    dmg dn          ej         !                    dodpejL        fdqejM        fdrejN        fdsejO        fg          dt                         ZPej         !                    dd ejQ        dugdvz  eRX           ejQ        dvdwgdxX           ejQ        dydzgd{X          gg d|2          d}             ZSd~ ZTej         !                    d ejU        dv           ejV        dv           ejW        dG           ejX        dv           ejX        d           ejY        dv           ejY        d           ejZ        d           ejZ        dw           ej[                     ej6        dwd           ej6        dd           ej6        dd           ej6        dCd           ej6        dd           ej6        dvd           ej6        dd           ed           ed           ed           edd           ed           edd           ed          g          d             Z\d Z]dS )    )datetime	timedeltaN)iNaT)np_version_gte1p24p3)DatetimeIndexDatetimeTZDtypeIndexNaTPeriodSeries	TimedeltaTimedeltaIndex	Timestampisnaoffsets)	roperator)DatetimeArrayPeriodArrayTimedeltaArrayznat,idxr
   M)freqc                 @   |j         D ]Z}|dk    r	t          t          |          }t          j        |          sJ t          | |          }t          j        |          sJ [|j        D ]3}t          t          |          }|du sJ t          | |          }|du sJ 4d S )NweekdayF)
_field_opsgetattrr
   npisnan	_bool_ops)natidxfieldresults       <lib/python3.11/site-packages/pandas/tests/scalar/test_nat.pytest_nat_fieldsr$   $   s      
  
  Ie$$xe$$x  e$$e$$     c                  R   t          g d          } t          j        D ]Idk    r	t          |           }t	          fd| D                       }t          j        ||           Jt          |           }t          j        D ]Ndk    r	t          |j                  }fd| D             }t          j	        |t          |                     Ot          j
        D ]Gt          |j                  }fd| D             }t          j	        |t          |                     Hd S )N)z1/1/2000NNz1/4/2000r   c                 0    g | ]}t          |          S  r   .0xr!   s     r#   
<listcomp>z0test_nat_vector_field_access.<locals>.<listcomp>K   s#    999'!U++999r%   c                 0    g | ]}t          |          S r(   r)   r*   s     r#   r-   z0test_nat_vector_field_access.<locals>.<listcomp>W   #    333!GAu%%333r%   c                 0    g | ]}t          |          S r(   r)   r*   s     r#   r-   z0test_nat_vector_field_access.<locals>.<listcomp>\   r/   r%   )r   r   r   r   r	   tmassert_index_equalr   dtassert_series_equalr   )r    r"   expectedserr!   s       @r#   test_nat_vector_field_accessr7   A   sY   
<<<
=
=C) 0 0 Ie$$9999S999::
fh////
++C) 9 9 I''3333s333
vvh'7'78888( 9 9''3333s333
vvh'7'788889 9r%   klassvaluenanr    NATc                 .     | |          t           u sJ d S Nr
   )r8   r9   s     r#   test_identityr@   `   s#    
 5<<3r%   method)roundfloorceilr   )s5smin5minh5hc                 Z     | d          }t          ||          } ||          |u sJ d S )Nr   r)   )r8   rA   r   tsround_methods        r#   test_round_natrN   h   sA    
 
uB2v&&L<######r%   )
astimezonecombinectimedstfromordinalfromtimestampfromisocalendarisocalendarstrftimestrptimetime	timestamp	timetupletimetz	toordinaltznameutcfromtimestamputcnow	utcoffsetutctimetuplerZ   c                     d|  }t          j        t          |          5   t          t          |                        d d d            d S # 1 swxY w Y   d S )NzNaTType does not support match)pytestraises
ValueErrorr   r
   )rA   msgs     r#   test_nat_methods_raiserj   s   s    8 /f
.
.C	z	-	-	-  V                 s   AAAr   
isoweekdayc                 h    t          j         t          t          |                                 sJ d S r>   )r   r   r   r
   rA   s    r#   test_nat_methods_nanrn      s3     8(GC((**+++++++r%   )datenowreplacetoday
tz_converttz_localizec                 R     t          t          |                       t          u sJ d S r>   )r   r
   rm   s    r#   test_nat_methods_natrv      s-    
  73!!S((((((r%   get_natc                     t           S r>   r?   r,   s    r#   <lambda>rz      s    # r%   c                      t          |           S r>   r   ry   s    r#   rz   rz      s    1 r%   c                      t          |           S r>   )r   ry   s    r#   rz   rz      s    1 r%   c                      | d                                           dk    sJ  | d                               d          dk    sJ d S )Nr
   nanoseconds)timespec)	isoformat)rw   s    r#   test_nat_iso_formatr      sY    
 75>>##%%....75>>##]#;;uDDDDDDr%   zklass,expected)	normalizeto_julian_date	to_periodunit)
componentsresolution_stringto_pytimedeltato_timedelta64r   viewc                     t          t                    t          |           }fd|D             }|                                 ||k    sJ d S )Nc                 F    g | ]}|v|                     d           |S _)
startswith)r+   r,   	nat_namess     r#   r-   z3test_missing_public_nat_methods.<locals>.<listcomp>   s5    VVVQ)););ALLQTDUDU);q);););r%   )dirr
   sort)r8   r5   klass_namesmissingr   s       @r#   test_missing_public_nat_methodsr      sX    . CIe**KVVVV+VVVGLLNNNhr%   Fc                     t          t                    }t                      fd|D             } t          u r"t          t                    fd|D             }|r fd|D             }|                                 |S )a4  
    Get overlapping public methods between NaT and another class.

    Parameters
    ----------
    klass : type
        The class to compare with NaT
    as_tuple : bool, default False
        Whether to return a list of tuples of the form (klass, method).

    Returns
    -------
    overlap : list
    c                     g | ]:}|v |                     d           t          t          |                    8|;S r   )r   callabler   )r+   r,   r8   r   s     r#   r-   z3_get_overlap_public_nat_methods.<locals>.<listcomp>   sW       ALL$5$5(75RSCTCT:U:U 	
r%   c                     g | ]}|v|	S r(   r(   )r+   r,   ts_namess     r#   r-   z3_get_overlap_public_nat_methods.<locals>.<listcomp>   s#    ;;;():):1):):):r%   c                     g | ]}|fS r(   r(   )r+   rA   r8   s     r#   r-   z3_get_overlap_public_nat_methods.<locals>.<listcomp>   s    999vE6?999r%   )r   r
   r   r   r   )r8   as_tupler   overlapr   r   s   `   @@r#   _get_overlap_public_nat_methodsr      s     CIe**K      G 	y>>;;;;g;;; :9999999LLNNNNr%   )'as_unitrO   rD   rP   rQ   ro   day_namerR   rC   rU   fromisoformatrS   rT   rV   r   rk   
month_namerp   rq   rB   rW   rX   rY   rZ   r[   r\   to_datetime64to_numpyto_pydatetimerr   r]   rs   rt   r^   r_   r`   ra   rb   r   total_secondsc                 0    t          |           |k    sJ d S r>   )r   )r8   r5   s     r#   test_overlap_public_nat_methodsr      s$    p +511X======r%   compareTc                 2    | d         j          d| d          S )Nr   .   )__name__ry   s    r#   rz   rz   1  s    QqT]++QqT++ r%   )idsc                    | \  }}t          ||          j        }|t          k    r|dk    rt          j        d           |dk    rt          j        d| d           t          t
          |          j        }||k    sJ d S )Nr   zDIgnore differences with Timestamp.isoformat() as they're intentionalr   zdifferent docstring for z is intentional)r   __doc__r   rf   skipr
   )r   r8   rA   	klass_docnat_docs        r#   test_nat_doc_stringsr   +  s     ME6v&&.I	f33R	
 	
 	
  	FvFFFGGGc6""*Gr%   c                     | |z   S r>   r(   abs     r#   rz   rz   I  
    AE r%   c                     || z   S r>   r(   r   s     r#   rz   rz   J  r   r%   c                     | |z
  S r>   r(   r   s     r#   rz   rz   K  
    QU r%   c                     || z
  S r>   r(   r   s     r#   rz   rz   L  r   r%   c                     | |z  S r>   r(   r   s     r#   rz   rz   M  r   r%   c                     || z  S r>   r(   r   s     r#   rz   rz   N  r   r%   c                     | |z  S r>   r(   r   s     r#   rz   rz   O  
    1q5 r%   c                     || z  S r>   r(   r   s     r#   rz   rz   P  r   r%   )left_plus_rightright_plus_leftleft_minus_rightright_minus_leftleft_times_rightright_times_leftleft_div_rightright_div_leftop_namezvalue,val_type)   scalar)g      ?floatingr   foostri  r   rF   i  r   rZ   z
2014-01-01UTC)tzz
US/Easternz
Asia/Tokyoc                 X   dhh dt          t                                                    ddhh dd}t          |          }| |                    |t                                v r|dk    r%d| v r!t	          |t
                    rd	}d
| d| d}n |dk    rd                    g d          }nd}t          j        t          |          5   |t          |           d d d            d S # 1 swxY w Y   d S |dk    rd| v rt          j        }nt          } |t          |          |u sJ d S )Nr   >   r   r   r   r   r   r   r   >   r   r   r   r   )r   r   r   r   rZ   r   timesz(Timedelta|NaTType)z'unsupported operand type\(s\) for \*: 'z' and ''r   |)zcan only concatenate strunsupported operand typezcan't multiply sequencezCan't convert 'NaTType'zmust be str, not NaTTyper   rd   div)set_opskeysget
isinstancer   joinrf   rg   	TypeErrorr
   r   r:   )r   r9   val_typeinvalid_opsoptypsri   r5   s           r#   test_nat_arithmetic_scalarr   T  s   ( $$
 
 
 499;;(*<=
 
 
 K& 
gB+//(CEE2222##7""5),, # )DQTQQ$QQQCC ((   CC -C]9C000 	 	BsENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 {""u'7'7vHHHr#u~~))))))s   C**C.1C.zval,expectedc                 :    t          dd          }|| z  |u sJ d S )N      hoursminutesr|   )valr5   tds      r#   test_nat_rfloordiv_timedeltar     s1     
A	&	&	&B9      r%   )r   r   r   r   z
2011-01-01z
2011-01-02r,   namer   r   z
US/Pacificdtype1 day2 dayc                 8   d}t           gdz  }|j        j        dk    rd| v rt          ||j        |          }nt          ||          }t          |t                    s|j        }t          |          } |t           |          }t          j        ||           d S )Nr,   r   r   plusr   r   )r
   r   kindr   r   r   r   r	   arrayr   r1   assert_equal)r   r9   exp_nameexp_datar5   r   r"   s          r#   test_nat_arithmetic_indexr     s    $ HuqyH{36W#4#4 ehXFFF!(:::eU## ">	gBRU^^FOFH%%%%%r%   boxc                      |ddgd          } |t           t           gd          }t          j        t          |          |t                     |           d S )Nr   r   timedelta64[ns]r   )r
   r1   r   r   )r   r   vecbox_nats       r#   test_nat_arithmetic_td64_vectorr    s]     #w (9
:
:
:Cc3*$5666GODM#s++W55555r%   zdtype,op,out_dtypezdatetime64[ns]r  c                     t          j        d                              |           } |t          |          }t          j        |j        |          }|                    d           t          j        ||           d S )N
   r   r
   )	r   arangeastyper
   emptyshapefillr1   assert_numpy_array_equal)r   r   	out_dtypeotherr"   r5   s         r#   test_nat_arithmetic_ndarrayr    so     IbMM  ''ERU^^Fx9555HMM%11111r%   c                  R    t           j        j        t          j        j        k    sJ d S r>   )r
   rQ   r   r   r(   r%   r#   test_nat_pinned_docstringsr    s#    9	 7777777r%   c                     t          j                    } t          j                    }t          |           rt          |          sJ t          j        d          }t	          |t
          j                  sJ |j        dk    sJ t          j        d          }t	          |t
          j                  sJ |j        dk    sJ t          j        d          }t	          |t
          j                  sJ |j        dk    sJ t          j
        t          d          5  t          j        t
          j                   d d d            d S # 1 swxY w Y   d S )NzM8[s]zm8[ns]zm8[s]zNaT.to_numpy dtype must be a rd   )r
   r   r   r   r   r   
datetime64r   timedelta64rf   rg   rh   int64)r5   r"   s     r#   test_to_numpy_aliasr    st    ""H\^^F>>*d6ll*** \'""Ffbm,,,,,<7""""\(##Ffbn-----<8####\'""Ffbn-----<7""""	z)H	I	I	I  RX                 s   EE	E	r  z3td64 doesn't return NotImplemented, see numpy#17017)reason)marksz3dt64 doesn't return NotImplemented, see numpy#17017c                     | } t          t          |          |          du sJ t          t          |                    d                    } |t          |          du sJ  ||t                    du sJ d S )NFr   )r   r
   operatorstrip)compare_operators_no_eq_ner  opnamer   s       r#   test_nat_comparisonsr  
  s    6 (F73&&%////	6<<,,	-	-B2c5>>U""""2eS>>U""""""r%   nsrp   c                     t           | k    rJ t           | k    sJ t           | k     rJ t           | k    rJ t           | k    rJ t           | k    rJ d S r>   r?   )r  s    r#   test_nat_comparisons_numpyr!  .  sV     e||||%<<<<U{{{{U{{{{e||||e||||||r%   other_and_type)r   )r   int)       @floatsymbol_and_op<=<>=>c                    | \  }}|\  }}t           |k    rJ |t           k    rJ t           |k    sJ |t           k    sJ d| d| d}t          j        t          |          5   |t           |           d d d            n# 1 swxY w Y   d| d| d}t          j        t          |          5   ||t                      d d d            d S # 1 swxY w Y   d S )Nr   z4' not supported between instances of 'NaTType' and 'rd   z&' not supported between instances of 'z' and 'NaTType')r
   rf   rg   r   )r"  r&  r  
other_typesymbolr   ri   s          r#   test_nat_comparisons_invalidr.  :  s    'E:JFBe||||||||%<<<<C<<<<
Wf
W
W*
W
W
WC	y	,	,	,  
3               Xf
W
WJ
W
W
WC	y	,	,	,  
5#                 s$   #BBB0CCCr   r   r   r  r$  g      @float64)r   r#  r%  c                 0   t          j        ddg          }t          | k    }t          j        ||           | t          k    }t          j        ||           t          j        ddg          }t          | k    }t          j        ||           | t          k    }t          j        ||           dt
          j        fdt
          j        fdt
          j        fdt
          j	        ffD ]\  }}d| d}t          j        t          |	          5   |t          |            d d d            n# 1 swxY w Y   | j        t          j        d
          k    rd }t          j        t          |	          5   || t                     d d d            n# 1 swxY w Y   d S )NFTr'  r(  r)  r*  r   z' not supported betweenrd   object)r   r   r
   r1   r  r  leltgegtrf   rg   r   r   )r  r5   r"   r-  r   ri   s         r#   $test_nat_comparisons_invalid_ndarrayr6  S  s    x''HE\F111c\F111xt%%HE\F111c\F111 
x{	hk	x{	hk	  
 2&111]9C000 	 	BsENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ;"(8,,,,C]9C000 	 	BucNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s$   	D''D+	.D+	,F

F	F	c                 n   |                                                                  }d}t          |f|t          ffD ]\  }}||k    rJ ||k    sJ t          j        t
          |          5  ||k      d d d            n# 1 swxY w Y   t          j        t
          |          5  ||k     d d d            n# 1 swxY w Y   t          j        t
          |          5  ||k     d d d            n# 1 swxY w Y   t          j        t
          |          5  ||k     d d d            n# 1 swxY w Y   d S )Nz,Cannot compare NaT with datetime.date objectrd   )r   ro   r
   rf   rg   r   )fixed_now_tsr3   ri   leftrights        r#   test_compare_dater;  |  s7    
	#	#	%	%	*	*	,	,B
8Cb	B9-  e5====u}}}}]9C000 	 	5LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9C000 	 	EMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9C000 	 	5LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9C000 	 	EMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 sH   +A>>B	B	$B77B;	>B;	C00C4	7C4	D))D-	0D-	obj         rI   r   i  rE   iQ Dim  x   )r      )daysr      )r      r   0   c                 x    t           | z   t           u sJ | t           z   t           u sJ t           | z
  t           u sJ d S r>   r?   )r<  s    r#   test_nat_addsub_tdlike_scalarrI    sI    < 999r%   c                  N    t          j        t                    } | t          u sJ d S r>   )r1   round_trip_pickler
   )ps    r#   test_picklerM    s#    
S!!A888888r%   )F)^r   r   r  numpyr   rf   pytzpandas._libs.tslibsr   pandas.compat.numpyr   pandasr   r   r	   r
   r   r   r   r   r   r   r   pandas._testing_testingr1   pandas.corer   pandas.core.arraysr   r   r   markparametrizer$   r7   r:   r%  r@   rN   rj   rn   rv   r   r   r   r   r   r   listr   timezonelocalizer   r  r   _from_sequencer   r  addraddsubrsubr  r  r  r   paramr   xfailr   r   rt   r  r  r!  r2  r3  r4  r5  r.  r   r1  r6  r;  YearEnd	YearBegin
MonthBeginMonthEndDayHourMinuterI  rM  r(   r%   r#   <module>rj     sA                 $ $ $ $ $ $ 4 4 4 4 4 4                                ! ! ! ! ! !          	5		=)	5		>*	C	 	 	 +.   *9 9 9> 9i"@AAdBFD%%,,UE2uM    BA 9i"899#=#=#=>>!F!F!FGG$ $ HG ?> :9$    4 5 4 I|#<==, , >=,
 NNN ) ) )
 557M7MN E E E 	HHHI  
	
 " # "! ! ! !H  ( ( (+	
X 
_%&[.1 1d> >e1 1d> ''	488
)
))T
:
:	; 	,+        , *)))********((((	 	 DD$5$566		4+&	4+&	$1		{+	<	 	 +.	<E	*	*	*K8	<L	1	1	1;?	|	$	$	-	-hhtQ.B.B	C	C[Q  6* 6*!  76"6*r bfc]S"&MNBN54I4I263RS ! ! ! RRR  |\2===|\2|#NNN$$lL%ABB$$<(<0P0P0P	
 	
 	
 	)444 & & 	  &$ RRR  9V WXX6 6 YX	 
6 	8<)9:	9>+;<	8<):;	9>+<=	HL*:;	IN,<=	HL*:;	IN,=>	 2 2 28 8 8
  0 	!	!##%%IaLL''))+##((L $  	
 	
 	
 		!	!""$$IaLL&&((+##((L $  	
 	
 	
 		!  '') 2# #3 2# >2>!T#:#:MBM%QU<V<V"WXX  YX )+W+W+WXX
HK3,tX[.ACCUV  	  YX
( %1F+++!Qw'''#s9---
 	      @  * 	!1AARQq#q#tS!!tS!!y#&&q#sC  	"	#	#	q#&&&		B'''	1 : ; :    r%   