o
    Zh=7                     @   s  d Z ddlmZ ddlZddlZddlZddlZddl	Z	ddl
ZddlZddlmZ ddlmZmZmZmZmZmZmZmZ dd Ze Zeg dZeed	d
geddgdZdd Zdd Z dd Z!dd Z"dd Z#dd Z$e	j%j&ej'dkoej(dd
 dkdddd Z)e	j%j&ej'dkoej(dd
 dkddd d! Z*d"d# Z+d$d% Z,d&d' Z-d(d) Z.d*d+ Z/d,d- Z0d.d/ Z1e2d0kre	3  dS dS )1z
Tests for utils.py
    )defaultdictN)PY2)sort_againstis_supportedvalue_to_displayget_sizeget_supported_typesget_type_stringget_numpy_type_stringis_editable_typec                  C   s4   t t} tdD ]}dd tdD }|| |< q| S )zTaken from issue #4221.iP  c                 S   s   i | ]	}|t jd qS )
   )nprandomZrand).0j r   ]/var/www/html/lang_env/lib/python3.10/site-packages/spyder_kernels/utils/tests/test_nsview.py
<dictcomp>%   s    z+generate_complex_object.<locals>.<dictcomp>r   )r   listrange)bugiar   r   r   generate_complex_object!   s
   
r            r   r   r      r   r   c                  C   s  G dd d} t g dtg dtg ddddddg}|D ]
}t|dks*J q tg dg dg}t|dks>J tg d}t|d	ksMJ tg d}t|d	ks\J tj	g dg dgtj
d
}t|dksrJ tjdd}t|dksJ |  }t|dksJ dS )z6Test that the size of all values is returned correctlyc                       s   e Zd Z fddZ  ZS )z*test_get_size.<locals>.RecursionClassNoLenc                    s   |dkr| j S tt| |S )Nsize)namesuperobject__getattribute__)selfr!   	__class__r   r   __getattr__5   s   z6test_get_size.<locals>.RecursionClassNoLen.__getattr__)__name__
__module____qualname__r(   __classcell__r   r   r&   r   RecursionClassNoLen4   s    r-   r   Z123r   r   r   )r   r   )r   )ZdtypeRGB   r0   N)r   tuplesetr   pd	DataFrameSeriesIndexr   arrayZ
complex128PILImagenew)r-   lengthobjdfZarrimgr   r   r   test_get_size1   s$    
r?   c                  C   s.   g d} g d}t | |}|g dksJ d S )N)         )r   r   r   )rB   r@   rA   r   ZlistaZlistbresr   r   r   test_sort_againstT   s   
rF   c                  C   s*   g d} g d}t | |}|| ksJ d S )N)r   r   r   )r   r   r   rC   rD   r   r   r   test_sort_against_is_stable[   s   
rG   c                  C   s   t  } d}d}g d}ddd}dg ddf}t|t| | ds#J t|t| | ds/J t|t| | ds;J t|t| | dsGJ dS )	z/Tests that None values are displayed by defaulteditableN)r   Nr   Nr   r   b)r   Nr   eggsfilters)r   r   r1   )supported_typesmodeZnone_varZ	none_listZ	none_dictZ
none_tupler   r   r   test_none_values_are_supportedb   s   
rP   c                  C   s.   G dd dt } |  }t|}d|v sJ dS )z:Test for value_to_display of subclasses of str/basestring.c                   @   s   e Zd Zdd ZdS )z'test_str_subclass_display.<locals>.Testc                 S   s   dS )Ntestr   )r%   r   r   r   __repr__s   s   z0test_str_subclass_display.<locals>.Test.__repr__N)r)   r*   r+   rR   r   r   r   r   Testr   s    rS   zTest objectN)strr   )rS   valueZvalue_displayr   r   r   test_str_subclass_displayp   s   rV   c                   C   s:   t tdksJ t ttdksJ t tdksJ dS )zTests for default_display.z(defaultdict object of collections modulezndarray object of numpy modulez,Dataset object of xarray.core.dataset moduleN)r   COMPLEX_OBJECTr   r7   DATASETr   r   r   r   test_default_displayz   s   rY   darwin)r      zFails on Mac with Python 3.8)reasonc                  C   sL  t td} tg ddksJ t| dksJ t| gd dks#J ddd	d
d  d }t| gd |d
d d ksAJ tddddgdgg|  dksRJ tddtggdks^J tddtgtggdkslJ ttgdksuJ ttddddtg}d}t||ksJ tt d }t	dg}t|dksJ t
||dsJ d
S )zTests for display of lists.d   r   z	[1, 2, 3]z#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...]r   zB[[0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...]][ z[0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], [0, 1, 2, 3, 4, ...], N]r   F    ...r   r   r   r@   z5[[1, 2, 3, [...], 5], 0, 1, 2, 3, 4, 5, 6, 7, 8, ...]z[1, 2, [Dataframe]]z[1, 2, [[...], Dataset]]z[defaultdict])r   r   z0[defaultdict, Dataset, 1, {1:2, 3:4}, Dataframe]rH   z[builtin_function_or_method, 1]rL   )r   r   r   joinDFrX   rW   r1   r   lenr   )	long_listresultlirN   r   r   r   test_list_display   s.   "rj   c                  C   sf  t td} ttt tdt td}tddddks J t|dks(J t||ddks3J d	}t| | d
|dd d ksFJ tdddddidddddksYJ tdddtddksfJ tddtgtgddksuJ tdtidksJ ttddddtd}d}t||ksJ tt	 d }t
tddi}t|dv sJ t||dsJ dS )zTests for display of dicts.r]   r   rJ   )r   r   z{0:0, 'a':'b'}z7{0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, ...})r   r   zD{1:{0:0, 1:1, 2:2, 3:3, 4:4, ...}, 2:{0:0, 1:1, 2:2, 3:3, 4:4, ...}}zV{(0, 0, 0, 0, 0, ...):[0, 1, 2, 3, 4, ...], (1, 1, 1, 1, 1, ...):[0, 1, 2, 3, 4, ...]}))dr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )dr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Nrb   rc   r   r   r   r@   )r   r   r   r   r@   r   z&{0:{1:1, 2:2, 3:3, 4:{...}, 5:5}, 1:1})r   r   r   r   z{0:0, 1:1, 2:2, 3:Dataframe}r   r   r   z{0:0, 1:1, 2:[[...], Dataset]}z{0:defaultdict})r   r   r   r   r   z:{0:defaultdict, 1:Dataset, 2:2, 3:{0:0, 1:1}, 4:Dataframe}rH   )z<{builtin_function_or_method:builtin_function_or_method, 1:1}z<{1:1, builtin_function_or_method:builtin_function_or_method}rL   )r   r   dictzipr   re   rX   rW   r1   r   maxrf   r   )rg   Z	long_dictrh   ri   rN   Zdir   r   r   test_dict_display   s0   "ro   c                  C   s   dd t dD } th ddksJ d}t| |ksJ d}t| gd |ks*J d	d
ddd  d }t| gd |dd d ksHJ dS )zTests for display of sets.c                 S   s   h | ]}|qS r   r   )r   r   r   r   r   	<setcomp>   s    z#test_set_display.<locals>.<setcomp>r]      r   r   r   z	{1, 2, 3}z#{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...}zB[{0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}]r   r^   r_   z{0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, {0, 1, 2, 3, 4, ...}, Nr`   ra   r   rb   rc   )r   r   rd   )Zlong_setZdispr   r   r   test_set_display   s   &rr   c                  C   s   t ddd} t ddd}t  dddddd}t  ddddd	d
}t dd}t dd}t| dks6J t|dks>J t|dksFJ t| |gdksPJ t||gdksZJ t||gdksdJ t| ||fdksoJ t| ||ddks{J dS )zDSimple tests that dates, datetimes and timedeltas display correctly.i        r      +   r[   r   )        i  z
2017-12-18z2017-12-18 13:43:02z-1 day, 0:33:20z[2017-12-18, 2017-02-02]z*[2017-12-18 13:43:02, 2017-08-18 00:41:27]z[-1 day, 0:33:20, 1:00:00]z2(2017-12-18, 2017-12-18 13:43:02, -1 day, 0:33:20)rk   z0{0:2017-12-18, 1:2017-12-18 13:43:02, 2:1:00:00}N)datetimedate	timedeltar   )Z	test_dateZtest_date_2Ztest_datetimeZtest_datetime_2Ztest_timedeltaZtest_timedelta_2r   r   r   test_datetime_display   s6   


r~   c                   C   s8   t ddgdks
J trt ddgdksJ dS dS )z@Test that strings are displayed correctly inside lists or dicts.   arJ   z
['a', 'b']u   Эcp1251u   ['Ý']N)r   r   encoder   r   r   r   test_str_in_container_display  s
   r   c                 C   sB   | j dd}|tttd |jdd}dt|v sJ dS )z
    Test that we're adding a binary ellipses when value_to_display of
    a collection is too long and binary.

    For issue 6942
    z	bytes.txt)basename   rb)rO   s    ...N)r:   Zwrite_binary	bytearrayr   r   readr   )Ztmpdirfilebufferr   r   r   test_ellipses&  s   r   c            	      C   s  t ddksJ tsg d} g d}dd |D | ksJ t g ddks'J t h d	d
ks1J t ddddks<J t ddksDJ tsNt ddksNJ t tg ddks[J tjjg dg dd}t |dksoJ tddgddgg}t |dksJ tg d}t |dksJ t	g d}t |dksJ t
g d}t |dv sJ tjdd}t |dksJ tdd d}t |d!ksJ td"d#}t |d$ksJ d%S )&Test for get_type_string.Tbool)intfloatcomplexr         ?y      ?       @c                 S      g | ]}t |qS r   )r	   r   tr   r   r   
<listcomp>A      z(test_get_type_string.<locals>.<listcomp>r   r   rq   r2   r   r   rI   rl   r1   foorT   ZNDArrayTFTmaskMaskedArrayr   r   ZMatrixr4   r5   )Z
Int64Indexr6   r.   r/   zPIL.Image.Image  r   zdatetime.datery   rz   zdatetime.timedeltaN)r	   r   r   r7   mar   matrixr3   r4   r5   r6   r8   r9   r:   r{   r|   r}   )	expectednumeric_typesmasked_arrayr   r=   seriesindexr>   r|   r   r   r   test_get_type_string8  s8   r   c            
      C   s  t dsJ g d} tdd | D sJ t g dsJ t h ds%J t ddd	s.J t ds4J t d
s:J t tg dsEJ tjjg dg dd}t |sWJ tddgddgg}t |shJ tg d}t |suJ t	g d}t |sJ t
g d}t |sJ tjdd}t |sJ tddd}t |sJ tdd}t |sJ G dd d}t |rJ | }	t |	rJ dS )r   Tr   c                 S   r   r   )r   r   r   r   r   r   y  r   z)test_is_editable_type.<locals>.<listcomp>r   rq   r   r   rI   r   r   r   r   r   r.   r/   r   r   ry   rz   c                   @   s   e Zd ZdZdS )z&test_is_editable_type.<locals>.MyClassr   N)r)   r*   r+   r   r   r   r   r   MyClass  s    r   N)r   allr   r7   r   r   r   r3   r4   r5   r6   r8   r9   r:   r{   r|   r}   )
r   r   r   r=   r   r   r>   r|   r   Zmy_instancer   r   r   test_is_editable_typer  s:   r   c                  C   s   t tg ddksJ tddgddgg} t | dks J t tddks+J t dd	ks3J t g dd	ks=J t ddid	ksGJ tjd
d}t |d	ksVJ t	g d}t |d	kseJ dS )zTest for get_numpy_type_string.r   ZArrayr   r   r   r   ZScalarr   Unknownr.   r/   N)
r
   r   r7   r   Zint32r8   r9   r:   r3   r4   )r   r>   r=   r   r   r   test_get_numpy_type  s   r   __main__)4__doc__collectionsr   r{   sysnumpyr   Zpandasr3   ZpytestZxarrayZxrZ	PIL.Imager8   Zspyder_kernels.py3compatr   Zspyder_kernels.utils.nsviewr   r   r   r   r   r	   r
   r   r   rW   r4   re   ZDatasetrX   r?   rF   rG   rP   rV   rY   markZskipifplatformversion_inforj   ro   rr   r~   r   r   r   r   r   r)   mainr   r   r   r   <module>   sR   (	$#

(
,#:?