U
    ~fhW                    @   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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+dd Z,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/d0 Z2d1d2 Z3d3d4 Z4d5d6 Z5ej)*d7ddgej)*d8ddgd9d: Z6d;d< Z7d=d> Z8d?d@ Z9ej)*ddddddgej)*dAej:ej;ej<ej=ej>ej?ej@ejAejBg	dBdC ZCdS )D    N)datetime)is_categorical_dtype)	DataFrameSeries)_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-a5acpmi0/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'   2   s    r'   c                   @   sH  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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d0d1 Zd2d3 Zejddddd	d
gd4d5 Zd6d7 Zejddddd	d
gejdd8d9d:d;gd<d= Zejdd>d?d@dAgdBdC Zejddddd	d
gdDdE Zejddddd	d
gdFdG ZdHdI Zejddddd	d
gdJdK ZdLdM ZdNdO Z dPdQ Z!dRdS Z"dTdU Z#dVdW Z$dXdY Z%dZd[ Z&ejddddd	d
gejd\d]d^gd_d` Z'dadb Z(dcdd Z)dedf Z*dgdh Z+ejddidjdkgdldm Z,dndo Z-dpdq Z.drds Z/ejddddd	d
gej0dtdudv Z1dwdx Z2ejddddd	d
gdydz Z3ejdd{d|gd}d~ Z4ejdddgdd Z5ejdd{d|gdd Z6ejdddddd;dAddkdd|dgejdddgejdddgejdddgdd Z7e8e9e9dddZ:dd Z;ejddddd:d@ddjdd{d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 ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHejdeIjJeIjJ gdd ZKdd ZLdd ZMejdddgdd ZNdd ZOejddddddddgddȄ ZPddʄ ZQdd̄ ZRdd΄ ZSejddddd	d
gddЄ ZTdd҄ ZUddԄ ZVddք ZWejddddd	d
gdd؄ ZXejddddd	d
gddڄ ZYdd܄ ZZddބ Z[e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_dtaB   s
    
zTestStata.test_read_empty_dtac              	   C   s   t tddddddgd}t }|j|d|d	 t|}W 5 Q R X t|jtj	sZt
| }|d
 tj|d
< tj||dd d S )N   Zb1Zb2Zb3Zb4Zb5)r   r   Fr5   r   TZcheck_index_type)r   ranger7   r8   r9   r   
isinstancer$   pd
RangeIndexAssertionErrorcopyastypenpint32r:   )r*   r-   dfr;   Zread_dfexpectedr   r   r   test_read_index_col_noneK   s    
z"TestStata.test_read_index_col_noner+   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_missr3   )r,   r   rF   nanrE   float32r7   r:   r*   r+   r&   parsedrI   r   r   r   test_read_dta1X   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_dater3   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   rA   NaTrE   warningscatch_warningssimplefilterr,   lenrC   r7   r:   )r*   r&   rI   wr'   
parsed_115
parsed_117r   r   r   test_read_dta2j   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!   rK   
stata3.csvyearquarter)	r,   r   rE   rF   rR   int16int8r7   r:   rS   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!   rK   onetentwoninethreeeightfoursevenr   fivesixr=   ra   r]   r\   	   fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr3   rg   TorderedZinplace)r,   r   rn   rF   rQ   rD   ZasarrayZnotnarE   _valuesset_categories
categoriesrenamer7   r:   )	r*   r+   r&   rT   rI   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strlrj   yzr3   Fcheck_dtype)r,   r   rn   r7   r:   )r*   r&   rv   rI   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Bytesrc   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Longsr3   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,   rE   r   rn   rF   rQ   rR   r4   r7   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_labelrC   )r*   r&   Z
parsed_118rI   r   rdrZvlZvl_expectedr   r   r   test_read_dta18   sB    
	zTestStata.test_read_dta18c              	   C   s   t tjtjtjtjtjfgdddddgd}d|j_t }|j|d d | |}W 5 Q R X |	 }|j
tj|_t|d| d S )	NrL   rM   rN   rO   rP   r3   r$   r"   )r   rF   rQ   r$   r%   r7   r8   r9   r,   rD   rE   rG   r:   	set_index)r*   originalr;   written_and_read_againrI   r   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!   rx   r$   ry   rz   r"   Fr>   )r   r$   r%   rE   rF   rG   r7   r8   r9   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    r4   dtyper$   tcr#   r-   Fr>   )r   rF   
datetime64r   r   r$   r%   rE   rG   r7   r8   r9   r,   r:   r   )r*   r-   r   r;   r   r   r   r   test_read_write_dta10?  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   ABr3   )r7   r8   r   rF   randomrandnlistr9   )r*   r;   rH   r   r   r   test_stata_doc_examplesT  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abcdr3   r   r   r   Fr6   )rF   r   seedr   r   r   rQ   locrD   r7   r8   r9   r:   )r*   rH   Zdf_copyr;   r   r   r   test_write_preserves_originalY  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   Fr5   )	r   	kreis1849rC   r@   strr7   r8   r9   r:   )	r*   r-   r&   rawencodedresultrI   r;   reread_encodedr   r   r   test_encodingc  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 4}tt	 |j
|d d W 5 Q R X | |}W 5 Q R X | }|jtj|_t|d
| d S )Nr   r   r   r   Zgoodu   bädZ8numberZ%astringwithmorethan32characters______r3   Zb_dZ_8number astringwithmorethan32characters_r$   r"   )r   r$   r%   rE   rF   rG   r7   r8   assert_produces_warningr
   r9   r,   rD   r:   r   )r*   r   	formattedr;   r   rI   r   r   r   test_read_write_dta11s  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 T}tj	dd2}t
dt |j|d |d t|dkstW 5 Q R X | |}W 5 Q R X | }|jtj|_t|d| d S )N)r   r   r   r   r=   ra   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleter3   r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter$   Trd   rf   r   r   )r   r$   r%   rE   rF   rG   r7   r8   rp   rq   rr   r
   r9   rs   rC   r,   rD   r:   r   )r*   r-   r   r   r;   rt   r   rI   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
 }|| | |}W 5 Q R X | }|jtj|_t
|d| d S )Ni   r   i   l        )r{   rG   int64r$   r   )r   rF   r{   rG   r   r   r$   r%   rE   float64r7   r8   r9   r,   rD   r:   r   )	r*   s1s2s3r   r   r;   r   rI   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_t|| t $}|j|ddi|d |  |}W 5 Q R X | }|jt	j
|_t|d| d S )	Nr   r    r!   rK   r$   date_tdtdr   )r,   r$   r%   r7   r:   r8   r9   rD   rE   rF   rG   r   )	r*   r+   r'   r-   r&   rT   r;   r   rI   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.csvbyte_int_long_float_double_r   z%Y-%m-%dargsrK   )r   rE   rF   r|   r{   rG   rR   r   applyr   strptimer,   r7   r:   )r*   r+   r&   rI   rT   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   variabler3     r            zThis is a data file.)
time_stampr   r-   z29 Feb 2000 14:21)	r   r   r7   r8   r9   r   r   rC   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   r3   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r   r-   )r   r7   r8   pytestraises
ValueErrorr9   osr;   isfilerC   )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 0}tt	 |
| W 5 Q R X | |}W 5 Q R X |d}t|j}dd }t|||_| }|jtj|_t|| d S )Ng      9@)r=   r=   r$   c                 S   s   t | d S )Nr   )intrj   r   r   r   <lambda>      z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rF   reshapearanger$   r%   r7   r8   r   r
   r9   r,   r   r   r4   maprD   rE   rG   r:   )r*   r   r;   r   r4   Zconvert_col_namerI   r   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	
 }|j||d | |}W 5 Q R X |d}| }|jtj|_t	|| d S )Nr   r   r   r   r   r   r$   r-   )r   rF   r	  rR   r   rQ   r   r$   r%   r7   r8   r9   r,   r   rD   rE   rG   r:   )r*   r-   r   r   r   r;   r   rI   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 )
Nrj   r         $@)r=   r   r3   Zindex_not_writtenFr   r   )r   rF   r  r	  r$   r%   r7   r8   r9   r,   r   r   KeyError)r*   r4   r   r;   r   r   r   r   test_no_index+  s    

zTestStata.test_no_indexc              	   C   s   t ddg}t ddgtjd}t||d}d|j_t }|| | 	|}W 5 Q R X |
 }|jtj|_t|d| d S )Nr   zA longer stringr          @r   r  r$   )r   rF   r   r   r$   r%   r7   r8   r9   r,   rD   rE   rG   r:   r   )r*   r   r   r   r;   r   rI   r   r   r   test_string_no_dates5  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	 0}t
t || W 5 Q R X | |}W 5 Q R X | }t |d	 tjd|d	< t |d
 tjd|d
< t |d tjd|d< |jtj|_t|d| d S )Nr   c   r      i  l    )s0r   r   r   r$   r   r   r   )r   rF   r|   r{   r   r   r$   r%   r7   r8   r   r   r9   r,   rD   rG   r   rE   r:   r   )	r*   r  r   r   r   r   r;   r   modifiedr   r   r   test_large_value_conversionB  s     
z%TestStata.test_large_value_conversionc              
   C   s   t tddddddg}d|j_t 8}tt |j|dd	id
 W 5 Q R X | 	|}W 5 Q R X |
 }dg|_|jtj|_t|d| d S )NrV   rW   rX   rY   rZ   r[   r$   r   r   r"   Z_0)r   r   r$   r%   r7   r8   r   r
   r9   r,   rD   r4   rE   rF   rG   r:   r   )r*   r   r;   r   r  r   r   r   test_dates_invalid_columnV  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   r4   rE   rF   r{   r|   rR   r7   r:   head)r*   r&   dpathrH   Zdf0r   r   r   test_105d  s    "zTestStata.test_105c              	   C   s6   |dddd}t |}| i ks(tW 5 Q R X d S )Nr   r    r!   r  )r   value_labelsrC   )r*   r&   r  r   r   r   r   test_value_labels_old_formatr  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tjdgtjdd|d}t	
 }|j||d | |}W 5 Q R X t	|d| d S )Nr   r   Ztwr7   Ztqthtyc                 S   s   i | ]
}||qS r   r   ri   r   r   r   r   
<dictcomp>}  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rV   rW   r[   rY   rZ   r3   r$   rX   r   r`   r]   r   r   r%   r$   r4   r"   )r   rs   r   r$   r%   rA   IndexrF   rG   r7   r8   r9   r,   r:   r   )	r*   r4   Zconversionsr    r   expected_valuesrI   r;   r   r   r   r   test_date_export_formats{  s,    







z"TestStata.test_date_export_formatsc              	   C   s~   t dgd ggdgd}t dgdggtjddgtjdddgd	}t }|| | |}W 5 Q R X t	|
d| d S )
N1Zfoor3   r   r   r   r$   r%  r&  )r   rA   r'  rF   rG   r7   r8   r9   r,   r:   r   )r*   r   rI   r;   r   r   r   r   test_write_missing_strings  s    


z$TestStata.test_write_missing_strings	byteorder><c              	   C   sT  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_|
	 }|
j
tj|_tjtjtjtjtjtjtjf}t|j|D ]\}}|| 
|||< qt  }|
j|||d | |}W 5 Q R X |d}t|| d S )Nr   r   Tr   d      i  i  il    )r  r   r   r   s4s5s6r$   )r,  r-   )r   rF   Zbool_Zuint8Zuint16Zuint32r   r$   r%   rD   rE   rG   r|   r{   r   zipr4   r7   r8   r9   r,   r   r:   )r*   r,  r-   r  r   r   r   r1  r2  r3  r   rI   Zexpected_typesr   tr;   r   r   r   r   test_bool_uint  s8    	

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   itemsrC   )	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|h}|  t|j	|j
|jD ]F\}}}	t|dd  t|dd	 kstt|dd  |	ks|tq|W 5 Q R X W 5 Q R X d S )
N)r   r/     r   r   r   sFr   r   )r   r   r   r7   r8   r9   r   Z_ensure_openr4  Z_varlistZ_fmtlistZ_typlistr  rC   )
r*   str_lensr@  str_lenr   r;   srr   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   r7   r8   r9   )r*   rB  r@  rC  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   r3   c                 S   s   g | ]}d t d|  qS ).a   )chrri   ir   r   r   rk     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   rL  r      z<fs      s     z.zz<ds         s        )r   r7   r8   r9   r   ZVALID_RANGEr?   insertr   r   rC   structunpack)r*   typesrH   r;   r   Zvalid_ranger(  r5  offsetrP  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   rR  c                    s    g | ]}t  |d    qS )rR  )r   )ri   jrP  r:  r   r   rk      s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r=   r3   r   r    r!   rK   TZconvert_missing)
r   sortedZMISSING_VALUESr:  r?   appendr   r   r7   r:   )	r*   r+   r&   r4   smvr    rowrI   rT   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 ||||||D ]|\}	}
}}}}g }tdD ]T}|dkr|t|	|
|||| q|dkr|t|	dd q|t|	|
| q|| qv|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	 &}d*|j_|j||d+ | |}W 5 Q R X t	j
|d*||jtjd&d' d S ),Ni  r   i'  r/  i  i  r   r^   r   r   r_      rY   r   ;   r]   ra   Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_ty   r   r   r`   r=      i  )r4   r   r   r    r!   zstata9_115.dtazstata9_117.dtaTrl   c                 S   s   i | ]}||d d qS )r  Nr   r#  r   r   r   r$  W  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r$   r"   )r4  r?   r_  r   rA   ro   r   r   r   r7   r:   r8   r$   r%   r9   r,   r   rE   rF   rG   )r*   r&   yrmoddhrmmssrI   ry   monthdayhourminutesecondra  r[  r4   ru   rv   Zdate_conversionr;   r   r   r   r   test_big_dates)  sb    "  , 
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   rE   rF   r|   r{   rG   rR   r   r   r   r   r   r7   r:   )r*   r&   rI   Zno_conversion
conversionr   r   r   test_dtype_conversiond  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#   r4   z"columns contains duplicate entriesr   zEThe following columns were not found in the Stata data set: not_found	not_found)r   rE   rF   r|   r{   rG   rR   r   r   r   r   r   r7   r:   r   r   r   )r*   r&   rI   r4   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 |jd	tj
|_|d t|d< |d t|d< |D ]V}||  }|	d j}| }|dkrP|j|d!d"}|jjd d!d# |||< qt } j||d$ | |}W 5 Q R X |d}t|| d S )%Nr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   ra   r]   r\   r   r`   r   r   r   r   r   Z	unlabeledr3   c                    s   g | ]} |  d qS rg   rE   ri   r   r   r   r   rk     s     z6TestStata.test_categorical_writing.<locals>.<listcomp>Zaxisr$   rg   Tr   r   r  )r   rn   rF   rQ   rD   rA   concatr$   Z	set_namesrE   rG   r   r   r   
as_orderedr   r   r   r7   r8   r9   r,   r   r:   )	r*   r-   rI   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_longr3   c                    s   g | ]} |  d qS rx  ry  rz  r{  r   r   rk     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   rk     s     )r   rn   rA   r}  r7   r8   r   r   r   r9   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
 } j||d
 | |}W 5 Q R X |d	}  }|D ].}|| j}| j}	|j|	dd}|||< q|jtj|_t
|| d S )Nc                 S   s   g | ]}d t | gqS )r   )r   rO  r   r   r   rk     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr3   c                    s   g | ]} |  d qS rx  ry  rz  r{  r   r   rk     s     r   r|  r$   r  Tr   )r?   r_  rF   rQ   r   rn   rA   r}  r$   r%   r7   r8   r9   r,   r   rD   r   remove_unused_categoriesr   r   rE   rG   r:   )
r*   r-   valuesr;   r   r  rI   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!   rK   )rF   r	  arrayr_  rA   Categorical
from_codesr   rR   r   	from_dictdictr   r7   r:   r   r   assert_series_equalr   codesassert_index_equalr   )
r*   r+   r&   rI   colsZis_catr   r;  r  rT   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t||_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!   rK   Zsrhfirst)Zna_positionrA  r   r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r%   )r   Zsort_valuesrA   rB   rs   r$   r  r  r   r7   r  )r*   r+   r&   rT   r  r   r   rI   r   r   r   test_categorical_sortingE  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!   rK   F)order_categoricals)r   r   r   r   r   rC   )r*   r+   r&   rT   Zparsed_unorderedr   r   r   r   test_categorical_orderingV  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F t d z||}W n& tk
r   Y W 5 Q R   qY nX W 5 Q R X |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	qbW 5 Q R X d S )Nr   r    r!   rK   Trd   rf   r  r#   )iteratorr  r#   r   r=   Fr   rm   rp   rq   rr   r   r?   readStopIterationilocrD   _convert_categoricalr7   r:   r*   r+   r  r  r#   r&   fnamerT   itrposr[  chunk
from_framer   r   r   test_read_chunks_117b  s@    

"
   zTestStata.test_read_chunks_117)r  returnc                 C   sX   | D ]N}| | }t |jr|j }|jjtkrJtj|jj}|	|}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )
r   r   r   r  r   r   rA   r'  Z_with_inferr   )r  r   Zserr   r   r   r   r   r    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  r7   r:   r  r   Z	get_chunkrA   r}  )r*   r&   r  rT   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F t d z||}W n& tk
r   Y W 5 Q R   qY nX W 5 Q R X |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	qbW 5 Q R X d S )Nr   r    r!   rK   Trd   rf   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  rz   Zcpim1r   r3   Tr  r   r=   Fr   )r   r?   r  r  r7   r:   )r*   r&   r  r4   r  rT   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%   r7   r8   r9   r   r   rC   )r*   r-   r   r   r;   rD  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%   r7   r8   r   r   r   r9   )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   r7   r8   r9   )r*   r   r  Zvariable_labels_utf8r  r;   Zvariable_labels_longr   r   r    test_write_variable_label_errors5  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   )r6   r#   )dtr   r   r7   r8   r9   r   r:   r4   tolistr$   )r*   r  r   r;   rereaddirectZ	dates_idxr   r   r   test_default_date_conversionS  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   NotImplementedErrorr7   r8   r9   )r*   r   r  r;   r   r   r   test_unsupported_typep  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  r7   r8   r9   rA   Z
date_range)r*   r  r   r  r;   r   r   r   test_unsupported_datetypex  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_labels  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=   ra   r   r   r   r  r  r   grJ  rP  r[  )r   rj   rt   r   r   rj   rt   r   )r   r   rF   NaNr7   r:   )r*   r&   rH   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   rF   finfodoubleepsmaxr   r   r   r7   r8   r9   )r*   rH   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|}W 5 Q R X |d tj|d< | }|jtj|_t	|d| d S )Nr   r  r  r$   r  )r   rF   r  rR   r  r  r$   r%   rE   r7   r8   r9   r   r   rD   rG   r:   r   )r*   r   r   r;   r  rI   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   r7   r8   r9   )r*   r  rH   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>)r7   makeDataFramer$   r%   Zround_trip_pathlibr9   r:   r*   rH   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>)r7   r  r$   r%   Zround_trip_localpathr9   r:   r  r   r   r   test_pickle_path_localpath  s
    z$TestStata.test_pickle_path_localpathr6   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    rg   r   Tr  )r   r   r   r   )r   rE   r7   r8   r9   r   r  rC   )r*   r6   r  rH   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)r7   r  r$   r%   r8   r9   r   r:   )r*   rH   r;   r  r   r   r   test_set_index  s    

zTestStata.test_set_indexcolumnmsrn  weekrm  ZqtrZhalfrg  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   rC   )r*   r  r&   rH   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{   rG   rR   r   r   r   Zs2045ZsrtlZforced_strlr   r   r$   r   r/   )r#   convert_strlr-   Fr>   )r   rF   r   r   r   r|   r{   rE   rG   rR   r$   r%   rD   r7   r8   r9   r,   r:   r   )r*   r   rD   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   r3   r$   r/   )r  r-   Fr>   )r   r$   r%   r7   r   r
   r8   r9   r,   r   r4   r:   )r*   r   r;   r  r   r   r   test_convert_strl_name_swapp  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   r7   r8   r   r   r   r9   )r*   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   BytesIOr7   r  r$   r%   r8   r9   seekopenwriter  r   r:   )r*   r-   biorH   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  )
r7   r  r$   r%   r8   gzipGzipFiler9   r   r:   )r*   rH   r;   gzr  r   r   r   test_gzip_writing  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@  r3   )r,   r   r7   r:   )r*   r&   Z
unicode_dfr4   r  rI   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   rG   Fr/   r5   r   r  )r6   r  r-   )	r   r  rE   r7   r8   r9   r   fillnar:   )r*   outputr;   r  rI   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   r7   r8   r   r   r   r9   )r*   r-   r  r;   r   r   r   test_all_none_exception  s    
z!TestStata.test_all_none_exceptionc              
   C   sb   d}t |gdgd}t <}d}d}tjt| d| d || W 5 Q R X W 5 Q R X d S )Nu9   Here is one __�__ Another one __·__ Another one __½__invalidr3   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   r7   r8   r   r   UnicodeEncodeErrorr9   )r*   r-   contentrH   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_strlr3   r/   )r-   r  r  zlatin-1zutf-8s   strlsr   r  s   GSO       )r   r7   r8   r9   r  r  encoderC   splitfindrs   )
r*   r  r;   r  r  rI   ZgsosZgsorX  sizer   r   r   test_strl_latin1  s      
zTestStata.test_strl_latin1c              	   C   s~   d}|dddd}t t6}t|}t|dks6t|d jjd |ksNt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   r3   )
r7   r   UnicodeWarningr   rs   rC   messager   r   r:   )r*   r&   r  r;   rt   r   rI   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   ra   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   r]   gQ	@)r   rA  r   )r   r   r  r^   r   )	r  r  r   shaperC   r  rA   Z	Timestampr   )r*   r&   r  rH   r   r   r   test_stata_119  s     zTestStata.test_stata_119c                 C   sb  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W 5 Q R X |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   ᴰ   Åstrlsr3   	   ᴐᴬᵀ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   r6   r-   r  rg   )r-   r6   )rA   r  r   rE   rF   rG   r7   r8   r   
write_filer   r  replacer   r~  r:   r   r   rC   r   r9   )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   r/   r  zYou must use version 119r0   )
r   rF   zerosr|   r7   r8   r   r   r   r   )r*   rH   r;   r   r   r   test_writer_118_exceptionsP  s    
"
z$TestStata.test_writer_118_exceptions)`__name__
__module____qualname__r,   r   r   markparametrizer<   rJ   rU   rw   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)  r+  r6  r>  rG  rI  rY  rb  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  rF   infr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r'  Zslowr)  r4  r6  r   r   r   r   r(   :   sV  


C 

 

,(



' 
 



	

	"
;14

#

!$





	 
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!   stata-compat-118.dtazstata-compat-rK   Fr   )r   r;   r  r   r7   r:   )r-   r&   Z	data_baserefoldrI   Zold_dtar   r   r   test_backward_compatZ  s    rF  c                 C   s   | dddd}t |&}| jr&tt|jtjr8tW 5 Q R X t|d6}t |"}| jrft|j|ksttW 5 Q R X W 5 Q R X t|dP}t| 6}t |"}| jrt|j|kstW 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r    r!   rC  r  )	r   r  emptyrC   r@   Z_path_or_bufr   r  r  )r&   Zmonkeypatch	file_pathr   fpr  r   r   r   test_direct_readd  s    

"
rJ  c              	   C   s^   | dddd}t jtdd t|}|  W 5 Q R X t jtdd |  W 5 Q R X d S )Nr   r    r!   rC  zwithout using a context managerr   zis not part of the public API)r7   r   ResourceWarningr   r  FutureWarningclose)r&   rH  rD  r   r   r   0test_statareader_warns_when_used_without_context{  s    rN  r/   r0   r1   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}W 5 Q R X | }|jtj|_t|| d S )Nzdta_inferred_compression.dtarL  rP  methodr`   r   r   r3   r$   )r-   compressionr  r  r4  rr   tarbz2zstdZ	zstandardxzlzmar  )r   r   rF   r   r   r   r$   r%   r7   r8   r9   r  r  r   r  r  zipfileZipFilefilelisttarfileextractfilegetnamesrU  r   Zimportorskipr   rD   rE   rG   r:   )rR  r-   rO  rP  	file_namefile_extZcompression_argrH   r;   comprI  rT  rV  rX  r  rI   r   r   r   test_compression  sR    "
(





rb  rQ  r4  r`  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}	W 5 Q R X | }
|
jtj|
_t|	|
 d S )Ntest.ztest.dtar`   r   r   r3   r$   )rQ  archive_namerR  r4  rS  r   r   r  )r   rF   r   r   r   r$   r%   r7   r8   r9   rY  rZ  rs   r[  rC   filenamer   r  r  r   rD   rE   rG   r:   )rQ  r`  r_  rd  rH   r;   rR  ZzprI  r  rI   r   r   r   test_compression_dict  s"    

"rg  c                 C   s   t dtdddddgddi}d|j_| }|jtj|_t	 |}|j
|| d t|d	d
dT}t|D ]D\}}|d}d|kstt|j|jjd	| d	|d    qnW 5 Q R X W 5 Q R X d S )Ncatsr   r   r   rg   r   r$   r  r   F)r  r  r   )r   r   r$   r%   rD   rE   rF   rG   r7   r8   r9   r   	enumerater   rC   r  rh  r  )r-   rH   rI   r;   r   rP  blockr   r   r   test_chunked_categorical  s    

 rk  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   r7   r   r	   ri  r   rh  rC   rA   r'  r  r   r   __next__r   r:   )	r&   dta_filer  r   rP  rj  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &(rp  r  )rA  r   r  c              
   C   sD   | dddd}t jtdd t||d W 5 Q R X W 5 Q R X d S )Nr   r    r!   rl  zchunksize must be a positiver   r  )r   r   r   r   )r&   r  rn  r   r   r   test_iterator_errors  s    rq  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_labelrH  c                    s"   i | ]}d | t j ddqS )r   Tr   )rA   r  )ri   r<  r  r   r   r$    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   r   r   r/  r  r   )r   r?   r7   r8   r9   rA   r'  r   ri  r  dtypesr   r:   r  )rH   r;   rI   r   r[  r  rP  r   rr  r   test_iterator_value_labels  s    
rt  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   rO  r   r   r   	<genexpr>  s     z&test_precision_loss.<locals>.<genexpr><   4   biglittler3   z&Column converted from int64 to float64r   Fr   )r$   )r   ry  )r   rx  )r   sumr?   r7   r8   r   r   r9   r   r   rF   r   r  rs  r   rC   float)rH   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Zr&  r$   re  rR  r  r  )r   r$   r%   r7   r8   r9   r   r:   Zdecompress_filer   r  r  )rR  rH   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 )Nrc  r}  r~  r  r  r  r  r  r  r  r  r  r&  r$   rP  re  r  )	r   r   r$   r%   r7   r8   r9   r   r:   )Zcompression_onlyr  r  rR  extrf  rH   Zto_compressionZread_compressionr;   r   r   r   r   test_stata_compression5  s    
r  c                  C   s>  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W 5 Q R X 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      "@r]   r   r\   r`   r[  r<  rK  )fully_labelledpartially_labelledr  r  r~   r   r   r0  )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  )r]   r\   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rP  r   )r   rF   rQ   rA   r  r7   r8   r   r1  r   r  rC   r   r   r  r   )r    r;   r  rI   r3  r   reader_value_labelsr  r   r   r   !test_non_categorical_value_labelsM  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 R}tt | j||d W 5 Q R X t|}| }||kstW 5 Q R X W 5 Q R X d S )Nr   r   r   r=   r\   r   ra   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   r7  r8  r  r   r   )r\   r   r   r   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )	r   r7   r8   r   r
   r9   r   r  rC   )r    r  rI   r;   r   r  r   r   r   0test_non_categorical_value_label_name_conversions  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
}| }W 5 Q R X || kslt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)r`   r[   (   r`   r[   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   r7   r8   r9   r   r  rC   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   rG   boolr|   r%  r   r  Fr5   Tr]  )r   r   rA   ZNAr%   r   r   Znumpy_dtyper2  r   ZBASE_MISSING_VALUESr   r7   r8   r9   r   r  r   r   )
r   r-   rH   Z
dtype_namevaluer`  Z
expected_bZ
expected_cr;   r  r   r   r   test_nullable_support  s,    

r  )DrU  r   r  r  r   r   rT  r\  rp   rY  ZnumpyrF   r   Zpandas.core.dtypes.commonr   r  rA   Zpandas._testingZ_testingr7   Zpandas.core.framer   r   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  rJ  rN  rb  rg  rk  rp  rq  rt  r|  r  r  r  r  r  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper  r   r   r   r   <module>   s   ,


              .
	/

&%&