
x\c           @   s  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l m Z m Z d d l	 Z	 d d l
 m Z m Z d d l j j Z d d l Z d d l m Z d d l j j Z d d l m Z m Z e	 j d d	  d
    Z d d  Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' e j e j( j) e j( j* e+  d d d d   Z, e	 j d e,  d    Z- d   Z. d   Z/ d   Z0 d   Z1 d    Z2 d!   Z3 e	 j d"    Z4 d# e5 f d$     YZ6 d% e5 f d&     YZ7 d S('   s<  
manage legacy pickle tests

How to add pickle tests:

1. Install pandas version intended to output the pickle.

2. Execute "generate_legacy_storage_files.py" to create the pickle.
$ python generate_legacy_storage_files.py <output_dir> pickle

3. Move the created pickle to "data/legacy_pickle/<version>" directory.
i(   t   LooseVersionN(   t   catch_warningst   simplefilter(   t   PY3t   is_platform_little_endian(   t   Index(   t   Dayt   MonthEndt   scopet   modulec          C   s   d d l  m }  |    S(   Ni(   t   create_pickle_data(   t-   pandas.tests.io.generate_legacy_storage_filesR
   (   R
   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   current_pickle_data!   s    c         C   s   t  | t  r# t j | |   d  S| j d  r[ t t d |  } | |  | d t n | d k r | t j k r |  t j k s t	  q |  | k s t	  |  j
 | j
 k s t	  n& t t d | t j  } | |  |  d  S(   Nt   sp_s   assert_%s_equalt   exact_indicest	   timestamp(   t
   isinstanceR   t   tmt   assert_index_equalt
   startswitht   getattrt   Falset   pdt   NaTt   AssertionErrort   freqt   assert_almost_equal(   t   resultt   expectedt   typt   versiont
   comparator(    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_element,   s    	c         C   s  y t  j |  }  Wn, t k
 rA } d t |  k r; d  S  n Xt   } x |  j   D] \ } } x | j   D] \ } } y |  | | }	 Wn0 t k
 r | d	 k r | d k r Pq   n Xd j d | d |  }
 | j |
 | d  }
 |
 | |	 | |  qq WqX W|  S(
   Ns   unsupported pickle protocol:s   0.10.1s   0.11.0t   regs   compare_{typ}_{dt}R   t   dtR    (   s   0.10.1s   0.11.0(	   R   t   read_picklet
   ValueErrort   strt   globalst   itemst   KeyErrort   formatt   get(   t   datat   vfR   t   et   mR   t   dvR"   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare@   s&    	c         C   sK   | r7 t  |  t  d  k r7 t j |  | d t n t j |  |  d  S(   Ns   0.12.0t   check_series_type(   R    R   t   assert_sp_series_equalR   (   t   rest   expR   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_sp_series_ts`   s    c         C   s6  t  j |  |  |  j j | j j k s. t  |  j j j sD t  t  j |  d k | d k  |  j j } | t d  t d  k s t  | t j d d  } t	 | t j  s t  | t j d d d d  k s t  | t j d d  } t	 | t j  st  | t j d d d d  k s2t  d  S(   Ni    i   i   t   hourst   dayst   nanoseconds(
   R   t   assert_series_equalt   indexR   R   t	   normalizeR   R   t	   TimedeltaR   (   R   R   R   R   R   R3   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_series_tsi   s    "$c         C   sN   t  |  t  d  k  r: | j t  } t j |  |  n t j |  |  d  S(   Ns   0.17.0(   R    t   astypet   objectR   R9   (   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_series_dt_tz}   s    c         C   s|   t  |  t  d  k  r7 t j |  | d t d t nA t  |  t  d  k  rh t j |  | d t n t j |  |  d  S(   Ns   0.15.0t   check_dtypet   check_categoricals   0.16.0(   R    R   R9   R   (   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_series_cat   s    
c         C   sN   t  |  t  d  k  r: | j t  } t j |  |  n t j |  |  d  S(   Ns   0.17.0(   R    R>   R?   R   t   assert_frame_equal(   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_frame_dt_mixed_tzs   s    c         C   s|   t  |  t  d  k  r7 t j |  | d t d t nA t  |  t  d  k  rh t j |  | d t n t j |  |  d  S(   Ns   0.15.0RA   RB   s   0.16.0(   R    R   RD   R   (   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_frame_cat_onecol   s    
c         C   s   t  |  | | |  d  S(   N(   RF   (   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_frame_cat_and_float   s    c         C   s{   t  j |  |  t |  j t  s( t  |  j t   k s@ t  |  j d k sU t  t  j |  j d  | j d   d  S(   Nt   Mi   (   R   R   R   R   R   R   t   freqstrt   shift(   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_index_period   s
    c         C   sK   t  |  t  d  k r7 t j |  | d t d t n t j |  |  d  S(   Ns   0.18.1R   RA   (   R    R   t   assert_sp_frame_equalR   (   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compare_sp_frame_float   s    
R+   t   legacy_picklet   *s   *.picklet   paramsc         C   s   | |  j   S(   N(   t   param(   t   requestt   datapath(    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyRN      s    c         C   sk   t    s t j d  n  t j j t j j |   } t d t   t	 d  t
 |  | |  Wd  QXd  S(   Ns"   known failure on non-little endiant   recordt   ignore(   R   t   pytestt   skipt   ost   patht   basenamet   dirnameR   t   TrueR   R0   (   R   RN   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_pickles   s    	
c            ss  y. d d  l      f d   }   f d   } Wn t k
 rM d  } d  } n Xd d  l   f d   }  f d   } |  } x | j   D] \ } } x | j   D] \ } }	 x t j | | g D] }
 |
 d  k r q n  t j   z } |
 |	 |  t j	 |  } t
 | |	 |  | d  k	 rA| |  } t
 | |	 |  n  | |  } t
 | |	 |  Wd  QXq Wq Wq Wd  S(   Nic      	      s2   t  | d   }   j |  | d d Wd  QXd  S(   Nt   wbt   protocoli(   t   opent   dump(   t   objRY   t   fh(   t   c_pickle(    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt	   c_pickler   s    c            s6   t  |  d  ! } | j d    j |  SWd  QXd  S(   Nt   rbi    (   R`   t   seekt   load(   RY   Rc   (   Rd   (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   c_unpickler   s    c      	      s2   t  | d   }   j |  | d d Wd  QXd  S(   NR^   R_   i(   R`   Ra   (   Rb   RY   Rc   (   t   python_pickle(    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   python_pickler   s    c            s6   t  |  d  ! } | j d    j |  SWd  QXd  S(   NRf   i    (   R`   Rg   Rh   (   RY   Rc   (   Rj   (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   python_unpickler   s    (   t   cPicklet   ImportErrort   Nonet   pickleR'   R   t	   to_pickleR   t   ensure_cleanR#   R    (   R   Re   Ri   Rk   Rl   R+   R   R/   R"   R   t   writerRY   R   (    (   Rd   Rj   s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_round_trip_current   s2    
c      
   C   sb   t  j d d d d g d t d d d d d g  } |  d d	 d
  } t j | t  j |   d  S(   Nt   valuest   at   bt   ct   orderedt
   categoriest   dt   ioR+   s   categorical_0_14_1.pickle(   R   t   CategoricalR   R   t   assert_categorical_equalR#   (   RS   t   catt   pickle_path(    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_pickle_v0_14_1  s    c      
   C   sb   t  j d d d d g d t d d d d d g  } |  d d	 d
  } t j | t  j |   d  S(   NRu   Rv   Rw   Rx   Ry   Rz   R{   R|   R+   s   categorical_0_15_2.pickle(   R   R}   R   R   R~   R#   (   RS   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_pickle_v0_15_2  s    c          C   s8   t  j   }  t  j |  j t j  } t  j |  |  d  S(   N(   R   t   makeDataFramet   round_trip_pathlibRq   R   R#   RD   (   t   dfR   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_pickle_path_pathlib&  s    c          C   s8   t  j   }  t  j |  j t j  } t  j |  |  d  S(   N(   R   R   t   round_trip_localpathRq   R   R#   RD   (   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_pickle_path_localpath,  s    c           C   s   d t  j d  S(   Nu   __%s__.picklei
   (   R   t   rands(    (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   get_random_path6  s    t   TestCompressionc           B   s   e  Z i d  d 6d d 6d d 6d d 6d d 6Z d	   Z d
   Z e j j d d d d d g  d    Z	 e j j d d d d d e j
 d d e j g  d    Z d   Z e j j d d d d d d e j
 d d e j g  d    Z RS(   s   .nones   .gzt   gzips   .bz2t   bz2s   .zipt   zips   .xzt   xzc         C   sk  | d  k r  t j | |  d  S| d k rM d d  l } | j | d  } n | d k rz d d  l } | j | d  } n | d k r d d  l } | j | d d | j	 # } | j
 | t j j |   Wd  QXnK | d k rt j j   } | j | d  } n d j |  }	 t |	   | d k rgt | d	  ' }
 |  | j
 |
 j    Wd  QXWd  QXn  d  S(
   NR   it   wR   R   t   compressionR   s!   Unrecognized compression type: {}Rf   (   Ro   t   shutilt   copyfileR   R`   R   t   BZ2Filet   zipfilet   ZipFilet   ZIP_DEFLATEDt   writeRX   RY   RZ   R   t   compatt   import_lzmat   LZMAFileR)   R$   t   read(   t   selft   src_patht	   dest_pathR   R   t   fR   R   t   lzmat   msgRc   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   compress_fileE  s.    % c         C   s   | } | d } | d } t  j |   } t  j |   } t  j   } | j | d | t  j | d | 2 }	 t | d   }
 |
 j |	 j    Wd  QXWd  QXt j	 | d d  } t  j | |  Wd  QXWd  QXd  S(   Ns   .compresseds   .rawR   R^   (   R   Rr   R   Rq   t   decompress_fileR`   R   R   R   R#   Ro   RD   (   R   R   R   t   baset   path1t   path2t   p1t   p2R   R   Rc   t   df2(    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_write_explicit`  s    

 R   t    Ro   t   badt   7zc         C   sW   t  j t d d < t j |  & } t j   } | j | d | Wd  QXWd  QXd  S(   Nt   matchs   Unrecognized compression typeR   (   RV   t   raisesR$   R   Rr   R   Rq   (   R   R   R   RY   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_write_explicit_badu  s    t   exts   .no_compresst   marksc         C   s  | } | | } | d } d  } x. |  j D]# } |  j | | k r* | } Pq* q* Wt j |   } t j |   }	 t j   }
 |
 j |  t j | d | 2 } t |	 d   } | j | j	    Wd  QXWd  QXt
 j |	 d d  } t j |
 |  Wd  QXWd  QXd  S(   Ns   .rawR   R^   (   Ro   t   _compression_to_extensionR   Rr   R   Rq   R   R`   R   R   R   R#   RD   (   R   R   R   R   R   R   R   Rx   R   R   R   R   Rc   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_write_infer|  s"    

 c   
      C   s   | } | d } | d } t  j |  y } t  j |  a } t  j   } | j | d d  |  j | | d | t j | d | }	 t  j | |	  Wd  QXWd  QXd  S(   Ns   .raws   .compressedR   (	   R   Rr   R   Rq   Ro   R   R   R#   RD   (
   R   R   R   R   R   R   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_read_explicit  s    

 c         C   s   | } | d } | | } d  } x. |  j D]# } |  j | | k r* | } Pq* q* Wt j |  s } t j |  [ }	 t j   }
 |
 j | d d  |  j | |	 d | t j |	  } t j	 |
 |  Wd  QXWd  QXd  S(   Ns   .rawR   (
   Ro   R   R   Rr   R   Rq   R   R   R#   RD   (   R   R   R   R   R   R   R   Rx   R   R   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_read_infer  s    

 N(   t   __name__t
   __module__Ro   R   R   R   RV   t   markt   parametrizeR   RQ   t   tdt   skip_if_no_lzmaR   R   R   (    (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyR   ;  s    
		*'	t   TestProtocolc           B   sn   e  Z e j j d  d d d d g  d    Z e j j d  d d g  e j j e d d	 d
     Z RS(   R_   ii    i   i   c         C   sZ   t  j |  E } t  j   } | j | d | t j |  } t  j | |  Wd  QXd  S(   NR_   (   R   Rr   R   Rq   R   R#   RD   (   R   R_   R   RY   R   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt	   test_read  s
    i   i   t   reasons'   Testing invalid parameters for Python 2c         C   si   d j  d |  } t j t d | < t j |  & } t j   } | j | d | Wd  QXWd  QXd  S(   NsI   pickle protocol {protocol} asked for; the highest available protocol is 2R_   R   (   R)   RV   R   R$   R   Rr   R   Rq   (   R   R_   R   R   RY   R   (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   test_read_bad_versions  s    		(	   R   R   RV   R   R   R   t   skipifR   R   (    (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyR     s   *(8   t   __doc__t   distutils.versionR    t   globRX   R   t   warningsR   R   RV   t   pandas.compatR   R   t   pandas.util._test_decoratorst   utilt   _test_decoratorsR   t   pandasR   R   t   pandas.util.testingt   testingR   t   pandas.tseries.offsetsR   R   t   fixtureR   Ro   R    R0   R5   R=   R@   RC   RE   RF   RG   RK   RM   RY   t   joinR[   t   __file__t   filesRN   R]   Rt   R   R   R   R   R   R?   R   R   (    (    (    s:   lib/python2.7/site-packages/pandas/tests/io/test_pickle.pyt   <module>   sH   	 				
		
				!	
	5				
