
)Ί]c           @  s  d  Z  d d l m Z d d l m 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 e f d     YZ y d d l m Z m Z m Z m Z m Z m Z m Z m Z 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' d d
 l m( Z) d d l m* Z* m+ Z+ WnY e Z Z Z Z Z' Z) Z Z Z Z Z Z Z Z Z  Z! Z" Z# Z$ Z% n Xd   Z, y  d d l- m. Z. m/ Z/ m0 Z0 Wn e Z. Z/ Z0 n Xy  d d l1 m2 Z2 e2 j3 j3 Z3 Wn e Z3 n Xy d d l4 Z4 e4 j5 j6 Z6 Wn e Z6 n Xd   Z7 d   Z8 d   Z9 d   Z: d d l; Z; y d d l< m= Z> Wn d   Z> n Xd   Z? d   Z@ d ZA d ZB i
 d eC 6eB e 6d eD 6d eE 6d eF 6d e	 6eA e e' e e. e0 e/ f 6d e3 6d e; jG 6d e; jH 6ZI d  ZJ d! ZK d"   ZL d#   ZM eN d$  ZO d%   ZP eQ d&  ZR d'   ZS eN d( d)  ZT eQ d*  ZU d+   ZV d,   ZW d-   ZX eN d eN d.  ZZ eN d d d d d d d/  Z[ d: Z\ d7   Z] d d8  Z^ d d9  Z_ d S(;   s   
Utilities
i(   t   print_function(   t   isliceN(
   t   NUMERIC_TYPESt	   INT_TYPESt
   TEXT_TYPESt   to_text_stringt   is_text_stringt   is_type_text_stringt   is_binary_stringt   PY2t   to_binary_stringt	   iteritemst
   FakeObjectc           B  s   e  Z d  Z RS(   s1   Fake class used in replacement of missing modules(   t   __name__t
   __module__t   __doc__(    (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyR      s   (   t   ndarrayt   arrayt   matrixt   recarrayt   int64t   int32t   int16t   int8t   uint64t   uint32t   uint16t   uint8t   float64t   float32t   float16t	   complex64t
   complex128t   bool_(   t   MaskedArray(   t   savetxt(   t   get_printoptionst   set_printoptionsc         C  so   t  t k	 rk d d l } t |  | j  s< t |  | j   rk y |  j j SWqh t t f k
 rd d SXqk n  d S(   s   Return NumPy data type associated to obj
    Return None if NumPy is not available
    or if obj is not a NumPy array or scalariN(	   R   R   t   numpyt
   isinstancet   generict   dtypet   typet   AttributeErrort   RuntimeError(   t   objt   np(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_numpy_dtype2   s    $(   t	   DataFramet   DatetimeIndext   Series(   t	   pil_patchc         C  s2   d |  j  j t t |    j   j d d  f S(   s:   Return object address as a string: '<classname @ address>'s	   <%s @ %s>t   Xt   x(   t	   __class__R   t   hext   idt   uppert   replace(   R-   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   addressf   s    c         C  s0   y t  |   SWn t t t f k
 r+ |  SXd S(   s   Try to eval valueN(   t   evalt	   NameErrort   SyntaxErrort   ImportError(   t   value(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   try_to_evall   s    c         C  s{   t  |  t t t f  r" t |   St  |  t t f  r> |  j St  |  t  rT |  j	 St  |  t
 t t f  rs |  j Sd Sd S(   s(   Return size of an item of arbitrary typei   N(   R'   t   listt   tuplet   dictt   lenR   R"   t   shapet   Imaget   sizeR0   R1   R2   (   t   item(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_sizet   s    
c         C  sG   g  t  |   D] } | j d  s | ^ q } | sC t  |   } n  | S(   s[   
    Get the attributes of an object using dir.

    This filters protected attributes
    t   __(   t   dirt
   startswith(   R-   t   kt   attrs(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_object_attrs   s    .(   t   parsec         C  s%   t  j  t t t |  j d      S(   s#   Just for 'year, month, day' stringst   ,(   t   datetimeRB   t   mapt   intt   split(   t   datestr(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt	   dateparse   s    c         C  s:   |  j  d  d } t |  | d ! } t |  d |  | S(   Nt   (i   is   -->(   t   rfindRX   t   print(   R@   t   rpt   v(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   datestr_to_datetime   s    c         C  sk   t  j d |   } | s' t d   n  g  | j d  j d  D] } t | j    ^ q@ } t j |   S(   s  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.

    s,   ^(?:(?:datetime\.)?timedelta)?\(?([^)]*)\)?$s%   Invalid string for datetime.timedeltai   RR   (	   t   ret   matcht
   ValueErrort   groupRV   RU   t   stripRS   t	   timedelta(   R@   t   mt   at   args(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   str_to_timedelta   s    		7s   #00ff00s   #0000ffs   #ff00ffs   #ffff00s   #00ffffs   #c0c0c0s   #800000s   #008000s   #808000s   #7755aas   #ffffffc         C  s   t  |   s t Sxv t t j    D] \ } } t |  |  r# | Sq# Wt |   } | d k sn t |  d  rr t	 S|  j
 d k r t St Sd S(   s)   Return color name depending on value typeRH   i   N(   t   is_known_typet   CUSTOM_TYPE_COLORRB   t   COLORSt   itemsR'   R/   t   Nonet   hasattrt   UNSUPPORTED_COLORRH   t   SCALAR_COLORt   ARRAY_COLOR(   R@   t   typt   namet   np_dtype(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_color_name   s    c         C  s   t  |   t t f k S(   s   Return True if data type is editable with a standard GUI-based editor,
    like CollectionsEditor, ArrayEditor, QDateEdit or a simple QLineEdit(   Ru   Ro   Rj   (   R@   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   is_editable_type   s    c         C  sN   y? g  t  t | |   d d   d | D] \ } } | ^ q( SWn |  SXd S(   s   
    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).
    t   keyc         S  s   |  d S(   Ni    (    (   R5   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   <lambda>   t    t   reverseN(   t   sortedt   zip(   t   list1t   list2Rz   t   _RI   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   sort_against   s
    <c         C  s   t  t |    S(   s=   Removes duplicates from lista neglecting its initial ordering(   RB   t   set(   t   lista(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   unsorted_unique   s    c         C  s^   t  |   } y0 | j } | j } | r7 | d | d S| SWn t |  } | d d !SXd S(   s$   Default display for unknown objects.s    object of s    modulei   iN(   R*   R   R   R   (   R@   t   with_modulet   object_typeRs   t   modulet   type_str(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   default_display  s    		c   
      C  s  t  |  t  } | r$ t |   } n |  } t } | d k rv t |   d k rv | rc t | d  n |  d  } t } nF | d k r t |   d k r | r t | d  n |  d  } t } n  | d k rc| rg  t |  D]2 \ } } t | d | d t | d | ^ q } n% g  | D] } t | d | ^ q} | rQ| j	 d  n  d j
 |  }	 n d }	 | rd	 |	 d
 }	 n. t  |  t  rd |	 d }	 n d |	 d }	 |	 S(   s4   Display for collections (i.e. list, tuple and dict).i   i
   i   i   t   levelt   :s   ...s   , t   {t   }t   [t   ]RY   t   )(   R'   RD   R   t   FalseRE   R   t   TrueRB   t   value_to_displayt   appendt   join(
   R@   R   t   is_dictt   elementst   truncateRN   R]   t   displayst   et   display(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   collections_display  s6    		E"i    c         C  sn  t  } yt t t t t t t t t	 t
 t t t t f } t t  k	 rg t   j d  } t d d  n  t |  t  r | d k r |  j } d d j |  } qd } nIt |  t  r d } n1t |  t  r| d k r}| rMy  d |  j   |  j   f } Wqzt t f k
 rI|  j j | k r:t |   } qJt |   } qzXq|  j j | k rnt |   } qt |   } qd	 } nmt  g  t! t" t# g D] } t |   | k ^ q rt$ |  | d
  } n#t |  t%  r| d k rd t& |   |  j' f } qd } nt |  t(  r| d k r|  j) } t* rt+ |  d k ry t, | d d d }	 Wn t, | d  }	 n X|	 g g  | d
 D] }
 t, |
  ^ q} n g  | D] }
 t, |
  ^ q} d d j t! |   } qd } nt |  t-  r,t, |   } | d k rd | d } qnt |  t.  r| d k rzy |  j/   } Wqt0 k
 rv|  j1   } qXqd } npt2 |   r
t3 |   ry0 t, |  d  } | d k rd | d } n  Wq|  } | d k rd | d } qqXqt |   } n t4 |   rWt3 |   rH|  } | d k rTd | d } qTqt |   } n t |  t5 j6  s{t |  t5 j7  rt |   } ni t |  t8  st |  t9  st |  |  rt: |   } n- | d k rt |   } n t |  d t; } Wn t |   } n Xt+ |  d k rNt2 |  r1d } n d } | d  j<   | } n  | t  k	 rjt d |  n  | S(   s!   Convert value for display purposet	   thresholdi
   i    s   Field names: s   , t   Recarrays   Masked arrays   Min: %r
Max: %rs   Numpy arrayi   s   %s  Mode: %sRG   t   encodings	   utf-8-sigs   Column names: t	   Dataframeu   'R1   t   utf8t   'R   iF   s    ...u    ...(=   R   R   R   R   R   R   R   R   R   R   R   R   R    R   R!   R   R$   t   getR%   R'   R   t   namesR   R"   t   mint   maxt	   TypeErrorRa   R)   R*   t   strR   t   anyRB   RC   RD   R   RG   R;   t   modeR0   t   columnsR	   RE   R   t   NavigableStringR1   t   _summaryR+   t   summaryR   R   R   RS   t   dateRd   R   t   boolt   reprR   t   rstrip(   R@   t   minmaxR   t   np_thresholdt   numeric_numpy_typest   fieldsR   t   tt   colst   ini_colt   ct   ellipses(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyR   D  s    				 	4		-			c         C  s=  d d l  m } | |  t  }  yt |  } t | t  r| y t t |    }  Wqt k
 rx |  j   d k }  qXn| d k	 r d t
 t |   k r | t |    }  q| |   }  nAt |  r t |  d  }  n#t |  r t |   }  nt | t  rt |   }  n t | t  r9t |   }  n t | t  r{y t |   }  Wqt k
 rwt |   }  qXn t | t j  rt |   }  ni t | t j  rt |   j   }  nB t | t j  rt |   }  n! | rt |   }  n t |   }  Wn0 t t f k
 r8| r1t |   }  q9| Sn X|  S(   s   Convert back to valuei(   t   from_qvariantt   truet   complexR   N(   t   qtpy.compatR   R   R/   R'   R   t   floatRa   t   lowerRm   R   R*   R   R   R
   R   RU   RS   R^   R   Rd   Rh   RA   R<   R>   (   R@   t   default_valuet   ignore_errorsR   Rt   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   display_to_value  sP    c         C  si   t  |  t  r d St  |  t  r& d St  |  t  r9 d St j d t t |     } | re | d Sd S(   s    Return type string of an object.R0   R1   R2   s   <(?:type|class) '(\S*)'>i    N(   R'   R0   R1   R2   R_   t   findallR   R*   (   RI   t   found(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_type_string  s    	c         C  s   t  |  t  p t |   d k	 S(   s&   Return True if object has a known typeN(   R'   R"   R   Rm   (   RI   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyRi     s    c         C  sr   t  |  t t f  r |  j j St  |  t  r2 d St |   } | d k rY t d  } n | | j	 d  d Sd S(   s,   Return human-readable type string of an itemRG   t   unknownt   .i   N(
   R'   R   R"   R)   Rs   RG   R   Rm   R   t   find(   RI   t   text(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_human_readable_type  s    
c         C  s/  | d k	 s t  |  d k r" t St |   s2 t St |  |  sE t S| r+t |  t t t f  r d } x= |  D]5 } t	 | d | d | r | d 7} n  | sp Pqp qp W| d k St |  t
  r+xc t |  j    D]L \ } } t	 | d | d | st	 | d | d | rt S| s Pq q Wq+n  t S(   s6   Return True if the value is supported, False otherwisei    t   filterst   iteratei   N(   Rm   t   AssertionErrorR   Rv   R   R'   RB   RC   R   t   is_supportedRD   Rl   (   R@   t	   check_allR   R   t   valid_countt   valRw   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyR   #  s2    

c         C  s   i  } x t  |  j    D] \ }	 }
 | r: |	 j d  p | rP |	 d j   p | r |	 j   r t |	  d k r |	 d j   p |	 | k p | o t |
 d | d | } | s |
 | |	 <q q W| S(   s%   Keep only objects that can be pickledR   i    i   R   R   (   RB   Rl   RM   t   isupperRE   t   isdigitR   (   t
   input_dictR   R   t   exclude_privatet   exclude_capitalizedt   exclude_uppercaset   exclude_unsupportedt   excluded_namest   output_dictRw   R@   t   excluded(    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   globalsfilter@  s    #
R   R   R   R   R   R   R   c          C  s
  d d l  m }  m } t t t t t t |  | g t t	  t t
  } y3 d d l m } m } m } | | | | g 7} Wn n Xy3 d d l m } m } m } | | | | g 7} Wn n X| }	 y$ d d l m }
 | j |
 j  Wn n Xt d |	 d |  S(   s   
    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
    i(   R   Rd   (   R   R   R(   (   R0   R2   R1   (   RG   t	   picklablet   editable(   RS   R   Rd   RU   R   R   RB   RD   RC   R   R   R&   R   R   R(   t   pandasR0   R2   R1   t   spyder.pil_patchRG   R   (   R   Rd   t   editable_typesR   R   R(   R0   R2   R1   t   picklable_typesRG   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_supported_types\  s&    	2c         C  s   t    } | t | j    k s' t  | d } | d k	 rJ | | 7} n  t |  d | d d t | |  d | d d | d d | d d | d d | S(	   s%  
    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   R   R   R   R   R   R   N(   R   RB   t   keysR   Rm   R   RC   (   t   datat   settingsR   t   more_excluded_namest   supported_typesR   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   get_remote_data{  s    	




c         C  s   t  |  | d d d | }  i  } xn t |  j    D]Z \ } } t | d | d } i t |  d 6t |  d 6t |  d 6| d 6| | <q4 W| S(	   sI   
    Make a remote view of dictionary *data*
    -> globals explorer
    R   R   R   R   R*   RH   t   colort   view(   R   RB   Rl   R   R   RJ   Ru   (   R   R   R   t   remoteRw   R@   R   (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   make_remote_view  s    	(   R   R   R   R   R   R   R   (`   R   t
   __future__R    t	   itertoolsR   R_   t   spyder_kernels.py3compatR   R   R   R   R   R   R   R	   R
   R   t   objectR   R&   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   t   numpy.maR"   R#   t
   np_savetxtR$   R%   R/   R   R0   R1   R2   t   spyderR3   RG   t   bs4t   elementR   R;   RA   RJ   RP   RS   t   dateutil.parserRQ   RX   R^   Rh   Rq   Rp   R   RB   RD   RC   R   Rd   Rk   Rj   Ro   Ru   Rv   R   R   R   R   R   R   R   R   R   Ri   R   Rm   R   R   t   REMOTE_SETTINGSR   R   R   (    (    (    s:   lib/python2.7/site-packages/spyder_kernels/utils/nsview.pyt   <module>   s   F
vV	 

						
					-4			  	