o
    h3                     @   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   r/var/www/html/construction_image-detection-poc/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>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%   __cwr   r   r'   Q   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   r4   r   df)   sP   $(rK   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)raisingN)contextsetattr)monkeypatchrM   mr   r   r   mock_ctypese   s   
"rT   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   rL   NFr   r   r   r   r   _return_false{   rN   z6test_checked_call_with_bad_call.<locals>._return_falsepandas.io.clipboard.get_errnoc                   S   rL   NTr   r   r   r   r   <lambda>~       z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rQ   __name__pytestraisesr   r   )rR   rV   msgr   r   r   test_checked_call_with_bad_callt   s   "ra   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   rL   rX   r   r   r   r   r   _return_true   rN   z7test_checked_call_with_valid_call.<locals>._return_truerW   c                   S   rL   rU   r   r   r   r   r   rY      rZ   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rQ   r   )rR   rb   checked_callr   r   r   !test_checked_call_with_valid_call   s   rd   text)String_testTr.   r6   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 r[   )strr   r   bool
isinstancer   typer]   r^   r_   r   )re   valid_typesresultr`   r   r   r   test_stringify_text   s   

"rm   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   rP   rQ   pdio	clipboard)rR   qt_cutqt_pasterS   r   r   r   set_pyqt_clipboard   s   

"ru   c                 c   s    |   }|V  |  d S )N)rr   clear)qappclipr   r   r   rr      s   rr   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}   rz   r   )r   	index_colr}   )to_clipboardr	   tmassert_frame_equal)selfrK   r   r}   rl   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   rK   rl   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)r\   check_stacklevelTz\tr   )r   assert_produces_warningUserWarningr   r   rK   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 )NFrz   r   )r   r   r   r   r   r   r   test_copy_delim_warning   s   
"z%TestClipboard.test_copy_delim_warning)rz   Nr   r   )TNr   c                 C   s6   t ||}|jdi | | |jddksJ d S )Nrz   r   r   )r   r   re   to_csv)r   r   r   rK   rr   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   rK   r   rl   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   rr   clip_kwargsre   rK   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   rr   re   rK   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   rr   r   rK   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 encodingr[   ascii)r}   )r^   r_   rG   r   NotImplementedErrorr	   r   rK   r`   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   r   r	   r   r   )r   r   rK   rl   r   r   r   test_raw_roundtripV  s   z TestClipboard.test_raw_roundtripr   r9   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 )Npyarrowr   r2   y)dtyper9   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_storager{   )r   dtype_backendr   r.   r,   Int64g      @g      @Float64TFboolean)	r!   r"   r9   defghr&   c                    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   )r^   importorskipr   r;   r<   object_r   pandas.arraysr   r
   r   rp   option_contextr	   r   r   r+   r   r   )	r   rr   string_storager   r   string_arraystring_array_nare   rl   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.r[   numpy)r   )r^   r_   rG   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.r[   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   ry      sH    	
(


8ry   )'textwrapr   r   r;   r^   pandas.errorsr   r   pandasrp   r   r   r   r   r	   pandas._testing_testingr   pandas.core.arraysr
   r   pandas.io.clipboardr   r   r   r   fixturerK   rT   r   usefixturesra   rd   r   rm   ru   rr   
single_cpury   r   r   r   r   <module>   sD    	
.






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