o
    �¨Êhö3  ã                   @   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   úP/var/www/html/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r™td#ƒd ‰ tt ‡ fd$d„tdƒD ƒ¡ dd¡tdƒd�S |d%krµtt d&d'¡d( t dd)¡ tj¡td*ƒd+œƒS |d,krÈttj 	d¡ d-¡tdƒd�S |d.krÝt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{®Gáz„?é   Ú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 s�w   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rád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    	ÿ
.




þ

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