U
    sVc                     @   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 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_boxc                   @   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ddddgeddeddeeddddgg	dd Zejdeejdd  gd!d" ZdS )#TestPeriodArrayLikeComparisonsother2017Dfreqc                 C   s^   t dddgdd}t||}t||d}tdddg}t||}||k}t|| d S )Nr   Z2018r   r   TFr   tmbox_expectedr   nparrayassert_equal)selfr   box_with_arrayidxxboxexpectedresult r#   G/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arithmetic/test_period.pytest_eq_scalar+   s    z-TestPeriodArrayLikeComparisons.test_eq_scalarc                 C   sl   t ddd}t| d }t||}t||d}||k}tddddg}t||}t|| d S )N2000   periodsr   TF)r   r   r   Zto_numpyr   r   r   r   )r   r   pir   r    r"   r!   r#   r#   r$   test_compare_zerodim9   s    z3TestPeriodArrayLikeComparisons.test_compare_zerodimscalarZfooz
2021-01-01r'   days	   g      #@i  FNc                 C   s(   t ddd}t||}t||| d S Nr&   r'   r(   r   r   r   r   )r   r   r,   r*   parrr#   r#   r$   test_compare_invalid_scalarG   s    z:TestPeriodArrayLikeComparisons.test_compare_invalid_scalarr&   r(   Z1Di  i  i  i  c                 C   s(   t ddd}t||}t||| d S r0   r1   )r   r   r   r*   r2   r#   r#   r$   test_compare_invalid_listlike[   s    z<TestPeriodArrayLikeComparisons.test_compare_invalid_listlike	other_boxc                 C   s
   |  tS N)astypeobjectxr#   r#   r$   <lambda>o       z'TestPeriodArrayLikeComparisons.<lambda>c           	      C   s  t ddd}t||}||}t||d}tdddddg}t||}||k}t|| ||k}t|| ||k}t|| ||k}t||  ||k }t||  ||k}t||  ||d d d }tdddddg}t||}||k}t|| tdddddg}t||}||k}t|| tdddddg}t||}||k}t|| tdddddg}t||}||k}t|| tdddddg}t||}||k }t|| tdddddg}t||}||k}t|| d S )Nr&      r(   TF)r   r   r   r   r   r   r   )	r   r   r5   r*   r2   r   r    r!   r"   r#   r#   r$   test_compare_object_dtypeo   sV    z8TestPeriodArrayLikeComparisons.test_compare_object_dtype)__name__
__module____qualname__pytestmarkparametrizer   r%   r+   r   r	   r3   pd
date_ranger   Ztimedelta_ranger   aranger7   Zfloat64listranger8   Indexr4   r?   r#   r#   r#   r$   r   &   s@   





r   c                   @   s   e Zd Zdd Zdd Zejddddgd	d
 Zejddddgdd Z	ejddddgdd Z
ejddddgdd Zejddddg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r)   r   
      )r   valuesr   assert_numpy_array_equalZreshaper   r   )r   r   perr"   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-01rQ   r   rP      c                    s   g | ]}| kqS r#   r#   .0r:   valr#   r$   
<listcomp>   s     zKTestPeriodIndexComparisons.test_parr_cmp_period_scalar2.<locals>.<listcomp>Tr=   c                    s   g | ]}| kqS r#   r#   rY   r[   r#   r$   r]      s     )r   r   r   r   r   )r   r   r*   r!   serr    r"   r#   r[   r$   test_parr_cmp_period_scalar2   s    z7TestPeriodIndexComparisons.test_parr_cmp_period_scalar2r   rO   2M3Mc                 C   s  t ddddg|d}t||}td|d}t||d}tddddg}t||}t||k| t||k| tddddg}t||}t||k| t||k| tddddg}t||}t||k| t||k | tddddg}t||}t||k | t||k| tddddg}t||}t||k| t||k| tddddg}t||}t||k| t||k| d S )N2011-012011-022011-032011-04r   TF)r   r   r   r   r   r   r   r   )r   r   r   baserU   r    rV   r#   r#   r$   test_parr_cmp_period_scalar   s8    z6TestPeriodIndexComparisons.test_parr_cmp_period_scalarc                 C   sX  t ddddg|d}t||}t ddddg|d}t||d}tddddg}t||}t||k| tddddg}t||}t||k| tddddg}t||}t||k| tddddg}t||}t||k | tddddg}t||}t||k| tddddg}t||}t||k| d S )	Nrb   rc   rd   re   r   2011-05TFr   )r   r   r   rf   r   r    rV   r#   r#   r$   test_parr_cmp_pi   s,    z+TestPeriodIndexComparisons.test_parr_cmp_pic              	   C   s  t ddddg|d}t||}d| d}tjt|d |td	d
dk W 5 Q R X tjt|d td	d
d|k W 5 Q R X t d	dddgd
d}d}|tjtj	fkr|n|}tjt|d ||k W 5 Q R X d| d}tjt|d |td	ddk W 5 Q R X tjt|d td	dd|k W 5 Q R X t d	dddgdd}d}|tjtj	fkr`|n|}tjt|d ||k W 5 Q R X d S )Nrb   rc   rd   re   r   )Invalid comparison between dtype=period\[z\] and Periodmatch2011A201220132014z@Invalid comparison between dtype=period\[A-DEC\] and PeriodArray4Mz=Invalid comparison between dtype=period\[4M\] and PeriodArray)
r   r   r   rC   raises	TypeErrorr   to_arrayrF   r   )r   r   r   rf   msgr   Zrev_msgZidx_msgr#   r#   r$    test_parr_cmp_pi_mismatched_freq  s,    z;TestPeriodIndexComparisons.test_parr_cmp_pi_mismatched_freqc                 C   s  t ddddg|d}|d }||k}tddddg}t|| ||k }t|| |tjk}tddddg}t|| tj|k}t|| |tjk}tddddg}t|| tj|k}t|| t ddd	dg|d}||k }tddddg}t|| ||k}tddddg}t|| ||k}tddddg}t|| ||k}tddddg}t|| ||k}tddddg}t|| d S )
Nrb   rc   NaTrh   r      FTre   )r   r   r   r   rT   rF   rx   )r   r   idx1rU   r"   rV   Zidx2r#   r#   r$   test_pi_cmp_nat<  sB    



z*TestPeriodIndexComparisons.test_pi_cmp_natc              	   C   s   t ddddg|d}t ddddgdd}d| d	}tjt|d
 ||k W 5 Q R X ||k}tjddddgtd}t|| d S )Nrb   rc   rx   rh   r   re   rr   rj   z\] and PeriodArrayrk   Fdtype)	r   rC   rs   rt   r   r   boolr   rT   )r   r   rz   Zdiffrv   r"   r!   r#   r#   r$   &test_pi_cmp_nat_mismatched_freq_raisesh  s    zATestPeriodIndexComparisons.test_pi_cmp_nat_mismatched_freq_raisesr}   Nc                 C   s2  t tdtjtdg}t tjtjtdg}|d k	rJ||}||}||k}tdddg}t|| ||k}tdddg}t|| tdddg}t|tjk| ttj|k| tdddg}t|tjk| ttj|k| tdddg}t|tjk | ttj|k| d S )N
2011-01-01
2011-01-03FT)	r   r   rF   rx   r7   r   r   r   rT   )r   r}   leftrightr"   r!   r#   r#   r$   test_comp_natv  s(    

z(TestPeriodIndexComparisons.test_comp_nat)r@   rA   rB   rW   r_   rC   rD   rE   rg   ri   rw   r{   r   r8   r   r#   r#   r#   r$   rL      s   
%
"
"
+
rL   c                   @   s   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 ddddg}t||k| t ddddg}t||k| t ddddg}t||k| t ddddg}t||k | t ddddg}t||k| t ddddg}t||k| d S )Nrm   rn   r   rc   rO   rp   re   ro   rb   rh   FT)r   r   r   assert_series_equal)r   rf   r^   rV   r#   r#   r$   (test_cmp_series_period_series_mixed_freq  s4    



	



	zDTestPeriodSeriesComparisons.test_cmp_series_period_series_mixed_freqN)r@   rA   rB   r   r#   r#   r#   r$   r     s   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&tt|| t	|}||}t	||j
d}t|| d S Nname)r   
isinstancerF   rK   r   ZndarrayAssertionErrorr   r   r   r   r   )r   rS   funcr!   r   r"   srV   r#   r#   r$   _check  s    z1TestPeriodIndexSeriesComparisonConsistency._checkc                    sP  t ddddgddd}|d   fd	d
}tjddddgtjd}| |||  fdd
}| |||  fdd
}tjddddgtjd}| |||  fdd
}| |||  fdd
}tjddddgtjd}| |||  fdd
}tjddddgtjd}| |||  fdd
}tjddddgtjd}| ||| d S )Nrb   rc   rd   re   rO   r   r   r   rR   c                    s   |  kS r6   r#   r9   rU   r#   r$   r;     r<   zPTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period.<locals>.<lambda>FTr|   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                    s   |  kS r6   r#   r9   r   r#   r$   r;     r<   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                    s   |  kS r6   r#   r9   r   r#   r$   r;     r<   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   r   r   r   Zbool_r   r   r   frV   r#   r   r$   test_pi_comp_period  s2    
  z>TestPeriodIndexSeriesComparisonConsistency.test_pi_comp_periodc                    s  t ddddgddd}|d   fd	d
}tjddddgtjd}| |||  fdd
}| ||| dd
 }tjddddgtjd}| ||| dd
 }| |||  fdd
}tjddddgtjd}| |||  fdd
}| ||| dd
 }tjddddgtjd}| ||| dd
 }| |||  fdd
}tjddddgtjd}| |||  fdd
}tjddddgtjd}| ||| dd
 }tjddddgtjd}| ||| dd
 }tjddddgtjd}| ||| d S )Nrb   rx   rd   re   rO   r   r   rR   c                    s   |  kS r6   r#   r9   r   r#   r$   r;     r<   zTTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period_nat.<locals>.<lambda>FTr|   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                 S   s
   | t jkS r6   rF   rx   r9   r#   r#   r$   r;     r<   c                 S   s
   t j| kS r6   r   r9   r#   r#   r$   r;     r<   c                    s   |  kS r6   r#   r9   r   r#   r$   r;     r<   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                 S   s
   | t jkS r6   r   r9   r#   r#   r$   r;     r<   c                 S   s
   t j| kS r6   r   r9   r#   r#   r$   r;   
  r<   c                    s    | kS r6   r#   r9   r   r#   r$   r;     r<   c                    s   |  k S r6   r#   r9   r   r#   r$   r;     r<   c                 S   s
   | t jkS r6   r   r9   r#   r#   r$   r;     r<   c                 S   s
   t j| kS r6   r   r9   r#   r#   r$   r;     r<   r   r   r#   r   r$   test_pi_comp_period_nat  sL    
  zBTestPeriodIndexSeriesComparisonConsistency.test_pi_comp_period_natN)r@   rA   rB   __doc__r   r   r   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )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sJt|d
 jd	ks\t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st|d
 jd	ks.tt tjd| d| gtdtjd| d| gtdd}t	
|| | t	
|| d|  d S )Nz2015-01rO   r   z2015-022014-01z2014-02)rn   Brn   z	Period[M]r   z2015-03rR   ry   r|         r>   z2015-05z2015-06r'      )rF   	DataFramer   r}   r   r   r   r   r8   r   Zassert_frame_equal)r   ZdfpoffrV   Zdf2r#   r#   r$   test_ops_frame_period#  s<    z/TestPeriodFrameArithmetic.test_ops_frame_periodN)r@   rA   rB   r   r#   r#   r#   r$   r   "  s   r   c                   @   s,  e Zd Zdd Zdd Zdd Zdd Zej	d	d
dddgdd Z
ej	d	d
dddg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d d!d"gg	d#d$ Zd%d& Zd'd( Zej	d)d*d+d,dgej	d-ddgd.d/ Zej	d0ejejgd1d2 Zej	d0ejejgd3d4 Zd5d6 Z d7d8 Z!ej	d9d:ejd:ej"d;gd<d= Z#d>d? Z$d@dA Z%ej	dBdCdDgdEdF Z&dGdH Z'ej	dIejejgej	dJe(j)e*j+gdKdL Z,ej	dIejejgdMdN Z-dOdP Z.ej	dQdRdSdTdUdVdWdXgdYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9ej	dBdCdDgdodp Z:ej	dejdqgdr dsd;e;<dqgdr gdtdu Z=dvdw Z>dxdy Z?dS )zTestPeriodIndexArithmeticc              	   C   st   t dddd}t dddd}t||}d}tjt|d ||  W 5 Q R X tjt|d ||7 }W 5 Q R X d S )N1/1/2000r   r=   r   r)   1/6/2000z/unsupported operand type\(s\) for \+: .* and .*rk   )r   r   r   rC   rs   rt   )r   r   rngr   rv   r#   r#   r$   test_parr_add_iadd_parr_raisesT  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   r=   r   r   )r   r   rF   rK   r   assert_index_equal)r   r   r   r   r!   r"   r#   r#   r$   test_pi_sub_isub_pie  s    z-TestPeriodIndexArithmetic.test_pi_sub_isub_pic                 C   s   t dddd}|dd  dtj}|dd  |dd  sBt|| }|j}ttjd| d| d| d| g}t	|| d S )Nr   r   r=   r   ry   r   )
r   insertrF   rx   equalsr   r   rK   r   r   )r   r   r   r"   r   r!   r#   r#   r$   test_pi_sub_pi_with_natu  s    &z1TestPeriodIndexArithmetic.test_pi_sub_pi_with_natc              	   C   s^   t dddd}t dddd}t||}t||}d}tjt|d ||  W 5 Q R X d S )	Nr   r   r=   r   r   Hz;Input has different freq=[HD] from PeriodArray\(freq=[DH]\)rk   )r   r   r   rC   rs   r   )r   r   Zbox_with_array2r   r   rv   r#   r#   r$    test_parr_sub_pi_mismatched_freq  s    z:TestPeriodIndexArithmetic.test_parr_sub_pi_mismatched_freqnry   rR   rX   r'   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   rf   r   r   )r   Ztick_classesr   p1_dp2_dp1p2r!   r#   r#   r$   test_sub_n_gt_1_ticks  s     z/TestPeriodIndexArithmetic.test_sub_n_gt_1_tickszoffset, kwd_namemonthstartingMonthNweekdayc                 C   s   |d k	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 )NrX   r   r   	normalizeFr   )r   rf   r   r   )r   offsetZkwd_namer   kwdsr   r   r   r   r   r"   r!   r#   r#   r$   test_sub_n_gt_1_offsets  s     z1TestPeriodIndexArithmetic.test_sub_n_gt_1_offsetsr   
2016-01-01r   rP   zEurope/Brussels)r)   tzSz
Asia/TokyogQ	@g       @g      @g      @c              	   C   s   t dddd}t||}ddddd	g}t||| tjt|d
 ||  W 5 Q R X tjt|d
 ||  W 5 Q R X tjt|d
 ||  W 5 Q R X tjt|d
 ||  W 5 Q R X d S )Nr   r   rX   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 .*rk   )r   r   r   joinr   rC   rs   rt   )r   r   r   r   rv   r#   r#   r$   test_parr_add_sub_invalid  s$    z3TestPeriodIndexArithmetic.test_parr_add_sub_invalidc              	   C   s   t dddd}tdddg}|j}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d}tjt|d ||  W 5 Q R X d S )	Nr   QrX   r   -1 DayzCCannot add or subtract timedelta64\[ns\] dtype from period\[Q-DEC\]rk   z9cannot subtract period\[Q-DEC\]-dtype from TimedeltaArray)r   r
   rS   rC   rs   rt   )r   r   tditdarrrv   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dddg}|j}t dddd}|| }t|| || }t|| || }t|| || }t|| t dddd}|| }t|| || }t|| d}tjt|d	 ||  W 5 Q R X tjt|d	 ||  W 5 Q R X d S )
Nr   Z90DrX   r   r   z
12/31/1999z1/2/2000cannot subtract .* from .*rk   )r   r
   rS   r   r   rC   rs   rt   )r   r   r   r   r!   r"   rv   r#   r#   r$   test_pi_add_sub_td64_array_tick  s,    z9TestPeriodIndexArithmetic.test_pi_add_sub_td64_array_tickpi_freqr   Wr   tdi_freqc              	   C   sr  |}|t jtjfkr|nt j}tddg|d}td| }||}t||}	|dkr||	 }
|	d| |}t||}t
|
| |d |	 }
|d 	d| |}t||}t
|
| n|dkr"d	}tjt|d
 ||	  W 5 Q R X tjt|d
 |d |	  W 5 Q R X nLd}tjt|d
 ||	  W 5 Q R X tjt|d
 |d |	  W 5 Q R X 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.rk   z"Cannot add or subtract timedelta64)rF   r   r   ru   rK   r
   r   Z	to_periodr   Zto_timestampr   rC   rs   r   rt   )r   r   r   r   boxr    r   Zdtir*   Ztd64objr"   r!   rv   r#   r#   r$   test_parr_sub_td64array  s6    

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 || }W 5 Q R X t|| tt || }W 5 Q R X t|| t	
tjjdd	tjjdd	g}d
}tjt|d$ tt ||  W 5 Q R X W 5 Q R X tjt|d$ tt ||  W 5 Q R X W 5 Q R X d S )N2015Q12016Q2ry      r   r   Z2015Q2Z2015Q4r   z1Input cannot be converted to Period\(freq=Q-DEC\)rk   )r   r   rF   offsets
QuarterEndr   assert_produces_warningr   r   r   r   HourZMinuterC   rs   r   )	r   r   r*   Zoffsr!   resZres2Z
unanchoredrv   r#   r#   r$   test_pi_add_offset_array@  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	   }W 5 Q R X t
|| |tj tjjd	d
g}d}tjt|d$ tt	 |  W 5 Q R X W 5 Q R X tjt|d$ tt	 |  W 5 Q R X W 5 Q R X d S )Nr   r   ry   r   r   r   c                    s   g | ]}|  |  qS r#   r#   )rZ   r   r   r*   r#   r$   r]   j  s     zFTestPeriodIndexArithmetic.test_pi_sub_offset_array.<locals>.<listcomp>rR   r   z6Input has different freq=-1M from Period\(freq=Q-DEC\)rk   )r   r   rF   r   r   rJ   lenr   r   r   r   MonthEndDayrC   rs   r   )r   r   r!   r   Zanchoredrv   r#   r   r$   test_pi_sub_offset_array_  s$     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   rQ   r   z2000-01-01 10:00r   r   r   r   Zoner   r"   r!   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   rQ   r   z2000-01-01 08:00Nr   r   r#   r#   r$   test_pi_sub_isub_int  s    z.TestPeriodIndexArithmetic.test_pi_sub_isub_intfiver=   r|   c                 C   s.   t ddd}|| }||  }t|| d S )NrM   2   r(   r   )r   r   r   r"   rV   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   rQ   2DrP   c                 S   s   g | ]\}}|| qS r#   r#   rZ   r:   yr#   r#   r$   r]     s     zQTestPeriodIndexArithmetic.test_pi_add_sub_int_array_freqn_gt1.<locals>.<listcomp>c                 S   s   g | ]\}}|| qS r#   r#   r   r#   r#   r$   r]     s     )r   r   rH   rF   rK   zipr   r   )r   r*   Zarrr"   r!   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 )Nrq   2024rn   r   r=   Z20092019r   2016-12rO   z2013-08z2016-07)r   rF   r   YearEndr   r   r   r   r   r"   r!   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-01r`   r   z2016-03r   )r   r   r   r   r   r   )r   r   r   rU   r*   r!   r"   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   r`   r   z2016-04ra   )r   r   r   r   r   )r   r   r*   r!   r"   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   rx   r'   r>   Z2016Q1)r   r   r   r   )r   r   r   r*   r   r"   r!   r#   r#   r$   test_pi_add_intarray  s
    
z.TestPeriodIndexArithmetic.test_pi_add_intarrayc              	   C   sr   t tdtdg}|ddg}|| }t tdtdg}t|| d}tjt|d ||  W 5 Q R X d S )Nr   rx   r'   r>   Z2014Q1+bad operand type for unary -: 'PeriodArray'rk   )r   r   r   r   rC   rs   rt   )r   r   r*   r   r"   r!   rv   r#   r#   r$   test_pi_sub_intarray  s    z.TestPeriodIndexArithmetic.test_pi_sub_intarrayc              	   C   s   |}t dddd}t||}tdddgdd}t||}|| }t|| || }t|| td	d
dgdd}t||}|| }t|| dddg}tjt|d ||  W 5 Q R X d S )N
2014-05-01rX   r   rP   
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]\]rk   )	r   r   r   r   r   r   rC   rs   rt   )r   
three_daysr   r   r   r!   r"   rv   r#   r#   r$   &test_parr_add_timedeltalike_minute_gt1  s(    z@TestPeriodIndexArithmetic.test_parr_add_timedeltalike_minute_gt1freqstrZ5nsZ5usZ5msZ5sZ5TZ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 5 Q R X d S )	Nr     rP   r   r   r  r  rk   )r   r   r   r   r   rC   rs   rt   )
r   r  r	  r   r   r   firstr!   r"   rv   r#   r#   r$   $test_parr_add_timedeltalike_tick_gt1  s*    z>TestPeriodIndexArithmetic.test_parr_add_timedeltalike_tick_gt1c                 C   sL   |}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   r!   r"   r#   r#   r$   $test_pi_add_iadd_timedeltalike_daily;  s    z>TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_dailyc                 C   sL   |}t dddd}t dddd}|| }t|| ||8 }t|| d S )Nr  r  r   r   r  z
2014-05-12r   r  r#   r#   r$   $test_pi_sub_isub_timedeltalike_dailyG  s    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 5 Q R X tjt|d ||7 }W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||8 }W 5 Q R X d S )	Nr  r  r   r   r   z7Input has different freq(=.+)? from Period.*?\(freq=D\)r   rk   r   r   r   r   rC   rs   r   )r   Z	not_dailyr   r   r   rv   r#   r#   r$   3test_parr_add_sub_timedeltalike_freq_mismatch_dailyS  s     	zMTestPeriodIndexArithmetic.test_parr_add_sub_timedeltalike_freq_mismatch_dailyc                 C   sL   |}t dddd}t dddd}|| }t|| ||7 }t|| d S )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   r!   r"   r#   r#   r$   %test_pi_add_iadd_timedeltalike_hourlyl  s    z?TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_hourlyc              	   C   st   |}t dddd}t||}dddg}tjt|d ||  W 5 Q R X tjt|d ||7 }W 5 Q R X d S )	Nr  r  r   r   r   z7Input has different freq(=.+)? from Period.*?\(freq=H\)r   rk   r  )r   Z
not_hourlyr   r   r   rv   r#   r#   r$   2test_parr_add_timedeltalike_mismatched_freq_hourlyw  s    
zLTestPeriodIndexArithmetic.test_parr_add_timedeltalike_mismatched_freq_hourlyc                 C   sL   |}t dddd}t dddd}|| }t|| ||8 }t|| d S )Nr  r  r   r   z2014-01-01 08:00z2014-01-05 08:00r   r  r#   r#   r$   %test_pi_sub_isub_timedeltalike_hourly  s    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 )Nrq   r   rn   r   r=   r   Z2029)r   rF   r   r   r   r   r   r#   r#   r$   "test_add_iadd_timedeltalike_annual  s    z<TestPeriodIndexArithmetic.test_add_iadd_timedeltalike_annualc              	   C   s   |}t dddd}d}tjt|d ||  W 5 Q R X tjt|d ||7 }W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||8 }W 5 Q R X d S )Nrq   r   rn   r   z;Input has different freq(=.+)? from Period.*?\(freq=A-DEC\)rk   r   rC   rs   r   r   Zmismatched_freqr   r   rv   r#   r#   r$   2test_pi_add_sub_timedeltalike_freq_mismatch_annual  s    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   rO   r   z2014-06z2017-05r=   )r   rF   r   r   r   r   )r   r   r!   r"   r#   r#   r$    test_pi_add_iadd_timedeltalike_M  s    z:TestPeriodIndexArithmetic.test_pi_add_iadd_timedeltalike_Mc              	   C   s   |}t dddd}d}tjt|d ||  W 5 Q R X tjt|d ||7 }W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||8 }W 5 Q R X d S )Nr   r   rO   r   z7Input has different freq(=.+)? from Period.*?\(freq=M\)rk   r  r  r#   r#   r$   3test_pi_add_sub_timedeltalike_freq_mismatch_monthly  s    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 5 Q R X d S )
N
1994-04-01r/   19DrP   rx   r   r   r   rk   )
r   r   timedelta64r   r   r   r   rC   rs   rt   )	r   r   r   r*   r   r!   objr"   rv   r#   r#   r$   test_parr_add_sub_td64_nat  s    
z4TestPeriodIndexArithmetic.test_parr_add_sub_td64_natrx   r/   zm8[ns]c              	   C   s<  t dddd}tdgd dd}t||}t||}|| }t|| || }t|| || }t|| d}tjt|d ||  W 5 Q R X | }t	
d	d
|d	< t|d	 gdgd  dd}t||}|| }t|| || }t|| || }t|| tjt|d ||  W 5 Q R X d S )Nr  r/   r   rP   rx   r   r   rk   r   ns   )r   r   r   r   r   rC   rs   rt   copyr   r!  )r   r   r   r*   r!   r"  r"   rv   r#   r#   r$   !test_parr_add_sub_tdt64_nat_array  s2    z;TestPeriodIndexArithmetic.test_parr_add_sub_tdt64_nat_arrayc                 C   s2   t ddd}|j}|| }|| }t|| d S )N
2000-12-31rX   r(   )r   r   r   r   )r   r*   r2   r"   r!   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 5 Q R X t
dd	d
gddj}t|| tt	 || }W 5 Q R X t
dgd ddj}t|| d S )Nr(  rX   r   rP   ry   r-   rR   z
2001-01-01z
2001-01-03z
2001-01-05r   z
2000-12-30)r   r   r   r	   rF   r   r   r   r   r   r   r   )r   r*   r2   r   r"   r!   r#   r#   r$   test_parr_add_sub_object_array  s     z8TestPeriodIndexArithmetic.test_parr_add_sub_object_array)@r@   rA   rB   r   r   r   r   rC   rD   rE   r   rF   r   r   r   r   ZWeekr   r   Zto_pydatetimeZto_datetime64rG   _datar   r   r   r   r   r   rK   r   r   r   r   Zint64r   r   r   r   r   operatoraddr   Zraddr   r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r   Z_from_sequencer'  r)  r*  r#   r#   r#   r$   r   M  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.tt tdddtd	ddgdd}t||}|tjkrv|jdk	 svt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   r   rF   r   Zdtypesallr   )r   r  r   r^   r!   r"  r"   r#   r#   r$   "test_parr_add_timedeltalike_scalar#  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.t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stt d| d| gdtd}t|| | t|| d|  d S )Nr/  r   r   r0  r1  r   r2  z
2015-01-10r/   r%  )r   r}   r>   r4  r3  r'   rR   )r   r   r}   r   r   r8   r   r   )r   r^   rU   r   r!   s2r#   r#   r$   test_ops_series_period<  s$    z1TestPeriodSeriesArithmetic.test_ops_series_periodN)r@   rA   rB   r6  r8  r#   r#   r#   r$   r.  "  s   r.  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   rS   r   r!   r   r"   r^   rV   r#   r#   r$   r   Y  s    z#TestPeriodIndexSeriesMethods._checkc                 C   s   t ddddgddd}t dddd	g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 )Nrb   rc   rd   re   rO   r   r   rh   2011-06c                 S   s   | d S NrR   r#   r9   r#   r#   r$   r;   m  r<   z:TestPeriodIndexSeriesMethods.test_pi_ops.<locals>.<lambda>c                 S   s   d|  S r;  r#   r9   r#   r#   r$   r;   n  r<   rR   c                 S   s   | d S r;  r#   r9   r#   r#   r$   r;   p  r<   r   r   ry   rX   r   r>   r   )r   r   r   r   rF   rK   r   r   )r   r   r!   r"   r   rV   r#   r#   r$   test_pi_opsd  s(    
  
  &&z(TestPeriodIndexSeriesMethods.test_pi_opsngstrg      ?r   c                 C   s   | | S r6   r#   r"  r>  r#   r#   r$   r;     r<   z%TestPeriodIndexSeriesMethods.<lambda>c                 C   s   ||  S r6   r#   r@  r#   r#   r$   r;     r<   c                 C   s   | | S r6   r#   r@  r#   r#   r$   r;     r<   c                 C   s   ||  S r6   r#   r@  r#   r#   r$   r;     r<   c                 C   s   t | |S r6   r   r-  r@  r#   r#   r$   r;     r<   c                 C   s   t || S r6   rA  r@  r#   r#   r$   r;     r<   c                 C   s   t | |S r6   r   subtractr@  r#   r#   r$   r;     r<   c                 C   s   t || S r6   rB  r@  r#   r#   r$   r;     r<   c              	   C   s\   t ddddgddd}t||}dd	d
ddg}tjt|d ||| W 5 Q R X d S )Nrb   rc   rd   re   rO   r   r   r   zunsupported operand type\(s\)zcan only concatenatezmust be strzobject to str implicitlyrk   )r   r   r   r   rC   rs   rt   )r   r>  r   r   r   r"  rv   r#   r#   r$   test_parr_ops_errors{  s    
  	z1TestPeriodIndexSeriesMethods.test_parr_ops_errorsc                 C   s   t ddddgddd}t dddd	gddd}| |d
d | | |dd | | |dd | | |d dd | | |d dd | t ddddgddd}t ddddgddd}| |dd | | |dd | | |dd | | |d dd | | |d dd | d S )Nrb   rc   rx   re   rO   r   r   rd   r:  c                 S   s   | d S r;  r#   r9   r#   r#   r$   r;     r<   z>TestPeriodIndexSeriesMethods.test_pi_ops_nat.<locals>.<lambda>c                 S   s   d|  S r;  r#   r9   r#   r#   r$   r;     r<   c                 S   s   t | dS r;  rA  r9   r#   r#   r$   r;     r<   rR   c                 S   s   | d S r;  r#   r9   r#   r#   r$   r;     r<   c                 S   s   t | dS r;  rB  r9   r#   r#   r$   r;     r<   r`   z2011-072011-08z2011-10c                 S   s   | d S NrX   r#   r9   r#   r#   r$   r;     r<   c                 S   s   d|  S rF  r#   r9   r#   r#   r$   r;     r<   c                 S   s   t | dS rF  rA  r9   r#   r#   r$   r;     r<   rX   c                 S   s   | d S rF  r#   r9   r#   r#   r$   r;     r<   c                 S   s   t | dS rF  rB  r9   r#   r#   r$   r;     r<   r   r   )r   r   r!   r#   r#   r$   test_pi_ops_nat  s<    
  
  
  
  z,TestPeriodIndexSeriesMethods.test_pi_ops_natc                 C   s   t ddddgddd}dd	 }t dddd
gddd}| ||| dd	 }t ddddgddd}| ||| dd	 }t ddddgddd}| ||| dd	 }t ddddgddd}| ||| d S )Nrb   rc   rx   re   rO   r   r   c                 S   s   | t ddddg S Nry   rR   rX   r'   r   r   r9   r#   r#   r$   r;     r<   zDTestPeriodIndexSeriesMethods.test_pi_ops_array_int.<locals>.<lambda>rE  c              	   S   s   t | t ddddgS )Nr'   r>   ry   rR   )r   r-  r   r9   r#   r#   r$   r;     r<   rh   r:  c                 S   s   | t ddddg S rI  rJ  r9   r#   r#   r$   r;     r<   z2010-12c              	   S   s   t | t ddddgS )NrX   rR   r   )r   rC  r   r9   r#   r#   r$   r;     r<   z2010-10rG  r   r#   r#   r$   test_pi_ops_array_int  sB    
  
  
  
  
  z2TestPeriodIndexSeriesMethods.test_pi_ops_array_intc                 C   s   t ddddgddd}dd	 }t d
dddgddd}| ||| dd	 }t ddddgddd}| ||| dd	 }t ddddgddd}| ||| d S )Nr   
2011-02-01
2011-03-01
2011-04-01r   r   r   c                 S   s   | t j  S r6   rF   r   r   r9   r#   r#   r$   r;     r<   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 r;  rO  r9   r#   r#   r$   r;     r<   r   z
2011-02-03z
2011-03-03z
2011-04-03c                 S   s   | t jd S r;  rO  r9   r#   r#   r$   r;     r<   z
2010-12-30z
2011-01-30z
2011-02-27z
2011-03-30rG  r   r#   r#   r$   test_pi_ops_offset  s4    



z/TestPeriodIndexSeriesMethods.test_pi_ops_offsetc              
   C   s   t ddddgddd}t|}d}||fD ]}tjt|d	 |tjd
  W 5 Q R X tjt|d	 tjd
|  W 5 Q R X tjt|d	 |tjd
  W 5 Q R X q*d S )Nr   rL  rM  rN  r   r   r   zmCannot add/subtract timedelta-like from PeriodArray that is not an integer multiple of the PeriodArray's freqrk   rR   )r   r   rC   rs   r   rF   r   r   )r   r   r^   rv   r"  r#   r#   r$   test_pi_offset_errors  s    
z2TestPeriodIndexSeriesMethods.test_pi_offset_errorsc                 C   s\  t ddddg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s*ttddd	| }t|| |j|jksXtd S )Nrb   rc   rd   re   rO   r   r   2012-01r   ir   r      rQ   r/   rx   )r   r   r   rF   rK   r   r   r   rC  r
   nanr   r   r   r"   r   rV   r#   r#   r$   test_pi_sub_period	  s.    
  &&z/TestPeriodIndexSeriesMethods.test_pi_sub_periodc                 C   sR   t ddddgddd}ttjgd dd	}ttj| | t|tj | d S )
Nrb   rc   rx   re   rO   r   r   r'   r   )r   r
   rF   rx   r   r   )r   r   rV   r#   r#   r$   test_pi_sub_pdnat'  s    
  z.TestPeriodIndexSeriesMethods.test_pi_sub_pdnatc                 C   s   t ddddg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 )Nrb   rx   rd   re   rO   r   r   rR  r   rS  rT  rU  r   r   rQ   r/   )r   r   r   rF   rK   rx   r   r   r
   r   rW  rX  r#   r#   r$   test_pi_sub_period_nat0  s    
  $$z3TestPeriodIndexSeriesMethods.test_pi_sub_period_natN)r@   rA   rB   r   r   r=  rC   rD   rE   rD  rH  rK  rP  rQ  rY  rZ  r[  r#   r#   r#   r$   r9  V  s0   	r9  )%r,  Znumpyr   rC   Zpandas._libs.tslibsr   r   r   r   Zpandas.errorsr   ZpandasrF   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.corer   Zpandas.core.arraysr   Zpandas.tests.arithmetic.commonr   r   r   r   rL   r   r   r   r   r.  r9  r#   r#   r#   r$   <module>   s2   
  l(f+     Z4