o
    Eh                     @   s  d dl Z d dlZd dlZd dlmZmZmZmZ d dl	m
Z
 d dlZd dl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 d dlmZmZmZ ejdejd	ej  gZ!ej"ed
d# e$d
ded
dge! ddd Z%ej"e$ddedd# eddge! ddd Z&G dd dZ'G dd dZ(G dd dZ)G dd dZ*G dd dZ+G d d! d!Z,G d"d# d#Z-G d$d% d%Z.dS )&    N)IncompatibleFrequencyPeriod	Timestamp	to_offset)PerformanceWarning)PeriodIndexSeries	TimedeltaTimedeltaIndexperiod_range)ops)TimedeltaArray)assert_invalid_addsub_typeassert_invalid_comparisonget_upcast_box         )Zminutess)Zseconds)paramsc                 C      | j S )zp
    Several timedelta-like and DateOffset instances that are _not_
    compatible with Hourly frequencies.
    ZparamZrequest r   Clib/python3.10/site-packages/pandas/tests/arithmetic/test_period.py
not_hourly)      r   im  DZdaysc                 C   r   )z{
    Several timedelta-like and DateOffset instances that are _not_
    compatible with Monthly or Annual frequencies.
    r   r   r   r   r   mismatched_freq9   r   r   c                   @   s  e Zd Zejddedddgdd Zdd Zejd	d
e	de
dddddddgdd Zejdejdddjejdddjededejeedg deddeddeeg dg	dd Zejdeejdd gdd  ZdS )!TestPeriodArrayLikeComparisonsother2017r   freqc                 C   sZ   t g ddd}t||}t||d}tg d}t||}||k}t|| d S )N)r"   r"   Z2018r   r#   TTTFr   tmbox_expectedr   nparrayassert_equal)selfr!   box_with_arrayidxxboxexpectedresultr   r   r   test_eq_scalarR   s   z-TestPeriodArrayLikeComparisons.test_eq_scalarc                 C   sh   t ddd}t| d }t||}t||d}||k}tg d}t||}t|| d S )N2000   periodsr   TTFFF)r   r)   r*   Zto_numpyr'   r(   r   r+   )r,   r-   pir!   r/   r1   r0   r   r   r   test_compare_zerodim_   s   z3TestPeriodArrayLikeComparisons.test_compare_zerodimscalarZfooz
2021-01-01r4   r   	   g      #@  FNc                 C   (   t ddd}t||}t||| d S Nr3   r4   r5   r   r'   r(   r   )r,   r-   r:   r8   parrr   r   r   test_compare_invalid_scalarm      z:TestPeriodArrayLikeComparisons.test_compare_invalid_scalarr3   r5   Z1D)r<   i  i  i  i  c                 C   r=   r>   r?   )r,   r-   r!   r8   r@   r   r   r   test_compare_invalid_listlike   rB   z<TestPeriodArrayLikeComparisons.test_compare_invalid_listlike	other_boxc                 C   s
   |  tS N)astypeobjectxr   r   r   <lambda>      
 z'TestPeriodArrayLikeComparisons.<lambda>c           	      C   s  t ddd}t||}||}t||d}tg d}t||}||k}t|| ||k}t|| ||k}t|| ||k}t||  ||k }t||  ||k}t||  ||d d d }tg d}t||}||k}t|| tg d}t||}||k}t|| tg d	}t||}||k}t|| tg d
}t||}||k}t|| tg d}t||}||k }t|| tg d}t||}||k}t|| d S )Nr3      r5   T)TTTTT)FFTFF)TTTFF)FFTTT)TTFTT)TTFFF)FFFTT)r   r'   r(   r   r)   r*   r+   )	r,   r-   rD   r8   r@   r!   r/   r0   r1   r   r   r   test_compare_object_dtype   sV   z8TestPeriodArrayLikeComparisons.test_compare_object_dtype)__name__
__module____qualname__pytestmarkparametrizer   r2   r9   r   r	   rA   pd
date_ranger*   Ztimedelta_ranger)   arangerF   Zfloat64listrangerG   IndexrC   rN   r   r   r   r   r    M   sB    




r    c                   @   s   e Zd Zdd Zdd Zejdg ddd Zejdg dd	d
 Z	ejdg ddd Z
ejdg ddd Zejdg ddd Zejdedgdd ZdS )TestPeriodIndexComparisonsc                 C   s~   t dddd}|d }||k }|j|jd k }t|| |jdd|k }t||dd |t|k }t|| d S )N2007-01   Mr6   r$   
   r   )r   valuesr'   assert_numpy_array_equalZreshaper)   r*   )r,   r.   perr1   expr   r   r   test_pi_cmp_period   s   z-TestPeriodIndexComparisons.test_pi_cmp_periodc                    s   t dddd}|d   fdd|D }t||}t| d}t||}| k}t|| |d	  | k} fd
d|D }t||}t|| d S )Nz
2000-01-01r`   r   r_      c                       g | ]}| kqS r   r   .0rI   valr   r   
<listcomp>       zKTestPeriodIndexComparisons.test_parr_cmp_period_scalar2.<locals>.<listcomp>TrL   c                    rg   r   r   rh   rj   r   r   rl      rm   )r   r'   r(   r   r+   )r,   r-   r8   r0   serr/   r1   r   rj   r   test_parr_cmp_period_scalar2   s   z7TestPeriodIndexComparisons.test_parr_cmp_period_scalar2r$   )r^   2MZ3Mc                 C   s  t g d|d}t||}td|d}t||d}tg d}t||}t||k| t||k| tg d}t||}t||k| t||k| tg d}t||}t||k| t||k | tg d}t||}t||k | t||k| tg d	}t||}t||k| t||k| tg d
}t||}t||k| t||k| d S )N2011-012011-022011-032011-04r#   rs   TFTFFTFTT)FFTTr7   )FTTT)TTFF)r   r'   r(   r   r   r)   r*   r+   )r,   r$   r-   baserc   r/   rd   r   r   r   test_parr_cmp_period_scalar   s8   z6TestPeriodIndexComparisons.test_parr_cmp_period_scalarc                 C   s8  t g d|d}t||}t g d|d}t||d}tg d}t||}t||k| tg d}t||}t||k| tg d}t||}t||k| tg d}t||}t||k | tg d	}t||}t||k| tg d
}t||}t||k| d S )Nrq   r#   )rs   rr   rt   2011-05TFFTFTTFTrv   TFFTFTTFrw   r&   )r,   r$   r-   rx   r.   r/   rd   r   r   r   test_parr_cmp_pi  s,   z+TestPeriodIndexComparisons.test_parr_cmp_pic                 C   s  t g d|d}t||}d| d}tjt|d |tdddk W d    n1 s.w   Y  tjt|d tddd|k W d    n1 sMw   Y  t g ddd}d	}|tjtj	fv rf|n|}tjt|d ||k W d    n1 s~w   Y  d| d}tjt|d |tdd
dk W d    n1 sw   Y  tjt|d tdd
d|k W d    n1 sw   Y  t g dd
d}d}|tjtj	fv r|n|}tjt|d ||k W d    d S 1 sw   Y  d S )Nrq   r#   )Invalid comparison between dtype=period\[z\] and Periodmatch2011Y)r   201220132014z@Invalid comparison between dtype=period\[Y-DEC\] and PeriodArray4Mz=Invalid comparison between dtype=period\[4M\] and PeriodArray)
r   r'   r(   rR   raises	TypeErrorr   to_arrayrU   r*   )r,   r$   r-   rx   msgr.   Zrev_msgZidx_msgr   r   r    test_parr_cmp_pi_mismatched_freq?  s8   

"z;TestPeriodIndexComparisons.test_parr_cmp_pi_mismatched_freqc                 C   s  t g d|d}|d }||k}tg d}t|| ||k }t|| |tjk}tg d}t|| tj|k}t|| |tjk}tg d}t|| tj|k}t|| t g d|d}||k }tg d}t|| ||k}tg d}t|| ||k}tg d}t|| ||k}tg d	}t|| ||k}tg d
}t|| d S )Nrr   rs   NaTrz   r#   r   FFFTFFFFTTTTrs   rr   ru   r   r7   r|   r{   )r   r)   r*   r'   rb   rU   r   )r,   r$   idx1rc   r1   rd   Zidx2r   r   r   test_pi_cmp_natb  sB   



z*TestPeriodIndexComparisons.test_pi_cmp_natc                 C   s   t g d|d}t g ddd}d| d}tjt|d ||k W d    n1 s,w   Y  ||k}tjg dtd	}t|| d S )
Nr   r#   r   r   r   z\] and PeriodArrayr   r   dtype)	r   rR   r   r   r)   r*   boolr'   rb   )r,   r$   r   Zdiffr   r1   r0   r   r   r   &test_pi_cmp_nat_mismatched_freq_raises  s   
zATestPeriodIndexComparisons.test_pi_cmp_nat_mismatched_freq_raisesr   Nc                 C   s(  t tdtjtdg}t tjtjtdg}|d ur%||}||}||k}tg d}t|| ||k}tg d}t|| tg d}t|tjk| ttj|k| tg d}t|tjk| ttj|k| tg d}t|tjk | ttj|k| d S )N
2011-01-01
2011-01-03)FFTr%   )FFF)TTT)	r   r   rU   r   rF   r)   r*   r'   rb   )r,   r   leftrightr1   r0   r   r   r   test_comp_nat  s(   

z(TestPeriodIndexComparisons.test_comp_nat)rO   rP   rQ   re   ro   rR   rS   rT   ry   r   r   r   r   rG   r   r   r   r   r   r[      s    
%
"
"
+
r[   c                   @      e Zd Zdd ZdS )TestPeriodSeriesComparisonsc                 C   s  t tdddtdddtdddtdddg}t tdddtd	ddtdddtd
ddg}t g d}t||k| t g d}t||k| t g d}t||k| t g d}t||k | t g d}t||k| t g d}t||k| d S )Nr   r   r#   rs   r^   r   ru   r   rr   rz   r{   r|   rv   r}   r~   rw   )r   r   r'   assert_series_equal)r,   rx   rn   rd   r   r   r   (test_cmp_series_period_series_mixed_freq  s4   



	



	zDTestPeriodSeriesComparisons.test_cmp_series_period_series_mixed_freqN)rO   rP   rQ   r   r   r   r   r   r         r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	*TestPeriodIndexSeriesComparisonConsistency2Test PeriodIndex and Period Series Ops consistencyc                 C   s`   t |}||}t|tjtjfsJ t|| t|}||}t||j	d}t
|| d S Nname)r   
isinstancerU   rZ   r)   Zndarrayr'   r+   r   r   r   )r,   ra   funcr0   r.   r1   r   rd   r   r   r   _check  s   z1TestPeriodIndexSeriesComparisonConsistency._checkc                    s8  t g dddd}|d   fdd}tjg dtjd	}| |||  fd
d}| |||  fdd}tjg dtjd	}| |||  fdd}| |||  fdd}tjg dtjd	}| |||  fdd}tjg dtjd	}| |||  fdd}tjg dtjd	}| ||| d S )Nrq   r^   r.   r$   r   r   c                       |  kS rE   r   rH   rc   r   r   rJ         zPTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period.<locals>.<lambda>r{   r   c                        | kS rE   r   rH   r   r   r   rJ      r   c                       |  kS rE   r   rH   r   r   r   rJ     r   r|   c                        | kS rE   r   rH   r   r   r   rJ     r   c                        | kS rE   r   rH   r   r   r   rJ   	  r   )TTTFc                    s   |  kS rE   r   rH   r   r   r   rJ     r   r   c                    r   rE   r   rH   r   r   r   rJ     r   r   r)   r*   Zbool_r   r,   r.   frd   r   r   r   test_pi_comp_period  s.   
z>TestPeriodIndexSeriesComparisonConsistency.test_pi_comp_periodc                    s  t g dddd}|d   fdd}tjg dtjd	}| |||  fd
d}| ||| dd }tjg dtjd	}| ||| dd }| |||  fdd}tjg dtjd	}| |||  fdd}| ||| dd }tjg dtjd	}| ||| dd }| |||  fdd}tjg dtjd	}| |||  fdd}tjg dtjd	}| ||| dd }tjg dtjd	}| ||| dd }tjg dtjd	}| ||| d S )Nrr   r   rt   ru   r^   r.   r   r   c                    r   rE   r   rH   r   r   r   rJ     r   zTTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period_nat.<locals>.<lambda>r{   r   c                    r   rE   r   rH   r   r   r   rJ     r   c                 S   s
   | t jkS rE   rU   r   rH   r   r   r   rJ   !  rK   r   c                 S   s
   t j| kS rE   r   rH   r   r   r   rJ   $  rK   c                    r   rE   r   rH   r   r   r   rJ   '  r   r|   c                    r   rE   r   rH   r   r   r   rJ   *  r   c                 S   s
   | t jkS rE   r   rH   r   r   r   rJ   -  rK   r   c                 S   s
   t j| kS rE   r   rH   r   r   r   rJ   0  rK   c                    r   rE   r   rH   r   r   r   rJ   3  r   )TFTFc                    s   |  k S rE   r   rH   r   r   r   rJ   7  r   r7   c                 S   s
   | t jkS rE   r   rH   r   r   r   rJ   ;  rK   c                 S   s
   t j| kS rE   r   rH   r   r   r   rJ   ?  rK   r   r   r   r   r   test_pi_comp_period_nat  sH   
zBTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period_natN)rO   rP   rQ   __doc__r   r   r   r   r   r   r   r     s
    r   c                   @   r   )TestPeriodFrameArithmeticc                 C   s  t tdddtdddgtdddtdddgd}|d jd	ks%J |d
 jd	ks.J tddd}|j}t tjd| d| gtdtjd| d| gtdd}t	|| | t	|| d|  t tdddtdddgtdddtdddgd}|d jd	ksJ |d
 jd	ksJ t tjd| d| gtdtjd| d| gtdd}t	|| | t	|| d|  d S )Nz2015-01r^   r#   z2015-022014-01z2014-02)ABr   	Period[M]r   z2015-03r   r   r         rM   z2015-05z2015-06r4      )
rU   	DataFramer   r   r$   r)   r*   rG   r'   Zassert_frame_equal)r,   Zdfpoffrd   Zdf2r   r   r   test_ops_frame_periodI  s<   z/TestPeriodFrameArithmetic.test_ops_frame_periodN)rO   rP   rQ   r   r   r   r   r   r   H  r   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	g d
dd Z
ej	d	g d
ej	dejjdfejjdfejjdfejjdfgdd Zej	deded ed ejddddejddddejddddjejddddjdeg dg	dd  Zd!d" Zd#d$ Zej	d%g d&ej	d'ddgd(d) Zej	d*ejejgd+d, Zej	d*ejejgd-d. Zd/d0 Z d1d2 Z!ej	d3d4ejd4ej"d5gd6d7 Z#d8d9 Z$d:d; Z%ej	d<d=d>gd?d@ Z&dAdB Z'ej	dCejejgej	dDe(j)e*j+gdEdF Z,ej	dCejejgdGdH Z-dIdJ Z.ej	dKg dLdMdN Z/dOdP Z0dQdR Z1dSdT Z2dUdV Z3dWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9ej	d<d=d>gdcdd Z:ej	dejdegdf dgd5e;j<degdf dgd5gdhdi Z=djdk Z>dldm Z?dndo Z@dS )pTestPeriodIndexArithmeticc                 C   s   t dddd}t dddd}t||}d}tjt|d ||  W d    n1 s,w   Y  tjt|d ||7 }W d    d S 1 sHw   Y  d S )N1/1/2000r   rL   r$   r6   1/6/2000z/unsupported operand type\(s\) for \+: .* and .*r   )r   r'   r(   rR   r   r   )r,   r-   rngr!   r   r   r   r   test_parr_add_iadd_parr_raisesz  s   

"z8TestPeriodIndexArithmetic.test_parr_add_iadd_parr_raisesc                 C   sb   t dddd}t dddd}|j}td| gd }|| }t|| ||8 }t|| d S )Nr   r   rL   r   r   )r   r$   rU   rZ   r'   assert_index_equal)r,   r   r!   r   r0   r1   r   r   r   test_pi_sub_isub_pi  s   z-TestPeriodIndexArithmetic.test_pi_sub_isub_pic                 C   s   t dddd}|dd  dtj}|dd  |dd  s!J || }|j}ttjd| d| d| d| g}t|| d S )Nr   r   rL   r   r   r   )	r   insertrU   r   Zequalsr$   rZ   r'   r   )r,   r   r!   r1   r   r0   r   r   r   test_pi_sub_pi_with_nat  s   &z1TestPeriodIndexArithmetic.test_pi_sub_pi_with_natc                 C   st   t dddd}t dddd}t||}t||}d}tjt|d ||  W d    d S 1 s3w   Y  d S )	Nr   r   rL   r   r   hz;Input has different freq=[hD] from PeriodArray\(freq=[Dh]\)r   )r   r'   r(   rR   r   r   )r,   r-   Zbox_with_array2r   r!   r   r   r   r    test_parr_sub_pi_mismatched_freq  s   
"z:TestPeriodIndexArithmetic.test_parr_sub_pi_mismatched_freqnr   r   rf   r4   c                 C   sd   d}d}t |g||d}t |g||d}t |g|jjdt |g|jjd }t|| | d S )N1991090519920406r#   )r   r$   rx   r'   r   )r,   Ztick_classesr   p1_dp2_dp1p2r0   r   r   r   test_sub_n_gt_1_ticks  s   
z/TestPeriodIndexArithmetic.test_sub_n_gt_1_tickszoffset, kwd_nameZmonthstartingMonthNZweekdayc                 C   s   |d ur|dini }d}d}||fddi|}t |g|d}t |g|d}	|	| }
t |g|jdt |g|jd }t|
| d S )Nrf   r   r   	normalizeFr#   )r   rx   r'   r   )r,   offsetZkwd_namer   kwdsr   r   r$   r   r   r1   r0   r   r   r   test_sub_n_gt_1_offsets  s   z1TestPeriodIndexArithmetic.test_sub_n_gt_1_offsetsr!   
2016-01-01rf   r   r_   zEurope/Brussels)r6   Ztzr   z
Asia/TokyogQ	@)g       @g      @g      @c                 C   s  t dddd}t||}dg d}t||| tjt|d ||  W d    n1 s0w   Y  tjt|d ||  W d    n1 sKw   Y  tjt|d ||  W d    n1 sfw   Y  tjt|d ||  W d    d S 1 sw   Y  d S )Nr   r   rf   r   |)z!(:?cannot add PeriodArray and .*)z&(:?cannot subtract .* from (:?a\s)?.*)z3(:?unsupported operand type\(s\) for \+: .* and .*)z1unsupported operand type\(s\) for [+-]: .* and .*r   )r   r'   r(   joinr   rR   r   r   )r,   r!   r-   r   r   r   r   r   test_parr_add_sub_invalid  s$   



"z3TestPeriodIndexArithmetic.test_parr_add_sub_invalidc                 C   s  t dddd}tg d}|j}d}tjt|d ||  W d    n1 s(w   Y  tjt|d ||  W d    n1 sCw   Y  tjt|d ||  W d    n1 s^w   Y  d}tjt|d ||  W d    d S 1 s|w   Y  d S )	Nr   Qrf   r   -1 Dayr   r   zCCannot add or subtract timedelta64\[ns\] dtype from period\[Q-DEC\]r   z/cannot subtract PeriodArray from TimedeltaArray)r   r
   ra   rR   r   r   )r,   r   tditdarrr   r   r   r   *test_pi_add_sub_td64_array_non_tick_raises  s"   



"zDTestPeriodIndexArithmetic.test_pi_add_sub_td64_array_non_tick_raisesc                 C   s*  t dddd}tg d}|j}t dddd}|| }t|| || }t|| || }t|| || }t|| t dddd}|| }t|| || }t|| d}tjt|d	 ||  W d    n1 srw   Y  tjt|d	 ||  W d    d S 1 sw   Y  d S )
Nr   Z90Drf   r   r   z
12/31/1999z1/2/2000cannot subtract .* from .*r   )r   r
   ra   r'   r   rR   r   r   )r,   r   r   r   r0   r1   r   r   r   r   test_pi_add_sub_td64_array_tick  s0   

"z9TestPeriodIndexArithmetic.test_pi_add_sub_td64_array_tickpi_freq)r   Wr   r   tdi_freqc                 C   s  |}|t jtjfvr|nt j}tddg|d}td| }||}t||}	|dkrf||	 }
|	d| |}t||}t
|
| |d |	 }
|d 	d| |}t||}t
|
| d S |dkrd	}tjt|d
 ||	  W d    n1 sw   Y  tjt|d
 |d |	  W d    d S 1 sw   Y  d S d}tjt|d
 ||	  W d    n1 sw   Y  tjt|d
 |d |	  W d    d S 1 sw   Y  d S )Nz1 hoursz2 hoursr#   z2018-03-07 17:16:40r   r   r   r   nCannot add/subtract timedelta-like from PeriodArray that is not an integer multiple of the PeriodArray's freq.r   z"Cannot add or subtract timedelta64)rU   r*   r'   r   rZ   r
   r   Z	to_periodr(   Zto_timestampr+   rR   r   r   r   )r,   r-   r   r   boxr/   r   Zdtir8   Ztd64objr1   r0   r   r   r   r   test_parr_sub_td64array5  s>   

"
"z1TestPeriodIndexArithmetic.test_parr_sub_td64arrayr   c           	   	   C   s  t tdtdg}|tjjdddtjjdddg}t tdtdgt}tt	 || }W d    n1 s=w   Y  t
|| tt	 || }W d    n1 s\w   Y  t
|| ttjjdd	tjjdd	g}d
}tjt|d! tt	 ||  W d    n1 sw   Y  W d    n1 sw   Y  tjt|d* tt	 ||  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N2015Q12016Q2r      r   r   Z2015Q2Z2015Q4r   z1Input cannot be converted to Period\(freq=Q-DEC\)r   )r   r   rU   offsets
QuarterEndrF   rG   r'   assert_produces_warningr   r   r)   r*   HourMinuterR   r   r   )	r,   r   r8   Zoffsr0   resZres2Z
unanchoredr   r   r   r   test_pi_add_offset_arrayf  s<   

"

"z2TestPeriodIndexArithmetic.test_pi_add_offset_arrayc              	      s  t tdtdg|tjjdddtjjdddg t  fddttD }|t}t	
t   }W d    n1 sEw   Y  t	|| |tj tjjd	d
g}d}tjt|d! t	
t |  W d    n1 s|w   Y  W d    n1 sw   Y  tjt|d* t	
t |  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r   c                    s   g | ]
}|  |  qS r   r   )ri   r   r!   r8   r   r   rl     s    zFTestPeriodIndexArithmetic.test_pi_sub_offset_array.<locals>.<listcomp>r   r   z6Input has different freq=-1M from Period\(freq=Q-DEC\)r   )r   r   rU   r   r   rY   lenrF   rG   r'   r   r   r   MonthEndDayrR   r   r   )r,   r   r0   r   Zanchoredr   r   r  r   test_pi_sub_offset_array  s6    



"z2TestPeriodIndexArithmetic.test_pi_sub_offset_arrayc                 C   sH   t dddd}|| }t dddd}t|| ||7 }t|| d S )N2000-01-01 09:00r   r`   r   z2000-01-01 10:00r   r'   r   r,   Zoner   r1   r0   r   r   r   test_pi_add_iadd_int  s   z.TestPeriodIndexArithmetic.test_pi_add_iadd_intc                 C   sH   t dddd}|| }t dddd}t|| ||8 }t|| dS )z
        PeriodIndex.__sub__ and __isub__ with several representations of
        the integer 1, e.g. int, np.int64, np.uint8, ...
        r  r   r`   r   z2000-01-01 08:00Nr  r	  r   r   r   test_pi_sub_isub_int  s   z.TestPeriodIndexArithmetic.test_pi_sub_isub_intfiverL   r   c                 C   s.   t ddd}|| }||  }t|| d S )Nr\   2   r5   r  )r,   r  r   r1   rd   r   r   r   test_pi_sub_intlike  s   
z-TestPeriodIndexArithmetic.test_pi_sub_intlikec                 C   sx   t dddd}td}|| }tdd t||D }t|| || }tdd t||D }t|| d S )Nr   r`   2Dr_   c                 S   s   g | ]\}}|| qS r   r   ri   rI   yr   r   r   rl         zQTestPeriodIndexArithmetic.test_pi_add_sub_int_array_freqn_gt1.<locals>.<listcomp>c                 S   s   g | ]\}}|| qS r   r   r  r   r   r   rl     r  )r   r)   rW   rU   rZ   zipr'   r   )r,   r8   arrr1   r0   r   r   r   #test_pi_add_sub_int_array_freqn_gt1  s   
z=TestPeriodIndexArithmetic.test_pi_add_sub_int_array_freqn_gt1c                 C   s   t dddd}|tjd }t dddd}t|| |tjd8 }t|| t dd	d
d}|tjd }t ddd
d}t|| |tjd8 }t|| d S )Nr   2024r   r#   rL   Z20092019r   2016-12r^   z2013-08z2016-07)r   rU   r   YearEndr'   r   r  r,   r   r1   r0   r   r   r   test_pi_sub_isub_offset  s   z1TestPeriodIndexArithmetic.test_pi_sub_isub_offset	transposeTFc                 C   st   t ddd}t|g}tdgdd}tj|||d}tj|||d}||j }t|| |j| }t|| d S )N2016-01rp   r#   z2016-03r  )r   r   r'   r(   r$   r+   )r,   r-   r  rc   r8   r0   r1   r   r   r   test_pi_add_offset_n_gt1  s   


z2TestPeriodIndexArithmetic.test_pi_add_offset_n_gt1c                 C   sh   t dgdd}t dgdd}t||}t||}|td }t|| td| }t|| d S )Nr  rp   r#   z2016-04Z3ME)r   r'   r(   r   r+   )r,   r-   r8   r0   r1   r   r   r   &test_pi_add_offset_n_gt1_not_divisible  s   z@TestPeriodIndexArithmetic.test_pi_add_offset_n_gt1_not_divisible
int_holderopc                 C   sN   t tdtdg}|ddg}|||}t tdtdg}t|| d S )Nr   r   r4   rM   Z2016Q1)r   r   r'   r   )r,   r!  r"  r8   r!   r1   r0   r   r   r   test_pi_add_intarray  s
   
z.TestPeriodIndexArithmetic.test_pi_add_intarrayc                 C   s   t tdtdg}|ddg}|| }t tdtdg}t|| d}tjt|d ||  W d    d S 1 s=w   Y  d S )Nr   r   r4   rM   Z2014Q1+bad operand type for unary -: 'PeriodArray'r   )r   r   r'   r   rR   r   r   )r,   r!  r8   r!   r1   r0   r   r   r   r   test_pi_sub_intarray  s   
"z.TestPeriodIndexArithmetic.test_pi_sub_intarrayc                 C   s   |}t dddd}t||}tg ddd}t||}|| }t|| || }t|| tg ddd}t||}|| }t|| dd	d
g}tjt|d ||  W d    d S 1 sgw   Y  d S )N
2014-05-01rf   r  r_   )
2014-05-04z
2014-05-06z
2014-05-08r#   )
2014-04-28z
2014-04-30z
2014-05-02r   r$  4cannot subtract PeriodArray from timedelta64\[[hD]\]r   )	r   r'   r(   r   r+   r   rR   r   r   )r,   
three_daysr-   r!   r   r0   r1   r   r   r   r   &test_parr_add_timedeltalike_minute_gt1!  s*   
"z@TestPeriodIndexArithmetic.test_parr_add_timedeltalike_minute_gt1freqstr)Z5nsZ5usZ5msZ5sZ5minZ5hZ5dc           
      C   s   |}t dd|d}|d }t||}t || d|d}t||}|| }t|| || }t|| t || d|d}t||}|| }t|| dddg}	tjt|	d ||  W d    d S 1 smw   Y  d S )	Nr&     r_   r   r   r$  r)  r   )r   r'   r(   r+   r   rR   r   r   )
r,   r*  r,  r-   r!   r   firstr0   r1   r   r   r   r   $test_parr_add_timedeltalike_tick_gt1B  s,   
"z>TestPeriodIndexArithmetic.test_parr_add_timedeltalike_tick_gt1c                 C   L   |}t dddd}t dddd}|| }t|| ||7 }t|| d S )Nr&  
2014-05-15r   r#   r'  z
2014-05-18r  r,   r*  r!   r   r0   r1   r   r   r   $test_pi_add_iadd_timedeltalike_dailyb     z>TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_dailyc                 C   L   |}t dddd}t dddd}|| }t|| ||8 }t|| d S )Nr&  r1  r   r#   r(  z
2014-05-12r  r2  r   r   r   $test_pi_sub_isub_timedeltalike_dailyn  r4  z>TestPeriodIndexArithmetic.test_pi_sub_isub_timedeltalike_dailyc                 C   s
  |}t dddd}t||}dddg}tjt|d ||  W d    n1 s,w   Y  tjt|d ||7 }W d    n1 sGw   Y  tjt|d ||  W d    n1 sbw   Y  tjt|d ||8 }W d    d S 1 s~w   Y  d S )	Nr&  r1  r   r#   r   z7Input has different freq(=.+)? from Period.*?\(freq=D\)r   r   r   r'   r(   r   rR   r   r   )r,   Z	not_dailyr-   r!   r   r   r   r   r   3test_parr_add_sub_timedeltalike_freq_mismatch_dailyz  s(   	



"zMTestPeriodIndexArithmetic.test_parr_add_sub_timedeltalike_freq_mismatch_dailyc                 C   r0  )N2014-01-01 10:002014-01-05 10:00r   r#   z2014-01-01 12:00z2014-01-05 12:00r  r,   Z	two_hoursr!   r   r0   r1   r   r   r   %test_pi_add_iadd_timedeltalike_hourly     z?TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_hourlyc                 C   s   |}t dddd}t||}dddg}tjt|d ||  W d    n1 s,w   Y  tjt|d ||7 }W d    d S 1 sHw   Y  d S )	Nr9  r:  r   r#   r   z7Input has different freq(=.+)? from Period.*?\(freq=h\)r   r   r7  )r,   r   r-   r!   r   r   r   r   r   2test_parr_add_timedeltalike_mismatched_freq_hourly  s   


"zLTestPeriodIndexArithmetic.test_parr_add_timedeltalike_mismatched_freq_hourlyc                 C   r5  )Nr9  r:  r   r#   z2014-01-01 08:00z2014-01-05 08:00r  r;  r   r   r   %test_pi_sub_isub_timedeltalike_hourly  r=  z?TestPeriodIndexArithmetic.test_pi_sub_isub_timedeltalike_hourlyc                 C   sX   t dddd}|tjd }t dddd}t|| |tjd7 }t|| d S )Nr   r  r   r#   rL   r  Z2029)r   rU   r   r  r'   r   r  r   r   r   "test_add_iadd_timedeltalike_annual  s   z<TestPeriodIndexArithmetic.test_add_iadd_timedeltalike_annualc                 C      |}t dddd}d}tjt|d ||  W d    n1 s!w   Y  tjt|d ||7 }W d    n1 s<w   Y  tjt|d ||  W d    n1 sWw   Y  tjt|d ||8 }W d    d S 1 ssw   Y  d S )Nr   r  r   r#   z;Input has different freq(=.+)? from Period.*?\(freq=Y-DEC\)r   r   rR   r   r   r,   r   r!   r   r   r   r   r   2test_pi_add_sub_timedeltalike_freq_mismatch_annual     



"zLTestPeriodIndexArithmetic.test_pi_add_sub_timedeltalike_freq_mismatch_annualc                 C   sX   t dddd}t dddd}|tjd }t|| |tjd7 }t|| d S )Nr   r  r^   r#   z2014-06z2017-05rL   )r   rU   r   r  r'   r   )r,   r   r0   r1   r   r   r    test_pi_add_iadd_timedeltalike_M  s   z:TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_Mc                 C   rA  )Nr   r  r^   r#   z7Input has different freq(=.+)? from Period.*?\(freq=M\)r   rB  rC  r   r   r   3test_pi_add_sub_timedeltalike_freq_mismatch_monthly  rE  zMTestPeriodIndexArithmetic.test_pi_add_sub_timedeltalike_freq_mismatch_monthlyc           	      C   s   t dddd}td}tdgd dd}tj|||d}tj|||d}|| }t|| || }t|| || }t|| d}tjt	|d	 ||  W d    d S 1 s\w   Y  d S )
N
1994-04-01r;   19Dr_   r   r#   r  r   r   )
r   r)   timedelta64r   r'   r(   r+   rR   r   r   )	r,   r-   r  r8   r!   r0   objr1   r   r   r   r   test_parr_add_sub_td64_nat  s   

"z4TestPeriodIndexArithmetic.test_parr_add_sub_td64_natr   r;   zm8[ns]c                 C   sf  t dddd}tdgd dd}t||}t||}|| }t|| || }t|| || }t|| d}tjt|d ||  W d    n1 sRw   Y  | }t	
d	d
|d	< t|d	 gdgd  dd}t||}|| }t|| || }t|| || }t|| tjt|d ||  W d    d S 1 sw   Y  d S )NrH  r;   rI  r_   r   r#   r   r   r   ns   )r   r   r'   r(   r+   rR   r   r   copyr)   rJ  )r,   r-   r!   r8   r0   rK  r1   r   r   r   r   !test_parr_add_sub_tdt64_nat_array  s6   

"z;TestPeriodIndexArithmetic.test_parr_add_sub_tdt64_nat_arrayc                 C   s2   t ddd}|j}|| }|| }t|| d S )N
2000-12-31rf   r5   )r   r*   r'   r   )r,   r8   r@   r1   r0   r   r   r   test_parr_add_sub_index+  s
   z1TestPeriodIndexArithmetic.test_parr_add_sub_indexc                 C   s   t dddd}|j}ttddtjddg}tt	 || }W d    n1 s-w   Y  t
g ddd	jt}t|| tt	 || }W d    n1 sXw   Y  t
d
gd dd	jt}t|| d S )NrQ  rf   r   r_   r   r   r   )z
2001-01-01z
2001-01-03z
2001-01-05r#   z
2000-12-30)r   r*   r)   r	   rU   r   r  r'   r   r   r   _datarF   rG   r+   )r,   r8   r@   r!   r1   r0   r   r   r   test_parr_add_sub_object_array4  s"   

z8TestPeriodIndexArithmetic.test_parr_add_sub_object_arrayc                 C   sD  t d}tddd}tj|gdd}t||}d}tjt|d ||  W d    n1 s0w   Y  tjt|d ||  W d    n1 sKw   Y  d}tjt|d |t	|g  W d    n1 skw   Y  tjt|d t	|g|  W d    n1 sw   Y  tjt|d |t|g  W d    n1 sw   Y  tjt|d t|g|  W d    n1 sw   Y  |tj
u rd}nd	}tjt|d |t
|g  W d    n1 sw   Y  |tj
u rd}nd
}tjt|d t
|g|  W d    d S 1 sw   Y  d S )Nr"   r^   r#   r   r   z$cannot add PeriodArray and Timestampr   z(cannot add PeriodArray and DatetimeArrayzAunsupported operand type\(s\) for \+: 'Period' and 'DatetimeArrayzBunsupported operand type\(s\) for \+: 'DatetimeArray' and 'Period')r   r   rU   rZ   r'   r(   rR   r   r   r   r   )r,   r-   tsrc   r  r   r   r   r    test_period_add_timestamp_raisesH  sH   



$z:TestPeriodIndexArithmetic.test_period_add_timestamp_raises)ArO   rP   rQ   r   r   r   r   rR   rS   rT   r   rU   r   r  r   r  ZWeekr   r   Zto_pydatetimeZto_datetime64rV   rS  r)   r*   r   r   r   r   rZ   r  r  r
  r  Zint64r  r  r  r  r   operatoraddr   Zraddr#  r%  r+  r/  r3  r6  r8  r<  r>  r?  r@  rD  rF  rG  rL  r   Z_from_sequencerP  rR  rT  rV  r   r   r   r   r   s  s    






	


/

	

	
!




#	r   c                   @   s   e Zd Zdd Zdd ZdS )TestPeriodSeriesArithmeticc                 C   s   t tdddtdddgdd}|jdksJ t tdddtd	ddgdd}t||}|tju r;|jdk s;J t||}|| }t	|| || }t	|| d S )
N
2015-01-01r   r#   
2015-01-02xxxr   	Period[D]
2015-01-04
2015-01-05)
r   r   r   r'   r(   rU   r   Zdtypesallr+   )r,   r*  r-   rn   r0   rK  r1   r   r   r   "test_parr_add_timedeltalike_scalarn  s"   
z=TestPeriodSeriesArithmetic.test_parr_add_timedeltalike_scalarc                 C   s   t tdddtdddgdd}|jdksJ tddd}|j}t d	| d
| gdtd}t|| | t|| d|  t tdddtdddgdd}|jdksVJ t d| d| gdtd}t|| | t|| d|  d S )NrZ  r   r#   r[  r\  r   r]  z
2015-01-10r;   rN  )r   r   rM   r_  r^  r4   r   )r   r   r   r$   rG   r'   r   )r,   rn   rc   r   r0   s2r   r   r   test_ops_series_period  s$   z1TestPeriodSeriesArithmetic.test_ops_series_periodN)rO   rP   rQ   ra  rc  r   r   r   r   rY  m  s    rY  c                   @   s   e Zd ZdZdd Zdd Zejdddgejd	d
d dd dd dd dd dd dd dd gdd Z	dd Z
dd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestPeriodIndexSeriesMethodsr   c                 C   sJ   t |}||}t|| t|}||}t||jd}t|| d S r   )r   r'   r+   r   r   r   )r,   ra   r   r0   r.   r1   rn   rd   r   r   r   r     s   z#TestPeriodIndexSeriesMethods._checkc                 C   s   t g dddd}t g dddd}| |dd | | |dd | | |d	 d
d | |tddd }|j}tjd| d| d	| d| gdd}t|| tddd| }tjd| d| d| d| gdd}t|| d S )Nrq   r^   r.   r   )rt   ru   rz   2011-06c                 S      | d S Nr   r   rH   r   r   r   rJ     r   z:TestPeriodIndexSeriesMethods.test_pi_ops.<locals>.<lambda>c                 S      d|  S rg  r   rH   r   r   r   rJ     r   r   c                 S      | d S rg  r   rH   r   r   r   rJ     r   rr   r#   r   r   rf   r   rM   r   )r   r   r   r$   rU   rZ   r'   r   )r,   r.   r0   r1   r   rd   r   r   r   test_pi_ops  s    

&&z(TestPeriodIndexSeriesMethods.test_pi_opsngstrg      ?r   c                 C   s   | | S rE   r   rK  rl  r   r   r   rJ     r   z%TestPeriodIndexSeriesMethods.<lambda>c                 C   s   ||  S rE   r   rn  r   r   r   rJ     r   c                 C   s   | | S rE   r   rn  r   r   r   rJ     r   c                 C   s   ||  S rE   r   rn  r   r   r   rJ     r   c                 C      t | |S rE   r)   rX  rn  r   r   r   rJ         c                 C      t || S rE   rp  rn  r   r   r   rJ     rq  c                 C   ro  rE   r)   subtractrn  r   r   r   rJ     rq  c                 C   rr  rE   rs  rn  r   r   r   rJ     rq  c                 C   sj   t g dddd}t||}dg d}tjt|d ||| W d    d S 1 s.w   Y  d S )Nrq   r^   r.   r   r   )zunsupported operand type\(s\)zcan only concatenatezmust be strzobject to str implicitlyr   )r   r'   r(   r   rR   r   r   )r,   rl  r   r-   r.   rK  r   r   r   r   test_parr_ops_errors  s   
	"z1TestPeriodIndexSeriesMethods.test_parr_ops_errorsc                 C   s  t g dddd}t g dddd}| |dd | | |dd | | |d	d | | |d
 dd | | |d
 dd | t g dddd}t g dddd}| |dd | | |dd | | |dd | | |d dd | | |d dd | d S )Nrr   rs   r   ru   r^   r.   r   )rt   ru   r   re  c                 S   rf  rg  r   rH   r   r   r   rJ     r   z>TestPeriodIndexSeriesMethods.test_pi_ops_nat.<locals>.<lambda>c                 S   rh  rg  r   rH   r   r   r   rJ     r   c                 S      t | dS rg  rp  rH   r   r   r   rJ     rq  r   c                 S   ri  rg  r   rH   r   r   r   rJ     r   c                 S   rw  rg  rs  rH   r   r   r   rJ     rq  rp   )z2011-072011-08r   z2011-10c                 S   rf  Nrf   r   rH   r   r   r   rJ     r   c                 S   rh  ry  r   rH   r   r   r   rJ     r   c                 S   rw  ry  rp  rH   r   r   r   rJ     rq  rf   c                 S   ri  ry  r   rH   r   r   r   rJ      r   c                 S   rw  ry  rs  rH   r   r   r   rJ     rq  r   r   )r,   r.   r0   r   r   r   test_pi_ops_nat  s,   



z,TestPeriodIndexSeriesMethods.test_pi_ops_natc                 C   s   t g dddd}dd }t g dddd}| ||| dd }t g d	ddd}| ||| d
d }t g dddd}| ||| dd }t g dddd}| ||| d S )Nrv  r^   r.   r   c                 S   s   | t g d S Nr   r)   r*   rH   r   r   r   rJ         zDTestPeriodIndexSeriesMethods.test_pi_ops_array_int.<locals>.<lambda>)rs   ru   r   rx  c                 S      t | t g dS )N)r4   rM   r   r   )r)   rX  r*   rH   r   r   r   rJ         )rz   rr   r   re  c                 S   s   | t g d S r|  r}  rH   r   r   r   rJ     r~  )2010-12r  r   r  c                 S   r  )N)rf   r   rf   r   )r)   rt  r*   rH   r   r   r   rJ     r  )z2010-10r  r   re  rz  r   r   r   r   test_pi_ops_array_int  s.   




z2TestPeriodIndexSeriesMethods.test_pi_ops_array_intc                 C   s   t g dddd}dd }t g dddd}| ||| dd }t g d	ddd}| ||| d
d }t g dddd}| ||| d S )Nr   z
2011-02-01z
2011-03-01z
2011-04-01r   r.   r   c                 S   s   | t j  S rE   rU   r   r  rH   r   r   r   rJ   %  s    zATestPeriodIndexSeriesMethods.test_pi_ops_offset.<locals>.<lambda>)z
2011-01-02z
2011-02-02z
2011-03-02z
2011-04-02c                 S   s   | t jd S rg  r  rH   r   r   r   rJ   -      )r   z
2011-02-03z
2011-03-03z
2011-04-03c                 S   s   | t jd S rg  r  rH   r   r   r   rJ   5  r  )z
2010-12-30z
2011-01-30z
2011-02-27z
2011-03-30rz  r   r   r   r   test_pi_ops_offset  s4   z/TestPeriodIndexSeriesMethods.test_pi_ops_offsetc              	   C   s   t g dddd}t|}d}||fD ]_}tjt|d |tjd  W d    n1 s/w   Y  tjt|d tjd|  W d    n1 sNw   Y  tjt|d |tjd  W d    n1 smw   Y  qd S )Nr  r   r.   r   zmCannot add/subtract timedelta-like from PeriodArray that is not an integer multiple of the PeriodArray's freqr   r   )r   r   rR   r   r   rU   r   r   )r,   r.   rn   r   rK  r   r   r   test_pi_offset_errors=  s(   z2TestPeriodIndexSeriesMethods.test_pi_offset_errorsc                 C   sT  t g dddd}|tddd }|j}tjd| d| d	| d
| gdd}t|| t|tddd}t|| tddd| }tjd| d| d| d| gdd}t|| ttddd|}t|| t	tj
tj
tj
tj
gdd}|tddd }t|| |j|jksJ tddd| }t|| |j|jksJ d S )Nrq   r^   r.   r   2012-01r#   ir   r      r`   r;   r   )r   r   r$   rU   rZ   r'   r   r)   rt  r
   nanr,   r.   r1   r   rd   r   r   r   test_pi_sub_periodS  s*   
&&z/TestPeriodIndexSeriesMethods.test_pi_sub_periodc                 C   sN   t g dddd}ttjgd dd}ttj| | t|tj | d S )Nrv  r^   r.   r   r4   r   )r   r
   rU   r   r'   r   )r,   r.   rd   r   r   r   test_pi_sub_pdnatq  s   
z.TestPeriodIndexSeriesMethods.test_pi_sub_pdnatc                 C   s   t g dddd}|tddd }|j}tjd| tjd| d	| gdd
}t|| tddd| }tjd| tjd| d| gdd
}t|| tt	j
t	j
t	j
t	j
gdd
}t|tddd | ttddd| | d S )Nr   r^   r.   r   r  r#   r  r  r  r   r   r`   r;   r   )r   r   r$   rU   rZ   r   r'   r   r
   r)   r  r  r   r   r   test_pi_sub_period_natz  s   
$$z3TestPeriodIndexSeriesMethods.test_pi_sub_period_natN)rO   rP   rQ   r   r   rk  rR   rS   rT   ru  r{  r  r  r  r  r  r  r   r   r   r   rd    s2    	rd  )/rW  Znumpyr)   rR   Zpandas._libs.tslibsr   r   r   r   Zpandas.errorsr   ZpandasrU   r   r   r	   r
   r   Zpandas._testingZ_testingr'   Zpandas.corer   Zpandas.core.arraysr   Zpandas.tests.arithmetic.commonr   r   r   r   Z	YearBeginZ
MonthBeginr   Z_common_mismatchZfixtureZto_pytimedeltarJ  r   r   r    r[   r   r   r   r   rY  rd  r   r   r   r   <module>   s`   





  l(f+     4