U
    ¾mœd:  ã                   @   sz  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ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!d
dddddddddg
d�dd„ ƒZ"ej!dd„ ƒZ#ej$ %d¡dd„ ƒZ&ej$ %d¡dd„ ƒZ'ej$ (dddd d!d"g¡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_linuxÚ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   úW/home/sam/Atlas/atlas_env/lib/python3.8/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r‚t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rÔt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�rœtjddd-d„ ddd gd gd�S t‚d S ).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   s   t j d¡S ©Né   ©ÚnpÚrandomÚrandint©Úargsr   r   r   Ú<lambda>S   ó    zdf.<locals>.<lambda>)Z
data_gen_fr-   r.   r/   r0   r   z
in Englishu   en espaÃ±ol)ÚenÚesr    zdisplay.max_colwidthc                     s   dˆ  S )NÚxr   r8   ©Z_cwr   r   r:   `   r;   r!   ç      ð?g      @ç{®Gáz„?é   Zabcde)r%   r&   Úcr"   c                 S   s   t | ƒd S )NrA   )r"   )ÚrrC   r   r   r   r:   r   r;   r#   c                  W   s   t j d¡S r2   r4   r8   r   r   r   r:   |   r;   )Úparamr	   ÚtmZmakeCustomDataframer   Úsplitr5   ZarangeZastypeZint64ÚlistÚ
ValueError)ÚrequestZ	data_typeZmax_rowsr   r?   r   Údf1   sŒ    ÿ     ÿù	

ù	
ýÿ
ù	
ù
rK   c              	   c   s6   dd„ }|   ¡ �}|jd|dd� dV  W 5 Q R X 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)ÚmonkeypatchrL   Úmr   r   r   Úmock_ctypes†   s    
rQ   c              	   C   sN   dd„ }|   ddd„ ¡ d|j› d�}tjt|d�� t|ƒƒ  W 5 Q R X 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   r:   Ÿ   r;   z1test_checked_call_with_bad_call.<locals>.<lambda>zError calling z \(Window Error\)©ÚmatchN)rN   Ú__name__ÚpytestÚraisesr   r   )rO   rS   Úmsgr   r   r   Útest_checked_call_with_bad_call•   s
    r\   c                 C   s2   dd„ }|   ddd„ ¡ t|ƒ}|ƒ dks.t‚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 rU   r   r   r   r   r   Ú_return_true®   s    z7test_checked_call_with_valid_call.<locals>._return_truerT   c                   S   s   dS rR   r   r   r   r   r   r:   ±   r;   z3test_checked_call_with_valid_call.<locals>.<lambda>TN)rN   r   ÚAssertionError)rO   r]   Zchecked_callr   r   r   Ú!test_checked_call_with_valid_call¦   s    r_   ÚtextZString_testTr1   r@   y              ð?c              	   C   sf   t tttf}t| |ƒr0t| ƒ}|t | ƒksbt‚n2dt| ƒj› �}t	j
t|d�� t| ƒ W 5 Q R X d S )NzJonly str, int, float, and bool values can be copied to the clipboard, not rV   )Ústrr#   r"   ÚboolÚ
isinstancer   r^   ÚtyperX   rY   rZ   r   )r`   Zvalid_typesÚresultr[   r   r   r   Útest_stringify_text¸   s    
ÿrf   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_datarJ   r   r   Ú	_mock_setá   s    z!mock_clipboard.<locals>._mock_setc                      s   ˆ ˆj j S rg   rh   r   rm   r   r   Ú	_mock_getä   s    z!mock_clipboard.<locals>._mock_getz!pandas.io.clipboard.clipboard_setz!pandas.io.clipboard.clipboard_getN)rN   )rO   rJ   rn   ro   r   rm   r   Úmock_clipboardÑ   s    rp   c                 C   sF   dd l }|jj d¡ dt|  ¡ ƒks*t‚|jj ¡ }|dksBt‚d S )Nr   r'   )Úpandas.io.clipboardÚioÚ	clipboardr   ÚsetÚvaluesr^   r   )rp   Úpandasre   r   r   r   Útest_mock_clipboardí   s
    rw   c                
   @   s´  e Zd ZdFdd„Zdd„ Zej dddd	g¡d
d„ ƒZdd„ Z	dd„ Z
dd„ Zej ddddg¡ej ddddg¡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 d d!d"d#g¡d$d$d%gd&d'd&gdddggfd d(d)d*d+g¡d$d$d%gd&d'd&ggfg¡d,d-„ ƒZd.d/„ Zej d0d1d2d3g¡d4d5„ ƒZejjej d6d7d8d9g¡ejjej d:¡dk�oxeƒ  d;dd<�d=d>„ ƒƒƒZej d?d@dAg¡dBdC„ ƒZdDdE„ ZdS )GÚTestClipboardNc                 C   s2   |j |||d� t|pdd|d�}t ||¡ d S )N)r   r   Úencodingú	r   )r   Z	index_colry   )Úto_clipboardr   rF   Úassert_frame_equal)Úselfrl   r   r   ry   re   r   r   r   Úcheck_round_trip_frameû   s    z$TestClipboard.check_round_trip_framec                 C   s   |   |¡ d S rg   ©r~   ©r}   rK   r   r   r   Útest_round_trip_frame  s    z#TestClipboard.test_round_trip_framer   rz   ú,ú|c                 C   s   | j ||d� d S )N©r   r   )r}   rK   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(t‚|j|jks8t‚d S )NF©r   r   )r{   r   Ú	to_stringr^   Úshape)r}   rK   re   r   r   r   Útest_round_trip_frame_string
  s    z*TestClipboard.test_round_trip_frame_stringc              	   C   s.   t jtddd�� |jddd� W 5 Q R X d S )NzAto_clipboard in excel mode requires a single character separator.F)rW   Zcheck_stacklevelTz\tr†   )rF   Ú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 5 Q R X d S )NFrz   r†   )rF   rŠ   r{   r€   r   r   r   Útest_copy_delim_warning  s    
z%TestClipboard.test_copy_delim_warningr   r   Tc                 C   s6   t ||ƒ}|jf |Ž ||jj |jdd�ks2t‚d S )Nrz   r„   )r   r{   ri   rj   Zto_csvr^   )r}   r   r   rK   rJ   rp   r   r   r   r   Ú test_clipboard_copy_tabs_default!  s    
z.TestClipboard.test_clipboard_copy_tabs_defaultFc                 C   sH   t ||ƒ}|jf |Ž tdd�}| ¡ | ¡ ks4t‚|j|jksDt‚d S )Nz\s+r„   )r   r{   r   r‡   r^   rˆ   )r}   r   r   rK   r   re   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 |Ž}|jd d dks@t‚t d ¡ ƒ}|||jj< tf |Ž}t d ¡ ƒ}|||jj< tf |Ž}t ||¡ d S )NÚengineÚpythonz^
            John James	Charlie Mingus
            1	2
            4	Harry Carney
            r1   zHarry Carneyz@
            a	 b
            1  2
            3  4
            z@
            a  b
            1  2
            3  4
            )	r   Ústripri   rj   r   Zilocr^   rF   r|   )r}   rJ   rp   Zclip_kwargsr`   rK   ÚresÚexpr   r   r   Útest_read_clipboard_infer_excel2  s$    ÿ
ÿ
ÿ
z-TestClipboard.test_read_clipboard_infer_excelc                 C   sB   d}|||j j< tƒ }tdd dgdddgdœd�}t ||¡ d S )	Nzcol1	col2
1	red
	blue
2	greenr1   r3   ÚredÚblueÚgreen©Zcol1Zcol2rk   ©ri   rj   r   r	   rF   r|   )r}   rJ   rp   r`   rK   Údf_expectedr   r   r   Útest_infer_excel_with_nullsZ  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ÚAÚBr   r1   z		col1	col2z	A	0	1	redz	A	1		bluezB	0	2	greenc                 C   sH   |d ||j j< tƒ }tdd dgdddgdœ|d d�}t ||¡ d S )	Nr   r1   r3   r–   r—   r˜   r™   )rl   Úindexrš   )r}   rJ   rp   r�   rK   r›   r   r   r   Ú test_infer_excel_with_multiindexg  s    þz.TestClipboard.test_infer_excel_with_multiindexc              	   C   sR   d}t jt|d�� |jdd� W 5 Q R X t jt|d�� tdd� W 5 Q R X d S )Nz&clipboard only supports utf-8 encodingrV   Úascii©ry   )rY   rZ   rI   r{   ÚNotImplementedErrorr   )r}   rK   r[   r   r   r   Útest_invalid_encodingŠ  s
    z#TestClipboard.test_invalid_encodingÚenczUTF-8zutf-8r   c                 C   s   | j ||d� d S )Nr¤   r   )r}   r§   rK   r   r   r   Útest_round_trip_valid_encodings’  s    z-TestClipboard.test_round_trip_valid_encodingsrl   u   ðŸ‘�...u   Î©Å“âˆ‘Â´...zabcd...ZDISPLAYzBCannot be runed if a headless system is not put in place with Xvfb)ÚreasonÚstrictc                 C   s:   t |ƒ |tƒ kst‚tƒ r6tƒ r6tjdddgdd� d S )NZxselz--deletez--clipboardT)Úcheck)r   r   r^   r   r   Ú
subprocessÚrun)r}   rl   r   r   r   Útest_raw_roundtrip–  s    	z TestClipboard.test_raw_roundtripr�   rC   r‘   c           
         sv  |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 5 Q R X 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�rfd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�   r1   r3   ZInt64g      @g      @ZFloat64TFÚboolean)	r%   r&   rC   Ú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µ   )rY   Zimportorskipr   r5   r¸   Zobject_r   r   ri   rj   ÚpdZoption_contextr   r	   r
   Zpandas.arraysr·   ÚcolumnsrF   r|   )
r}   rJ   rp   Zstring_storager°   r�   Zstring_arrayZstring_array_nar`   re   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 5 Q R X d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rV   Únumpy)r°   )rY   rZ   rI   r   )r}   r[   r   r   r   Útest_invalid_dtype_backend×  s    ÿz(TestClipboard.test_invalid_dtype_backend)NNN)rX   Ú
__module__Ú__qualname__r~   r�   rY   Ú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   rx   ÷   s`   

	(üÿ÷
ÿüôþ

ý
1rx   )/rÊ   r¬   Útextwrapr   rÂ   r5   rY   Zpandas.compatr   r   r   Zpandas.errorsr   r   rv   r¿   r   r	   r
   r   r   Zpandas._testingZ_testingrF   Zpandas.core.arraysr   r   rq   r   r   r   r   r   ZfixturerK   rQ   rÆ   Zusefixturesr\   r_   rÇ   rf   rp   rs   rw   rÉ   rx   r   r   r   r   Ú<module>   sd   	öÿ
G




ûþ



	
