U
    sVcK                    @   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 d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&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' Z0d(d) Z1ej+,d*d+d,d- Z2d.d/ Z3d0d1 Z4d2d3 Z5ej+,d4ddgej+,d5ddgd6d7 Z6d8d9 Z7d:d; Z8d<d= Z9ej+,ddddddgej+,d>ej:ej;ej<ej=ej>ej?ej@ejAejBg	d?d@ ZCdS )A    N)datetime)is_categorical_dtype)	DataFrameSeries)ensure_index)_compression_to_extensionread_csv)	CategoricalConversionWarningInvalidColumnNamePossiblePrecisionLossStataMissingValueStataReaderStataWriter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-xj8nt62q/pandas/tests/io/test_stata.pymixed_frame(   s    


r   c                 C   s&   | dddd}t |dd}d|j_|S )Niodatastatazstata5_114.dtaTconvert_datesindex)r   r%   name)datapathZ	dta14_114
parsed_114r   r   r   r(   3   s    r(   c                   @   s(  e Z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d,d- Zejddddd	d
g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ejdd6d7d8d9gd:d; Zejdd<d=d>d?gd@dA Zejddddd	d
gdBdC Zejddddd	d
gdDdE ZdFdG Zejddddd	d
gdHdI ZdJdK ZdLdM ZdNdO Z dPdQ Z!dRdS Z"dTdU Z#dVdW Z$dXdY Z%ejddddd	d
gejdZd[d\gd]d^ Z&d_d` Z'dadb Z(dcdd Z)dedf Z*ejddgdhdigdjdk Z+dldm Z,dndo Z-dpdq Z.ejddddd	d
gej/drdsdt Z0dudv Z1ejddddd	d
gdwdx Z2ejddydzgd{d| Z3ejdd}d~gdd Z4ejddydzgdd Z5ejdddddd9d?ddiddzd~gejdddgejdddgejdddgdd Z6e7e8e8dddZ9dd Z:ejddddd8d>ddhddyd}g
ejdddgejdddgejdddg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 Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGejdeHjIeHjI gdd ZJdd ZKdd ZLejdddgdd ZMdd ZNejddddddddgddƄ ZOddȄ ZPddʄ ZQdd̄ ZRejddddd	d
gdd΄ ZSddЄ ZTdd҄ ZUddԄ ZVejddddd	d
gddք ZWejddddd	d
gdd؄ ZXddڄ ZYdd܄ ZZejj[ddބ Z\ejddd	d
gdd Z]dd Z^d
S )	TestStatac                 C   s   t |ddS )NTr#   )r   selffiler   r   r   read_dta<   s    zTestStata.read_dtac                 C   s   t |ddS )NT)Zparse_datesr   r*   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)r+   r.   Zempty_dspathZ	empty_ds2r   r   r   test_read_empty_dtaC   s
    
zTestStata.test_read_empty_dtar,   Z
stata1_114Z
stata1_117c                 C   sn   |ddd| d}|  |}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 )Nr    r!   r"   .dta
float_missdouble_miss	byte_missint_miss	long_missr4   )r-   r   npnanastypefloat32r8   r;   r+   r,   r'   parsedexpectedr   r   r   test_read_dta1L   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#l}td$ | 	|d%d&d'd(}| 	|d%d&d'd)}| 	|d%d&d'd*}d+d, |D }t
|dksft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_dater4   OTrecordalwaysr    r!   r"   zstata2_114.dtazstata2_115.dtazstata2_117.dtac                 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NaTrF   warningscatch_warningssimplefilterr-   lenAssertionErrorr8   r;   )r+   r'   rJ   wr(   
parsed_115
parsed_117r   r   r   test_read_dta2_   s`    












"#
	zTestStata.test_read_dta2Z
stata3_113Z
stata3_114Z
stata3_115Z
stata3_117c                 C   sv   |ddd| d}|  |}| |dddd}|tj}|d tj|d< |d tj|d< t|| d S )Nr    r!   r"   r>   
stata3.csvyearquarter)	r-   r	   rF   rD   rG   int16int8r8   r;   rH   r   r   r   test_read_dta3   s    
zTestStata.test_read_dta3Z
stata4_113Z
stata4_114Z
stata4_115Z
stata4_117c           	      C   s4  |ddd| d}|  |}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 )Nr    r!   r"   r>   onetentwoninethreeeightfoursevenr   fivesix   rW   rS   rR   	   fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr4   r]   TorderedZinplace)r-   r   rd   rD   rE   copyZasarrayZnotnarF   _valuesset_categories
categoriesrenamer8   r;   )	r+   r,   r'   rI   rJ   colorigr   catr   r   r   test_read_dta4   s>    

zTestStata.test_read_dta4c                 C   sT   |  |dddd}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    r!   r"   zstata12_117.dtar   abcZ	abcdefghir   ZcbaZqwertywertyqwerty]    Zstrlr`   yzr4   Fcheck_dtype)r-   r   rd   r8   r;   )r+   r'   rn   rJ   r   r   r   test_read_dta12   s    	zTestStata.test_read_dta12c                 C   s(  |  |dddd}|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
|dddd>}| }d&d'd(d)d*d+d,d-}t|| |jd.kstW 5 Q R X d S )/Nr    r!   r"   zstata14_118.dtaBytesrY   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Longsr4   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-   rF   r   rd   rD   rE   rG   r5   r8   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_labelrk   )r+   r'   Z
parsed_118rJ   r   rdrZvlZvl_expectedr   r   r   test_read_dta18   sB    
	zTestStata.test_read_dta18c              	   C   sv   t tjtjtjtjtjfgdddddgd}d|j_t 0}|j|d d | |}t	|
d| W 5 Q R X d S )	Nr?   r@   rA   rB   rC   r4   r%   r#   )r   rD   rE   r%   r&   r8   r9   r:   r-   r;   	set_index)r+   originalr<   written_and_read_againr   r   r   test_read_write_dta5  s    

zTestStata.test_read_write_dta5c              	   C   s   |  |dddd}d|j_|jtj|_|d tj|d< |d tj|d< t 4}|j|d d | 	|}tj
|d|d	d
 W 5 Q R X d S )Nr    r!   r"   rp   r%   rq   rr   r#   FZcheck_index_type)r	   r%   r&   rF   rD   int32r8   r9   r:   r-   r;   r   )r+   r'   r   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!   r5   dtyper%   tcr$   r.   Fr   )r   rD   
datetime64r   r   r%   r&   rF   r   r8   r9   r:   r-   r;   r   )r+   r.   r   r<   r   r   r   r   test_read_write_dta104  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 )NrV   r   ABr4   )r8   r9   r   rD   randomrandnlistr:   )r+   r<   dfr   r   r   test_stata_doc_examplesI  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abcdr4   r   r   r   Fr7   )rD   r   seedr   r   r   rE   locr   r8   r9   r:   r;   )r+   r   Zdf_copyr<   r   r   r   test_write_preserves_originalN  s    
z'TestStata.test_write_preserves_originalc           	   	   C   s   t |dddd}t |dddd}|jd }|jd }||ksDtt|tsRtt *}|j|d|d t |}t|| W 5 Q R X d S )Nr    r!   r"   zstata1_encoding.dtar   Fr6   )	r   	kreis1849rk   
isinstancestrr8   r9   r:   r;   )	r+   r.   r'   rawencodedresultrJ   r<   reread_encodedr   r   r   test_encodingX  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 F}tt	 |j
|d 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______r4   Zb_dZ_8number astringwithmorethan32characters_r%   r#   )r   r%   r&   rF   rD   r   r8   r9   assert_produces_warningr   r:   r-   r;   r   )r+   r   	formattedr<   r   r   r   r   test_read_write_dta11i  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   rW   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleter4   r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter%   TrZ   r\   r   r   )r   r%   r&   rF   rD   r   r8   r9   rg   rh   ri   r   r:   rj   rk   r-   r;   r   )r+   r.   r   r   r<   rl   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        )rs   r   int64r%   r   )r   rD   rs   r   r   r   r%   r&   rF   float64r8   r9   r:   r-   r;   r   )r+   s1s2s3r   r   r<   r   r   r   r   test_read_write_dta13  s    


zTestStata.test_read_write_dta13Z
stata5_113Z
stata5_114Z
stata5_115Z
stata5_117c              	   C   s   |ddd| d}|  |}d|j_| |dddd}ddd	d
dg}|D ]}|| jddd||< qL|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    r!   r"   r>   r%   z
stata5.csvbyte_int_long_float_double_T)r   numericdate_tdZcoerce)errorstdr   )r-   r%   r&   r	   _convertrF   rD   rG   re   Zto_datetimer8   r;   r9   r:   r   )r+   r,   r(   r.   r'   rI   rJ   colsr   r<   r   r   r   r   test_read_write_reread_dta14  s    


z&TestStata.test_read_write_reread_dta14Z
stata6_113Z
stata6_114Z
stata6_115Z
stata6_117c                 C   s   |  |dddd}|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| d}| |}t|| d S )Nr    r!   r"   
stata6.csvr   r   r   r   r   r   z%Y-%m-%dargsr>   )r	   rF   rD   rt   rs   r   rG   r   applyr   strptimer-   r8   r;   )r+   r,   r'   rJ   rI   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   variabler4     r            zThis is a data file.)
time_stampr   r.   z29 Feb 2000 14:21)	r   r   r8   r9   r:   r   r   rk   r   )r+   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   r4   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r   r.   )r   r8   r9   pytestraises
ValueErrorr:   osr<   isfilerk   )r+   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   rD   reshapearanger%   r&   r8   r9   r   r   r:   r-   r   r   r5   mapr;   )r+   r   r<   r   r5   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   rD   r  rG   r   rE   r   r%   r&   r8   r9   r:   r-   r   r;   )r+   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   r4   Zindex_not_writtenFr   r   )r   rD   r
  r  r%   r&   r8   r9   r:   r-   r   r   KeyError)r+   r5   r   r<   r   r   r   r   test_no_index  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   r  r%   )r   rD   r   r   r%   r&   r8   r9   r:   r-   r;   r   )r+   r   r   r   r<   r   r   r   r   test_string_no_dates  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   rD   rt   rs   r   r   r%   r&   r8   r9   r   r   r:   r-   r   r   r   r;   r   )	r+   r  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 Z}tt |j|dd	id
 W 5 Q R X | 	|}|
 }dg|_t|d| W 5 Q R X d S )NrL   rM   rN   rO   rP   rQ   r%   r   r   r#   Z_0)r   r   r%   r&   r8   r9   r   r   r:   r-   r   r5   r;   r   )r+   r   r<   r   r  r   r   r   test_dates_invalid_column;  s    

z#TestStata.test_dates_invalid_columnc                 C   s   |ddd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 )Nr    r!   r"   S4_EDUC1.dtar   r   r   r   ZclustnumZpri_schlZpsch_numZpsch_dis)r   r   r5   rF   rD   rs   rt   rG   r8   r;   head)r+   r'   dpathr   Zdf0r   r   r   test_105G  s    "zTestStata.test_105c                 C   s2   |dddd}t |}| i ks&t|  d S )Nr    r!   r"   r  )r   value_labelsrk   close)r+   r'   r  r   r   r   r   test_value_labels_old_formatU  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 0}|j||d | |}t	|
d| W 5 Q R X d S )Nr   r   Ztwr8   Ztqthtyc                 S   s   i | ]
}||qS r   r   r_   r   r   r   r   
<dictcomp>a  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rL   rM   rQ   rO   rP   r4   r%   rN   r   rV   rS   r#   )r   rj   r   r%   r&   r8   r9   r:   r-   r;   r   )	r+   r5   Zconversionsr!   r   expected_valuesrJ   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foor4   r   r%   )	r   r%   r&   r8   r9   r:   r-   r;   r   )r+   r   rJ   r<   r   r   r   r   test_write_missing_stringsv  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    )r  r   r   r   s4s5s6r%   )r,  r.   )r   rD   Zbool_Zuint8Zuint16Zuint32r   r%   r&   r   rt   rs   r   r   zipr5   rF   r8   r9   r:   r-   r   r;   )r+   r,  r.   r  r   r   r   r1  r2  r3  r   rJ   Zexpected_typesr   tr<   r   r   r   r   test_bool_uint  s6    	


zTestStata.test_bool_uintc           	   	   C   s   t |dddd}| }W 5 Q R X t |dddd}| }W 5 Q R X d}d}| D ]<\}}||kspt||| kst||kst||ks\tq\d S )Nr    r!   r"   zstata7_115.dtazstata7_117.dta)Zvar1Zvar2Zvar3)label1label2Zlabel3)r   r   itemsrk   )	r+   r'   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   r/     r   r   r   sFr   r   )r   r   r   r8   r9   r:   r   typlistZvarlistZfmtlistr4  r  rk   )r+   str_lensr@  str_lenr   r<   srrB  	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   r?    r   r   r   r@  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  r8   r9   r:   )r+   rC  r@  rD  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   r4   c                 S   s   g | ]}d t d|  qS ).a   )chrr_   ir   r   r   ra     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   rO  r      z<fs      s     z.zz<ds         s        )r   r8   r9   r:   r   ZVALID_RANGErangeinsertr   r   rk   structunpack)r+   typesr   r<   r   Zvalid_ranger(  r5  offsetrS  valr   r   r   test_missing_value_generator  s2    


z&TestStata.test_missing_value_generatorZ
stata8_113Z
stata8_115Z
stata8_117c           	         s   dddddg}t d}t|j g }tdD ]&  fdd	td
D }|| q0t||d}t|ddd| ddd}t	|| d S )NZint8_Zint16_Zint32_Zfloat32_Zfloat64_e   rU  c                    s    g | ]}t  |d    qS )rU  )r   )r_   jrS  r:  r   r   ra     s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r   r4   r    r!   r"   r>   TZconvert_missing)
r   sortedZMISSING_VALUESr:  rV  appendr   r   r8   r;   )	r+   r,   r'   r5   smvr!   rowrJ   rI   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|d!d"d#d$}t|d!d"d#d%}t	j
||d&d' t	j
||d&d' d(d) |D }t	 T}d*|j_t	jtd+d, ||| W 5 Q R X | |}t	j
|d*|d&d' W 5 Q R X d S )-Ni  r   i'  r/  i  i  r   rT   r   r   rU      rO   r   ;   rS   rW   Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_ty   r   r   rV   r      i  )r5   r   r    r!   r"   zstata9_115.dtazstata9_117.dtaTrb   c                 S   s   i | ]}||d d qS )r  Nr   r&  r   r   r   r'  0  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r%   zkeyword-onlyr   )rV  rj   rc  r   re   rf   r   r   r   r8   r;   r9   r%   r&   r   FutureWarningr:   r-   r   )r+   r'   yrmoddhrmmssrJ   rS  re  r_  r5   rm   rn   Zdate_conversionr<   r   r   r   r   test_big_dates  sd    2   , 

zTestStata.test_big_datesc                 C   s  |  |dddd}|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|dddddd}t|| t|ddddddd}|  |dddd}|d
 jt	j
dd|d
< t|| d S )Nr    r!   r"   r   r   r   r   r   r   r   r   r   stata6_117.dtaTr#   F)r$   Zpreserve_dtypes)r	   rF   rD   rt   rs   r   rG   r   r   r   r   r   r8   r;   )r+   r'   rJ   Zno_conversion
conversionr   r   r   test_dtype_conversion=  s4     
  
zTestStata.test_dtype_conversionc              	   C   s  |  |dddd}|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|ddddd|d}t|| dddg}|| }t|ddddd|d}t|| d}tjt|d& ddg}t|ddddd|d W 5 Q R X d}tjt|d* ddddg}t|ddddd|d W 5 Q R X d S )Nr    r!   r"   r   r   r   r   r   r   r   r   r   rs  T)r$   r5   z"columns contains duplicate entriesr   zEThe following columns were not found in the Stata data set: not_found	not_found)r	   rF   rD   rt   rs   r   rG   r   r   r   r   r   r8   r;   r   r   r  )r+   r'   rJ   r5   ZdroppedZ	reorderedr  r   r   r   test_drop_column[  sT     


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 )%Nrv   rw   r   rx   ry   r   rz   r{   r   r|   r}   r   r~   r   r   rW   rS   rR   r   rV   r   r   r   r   r   Z	unlabeledr4   c                    s   g | ]} |  d qS r]   rF   r_   r   r   r   r   ra     s     z6TestStata.test_categorical_writing.<locals>.<listcomp>Zaxisr%   r]   Tr   r   r  )r   rd   rD   rE   r   re   concatr%   r&   r   r   rF   r   
as_orderedr   r   r   r8   r9   r:   r-   r   r;   )	r+   r.   rJ   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_longr4   c                    s   g | ]} |  d qS rx  ry  rz  r{  r   r   ra     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 rx  ry  rz  r{  r   r   ra     s     )r   rd   re   r}  r8   r9   r   r   r  r:   r   r   )r+   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   rR  r   r   r   ra     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr4   c                    s   g | ]} |  d qS rx  ry  rz  r{  r   r   ra     s     r   r|  r%   r  Tr   )rV  rc  rD   rE   r   rd   re   r}  r%   r&   r8   r9   r:   r-   r   r   r   remove_unused_categoriesr   r   r;   )
r+   r.   valuesr<   r   r  rJ   r   r   Znew_catsr   r{  r   *test_categorical_with_stata_missing_values  s&     





z4TestStata.test_categorical_with_stata_missing_valuesZstata10_115Zstata10_117c           
      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|}|ddd| d }t|}	t||	 |D ]N}t|| jrbt|| jj|	| jj t|| jj|	| jj qbd S )!NTr   r   r   r   r  er   reverserA  Znoorderr   r   r   r   r   r   Zfloat_missingFZnolabelr   r  r   r   g      @Zint32_mixedr   r   r    r!   r"   r>   )rD   r  arrayrc  re   Categorical
from_codesr   rG   r   	from_dictdictr   r8   r;   r   r   assert_series_equalr   codesassert_index_equalr   )
r+   r,   r'   rJ   r   Zis_catr   r;  r  rI   r   r   r   test_categorical_order  s4    $$ 	
 
z TestStata.test_categorical_orderZstata11_115Zstata11_117c              
   C   s   t |ddd| d}|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 )Nr    r!   r"   r>   Zsrhfirst)Zna_positionr   rA  r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r&   )r   Zsort_valuesrD   r  shaper%   re   r  r  r   r8   r  )r+   r,   r'   rI   r  r   r   rJ   r   r   r   test_categorical_sorting  s      z"TestStata.test_categorical_sortingc                 C   sf   |ddd| d}t |}t |dd}|D ]4}t|| js@q,|| jjsPt|| jjr,tq,d S )Nr    r!   r"   r>   F)order_categoricals)r   r   r   r   r   rk   )r+   r,   r'   rI   Zparsed_unorderedr   r   r   r   test_categorical_ordering,  s    z#TestStata.test_categorical_orderingZ
stata2_117Z
stata7_117Z
stata9_117	chunksizer   r   convert_categoricalsFTr$   c              
   C   s
  |ddd| d}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 }	q`|  d S )Nr    r!   r"   r>   TrZ   r\   r  r$   )iteratorr  r$   r   r   Fr   rc   rg   rh   ri   r   rV  readStopIterationilocr   _convert_categoricalr8   r;   r"  r+   r,   r  r  r$   r'   fnamerI   itrposr_  chunk
from_framer   r   r   test_read_chunks_1178  s@    

 
   
zTestStata.test_read_chunks_117)r  returnc                 C   sT   | D ]J}| | }t |jr|j }|jjtkrFt|jj}||}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )r   r   r   r  r   r   r   r   )r  r   Zserr   r   r   r   r   r  o  s    



zTestStata._convert_categoricalc              	   C   sH  |dddd}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 )Nr    r!   r"   stata3_117.dtaTr  r   r   r  r   )	r   r  r8   r;   r  r   Z	get_chunkre   r}  )r+   r'   r  rI   r  r  Zfrom_chunksr   r   r   test_iterator~  s"    
(,
((zTestStata.test_iteratorZ
stata2_115Z
stata7_115Z
stata9_115c              
   C   s
  |ddd| d}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 }	q`|  d S )Nr    r!   r"   r>   TrZ   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   |dddd}dddg}d}t ||d	}t |d
dd}d}tdD ]P}|j||d	}	|	d kr` q|j||| d d f }
tj|
|	dd ||7 }qBW 5 Q R X d S )Nr    r!   r"   r  rr   Zcpim1r   r4   Tr  r   r   Fr   )r   rV  r  r  r8   r;   )r+   r'   r  r5   r  rI   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&   r8   r9   r:   r   r   rk   )r+   r.   r   r   r<   rE  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&   r8   r9   r   r   r  r:   )r+   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  )r+   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  )joinr   r   r  r8   r9   r:   )r+   r   r  Zvariable_labels_utf8r  r<   Zvariable_labels_longr   r   r    test_write_variable_label_errors  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  rT   rU   .    r   R    rS   r     r   r  r   applebananacherrynumsstrsdatesFr   Tr#   r  r   )r7   r$   )dtr   r   r8   r9   r:   r   r;   r5   tolistr%   )r+   r  r   r<   rereaddirectZ	dates_idxr   r   r   test_default_date_conversion.  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   NotImplementedErrorr8   r9   r:   )r+   r   r  r<   r   r   r   test_unsupported_typeK  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  rT   rU   r  r  r   r  r  rS   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  r8   r9   r:   re   Z
date_range)r+   r  r   r  r<   r   r   r   test_unsupported_datetypeS  s0    
&
z#TestStata.test_unsupported_datetypec              	   C   s8   d}t jt|d t|dddd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   r    r!   r"   zstata15.dtaTr  )r   r   r  r   )r+   r'   r  r   r   r   test_repeated_column_labelsr  s    
z%TestStata.test_repeated_column_labelsc                 C   s   t |dddd}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"   zstata7_111.dtar   r   r   r   r   r   rW   r   r   r   r  r  r   grM  rS  r_  )r   r`   rl   r   r   r`   rl   r   )r   r   rD   NaNr8   r;   )r+   r'   r   r   r   r   r   test_stata_111  s    zTestStata.test_stata_111c              
   C   sx   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 d S )Nr   g      ZColumnOkColumnTooBigzZColumn ColumnTooBig has a maximum value \(.+\) outside the range supported by Stata \(.+\)r   )r   rD   finfodoubleepsmaxr   r   r  r8   r9   r:   )r+   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 d S )Nr   r  r  r%   r  )r   rD   r  rG   r  r  r%   r&   rF   r8   r9   r:   r   r   r;   r   )r+   r   r   r<   r  r   r   r   test_out_of_range_float  s&    

z!TestStata.test_out_of_range_floatinfvalc              
   C   sV   t ddgd|gd}d}tjt|d$ t }|| W 5 Q R X W 5 Q R X d S )Nr   r   r  )Z
WithoutInfZWithInfz[Column WithInf contains infinity or -infinitywhich is outside the range supported by Stata.r   )r   r   r   r  r8   r9   r:   )r+   r  r   r  r<   r   r   r   test_inf  s    
zTestStata.test_infc                 C   s6   t  }d|j_dd }t |j|}t || d S )Nr%   c                 S   s   t | dS Nr%   r   r   r  r   r   r   r    r	  z-TestStata.test_path_pathlib.<locals>.<lambda>)r8   makeDataFramer%   r&   Zround_trip_pathlibr:   r;   r+   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  r  r   r   r   r    r	  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)r8   r  r%   r&   Zround_trip_localpathr:   r;   r  r   r   r   test_pickle_path_localpath  s
    z$TestStata.test_pickle_path_localpathr7   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   rF   r8   r9   r:   r   r!  rk   )r+   r7   r  r   r<   Zdta_iterr!  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)r8   r  r%   r&   r9   r:   r   r;   )r+   r   r<   r  r   r   r   test_set_index  s    

zTestStata.test_set_indexcolumnmsdayweekmonthZqtrZhalfrl  c                 C   sB   t |dddd}|jd|f }|jd|d f }||ks>td S )Nr    r!   r"   zstata13_dates.dtar   _fmt)r   r   rk   )r+   r  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   rt   rs   r   rG   r   r   r   Zs2045ZsrtlZforced_strlr   r   r%   r   r0   )r$   convert_strlr.   Fr   )r   rD   r   r   r   rt   rs   rF   r   rG   r%   r&   r   r8   r9   r:   r-   r;   r   )r+   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   r4   r%   r0   )r  r.   Fr   )r   r%   r&   r8   r   r   r9   r:   r-   r   r5   r;   )r+   r   r<   r  r   r   r   test_convert_strl_name_swapH  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  rT   rU   r  r  r   r  r  rS   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   r8   r9   r   r   r  r:   )r+   r  r   r<   r  r   r   r   test_invalid_date_conversionW  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    BytesIOr8   r  r%   r&   r9   r:   seekopenwriter  r   r;   )r+   r.   Zbior   r<   dtar  r   r   r   test_nonfile_writingk  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  )
r8   r  r%   r&   r9   gzipGzipFiler:   r   r;   )r+   r   r<   gzr  r   r   r   test_gzip_writingy  s    
 zTestStata.test_gzip_writingc                 C   s   |  |dddd}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 )Nr    r!   r"   zstata16_118.dtautf8latin1asciiZ	utf8_strlZ
ascii_strlu   ραηδαςu   PÄNDÄSpu   ƤĀńĐąŜ   Ör   u   ᴘᴀᴎᴅᴀS   Ünz      r   r   r@  r4   )r-   r   r8   r;   )r+   r'   Z
unicode_dfr5   r  rJ   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 n}|j|ddd t|}|d	}t|| d |d
< |j|dd
gdd t|}|d	}t|| W 5 Q R X d S )NA  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   r   Fr0   r6   r   r  )r7   r  r.   )	r   r  rF   r8   r9   r:   r   fillnar;   )r+   outputr<   r  rJ   r   r   r   test_mixed_string_strl  s$    

   
z TestStata.test_mixed_string_strlc              
   C   sd   dddd ddg}t |}d |d< t .}tjtdd |j||d W 5 Q R X W 5 Q R X d S )Nnoner   )r  r  r   z Column `none` cannot be exportedr   r  )r   r8   r9   r   r   r  r:   )r+   r.   r  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 __½__invalidr4   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   r8   r9   r   r   UnicodeEncodeErrorr   ResourceWarningr:   )r+   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_strlr4   r0   )r.   r  r  zlatin-1zutf-8s   strlsr   r  s   GSO       )r   r8   r9   r:   r  r  encoderk   splitfindrj   )
r+   r  r<   r  r  rJ   ZgsosZgsor\  sizer   r   r   test_strl_latin1  s      
zTestStata.test_strl_latin1c              	   C   sz   d}t t@}t|dddd}t|dks2t|d jjd |ksJt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    r!   r"   zstata1_encoding_118.dta   r   u   Düsseldorfr   r4   )
r8   r   UnicodeWarningr   rj   rk   messager   r   r;   )r+   r'   r  rl   r   rJ   r   r   r   test_encoding_latin1_118  s    "z"TestStata.test_encoding_latin1_118c              
   C   s   t |ddddd}t|}W 5 Q R X |jdks8t|jd dksJt|jd	 d
ks\t|jd dksnt|jd ttddddddkstd S )Nr    r!   r"   zstata1_119.dta.gzr  )r   i  )r   rW   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   rS   gQ	@)r   rA  r   )r   r   r  rT   r   )	r  r  r   r  rk   r  re   Z	Timestampr   )r+   r'   r  r   r   r   r   test_stata_119  s     zTestStata.test_stata_119c                 C   sV  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ddddi}|d tj|d< t }t|||dg|d||d }|	  t
|}	|d d|d< |d |d d!j |d< t||	 t|}
|
j|kst|
 |ks$t|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   ᴰ   Åstrlsr4   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Strings)r-  r+  r,  r.  r/  u   ᴅaᵀa-labellabelu   æøåu   ŋot valid latin-1r   r   r   F)r   r  r   r7   r.   r!  r]   )r.   r7   )re   r  r   rF   rD   r   r8   r9   r   
write_filer   r  replacer   r~  r;   r   r   rk   r   r:   )r+   r.   r   r!   r   r   r!  r<   writerr   r   Zreread_to_statar   r   r   test_utf8_writer  sR    





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   r0   r  zYou must use version 119r1   )
r   rD   zerosrt   r8   r9   r   r   r  r   )r+   r   r<   r   r   r   test_writer_118_exceptions'  s    
"
z$TestStata.test_writer_118_exceptions)___name__
__module____qualname__r-   r	   r   markparametrizer=   rK   ro   ru   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)  r+  r6  r>  rJ  rL  r]  rf  rr  ru  rw  filterwarningsr  r  r  r  r  r  r  staticmethodr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   infr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r)  Zslowr*  r5  r7  r   r   r   r   r)   ;   sR  

D 

 

-(



$ 
 



	



	 
;13

#

$&





	 
G




1r)   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-r>   Fr   )r  r<   r  r   r8   r;   )r.   r'   Z	data_baserefoldrJ   Zold_dtar   r   r   test_backward_compat1  s    rF  r0   r1   r2   use_dictTFinferc              
   C   s  d}| r(|r| }nt |  }|d| 7 }| }|r4d}|r@d| 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 n| dkr(t|"}t|| d  }
W 5 Q R X n| dkrZt|d}	t|	 }
W 5 Q R X n| dkrtd}||d}	t|	 }
W 5 Q R X nJ| dkrtd}||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.dtarO  rH  methodrV   r   r   r4   r%   )r.   compressionr  r  r4  rr   tarbz2zstdZ	zstandardxzlzmar  )r   r   rD   r   r   r   r%   r&   r8   r9   r:   r  r  r    r  r  zipfileZipFilefilelisttarfileextractfilegetnamesrM  r   Zimportorskipr   r;   )rJ  r.   rG  rH  	file_namefile_extZcompression_argr   r<   compfprL  rN  rP  r  r   r   r   test_compression;  sN    "
(





r[  rI  r4  rX  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.dtarV   r   r   r4   r%   )rI  archive_namerJ  r4  rK  r   r   r  )r   rD   r   r   r   r%   r&   r8   r9   r:   rQ  rR  rj   rS  rk   filenamer    r  r  r   r;   )
rI  rX  rW  r]  r   r<   rJ  ZzprZ  r  r   r   r   test_compression_dictj  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&   r8   r9   r:   r   	enumerater   rk   r  ra  r  )r.   r   r<   r   rS  blockr   r   r   test_chunked_categorical  s    

rd  c           	   
   C   s
  | dddd}dddddg}t |dd	}ttx t|D ]h\}}t|j|d| d|d
   kslt|dk rt	ddg}ntj	dgdd}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 )Nr    r!   r"   stata-dta-partially-labeled.dtar   r   r   r   r  r   r   r   r   )r   r8   r   r
   rb  r   ra  rk   re   Indexr  r   r   __next__r   r;   )	r'   dta_filer  r   rS  rc  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &(rj  r  )rA  r   r  c              	   C   s8   | dddd}t jtdd t||d W 5 Q R X d S )Nr    r!   r"   re  zchunksize must be a positiver   r  )r   r   r  r   )r'   r  rh  r   r   r   test_iterator_errors  s    rk  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_labelrK  c                    s"   i | ]}d | t j ddqS )r   Tr   )re   r  )r_   r<  r  r   r   r'    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   r   r   r/  r  r   )r   rV  r8   r9   r:   re   rf  r   rb  r  dtypesr   r;   r  )r   r<   rJ   r   r_  r  rS  r   rl  r   test_iterator_value_labels  s    
rn  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   rR  r   r   r   	<genexpr>  s     z&test_precision_loss.<locals>.<genexpr><   4   biglittler4   z&Column converted from int64 to float64r   Fr   )r%   )r   rs  )r   rr  )r   sumrV  r8   r9   r   r   r:   r   r   rD   r   r  rm  r   rk   float)r   r<   r  Zexpected_dtr   r   r   test_precision_loss  s    ,
 rv  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%   r5   r%   r^  rJ  r  r  )r   r%   r&   r8   r9   r:   r   r;   Zdecompress_filer    r  r  )rJ  r   r<   r  fhcontentsr   r   r   test_compression_roundtrip  s    
r  to_infer
read_inferc              	   C   s   | }t | }d| }tdddgdddggdd	gd
ddgd}d|j_|rNdn|}|rZdn|}t|.}	|j|	|d t|	|dd}
t|
| W 5 Q R X d S )Nr\  rw  rx  ry  rz  r{  r|  r  r  r}  r~  r  r  r%   rH  r^  r  )	r   r   r%   r&   r8   r9   r:   r   r;   )Zcompression_onlyr  r  rJ  extr_  r   Zto_compressionZread_compressionr<   r   r   r   r   test_stata_compression  s    
r  c                  C   s2  t dddddgddtjdtjgdddd	d
gtdddddgd} t }dddddddd}|dddddi}t|| |d}|  t	|}|
 }||kstd}tjt|d" ddddi}t|| |d W 5 Q R X d}tjt|d& ddddd d!i}t|| |d W 5 Q R X W 5 Q R X d S )"Nr   r   r   r   r  g      "@rS   r   rR   rV   r_  r<  rN  )fully_labelledpartially_labelledr~  r  rv   rx   rz   r1  )r   r  )r  r  r  )r   r   r   r!  zCCan't create value labels for notY, it wasn't found in the dataset.r   ZnotYr7  r8  )rS   rR   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rS  r   )r   rD   rE   re   r  r8   r9   r   r2  r   r!  rk   r   r   r  r  )r!   r<   r!  rJ   r4  r   reader_value_labelsr  r   r   r   !test_non_categorical_value_labels  s4    	

r  c                  C   s   t 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ddddddiddid	}d
ddd
dddddddiddid}t F}tt | j||d W 5 Q R X t|}| }||kstW 5 Q R X d S )Nr   r   r   r   rR   r   rW   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   r7  r8  r  r{   ry   )rR   r   r~   rz   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )	r   r8   r9   r   r   r:   r   r!  rk   )r!   r!  rJ   r<   r   r  r   r   r   0test_non_categorical_value_label_name_conversion  s4    	
r  c               
   C   s   dddddi} t dddddddgi}t }|j|| d t|d	d
}| }|| ks`td}dddg }d| d| d}tj	t
|d t|dd
 W 5 Q R X W 5 Q R X d S )NZrepeated_labelsZTenzMore than ten)rV   rQ   (   rV   rQ   r  r  Fr  zQ--------------------------------------------------------------------------------

z
Value labels for column a    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:
r   T)r   r8   r9   r:   r   r!  rk   r  r   r   r  r   )r!  r!   r<   r   r  r   Zrepeatsr  r   r   r   ;test_non_categorical_value_label_convert_categoricals_error=  s,     
 
	r  r   c           
   	   C   s  t tdddgtdtjtjg| jdtddd gd}|jjjj}|d	d
}|dkr^d}n|dkrjd}t	j
| }t	|}td||gtdd}tddd
gdd}t N}|j|d|d t|dd}	t|j|	j t|	j| t|	j| W 5 Q R X d S )Nr   r  r   r   r   r   r   r   ur   r   r   boolrt   )r   r&   r   r  Fr6   Tra  )r   r   re   ZNAr&   r   r   Znumpy_dtyper3  r   ZBASE_MISSING_VALUESr   r8   r9   r:   r   r  r   r   )
r   r.   r   Z
dtype_namevaluerd  Z
expected_bZ
expected_cr<   r  r   r   r   test_nullable_supportc  s,    

r  )DrM  r   r  r  r    r  rX  rT  rg   rQ  ZnumpyrD   r   Zpandas.core.dtypes.commonr   r  re   Zpandas._testingZ_testingr8   Zpandas.core.framer   r   Zpandas.core.indexes.apir   Z pandas.tests.io.test_compressionr   Zpandas.io.parsersr	   Zpandas.io.statar
   r   r   r   r   r   r   r   r   Zfixturer   r(   r)   r;  r<  rF  r[  r`  rd  rj  rk  rn  rv  r  r  r  r  r  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper  r   r   r   r   <module>   s   ,


              
	,

&%&