
)Ί]c           @  s  d  Z  d d l m Z d d l Z d d l Z d d l j 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 Z d d l Z d d l Z y d d l Z Wn d Z n Xd d l m Z m Z m Z m Z d e f d     YZ d   Z y d d l Z y3 e j   ! e j  d  d d l! j" Z# Wd QXWn, e$ k
 rzd d l! j" Z# n d Z# n Xe# d k rd Z% d Z& n d	   Z% d
   Z& Wn d Z% d Z& n Xy" d d l Z d   Z' d   Z( Wn d Z' n Xy d d l) m* Z* e j+ d k r(d Z, n d Z, i dL d 6dM d 6d e, d f d 6d e, d f d 6dN d 6d e, d f d 6dO d 6dP d 6dQ d! 6dR d" 6dS d# 6dT d$ 6Z- d%   Z. d&   Z/ Wn d Z/ n Xd'   Z0 d(   Z1 d)   Z2 d*   Z3 d+ e4 f d,     YZ5 e5   Z6 e6 j7   d-   Z8 e9 d. k rd d l: Z: i d/ d0 6e j; j< d1 d1  d2 6d/ d3 g d4 6Z= e: j> d5 d6 d7  Z? i
 d8 d9 6d: d; 6d/ d d  d6 d< g d= d g d> 6d/ e? e= g d= d f d? 6e= d@ 6dA dB 6e j; j< dC dD  dE 6e j@ g   dF 6e? dG 6e: j: d5 d6 d7  dH 6ZA d d lB ZB eB jB   ZC e2 eA dI  eD dJ eB jB   eC  eB jB   ZC e3 dI  \ ZE ZF e jG dI  eD dK eB jB   eC  n  d S(U   s   
Input/Output Utilities

Note: 'load' functions has to return a dictionary from which a globals()
      namespace may be updated
i(   t   print_functionN(   t   getcwdt   picklet   PY2t   to_text_stringt   MatlabStructc           B  sJ   e  Z d  Z d   Z d   Z d   Z e j Z e j	 Z
 e d    Z RS(   s  
    Matlab style struct, enhanced.

    Supports dictionary and attribute style access.  Can be pickled,
    and supports code completion in a REPL.

    Examples
    ========
    >>> from spyder.utils.iofuncs import MatlabStruct
    >>> a = MatlabStruct()
    >>> a.b = 'spam'  # a["b"] == 'spam'
    >>> a.c["d"] = 'eggs'  # a.c.d == 'eggs'
    >>> print(a)
    {'c': {'d': 'eggs'}, 'b': 'spam'}

    c         C  s:   y |  | SWn' t  k
 r5 d | } t |   n Xd S(   s2   Access the dictionary keys for unknown attributes.s)   'MatlabStruct' object has no attribute %sN(   t   KeyErrort   AttributeError(   t   selft   attrt   msg(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   __getattr__@   s
    
c         C  s   | |  j    k s! | j d  r1 t j |  |  St j   } | j j rw |  j | j j  rw t j |  | t	    n+ |  j | j  r t j |  | t	    n  t j |  |  S(   s   
        Get a dict value; create a MatlabStruct if requesting a submember.

        Do not create a key if the attribute starts with an underscore.
        t   _(
   t   keyst
   startswitht   dictt   __getitem__t   inspectt   currentframet   f_backt   _is_allowedt   __setitem__R   (   R   R	   t   frame(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR   H   s    !!c         C  sk   t  j d t  j d t  j j d d  g } | j j } | | j d } t r[ t |  n | } | | k S(   s.   Check for allowed op code in the calling framet
   STORE_ATTRt
   LOAD_CONSTt	   STOP_CODEi    i   (   t   dist   opmapt   gett   f_codet   co_codet   f_lastiR   t   ord(   R   R   t   allowedt   bytecodet   instruction(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR   X   s    c         C  s
   |  j    S(   s#   Allow for code completion in a REPL(   t   copy(   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   __dict__d   s    (   t   __name__t
   __module__t   __doc__R   R   R   R   R   t   __setattr__t   __delitem__t   __delattr__t   propertyR%   (    (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR   /   s   						c         C  s  d d l  } t |  t  r8 g  |  D] } t |  ^ q" St |  | j  sN |  St |  d  r t   } x4 |  j j D]& } t |  | j	   j
    | | <qs Wt |  j t f |  } |   S|  j j rt   } x4 |  j j D]& } t |  | j	   j
    | | <q W| }  n |  j j d k r_|  j	   j
   }  t |  t  sP|  g }  n  t |   }  nQ |  j d k r}|  j   }  n3 |  j d k r|  j j d k rd }  qg  }  n  |  S(	   s   
    Extract a value from a Matlab file

    From the oct2py project, see
    https://pythonhosted.org/oct2py/conversions.html
    iNt	   classnamet   Oi   i    t   USt    (   t   numpyt
   isinstancet   listt   get_matlab_valuet   ndarrayt   hasattrR   t   dtypet   namest   squeezet   tolistt   typeR-   t   objectR   t   kindt   sizet   item(   t   valt   npt   vt   outt   namet   cls(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR4   j   s8    	$	$			t   ignorec         C  s   yY t  j |  d t } t   } x* | j   D] \ } } t |  | | <q. W| d  f SWn  t k
 r{ } d  t |  f SXd  S(   Nt   struct_as_record(	   t   spiot   loadmatt   TrueR   t   itemsR4   t   Nonet	   Exceptiont   str(   t   filenameRC   t   datat   keyt   valuet   error(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   load_matlab   s    	c         C  s;   y t  j | |  d d Wn t k
 r6 } t |  SXd  S(   Nt   oned_ast   row(   RH   t   savematRM   RN   (   RP   RO   RS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   save_matlab   s    c         C  s   yY t  j t  j |    d } t j |   } t | d  rG | d  f Si | | 6d  f SWn  t k
 r{ } d  t |  f SXd  S(   Ni    R   (	   t   ospt   splitextt   basenameRA   t   loadR6   RL   RM   RN   (   RO   RD   RP   RS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt
   load_array   s    
c         C  s"   | d | } t  j | |   | S(   s   Save numpy arrays	   _%04d.npy(   RA   t   save(   RP   R[   t   indext   fname(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   __save_array   s    (   t   Imaget   littlet   <t   >s   |b1t   1s   |u1t   Ls   %si4t   Is   %sf4t   Fs   |u2s   I;16s   %si2s   I;16St   Pi   t   RGBi   t   RGBXt   RGBAt   CMYKt   YCbCrc         C  s   t  j |   } y t | j \ } } Wn$ t k
 rL t d | j   n X| j d | j d f } | d  k	 r | | f 7} n  t j	 | j
   d t j |  j |  S(   Ns   %s mode is not supportedi   i    R7   (   Rb   t   opent   DTYPESt   modeR   t   RuntimeErrorR>   RL   RA   t   arrayt   getdataR7   t   reshape(   RO   t   imgR7   t   extrat   shape(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   __image_to_array   s    c         C  s^   y7 t  j t  j |    d } i t |   | 6d  f SWn  t k
 rY } d  t |  f SXd  S(   Ni    (   RY   RZ   R[   Rz   RL   RM   RN   (   RO   RD   RS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt
   load_image   s
    c         C  su   yN t  r t  j |   d f St |  d   } t j |  } Wd QX| d f SWn  t k
 rp } d t |  f SXd S(   s"   Load a pickle file as a dictionaryt   rbN(   t   pdt   read_pickleRL   Rp   R   R\   RM   RN   (   RO   t   fidRP   t   err(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   load_pickle  s    c         C  sq   yJ t  r d } n d } t |  |   } t j |  } Wd QX| d f SWn  t k
 rl } d t |  f SXd S(   s    Load a json file as a dictionaryR|   t   rN(   R   Rp   t   jsonR\   RL   RM   RN   (   RO   t   argsR   RP   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt	   load_json  s    	c         C  s  t  j |  } t   } t j t  j |   d	 } g  } i  } zhyxs |  j   D]e \ } } t |  pz t	 | t
 j  sS y t j |  | | <Wq t k
 r | j |  q XqS qS W| }  |  s t d   n  i  } t d	 k	 rt  j |  d }	 xt |  j    D]}
 y}t	 |  |
 t j  r|  |
 j d k rt |  |
 |	 t |   } t  j |  | |
 d	 f <|  j |
  nt	 |  |
 t t f  rt	 |  |
 t  rt |  |
  } n t t |  |
 j     } g  } xv | D]n \ } } t	 | t j  r| j d k rt | |	 t |   } t  j |  | |
 | f <| j |  qqWx. t | d t  D] } |  |
 j |  qsWn  Wqt t! j" t# t$ t% f k
 rqXqW| r| |  d <qn  t  j |  d d } t& | d   } y t! j' |  | d d Wn t! j" t$ t# t( t% t f k
 ri  } x\ |  j   D]N \ } } y t! j) | d d Wn t k
 r| j |  qMX| | | <qMW| st d   n  t! j' | | d d n XWd	 QXt* j& | d
 d t* j+ a } xW | g g  t | j,    D] } | ^ qD]) } | j- t  j |   t j. |  qWWd	 QXWn+ t t! j" t# f k
 r} t/ |  } n' X| r| j0   d d j1 |  } n  Wd	 t j |  X| S(   s.   Save dictionary in a single file .spydata files   No supported objects to savei    t   reverset   __saved_arrays__s   .pickles   w+bt   protocoli   Nt   wt   formats!   Some objects could not be saved: s   , (2   RY   t   abspathR   t   ost   chdirt   dirnameRL   RK   t   callableR2   t   typest
   ModuleTypeR$   t   deepcopyRM   t   appendRs   R]   RZ   R3   R   RA   R5   R>   Ra   t   lenR[   t   popR   t	   enumeratet   itert   sortedRJ   R   t   PicklingErrort	   TypeErrorR   t
   IndexErrorRp   t   dumpt   ImportErrort   dumpst   tarfilet
   PAX_FORMATt   valuest   addt   removeR   t   sortt   join(   RP   RO   t   old_cwdt   error_messaget   skipped_keyst	   data_copyt   obj_namet	   obj_valuet   saved_arrayst	   arr_fnameRD   R`   t   iteratort	   to_removeR_   RR   t   pickle_filenamet   fdesct   data_filteredt   tart   fnRS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   save_dictionary  s    	 
	 	*
c         C  s  t  j |   }  t   } t j   } t j |  d } d } ziy:t j	 |  d   } | j
   Wd QXt j d  d } t	 | d   } t j | j    } Wd QXi  } t d k	 ryy | j d  } x t | j    D]~ \ \ }	 }
 } t j t  j | |   } |
 d k r%| | |	 <q t | |	 t  rI| | |	 |
 <q | |	 j |
 |  q WWqyt k
 ruqyXn  Wn( t t t f k
 r} t |  } n XWd t j |  y t j |  Wn t  k
 r} t |  } n XX| | f S(   s"   Load dictionary from .spydata fileR   Ns   *.picklei    R|   R   (!   RY   R   R   t   tempfilet   mkdtempR   R   RL   R   Rp   t
   extractallt   globR   t   loadst   readR]   R   R3   RK   RA   R\   R   R2   R   t   insertR   R   t   EOFErrort
   ValueErrorR   t   shutilt   rmtreet   OSError(   RO   R   t
   tmp_folderRP   R   R   R   R   R   RD   R_   R`   t   arrRS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   load_dictionary  sD    	 %t   IOFunctionsc           B  s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C  s:   d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   RL   t   load_extensionst   save_extensionst   load_filterst   save_filterst
   load_funcst
   save_funcs(   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   __init__  s    					c         C  sd  |  j    |  j   } i  } i  } i  } i  } g  } g  } g  } x | D] \ }	 }
 } } t |
 d |	  } | d  k	 r | j |  |	 | | <| | |	 <| j |	  n  | d  k	 rG |	 | | <| j |  | | |	 <qG qG W| j d t d	 d j |  d   | j t d   d j |  |  _ d j |  |  _ | |  _	 | |  _
 | |  _ | |  _ d  S(
   Ns    (*%s)i    s   Supported filess    (*s    *t   )s   All files (*.*)s   
s   Supported files (*(   t   get_internal_funcst   get_3rd_party_funcsR   RL   R   R   R   R   R   R   R   R   R   (   R   t   iofuncsR   R   R   R   R   R   t   load_extt   extRD   t   loadfunct   savefunct
   filter_str(    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   setup  s8    


			c         C  s   d d t  t f d d t d  f d d t d  f d d t t f d d d d t d  f d d t d  f d d t d  f d d t d  f d d t d  f d d t d  f d d t d  f g S(   Ns   .spydatas   Spyder data filess   .npys   NumPy arrayss   .npzs   NumPy zip arrayss   .mats   Matlab filess   .csvs   CSV text filest   import_wizards   .txts
   Text filess   .jpgs   JPEG imagess   .pngs
   PNG imagess   .gifs
   GIF imagess   .tifs   TIFF imagess   .pkls   Pickle filess   .pickles   .jsons
   JSON files(   s   .csvs   CSV text filesR   N(   s   .txts
   Text filesR   N(	   R   R   R]   RL   RT   RX   R{   R   R   (   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR     s    	c         C  s   g  } y d d l  m } xy | d t  D]h } y) | j | j | j | j | j f  Wq) t k
 r } t	 d | t
 |  f d t j q) Xq) WWn t k
 r n X| S(   Ni(   t   get_spyderplugins_modst   ios   %s: %st   file(   t   spyder.otherpluginsR   RJ   R   t
   FORMAT_EXTt   FORMAT_NAMEt   FORMAT_LOADt   FORMAT_SAVER   t   printRN   t   syst   stderrR   (   R   t   other_funcsR   t   modRS   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR     s    /c         C  sH   t  j |  d j   } | |  j k r< |  j | | |  Sd | Sd  S(   Ni   s!   <b>Unsupported file type '%s'</b>(   RY   RZ   t   lowerR   (   R   RP   RO   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR^     s    c         C  sK   t  j |  d j   } | |  j k r9 |  j | |  Sd  d | f Sd  S(   Ni   s!   <b>Unsupported file type '%s'</b>(   RY   RZ   R   R   RL   (   R   RO   R   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR\     s    (   R&   R'   R   R   R   R   R^   R\   (    (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyR     s   					c         C  s   d S(   s4   Save data into filename, depending on file extensionN(    (   RP   RO   (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt	   save_auto  s    t   __main__i   t   di
   t   ai   t   bi  i   i   s   kjkj kj k j j kj k jkjRN   u   éùt   unicodei   t   kjkjR3   t   tupleR   g&S?t   floati  i  Rt   t   empty_arrayt   datet   datetimes   test.spydatas    Data saved in %.3f secondss   Data loaded in %.3f seconds(   s   |b1N(   s   |u1N(   s   |u2N(   s   |u1N(   s   |u1i   (   s   |u1i   (   s   |u1i   (   s   |u1i   (   s   |u1i   (H   R(   t
   __future__R    R   R   t   os.patht   pathRY   R   R   R   R   t   warningsR   R   R   R$   R   t   pandasR}   RL   t   spyder_kernels.py3compatR   R   R   R   R   R   R4   R1   RA   t   catch_warningst   simplefiltert   scipy.ioR   RH   R   RT   RX   R]   Ra   t   spyder.pil_patchRb   t	   byteordert   _ENDIANRq   Rz   R{   R   R   R   R   R<   R   t   iofunctionsR   R   R&   R   t   randomt   randt   testdictR   t   testdateRt   t   examplet   timet   t0R   t   example2t   okR   (    (    (    s;   lib/python2.7/site-packages/spyder_kernels/utils/iofuncs.pyt   <module>   s   
";	5
		

	
	
	
			i	+U	
	0
