U
    f/e\                     @   s`   d dl Zd dlZd dlm  mZ d dlZd dlm	Z	m
Z
mZmZ d dlmZ G dd dZdS )    N)	DataFrameIndex
MultiIndexSeriesc                   @   s  e Zd Z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d Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zejd#d$d% Zd&d' Zd(d) Zd*d+ Zejd,d-d.gd/d0 Zd1d2 Zd3d4 Zej d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?S )@TestDataFrameSubclassingc                    s  G fdddt G  fdddt tdtdd} |}t| sRt|j}t|sft| dksvt|dd	 }t| st| dkstt	d
dg} ddgddgg|d}t|d  stt	ddg} ddgddgg|d}t|d std S )Nc                       s$   e Zd Ze fddZdd ZdS )zQTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomSeriesc                    s    S N selfCustomSeriesr   D/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/frame/test_subclass.py_constructor   s    z^TestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomSeries._constructorc                 S   s   dS NOKr   r	   r   r   r   custom_series_function   s    zhTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomSeries.custom_series_functionN)__name__
__module____qualname__propertyr   r   r   r   r   r   r      s   r   c                       s<   e Zd ZdZ fddZefddZZdd Z  Z	S )zTTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFramez
            Subclasses pandas DF, fills DF with simulation results, adds some
            custom plotting functions.
            c                    s   t  j|| d S r   )super__init__)r
   argskw	__class__r   r   r   #   s    z]TestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame.__init__c                    s    S r   r   r	   )CustomDataFramer   r   r   &   s    zaTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame._constructorc                 S   s   dS r   r   r	   r   r   r   custom_frame_function,   s    zjTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame.custom_frame_function)
r   r   r   __doc__r   r   r   Z_constructor_slicedr   __classcell__r   r   r   r   r   r      s   r   
   )col1Zcol2r         )Ar%   )r%   Br         columnsr%   )r%    )r&   r+   )
r   r   range
isinstanceAssertionErrorr"   r   r   r   from_tuples)r
   dataZcdfZ
cdf_seriesZcdf_rowsZmcolZ	cdf_multiZ
cdf_multi2r   r    r   "test_frame_subclassing_and_slicing   s"    z;TestDataFrameSubclassing.test_frame_subclassing_and_slicingc                 C   s   t jdddgdddgddddgd}d	|_|jd	ks:t|d
g jd	ksNt|jddgd d f jd	ksnt|jddgd d f jd	kst|jddd d f jd	kstt |}t || |j|jkst|j|jkstd S )Nr#   r'   r(   )XYabcindexZXXXr2   r   )	tmSubclassedDataFrameZtestattrr.   locilocZround_trip_pickleassert_frame_equal	_metadata)r
   dfZ	unpickledr   r   r   test_dataframe_metadataH   s        
z0TestDataFrameSubclassing.test_dataframe_metadatac                 C   s  t jdddgdddgddd	gd
dddgd}|jd d df }t jdddgtddd}t || t|t jsvt|jd d df }t jdddgtddd}t || t|t jst|jd d df }t jddd	gtddd}t || t|t jst|jdd d f }t jdddgtddd}t || t|t jsRt|jdd d f }t jdddgtddd}t || t|t jst|jdd d f }t jddd	gtddd}t || t|t jstd S )Nr#   r'   r(      r$            	   )r2   r3   Zr4   r5   r6   r7   r2   abcr8   namer3   rF   ZXYZ)	r9   r:   r;   SubclassedSerieslistassert_series_equalr-   r.   r<   r
   r?   resexpr   r   r   test_indexing_sliced\   s8     z-TestDataFrameSubclassing.test_indexing_slicedc              	   C   s6   G dd dt }tjtdd | j W 5 Q R X d S )Nc                   @   s   e Zd Zedd ZdS )zFTestDataFrameSubclassing.test_subclass_attr_err_propagation.<locals>.Ac                 S   s   | j S r   )Zi_dont_existr	   r   r   r   bar   s    zJTestDataFrameSubclassing.test_subclass_attr_err_propagation.<locals>.A.barN)r   r   r   r   rQ   r   r   r   r   r%      s   r%   z.*i_dont_exist.*)match)r   pytestZraisesAttributeErrorrQ   )r
   r%   r   r   r   "test_subclass_attr_err_propagation   s    z;TestDataFrameSubclassing.test_subclass_attr_err_propagationc                 C   sP  t jdddgdddgdtdd}t jdddgdddgd	td
d}|j|dd\}}t jdtjdtjdgdtjdtjdgdtdd}t jddtjdtjgddtjdtjgd	tdd}t|t jstt || t|t jstt || |j	|j
\}}t|t jstt ||j	 t|t js>tt ||j
 d S )Nr#   r(   r$   r4   r5   ACEr7   r'   rA   )r6   dABDr   axisABCDE)r9   r:   rK   alignnpnanr-   r.   r=   r4   r6   rJ   rL   )r
   df1df2res1res2exp1exp2r   r   r   test_subclass_align   s4      $$z,TestDataFrameSubclassing.test_subclass_alignc                 C   s*  t jdddgdddgdtdd}t jdddgtd	d
d}|j|dd\}}t jdtjdtjdgdtjdtjdgdtdd}t jddtjdtjgtdd
d}t|t jstt 	|| t|t jstt 
|| ||\}}t|t jstt 
|| t|t jstt 	|| d S )Nr#   r(   r$   rV   rW   r7   r'   rA   rY   xrH   r   rZ   r\   )r9   r:   rK   rJ   r]   r^   r_   r-   r.   r=   rL   )r
   r?   srb   rc   rd   re   r   r   r    test_subclass_align_combinations   s*    $$  z9TestDataFrameSubclassing.test_subclass_align_combinationsc                 C   sH   t ddgi}| D ]*\}}t|t js0tt ||j|  qd S )Nr4   r#   )r9   r:   Ziterrowsr-   rJ   r.   rL   r;   )r
   r?   irowr   r   r   test_subclass_iterrows   s    z/TestDataFrameSubclassing.test_subclass_iterrowsc              
   C   sx   t jdddgdddgddd	ggd
ddgdddgd}| }t jddddddddd	g	tdtdgd}t || d S )Nr#   r'   r(   rA   r$   rB   rC   rD   rE   r4   r5   r6   r2   r3   rF   r8   r*   Z	aaabbbcccZ	XYZXYZXYZr7   )r9   r:   stackrJ   rK   rL   rM   r   r   r   test_subclass_stack   s     z,TestDataFrameSubclassing.test_subclass_stackc              
   C   s  t jddddgddddgd	d
ddgddddggtjtttdtdddgdtjtttdtdddgdd}t jddgddgddgddgd	dgd
dgddgddggtjtttdtdtddddgdtddgdd d}| }t || |d}t || t jddgddgddgddgd	d
gddgddgddggtjtttdtdtd!dddgdtd"d#gdd d}|d}t || d S )$Nr!                                  !   (   )   *   +   AABBcdcdaaacccnamesWWXXyzyzwwwyyyrm   AAAABBBBccddccddyzyzyzyzWr2   rI   WXWXWXWXyz	r9   r:   r   r/   rK   zipr   rn   r=   r
   r?   rO   rN   r   r   r   test_subclass_stack_multi   sb    *  




z2TestDataFrameSubclassing.test_subclass_stack_multic              
   C   s  t jddddgddddgd	d
ddgddddggtjtttdtdddgdtjtttdtdddgdd}t jddgddgddgddgd	dgd
dgddgddggtjtttdtdtddddgdtddgdd d}| }t || |d}t || t jd!d"gddgd#d$gddgd%d&gddgd'd(gddggtjtttdtdtd)dddgdtd*d+gdd d}|d}t || d S ),Nr!   rp         (@      *@rs   rt         6@      7@rw   rx         @@     @@r{   r|         E@     E@r   r   r   r   r   r   r   r   r   rm   r   r   r   r   r2   r   g      $@g      &@g      4@      5@g      >@g      ?@g      D@g     D@r   r   r   r   r   r   r   r   test_subclass_stack_multi_mixed  sj    



  



z8TestDataFrameSubclassing.test_subclass_stack_multi_mixedc              
   C   sx   t jdddgdddgddd	ggd
ddgdddgd}| }t jddddddddd	g	tdtdgd}t || d S )Nr#   r'   r(   rA   r$   rB   rC   rD   rE   r4   r5   r6   r2   r3   rF   rm   Z	XXXYYYZZZZ	abcabcabcr7   )r9   r:   unstackrJ   rK   rL   rM   r   r   r   test_subclass_unstackO  s     z.TestDataFrameSubclassing.test_subclass_unstackc              
   C   s  t jddddgddddgd	d
ddgddddggtjtttdtdddgdtjtttdtdddgdd}t jddddddddgd	dd
dddddggtddgddtjtttdtdtd dddgdd}| }t || |d}t || t jdd	dd
ddddgddddddddggtd!d"gddtjtttdtdtd#dddgdd}|d}t || d S )$Nr!   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   rm   r%   r&   r   WWWWXXXXyyzzyyzzcdcdcdcdr6   rX   ABABABAB	r9   r:   r   r/   rK   r   r   r   r=   r   r   r   r   test_subclass_unstack_multi^  sB    *  
&	
&	
z4TestDataFrameSubclassing.test_subclass_unstack_multic              
   C   s  t jddddgddddgd	d
ddgddddggtjtttdtdddgdtjtttdtdddgdd}t jddddddddgd	dd
dddddggtddgddtjtttdtdtd dddgdd}| }t || |d}t || t jdd	dd
ddddgddddddddggtd!d"gddtjtttdtdtd#dddgdd}|d}t || d S )$Nr!   rp   r   r   rs   rt   r   r   rw   rx   r   r   r{   r|   r   r   r   r   r   r   r   r   r   r   r   rm   r%   r&   r   r   r   r   r6   rX   r   r   r   r   r   r   !test_subclass_unstack_multi_mixed  sR    



  

z:TestDataFrameSubclassing.test_subclass_unstack_multi_mixedc              
   C   s   t ddddddgddddddgddddddgd	}|jd
ddd	}t ddddddddd}d\|j_|j_t || d S )Nr%   r&   COneTwog      ?g       @g      @)r8   r*   valuesr8   r*   r   r%   r&   r   )r   r   rm   )r9   r:   Zpivotr8   rI   r*   r=   )r
   r?   Zpivotedexpectedr   r   r   test_subclass_pivot  s    

z,TestDataFrameSubclassing.test_subclass_pivotc                 C   s   t ddgddgddgddgd	}tj|d
dgd}t jddddgddddgddddgddddggd
dddgd}t || d S )NJohnMaryDoeBo      @      @      )firstlastheightweightr   r   )Zid_varsr   r   variablevaluer)   )r9   r:   pdZmeltr=   )r
   ZcheeseZmeltedr   r   r   r   test_subclassed_melt  s"    	





z-TestDataFrameSubclassing.test_subclassed_meltc              
   C   s   t jd t jd}tddddddd	dd
dddddddtttd|d}|j	|d< |
 |
  dddddd	gd
dddddgddddddgddddddgd}t|}|ddgdddg }tj|ddgddd}t|| d S )N{   r(   r4   r5   r6   )r   r#   r'   rX   efg      @g333333?gffffff?g	@g?g?)ZA1970ZA1980ZB1970ZB1980r2   idi  i  r   r#   r'   )r2   r%   r&   yearr   r   r2   r%   r&   )rj   j)r^   randomseedrandnr9   r:   dictr   r,   r8   tolistZ	set_indexr   Zwide_to_longr=   )r
   rg   r?   Zexp_datar   Z
long_framer   r   r   test_subclassed_wide_to_long  s*    






z5TestDataFrameSubclassing.test_subclassed_wide_to_longc                    s  dd  dd t jddddgd	d
ddgddddgd	d
ddggddddgd}| fdd |j fdddd t jddddgd	d
ddgddddgd	d
ddggddddgd}|jfdddd}t|t jstt || t dddgdddgdddgdddgg}|jdd dd}t|t js4tt || |jdd ddd }t|t jsftt || t dddgdddgdddgdddgg}|jd!d dd}t|t jrtt || d S )"Nc                 S   s   t | tjstd S r   )r-   r9   rJ   r.   rk   r   r   r   check_row_subclass  s    zJTestDataFrameSubclassing.test_subclassed_apply.<locals>.check_row_subclassc                 S   s    | d dkr| d  d7  < | S )Nr   r   r   g      ?r   r   r   r   r   stretch
  s    z?TestDataFrameSubclassing.test_subclassed_apply.<locals>.stretchr   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   c                    s    | S r   r   rg   r   r   r   <lambda>      z@TestDataFrameSubclassing.test_subclassed_apply.<locals>.<lambda>c                    s    | S r   r   r   r   r   r   r     r   r#   rZ   g      @c                    s    | S r   r   r   )r   r   r   r   &  r   r'   r(   c                 S   s   t dddgS Nr#   r'   r(   )r9   rJ   r   r   r   r   r   ,  r   c                 S   s
   dddgS r   r   r   r   r   r   r   0  r   expand)r[   Zresult_typec                 S   s
   dddgS r   r   r   r   r   r   r   6  r   )r9   r:   applyr-   r.   r=   rJ   rL   )r
   r?   r   resultr   )r   r   r   test_subclassed_apply  sD    











**z.TestDataFrameSubclassing.test_subclassed_applyz*ignore:.*None will no longer:FutureWarningc                 C   sD   t dddgdddgddd	gd
}t|| }t|t js@td S Nr#   r'   r(   rA   r$   rB   rC   rD   rE   r   r9   r:   getattrr-   rJ   r.   )r
   Zall_reductionsr?   r   r   r   r   test_subclassed_reductions:  s    $z3TestDataFrameSubclassing.test_subclassed_reductionsc              	   C   sX  t dddddgdtjdddgdd	d	d	dgd
}| }t|t jsJtt dddgdddgdddgd}| }t|t jstt jddddgddddgddddgddd d!ggtj	t
tt
d"t
d#d$d%gd&tj	t
tt
d't
d(d)d*gd&d+}t t |jdd,}W 5 Q R X t|t js2tt  }| }t|t jsTtd S )-Nr   ZMylaZLewisg      8@r   rz      FT)ZPersonZAgeSingler#   r   r(   r$   rB   rC   rD   r   r!   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   rm   )level)r9   r:   r^   r_   countr-   rJ   r.   r   r/   rK   r   Zassert_produces_warningFutureWarningr
   r?   r   r   r   r   test_subclassed_countB  s8    $*  	z.TestDataFrameSubclassing.test_subclassed_countc                 C   sB   t jddgddgdddgd}|ddg}t|t js>td S )Nr'   rA   r   )Znum_legsZ	num_wingsZfalconZdogr7   )r9   r:   isinr-   r.   r   r   r   r   	test_isinc  s     z"TestDataFrameSubclassing.test_isinc                 C   s`   t dddgdddgddd	gd
}| }t|t js<tt  }| }t|t js\td S r   )r9   r:   Z
duplicatedr-   rJ   r.   r   r   r   r   test_duplicatedk  s    $z(TestDataFrameSubclassing.test_duplicated
idx_methodidxmaxidxminc                 C   sD   t dddgdddgddd	gd
}t|| }t|t js@td S r   r   )r
   r   r?   r   r   r   r   test_idxu  s    $z!TestDataFrameSubclassing.test_idxc                 C   s   t ddddgddddgg}t ddddg}||}t|t jsJtt ddddgddddgg}t ddddg}||}t|t jstd S )Nr   r#   r'   )r9   r:   rJ   dotr-   r.   )r
   r?   rh   r   r   r   r   test_dot|  s    

z!TestDataFrameSubclassing.test_dotc                 C   s\   t dddgdddgddd	gd
}| }t|t js<t|jdd}t|t jsXtd S )Nr#   r'   r(   rA   r$   rB   rC   rD   rE   r   Fr7   )r9   r:   Zmemory_usager-   rJ   r.   r   r   r   r   test_memory_usage  s
    $z*TestDataFrameSubclassing.test_memory_usagec                 C   s|   dddddg}dddd	g}t jtjd
d||d}t jtjdd|d d |d}|j|dddd}t|t jsxtd S )Nr4   r5   r6   rX   r   ZoneZtwoZthreeZfourr$   rA   rm   r#   TZkendall)r[   Zdropmethod)	r9   r:   r^   r   r   Zcorrwithr-   rJ   r.   )r
   r8   r*   r`   ra   Zcorrelsr   r   r   test_corrwith  s       
 z&TestDataFrameSubclassing.test_corrwithc                 C   s   d}t jd|dd}tjtjtjtjgtjtjtjgtjtjtjgd|d}||dd  }t|tjspt||d }t|tj	st|d}t|tj	std S )	Nr(   z1/1/1990Z53s)Zperiodsfreqr   r7   r   z
1989-12-31)
r   Z
date_ranger9   r:   r^   r_   Zasofr-   r.   rJ   )r
   Nrngr?   r   r   r   r   	test_asof  s    	
z"TestDataFrameSubclassing.test_asofc                 C   s@   t dddgdddgddd	gd
}| }t|t js<td S r   )r9   r:   r   r-   rJ   r.   r   r   r   r   test_idxmin_preserves_subclass  s    $z7TestDataFrameSubclassing.test_idxmin_preserves_subclassc                 C   s@   t dddgdddgddd	gd
}| }t|t js<td S r   )r9   r:   r   r-   rJ   r.   r   r   r   r   test_idxmax_preserves_subclass  s    $z7TestDataFrameSubclassing.test_idxmax_preserves_subclassc                 C   sF   t ddddgi}tddddgi}||s4t||sBtd S )Nr4   r#   r'   r(   )r   r9   r:   equalsr.   )r
   r`   ra   r   r   r   test_equals_subclass  s    z-TestDataFrameSubclassing.test_equals_subclassN)&r   r   r   r1   r@   rP   rU   rf   ri   rl   ro   r   r   r   r   r   r   r   r   r   rS   markfilterwarningsr   r   r   r   Zparametrizer   r   r   tdZskip_if_no_scipyr   r   r   r   r   r   r   r   r   r      s@   7#
9>'26

!

	
r   )Znumpyr^   rS   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   Zpandas._testingZ_testingr9   r   r   r   r   r   <module>   s   