
    
dIc                     \   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 Zd Zd	 Zd
 Zd Zd Zd Z ddl!Z!	 ddl"m#Z$ n
#  d Z$Y nxY wd Z%d Z&d Z'd%dZ(d Z)d&dZ*d Z+d'dZ,d&dZ-d Z.d Z/d Z0d(dZ1d Z2	 	 	 	 d)d Z3d!Z4d" Z5d*d#Z6d*d$Z7dS )+z&
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                  :   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)npint64int32int16int8uint64uint32uint16uint8float64float32float16	complex64
complex128bool_     ;lib/python3.11/site-packages/spyder_kernels/utils/nsview.pyget_numeric_numpy_typesr(       sG    Hbh"'29biIrxRZL"-3 3r&   c                    t           j        t          urn	 t          | t           j                  pt          | t           j                  }n# t
          $ r Y dS w xY w|r'	 | j        j        S # t          t          f$ r Y dS w xY 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)objscalar_or_arrays     r'   get_numpy_dtyper4   &   s     
z##	3
++Jz#rz/J/J O  	 	 	FF	  	y~%"L1    ! $#	 	s#   4A
 

AAA* *A?>A?c                 f    t          |           }|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   ScalarArray)r4   hasattrr6   )valuenp_dtypes     r'   get_numpy_type_stringr>   D   s>    u%%Hwuf55y	qxwr&   c                     d| j         j        dt          t          |                                                                         dd          dS )z:Return object address as a string: '<classname @ address>'<z @ Xx>)	__class____name__hexidupperreplace)r2   s    r'   addressrJ   R   sO     -000bgg,,,,..66sC@@@@B Br&   c                 `    	 t          |           S # t          t          t          f$ r | cY S w xY w)zTry to eval value)eval	NameErrorSyntaxErrorImportError)r<   s    r'   try_to_evalrP   X   s>    E{{{K0   s    --c                    	 t          | d          rt          | j        d          s%t          | d          rt          | j        d          rdS t          | d          rvt          | j        t          t
          j        f          rP	 | j        r5t          | j        t                    rt	          | j                  S | j        S dS # t          $ r Y dS w xY wt          | d          r?t          | j        t          t
          j        f          r	 | j        S # t          $ r Y dS w xY wt          | d          rt          |           S dS # t          $ r Y dS w xY w)z2Return shape/size/len of an item of arbitrary typer6   computeshaper8   )rT   __len__)
r;   r6   rS   r+   tupler   integerRecursionErrorlenr-   items    r'   get_sizer\   `   s   *D&!!&	&-di&C&C&	D'""&	'.tz9'E'E&	 1D'""	tzE2:#677	 : 	 "$*e44 1$TZ000:% 1!        xx	 
 dF## 		49ubj&9::		 y !      xx T9%% 	t991   qqsZ   A
E 6E 4C :C 
CE C9E D 
D E D  !E 
EEc                 Z    d t          |           D             }|st          |           }|S )z[
    Get the attributes of an object using dir.

    This filters protected attributes
    c                 <    g | ]}|                     d           |S )__)
startswith).0ks     r'   
<listcomp>z$get_object_attrs.<locals>.<listcomp>   s)    ;;;1T(:(:;Q;;;r&   )dir)r2   attrss     r'   get_object_attrsrf      s5     <;C;;;E CLr&   )parsec           
          t          j         t          t          t          |                     d                               S )z#Just for 'year, month, day' strings,)datetimelistmapintsplit)datestrs    r'   	dateparserp      s.     4Cs1C1C(D(D#E#EGGr&   c                     |                      d          dz   }t          | |d                   }t          | d|           |S )N(r8   rT   z-->)rfindrp   print)r<   rpvs      r'   datestr_to_datetimerw      sD    	S		!	B%2,A	%Hr&   c                     t          j        d|           }|st          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                 P    g | ]#}t          |                                          $S r%   )rm   strip)ra   as     r'   rc   z$str_to_timedelta.<locals>.<listcomp>   s&    :::qC		NN:::r&   r8   ri   )rematch
ValueErrorgrouprn   rj   	timedelta)r<   margss      r'   str_to_timedeltar      sr    $ 	   	! 	!A  B@AAA::AGGAJJ$4$4S$9$9:::Dt$$r&   c                     t          |           sdS g d}t          |           |vr=t          | t          j                  s#t          |           }|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)boolrm   longfloatcomplexrk   setdictrV   strunicodeNDArrayMaskedArrayMatrix	DataFrameSerieszPIL.Image.Imagezdatetime.datezdatetime.timedeltaNr6   T)is_known_typeget_type_stringr+   pdIndexr4   r;   )r<   supported_typesr=   s      r'   is_editable_typer      s    
  u
 
 
 E""/99ubh// :&u--Hwuf'='=utr&   Fc                     d }nfd}	 d t          t          ||           ||          D             S #  | cY S xY w)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                     | d         S Nr   r%   )rB   s    r'   <lambda>zsort_against.<locals>.<lambda>   s
    ! r&   c                 &     | d                   S r   r%   )rB   sort_keys    r'   r   zsort_against.<locals>.<lambda>   s    1 r&   c                     g | ]\  }}|S r%   r%   )ra   _r[   s      r'   rc   z sort_against.<locals>.<listcomp>   s.     E E ED E E Er&   )keyreverse)sortedzip)list1list2r   r   r   s      ` r'   sort_againstr      sy     n&&&&E Es5%((c7CCCE E E 	Es   )8 >c                 :    t          t          |                     S )z=Removes duplicates from lista neglecting its initial ordering)rk   r   )listas    r'   unsorted_uniquer      s    E

r&   Tc                     t          |           }	 |j        }|j        }|dk    rd}|r&|dk    r
| j        dz   S |dk    r|dz   S |dz   |z   dz   S |S # t          $ r t	          |          }|dd	         cY S w xY w)
z$Default display for unknown objects.r/   classmodulez modulebuiltinsz objectz object of r8   rT   )r/   rE   
__module__r-   r   )r<   with_moduleobject_typenamer   type_strs         r'   default_displayr     s    u++K#' 6>>D 	=x~	11##i''-'&09<<   !+.."~s"   'A 
A 
A A #A76A7c                    t          | t                    }t          | t                    }|rt          |           }n| }d}dk    r4t	          |           dk    r!|s|rt          |d          n	| dd         }d}n9dk    r3t	          |           dk    r |s|rt          |d          n	| dd         }d}dk    rY|rfdt          |          D             }nfd	|D             }|r|                    d
           d                    |          }nd
}|r	d|z   dz   }nDt          | t                    r	d|z   dz   }n&t          | t                    r	d|z   dz   }nd|z   dz   }|S )z9Display for collections (i.e. list, set, tuple and dict).Fr8   
   NT      c                 b    g | ]+\  }}t          |           dz   t          |           z   ,S )level:value_to_display)ra   rb   rv   r   s      r'   rc   z'collections_display.<locals>.<listcomp>0  sT     6 6 6"Q )%8883>(%8889 6 6 6r&   c                 2    g | ]}t          |           S )r   r   )ra   er   s     r'   rc   z'collections_display.<locals>.<listcomp>4  s6     + + + )%888 + + +r&   z..., {}[]rr   ))	r+   r   r   r   rY   r   rk   appendjoin)r<   r   is_dictis_setelementstruncatedisplaysdisplays    `      r'   collections_displayr     s   %%Gs##F  U## Hzzc%jj2oo+2LfL6(B'''%*	!E

Q*1JVJ6(A&&&rr zz 	+6 6 6 6&*8nn6 6 6HH+ + + +!)+ + +H 	#OOE"""))H%%  &-#%	E4	 	  &-#%	E3		 &-#%-#%Nr&   c                 
    t           }t                      }	 t          j        t           ur(t          j                    }t          j        d           t           t          j                  r+|dk    r! j        }dd	                    |          z   }n;d}n7t           t          j
        j                  rd}nt           t          j                  r|dk    r|rsd                                 d	                                 }n# t          t          f$ r1  j        j        |v rt%                     }nt'                     }Y nw xY w j        j        |v rt%                     }n`t'                     }nOd
}nKt)           fdt*          t,          t.          t0          fD                       rt3           |dz             }nt           t4          j        j                  r%|dk    rt9                     d j        }nd}nt           t<          j                  r|dk    r j         }tB          ratE          |          dk    rN	 tG          |d         d          }n#  tG          |d                   }Y nxY w|gd |dd         D             z   }nd |D             }dd	                    t+          |                    z   }nd}nt           tH          j%        j&                  rtG                     }|dk    rd|z   dz   }nt           t<          j'                  rF|dk    r<	  (                                }n# tR          $ r  *                                }Y ncw xY wd}n[tW                     rXtY                     r9	 tG           d          }|dk    rd|z   dz   }n#   }|dk    rd|z   dz   }Y nxY wt'                     }nt[                     r0tY                     r }|dk    rd|z   dz   }nt'                     }nt           t\          j/                  st           t\          j0                  rt%                     }nqt           tb                    s%t           td                    st           |          rtg                     }n'|dk    rt'                     }nt'           d          }n# th          $ r t'                     }Y nw xY wtE          |          dk    r3tW          |          rd}	nd}	|dd         5                                |	z   }|t           urt          j        di | |S ) z!Convert value for display purposer   )	thresholdr   zField names: r   RecarrayzMasked arrayzMin: z
Max: zNumpy arrayc                 6    g | ]}t                    |k    S r%   )r/   )ra   tr<   s     r'   rc   z$value_to_display.<locals>.<listcomp>n  s$    EEEq$u++"EEEr&   r8   z  Mode: Imagez	utf-8-sig)encodingc                 ,    g | ]}t          |          S r%   r   ra   cs     r'   rc   z$value_to_display.<locals>.<listcomp>  s     'L'L'Laq(9(9'L'L'Lr&   Nc                 ,    g | ]}t          |          S r%   r   r   s     r'   rc   z$value_to_display.<locals>.<listcomp>  s     <<<!N1--<<<r&   zColumn names: 	Dataframe'r   utf8   'F)r   F   s    ...z ...r%   )6r   r(   r   r*   get_printoptionsset_printoptionsr+   recarraynamesr   mar   minmax	TypeErrorr~   r.   r/   r   r   anyrk   r   rV   r   r   r   r   rJ   moder   r   columnsr   rY   r   r   elementNavigableStringr   _summaryr0   summaryr   r
   r	   rj   dater   r   r   reprr-   rstrip)
r<   minmaxr   np_printoptionsnumeric_numpy_typesfieldsr   colsini_colellipsess
   `         r'   r   r   I  s    !O133j):Z'' 133O "----eR[)) a	Dzz)DIIf,=,==$ru011 [	D$GGrz** Y	Dzz 5=8=		UYY[[["Q%z2 = = = ;+/BBB&)%jjGG&5e&<&<G	=
 [%)<<<!%jjGG-e44GG'EEEET3t,DEEEFF I	D)%q99GGsy// G	Dzz,3ENNNNEJJG!r|,, B	Dzz} =3t99q==:"0a;"O"O"O:"0a"9"9#9'L'L48'L'L'LLDD<<t<<<D*TYYtDzz-B-BB%s{:;; /	D$U++Gqyy.4/rx(( *	Dzz.#nn..GG% . . .#mmooGGG. "e$$ "	D #5)) 
18,UF;;Gqyy"&.4"78#Gqyy"&.4"7)%00E"" 	D #5)) 1199"Wnt3G)%00.. 	D 233	D%jjGG.. 	D%%	D 344	D 5kkGGzz)%00)%UCCC ) ) )!%(()
 7||bG$$ 	HHH#2#,%%''(2 j((
..o...Ns   CS ,D 	S >E	S EDS I* )S *JB3S 5M 	S M-)S ,M--%S N3 1S 3OD
S S,+S,c                    ddl m}  || t                    } 	 t          |          }t	          |t
                    rH	 t          t          |                     } n# t          $ r |                                 dk    } Y nw xY w|Edt          t          |                    v r |t          |                     } n ||           } nt          |          rt          | d          } nat          |          rt          |           } nAt	          |t                    rt          |           } nt	          |t                    rt          |           } nt	          |t                    r0	 t          |           } n# t          $ r t          |           } Y nw xY wt	          |t           j                  rt#          |           } nt	          |t           j                  r"t#          |                                           } nKt	          |t           j                  rt)          |           } n!|rt+          |           } nt-          |           } n-# t          t.          f$ r |rt+          |           } n|cY S Y nw xY w| S )zConvert back to valuer   )from_qvarianttrueNr   r   )qtpy.compatr   r   r4   r+   r   r   r~   lowerr   r/   r   r   r   r	   rm   rj   rw   r   r   r   rP   rL   rN   )r<   default_valueignore_errorsr   r=   s        r'   display_to_valuer     s   ))))))M%00E)!"=11mT** "	 0U5\\** 0 0 0/0!C] 3 34444 00 m,, 	 $UF33EEM** 	 "5))EEw// 	 ENNEEu-- 	 %LLEEs++ 	 %E

 % % %e%x'899 		 '..EEx}55 	 '..3355EEx'9:: 	 $U++EE 	 &&EEKKE$ ! ! ! 	!&&EE     E!
 LsZ   $I A I "B>I BC+I .E> =I >FI FB4I %I98I9c                 6   	 t          | t          j        j                  rdS t          | t          j                  rdS t          | t          j                  rdS t          | t          j                  rdS t          | t          j                  rt          |           j
        S t          | t          j                  rdS n# t          $ r Y nw xY wt          j        dt          t          |                               }|r|d         dk    rd	S |d         S d
S )z Return type string of an object.r   r   r   r   r   z<(?:type|class) '(\S*)'>r   r/   r   r7   )r+   r   r   r   matrixr*   r   r   r   r/   rE   r   r-   r|   findallr   )r[   founds     r'   r   r     s"   dBE-.. 	! =dBI&& 	8dBJ'' 	9 dBL)) 	;dBH%% 	'::&&dBI&& 	8	    J2%d4jj113 3E 8v7Qxys-   C C C C 7-C %C 
CCc                 f    t          | t          j        j                  pt	          |           dk    S )z&Return True if object has a known typer7   )r+   r   r   r   r   rZ   s    r'   r   r     s0     tRU.// /D!!Y.0r&   c                 :   	 t          | t          j        t          j        j        f          rd| j        j        z   S t          | t          j        j                  rdS t          |           }||
                    d          dz   d         S # t          $ r Y dS w xY w)z,Return human-readable type string of an itemz	Array of r   .r8   Nr7   )r+   r   r*   r   r   r.   r   r   r   r   findr-   )r[   texts     r'   get_human_readable_typer
  &  s    	dRZ):;<< 	+$*/11cio.. 	+7"4((D		#q())**   yys   9B B .B 
BBc                    |J | dS t          |           rdS t          |           sdS t          | |          sdS |rt          | t          t          t
          f          r(d}| D ]}t          |||          r|dz  }|s n|dk    S t          | t                    rRt          |                                           D ]0\  }}t          |||          rt          |||          s dS |s n1dS )z3Return True if value is supported, False otherwise.NTFr   )filtersiterater8   )	is_callable_or_moduler   r+   rk   rV   r   is_supportedr   items)r<   	check_allr  r  valid_countvalr   s          r'   r  r  9  sU   }tU## te$$ uw'' u	 edE3/00 	K  WiHHH %1$K  E?"t$$ 	 //  S#C)LLL !&sG/8: : :! !55  E4r&   c                 t    	 t          |           pt          j        |           }n# t          $ r d}Y nw xY w|S )z>Return True if value is a callable or module, False otherwise.F)callableinspectismoduler-   )r<   callable_or_modules     r'   r  r  X  sS    #%e__G0@0G0G # # #"#s   #& 55c	                    i }	t           }
t          |                                           D ]\  }}|r  |
|          r|                    d          p|o$ |
|          o|d                                         pz|oN |
|          oC|                                o/t          |          dk    o|dd                                          p)||v p%|ot          |          p|ot          |||           }|s||	|<   |	S )z?Keep objects in namespace view according to different criteria.r   r   r8   N)r  r  )	r
   rk   r  r`   isupperrY   isdigitr  r  )
input_dictr  r  exclude_privateexclude_capitalizedexclude_uppercaseexclude_unsupportedexcluded_namesexclude_callables_and_modulesoutput_dict
_is_stringr   r<   excludeds                 r'   globalsfilterr&  a  sD   
 K$J:++--.. % %
UHCHS^^C5H5H L IZZ__IQ9I9IL 4::c?? 4s{{}} 4XX\4"%abb'//"3"33L N"	L
 +K/DU/K/KL ! Key'JJJJ 	  	%$Kr&   )
r  r  r  r  r   r!  r   show_callable_attributesshow_special_attributesr"  c            	         ddl m} m} t          t          t
          t          t          t          t          | |g	t          t                    z   t          t                    z   }	 ddlm}m}m} ||||gz  }n#  Y nxY w	 ddlm}m}m} ||||gz  }n#  Y nxY w|dd         }		 ddlm}
 |                    |
j                   n#  Y nxY wt          |	|          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,   )r   r   r   N)r   )	picklableeditable)rj   r   r   rm   r   r   rk   r   r   rV   r   r   r   r*   r  r,   r   r   r   r   r   r   r   )r   r   editable_typesr*   r  r,   r   r   r   picklable_typesr   s              r'   get_supported_typesr.    s=    )(((((((5'4dE4!#'
#3#346:9ooFN22222222227FG4433333333339fe44$QQQ'Oek****/NCCCCs$   "A5 5A9=B B" C Cc                 >   t                      }|t          |                                          v sJ t          |d                   }|||z  }t          | |d         t	          ||                   |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.  rk   keysr&  rV   )datasettingsr   more_excluded_namesr   r!  s         r'   get_remote_datar4    s     *++O4,,..//////(#3455N&--;'od+,, !23"#67$%:;$%:;&./N&O%	' 	' 	' 	'r&   c                 *   t          | |d|          } i }t          |                                           D ][\  }}t          ||d                   }t	          |          t          |          |t          |          t          |          d||<   \|S )zI
    Make a remote view of dictionary *data*
    -> globals explorer
    r+  )r   r3  r   )r   )r/   r6   viewpython_type
numpy_type)r4  rk   r  r   r
  r\   r   r>   )r1  r2  r3  remoter   r<   r6  s          r'   make_remote_viewr:    s    
 4
/BD D DDF4::<<(( 
 

Uhx.@AAA,U33e__*511/66
 
s Mr&   )FN)T)Fr   )FNF)FNNNNNNNr   )8__doc__
__future__r   	itertoolsr   r  r|   spyder_kernels.py3compatr   r   r   r   r	   r
   r   r   r   r    spyder_kernels.utils.lazymodulesr   r   r   r   r   r   r   r(   r4   r>   rJ   rP   r\   rf   rj   dateutil.parserrg   rp   rw   r   r   r   r   r   r   r   r   r   r   r
  r  r  r&  REMOTE_SETTINGSr.  r4  r:  r%   r&   r'   <module>rB     s9    & % % % % %        				C C C C C C C C C C C C C C C C C C C C C C C C
5 5 5 5 5 5 5 5 5 5 5 5 5 53 3 3  <  B B B  , , ,^	 	 	 H2222222HH H H H H
  % % %>  4   $     .- - -`   D. . . .h  @0 0 0  &   >   8<<@>BEI   6OD D D>' ' ' '2     s   A A%