a
    Pf3                     @   sF  d dl mZ d dlZd dlZd dlmZ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mZ d dlmZmZmZ dd Zejg d	d
dd Zejdd Zejddd Zejddd Z ej!dg ddd Z"ejdd Z#ejdd Z$ejj%ejj$ejdejdG dd dZ&dS )    )dedentN)PyperclipExceptionPyperclipWindowsException)NA	DataFrameSeries
get_optionread_clipboard)ArrowStringArrayStringArray)CheckedCall_stringifyTextinit_qt_clipboardc                 C   s(   i }|dkr||d< | dkr$| |d< |S )Ndefaultexcelsep )r   r   kwargsr   r   W/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/test_clipboard.pybuild_kwargs    s    r   )
delimsutf8utf16stringlongnonasciicolwidthmixedfloatint)paramsc                    s  | j }|dkr$tddgddgdS |dkrBtdd	gd
dgdS |dkr`tddgddgdS |dkrttdd tdD ddtddS |dkrtd}ttj	dj
dd|d dfdtddS |dk rtd d  d!S |d"kr6td#d  tt fd$dtdD ddtddS |d%krpttd&d'd( tdd)tjtd*d+S |d,krttj	dd-tddS |d.krttj	d
ddd-tddS td S )/Nr   z"a,	"b|czd	ef`zhi'jzk''lm)abr   u   µasdu   Ωœ∑`u   øπ∆˚¬u   œ∑`®r   u   👍👍abcdefr   c                 S   s   g | ]}d | qS )zi-r   ).0ir   r   r   
<listcomp>D       zdf.<locals>.<listcomp>         )columnsr   zdisplay.max_rows   r   
      )sizer   z
in Englishu   en español)enesr   zdisplay.max_colwidthc                    s   g | ]}d   qS )xr   )r%   _Z_cwr   r   r'   Q   r(   r         ?g      @g{Gz?   Zabcde)r!   r"   cr   )r*   r+   r   )paramr   nparrayrangeZreshapelistr   randomZdefault_rngZintegerssplitZarangeZastypeZint64
ValueError)requestZ	data_typeZmax_rowsr   r5   r   df)   sP    $

(


rB   c                 c   sJ   dd }|   &}|jd|dd dV  W d   n1 s<0    Y  dS )z<
    Mocks WinError to help with testing the clipboard.
    c                   S   s   dS )NzWindow Errorr   r   r   r   r   _mock_win_errork   s    z$mock_ctypes.<locals>._mock_win_errorzctypes.WinErrorF)ZraisingN)contextsetattr)monkeypatchrC   mr   r   r   mock_ctypese   s    
rH   c                 C   sb   dd }|  ddd  d|j d}tjt|d t|  W d	   n1 sT0    Y  d	S )
z
    Give CheckCall a function that returns a falsey value and
    mock get_errno so it returns false so an exception is raised.
    c                   S   s   dS NFr   r   r   r   r   _return_false{   s    z6test_checked_call_with_bad_call.<locals>._return_falsepandas.io.clipboard.get_errnoc                   S   s   dS NTr   r   r   r   r   <lambda>~   r(   z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rE   __name__pytestraisesr   r   )rF   rJ   msgr   r   r   test_checked_call_with_bad_callt   s
    rT   c                 C   s2   dd }|  ddd  t|}| du s.J dS )z
    Give CheckCall a function that returns a truthy value and
    mock get_errno so it returns true so an exception is not raised.
    The function should return the results from _return_true.
    c                   S   s   dS rL   r   r   r   r   r   _return_true   s    z7test_checked_call_with_valid_call.<locals>._return_truerK   c                   S   s   dS rI   r   r   r   r   r   rM      r(   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rE   r   )rF   rU   Zchecked_callr   r   r   !test_checked_call_with_valid_call   s    rV   text)ZString_testTr/   r6   y              ?c                 C   sz   t tttf}t| |r0t| }|t | ksvJ nFdt| j }tj	t
|d t|  W d    n1 sl0    Y  d S )NzJonly str, int, float, and bool values can be copied to the clipboard, not rN   )strr   r   bool
isinstancer   typerP   rQ   rR   r   )rW   Zvalid_typesresultrS   r   r   r   test_stringify_text   s    
r]   c                 c   s`   t  \}}|  :}|tjjd| |tjjd| d V  W d    n1 sR0    Y  d S )NZclipboard_setZclipboard_get)r   rD   rE   pdio	clipboard)rF   Zqt_cutZqt_pasterG   r   r   r   set_pyqt_clipboard   s
    

ra   c                 c   s   |   }|V  |  d S )N)r`   clear)ZqappZclipr   r   r   r`      s    r`   c                   @   sF  e Zd Zejdg dejdg ddd Zdd Zd	d
 Zdd Z	ejdg dejdg ddd Z
ejdddgdd Zdd Zdd Zejddg dg dg dg dgfdg d g dg dgfgd!d" Zd#d$ Zejd%g d&d'd( Zejd)d*d+gd,d- Zd.d/ Zd0d1 ZdS )2TestClipboardr   )N	,|encoding)NzUTF-8zutf-8r   c                 C   s2   |j d ||d t|pdd|d}t|| d S )N)r   r   rg   rd   r   )r   Z	index_colrg   )to_clipboardr	   tmassert_frame_equal)selfrB   r   rg   r\   r   r   r   test_round_trip_frame_sep   s    z'TestClipboard.test_round_trip_frame_sepc                 C   s<   |j dd d t }| | ks(J |j|jks8J d S )NFr   r   )rh   r	   	to_stringshape)rk   rB   r\   r   r   r   test_round_trip_frame_string   s    z*TestClipboard.test_round_trip_frame_stringc                 C   sB   t jtddd |jddd W d    n1 s40    Y  d S )NzAto_clipboard in excel mode requires a single character separator.F)rO   Zcheck_stacklevelTz\trm   )ri   assert_produces_warningUserWarningrh   rk   rB   r   r   r   test_excel_sep_warning   s    z$TestClipboard.test_excel_sep_warningc                 C   s:   t   |jddd W d    n1 s,0    Y  d S )NFrd   rm   )ri   rq   rh   rs   r   r   r   test_copy_delim_warning   s    
z%TestClipboard.test_copy_delim_warning)rd   Nr   r   )TNr   c                 C   s6   t ||}|jf i | | |jddks2J d S )Nrd   r   )r   rh   rW   Zto_csv)rk   r   r   rB   r`   r   r   r   r    test_clipboard_copy_tabs_default   s    
z.TestClipboard.test_clipboard_copy_tabs_defaultNr   c                 C   sL   t |d}|jf i | tdd}| | ks8J |j|jksHJ d S )NFz\s+rv   )r   rh   r	   rn   ro   )rk   r   rB   r   r\   r   r   r   test_clipboard_copy_strings   s
    

z)TestClipboard.test_clipboard_copy_stringsc                 C   s   ddi}t d }|| tf i |}|jd dks>J t d }|| tf i |}t d }|| tf i |}t|| d S )Nenginepythonz^
            John James	Charlie Mingus
            1	2
            4	Harry Carney
            )r/   r/   zHarry Carneyz@
            a	 b
            1  2
            3  4
            z@
            a  b
            1  2
            3  4
            )r   stripsetTextr	   Zilocri   rj   )rk   r`   Zclip_kwargsrW   rB   resexpr   r   r   test_read_clipboard_infer_excel   s$    


z-TestClipboard.test_read_clipboard_infer_excelc                 C   s<   d}| | t }tg dg ddd}t|| d S )Nzcol1	col2
1	red
	blue
2	greenr/   Nr-   redbluegreenZcol1Zcol2)datar|   r	   r   ri   rj   )rk   r`   rW   rB   df_expectedr   r   r   test_infer_excel_with_nulls  s    
z)TestClipboard.test_infer_excel_with_nulls
multiindex
)z			col1	col2zA	0	True	1	redzA	1	True		bluezB	0	False	2	green)Ar   B)r   r/   r   )TTF)z		col1	col2z	A	0	1	redz	A	1		bluezB	0	2	greenc                 C   sB   | |d  t }tg dg dd|d d}t|| d S )Nr   r   r   r   r/   )r   indexr   )rk   r`   r   rB   r   r   r   r    test_infer_excel_with_multiindex+  s    z.TestClipboard.test_infer_excel_with_multiindexc                 C   sz   d}t jt|d |jdd W d    n1 s40    Y  t jt|d tdd W d    n1 sl0    Y  d S )Nz&clipboard only supports utf-8 encodingrN   ascii)rg   )rQ   rR   r@   rh   NotImplementedErrorr	   rk   rB   rS   r   r   r   test_invalid_encodingN  s
    *z#TestClipboard.test_invalid_encodingr   )u   👍...u   Ωœ∑`...zabcd...c                 C   s,   t d|gi}|  t }t|| d S )Nr   )r   rh   r	   ri   rj   )rk   r   rB   r\   r   r   r   test_raw_roundtripV  s    z TestClipboard.test_raw_roundtripry   r8   rz   c           	         s  |dks|dkrt d|dkrTttjddgtjd}ttjdtgtjd}np|dkr|dkrt dddlm   ddg} dd g}n$t	ddg}t	dd g}d	}|
| td
| td||d}W d    n1 s0    Y  t|tddgddtddgdd|tdtgddtdtgddtttgddtddgddtdtgddd	|dkrddlm  t fddjD  d d gd< t| d S )NZpyarrowrz   r3   y)Zdtyper8   r   )ArrowExtensionArrayz@a,b,c,d,e,f,g,h,i
x,1,4.0,x,2,4.0,,True,False
y,2,5.0,,,,,False,zmode.string_storagere   )r   dtype_backendry   r/   r-   ZInt64g      @g      @ZFloat64TFboolean)	r!   r"   r8   defghr&   c                    s$   i | ]}| j | d dqS )T)Zfrom_pandas)r;   )r%   colr   expectedpar   r   
<dictcomp>  s   zCTestClipboard.test_read_clipboard_dtype_backend.<locals>.<dictcomp>r   )rQ   Zimportorskipr   r:   r;   Zobject_r   Zpandas.arraysr   r
   r|   r^   Zoption_contextr	   r   r   r,   ri   rj   )	rk   r`   Zstring_storager   ry   Zstring_arrayZstring_array_narW   r\   r   r   r   !test_read_clipboard_dtype_backend^  sJ    


.
z/TestClipboard.test_read_clipboard_dtype_backendc                 C   s@   d}t jt|d tdd W d    n1 s20    Y  d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rN   numpy)r   )rQ   rR   r@   r	   )rk   rS   r   r   r   test_invalid_dtype_backend  s    z(TestClipboard.test_invalid_dtype_backendc                 C   sR   t dg di}d}tjt|d |dd  W d    n1 sD0    Y  d S )Nr!   )r/   r-   r+   zTStarting with pandas version 3.0 all arguments of to_clipboard will be keyword-only.rN   T)r   ri   rq   FutureWarningrh   r   r   r   r   &test_to_clipboard_pos_args_deprecation  s
    z4TestClipboard.test_to_clipboard_pos_args_deprecation)rP   
__module____qualname__rQ   markparametrizerl   rp   rt   ru   rw   rx   r   r   joinr   r   r   r   r   r   r   r   r   r   rc      sF   	
(


8rc   )'textwrapr   r   r:   rQ   Zpandas.errorsr   r   Zpandasr^   r   r   r   r   r	   Zpandas._testingZ_testingri   Zpandas.core.arraysr
   r   Zpandas.io.clipboardr   r   r   r   ZfixturerB   rH   r   ZusefixturesrT   rV   r   r]   ra   r`   Z
single_cpurc   r   r   r   r   <module>   sB   	
.










