U
    sVca                     @   sp   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 e dd ZG dd dZdS )    N)	DataFrameIndex
MultiIndexSeriesc                      s&   G  fdddt   ddddgiS )Nc                       s   e Zd Ze fddZdS )z2gpd_style_subclass_df.<locals>.SubclassedDataFramec                    s    S N selfSubclassedDataFramer   D/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/test_subclass.py_constructor   s    z?gpd_style_subclass_df.<locals>.SubclassedDataFrame._constructorN)__name__
__module____qualname__propertyr   r   r
   r   r   r      s   r   a         )r   r   r   r
   r   gpd_style_subclass_df   s    r   c                   @   s0  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?d@ Z&dAdB Z'dCdD Z(dES )F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 r   r   r   CustomSeriesr   r   r       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)r   r   r   r   r   r   r   r   r   r   r      s   r   c                       sB   e Zd ZdZdd 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.
            N)returnc                    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   0   s    zaTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame._constructorc                 S   s   dS r   r   r   r   r   r   custom_frame_function6   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   r      )Ar,   )r,   Br   r   r   columnsr,   )r,    )r-   r0   )
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Yr   bcindexZXXXr7   r   )	tmr   Ztestattrr3   locilocZround_trip_pickleassert_frame_equal	_metadata)r	   dfZ	unpickledr   r   r   test_dataframe_metadataR   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+            	   )r7   r8   Zr   r9   r:   r;   r7   abcr<   namer8   rI   ZXYZ)	r=   r   r>   SubclassedSerieslistassert_series_equalr2   r3   r?   r	   rB   resexpr   r   r   test_indexing_slicedf   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   rT   r   r   r   r   r,      s   r,   z.*i_dont_exist.*)match)r   pytestZraisesAttributeErrorrT   )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+   r   r9   ACEr;   r   rD   )r:   dABDr   axisABCDE)r=   r   rN   alignnpnanr2   r3   r@   r   r:   rM   rO   )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+   rY   rZ   r;   r   rD   r\   xrK   r   r]   r_   )r=   r   rN   rM   r`   ra   rb   r2   r3   r@   rO   )r	   rB   sre   rf   rg   rh   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 )Nr   r   )r=   r   Ziterrowsr2   rM   r3   rO   r>   )r	   rB   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   rD   r+   rE   rF   rG   rH   r   r9   r:   r7   r8   rI   r<   r/   Z	aaabbbcccZ	XYZXYZXYZr;   )r=   r   stackrM   rN   rO   rP   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yyyrp   AAAABBBBccddccddyzyzyzyzWr7   rL   WXWXWXWXyz	r=   r   r   r4   rN   zipr   rq   r@   r	   rB   rR   rQ   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)   rs         (@      *@rv   rw         6@      7@rz   r{         @@     @@r~   r         E@     E@r   r   r   r   r   r   r   r   r   rp   r   r   r   r   r7   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   rD   r+   rE   rF   rG   rH   r   r9   r:   r7   r8   rI   rp   Z	XXXYYYZZZZ	abcabcabcr;   )r=   r   unstackrM   rN   rO   rP   r   r   r   test_subclass_unstackY  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)   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   rp   r,   r-   r   WWWWXXXXyyzzyyzzcdcdcdcdr:   r[   ABABABAB	r=   r   r   r4   rN   r   r   r   r@   r   r   r   r   test_subclass_unstack_multih  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)   rs   r   r   rv   rw   r   r   rz   r{   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   rp   r,   r-   r   r   r   r   r:   r[   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      @)r<   r/   valuesr<   r/   r   r,   r-   r   )r   r   rp   )r=   r   Zpivotr<   rL   r/   r@   )r	   rB   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.   )r=   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   r   r9   r:   )r   r   r   r[   efg      @g333333?gffffff?g	@g?g?)ZA1970ZA1980ZB1970ZB1980r7   idi  i  r   r   r   )r7   r,   r-   yearr   r   r7   r,   r-   )rm   j)ra   randomseedrandnr=   r   dictr   r1   r<   tolistZ	set_indexr   Zwide_to_longr@   )r	   rj   rB   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   )r2   r=   rM   r3   rn   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   rj   r   r   r   <lambda>#      z@TestDataFrameSubclassing.test_subclassed_apply.<locals>.<lambda>c                    s    | S r   r   r   r   r   r   r   $  r   r   r]   g      @c                    s    | S r   r   r   )r   r   r   r   0  r   r   r   c                 S   s   t dddgS Nr   r   r   )r=   rM   r   r   r   r   r   6  r   c                 S   s
   dddgS r   r   r   r   r   r   r   :  r   expand)r^   Zresult_typec                 S   s
   dddgS r   r   r   r   r   r   r   @  r   )r=   r   applyr2   r3   r@   rM   rO   )r	   rB   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   rD   r+   rE   rF   rG   rH   r   r=   r   getattrr2   rM   r3   )r	   Zall_reductionsrB   r   r   r   r   test_subclassed_reductionsD  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   r}      FT)ZPersonZAgeSingler   r   r   r+   rE   rF   rG   r   r)   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   rp   )level)r=   r   ra   rb   countr2   rM   r3   r   r4   rN   r   Zassert_produces_warningFutureWarningr	   rB   r   r   r   r   test_subclassed_countL  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   rD   r   )Znum_legsZ	num_wingsZfalconZdogr;   )r=   r   isinr2   r3   r   r   r   r   	test_isinm  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   )r=   r   Z
duplicatedr2   rM   r3   r   r   r   r   test_duplicatedu  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   rB   r   r   r   r   test_idx  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   )r=   r   rM   dotr2   r3   )r	   rB   rk   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   rD   r+   rE   rF   rG   rH   r   Fr;   )r=   r   Zmemory_usager2   rM   r3   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 )Nr   r9   r:   r[   r   ZoneZtwoZthreeZfourr+   rD   rp   r   TZkendall)r^   Zdropmethod)	r=   r   ra   r   r   Zcorrwithr2   rM   r3   )r	   r<   r/   rc   rd   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   r;   r   z
1989-12-31)
r   Z
date_ranger=   r   ra   rb   Zasofr2   r3   rM   )r	   NrngrB   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   )r=   r   r   r2   rM   r3   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   )r=   r   r   r2   rM   r3   r   r   r   r   test_idxmax_preserves_subclass  s    $z7TestDataFrameSubclassing.test_idxmax_preserves_subclassc                 C   sZ   t dddgdddgddd	gd
}| }t|t js<t| }t|t|sVtd S r   )r=   r   Zconvert_dtypesr2   r3   type)r	   r   rB   r   r   r   r   &test_convert_dtypes_preserves_subclass  s
    $z?TestDataFrameSubclassing.test_convert_dtypes_preserves_subclassc                 C   sP   t dddgdddgddd	gd
}|tjtjtjd
}t|t jsLtd S r   )	r=   r   Zastypera   Zint64Zint32Zfloat64r2   r3   r   r   r   r   test_astype_preserves_subclass  s    $z7TestDataFrameSubclassing.test_astype_preserves_subclassc                 C   sF   t ddddgi}tddddgi}||s4t||sBtd S )Nr   r   r   r   )r   r=   r   equalsr3   )r	   rc   rd   r   r   r   test_equals_subclass  s    z-TestDataFrameSubclassing.test_equals_subclassc                 C   sZ   t ddddgi}|jddgdd}t ddddgi}t|t jsJtt || d S )Nr,   r   r   r   Zffill)r   )r=   r   replacer2   r3   r@   )r	   rB   r   r   r   r   r   test_replace_list_method  s
    z1TestDataFrameSubclassing.test_replace_list_methodN))r   r   r   r6   rC   rS   rX   ri   rl   ro   rr   r   r   r   r   r   r   r   r   r   rV   markfilterwarningsr   r   r   r   Zparametrizer   r   r   tdZskip_if_no_scipyr   r   r   r   r   r   r   r   r   r   r   r   r      sF   7#
9>'26

!

	
	r   )Znumpyra   rV   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  Zpandasr   r   r   r   r   Zpandas._testingZ_testingr=   Zfixturer   r   r   r   r   r   <module>   s   
	