o
    iW/                     @   s   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
mZ d dl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 )    )dedentN)PyperclipExceptionPyperclipWindowsException)	DataFrame
get_optionread_clipboard)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   Y/var/www/edux/Edux_v2/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rAtjddddd gd gdS |dkr[td}tj|d ddd ddd gd gdS |dkrjtd d dS |d krtd!d  tjdd fd"dddd gd gdS |d#krttd$d%d& tdd'tj	t
d(d)S |d*krt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).Nr   z"a,	"b|cu   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      t jdS N   nprandomrandintargsr   r   r   <lambda>E       zdf.<locals>.<lambda>)
data_gen_fr&   r'   r(   r)   r   z
in Englishu   en español)enesr   zdisplay.max_colwidthc                     s   d  S )Nxr   r2   _cwr   r   r4   R   s    r         ?g      @{Gz?   abcde)r   r   cr   c                 S   s   t | d S )Nr=   )r   )rr@   r   r   r   r4   d   r5   r   c                  W   r+   r,   r.   r2   r   r   r   r4   n   r5   )paramr   tmmakeCustomDataframer   splitr/   arangeastypeint64list
ValueError)request	data_typemax_rowsr   r:   r   df#   s   	
		
rN   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_error~      z$mock_ctypes.<locals>._mock_win_errorzctypes.WinErrorF)raisingN)contextsetattr)monkeypatchrP   mr   r   r   mock_ctypesx   s   
"rW   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   rO   NFr   r   r   r   r   _return_false   rQ   z6test_checked_call_with_bad_call.<locals>._return_falsepandas.io.clipboard.get_errnoc                   S   rO   NTr   r   r   r   r   r4          z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)matchN)rT   __name__pytestraisesr   r   )rU   rY   msgr   r   r   test_checked_call_with_bad_call   s   "rc   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   rO   r[   r   r   r   r   r   _return_true   rQ   z7test_checked_call_with_valid_call.<locals>._return_truerZ   c                   S   rO   rX   r   r   r   r   r   r4      r\   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rT   r   )rU   rd   checked_callr   r   r   !test_checked_call_with_valid_call   s   rf   text)String_testTr*   r<   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`   ra   r   )rg   valid_typesresultrb   r   r   r   test_stringify_text   s   

"ro   c                 #   sD    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
_mock_datarK   r   r   	_mock_set   s   z!mock_clipboard.<locals>._mock_setc                      s    j j S rp   rq   r   rv   r   r   	_mock_get   s   z!mock_clipboard.<locals>._mock_getz!pandas.io.clipboard.clipboard_setz!pandas.io.clipboard.clipboard_getN)rT   )rU   rK   rx   ry   r   rv   r   mock_clipboard   s   
rz   c                 C   sF   dd l }|jjd dt|  v sJ |jj }|dks!J d S )Nr   r    )pandas.io.clipboardio	clipboardr   setvaluesr
   )rz   pandasrn   r   r   r   test_mock_clipboard   s
   r   c                   @   sX  e Zd Zd2d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d,g d-ejjd.edd/d0d1 ZdS )3TestClipboardNc                 C   s2   |j |||d t|pdd|d}t|| d S )N)r   r   encoding	r   )r   	index_colr   )to_clipboardr   rC   assert_frame_equal)selfru   r   r   r   rn   r   r   r   check_round_trip_frame   s   z$TestClipboard.check_round_trip_framec                 C   s   |  | d S rp   r   r   rN   r   r   r   test_round_trip_frame   s   z#TestClipboard.test_round_trip_framer   )r   ,|c                 C   s   | j ||d d S )Nr   r   )r   rN   r   r   r   r   test_round_trip_frame_sep      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   rN   rn   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   )rC   assert_produces_warningUserWarningr   r   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 )NFr   r   )rC   r   r   r   r   r   r   test_copy_delim_warning  s   
"z%TestClipboard.test_copy_delim_warning)r   Nr   r   )TNr   c                 C   s:   t ||}|jdi | ||jj |jddksJ d S )Nr   r   r   )r   r   rr   rs   to_csv)r   r   r   rN   rK   rz   r   r   r   r    test_clipboard_copy_tabs_default  s   
 z.TestClipboard.test_clipboard_copy_tabs_defaultr   Fc                 C   sL   t ||}|jdi | tdd}| | ksJ |j|jks$J d S )Nz\s+r   r   )r   r   r   r   r   )r   r   r   rN   r   rn   r   r   r   test_clipboard_copy_strings  s
   

z)TestClipboard.test_clipboard_copy_stringsc                 C   s   ddi}t d }|||jj< tdi |}|jd d dks"J t d }|||jj< tdi |}t d }|||jj< tdi |}t|| d S )	Nenginepythonz^
            John James	Charlie Mingus
            1	2
            4	Harry Carney
            r*   zHarry Carneyz@
            a	 b
            1  2
            3  4
            z@
            a  b
            1  2
            3  4
            r   )r   striprr   rs   r   ilocrC   r   )r   rK   rz   clip_kwargsrg   rN   resexpr   r   r   test_read_clipboard_infer_excel$  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r*   Nr-   redbluegreencol1col2rt   rr   rs   r   r   rC   r   )r   rK   rz   rg   rN   df_expectedr   r   r   test_infer_excel_with_nullsL  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   sD   |d ||j j< t }tg dg dd|d d}t|| d S )Nr   r   r   r   r*   )ru   indexr   )r   rK   rz   r   rN   r   r   r   r    test_infer_excel_with_multiindexY  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`   ra   rJ   r   NotImplementedErrorr   )r   rN   rb   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   rN   r   r   r   test_round_trip_valid_encodings  r   z-TestClipboard.test_round_trip_valid_encodingsru   )u   👍...u   Ωœ∑´...zabcd...z4Flaky test in multi-process CI environment: GH 44584)reasonra   strictc                 C   s   t | |t ksJ d S rp   )r   r
   )r   ru   r   r   r   test_raw_roundtrip  s   z TestClipboard.test_raw_roundtrip)NNN)r_   
__module____qualname__r   r   r`   markparametrizer   r   r   r   r   r   r   r   joinr   r   r   xfailAssertionErrorr   r   r   r   r   r      sR    

	(

r   )#textwrapr   numpyr/   r`   pandas.errorsr   r   r   r   r   r   pandas._testing_testingrC   r{   r   r	   r
   r   r   fixturerN   rW   r   usefixturesrc   rf   r   ro   rz   r}   r   
single_cpur   r   r   r   r   <module>   s>    	
G








	
