o
    թZh3                     @   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   U/var/www/html/lang_env/lib/python3.10/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r!tdd	gd
dgdS |dkr0tddgddgdS |dkrJttdd tdD ddtddS |dkrhtd}ttj	dj
dd|d dfdtddS |dkrwtd d  d!S |d"krtd#d  tt fd$dtdD ddtddS |d%krt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)/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   s    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   s    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   r4   r   df)   sP   $(rA   c                 c   sN    dd }|   }|jd|dd dV  W d   dS 1 s w   Y  dS )z<
    Mocks WinError to help with testing the clipboard.
    c                   S      dS )NzWindow Errorr   r   r   r   r   _mock_win_errork      z$mock_ctypes.<locals>._mock_win_errorzctypes.WinErrorF)ZraisingN)contextsetattr)monkeypatchrC   mr   r   r   mock_ctypese   s   
"rI   c                 C   sd   dd }|  ddd  d|j d}tjt|d t|  W d	   d	S 1 s+w   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   rB   NFr   r   r   r   r   _return_false{   rD   z6test_checked_call_with_bad_call.<locals>._return_falsepandas.io.clipboard.get_errnoc                   S   rB   NTr   r   r   r   r   <lambda>~       z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rF   __name__pytestraisesr   r   )rG   rK   msgr   r   r   test_checked_call_with_bad_callt   s   "rV   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   rB   rM   r   r   r   r   r   _return_true   rD   z7test_checked_call_with_valid_call.<locals>._return_truerL   c                   S   rB   rJ   r   r   r   r   r   rN      rO   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rF   r   )rG   rW   Zchecked_callr   r   r   !test_checked_call_with_valid_call   s   rX   text)ZString_testTr.   r5   y              ?c                 C   s~   t tttf}t| |rt| }|t | ksJ d S dt| j }tj	t
|d t|  W d    d S 1 s8w   Y  d S )NzJonly str, int, float, and bool values can be copied to the clipboard, not rP   )strr   r   bool
isinstancer   typerR   rS   rT   r   )rY   Zvalid_typesresultrU   r   r   r   test_stringify_text   s   

"r_   c                 c   sd    t  \}}|  }|tjjd| |tjjd| d V  W d    d S 1 s+w   Y  d S )NZclipboard_setZclipboard_get)r   rE   rF   pdio	clipboard)rG   Zqt_cutZqt_pasterH   r   r   r   set_pyqt_clipboard   s   

"rc   c                 c   s    |   }|V  |  d S )N)rb   clear)ZqappZclipr   r   r   rb      s   rb   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   ri   rf   r   )r   Z	index_colri   )to_clipboardr	   tmassert_frame_equal)selfrA   r   ri   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sJ d S )NFr   r   )rj   r	   	to_stringshape)rm   rA   r^   r   r   r   test_round_trip_frame_string   s   z*TestClipboard.test_round_trip_frame_stringc                 C   sD   t jtddd |jddd W d    d S 1 sw   Y  d S )NzAto_clipboard in excel mode requires a single character separator.F)rQ   Zcheck_stacklevelTz\tro   )rk   assert_produces_warningUserWarningrj   rm   rA   r   r   r   test_excel_sep_warning   s   "z$TestClipboard.test_excel_sep_warningc                 C   s<   t   |jddd W d    d S 1 sw   Y  d S )NFrf   ro   )rk   rs   rj   ru   r   r   r   test_copy_delim_warning   s   
"z%TestClipboard.test_copy_delim_warning)rf   Nr   r   )TNr   c                 C   s6   t ||}|jdi | | |jddksJ d S )Nrf   r   r   )r   rj   rY   Zto_csv)rm   r   r   rA   rb   r   r   r   r    test_clipboard_copy_tabs_default   s   
z.TestClipboard.test_clipboard_copy_tabs_defaultNr   c                 C   sL   t |d}|jdi | tdd}| | ksJ |j|jks$J d S )NFz\s+rx   r   )r   rj   r	   rp   rq   )rm   r   rA   r   r^   r   r   r   test_clipboard_copy_strings   s
   

z)TestClipboard.test_clipboard_copy_stringsc                 C   s   ddi}t d }|| tdi |}|jd dksJ t d }|| tdi |}t d }|| td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   )r   stripsetTextr	   Zilocrk   rl   )rm   rb   Zclip_kwargsrY   rA   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   rk   rl   )rm   rb   rY   rA   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   )rm   rb   r   rA   r   r   r   r    test_infer_excel_with_multiindex+  s   z.TestClipboard.test_infer_excel_with_multiindexc                 C   s|   d}t jt|d |jdd W d    n1 sw   Y  t jt|d tdd W d    d S 1 s7w   Y  d S )Nz&clipboard only supports utf-8 encodingrP   ascii)ri   )rS   rT   r?   rj   NotImplementedErrorr	   rm   rA   rU   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   rj   r	   rk   rl   )rm   r   rA   r^   r   r   r   test_raw_roundtripV  s   z TestClipboard.test_raw_roundtripr{   r7   r|   c           	         s  |dks|dkrt d|dkr*ttjddgtjd}ttjdtgtjd}n8|dkrP|dkrPt 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 sw   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pyarrowr|   r2   y)Zdtyper7   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_storagerg   )r   dtype_backendr{   r.   r,   ZInt64g      @g      @ZFloat64TFboolean)	r!   r"   r7   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   )rS   Zimportorskipr   r9   r:   Zobject_r   Zpandas.arraysr   r
   r~   r`   Zoption_contextr	   r   r   r+   rk   rl   )	rm   rb   Zstring_storager   r{   Zstring_arrayZstring_array_narY   r^   r   r   r   !test_read_clipboard_dtype_backend^  sL   


z/TestClipboard.test_read_clipboard_dtype_backendc                 C   sB   d}t jt|d tdd W d    d S 1 sw   Y  d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rP   numpy)r   )rS   rT   r?   r	   )rm   rU   r   r   r   test_invalid_dtype_backend  s
   "z(TestClipboard.test_invalid_dtype_backendc                 C   sT   t dg di}d}tjt|d |dd  W d    d S 1 s#w   Y  d S )Nr!   )r.   r,   r*   zTStarting with pandas version 3.0 all arguments of to_clipboard will be keyword-only.rP   T)r   rk   rs   FutureWarningrj   r   r   r   r   &test_to_clipboard_pos_args_deprecation  s   "z4TestClipboard.test_to_clipboard_pos_args_deprecation)rR   
__module____qualname__rS   markparametrizern   rr   rv   rw   ry   rz   r   r   joinr   r   r   r   r   r   r   r   r   r   re      sH    	
(


8re   )'textwrapr   r   r9   rS   Zpandas.errorsr   r   Zpandasr`   r   r   r   r   r	   Zpandas._testingZ_testingrk   Zpandas.core.arraysr
   r   Zpandas.io.clipboardr   r   r   r   ZfixturerA   rI   r   ZusefixturesrV   rX   r   r_   rc   rb   Z
single_cpure   r   r   r   r   <module>   sD    	
.






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