ó
šxŠ\c           @   sÉ  d  Z  d d l m Z d d l Z d d l Z d d l m Z m Z d d l	 m
 Z
 d d l m Z m Z m Z d d l j j Z d „  Z e j j d e e g ƒ d	 „  ƒ Z d
 „  Z d „  Z d „  Z d „  Z e j j d e d d d g ƒ d f e d d d g d d d g ƒ d f e d d d g d d d g ƒ d f g ƒ d „  ƒ Z e d d d g ƒ Z e j j d e d d d g ƒ e d d d dY dZ d[ d\ d] d^ g ƒ e d d d e d d  ƒ e d d! ƒ e d d" ƒ e d# d$ ƒ e d% d& ƒ e d% d' ƒ g ƒ g ƒ d( „  ƒ Z  e j j d e d d d g ƒ e d d) d d_ d` da db dc dd g ƒ e d d) d e d d  ƒ e d d! ƒ e d d" ƒ e d# d$ ƒ e d% d& ƒ e d% d' ƒ g ƒ g ƒ d* „  ƒ Z! e j j d e d d d g ƒ e d d) d de df dg dh di dj g ƒ e d d) d e d d  ƒ e d d! ƒ e d d" ƒ e d# d$ ƒ e d% d& ƒ e d% d' ƒ g ƒ g ƒ d+ „  ƒ Z" d, „  Z# d- „  Z$ d. „  Z% e j j d/ dk dl g ƒ d2 „  ƒ Z' e j j d e ƒ  e d e ƒ g ƒ d3 „  ƒ Z( e j j d4 e ƒ  d d d) d d5 g f e d6 d7 ƒ d8 d9 d: d; d< g f e d d d d= d> d? g ƒ d d d= d> d? g f g ƒ d@ „  ƒ Z) e j j d d d# g dA g ƒ dB „  ƒ Z* dC „  Z+ e j j dD dE e d dF dG dH g g dI e j, dm dn do dp g ƒ ƒf dP e d dF dG dH g g dI e j, dq dr ds dt g ƒ ƒf dR e d dF dG dH dH g g dI e j, du dv dw dx dy g ƒ ƒf g ƒ dT „  ƒ Z- e j j d d d g g ƒ e j j dI d dU dV g dV dU g dV dW g g ƒ dX „  ƒ ƒ Z. d S(z   sx   
Tests that the file header is properly handled or inferred
during parsing for all of the parsers defined in parsers.py
iÿÿÿÿ(   t
   namedtupleN(   t   StringIOt   u(   t   ParserError(   t	   DataFramet   Indext
   MultiIndexc         C   sN   |  } d } t  j t d | ƒ' t d ƒ } | j | d d g ƒWd  QXd  S(   Ns   but only \d+ lines in filet   matchs   ,,t   headeri
   (   t   pytestt   raisest
   ValueErrorR   t   read_csv(   t   all_parserst   parsert   msgt   s(    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_read_with_bad_header   s
    R   c         C   sK   |  } d } d } t  j t d | ƒ | j t | ƒ d | ƒWd  QXd  S(   Ns   MyColumn
a
b
a
bs#   Passing a bool to header is invalidR   R   (   R	   R
   t	   TypeErrorR   R   (   R   R   R   t   dataR   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_bool_header_arg   s
    c         C   s˜   |  } d } | j  t | ƒ d d d d  ƒ} t d d d d d	 g d
 d d d d g d d d d d g g d d d d d d g ƒ} t j | | ƒ d  S(   Ns$   1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
t   prefixt   FieldR   i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   t   columnst   Field0t   Field1t   Field2t   Field3t   Field4(   R   R   t   NoneR   t   tmt   assert_frame_equal(   R   R   R   t   resultt   expected(    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_no_header_prefix,   s    !'	c         C   s˜   |  } d } d d d g } | j  t | ƒ d | ƒ} t d d d g d	 d
 d g d d d g g d d d d g d d d d g ƒ} t j | | ƒ d  S(   Ns   foo,1,2,3
bar,4,5,6
baz,7,8,9
t   At   Bt   Ct   namesi   i   i   i   i   i   i   i   i	   t   indext   foot   bart   bazR   (   R   R   R   R   R   (   R   R   R   R&   R    R!   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_header_with_index_col:   s    -c         C   sh   |  } d } d } | j  t | ƒ d d d d ƒ} | j  t | ƒ d d d d ƒ} t j | | ƒ d  S(   Nsg   got,to,ignore,this,line
got,to,ignore,this,line
index,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
s7   index,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
R   i   t	   index_coli    (   R   R   R   R   (   R   R   R   t   data2R    R!   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_header_not_first_lineI   s    !!c         C   sq   |  } t  j d d d d d d ƒ} d } | j t | ƒ d d	 d
 d d g d d	 d
 g ƒ} t  j | | ƒ d  S(   Ni   i   t   r_idx_nlevelsi   t   c_idx_nlevelsi   s  C0,,C_l0_g0,C_l0_g1,C_l0_g2

C1,,C_l1_g0,C_l1_g1,C_l1_g2
C2,,C_l2_g0,C_l2_g1,C_l2_g2
C3,,C_l3_g0,C_l3_g1,C_l3_g2
R0,R1,,,
R_l0_g0,R_l1_g0,R0C0,R0C1,R0C2
R_l0_g1,R_l1_g1,R1C0,R1C1,R1C2
R_l0_g2,R_l1_g2,R2C0,R2C1,R2C2
R_l0_g3,R_l1_g3,R3C0,R3C1,R3C2
R_l0_g4,R_l1_g4,R4C0,R4C1,R4C2
R   i    i   R,   (   R   t   makeCustomDataframeR   R   R   (   R   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_header_multi_index]   s    $s
   kwargs,msgR,   R(   R)   sL   index_col must only contain row numbers when specifying a multi-index headeri    i   R&   s9   cannot specify names when specifying a multi-index headert   usecolss;   cannot specify usecols when specifying a multi-index headerc         C   sT   d } |  } t  j t d | ƒ- | j t | ƒ d d d d d g | Wd  QXd  S(   Ns  C0,,C_l0_g0,C_l0_g1,C_l0_g2

C1,,C_l1_g0,C_l1_g1,C_l1_g2
C2,,C_l2_g0,C_l2_g1,C_l2_g2
C3,,C_l3_g0,C_l3_g1,C_l3_g2
R0,R1,,,
R_l0_g0,R_l1_g0,R0C0,R0C1,R0C2
R_l0_g1,R_l1_g1,R1C0,R1C1,R1C2
R_l0_g2,R_l1_g2,R2C0,R2C1,R2C2
R_l0_g3,R_l1_g3,R3C0,R3C1,R3C2
R_l0_g4,R_l1_g4,R4C0,R4C1,R4C2
R   R   i    i   i   i   (   R	   R
   R   R   R   (   R   t   kwargsR   R   R   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_header_multi_index_invalidt   s    t   firstt   secondR4   t   skiprowsi   t   at   qt   rR   t   bt   tt   cR   t   vc         C   s¡   |  } t  d d d d d d g d d d	 d
 d d g g d d d g d t j d d d d  d! d" g ƒ ƒ} d } | j t | ƒ d d | } t j | | ƒ d  S(#   Ni   i   i   i   i   i   i   i   i	   i
   i   i   R'   t   onet   twoR   R9   R:   R;   R   R<   R=   R>   R   R?   sC   ,a,a,a,b,c,c
,q,r,s,t,u,v
,,,,,,
one,1,2,3,4,5,6
two,7,8,9,10,11,12R,   i    (   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (   R   R   t   from_tuplesR   R   R   R   (   R   R4   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt&   test_header_multi_index_common_format1—   s    3	i   c         C   s¡   |  } t  d d d d d d g d d d	 d
 d d g g d d d g d t j d d d d  d! d" g ƒ ƒ} d } | j t | ƒ d d | } t j | | ƒ d  S(#   Ni   i   i   i   i   i   i   i   i	   i
   i   i   R'   R@   RA   R   R9   R:   R;   R   R<   R=   R>   R   R?   s<   ,a,a,a,b,c,c
,q,r,s,t,u,v
one,1,2,3,4,5,6
two,7,8,9,10,11,12R,   i    (   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (   R   R   RB   R   R   R   R   (   R   R4   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt&   test_header_multi_index_common_format2²   s    3	c         C   s³   |  } t  d d d d d d g d d d	 d
 d d g g d d d g d t j d d d d  d! d" g ƒ ƒ} | j d t ƒ } d } | j t | ƒ d d  | } t j	 | | ƒ d  S(#   Ni   i   i   i   i   i   i   i   i	   i
   i   i   R'   R@   RA   R   R9   R:   R;   R   R<   R=   R>   R   R?   t   drops2   a,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12R,   (   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (
   R   R   RB   t   reset_indext   TrueR   R   R   R   R   (   R   R4   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt&   test_header_multi_index_common_format3Ì   s    3	c         C   s7  |  } t  t j d d d d d g d d d d	 d
 g g d d ƒd t d d g ƒ d t d t d ƒ t d ƒ t d ƒ g t d ƒ t d ƒ t d ƒ t d ƒ t d ƒ g g d d d d d d g d d d d d g g d t d ƒ t d ƒ g ƒ ƒ} d } | j t | ƒ d d d g d  d ƒ} t j	 | | ƒ d  S(!   Ni   i   i   i   i   i   i	   i
   i   i   t   dtypet   int64R'   i   i   R   t   levelsR9   R<   R>   R;   R   R=   R   R?   t   codesi    R&   R:   s2   a,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12R   R,   (
   R   t   npt   arrayR   R   R   R   R   R   R   (   R   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt0   test_header_multi_index_common_format_malformed1ç   s    	3$*'c         C   s1  |  } t  t j d d d d d g d d d d	 d
 g g d d ƒd t d d g ƒ d t d t d ƒ t d ƒ t d ƒ g t d ƒ t d ƒ t d ƒ t d ƒ t d ƒ g g d d d d d d g d d d d d g g d d  t d ƒ g ƒ ƒ} d } | j t | ƒ d d d g d  d ƒ} t	 j
 | | ƒ d  S(!   Ni   i   i   i   i   i   i	   i
   i   i   RI   RJ   R'   i   i   R   RK   R9   R<   R>   R;   R   R=   R   R?   RL   i    R&   R:   s1   ,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12R   R,   (   R   RM   RN   R   R   R   R   R   R   R   R   (   R   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt0   test_header_multi_index_common_format_malformed2ú   s    	3$*'c         C   sI  |  } t  t j d d d d g d d d d g g d	 d
 ƒd t d d d g d d g g d d d g d d g g ƒ d t d t d ƒ t d ƒ t d ƒ g t d ƒ t d ƒ t d ƒ t d ƒ g g d d d d d g d d d d g g d d  t d ƒ g ƒ ƒ} d } | j t | ƒ d d d g d d d g ƒ} t j	 | | ƒ d  S(    Ni   i   i   i   i	   i
   i   i   RI   RJ   R'   RK   i   i   i   i   RL   i    R   R9   R<   R>   R   R=   R   R?   R&   R:   s1   ,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12R   R,   (
   R   RM   RN   R   R   R   R   R   R   R   (   R   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt0   test_header_multi_index_common_format_malformed3  s    	-$-$-s   data,headers   1,2,3
4,5,6s   foo,bar,baz
1,2,3
4,5,6c         C   sh   |  } | j  t d ƒ d d d d g ƒ} | j  t | ƒ d d d d g d | ƒ} t j | | ƒ d  S(   Ns   1,2,3
4,5,6R&   R9   R<   R>   R   (   R   R   R   R   (   R   R   R   R   R!   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt!   test_header_names_backward_compat!  s    !	c         C   sJ   |  } t  d d d d g ƒ } | j t d ƒ |  } t j | | ƒ d  S(   NR   R9   R<   R>   s   a,b,c(   R   R   R   R   R   (   R   R4   R   R!   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_read_only_header_no_rows0  s    s   kwargs,namesi   R   t   Xt   X0t   X1t   X2t   X3t   X4R*   t   quuxt   pandac         C   s†   |  } d } t  d d d d d g d d d	 d
 d g d d d d d g g d | ƒ} | j t | ƒ d d  | } t j | | ƒ d  S(   Ns$   1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   R   R   (   R   R   R   R   R   R   (   R   R4   R&   R   R   R!   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_no_header<  s    !t   string_headerc         C   sK   d } d } |  } t  j t d | ƒ | j t | ƒ d | ƒWd  QXd  S(   Ns*   header must be integer or list of integerss   1,2
3,4R   R   (   R	   R
   R   R   R   (   R   R   R   R   R   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_non_int_headerO  s
    c         C   sq   d } |  } t  i d d g d 6d d g d 6d d g d 6ƒ } | j t | ƒ d	 d g ƒ} t j | | ƒ d  S(
   Ns   a,b,c
0,1,2
1,2,3i    i   R9   i   R<   i   R>   R   (   R   R   R   R   R   (   R   R   R   R!   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_singleton_header]  s
    3s   data,expecteds#   A,A,A,B
one,one,one,two
0,40,34,0.1i(   i"   gš™™™™™¹?R   R#   R@   s   one.1s   one.2R$   RA   s%   A,A,A,B
one,one,one.1,two
0,40,34,0.1s   one.1.1s/   A,A,A,B,B
one,one,one.1,two,two
0,40,34,0.1,0.1s   two.1c         C   s;   |  } | j  t | ƒ d d d g ƒ} t j | | ƒ d  S(   NR   i    i   (   R   R   R   R   (   R   R   R!   R   R    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_mangles_multi_indexg  s    !t    t   Unnamedt
   NotUnnamedc      
   C   s”  |  } d d g } | d  k r@ d j | p3 d d g ƒ d } n& d j d g | p[ d d g ƒ d } | d  k r¶ d } t j t d | ƒ$ | j t | ƒ d	 | d
 | ƒWd  QXnÚ | j t | ƒ d	 | d
 | ƒ} d } g  }	 xX t | ƒ D]J \ }
 } | s-| j d | d  k r|
 n |
 d ƒ } n  |	 j	 | ƒ qð Wt
 j t |	 d d g ƒ ƒ } t d d g d d g g d | ƒ} t j | | ƒ d  S(   Ni    i   t   ,Ra   s   
0,1
2,3
4,5
s   
,0,1
0,2,3
1,4,5
sG   Passed header=\[0,1\] are too many rows for this multi_index of columnsR   R   R,   s   Unnamed: {i}_level_0t   it   0t   1i   i   i   i   R   (   R   t   joinR	   R
   R   R   R   t	   enumeratet   formatt   appendR   RB   t   zipR   R   R   (   R   R,   R   R   R   R   R   R    t   templatet   exp_columnsRe   t   colR!   (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   test_multi_index_unnamed  s,    "	+$(   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (   R9   R:   (   R9   R;   (   R9   R   (   R<   R=   (   R>   R   (   R>   R?   (   s   1,2,3
4,5,6N(   s   foo,bar,baz
1,2,3
4,5,6i    (   R#   R@   (   R#   s   one.1(   R#   s   one.2(   R$   RA   (   R#   R@   (   R#   s   one.1(   R#   s   one.1.1(   R$   RA   (   R#   R@   (   R#   s   one.1(   R#   s   one.1.1(   R$   RA   (   R$   s   two.1(/   t   __doc__t   collectionsR    t   numpyRM   R	   t   pandas.compatR   R   t   pandas.errorsR   t   pandasR   R   R   t   pandas.util.testingt   utilt   testingR   R   t   markt   parametrizeRG   t   FalseR   R"   R+   R.   R2   t   dictR5   t
   _TestTupleRC   RD   RH   RO   RP   RQ   R   RR   RS   R\   R^   R_   RB   R`   Rp   (    (    (    sA   lib/python2.7/site-packages/pandas/tests/io/parser/test_header.pyt   <module>   s¨   		$				$6	0	0	0			$!'		
!
		