a
    d9                     @   sX  d dl Z d dlmZ d dlZd dlZd dlmZm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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"j)dd Z*ej"j+ej"j)ej"#dG dd dZ,dS )    N)dedent)is_ci_environmentis_platform_mac)PyperclipExceptionPyperclipWindowsException)NA	DataFrameSeries
get_optionread_clipboard)ArrowStringArrayStringArray)CheckedCall_stringifyTextclipboard_getclipboard_setc                 C   s(   i }|dkr||d< | dkr$| |d< |S )Ndefaultexcelsep )r   r   kwargsr   r   g/var/www/html/stable-diffusion-webui/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jddddd gd gdS |dkrtd}tj|d ddd ddd gd gdS |dkrtd d dS |d krtd!d  tjdd fd"dddd gd gdS |d#krHttd$d%d& tdd'tj	t
d(d)S |d*krrtjddd+d ddd gd gdS |d,krtjddd-d ddd gd g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         si)
c_idx_type
r_idx_typec_idx_namesr_idx_namesr   zdisplay.max_rows   c                  W   s   t jddS N   nprandomZdefault_rngZintegersargsr   r   r   <lambda>Q       zdf.<locals>.<lambda>)Z
data_gen_fr,   r-   r.   r/   r   z
in Englishu   en español)enesr   zdisplay.max_colwidthc                     s   d  S )Nxr   r6   Z_cwr   r   r8   ^   r9   r          ?g      @{Gz?   Zabcde)r$   r%   cr!   c                 S   s   t | d S )Nr?   )r!   )rrA   r   r   r   r8   p   r9   r"   c                  W   s   t jddS r1   r3   r6   r   r   r   r8   z   r9   )paramr   tmZmakeCustomDataframer
   splitr4   ZarangeZastypeint64list
ValueError)requestZ	data_typeZmax_rowsr   r=   r   df/   s    	

	

	

rJ   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_error   s    z$mock_ctypes.<locals>._mock_win_errorzctypes.WinErrorF)ZraisingN)contextsetattr)monkeypatchrK   mr   r   r   mock_ctypes   s    
rP   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   r8      r9   z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rM   __name__pytestraisesr   r   )rN   rR   msgr   r   r   test_checked_call_with_bad_call   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   s   dS rT   r   r   r   r   r   _return_true   s    z7test_checked_call_with_valid_call.<locals>._return_truerS   c                   S   s   dS rQ   r   r   r   r   r   r8      r9   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rM   r   )rN   r\   Zchecked_callr   r   r   !test_checked_call_with_valid_call   s    r]   text)ZString_testTr0   r>   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 rU   )strr"   r!   bool
isinstancer   typerW   rX   rY   r   )r^   Zvalid_typesresultrZ   r   r   r   test_stringify_text   s    
rd   c                 #   sB   i   fdd} fdd}|  d| |  d|  V  dS )aM  Fixture mocking clipboard IO.

    This mocks pandas.io.clipboard.clipboard_get and
    pandas.io.clipboard.clipboard_set.

    This uses a local dict for storing data. The dictionary
    key used is the test ID, available with ``request.node.name``.

    This returns the local dictionary, for direct manipulation by
    tests.
    c                    s   |  j j< d S NnodenamedataZ
_mock_datarI   r   r   	_mock_set   s    z!mock_clipboard.<locals>._mock_setc                      s    j j S re   rf   r   rk   r   r   	_mock_get   s    z!mock_clipboard.<locals>._mock_getz!pandas.io.clipboard.clipboard_setz!pandas.io.clipboard.clipboard_getN)rM   )rN   rI   rl   rm   r   rk   r   mock_clipboard   s    rn   c                 C   sF   dd l }|jjd dt|  v s*J |jj }|dksBJ d S )Nr   r&   )pandas.io.clipboardio	clipboardr   setvaluesr   )rn   pandasrc   r   r   r   test_mock_clipboard   s
    ru   c                   @   s  e Zd Zd:ddZdd Z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ej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jejd,g d-ejjejd.du r`e  pde d/e  d0d1d2 Zejd3d4d5gd6d7 Zd8d9 ZdS );TestClipboardNc                 C   s2   |j |||d t|pdd|d}t|| d S )N)r   r   encoding	r   )r   Z	index_colrw   )to_clipboardr   rD   assert_frame_equal)selfrj   r   r   rw   rc   r   r   r   check_round_trip_frame   s    z$TestClipboard.check_round_trip_framec                 C   s   |  | d S re   r|   r{   rJ   r   r   r   test_round_trip_frame   s    z#TestClipboard.test_round_trip_framer   )rx   ,|c                 C   s   | j ||d d S )Nr   r}   )r{   rJ   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   )ry   r   	to_stringshape)r{   rJ   rc   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)rV   Zcheck_stacklevelTz\tr   )rD   assert_produces_warningUserWarningry   r~   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 )NFrx   r   )rD   r   ry   r~   r   r   r   test_copy_delim_warning  s    
z%TestClipboard.test_copy_delim_warning)rx   Nr   r   )TNr   c                 C   s:   t ||}|jf i | ||jj |jddks6J d S )Nrx   r   )r   ry   rg   rh   Zto_csv)r{   r   r   rJ   rI   rn   r   r   r   r    test_clipboard_copy_tabs_default  s    
z.TestClipboard.test_clipboard_copy_tabs_defaultr   Fc                 C   sL   t ||}|jf i | tdd}| | ks8J |j|jksHJ d S )Nz\s+r   )r   ry   r   r   r   )r{   r   r   rJ   r   rc   r   r   r   test_clipboard_copy_strings'  s
    

z)TestClipboard.test_clipboard_copy_stringsc                 C   s   ddi}t d }|||jj< tf i |}|jd dks@J t d }|||jj< tf i |}t d }|||jj< tf i |}t|| d S )Nenginepythonz^
            John James	Charlie Mingus
            1	2
            4	Harry Carney
            )r0   r0   zHarry Carneyz@
            a	 b
            1  2
            3  4
            z@
            a  b
            1  2
            3  4
            )r   striprg   rh   r   ZilocrD   rz   )r{   rI   rn   Zclip_kwargsr^   rJ   resexpr   r   r   test_read_clipboard_infer_excel0  s$    z-TestClipboard.test_read_clipboard_infer_excelc                 C   s>   d}|||j j< t }tg dg ddd}t|| d S )Nzcol1	col2
1	red
	blue
2	greenr0   Nr2   ZredZblueZgreenZcol1Zcol2ri   rg   rh   r   r   rD   rz   )r{   rI   rn   r^   rJ   df_expectedr   r   r   test_infer_excel_with_nullsX  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   r0   r   )TTF)z		col1	col2z	A	0	1	redz	A	1		bluezB	0	2	greenc                 C   sD   |d ||j j< t }tg dg dd|d d}t|| d S )Nr   r   r   r   r0   )rj   indexr   )r{   rI   rn   r   rJ   r   r   r   r    test_infer_excel_with_multiindexe  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 encodingrU   asciirw   )rX   rY   rH   ry   NotImplementedErrorr   )r{   rJ   rZ   r   r   r   test_invalid_encoding  s
    *z#TestClipboard.test_invalid_encodingenc)zUTF-8zutf-8r   c                 C   s   | j ||d d S )Nr   r}   )r{   r   rJ   r   r   r   test_round_trip_valid_encodings  s    z-TestClipboard.test_round_trip_valid_encodingsrj   )u   👍...u   Ωœ∑`...zabcd...ZDISPLAYz>Cannot pass if a headless system is not put in place with Xvfb)reasonstrictc                 C   s   t | |t ksJ d S re   )r   r   )r{   rj   r   r   r   test_raw_roundtrip  s    
z TestClipboard.test_raw_roundtripr   rA   r   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}n$tddg}tdd g}d}|||jj	< t
d| td||d	}	W d    n1 s0    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rzddlm  t fddjD  d d gd< t|	 d S )NZpyarrowr   r<   y)Zdtypez@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   r0   r2   ZInt64g      @g      @ZFloat64TFboolean)	r$   r%   rA   defghr+   r   )ArrowExtensionArrayc                    s$   i | ]}| j | d dqS )T)Zfrom_pandas)array).0colr   expectedpar   r   
<dictcomp>  s   zCTestClipboard.test_read_clipboard_dtype_backend.<locals>.<dictcomp>r   )rX   Zimportorskipr   r4   r   Zobject_r   r   rg   rh   pdZoption_contextr   r   r	   Zpandas.arraysr   columnsrD   rz   )
r{   rI   rn   Zstring_storager   r   Zstring_arrayZstring_array_nar^   rc   r   r   r   !test_read_clipboard_dtype_backend  s@    
,
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.rU   numpy)r   )rX   rY   rH   r   )r{   rZ   r   r   r   test_invalid_dtype_backend  s    z(TestClipboard.test_invalid_dtype_backend)NNN)rW   
__module____qualname__r|   r   rX   markparametrizer   r   r   r   r   r   r   r   joinr   r   r   
single_cpuZxfailosenvirongetr   r   r   r   r   r   r   r   r   rv      sZ   

	(


1rv   )-r   textwrapr   r   r4   rX   Zpandas.compatr   r   Zpandas.errorsr   r   rt   r   r   r   r	   r
   r   Zpandas._testingZ_testingrD   Zpandas.core.arraysr   r   ro   r   r   r   r   r   ZfixturerJ   rP   r   Zusefixturesr[   r]   r   rd   rn   rq   ru   r   rv   r   r   r   r   <module>   sD   	
G








	
