o
    ZhIc                     @   s  d Z ddlmZ ddlmZ ddlZddlZddlmZm	Z	m
Z
mZmZmZmZmZmZmZ ddlmZmZmZmZmZ dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Z ddl!Z!zddl"m#Z$ W n   dd Z$Y dd Z%dd Z&dd Z'd?dd Z(d!d" Z)d@d$d%Z*d&d' Z+dAd(d)Z,d@d*d+Z-d,d- Z.d.d/ Z/d0d1 Z0dBd2d3Z1d4d5 Z2				dCd6d7Z3d8Z4d9d: Z5dDd;d<Z6dDd=d>Z7dS )Ez&
Utilities to build a namespace view.
    )print_function)isliceN)
NUMERIC_TYPES	INT_TYPES
TEXT_TYPESto_text_stringis_text_stringis_type_text_stringis_binary_stringPY2to_binary_string	iteritems)bs4
FakeObjectnumpypandasPILc                   C   s<   t jt jt jt jt jt jt jt jt j	t j
t jt jt jt jfS N)npZint64Zint32Zint16Zint8Zuint64Zuint32Zuint16Zuint8Zfloat64Zfloat32Zfloat16Z	complex64Z
complex128Zbool_ r   r   R/var/www/html/lang_env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.pyget_numeric_numpy_types    s   r   c              	   C   sl   t jtur2zt| t jpt| t j}W n
 ty   Y dS w |r4z| jjW S  tt	fy1   Y dS w dS dS )z
    Return Numpy data type associated to `obj`.

    Return None if Numpy is not available, if we get errors or if `obj` is not
    a Numpy array or scalar.
    N)
r   ndarrayr   
isinstancegeneric	ExceptiondtypetypeAttributeErrorRuntimeError)objZscalar_or_arrayr   r   r   get_numpy_dtype&   s   

r!   c                 C   s0   t | }|du st| dsdS | jdkrdS dS )z+Get the type of a Numpy object as a string.NsizeUnknown   ZScalarZArray)r!   hasattrr"   )valuenp_dtyper   r   r   get_numpy_type_stringD   s   
r(   c                 C   s$   d| j jtt|  ddf S )z:Return object address as a string: '<classname @ address>'z	<%s @ %s>Xx)	__class____name__hexidupperreplace)r    r   r   r   addressR   s   r1   c              
   C   s(   zt | W S  tttfy   |  Y S w )zTry to eval value)eval	NameErrorSyntaxErrorImportErrorr&   r   r   r   try_to_evalX   s
   
r7   c                 C   s  zxt | drt | jdst | drt | jdrW dS t | drMt| jttjfrMz| jr>t| jtr9t| jW W S | jW W S W W dS  tyL   Y W dS w t | drlt| jttjfrlz| jW W S  tyk   Y W dS w t | drvt| W S W dS  t	y   Y dS w )z2Return shape/size/len of an item of arbitrary typer"   Zcomputeshaper$   )r9   __len__)
r%   r"   r8   r   tupler   integerRecursionErrorlenr   itemr   r   r   get_size`   sJ   






rA   c                 C   s"   dd t | D }|st | }|S )z[
    Get the attributes of an object using dir.

    This filters protected attributes
    c                 S   s   g | ]	}| d s|qS )__)
startswith).0kr   r   r   
<listcomp>   s    z$get_object_attrs.<locals>.<listcomp>)dir)r    attrsr   r   r   get_object_attrs   s   rI   )parsec                 C   s   t j ttt| d S )z#Just for 'year, month, day' strings,)datetimelistmapintsplit)Zdatestrr   r   r   	dateparse   s   rQ   c                 C   s.   |  dd }t| |d }t| d| |S )N(r$   r9   z-->)rfindrQ   print)r&   rpvr   r   r   datestr_to_datetime   s   rW   c                 C   s<   t d| }|stddd |ddD }tj| S )a  Convert a string to a datetime.timedelta value.

    The following strings are accepted:

        - 'datetime.timedelta(1, 5, 12345)'
        - 'timedelta(1, 5, 12345)'
        - '(1, 5, 12345)'
        - '1, 5, 12345'
        - '1'

    if there are less then three parameters, the missing parameters are
    assumed to be 0. Variations in the spacing of the parameters are allowed.

    Raises:
        ValueError for strings not matching the above criterion.

    z,^(?:(?:datetime\.)?timedelta)?\(?([^)]*)\)?$z%Invalid string for datetime.timedeltac                 S   s   g | ]}t | qS r   )rO   strip)rD   ar   r   r   rF          z$str_to_timedelta.<locals>.<listcomp>r$   rK   )rematch
ValueErrorgrouprP   rL   	timedelta)r&   margsr   r   r   str_to_timedelta   s   
rb   c                 C   sN   t | sdS g d}t| |vr%t| tjs%t| }|du s#t| ds%dS dS )z
    Return True if data type is editable with a standard GUI-based editor,
    like CollectionsEditor, ArrayEditor, QDateEdit or a simple QLineEdit.
    F)boolrO   longfloatcomplexrM   setdictr;   strunicodeNDArrayMaskedArrayMatrix	DataFrameSerieszPIL.Image.Imagezdatetime.datezdatetime.timedeltaNr"   T)is_known_typeget_type_stringr   pdIndexr!   r%   )r&   supported_typesr'   r   r   r   is_editable_type   s   
ru   Fc                    sN    du r	dd }n fdd}zdd t t|| ||dD W S    |  Y S )z
    Arrange items of list1 in the same order as sorted(list2).

    In other words, apply to list1 the permutation which takes list2 
    to sorted(list2, reverse).
    Nc                 S   s   | d S Nr   r   r*   r   r   r   <lambda>   s    zsort_against.<locals>.<lambda>c                    s    | d S rv   r   rw   sort_keyr   r   rx      s    c                 S   s   g | ]\}}|qS r   r   )rD   _r@   r   r   r   rF          z sort_against.<locals>.<listcomp>)keyreverse)sortedzip)Zlist1Zlist2r~   rz   r}   r   ry   r   sort_against   s   
r   c                 C   s   t t| S )z=Removes duplicates from lista neglecting its initial ordering)rM   rg   )Zlistar   r   r   unsorted_unique   s   r   Tc                 C   s   t | }z-|j}|j}|dkrd}|r/|dkr| jd W S |dkr&|d W S |d | d W S |W S  tyD   t|}|dd	  Y S w )
z$Default display for unknown objects.r   classmodulez modulebuiltinsz objectz object of r$   r9   )r   r,   
__module__r   r   )r&   with_moduleZobject_typenamer   Ztype_strr   r   r   default_display  s"   
r   c                    sD  t | t}t | t}|rt| }n| }d} dkr1t| dkr1|s#|r(t|dn| dd }d}n dkrLt| dkrL|s?|rDt|dn| dd }d} dkrt|r^ fdd	t|D }n	 fd
d	|D }|rn|d d|}nd}|rd| d }|S t | trd| d }|S t | trd| d }|S d| d }|S )z9Display for collections (i.e. list, set, tuple and dict).Fr$   
   NT      c                    s,   g | ]\}}t | d d t | d  qS )level:value_to_display)rD   rE   rV   r   r   r   rF   0  s
    
z'collections_display.<locals>.<listcomp>c                    s   g | ]}t | d qS )r   r   )rD   er   r   r   rF   4  s    z..., {}[]rR   ))	r   rh   rg   r   r>   r   rM   appendjoin)r&   r   Zis_dictis_setelementstruncateZdisplaysdisplayr   r   r   collections_display  sF   







r   c           
   	      s  t }t }ztjt urt }tjdd t tjr0|dkr, j}dd	| }nd}nt tj
jr;d}nt tjr|dkr|rpzd    f }W ny ttfyo    jj|v rht }nt }Y n_w  jj|v r|t }nRt }nLd	}nHt fd
dttttfD rt |d }n0t tjjr|dkrdt  jf }nd}nt tjr|dkr j }t!rt"|dkrz
t#|d dd}W n
   t#|d }Y |gdd |dd D  }ndd |D }dd	t| }nd}nt t$j%j&rt# }|dkrd| d }nt tj'rC|dkr@z ( }W n t)y?    * }Y nw d}nt+ rwt, rrzt# d}|dkr^d| d }W nn    }|dkrpd| d }Y n\t }nWt- rt, r }|dkrd| d }n?t }n:t t.j/st t.j0rt }n't t1st t2st |rt3 }n|dkrt }nt dd}W n t4y   t }Y nw t"|dkrt+|rd}	nd}	|dd 5 |	 }|t urtjdi | |S ) z!Convert value for display purposer   )	thresholdr   zField names: r   ZRecarrayzMasked arrayzMin: %r
Max: %rzNumpy arrayc                    s   g | ]}t  |kqS r   )r   )rD   tr6   r   r   rF   n  rZ   z$value_to_display.<locals>.<listcomp>r$   z%s  Mode: %sImagez	utf-8-sig)encodingc                 S      g | ]}t |qS r   r   rD   cr   r   r   rF     r|   Nc                 S   r   r   r   r   r   r   r   rF     r|   zColumn names: Z	Dataframe'rs   utf8   'F)r   F   s    ...z ...r   )6r   r   r   r   Zget_printoptionsZset_printoptionsr   Zrecarraynamesr   marl   minmax	TypeErrorr]   r   r   ri   r   anyrM   rg   r;   rh   r   r   r   r1   moderr   rn   columnsr   r>   r   r   elementZNavigableStringrs   Z_summaryr   summaryr
   r	   r   rL   dater_   r   rc   reprr   rstrip)
r&   minmaxr   Znp_printoptionsZnumeric_numpy_typesfieldsr   colsZini_colZellipsesr   r6   r   r   I  s   





















r   c              	   C   s  ddl m} || t} zt|}t|tr1z
tt| } W W | S  ty0   |  dk} Y W | S w |durMdt	t
|v rF|t| } W | S || } W | S t|rYt| d} W | S t|rdt| } W | S t|trpt| } W | S t|tr|t| } W | S t|trzt| } W W | S  ty   t| } Y W | S w t|tjrt| } W | S t|tjrt|  } W | S t|tjrt| } W | S |rt| } W | S t| } W | S  ttfy   |rt| } Y | S | Y S w )zConvert back to valuer   )from_qvarianttrueNrf   r   )Zqtpy.compatr   r   r!   r   rc   re   r]   lowerri   r   rf   r
   r   r   rO   rL   rW   r   r_   rb   r7   r2   r4   )r&   default_valueignore_errorsr   r'   r   r   r   display_to_value  st   

$"












r   c                 C   s   z<t | tjjrW dS t | tjrW dS t | tjrW dS t | tjr&W dS t | tjr2t	| j
W S t | tjr;W dS W n	 tyE   Y nw tdtt	| }|r^|d dkrZd	S |d S d
S )z Return type string of an object.rl   rm   rk   rn   ro   z<(?:type|class) '(\S*)'>r   r   r   r#   )r   r   r   rl   matrixr   rr   rn   rs   r   r,   ro   r   r[   findallr   )r@   foundr   r   r   rq     s2   
rq   c                 C   s   t | tjjpt| dkS )z&Return True if object has a known typer#   )r   r   r   rl   rq   r?   r   r   r   rp     s   
rp   c                 C   sl   z+t | tjtjjfrd| jj W S t | tjjrW dS t	| }||
dd d W S  ty5   Y dS w )z,Return human-readable type string of an itemz	Array of r   .r$   Nr#   )r   r   r   r   rl   r   r   r   r   rq   findr   )r@   textr   r   r   get_human_readable_type&  s   r   c                 C   s   |dusJ | du rdS t | rdS t| sdS t| |sdS |rlt| tttfrFd}| D ]}t|||dr:|d7 }|sA |dkS q-|dkS t| trlt|  D ]\}}t|||drct|||dsf dS |sk dS qQdS )z3Return True if value is supported, False otherwise.NTFr   )filtersiterater$   )	is_callable_or_moduleru   r   rM   r;   rg   is_supportedrh   items)r&   	check_allr   r   Zvalid_countvalr}   r   r   r   r   9  sB   

r   c                 C   s2   zt | p	t| }W |S  ty   d}Y |S w )z>Return True if value is a callable or module, False otherwise.F)callableinspectismoduler   )r&   Zcallable_or_moduler   r   r   r   X  s   r   c	                 C   s   i }	t }
t|  D ]N\}}|r|
|r|dpQ|o$|
|o$|d  pQ|o=|
|o=| o=t|dko=|dd   pQ||v pQ|oGt|pQ|oQt|||d }|sX||	|< q
|	S )z?Keep objects in namespace view according to different criteria.r{   r   r$   N)r   r   )	r	   rM   r   rC   isupperr>   isdigitr   r   )Z
input_dictr   r   exclude_privateexclude_capitalizedexclude_uppercaseexclude_unsupportedexcluded_namesexclude_callables_and_modulesZoutput_dictZ
_is_stringr}   r&   excludedr   r   r   globalsfiltera  s,   


r   )
r   r   r   r   r   r   r   Zshow_callable_attributesZshow_special_attributesr   c               	   C   s   ddl m} m} ttttttt	| |g	tt
 tt }zddlm}m}m} ||||g7 }W n   Y zddlm}m}m} ||||g7 }W n   Y |dd }	zddlm}
 ||
j W n   Y t|	|dS )z
    Return a dictionnary containing types lists supported by the
    namespace browser.

    Note:
    If you update this list, don't forget to update variablexplorer.rst
    in spyder-docs
    r   )r   r_   )r   r   r   )rn   ro   rs   N)r   )Z	picklableeditable)rL   r   r_   rO   re   rf   rM   rg   rh   r;   r   r   r   r   r   r   r   rn   ro   rs   r   r   r   )r   r_   Zeditable_typesr   r   r   rn   ro   rs   Zpicklable_typesr   r   r   r   get_supported_types  s2   	r   c                 C   sp   t  }|t| v sJ t|d }|dur||7 }t| |d t|| |d |d |d |d |d |d		S )
a%  
    Return globals according to filter described in *settings*:
        * data: data to be filtered (dictionary)
        * settings: variable explorer settings (dictionary)
        * mode (string): 'editable' or 'picklable'
        * more_excluded_names: additional excluded names (list)
    r   Nr   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   rM   keysr   r;   )datasettingsr   more_excluded_namesrt   r   r   r   r   get_remote_data  s    
r   c                 C   sb   t | |d|d} i }t|  D ]\}}t||d d}t|t||t|t|d||< q|S )zI
    Make a remote view of dictionary *data*
    -> globals explorer
    r   )r   r   r   )r   )r   r"   viewZpython_typeZ
numpy_type)r   rM   r   r   r   rA   rq   r(   )r   r   r   remoter}   r&   r   r   r   r   make_remote_view  s   r   )FN)T)Fr   )FNF)FNNNNNNNr   )8__doc__
__future__r   	itertoolsr   r   r[   Zspyder_kernels.py3compatr   r   r   r   r   r	   r
   r   r   r   Z spyder_kernels.utils.lazymodulesr   r   r   r   r   rr   r   r   r!   r(   r1   r7   rA   rI   rL   Zdateutil.parserrJ   rQ   rW   rb   ru   r   r   r   r   r   r   rq   rp   r   r   r   r   ZREMOTE_SETTINGSr   r   r   r   r   r   r   <module>   sV   0/



0 
4 
	

