o
    vh$3                     @   s6  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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)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   \/var/www/html/hyperkenya/venv/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>@   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#   __cwr   r   r%   M   s    r         ?g      @g{Gz?   abcde)r   r    cr   )r'   r(   r   )paramr   nparrayrangereshapelistr   randomdefault_rngintegerssplitarangeastypeint64
ValueError)request	data_typemax_rowsr   r2   r   df%   sP   $(rI   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_errorg      z$mock_ctypes.<locals>._mock_win_errorzctypes.WinErrorF)raisingN)contextsetattr)monkeypatchrK   mr   r   r   mock_ctypesa   s   
"rR   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   rJ   NFr   r   r   r   r   _return_falsew   rL   z6test_checked_call_with_bad_call.<locals>._return_falsepandas.io.clipboard.get_errnoc                   S   rJ   NTr   r   r   r   r   <lambda>z       z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rO   __name__pytestraisesr   r
   )rP   rT   msgr   r   r   test_checked_call_with_bad_callp   s   "r_   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   rJ   rV   r   r   r   r   r   _return_true   rL   z7test_checked_call_with_valid_call.<locals>._return_truerU   c                   S   rJ   rS   r   r   r   r   r   rW      rX   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rO   r
   )rP   r`   checked_callr   r   r   !test_checked_call_with_valid_call   s   rb   text)String_testTr,   r4   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 rY   )strr   r   bool
isinstancer   typer[   r\   r]   r   )rc   valid_typesresultr^   r   r   r   test_stringify_text   s   

"rk   c                 c   sd    t  \}}|  }|tjjd| |tjjd| d V  W d    d S 1 s+w   Y  d S )Nclipboard_setclipboard_get)r   rN   rO   pdio	clipboard)rP   qt_cutqt_pasterQ   r   r   r   set_pyqt_clipboard   s   

"rs   c                 c   s    |   }|V  |  d S )N)rp   clear)qappclipr   r   r   rp      s   rp   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   r{   rx   r   )r   	index_colr{   )to_clipboardr	   tmassert_frame_equal)selfrI   r   r{   rj   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   )r}   r	   	to_stringshape)r   rI   rj   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)rZ   check_stacklevelTz\tr   )r~   assert_produces_warningUserWarningr}   r   rI   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 )NFrx   r   )r~   r   r}   r   r   r   r   test_copy_delim_warning   s   
"z%TestClipboard.test_copy_delim_warning)rx   Nr   r   )TNr   c                 C   s6   t ||}|jdi | | |jddksJ d S )Nrx   r   r   )r   r}   rc   to_csv)r   r   r   rI   rp   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+r   r   )r   r}   r	   r   r   )r   r   rI   r   rj   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	   ilocr~   r   )r   rp   clip_kwargsrc   rI   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col1col2)datar   r	   r   r~   r   )r   rp   rc   rI   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   )r   rp   r   rI   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 encodingrY   ascii)r{   )r\   r]   rE   r}   NotImplementedErrorr	   r   rI   r^   r   r   r   test_invalid_encodingJ  s   "z#TestClipboard.test_invalid_encodingr   )u   👍...u   Ωœ∑`...zabcd...c                 C   s,   t d|gi}|  t }t|| d S )Nr   )r   r}   r	   r~   r   )r   r   rI   rj   r   r   r   test_raw_roundtripR  s   z TestClipboard.test_raw_roundtripr   r7   r   c           	         s  |dkr!t d|dkr|dkrt }nt }nt|}d}|| td| t	d||d}W d    n1 sEw   Y  t
tddg|d	td
dgdd	tddgdd	tdd g|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< |rjtj|tjd_t| d S )Npyarrowr7   z@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_storagery   )r   dtype_backendr   r0   y)dtyper,   r*   Int64g      @g      @Float64TFboolean)	r   r    r7   defghr$   r   )ArrowExtensionArrayc                    s$   i | ]}| j | d dqS )T)from_pandas)r:   )r#   colr   expectedpar   r   
<dictcomp>  s    zCTestClipboard.test_read_clipboard_dtype_backend.<locals>.<dictcomp>r   )na_value)r\   importorskiprn   
ArrowDtypelarge_stringr   StringDtyper   option_contextr	   r   r   r   pandas.arraysr   r)   r:   rC   r9   nanr~   r   )	r   rp   string_storager   r   using_infer_stringstring_dtyperc   rj   r   r   r   !test_read_clipboard_dtype_backendZ  sH   


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.rY   numpy)r   )r\   r]   rE   r	   )r   r^   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.rY   T)r   r~   r   FutureWarningr}   r   r   r   r   &test_to_clipboard_pos_args_deprecation  s   "z4TestClipboard.test_to_clipboard_pos_args_deprecation)r[   
__module____qualname__r\   markparametrizer   r   r   r   r   r   r   r   joinr   r   r   r   r   r   r   r   r   r   rw      sH    	
(


5rw   )$textwrapr   r   r9   r\   pandas.errorsr   r   pandasrn   r   r   r   r   r	   pandas._testing_testingr~   pandas.io.clipboardr
   r   r   r   fixturerI   rR   r   usefixturesr_   rb   r   rk   rs   rp   
single_cpurw   r   r   r   r   <module>   sB    	
.






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