U
    f/e7                    @   s  d dl Z d dlZd dlm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mZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z! e" dd Z#ej"d	d
 Z$ej"dd Z%G dd dZ&ej'(ddddddgdd Z)ej'(ddddddgej'(dddgej'(dddgdd Z*ej'(d d!dgej'(d"dd#d!gd$d% Z+ej'(ddddddgd&d' Z,d(d) Z-d*d+ Z.d,d- Z/d.d/ Z0d0d1 Z1ej'(d2ddgej'(d3ddgd4d5 Z2dS )6    N)datetime)is_categorical_dtype)	DataFrameSeriesread_csv)CategoricalConversionWarningInvalidColumnNamePossiblePrecisionLossStataMissingValueStataReaderStataWriterUTF8ValueLabelTypeMismatch
read_statac                   C   s(   t ddddgddddgd	d
ddgdS )N                  ?      @g      ;@g     @T@ZAtlantaZ
BirminghamZ
CincinnatiZDetroitabc)r    r   r   >/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/io/test_stata.pymixed_frame%   s    


r   c                 C   s   | dddS )Niodatastatar   )datapathr   r   r   dirpath0   s    r!   c                 C   s&   t j| d}t|dd}d|j_|S )Nstata5_114.dtaTconvert_datesindex)ospathjoinr   r%   name)r!   	dta14_114
parsed_114r   r   r   r+   5   s    r+   c                   @   s  e Zd Zejdddd Zdd Zdd Zej	d	d
ddddgdd Z
ej	dddgdd Zdd Zej	dddddgdd Zej	dddd d!gd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zej	d	d
ddddgd,d- Zd.d/ Zd0d1 Zej	d	d
ddddgd2d3 Zd4d5 Zej	d	d
ddddgd6d7 Zd8d9 Zej	d	d
ddddgej	dd:d;d<d=gd>d? Zej	dd@dAdBdCgdDdE Zej	d	d
ddddgdFdG Zej	d	d
ddddgdHdI ZdJdK Zej	d	d
ddddgdLdM ZdNdO Z dPdQ Z!dRdS Z"dTdU Z#dVdW Z$dXdY Z%dZd[ Z&d\d] Z'ej	d	d
ddddgej	d^d_d`gdadb Z(dcdd Z)dedf Z*dgdh Z+didj Z,ej	ddkdldmgdndo Z-dpdq Z.drds Z/dtdu Z0ej	d	d
ddddgej1dvdwdx Z2dydz Z3ej	d	d
ddddgd{d| Z4ej	dd}d~gdd Z5ej	dddgdd Z6ej	dd}d~gdd Z7ej	ddddd!d=dCddmdd~dgej	dddgej	dddgej	dddgdd Z8e9e:e:dddZ;dd Z<ej	dddd d<dBddldd}dg
ej	dddgej	dddgej	dddgdd Z=dd Z>ej	d	d
ddddgdd Z?ej	d	d
ddddgdd Z@ej	d	d
dgdd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKej	dddgdd ZLdd ZMej	ddddddddgddƄ ZNddȄ ZOddʄ ZPdd̄ ZQej	d	d
ddddgdd΄ ZRddЄ ZSdd҄ ZTddԄ ZUej	d	d
ddddgddք ZVej	d	d
ddddgdd؄ ZWddڄ ZXdd܄ ZYejjZddބ Z[ej	d	dddgdd Z\dd Z]dS )	TestStataT)Zautousec                 C   s<  |ddd| _ tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d	| _	tj| j d
| _
tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d | _ tj| j d!| _!tj| j d"| _"tj| j d#| _#tj| j d$| _$tj| j d%| _%tj| j d&| _&tj| j d'| _'tj| j d(| _(tj| j d)| _)tj| j d*| _*tj| j d+| _+tj| j d,| _,tj| j d-| _-tj| j d.| _.tj| j d/| _/tj| j d0| _0d S )1Nr   r   r   zstata1_114.dtazstata1_117.dtazstata2_113.dtazstata2_114.dtazstata2_115.dtazstata2_117.dtazstata3_113.dtazstata3_114.dtazstata3_115.dtazstata3_117.dtaz
stata3.csvzstata4_113.dtazstata4_114.dtazstata4_115.dtazstata4_117.dtazstata1_encoding.dtazstata1_encoding_118.dtaz
stata5.csvzstata5_113.dtar"   zstata5_115.dtazstata5_117.dtaz
stata6.csvzstata6_113.dtazstata6_114.dtazstata6_115.dtazstata6_117.dtazstata7_115.dtazstata7_117.dtazstata8_113.dtazstata8_115.dtazstata8_117.dtazstata9_115.dtazstata9_117.dtazstata10_115.dtazstata10_117.dtazstata11_115.dtazstata11_117.dtazstata12_117.dtazstata14_118.dtazstata15.dtazstata7_111.dtazstata16_118.dtazstata1_119.dta.gzzstata13_dates.dta)1r!   r&   r'   r(   dta1_114dta1_117Zdta2_113dta2_114dta2_115dta2_117dta3_113dta3_114dta3_115dta3_117csv3dta4_113dta4_114dta4_115dta4_117dta_encodingdta_encoding_118csv14	dta14_113r*   	dta14_115	dta14_117csv15	dta15_113	dta15_114	dta15_115	dta15_117	dta16_115	dta16_117	dta17_113	dta17_115	dta17_117	dta18_115	dta18_117	dta19_115	dta19_117	dta20_115	dta20_117	dta21_117	dta22_118dta23	dta24_111	dta25_118	dta26_119stata_dates)selfr    r   r   r   setup_method>   s\    zTestStata.setup_methodc                 C   s   t |ddS )NTr#   )r   rX   filer   r   r   read_dta   s    zTestStata.read_dtac                 C   s   t |ddS )NT)Zparse_datesr   rZ   r   r   r   r      s    zTestStata.read_csvversionr   u   v   w   Nc              	   C   sH   t dgd}t *}|j|d|d t|}t|| W 5 Q R X d S )NunitcolumnsFwrite_indexr]   )r   tmensure_cleanto_statar   assert_frame_equal)rX   r]   Zempty_dsr'   Z	empty_ds2r   r   r   test_read_empty_dta   s
    
zTestStata.test_read_empty_dtar[   r-   r.   c                 C   sd   t | |}| |}ttjtjtjtjtjfgdddddgd}|d tj|d< t|| d S )N
float_missdouble_miss	byte_missint_miss	long_missrc   )	getattrr\   r   npnanastypefloat32rg   rj   rX   r[   parsedexpectedr   r   r   test_read_dta1   s    

zTestStata.test_read_dta1c                 C   s  t jtdddddddtdd	dtdd	d
tdd	d	tddd	tdd	d	tdd	d	ftdddddddtdddtdddtdd	d	tddd	tdd	d	tdd	d	ftjtjtjtjtjtjtjtjfgddddddddgd }|d d!|d< tjd"d#T}td$ | 	| j
}| 	| j}| 	| j}d%d& |D }t|dksNtW 5 Q R X tj||d"d' tj||d"d' tj||d"d' d S )(N                 l   *}ai  r      i     i        r   iZli  
   r   i     i  Z
datetime_cZdatetime_big_cdateZweekly_dateZmonthly_dateZquarterly_dateZhalf_yearly_dateZyearly_daterc   OTrecordalwaysc                 S   s   g | ]}|j tkr|qS r   )categoryUserWarning).0xr   r   r   
<listcomp>   s     
 z,TestStata.test_read_dta2.<locals>.<listcomp>check_datetimelike_compat)r   from_recordsr   pdNaTrt   warningscatch_warningssimplefilterr\   r/   r0   r1   lenAssertionErrorrg   rj   )rX   rx   wr+   
parsed_115
parsed_117r   r   r   test_read_dta2   sT    












"#
zTestStata.test_read_dta2r2   r3   r4   r5   c                 C   sd   t | |}| |}| | j}|tj}|d tj|d< |d tj|d< t	
|| d S )Nyearquarter)rq   r\   r   r6   rt   rr   ru   int16int8rg   rj   rv   r   r   r   test_read_dta3   s    

zTestStata.test_read_dta3r7   r8   r9   r:   c                 C   s*  t | |}| |}tjdddddgdddddgdddddgddd	ddgd
ddtjd
gdd
dtjdgdddtjdgdddtjdgdddtjdgdddtjdgg
dddddgd}|D ]d}||  }t|d |  }|dkr|}|	dj
}|j|dd}|jjd dd |||< qt|| d S )Nonetentwoninethreeeightfoursevenr   fivesix   r   r   r   	   fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledrc   r   TorderedZinplace)rq   r\   r   r   rr   rs   copyZasarrayZnotnart   _valuesset_categories
categoriesrenamerg   rj   )rX   r[   rw   rx   colorigr   catr   r   r   test_read_dta4   s>    


zTestStata.test_read_dta4c                 C   sL   |  | j}tjdddgdddgddd	ggd
ddgd}tj||dd d S )Nr   abcZ	abcdefghir   ZcbaZqwertywertyqwerty]    Zstrlr   yzrc   Fcheck_dtype)r\   rQ   r   r   rg   rj   )rX   r   rx   r   r   r   test_read_dta12  s    	zTestStata.test_read_dta12c                 C   s  |  | j}|d d|d< tjdddddddgd	d
dtjtjtjtjgdddddddgdddddddgdddddddggddddddd gd!}|d tj|d< |jD ]}t	
|| ||  qt| j>}| }d"d#d$d%d&d'd(d)}t	|| |jd*ks
tW 5 Q R X d S )+NBytesr   ZCatZBogotau   Bogotár   r   u   option b ÜnicodeZDogZBostonu   UzunköprüZPlaneZRomeu   Tromsør           zoption aZPotatoZTokyou	   Elâzığ      @r   r   gT?gUUUUUU?ThingsCitiesUnicode_Cities_StrlIntsFloatsLongsrc   u'   Here are some strls with Ünicode charsz	long datazHere are some thingsz	byte datazint datazHere are some citiesz
float data)r   r   r   r   r   r   r   u   This is a  Ünicode data label)r\   rR   rt   r   r   rr   rs   ru   rd   rg   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_labelr   )rX   Z
parsed_118rx   r   rdrZvlZvl_expectedr   r   r   test_read_dta18'  sB    
	zTestStata.test_read_dta18c              	   C   st   t tjtjtjtjtjfgdddddgd}d|j_t .}||d  | |}t	|
d| W 5 Q R X d S )Nrl   rm   rn   ro   rp   rc   r%   )r   rr   rs   r%   r)   rg   rh   ri   r\   rj   	set_indexrX   originalr'   written_and_read_againr   r   r   test_read_write_dta5O  s    

zTestStata.test_read_write_dta5c              	   C   s   |  | j}d|j_|jtj|_|d tj|d< |d tj|d< t 2}|	|d  | 
|}tj|d|dd W 5 Q R X d S )Nr%   r   r   FZcheck_index_type)r   r6   r%   r)   rt   rr   int32rg   rh   ri   r\   rj   r   r   r   r   r   test_write_dta6[  s    

zTestStata.test_write_dta6c              	   C   s   t ddddtdggdddddgd	}t|d td
|d< d|j_|jtj|_|d tj|d< t	
 :}|j|ddi|d | |}t	j|d|dd W 5 Q R X d S )Nstringobjectr   皙?
2003-12-25integerfloatingr   r   rd   dtyper%   tcr]   Fr   )r   rr   
datetime64r   r   r%   r)   rt   r   rg   rh   ri   r\   rj   r   )rX   r]   r   r'   r   r   r   r   test_read_write_dta10k  s     

zTestStata.test_read_write_dta10c              	   C   s<   t  *}ttjddtdd}|| W 5 Q R X d S )Nr   r   ABrc   )rg   rh   r   rr   randomrandnlistri   )rX   r'   dfr   r   r   test_stata_doc_examples  s    
z!TestStata.test_stata_doc_examplesc              	   C   st   t jd tt jddtdd}t j|jdddf< | }t	
 }|j|d	d
 W 5 Q R X t	|| d S )Ni  r   r   Zabcdrc   r   r   r   Frf   )rr   r   seedr   r   r   rs   locr   rg   rh   ri   rj   )rX   r   Zdf_copyr'   r   r   r   test_write_preserves_original  s    
z'TestStata.test_write_preserves_originalc              	   C   s~   t | j}t | j}|jd }|jd }||ks4tt|tsBtt *}|j|d|d t |}t	|| W 5 Q R X d S )Nr   Fre   )
r   r;   	kreis1849r   
isinstancestrrg   rh   ri   rj   )rX   r]   rawencodedresultrx   r'   reread_encodedr   r   r   test_encoding  s    




zTestStata.test_encodingc              
   C   s   t dgddddgd}t dgdddd	gd}d
|j_|tj}t D}tt	 |
|d  W 5 Q R X | |}t|d
| W 5 Q R X d S )N)r   r   r   r   Zgoodu   bädZ8numberZ%astringwithmorethan32characters______rc   Zb_dZ_8number astringwithmorethan32characters_r%   )r   r%   r)   rt   rr   r   rg   rh   assert_produces_warningr	   ri   r\   rj   r   )rX   r   	formattedr'   r   r   r   r   test_read_write_dta11  s&    	


zTestStata.test_read_write_dta11c              
   C   s   t dgddddddgd}t dgd	d
ddddgd}d|j_|tj}t f}tj	dd2}t
dt |j|d |d t|dkstW 5 Q R X | |}t|d| W 5 Q R X d S )N)r   r   r   r   r   r   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleterc   r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter%   Tr   r   r   r   )r   r%   r)   rt   rr   r   rg   rh   r   r   r   r	   ri   r   r   r\   rj   r   )rX   r]   r   r   r'   r   r   r   r   r   test_read_write_dta12  s:    

zTestStata.test_read_write_dta12c              	   C   s   t dtjd}t dtjd}t dtjd}t|||d}d|j_|}|d tj	|d< t
 ,}|| | |}t
|d| W 5 Q R X d S )Ni   r   i   l        )r   r   int64r%   r  )r   rr   r   r   r  r   r%   r)   rt   float64rg   rh   ri   r\   rj   r   )rX   s1s2s3r   r   r'   r   r   r   r   test_read_write_dta13  s    


zTestStata.test_read_write_dta13r>   r*   r?   r@   c           
   	   C   s   t | |}| |}d|j_| | j}dddddg}|D ]}|| jddd||< q:|d tj	|d< t
j|d	 d
d|d	< t|| t 6}|j|d	di|d | |}	t|	d| W 5 Q R X d S )Nr%   byte_int_long_float_double_T)r   numericdate_tdZcoerce)errorstdr   )rq   r\   r%   r)   r   r=   _convertrt   rr   ru   r   Zto_datetimerg   rj   rh   ri   r   )
rX   r[   r+   r]   rw   rx   colsr   r'   r   r   r   r   test_read_write_reread_dta14  s    



z&TestStata.test_read_write_reread_dta14rB   rC   rD   rE   c                 C   s   |  | j}|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d tj|d< |d j	t
jdd|d< t| |}| |}t|| d S )	Nr  r  r  r  r  r  z%Y-%m-%dargs)r   rA   rt   rr   r   r   r   ru   r	  applyr   strptimerq   r\   rg   rj   )rX   r[   rx   rw   r   r   r   test_read_write_reread_dta15  s     


z&TestStata.test_read_write_reread_dta15c              
   C   s~   t dgdgd}tddddd}d	}t H}|j||||d
 t|"}|jdksXt|j|ksftW 5 Q R X W 5 Q R X d S )Nr   variablerc     r            zThis is a data file.)
time_stampr   r]   z29 Feb 2000 14:21)	r   r   rg   rh   ri   r   r&  r   r   )rX   r]   r   r&  r   r'   readerr   r   r   test_timestamp_and_label  s    
   
z"TestStata.test_timestamp_and_labelc              
   C   sj   t dgdgd}d}t D}d}tjt|d |j|||d W 5 Q R X tj	|r\t
W 5 Q R X d S )Nr   r!  rc   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r&  r]   )r   rg   rh   pytestraises
ValueErrorri   r&   r'   isfiler   )rX   r]   r   r&  r'   msgr   r   r   test_invalid_timestamp%  s    
z TestStata.test_invalid_timestampc              
   C   s   t ttdd}d|j_t d}tt	 |
| W 5 Q R X | |}|d}t|j}dd }t|||_t|| W 5 Q R X d S )Ng      9@)r   r   r%   c                 S   s   t | d S )Nr   )intr   r   r   r   <lambda>:      z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rr   reshapearanger%   r)   rg   rh   r   r	   ri   r\   r   r   rd   maprj   )rX   r   r'   r   rd   Zconvert_col_namer   r   r   test_numeric_column_names/  s    



z#TestStata.test_numeric_column_namesc              	   C   s   t tdtjd}t tdtjd}tj|d d d< tj|dd d< t||d}d|j_t	
 4}|j||d | |}|d}t	|| W 5 Q R X d S )Nr   r   r   r   r
  r  r%   r   )r   rr   r6  ru   r	  rs   r   r%   r)   rg   rh   ri   r\   r   rj   )rX   r]   r
  r  r   r'   r   r   r   r   test_nan_to_missing_value>  s    


z#TestStata.test_nan_to_missing_valuec              
   C   s   ddg}t ttdd|d}d|j_t D}|j|dd | 	|}t
jt|jjd	 |d  W 5 Q R X W 5 Q R X d S )
Nr   r         $@)r   r   rc   Zindex_not_writtenFr   r)  )r   rr   r5  r6  r%   r)   rg   rh   ri   r\   r+  r,  KeyError)rX   rd   r   r'   r   r   r   r   test_no_indexL  s    

zTestStata.test_no_indexc              	   C   sr   t ddg}t ddgtjd}t||d}d|j_t ,}|| | 	|}t
|d| W 5 Q R X d S )Nr   zA longer stringr          @r   r9  r%   )r   rr   r	  r   r%   r)   rg   rh   ri   r\   rj   r   )rX   r
  r  r   r'   r   r   r   r   test_string_no_datesV  s    


zTestStata.test_string_no_datesc           	   
   C   s   t ddgtjd}t ddgtjd}t ddgtjd}t ddgtjd}t||||d}d|j_t	 }t
t || W 5 Q R X | |}| }t |d	 tjd|d	< t |d
 tjd|d
< t |d tjd|d< t|d| W 5 Q R X d S )Nr   c   r      i  l    )s0r
  r  r  r%   r
  r  r  )r   rr   r   r   r  r   r%   r)   rg   rh   r   r
   ri   r\   r   r   r	  rj   r   )	rX   rB  r
  r  r  r   r'   r   modifiedr   r   r   test_large_value_conversion`  s    

z%TestStata.test_large_value_conversionc              
   C   s   t tddddddg}d|j_t X}tt ||dd	i W 5 Q R X | 	|}|
 }d
g|_t|d| W 5 Q R X d S )Nrz   r{   r|   r}   r~   r   r%   r   r   Z_0)r   r   r%   r)   rg   rh   r   r	   ri   r\   r   rd   rj   r   )rX   r   r'   r   rC  r   r   r   test_dates_invalid_columnr  s    

z#TestStata.test_dates_invalid_columnc                 C   s   t j| jd}t|}ddddgddddgddddgg}t|}ddd	d
g|_|d tj	|d< |d tj
|d< |d	 tj
|d	< |d
 tj|d
< t|d| d S )NS4_EDUC1.dtar   r   r   r   ZclustnumZpri_schlZpsch_numZpsch_dis)r&   r'   r(   r!   r   r   rd   rt   rr   r   r   ru   rg   rj   head)rX   dpathr   Zdf0r   r   r   test_105~  s    "zTestStata.test_105c                 C   s4   t j| jd}t|}| i ks(t|  d S )NrF  )r&   r'   r(   r!   r   value_labelsr   close)rX   rI  r'  r   r   r   test_value_labels_old_format  s    z&TestStata.test_value_labels_old_formatc           	   
   C   s   dddddddg}dd	 |D }t d
dddddgt| }t|g|d}d|j_t d
dddddt d
ddt d
ddt d
ddt d
ddt d
ddt d
ddg}t|g|d}d|j_t .}||| | |}t	|
d| W 5 Q R X d S )Nr   r  Ztwrg   Ztqthtyc                 S   s   i | ]
}||qS r   r   r   r   r   r   r   
<dictcomp>  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rz   r{   r   r}   r~   rc   r%   r|   r   r   r   )r   r   r   r%   r)   rg   rh   ri   r\   rj   r   )	rX   rd   Zconversionsr   r   expected_valuesrx   r'   r   r   r   r   test_date_export_formats  s&    








z"TestStata.test_date_export_formatsc              	   C   sr   t dgd ggdgd}t dgdggdgd}d|j_t ,}|| | |}t|d| W 5 Q R X d S )N1Zfoorc   r   r%   )	r   r%   r)   rg   rh   ri   r\   rj   r   )rX   r   rx   r'   r   r   r   r   test_write_missing_strings  s    


z$TestStata.test_write_missing_strings	byteorder><c              	   C   sD  t dddgtjd}t dddgtjd}t dddgtjd}t dddgtjd}t dddgtjd}t ddd	gtjd}t ddd
gtjd}	t|||||||	d}
d|
j_|
	 }tj
tj
tjtjtjtjtjf}t|j|D ]\}}|| |||< qt 6}|
j|||d | |}|d}t|| W 5 Q R X d S )Nr   r   Tr   d      i  i  il    )rB  r
  r  r  s4s5s6r%   )rV  r]   )r   rr   Zbool_Zuint8Zuint16Zuint32r   r%   r)   r   r   r   r   r	  ziprd   rt   rg   rh   ri   r\   r   rj   )rX   rV  r]   rB  r
  r  r  r[  r\  r]  r   rx   Zexpected_typesr   tr'   r   r   r   r   test_bool_uint  s6    	


zTestStata.test_bool_uintc              	   C   s   t | j}| }W 5 Q R X t | j}| }W 5 Q R X d}d}| D ]<\}}||ks`t||| kspt||ks|t||ksLtqLd S )N)Zvar1Zvar2Zvar3)label1label2Zlabel3)r   rF   r   rG   itemsr   )rX   r   Zsr_115Zsr_117keyslabelskvr   r   r   test_variable_labels  s    zTestStata.test_variable_labelsc              
   C   s   d}i }|D ]*}t d| d| d| g|dt| < qt|}t }|j|dd t|l}|j}|j}|j	}	t
||	|D ]F\}
}}t|
dd  t|dd	 kstt|
dd  |kstqW 5 Q R X W 5 Q R X d S )
N)r   rY     r   r   r   sFr   r   )r   r   r   rg   rh   ri   r   typlistZvarlistZfmtlistr^  r1  r   )rX   str_lensrj  str_lenr   r'   srrl  	variablesformatsr!  fmttypr   r   r   test_minimal_size_col  s     

$zTestStata.test_minimal_size_colc              
   C   s   d}i }|D ]*}t d| d| d| g|dt| < qt|}d}tjt|d$ t }|| W 5 Q R X W 5 Q R X d S )N)r   ri    r   r   r   rj  zFixed width strings in Stata \.dta files are limited to 244 \(or fewer\)\ncharacters\.  Column 's500' does not satisfy this restriction\. Use the\n'version=117' parameter to write the newer \(Stata 13 and later\) format\.r)  )	r   r   r   r+  r,  r-  rg   rh   ri   )rX   rm  rj  rn  r   r/  r'   r   r   r   test_excessively_long_string  s    
z&TestStata.test_excessively_long_stringc              
   C   sD  d}t dggdgd}t *}|| t|}|j}W 5 Q R X W 5 Q R X dd tdD }|dd	 |D ]B}|| d
 }tddD ]&}	t|d
 |	 }
|
j	||	 kst
qqpttddd }
|
j	d	kst
ttddd }
|
j	dkst
ttddd }
|
j	d	kst
ttddd }
|
j	dks@t
d S )N)r   hlr   r  rc   c                 S   s   g | ]}d t d|  qS ).a   )chrr   ir   r   r   r     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   ry  r      z<fs      s     z.zz<ds         s        )r   rg   rh   ri   r   ZVALID_RANGErangeinsertr   r   r   structunpack)rX   typesr   r'   r   Zvalid_rangerR  r_  offsetr}  valr   r   r   test_missing_value_generator
  s2    


z&TestStata.test_missing_value_generatorrH   rI   rJ   c                    s   dddddg}t d}t|j g }tdD ]&  fdd	td
D }|| q0t||d}tt| |dd}t	
|| d S )NZint8_Zint16_Zint32_Zfloat32_Zfloat64_e   r  c                    s    g | ]}t  |d    qS )r  )r   )r   jr}  rd  r   r   r   0  s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r   rc   T)Zconvert_missing)r   sortedZMISSING_VALUESrd  r  appendr   r   rq   rg   rj   )rX   r[   rd   smvr   rowrx   rw   r   r  r   test_missing_value_conversion)  s    z'TestStata.test_missing_value_conversionc                 C   s  ddddddg}ddddd	d
g}ddddddg}ddddddg}ddddddg}ddddddg}g }t t|D ]}g }	t dD ]|}
|
dkr|	t|| || || || || ||  q|
dkr|	t|| dd q|	t|| || ||  q||	 qp|tjgd  dddddddg}tddd|d d< tddd|d d< tddd|d d	< tddd|d d< tdd	d|d	 d< tdd	d |d	 d< |d	 d	< tddd |d	 d< |d	 d< tddd |d d<  |d d< |d d	< tddd |d d< |d d< t||td }t| j	}t| j
}tj||d!d" tj||d!d" d#d$ |D }t :}d%|j_||| | |}tj|d%|d!d" W 5 Q R X d S )&Ni  r"  i'  rY  i  i  r   r   r   r   r      r}   r   ;   r   r   Zdate_tcr  Zdate_twZdate_tmZdate_tqZdate_thZdate_ty   r   r   r   r      i  )rd   r   Tr   c                 S   s   i | ]}||d d qS )rG  Nr   rP  r   r   r   rQ  e  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r%   )r  r   r  r   r   r   r   r   r   rK   rL   rg   rj   rh   r%   r)   ri   r\   r   )rX   yrmoddhrmmssrx   r}  r  r  rd   r   r   Zdate_conversionr'   r   r   r   r   test_big_dates7  sb    2   , 



zTestStata.test_big_datesc                 C   s   |  | j}|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d tj|d< |d j	t
jdd|d< t| jd	d
}t|| t| jd	dd}|  | j}|d j	t
jdd|d< t|| d S )Nr  r  r  r  r  r  r  r  Tr#   F)r$   Zpreserve_dtypes)r   rA   rt   rr   r   r   r   ru   r	  r  r   r  r   rE   rg   rj   )rX   rx   Zno_conversion
conversionr   r   r   test_dtype_conversionq  s.     
   
zTestStata.test_dtype_conversionc              	   C   sX  |  | j}|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d tj|d< |d j	t
jdd|d< dddg}|| }t| jd	|d
}t|| dddg}|| }t| jd	|d
}t|| d}tjt|d ddg}t| jd	|d
 W 5 Q R X d}tjt|d" ddddg}t| jd	|d
 W 5 Q R X d S )Nr  r  r  r  r  r  r  r  T)r$   rd   z"columns contains duplicate entriesr)  zEThe following columns were not found in the Stata data set: not_found	not_found)r   rA   rt   rr   r   r   r   ru   r	  r  r   r  r   rE   rg   rj   r+  r,  r-  )rX   rx   rd   ZdroppedZ	reorderedr/  r   r   r   test_drop_column  s4     


zTestStata.test_drop_columnz;ignore:\nStata value:pandas.io.stata.ValueLabelTypeMismatchc           	         s  t jddddddgddddddgdddddd	gd
ddd
d
dgdddtjddgdddtjddgdd
dtjddgdddtjddgdddtjddgdddtjddgg
ddddddgd   }tj fdd D dd d|j_|d 	t
|d< |d 	t
|d< |D ]V}||  }|d j}| }|dkrB|j|d!d"}|jjd d!d# |||< qt 4} j||d$ | |}|d}t|| W 5 Q R X d S )%Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	unlabeledrc   c                    s   g | ]} |  d qS r   rt   r   r   r   r   r   r     s     z6TestStata.test_categorical_writing.<locals>.<listcomp>Zaxisr%   r   Tr   r   r   )r   r   rr   rs   r   r   concatr%   r)   r  r   rt   r   Z
as_orderedr   r   r   rg   rh   ri   r\   r   rj   )	rX   r]   rx   r   r   r   r'   r   resr   r  r   test_categorical_writing  sR     



z"TestStata.test_categorical_writingc              
      s   t jdd gdd gdd gdd ggdgd tj fdd	 D d
d t .}d}tjt|d  	| W 5 Q R X W 5 Q R X t jdgdgdgdgd
ggdgd tj fdd	 D d
d t
t  	| W 5 Q R X d S )Nr   i'  r   r   dZToo_longrc   c                    s   g | ]} |  d qS r  r  r  r  r   r   r     s     zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.r)  c                    s   g | ]} |  d qS r  r  r  r  r   r   r     s     )r   r   r   r  rg   rh   r+  r,  r-  ri   r   r   )rX   r'   r/  r   r  r   $test_categorical_warnings_and_errors  s.    " 
  z.TestStata.test_categorical_warnings_and_errorsc           
   	      s   dd t dD }|tjg tj|dgd tj fdd D dd d	 j_	t
 p} j||d
 | |}|d	}  }|D ].}|| j}| j}	|j|	dd}|||< qt
|| W 5 Q R X d S )Nc                 S   s   g | ]}d t | gqS )r   )r   r|  r   r   r   r     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsrc   c                    s   g | ]} |  d qS r  r  r  r  r   r   r     s     r   r  r%   r   Tr   )r  r  rr   rs   r   r   r   r  r%   r)   rg   rh   ri   r\   r   r   r   remove_unused_categoriesr   r   rj   )
rX   r]   valuesr'   r   r  rx   r   r   Znew_catsr   r  r   *test_categorical_with_stata_missing_values  s&     





z4TestStata.test_categorical_with_stata_missing_valuesrM   rN   c           	      C   s  dddddddgt dfdd	dddddgt dd d d
 fdddddddgt dddddgfdddddddgt ddfdddddgt dddd
d
gfdddddddgt dfdddddddgt dfg}g }|D ]H\}}}}|r||tjj||ddf q||t|t jdf qt	
t|}t| |}t|}t|| |D ]N}t|| jrXt|| jj|| jj t|| jj|| jj qXd S )NTr   r   r   r   r  er   reverserk  Znoorderr   r   r   r   r   r   Zfloat_missingFZnolabelr   r>  r   r   g      @Zint32_mixedr   r   )rr   r6  arrayr  r   Categorical
from_codesr   ru   r   	from_dictdictrq   r   rg   rj   r   r   assert_series_equalr   codesassert_index_equalr   )	rX   r[   rx   r  Zis_catr   re  r  rw   r   r   r   test_categorical_order  s4    $$ 	

 
z TestStata.test_categorical_orderrO   rP   c              
   C   s   t t| |}|jddd}t|jd |_dddddddddd	g
}d
ddddg}tjj	||dd}t
|dd}t||d  d S )NZsrhfirst)Zna_positionr   rk  r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   )r)   )r   rq   Zsort_valuesrr   r6  shaper%   r   r  r  r   rg   r  )rX   r[   rw   r  r   r   rx   r   r   r   test_categorical_sorting;  s      z"TestStata.test_categorical_sortingc                 C   s\   t | |}t|}t|dd}|D ]4}t|| js6q"|| jjsFt|| jjr"tq"d S )NF)order_categoricals)rq   r   r   r   r   r   r   )rX   r[   rw   Zparsed_unorderedr   r   r   r   test_categorical_orderingL  s    
z#TestStata.test_categorical_orderingr1   rG   rL   	chunksizer   r   convert_categoricalsFr$   c              
   C   s   t | |}tjdd}td t|||d}W 5 Q R X t|d||d}d}	tdD ]}
tjddD}td z||}W n$ tk
r   Y W 5 Q R   qY nX W 5 Q R X |j|	|	| d d f 	 }| 
|}tj||ddd	 |	|7 }	qV|  d S )
NTr   r   r  r$   )iteratorr  r$   r   r   Fr   r   rq   r   r   r   r   r  readStopIterationilocr   _convert_categoricalrg   rj   rL  rX   r[   r  r  r$   fnamer   rw   itrposr  chunk
from_framer   r   r   test_read_chunks_117X  s@    


 
   
zTestStata.test_read_chunks_117)r  returnc                 C   sV   | D ]L}| | }t |jr|j }|jjtkrHt|jj}||}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )	r   r   r   r  r   r   r   Indexr   )r  r   Zserr   r   r   r   r   r    s    



zTestStata._convert_categoricalc              	   C   s@  | j }t|}t|dd.}|d}t|jddd d f | W 5 Q R X t|dd0}t|}t|jddd d f |d  W 5 Q R X t|dd.}|d}t|jddd d f | W 5 Q R X t|dd,}| }t|jddd d f | W 5 Q R X t|dd}t	|}W 5 Q R X t|| d S )NTr  r   r   r  r   )
r5   r   r  rg   rj   r  r   Z	get_chunkr   r  )rX   r  rw   r  r  Zfrom_chunksr   r   r   test_iterator  s"    
(,
((zTestStata.test_iteratorr0   rF   rK   c              
   C   s   t | |}tjdd}td t|||d}W 5 Q R X t|d||d}d}	tdD ]}
tjddD}td z||}W n$ tk
r   Y W 5 Q R   qY nX W 5 Q R X |j|	|	| d d f 	 }| 
|}tj||ddd	 |	|7 }	qV|  d S )
NTr   r   r  )r  r$   r  r   r   Fr  r  r  r   r   r   test_read_chunks_115  s@    


 
   
zTestStata.test_read_chunks_115c           
   	   C   s   | j }dddg}d}t||d}t|ddd}d}td	D ]P}|j||d}|d krX q|j||| d d f }	tj|	|d
d ||7 }q:W 5 Q R X d S )Nr   Zcpim1r   rc   Tr  r   r   Fr   )r5   r   r  r  r  rg   rj   )
rX   r  rd   r  rw   r  r  r  r  r  r   r   r   test_read_chunks_columns  s    
z"TestStata.test_read_chunks_columnsc              
   C   s   d|j _dddd}t L}|j|||d t|}| }W 5 Q R X ddddd}||ksdtW 5 Q R X d	|d< t >}|j|||d t|}| }W 5 Q R X ||kstW 5 Q R X d S )
Nr%   	City RankCity ExponentCityr   r   r]   r   )r%   r   r   r   z	The Index)r%   r)   rg   rh   ri   r   r   r   )rX   r]   r   r   r'   ro  Zread_labelsZexpected_labelsr   r   r   test_write_variable_labels  s$    



z$TestStata.test_write_variable_labelsc              
   C   sZ   d|j _dddd}t 4}d}tjt|d |j|||d W 5 Q R X W 5 Q R X d S )	Nr%   Zvery longvery longvery longvery longvery longvery longvery longvery longvery longvery longr  r  r   .Variable labels must be 80 characters or fewerr)  r  r%   r)   rg   rh   r+  r,  r-  ri   )rX   r]   r   r   r'   r/  r   r   r   test_invalid_variable_labels  s    
  z&TestStata.test_invalid_variable_labelsc              
   C   s^   d|j _dddd}d|d< t 0}tjtdd	 |j|||d
 W 5 Q R X W 5 Q R X d S )Nr%   r  r  r  r   u   invalid character Œr   z,Variable labels must contain only charactersr)  r  r  )rX   r]   r   r   r'   r   r   r   $test_invalid_variable_label_encoding$  s    
   z.TestStata.test_invalid_variable_label_encodingc              
   C   s   ddddddg}ddd |d	}d
}tjt|d( t }|j||d W 5 Q R X W 5 Q R X dddd	}d}tjt|d( t }|j||d W 5 Q R X W 5 Q R X d S )Nu   Ρu   Αu   Νu   Δu   Σr  r  r   r   zKVariable labels must contain only characters that can be encoded in Latin-1r)  )r   zqA very, very, very long variable label that is too long for Stata which means that it has more than 80 charactersr  )r(   r+  r,  r-  rg   rh   ri   )rX   r   r  Zvariable_labels_utf8r/  r'   Zvariable_labels_longr   r   r    test_write_variable_label_errors1  s$    
"
z*TestStata.test_write_variable_label_errorsc                 C   s  t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}t }|j|dd t|dd}t|| |j|dddid t|dd}t|| |j	 
d}|j|d|did t|dd}t|| W 5 Q R X d S )N  r   r   .    r%  R    r   r     r   r>  r   applebananacherrynumsstrsdatesFr   Tr#   r  r   )rf   r$   )dtr   r   rg   rh   ri   r   rj   rd   tolistr%   )rX   r  r   r'   rereaddirectZ	dates_idxr   r   r   test_default_date_conversionO  s*    
z&TestStata.test_default_date_conversionc              
   C   sP   t dddgi}d}tjt|d$ t }|| W 5 Q R X W 5 Q R X d S )Nr   y      ?       @y       @      @z"Data type complex128 not supportedr)  )r   r+  r,  NotImplementedErrorrg   rh   ri   )rX   r   r/  r'   r   r   r   test_unsupported_typel  s
    
zTestStata.test_unsupported_typec                 C   s  t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}d}tjt|d, t }|j|ddid W 5 Q R X W 5 Q R X t	j
dddd}tdddgdddg|d}tjtdd$ t }|| W 5 Q R X W 5 Q R X d S )Nr  r   r   r  r  r%  r  r  r   r   r  r   r>  r   r  r  r  r  zFormat %tC not implementedr)  r  ZtCr#   z1-1-1990r   zAsia/Hong_Kong)ZperiodstzzData type datetime64)r  r   r   r+  r,  r  rg   rh   ri   r   Z
date_range)rX   r  r   r/  r'   r   r   r   test_unsupported_datetypet  s0    
&
z#TestStata.test_unsupported_datetypec              	   C   s0   d}t jt|d t| jdd W 5 Q R X d S )Na*  
Value labels for column ethnicsn are not unique. These cannot be converted to
pandas categoricals.

Either read the file with `convert_categoricals` set to False or use the
low level interface in `StataReader` to separately read the values and the
value_labels.

The repeated labels are:
-+
wolof
r)  T)r  )r+  r,  r-  r   rS   )rX   r/  r   r   r   test_repeated_column_labels  s    
z%TestStata.test_repeated_column_labelsc                 C   s   t | j}tdddddddtjddg
ddddtjdddddg
dtjddddddddg
dd	d
dddddddg
d}|ddddg }t|| d S )Nr   r   r   r   r   r   r   r   r   r   r  r  r   grw  r}  r  )r   r   r   r   r   r   r   r   )r   rT   r   rr   NaNrg   rj   )rX   r   r   r   r   r   test_stata_111  s    
zTestStata.test_stata_111c              
   C   s   t dttjjdgdttjjttjjgd}d}tjt|d$ t	
 }|| W 5 Q R X W 5 Q R X tj|jd< d}tjt|d$ t	
 }|| W 5 Q R X W 5 Q R X d S )Nr   g      ZColumnOkColumnTooBigzZColumn ColumnTooBig has a maximum value \(.+\) outside the range supported by Stata \(.+\)r)  r   r  aColumn ColumnTooBig has a maximum value of infinity which is outside the range supported by Stata)r   rr   finfodoubleepsmaxr+  r,  r-  rg   rh   ri   infr   )rX   r   r/  r'   r   r   r   test_out_of_range_double  s     

z"TestStata.test_out_of_range_doublec              
   C   s  t dttjjttjjd gdttjjttjjgd}d|j_|D ]}|| tj||< qRt	
 >}|| t|}|d tj|d< t	||d W 5 Q R X tj|jd< d}tjt|d$ t	
 }|| W 5 Q R X W 5 Q R X d S )	Nr   r;  r  r%   r  r  r  r)  )r   rr   r  ru   r  r  r%   r)   rt   rg   rh   ri   r   r	  rj   r   r  r   r+  r,  r-  )rX   r   r   r'   r  r/  r   r   r   test_out_of_range_float  s2    


z!TestStata.test_out_of_range_floatc                 C   s6   t  }d|j_dd }t |j|}t || d S )Nr%   c                 S   s   t | dS Nr%   r   r   r2  r   r   r   r3    r4  z-TestStata.test_path_pathlib.<locals>.<lambda>)rg   makeDataFramer%   r)   Zround_trip_pathlibri   rj   rX   r   r'  r   r   r   r   test_path_pathlib  s
    zTestStata.test_path_pathlibc                 C   s6   t  }d|j_dd }t |j|}t || d S )Nr%   c                 S   s   t | dS r  r  r2  r   r   r   r3    r4  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)rg   r  r%   r)   Zround_trip_localpathri   rj   r	  r   r   r   test_pickle_path_localpath  s
    z$TestStata.test_pickle_path_localpathrf   c              
   C   s   ddddddgi}t |d}|d d|d< t 4}|j||d t|dd	}| }W 5 Q R X W 5 Q R X |dddddd
ikstd S )NABEC)r   r   r   Tr  )r   r   r   r   )r   rt   rg   rh   ri   r   rK  r   )rX   rf   r  r   r'   Zdta_iterrK  r   r   r   test_value_labels_iterator  s    

z$TestStata.test_value_labels_iteratorc              	   C   sJ   t  }d|j_t  }|| t|dd}W 5 Q R X t || d S )Nr%   	index_col)rg   r  r%   r)   rh   ri   r   rj   )rX   r   r'   r  r   r   r   test_set_index  s    

zTestStata.test_set_indexcolumnmsdayweekmonthZqtrZhalfr  c                 C   s:   t | j}|jd|f }|jd|d f }||ks6td S )Nr   _fmt)r   rW   r   r   )rX   r  r   Zunformattedr   r   r   r   (test_date_parsing_ignores_format_details  s    
z2TestStata.test_date_parsing_ignores_format_detailsc                 C   sN  t dddddddtddddd dgd	d
dddddtdddddggddddddddddddgd}t|d td|d< t|d tjd|d< t|d tjd|d< |d tj|d< t|d tj	d|d< d|j
_|j
tj|_
| }t J}|j|ddidgdd | |}tj|d|dd  t|| W 5 Q R X d S )!Nr   r   r   r   r   r   A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai  zstring-1zobject-1z
2003-12-26r   A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   r   r   r   ru   r	  r   r
  Zs2045ZsrtlZforced_strlr   r   r%   r   r_   )r$   convert_strlr]   Fr   )r   rr   r   r   r   r   r   rt   r   ru   r%   r)   r   rg   rh   ri   r\   rj   r   )rX   r   r   r'   r   r   r   r   test_writer_117%  s    .

zTestStata.test_writer_117c              
   C   s   t dddgdddggddd	gd
}d|j_ttZ t F}|j|dd	gdd | |}|	d}|j
|_
tj||dd W 5 Q R X W 5 Q R X d S )NA  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r  A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr  r  Z2long1long1long1long1long1long1long1long1long1long1longr   rc   r%   r_   )r  r]   Fr   )r   r%   r)   rg   r   r	   rh   ri   r\   r   rd   rj   )rX   r   r'   r  r   r   r   test_convert_strl_name_swapl  s    


z%TestStata.test_convert_strl_name_swapc                 C   s   t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}t 6}d}tjt|d |j|ddid W 5 Q R X W 5 Q R X d S )Nr  r   r   r  r  r%  r  r  r   r   r  r   r>  r   r  r  r  r  z0convert_dates key must be a column or an integerr)  Z
wrong_namer   r#   )	r  r   r   rg   rh   r+  r,  r-  ri   )rX   r  r   r'   r/  r   r   r   test_invalid_date_conversion{  s    
z&TestStata.test_invalid_date_conversionc              
   C   s   t  }t }d|j_t N}|j||d |d t	|d}|
|  W 5 Q R X t|dd}W 5 Q R X t|| d S )Nr%   r   r   wbr  )r   BytesIOrg   r  r%   r)   rh   ri   seekopenwriter  r   rj   )rX   r]   Zbior   r'   dtar  r   r   r   test_nonfile_writing  s    

zTestStata.test_nonfile_writingc              
   C   s~   t  }d|j_t  P}t|d}|j|dd W 5 Q R X t|d}t|dd}W 5 Q R X W 5 Q R X t 	|| d S )Nr%   r   r^   r   rbr  )
rg   r  r%   r)   rh   gzipGzipFileri   r   rj   )rX   r   r'   gzr  r   r   r   test_gzip_writing  s    
 zTestStata.test_gzip_writingc                 C   s   |  | j}dddddg}dddddgd	d
dd	dgdddddgdddddgdddddgdddddgdddddgg}t||d}t|| d S )Nutf8latin1asciiZ	utf8_strlZ
ascii_strlu   ραηδαςu   PÄNDÄSpu   ƤĀńĐąŜ   Ör   u   ᴘᴀᴎᴅᴀS   Ünz      r   r   rj  rc   )r\   rU   r   rg   rj   )rX   Z
unicode_dfrd   r  rx   r   r   r   test_unicode_dta_118  s    	zTestStata.test_unicode_dta_118c              	   C   s   dddd ddg}t |}|jd|_t x}|j|ddd t|}|d	}t|| d |j	d d d
f< |j|dd
gdd t|}|d	}t|| W 5 Q R X d S )NA  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   r   Fr_   re   r   r5  )rf   r  r]   )
r   r6  rt   rg   rh   ri   r   fillnarj   r   )rX   outputr'   r  rx   r   r   r   test_mixed_string_strl  s$    

   
z TestStata.test_mixed_string_strlc              
   C   sn   dddd ddg}t |}d |jd d df< t .}tjtdd |j||d W 5 Q R X W 5 Q R X d S )Nnoner   )r:  r6  r   z Column `none` cannot be exportedr)  r   )r   r   rg   rh   r+  r,  r-  ri   )rX   r]   r8  r'   r   r   r   test_all_none_exception  s    
z!TestStata.test_all_none_exceptionc                 C   sx   d}t |gdgd}t R}d}d}tjt| d| d& tt || W 5 Q R X W 5 Q R X W 5 Q R X d S )Nu9   Here is one __�__ Another one __·__ Another one __½__invalidrc   z\'latin-1' codec can't encode character '\\ufffd' in position 14: ordinal not in range\(256\)zP'ascii' codec can't decode byte 0xef in position 14: ordinal not in range\(128\)|r)  )	r   rg   rh   r+  r,  UnicodeEncodeErrorr   ResourceWarningri   )rX   r]   contentr   r'   Zmsg1Zmsg2r   r   r   test_invalid_file_not_written  s    
z'TestStata.test_invalid_file_not_writtenc           
   
   C   s   t dgd dgd gddgd}t }|j|ddgd t|d	}| }d}|d
|ksft|d|ksxt|dd dd }|ddd  D ]8}|dd }||	dd  }	t
||	d kstqW 5 Q R X W 5 Q R X d S )Npandasr   u   þâÑÐÅ§Zvar_strZvar_strlrc   r_   )r]   r  r'  zlatin-1zutf-8s   strlsr   rG  s   GSO       )r   rg   rh   ri   r#  r  encoder   splitfindr   )
rX   r8  r'   r  r@  rx   ZgsosZgsor  sizer   r   r   test_strl_latin1  s      
zTestStata.test_strl_latin1c              	   C   sr   d}t t8}t| j}t|dks*t|d jjd |ksBtW 5 Q R X t	dggd dgd}t 
|| d S )Na  
One or more strings in the dta file could not be decoded using utf-8, and
so the fallback encoding of latin-1 is being used.  This can happen when a file
has been incorrectly encoded by Stata or some other software. You should verify
the string values returned are correct.   r   u   Düsseldorfr   rc   )rg   r   UnicodeWarningr   r<   r   r   messager  r   rj   )rX   r/  r   r   rx   r   r   r   test_encoding_latin1_118  s    
"z"TestStata.test_encoding_latin1_118c              
   C   s   t | jd}t|}W 5 Q R X |jdks0t|jd dksBt|jd dksTt|jd dksft|jd	 tt	d
dddddkstd S )Nr'  )r   i  )r   r   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   r   gQ	@)r   rk  r   )r   r   r  r   r%  )
r(  r#  rV   r   r  r   r  r   Z	Timestampr   )rX   r*  r   r   r   r   test_stata_119
  s    zTestStata.test_stata_119c              
   C   s  t jdddgdd}tdddd	gd
dddgdddd ggddddgd}||d< dddddd}d}|d tj|d< t }t|||dg|d|d}|	  t
|}|d d|d< t|| t|}	|	j|kst|	 |kst|j||dd t
|}
t||
 W 5 Q R X d S )Nr      β   ĉTr   r   r   u   ᴬu   ᴀ relatively long ŝtringr>  r   u   ᴮr   r   r   u   ᴰstrlsrc   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Strings)r   rO  rP  rQ  rR  u   ᴅaᵀa-labelF)r   r  r   rf   r]   )r]   rf   )r   r  r   rt   rr   r   rg   rh   r   
write_filer   r7  rj   r   r   r   r   ri   )rX   r]   r   r   r   r   r'   writerr   r'  Zreread_to_statar   r   r   test_utf8_writer  sJ    




	zTestStata.test_utf8_writerc              
   C   s   t tjdtjd}t .}tjtdd t	||dd W 5 Q R X W 5 Q R X t .}tjtdd t	||dd W 5 Q R X W 5 Q R X d S )	N)r   i  r   z"version must be either 118 or 119.r)  r_   r   zYou must use version 119r`   )
r   rr   zerosr   rg   rh   r+  r,  r-  r   )rX   r   r'   r   r   r   test_writer_118_exceptionsA  s    
"
z$TestStata.test_writer_118_exceptions)^__name__
__module____qualname__r+  fixturerY   r\   r   markparametrizerk   ry   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r0  r8  r:  r=  r?  rD  rE  rJ  rM  rS  rU  r`  rh  rt  rv  r  r  r  r  r  filterwarningsr  r  r  r  r  r  r  staticmethodr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r&  r+  r4  r9  r;  rA  rI  rM  ZslowrN  rU  rW  r   r   r   r   r,   =   sF  

@

<

-(



$ 
 



	



	 
:!3

#

$&



"
	 
G





+r,   r]   i   l   o   q   r^   c                 C   sT   |ddd}t j|d}t j|d|  d}t|}t|}tj||dd d S )	Nr   r   r   zstata-compat-118.dtazstata-compat-z.dtaFr   )r&   r'   r(   r   rg   rj   )r]   r    Z	data_baserefoldrx   Zold_dtar   r   r   test_backward_compatK  s    rf  r_   r`   ra   use_dictTFinferc              
   C   s  d}| r*| dkr|sdn| }|d| 7 }| }|r6d}|rBd| i}t tjddtd	d
}d|j_t|}|j	|||d | dkrt
|d}	t|	 }
W 5 Q R X n| dkrt|d}	t|	|	jd }
W 5 Q R X nr| dkrt|d}	t|	 }
W 5 Q R X n@| dkrNt|d}	t|	 }
W 5 Q R X n| d kr\|}
t|
dd}t|| W 5 Q R X d S )Nzdta_inferred_compression.dtar(  r*  ry  rh  methodr   r   r   rc   r%   )r]   compressionr'  r^  rr   bz2xzr  )r   rr   r   r   r   r%   r)   rg   rh   ri   r(  r#  r   r!  r  zipfileZipFilefilelistrl  lzmar   rj   )rj  r]   rg  rh  	file_namefile_extZcompression_argr   r'   compfpr  r   r   r   test_compressionU  s:    "


rv  ri  r^  rs  r%  c           
   
   C   s   d| }d}t tjddtdd}d|j_t|}| |d}|j	||d	 | d
ksd|d
krt
|dB}t|jdkst|jd j|kstt||jd }W 5 Q R X n|}t|dd}	t|	| W 5 Q R X d S )Ntest.ztest.dtar   r   r   rc   r%   )ri  archive_namerj  r^  rk  r   r   r  )r   rr   r   r   r   r%   r)   rg   rh   ri   rn  ro  r   rp  r   filenamer   r!  r  r   rj   )
ri  rs  rr  rx  r   r'   rj  Zzpru  r  r   r   r   test_compression_dicty  s    

"r{  c              
   C   s   t dtdddddgddi}d|j_t p}|j|| d t|d	d
d}t|D ]D\}}|	d}d|ksrt
t|j|jjd	| d	|d    qTW 5 Q R X d S )Ncatsr   r   r   r   r   r%   r   r   F)r  r  r   )r   r   r%   r)   rg   rh   ri   r   	enumerater   r   r  r|  r  )r]   r   r'   r'  r}  blockr   r   r   test_chunked_categorical  s    

r  c           	   
   C   s  t j| d}dddddg}t|dd}ttt t|D ]d\}}t|j	|d| d|d   kslt
|dk rtddg}ntdg}t|j	jj| q>W 5 Q R X W 5 Q R X tt& t|dd}| }W 5 Q R X W 5 Q R X t|}t|| d S )	Nstata-dta-partially-labeled.dtar   r   r   r   r  r   r   )r&   r'   r(   r   rg   r   r   r}  r   r|  r   r   r  ZFloat64Indexr  r   r   __next__r   rj   )	r!   dta_filer  r'  r}  r~  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &(r  c              	   C   s   t j| d}tjtdd t|dd W 5 Q R X tjtdd t|dd W 5 Q R X tjtdd t|dd W 5 Q R X d S )Nr  zchunksize must be a positiver)  rk  r  r   r  )r&   r'   r(   r+  r,  r-  r   )r!   r  r   r   r   test_iterator_errors  s    r  c               
      s   ddgdgd   t  fddtdD } t }| j|dd	 tjdddgd
d}t|dd\}t|D ]L\}}tdD ]}t	|j
| j| q~t|| j|d |d d   qnW 5 Q R X W 5 Q R X d S )NZc_labelZb_labelZa_labelru  c                    s"   i | ]}d | t j ddqS )r   Tr   )r   r  )r   rf  r  r   r   rQ    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   r   r   rY  r  r   )r   r  rg   rh   ri   r   r  r   r}  r  dtypesr   rj   r  )r   r'   rx   r'  r  r  r}  r   r  r   test_iterator_value_labels  s    
r  c               
   C   s   t tdd tdD tdd tdD ggddgd} t }tjtdd	 | j|d
d W 5 Q R X t|}t	t
jt
jgddgd}t|j| |jd | jd kst|jd t| jd kstW 5 Q R X d S )Nc                 s   s   | ]}d | V  qdS )r   Nr   r|  r   r   r   	<genexpr>  s     z&test_precision_loss.<locals>.<genexpr><   4   biglittlerc   z&Column converted from int64 to float64r)  Fr   )r%   )r   r  )r   r  )r   sumr  rg   rh   r   r
   ri   r   r   rr   r	  r  r  r   r   float)r   r'   r  Zexpected_dtr   r   r   test_precision_loss  s    ,
 r  c              
   C   s   t dddgdddggddgd	d
dgd}d|j_t l}|j|| d t|| dd}t|| t|| }t	
| }W 5 Q R X t|dd}t|| W 5 Q R X d S )N翶~Ϛ?9DܜJ?>D)?.4i(@33333@̤Ar  r  XYZr%   rd   r%   ry  rj  r  r  )r   r%   r)   rg   rh   ri   r   rj   Zdecompress_filer   r!  r  )rj  r   r'   r  fhcontentsr   r   r   test_compression_roundtrip  s    
r  to_infer
read_inferc              	   C   s   | }|dkrdn|}d| }t dddgddd	ggd
dgdddgd}d|j_|rVdn|}|rbdn|}t|.}	|j|	|d t|	|dd}
t|
| W 5 Q R X d S )Nr(  r*  rw  r  r  r  r  r  r  r  r  r  r  r  r  r%   rh  ry  r  )r   r%   r)   rg   rh   ri   r   rj   )Zcompression_onlyr  r  rj  extrz  r   Zto_compressionZread_compressionr'   r   r   r   r   test_stata_compression  s    
r  )3rl  r   r  r(  r   rq  r&   r  r   rn  Znumpyrr   r+  Zpandas.core.dtypes.commonr   rB  r   Zpandas._testingZ_testingrg   Zpandas.core.framer   r   Zpandas.io.parsersr   Zpandas.io.statar   r	   r
   r   r   r   r   r   r[  r   r!   r+   r,   r\  r]  rf  rv  r{  r  r  r  r  r  r  r  r   r   r   r   <module>   sr   (



              
	!

