
    
d=7                        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 Z e            Z ej        g d          Z ej         ej        dd	g           ej        d
dg          d          Zd Zd Z d Z!d Z"d Z#d Z$e	j%        &                    ej'        dk    oej(        dd	         dk    d          d             Z)e	j%        &                    ej'        dk    oej(        dd	         dk    d          d             Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1e2d k    r e	j3                     dS dS )!z
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                      t          t                    } t          d          D ] }d t          d          D             }|| |<   !| S )zTaken from issue #4221.iP  c                 N    i | ]"}|t           j                            d           #S )
   )nprandomrand).0js     Flib/python3.11/site-packages/spyder_kernels/utils/tests/test_nsview.py
<dictcomp>z+generate_complex_object.<locals>.<dictcomp>%   s(    555aQry~~b!!555    r   )r   listrange)bugias      r   generate_complex_objectr   !   sM    
d

C5\\  55599555AJr            r   r    r!      r   r   c                      G d d          } t          g d          t          g d          t          g d          dddddg}|D ]}t          |          dk    sJ t	          j        g dg dg          }t          |          dk    sJ t	          j        g d          }t          |          d	k    sJ t	          j        g d          }t          |          d	k    sJ t          j	        g dg dgt          j
        
          }t          |          dk    sJ t          j                            dd          }t          |          dk    sJ  |             }t          |          dk    sJ dS )z6Test that the size of all values is returned correctlyc                        e Zd Z fdZ xZS )*test_get_size.<locals>.RecursionClassNoLenc                 n    |dk    r| j         S t          t          |                               |          S )Nsize)namesuperobject__getattribute__)selfr)   	__class__s     r   __getattr__z6test_get_size.<locals>.RecursionClassNoLen.__getattr__5   s1    V||DI-VT**;;DAAAr   )__name__
__module____qualname__r/   __classcell__)r.   s   @r   RecursionClassNoLenr&   4   sA        	B 	B 	B 	B 	B 	B 	B 	B 	Br   r4   r   123r   r    r!   )r    r!   )r!   )dtypeRGB   r9   N)r   tuplesetr   pd	DataFrameSeriesIndexr   array
complex128PILImagenew)r4   lengthobjdfarrimgs         r   test_get_sizerJ   1   s   B B B B B B B B 777mmU777^^S\\5a1ooF " "}}!!!!!	www(	)	)BB<<6!!!!	777		BB<<4	'''		BB<<4
(GGGWWW%R]
;
;
;CC==F""""
)--y
)
)CC==I%%%%



CC==Ar   c                  J    g d} g d}t          | |          }|g dk    sJ d S )N)         )r    r!   r   )rN   rL   rM   r   listalistbress      r   test_sort_againstrT   T   s>    IIEIIE
ue
$
$C)))r   c                  F    g d} g d}t          | |          }|| k    sJ d S )N)r!   r   r   )r   r   r   rO   rP   s      r   test_sort_against_is_stablerV   [   s4    IIEIIE
ue
$
$C%<<<<<<r   c                  z   t                      } d}d}g d}ddd}dg ddf}t          |t          | |                             sJ t          |t          | |                             sJ t          |t          | |                             sJ t          |t          | |                             sJ dS )	z/Tests that None values are displayed by defaulteditableN)r    Nr!   Nr"   r   b)r!   Nr"   eggsfilters)r	   r   r:   )supported_typesmodenone_var	none_list	none_dict
none_tuples         r   test_none_values_are_supportedrd   b   s    )++ODH"""I##If-J%0E*F*FGGGGGG	51F+G+GHHHHHH	51F+G+GHHHHHH
E/$2G,H,HIIIIIIIIr   c                  j     G d dt                     }  |             }t          |          }d|v sJ dS )z:Test for value_to_display of subclasses of str/basestring.c                       e Zd Zd ZdS )'test_str_subclass_display.<locals>.Testc                     dS )Ntest )r-   s    r   __repr__z0test_str_subclass_display.<locals>.Test.__repr__s   s    6r   N)r0   r1   r2   rk   rj   r   r   Testrg   r   s#        	 	 	 	 	r   rl   zTest objectN)strr   )rl   valuevalue_displays      r   test_str_subclass_displayrp   p   s]        s    DFFE$U++MM))))))r   c                      t          t                    dk    sJ t          t          j        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   r@   DATASETrj   r   r   test_default_displayrt   z   s     ^,,67 7 7 7 RXn5566,- - - - W%%:; ; ; ; ; ;r   darwin)r!      zFails on Mac with Python 3.8)reasonc                  T   t          t          d                    } t          g d          dk    sJ t          |           dk    sJ t          | gdz            dk    sJ dd                    d	          d
d         z   dz   }t          | gdz            |d
d         dz   k    sJ t          ddddgdgg| z             dk    sJ t          ddt          gg          dk    sJ t          ddt          gt
          gg          dk    sJ t          t          g          dk    sJ t          t
          ddddt          g}d}t          |          |k    sJ t          t                      d                   }t          dg}t          |          dk    sJ t          ||          sJ 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"   rL   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]rX   z[builtin_function_or_method, 1]r\   )r   r   r   joinDFrs   rr   r:   r	   lenr   )	long_listresultlir^   s       r   test_list_displayr      s   
 U3ZZ  I III&&+5555 Y''12 2 2 2 i[1_--PQ Q Q Q 277677<<sBFYK",--v1EEEEE q!QQ/09<==CD D D DQB4L))-BBBBBQRD'?3448RRRRR ^,--@@@@ '1ajj"	5B?FB6)))) /11*=>>O
qBB#DDDDDO44444444r   c            
         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    sJ d	}t	          | | d
          |dd         dz   k    sJ t	          dddddidddd          dk    sJ t	          dddt
          d          dk    sJ t	          ddt
          gt          gd          dk    sJ t	          dt          i          dk    sJ t          t          ddddt
          d}d}t	          |          |k    sJ t          t                      d                   }t          t          ddi}t	          |          dv sJ t          ||          sJ dS )zTests for display of dicts.ry   r   rZ   )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   Nr~   r   r   r    r!   rL   )r   r    r!   r"   rL   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}rX   )z<{builtin_function_or_method:builtin_function_or_method, 1:1}z<{1:1, builtin_function_or_method:builtin_function_or_method}r\   )r   r   dictzipr   r   rs   rr   r:   r	   maxr   r   )r   	long_dictr   r   r^   dis         r   test_dict_displayr      sX   
 U3ZZ  ISeCjj))4c

+;+;<<==I qcNN++/????? Y''EF F F F 	Y7788RS S S S<Fi)DDEEPSQSPSW]I]]]]] AaAa5A!>!>!DDEE45 5 5 5qAb11226TTTTTqA2$99::>^^^^^ Q~.//3DDDDD gajjB	?	?BIFB6)))) /11*=>>O
sAq	BB $L L L L L O44444444r   c                  X   d t          d          D             } t          h d          dk    sJ d}t          |           |k    sJ d}t          | gdz            |k    sJ dd	                    d
          dd         z   dz   }t          | gdz            |dd         dz   k    sJ dS )zTests for display of sets.c                     h | ]}|S rj   rj   )r   r   s     r   	<setcomp>z#test_set_display.<locals>.<setcomp>   s    &&&a&&&r   ry      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!   rz   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|   r}   r   r~   r   )r   r   r   )long_setdisps     r   test_set_displayr      s    &&5::&&&H III&&+5555 1DH%%---- PDXJN++t3333 455crc::S@DXJO,,SbS	F0BBBBBBBr   c                     t          j        ddd          } t          j        ddd          }t          j         dddddd          }t          j         ddddd	d
          }t          j        dd          }t          j        dd          }t          |           dk    sJ t          |          dk    sJ t          |          dk    sJ t          | |g          dk    sJ t          ||g          dk    sJ t          ||g          dk    sJ t          | ||f          dk    sJ t          | ||d          dk    sJ dS )zDSimple tests that dates, datetimes and timedeltas display correctly.i        r       +   rv   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)r   z0{0:2017-12-18, 1:2017-12-18 13:43:02, 2:1:00:00}N)datetimedate	timedeltar   )	test_datetest_date_2test_datetimetest_datetime_2test_timedeltatest_timedelta_2s         r   test_datetime_displayr      s   dB++I-a++K%dBBA>>M'aQB??O'D11N)!T22 I&&,6666M**.CCCCCN++/@@@@@ i566&' ' ' 'm_=>>89 9 9 9n.>?@@() ) ) ) iGHH@A A A A !.!13 3 4 4 @A A A A A Ar   c                      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.   arZ   z
['a', 'b']u   Эcp1251u   ['Ý']N)r   r   encoderj   r   r   test_str_in_container_displayr     sf     T4L))\9999
  Hh!7!7 899ZGGGGH HGGr   c           	          |                      d          }|                    t          t          t	          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)r_   s    ...N)rD   write_binary	bytearrayr   r   readr   )tmpdirfilebuffers      r   test_ellipsesr   &  sx     ::{:++DiU3ZZ 0 011222 YYDY!!F &v........r   c                     t          d          dk    sJ t          sg d} g d}d |D             | k    sJ t          g d          dk    sJ t          h d          d	k    sJ t          d
dd          dk    sJ t          d          dk    sJ t          st          d          dk    sJ t          t          j        g d                    dk    sJ t          j                            g dg d          }t          |          dk    sJ t          j        d
dgddgg          }t          |          dk    sJ t          j        g d          }t          |          dk    sJ t          j	        g d          }t          |          dk    sJ t          j
        g d          }t          |          dv sJ t          j                            dd          }t          |          dk    sJ t          j        ddd
          }t          |          d k    sJ t          j        d!d"          }t          |          d#k    sJ d$S )%Test for get_type_string.Tbool)intfloatcomplexr         ?y      ?       @c                 ,    g | ]}t          |          S rj   )r
   r   ts     r   
<listcomp>z(test_get_type_string.<locals>.<listcomp>A  s     :::q"":::r   r   r   r   r;   r   r    rY   r   r:   foorm   NDArrayTFTmaskMaskedArrayr!   r"   Matrixr=   r>   )
Int64Indexr?   r7   r8   zPIL.Image.Image  r   zdatetime.dater   r   zdatetime.timedeltaN)r
   r   r   r@   mar   matrixr<   r=   r>   r?   rB   rC   rD   r   r   r   )	expectednumeric_typesmasked_arrayr   rG   seriesindexrI   r   s	            r   test_get_type_stringr   8  s    4  F****  G...(((::M:::hFFFF 999%%//// 999%%.... ++,,6666 9%%0000  /u%%.... 28III..//9<<<<5$$YYY5H5H5H$IIL<((M9999YAA'((F6""h.... 
iii	 	 B2+----Yyyy!!F6""h....HYYYE5!!%<<<<< )--y
)
)C3#44444 =r1%%D4  O3333b$''D4  $8888888r   c                     t          d          sJ g d} t          d | D                       sJ t          g d          sJ t          h d          sJ t          ddd          sJ t          d          sJ t          d	          sJ t          t          j        g d                    sJ t          j                            g dg d
          }t          |          sJ t          j        ddgddgg          }t          |          sJ t          j        g d          }t          |          sJ t          j	        g d          }t          |          sJ t          j
        g d          }t          |          sJ t          j                            dd          }t          |          sJ t          j        ddd          }t          |          sJ t          j        dd          }t          |          sJ  G d d          }t          |          rJ  |            }	t          |	          rJ dS )r   Tr   c                 ,    g | ]}t          |          S rj   )r   r   s     r   r   z)test_is_editable_type.<locals>.<listcomp>y  s!    ;;; ##;;;r   r   r   r   r    rY   r   r   r   r!   r"   r7   r8   r   r   r   r   c                       e Zd ZdZdS )&test_is_editable_type.<locals>.MyClassr   N)r0   r1   r2   r   rj   r   r   MyClassr     s        r   r   N)r   allr   r@   r   r   r   r<   r=   r>   r?   rB   rC   rD   r   r   r   )
r   r   r   rG   r   r   rI   r   r   my_instances
             r   test_is_editable_typer   r  s    D!!!!! %$$M;;];;;<<<<< III&&&&& III&&&&& !!,,----- I&&&&& E""""" BHYYY//000005$$YYY5H5H5H$IILL)))))YAA'((FF##### 
iii	 	 BBYyyy!!FF#####HYYYEE""""" )--y
)
)CC      =r1%%DD!!!!!b$''DD!!!!!       ((((('))K,,,,,,,r   c                  J   t          t          j        g d                    dk    sJ t          j        ddgddgg          } t          |           dk    sJ t          t          j        d                    dk    sJ t          d          d	k    sJ t          g d          d	k    sJ t          ddi          d	k    sJ t
          j                            d
d          }t          |          d	k    sJ t          j	        g d          }t          |          d	k    sJ dS )zTest for get_numpy_type_string.r   Arrayr   r    r!   r"   Scalarr   Unknownr7   r8   N)
r   r   r@   r   int32rB   rC   rD   r<   r=   )r   rI   rG   s      r   test_get_numpy_typer     s:    !)))!4!455@@@@YAA'((F ((G3333 !--9999 !%%2222 ++y8888 !Q((I5555 )--y
)
)C %%2222 
iii	 	 B $$	111111r   __main__)4__doc__collectionsr   r   sysnumpyr   pandasr<   pytestxarrayxr	PIL.ImagerB   spyder_kernels.py3compatr   spyder_kernels.utils.nsviewr   r   r   r   r	   r
   r   r   r   rr   r=   r   Datasetrs   rJ   rT   rV   rd   rp   rt   markskipifplatformversion_infor   r   r   r   r   r   r   r   r   r0   mainrj   r   r   <module>r      s    
 $ # # # # #  



                  ) ( ( ( ( (                      )(**R\'''
"*qe,,aU0C0CDD
E
E
  F    J J J* * *< < < LH?!1"1"!5!?)  + +%5 %5+ +%5P LH?!1"1"!5!?)  + +)5 )5+ +)5XC C C( B  B  BF	H 	H 	H/ / /$79 79 79t<- <- <-~2 2 20 zFKMMMMM r   