o
    ŀgT                     @   s  d dl Zd dlZd dlmZmZmZ d dlmZ	 d dl
mZ d dlmZ dd Zdd Zejd	ejgd
gfejejgdd
gfeejgd
gfeejejgdd
gfgdd Zejdg eg gdd Zdd Zejdeegdd Zdd Zejdi dg ig dddg dg dgddgg dgdd Zejdddgd d! Zg d"Zd#d$ eD Zejd%g ed&d' d(d) Zejd%ed*d+ Z d,d- Z!ejdddgd.d/ Z"d0d1 Z#dS )2    N)	DataFrame
MultiIndexSeries)frame_transform_kernels)
zip_framesc                 C   s,   |t ur| d } |dkrtd|  | S )zm
    Helper to ensure we have the right type of object for a test parametrized
    over frame_or_series.
    Ar   z%Test is only for DataFrame with axis=)r   pytestskip)objklassaxis r   [/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/apply/test_frame_transform.py
unpack_obj   s
   r   c                 C   sf   t ||| }tjdd t|}W d    n1 sw   Y  |jtj| d}|}t|| d S )Nignoreallr   )r   nperrstatesqrt	transformtmassert_equal)r   float_frameframe_or_seriesr
   f_sqrtresultexpectedr   r   r   test_transform_ufunc   s   r   z
ops, namesr   absolutec                    s   | dv rdnd}t jdd t fdd|D |d}W d    n1 s&w   Y  | dv r9t j|g|_n	t j|g|_ j|| d}t	|| d S )	N>   indexr      r   r   r   c                    s   g | ]}| qS r   r   ).0opr   r   r   
<listcomp>4   s    z+test_transform_listlike.<locals>.<listcomp>r   )
r   r   r   r   from_productcolumnsr!   r   r   assert_frame_equal)r   r   opsnames
other_axisr   r   r   r%   r   test_transform_listlike'   s   r-   r*   c                 C   J   t | |d}tjtdd || W d    d S 1 sw   Y  d S Nr   z$No transform functions were providedmatchr   r   raises
ValueErrorr   r   r*   r   r
   r   r   r   test_transform_empty_listlike=   s   "r6   c                  C   s   t dg di} ddd}ddd	}d
}tjt|d | j||gddddd W d    n1 s2w   Y  | j||gdddd}t ddgddgddggtddgd}t|| d S )Nxr"         r"   r   c                 S      | | | S Nr   )r7   acr   r   r   foo1I      z4test_transform_listlike_func_with_args.<locals>.foo1r9   c                 S   r;   r<   r   )r7   br>   r   r   r   foo2L   r@   z4test_transform_listlike_func_with_args.<locals>.foo2z/foo1\(\) got an unexpected keyword argument 'b'r0   r:      rA   r>   )r>      	   
   )r7   r?   )r7   rB   r(   )r"   r   )r9   r   )	r   r   r3   	TypeErrorr   r   from_tuplesr   r)   )dfr?   rB   msgr   r   r   r   r   &test_transform_listlike_func_with_argsE   s   

rM   boxc                 C   sl   | dv r|j d }||g tj}n|jd }|jdg tj}|j||tji| d}t|| d S )N)r   r!   r   r   )r(   r   r   absr!   ilocr   r)   )r   r   rN   er   r   r   r   r   test_transform_dictlike[   s   

rR   c                  C   sf   t ddgddgddgd} | ddgdd}t g dg d	gtdd
gddgd}t|| d S )Nr"   r9   rC   )r=   rA   r>   r   rO   rD   )      ?r"   rS   )       @rC   rT   )r   rO   )r   r   r"   )r   r"   r   rH   )r   r   r   r   r)   )rK   r   r   r   r   r   test_transform_dictlike_mixedh   s   rU   r   cumsumr   Bc                 C   r.   r/   r2   r5   r   r   r   test_transform_empty_dictlikes   s   "rY   	use_applyTFc                    s@   t | | } fdd}|j|| d}|d }t|| d S )Nc                    s   t |  kr	t| d S Nr"   
isinstancer4   r7   r   rZ   r   r   func   s   z test_transform_udf.<locals>.funcr   r"   )r   r   r   r   )r   r   rZ   r   r
   r`   r   r   r   r_   r   test_transform_udf   s
   ra   )ffillbfillfillnapadbackfillshiftc                 C   s   g | ]}|t vr|qS r   )	wont_fail)r#   r7   r   r   r   r&      s    r&   r$   c                 C      | d S r[   r   r^   r   r   r   <lambda>       rj   c                 C   s@  | dkr| tjjtdd tddtg i}t||}t	}d
ddg}tj||d	 ||  W d    n1 s>w   Y  tj||d	 || g W d    n1 s[w   Y  tj||d	 |d| i W d    n1 syw   Y  tj||d	 |d| gi W d    d S 1 sw   Y  d S )
Nngroupngroup not valid for NDFramer3   reasonr   r:   |4not supported between instances of 'type' and 'type'unsupported operand typer0   )applymarkerr   markxfailr4   r   objectr   get_objrI   joinr3   r   )r$   r   requestr
   errorrL   r   r   r   test_transform_bad_dtype   s0   "r{   c                 C   sL  |dkr|  tjjtdd tdtg g dd}t}ddd	g}tj	||d
 |
|g W d    n1 s<w   Y  tj	||d
 |
||d W d    n1 s[w   Y  tj	||d
 |
|g|gd W d    n1 s|w   Y  tj	||d
 |
|dg|gd W d    d S 1 sw   Y  d S )Nrl   rm   rn   r:   r8   rW   rp   rq   rr   r0   rg   )rs   r   rt   ru   r4   r   rv   rI   rx   r3   r   )ry   r$   rK   rz   rL   r   r   r    test_transform_failure_typeerror   s.   "r|   c                  C   s&  dd } t g dg dd}d}tjt|d || g W d    n1 s)w   Y  tjt|d || | d W d    n1 sHw   Y  tjt|d || g| gd W d    n1 siw   Y  tjt|d || dg| gd W d    d S 1 sw   Y  d S )	Nc                 S   s   t t | dk rt| S NrG   )r   sumr4   r^   r   r   r   r$      s   z-test_transform_failure_valueerror.<locals>.opr8   )i  i  iX  rW   zTransform function failedr0   rg   )r   r   r3   r4   r   )r$   rK   rL   r   r   r   !test_transform_failure_valueerror   s   "r   c                    sF   ddg ddi fdd}dgj |dg R i  d S )Nr"   r9   r>   r:   c                    s6   t | kr	t||g ksJ |d ksJ | S )Nr>   r\   )r7   r=   rA   r>   expected_argsexpected_kwargsr   rZ   r   r   f   s
   z%test_transform_passes_args.<locals>.fr   )r   )rZ   r   r   r   r   r   test_transform_passes_args   s   $	r   c                  C   sP   t g ddgd} | dd }t||  | d dd }t|| d  d S )Ncol1col2rH   c                 S   ri   r}   r   r^   r   r   r   rj     rk   z0test_transform_empty_dataframe.<locals>.<lambda>c                 S   ri   r}   r   r^   r   r   r   rj     rk   )r   r   r   r)   assert_series_equal)rK   r   r   r   r   test_transform_empty_dataframe  s
   r   )$numpyr   r   pandasr   r   r   pandas._testing_testingr   pandas.tests.apply.commonr   pandas.tests.frame.commonr   r   r   rt   parametrizer   rO   arrayr-   r6   rM   dictrR   rU   rY   ra   rh   frame_kernels_raiser{   r|   r   r   r   r   r   r   r   <module>   s\    
	








