o
    d2a                     @   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g diS )Nc                       s   e Zd Ze fddZdS )z2gpd_style_subclass_df.<locals>.SubclassedDataFramec                        S N selfSubclassedDataFramer   T/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/frame/test_subclass.py_constructor      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                   @   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d#d$ Zd%d& Zd'd( Zd)d* Zejd+d,d-gd.d/ Zd0d1 Zd2d3 Zejd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDS )ETestDataFrameSubclassingc                    s  G fdddt G  fdddt tdtdd} |}t| s)J |j}t|s3J | dks;J |dd	 }t| sHJ | dksPJ td
dg} ddgddgg|d}t|d  slJ tddg} ddgddgg|d}t|d sJ 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                    r   r   r   r	   CustomSeriesr   r   r       r   z^TestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomSeries._constructorc                 S      dS NOKr   r	   r   r   r   custom_series_function$      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                       s>   e Zd ZdZ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.
            returnNc                    s   t  j|i | d S r   )super__init__)r
   argskw	__class__r   r   r$   -   s   z]TestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame.__init__c                    r   r   r   r	   )CustomDataFramer   r   r   0   r   zaTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame._constructorc                 S   r   r   r   r	   r   r   r   custom_frame_function6   r!   zjTestDataFrameSubclassing.test_frame_subclassing_and_slicing.<locals>.CustomDataFrame.custom_frame_function)r"   N)
r   r   r   __doc__r$   r   r   Z_constructor_slicedr*   __classcell__r   r)   r   r'   r   r)   '   s    r)   
   )col1Zcol2r   r      )Ar1   )r1   Br   r   r   columnsr1   )r1    )r2   r5   )	r   r   range
isinstancer/   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g dg ddg dd}d|_|jdksJ |dg jdks$J |jddgd d f jdks4J |jd	d
gd d f jdksDJ |jd	d
d d f jdksTJ t |}t || |j|jksgJ |j|jksoJ d S )Nr   )XYr   bcindexXXXr;   r   r>   r   r   )tmr   Ztestattr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g dg dg ddg dd}|jd d df }t jg dtddd	}t || t|t js6J |jd d d
f }t jg dtddd	}t || t|t jsYJ |jd d df }t jg dtddd	}t || t|t js|J |jdd d f }t jg dtddd	}t || t|t jsJ |jd
d d f }t jg dtddd	}t || t|t jsJ |jdd d f }t jg dtddd	}t || t|t jsJ d S )Nr      r0            	   r;   r<   Zr=   r@   r;   abcrA   namer   r<   rR   r   )r   rK   rN   ZXYZ)r   r0   rO   r>   r?   )r   rL   rP   )rC   r   rD   SubclassedSerieslistassert_series_equalr7   rE   r
   rH   resexpr   r   r   test_indexing_slicedf   s6   z-TestDataFrameSubclassing.test_indexing_slicedc                 C   sL   G dd dt }tjtdd | j W d    d S 1 sw   Y  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   nonexistence   s   zSTestDataFrameSubclassing.test_subclass_attr_err_propagation.<locals>.A.nonexistenceN)r   r   r   r   r]   r   r   r   r   r1      s    r1   z.*i_dont_exist.*)match)r   pytestZraisesAttributeErrorr]   )r
   r1   r   r   r   "test_subclass_attr_err_propagation   s   
"z;TestDataFrameSubclassing.test_subclass_attr_err_propagationc                 C   sD  t jg dg ddtdd}t jg dg d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seJ t || t|t jssJ t || |j|j	\}}t|t j
sJ t ||j t|t j
sJ t ||j	 d S )Nr   r   r0   r   r>   ACEr@   r   r   rK   )r?   dABDr   axisr   r   r0   ABCDEr   rK   )rC   r   rW   alignnpnanr7   rF   r   r?   rV   rX   )r
   df1df2res1res2exp1exp2r   r   r   test_subclass_align   s0   $$z,TestDataFrameSubclassing.test_subclass_alignc                 C   s"  t jg dg ddtdd}t jg d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sXJ t || t|t jsfJ t 	|| ||\}}t|t js{J t 	|| t|t jsJ t || d S )Nrb   rc   rd   r@   re   rg   xrT   r   rh   r   r   r0   rj   r   rK   )
rC   r   rW   rV   rk   rl   rm   r7   rF   rX   )r
   rH   srp   rq   rr   rs   r   r   r    test_subclass_align_combinations   s&    $z9TestDataFrameSubclassing.test_subclass_align_combinationsc                 C   sH   t ddgi}| D ]\}}t|t jsJ t ||j|  qd S )Nr   r   )rC   r   Ziterrowsr7   rV   rX   rD   )r
   rH   irowr   r   r   test_subclass_iterrows   s
   z/TestDataFrameSubclassing.test_subclass_iterrowsc                 C   `   t jg dg dg dgg dg dd}| }t jg dtdtd	gd
}t || d S )Nr   rJ   rM   r=   rQ   rA   r4   )	r   r   r   rK   r0   rL   rN   rO   rP   Z	aaabbbcccZ	XYZXYZXYZr@   )rC   r   stackrV   rW   rX   rY   r   r   r   test_subclass_stack      z,TestDataFrameSubclassing.test_subclass_stackc              
   C   s  t jg dg dg dg d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!g d"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&g d'd	td(d)gdd%d}|d}t || d S )*Nr.                                  !   (   )   *   +   AABBcdcdaaacccnamesWWXXyzyzwwwyyyr|   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   AAAABBBBccddccddyzyzyzyzr   r   r   Wr;   rU   WXWXWXWXr   r   r   yz	rC   r   r   r8   rW   zipr   r}   rF   r
   rH   r[   rZ   r   r   r   test_subclass_stack_multi   s^   




z2TestDataFrameSubclassing.test_subclass_stack_multic              
   C   s  t jg dg dg dg d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!g d"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.g d/d	td0d1gdd%d}|d}t || d S )2Nr.   r         (@      *@r   r         6@      7@r   r         @@     @@r   r         E@     E@r   r   r   r   r   r   r   r   r   r|   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   r   g      $@g      &@g      4@      5@g      >@g      ?@g      D@g     D@r   r   r   r   r   r   r   r   r   test_subclass_stack_multi_mixed  sf   



z8TestDataFrameSubclassing.test_subclass_stack_multi_mixedc                 C   r{   )Nr   rJ   rM   r=   rQ   r|   )	r   rK   rN   r   r0   rO   r   rL   rP   Z	XXXYYYZZZZ	abcabcabcr@   )rC   r   unstackrV   rW   rX   rY   r   r   r   test_subclass_unstackY  r   z.TestDataFrameSubclassing.test_subclass_unstackc              
   C   H  t jg dg dg dg d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g dg dgtddgddtjtttdtdtdg dd	d}| }t || |d}t || t jg dg dgtddgddtjtttdtdtdg dd	d}|d}t || d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r|   )r.   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r1   r2   r   WWWWXXXXyyzzyyzzcdcdcdcdr   r   r   )r.   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r?   rf   ABABABABr   r   r   	rC   r   r   r8   rW   r   r   r   rF   r   r   r   r   test_subclass_unstack_multih  s>   
	

	z4TestDataFrameSubclassing.test_subclass_unstack_multic              
   C   r   )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r|   )r.   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r1   r2   r   r   r   r   r   )r.   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r?   rf   r   r   r   r   r   r   r   !test_subclass_unstack_multi_mixed  sN   

z:TestDataFrameSubclassing.test_subclass_unstack_multi_mixedc                 C   sn   t g dg dg dd}|jdddd}t dd	d
ddd	d
dd}d\|j_|j_t || d S )N)r1   r2   Cr   r2   r1   )Oner   r   Twor   r   )      ?       @      @r   r   r   )rA   r4   valuesrA   r4   r   r   r   r   r1   r2   r   )r   r   r|   )rC   r   ZpivotrA   rU   r4   rF   )r
   rH   Zpivotedexpectedr   r   r   test_subclass_pivot  s   

z,TestDataFrameSubclassing.test_subclass_pivotc                 C   sp   t ddgddgddgddgd	}tj|d
dgd}t jg dg dg dg dgg dd}t || d S )NJohnMaryDoeBo      @      @      )firstlastheightweightr   r   )Zid_varsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   variablevaluer3   )rC   r   pdZmeltrF   )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< |
 |
  g dg dg dg dd}t|}|ddgg d }tj|ddgddd}t|| d S )N{   r   r   r>   r?   r   r   r   rf   ef      @333333?ffffff?皙	@?皙?)ZA1970ZA1980ZB1970ZB1980r;   id)r   r>   r?   rf   r   r   )r   r   r   r   r   r   )  r   r     r   r   )r   r   r   r   r   r   )r;   r1   r2   yearr   r   )r;   r1   r2   r1   r2   )rx   j)rl   randomseedrandnrC   r   dictr   r6   rA   tolistZ	set_indexr   Zwide_to_longrF   )r
   ru   rH   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g dg dg dg dgg d	d
}| fdd |j fdddd t jg dg dg dg dgg d	d
}|jfdddd}t|t jsYJ t || t g dg dg dg dg}|jdd dd}t|t jsJ t || |jdd ddd}t|t jsJ t || t g dg dg dg dg}|jdd dd}t|t jrJ t || d S )Nc                 S   s   t | tjsJ d S r   )r7   rC   rV   ry   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   r3   c                        | S r   r   ru   r   r   r   <lambda>#      z@TestDataFrameSubclassing.test_subclassed_apply.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   $  r   r   rh   )r   r   r   r   )r   r   r   g      @c                    r   r   r   r   )r   r   r   r   0  r   r   c                 S   s   t g dS Nr   )rC   rV   r   r   r   r   r   6  s    c                 S      g dS r  r   r   r   r   r   r   :  r   expand)ri   Zresult_typec                 S   r  r  r   r   r   r   r   r   @  r   )rC   r   applyr7   rF   rV   rX   )r
   rH   r   resultr   )r   r   r   test_subclassed_apply  sD   

""z.TestDataFrameSubclassing.test_subclassed_applyc                 C   >   t g dg dg dd}t|| }t|t jsJ d S Nr   rJ   rM   r   rC   r   getattrr7   rV   )r
   Zall_reductionsrH   r  r   r   r   test_subclassed_reductionsD  s   z3TestDataFrameSubclassing.test_subclassed_reductionsc              	   C   s  t g ddtjdddgg dd}| }t|t jsJ t g dg d	g d
d}| }t|t js:J t jg dg dg dg d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szJ t  }| }t|t jsJ d S )N)r   MylaZLewisr   r  g      8@r   r      )FTTTF)ZPersonZAgeSingle)r   r   r   )r   r0   rL   )rN   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   )rC   r   rl   rm   countr7   rV   r   r8   rW   r   r
   rH   r  r   r   r   test_subclassed_countK  s2   	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J d S )Nr   rK   r   )Znum_legsZ	num_wingsZfalcondogr@   )rC   r   isinr7   r  r   r   r   	test_isinj  s
   z"TestDataFrameSubclassing.test_isinc                 C   sZ   t g dg dg dd}| }t|t jsJ t  }| }t|t js+J d S r  )rC   r   Z
duplicatedr7   rV   r  r   r   r   test_duplicatedq  s   z(TestDataFrameSubclassing.test_duplicated
idx_methodidxmaxidxminc                 C   r  r  r	  )r
   r  rH   r  r   r   r   test_idxz  s   z!TestDataFrameSubclassing.test_idxc                 C   s   t g dg dg}t g d}||}t|t jsJ t g dg dg}t g d}||}t|t js>J d S )N)r   r   )r   r   r   r   )r   r   r   r   )rC   r   rV   dotr7   )r
   rH   rv   r  r   r   r   test_dot  s   

z!TestDataFrameSubclassing.test_dotc                 C   sV   t g dg dg dd}| }t|t jsJ |jdd}t|t js)J d S )Nr   rJ   rM   r   Fr@   )rC   r   Zmemory_usager7   rV   r  r   r   r   test_memory_usage  s
   z*TestDataFrameSubclassing.test_memory_usagec                 C   sr   g d}g d}t jtjdd||d}t jtjdd|d d |d}|j|dddd	}t|t js7J d S )
N)r   r>   r?   rf   r   )onetwothreefourr0   rK   r|   r   TZkendall)ri   Zdropmethod)rC   r   rl   r   r   Zcorrwithr7   rV   )r
   rA   r4   rn   ro   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s8J ||d }t|tjsGJ |d}t|tjsTJ d S )	Nr   z1/1/1990Z53s)Zperiodsfreqr   r@   r  z
1989-12-31)	r   Z
date_rangerC   r   rl   rm   Zasofr7   rV   )r
   NrngrH   r  r   r   r   	test_asof  s   	
z"TestDataFrameSubclassing.test_asofc                 C   :   t g dg dg dd}| }t|t jsJ d S r  )rC   r   r  r7   rV   r  r   r   r   test_idxmin_preserves_subclass     z7TestDataFrameSubclassing.test_idxmin_preserves_subclassc                 C   r)  r  )rC   r   r  r7   rV   r  r   r   r   test_idxmax_preserves_subclass  r+  z7TestDataFrameSubclassing.test_idxmax_preserves_subclassc                 C   sT   t g dg dg dd}| }t|t jsJ | }t|t|s(J d S r  )rC   r   Zconvert_dtypesr7   type)r
   r   rH   r  r   r   r   &test_convert_dtypes_preserves_subclass  s
   z?TestDataFrameSubclassing.test_convert_dtypes_preserves_subclassc                 C   sJ   t g dg dg dd}|tjtjtjd}t|t js#J d S r  )rC   r   Zastyperl   Zint64Zint32Zfloat64r7   r  r   r   r   test_astype_preserves_subclass  s   z7TestDataFrameSubclassing.test_astype_preserves_subclassc                 C   sB   t dg di}tdg di}||sJ ||sJ d S )Nr   r   )r   rC   r   equals)r
   rn   ro   r   r   r   test_equals_subclass  s   z-TestDataFrameSubclassing.test_equals_subclassc                 C   sV   t dg di}|jddgdd}t dg di}t|t js#J t || d S )Nr1   r   r   r   Zffill)r#  )r   r   r   )rC   r   replacer7   rF   )r
   rH   r  r   r   r   r   test_replace_list_method  s
   z1TestDataFrameSubclassing.test_replace_list_methodN)(r   r   r   r:   rI   r\   ra   rt   rw   rz   r~   r   r   r   r   r   r   r   r   r  r  r  r  r  r_   markZparametrizer  r  r  tdZskip_if_no_scipyr$  r(  r*  r,  r.  r/  r1  r3  r   r   r   r   r      sF    7#
9>'26	

	r   )numpyrl   r_   Zpandas.util._test_decoratorsutilZ_test_decoratorsr5  Zpandasr   r   r   r   r   Zpandas._testingZ_testingrC   Zfixturer   r   r   r   r   r   <module>   s    
	