U
    -eW                    @   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   [/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/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   b1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   rH   nanrG   float32r7   r:   r*   r+   r&   parsedrK   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   rC   NaTrG   warningscatch_warningssimplefilterr,   lenrE   r7   r:   )r*   r&   rK   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!   rM   
stata3.csvyearquarter)	r,   r   rG   rH   rT   int16int8r7   r:   rU   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!   rM   onetentwoninethreeeightfoursevenr   fivesixr=   rc   r_   r^   	   fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr3   ri   TorderedZinplace)r,   r   rp   rH   rS   rF   ZasarrayZnotnarG   _valuesset_categories
categoriesrenamer7   r:   )	r*   r+   r&   rV   rK   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strlrl   yzr3   Fcheck_dtype)r,   r   rp   r7   r:   )r*   r&   rx   rK   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Bytesre   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,   rG   r   rp   rH   rS   rT   r4   r7   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_labelrE   )r*   r&   Z
parsed_118rK   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 )	NrN   rO   rP   rQ   rR   r3   r$   r"   )r   rH   rS   r$   r%   r7   r8   r9   r,   rF   rG   rI   r:   	set_index)r*   originalr;   written_and_read_againrK   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!   rz   r$   r{   r|   r"   Fr@   )r   r$   r%   rG   rH   rI   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   rH   
datetime64r   r   r$   r%   rG   rI   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 )Nrb   r   ABr3   )r7   r8   r   rH   randomrandnlistr9   )r*   r;   rJ   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   abcdr3   r   r   r   Fr6   )rH   r   seedr   r   r   rS   locrF   r7   r8   r9   r:   )r*   rJ   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   	kreis1849rE   rB   strr7   r8   r9   r:   )	r*   r-   r&   rawencodedresultrK   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%   rG   rH   rI   r7   r8   assert_produces_warningr
   r9   r,   rF   r:   r   )r*   r   	formattedr;   r   rK   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=   rc   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleter3   r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter$   Trf   rh   r   r   )r   r$   r%   rG   rH   rI   r7   r8   rr   rs   rt   r
   r9   ru   rE   r,   rF   r:   r   )r*   r-   r   r   r;   rv   r   rK   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}   rI   int64r$   r   )r   rH   r}   rI   r   r   r$   r%   rG   float64r7   r8   r9   r,   rF   r:   r   )	r*   s1s2s3r   r   r;   r   rK   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!   rM   r$   date_tdtdr   )r,   r$   r%   r7   r:   r8   r9   rF   rG   rH   rI   r   )	r*   r+   r'   r-   r&   rV   r;   r   rK   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argsrM   )r   rG   rH   r~   r}   rI   rT   r   applyr   strptimer,   r7   r:   )r*   r+   r&   rK   rV   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   rE   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;   isfilerE   )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rl   r   r   r   <lambda>      z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rH   reshapearanger$   r%   r7   r8   r   r
   r9   r,   r   r   r4   maprF   rG   rI   r:   )r*   r   r;   r   r4   Zconvert_col_namerK   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   rH   r  rT   r   rS   r   r$   r%   r7   r8   r9   r,   r   rF   rG   rI   r:   )r*   r-   r   r   r   r;   r   rK   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 )
Nrl   r         $@)r=   r   r3   Zindex_not_writtenFr   r   )r   rH   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   rH   r   r   r$   r%   r7   r8   r9   r,   rF   rG   rI   r:   r   )r*   r   r   r   r;   r   rK   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   rH   r~   r}   r   r   r$   r%   r7   r8   r   r   r9   r,   rF   rI   r   rG   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 )NrX   rY   rZ   r[   r\   r]   r$   r   r   r"   Z_0)r   r   r$   r%   r7   r8   r   r
   r9   r,   rF   r4   rG   rH   rI   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   rG   rH   r}   r~   rT   r7   r:   head)r*   r&   dpathrJ   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_labelsrE   )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   rk   r   r   r   r   
<dictcomp>}  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rX   rY   r]   r[   r\   r3   r$   rZ   r   rb   r_   r   r   r%   r$   r4   r"   )r   ru   r   r$   r%   rC   IndexrH   rI   r7   r8   r9   r,   r:   r   )	r*   r4   Zconversionsr    r   expected_valuesrK   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   rC   r*  rH   rI   r7   r8   r9   r,   r:   r   )r*   r   rK   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   rH   Zbool_Zuint8Zuint16Zuint32r   r$   r%   rF   rG   rI   r~   r}   r   zipr4   r7   r8   r9   r,   r   r:   )r*   r/  r-   r  r   r   r   r4  r5  r6  r   rK   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   itemsrE   )	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   r2     r   r   r   sFr   r   )r   r   r   r7   r8   r9   r   Z_ensure_openr7  Z_varlistZ_fmtlistZ_typlistr  rE   )
r*   str_lensrC  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   rB    r   r   r   rC  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*   rE  rC  rF  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rk   ir   r   r   rm     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   rO  r      z<fs      s     z.zz<ds         s        )r   r7   r8   r9   r   ZVALID_RANGErA   insertr   r   rE   structunpack)r*   typesrJ   r;   r   Zvalid_ranger+  r8  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   )rk   jrS  r=  r   r   rm      s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r=   r3   r   r    r!   rM   TZconvert_missing)
r   sortedZMISSING_VALUESr=  rA   appendr   r   r7   r:   )	r*   r+   r&   r4   smvr    rowrK   rV   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'  r2  i  i  r   r`   r   r   ra      r[   r   ;   r_   rc   Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_ty   r   r   rb   r=      i  )r4   r   r   r    r!   zstata9_115.dtazstata9_117.dtaTrn   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"   )r7  rA   rb  r   rC   rq   r   r   r   r7   r:   r8   r$   r%   r9   r,   r   rG   rH   rI   )r*   r&   yrmoddhrmmssrK   r{   monthdayhourminutesecondrd  r^  r4   rw   rx   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   rG   rH   r~   r}   rI   rT   r   r   r   r   r   r7   r:   )r*   r&   rK   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   rv  T)r#   r4   z"columns contains duplicate entriesr   zEThe following columns were not found in the Stata data set: not_found	not_found)r   rG   rH   r~   r}   rI   rT   r   r   r   r   r   r7   r:   r   r  r  )r*   r&   rK   r4   Zdropped	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=   rc   r_   r^   r   rb   r   r   r   r   r   Z	unlabeledr3   c                    s   g | ]} |  d qS ri   rG   rk   r   r   r   r   rm     s     z6TestStata.test_categorical_writing.<locals>.<listcomp>Zaxisr$   ri   Tr   r   r  )r   rp   rH   rS   rF   rC   concatr$   Z	set_namesrG   rI   r   r   r   
as_orderedr   r   r   r7   r8   r9   r,   r   r:   )	r*   r-   rK   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 r|  r}  r~  r  r   r   rm     s     zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.r   c                    s   g | ]} |  d qS r|  r}  r~  r  r   r   rm     s     )r   rp   rC   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   rR  r   r   r   rm     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr3   c                    s   g | ]} |  d qS r|  r}  r~  r  r   r   rm     s     r   r  r$   r  Tr   )rA   rb  rH   rS   r   rp   rC   r  r$   r%   r7   r8   r9   r,   r   rF   r   remove_unused_categoriesr   r   rG   rI   r:   )
r*   r-   valuesr;   r   r  rK   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=   reverserD  Znoorderr   r   r   r   r   r   Zfloat_missingFZnolabelr   r  r   r   g      @Zint32_mixedr   r   r   r    r!   rM   )rH   r  arrayrb  rC   Categorical
from_codesr   rT   r   	from_dictdictr   r7   r:   r   r   assert_series_equalr   codesassert_index_equalr   )
r*   r+   r&   rK   colsZis_catr   r>  r  rV   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!   rM   Zsrhfirst)Zna_positionrD  r   r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r%   )r   Zsort_valuesrC   rD   ru   r$   r  r  r   r7   r  )r*   r+   r&   rV   r  r   r   rK   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!   rM   F)order_categoricals)r   r   r   r   r   rE   )r*   r+   r&   rV   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!   rM   Trf   rh   r  r#   )iteratorr  r#   r   r=   Fr   ro   rr   rs   rt   r   rA   readStopIterationilocrF   _convert_categoricalr7   r:   r*   r+   r  r  r#   r&   fnamerV   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   rC   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_chunkrC   r  )r*   r&   r  rV   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!   rM   Trf   rh   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  r|   Zcpim1r   r3   Tr  r   r=   Fr   )r   rA   r  r  r7   r:   )r*   r&   r  r4   r  rV   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   rE   )r*   r-   r   r   r;   rG  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`   ra   .    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`   ra   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   rC   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=   rc   r   r   r   r  r  r   grM  rS  r^  )r   rl   rv   r   r   rl   rv   r   )r   r   rH   NaNr7   r:   )r*   r&   rJ   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   rH   finfodoubleepsmaxr   r  r  r7   r8   r9   )r*   rJ   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   rH   r  rT   r  r  r$   r%   rG   r7   r8   r9   r   r   rF   rI   r:   r   )r*   r   r   r;   r  rK   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  rJ   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*   rJ   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    ri   r   Tr  )r   r   r   r   )r   rG   r7   r8   r9   r   r"  rE   )r*   r6   r  rJ   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*   rJ   r;   r  r   r   r   test_set_index  s    

zTestStata.test_set_indexcolumnmsrq  weekrp  ZqtrZhalfrj  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   rE   )r*   r  r&   rJ   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}   rI   rT   r   r   r   Zs2045ZsrtlZforced_strlr   r   r$   r   r/   )r#   convert_strlr-   Fr@   )r   rH   r   r   r   r~   r}   rG   rI   rT   r$   r%   rF   r7   r8   r9   r,   r:   r   )r*   r   rF   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`   ra   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-   biorJ   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*   rJ   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   rC  r3   )r,   r   r7   r:   )r*   r&   Z
unicode_dfr4   r  rK   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   rI   Fr/   r5   r   r  )r6   r  r-   )	r   r  rG   r7   r8   r9   r   fillnar:   )r*   outputr;   r  rK   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-   contentrJ   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  encoderE   splitfindru   )
r*   r  r;   r  r  rK   ZgsosZgsor[  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   ru   rE   messager   r   r:   )r*   r&   r  r;   rv   r   rK   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   rc   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   r_   gQ	@)r   rD  r   )r   r   r  r`   r   )	r  r  r   shaperE   r  rC   	Timestampr   )r*   r&   r	  rJ   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)r1  r/  r0  r2  r3  u   ᴅaᵀa-labellabelu   æøåu   ŋot valid latin-1r   r   r   F)r   r  r   r6   r-   r"  ri   )r-   r6   )rC   r  r   rG   rH   rI   r7   r8   r   
write_filer   r  replacer   r  r:   r   r   rE   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   rH   Zzerosr~   r7   r8   r   r  r  r   )r*   rJ   r;   r   r   r   test_writer_118_exceptionsP  s    
"
z$TestStata.test_writer_118_exceptions)`__name__
__module____qualname__r,   r   r   markparametrizer<   rL   rW   ry   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.  r9  rA  rJ  rL  r\  re  ru  rx  r{  filterwarningsr  r  r  r  r  r  r  staticmethodr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH   infr  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r'  r+  Zslowr.  r9  r:  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-rM   Fr   )r  r;   r  r   r7   r:   )r-   r&   Z	data_baserefoldrK   Zold_dtar   r   r   test_backward_compatZ  s    rJ  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!   rG  r  )	r   r  emptyrE   rB   Z_path_or_bufr   r  r  )r&   Zmonkeypatch	file_pathr   fpr  r   r   r   test_direct_readd  s    

"
rN  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!   rG  zwithout using a context managerr   zis not part of the public API)r7   r   ResourceWarningr   r  FutureWarningclose)r&   rL  rG  r   r   r   0test_statareader_warns_when_used_without_context{  s    rR  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.dtarO  rT  methodrb   r   r   r3   r$   )r-   compressionr  r  r7  rr   tarbz2zstdZ	zstandardxzlzmar  )r   r   rH   r   r   r   r$   r%   r7   r8   r9   r  r  r   r  r  zipfileZipFilefilelisttarfileextractfilegetnamesrY  r   Zimportorskipr   rF   rG   rI   r:   )rV  r-   rS  rT  	file_namefile_extZcompression_argrJ   r;   comprM  rX  rZ  r\  r  rK   r   r   r   test_compression  sR    "
(





rf  rU  r7  rd  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.dtarb   r   r   r3   r$   )rU  archive_namerV  r7  rW  r   r   r  )r   rH   r   r   r   r$   r%   r7   r8   r9   r]  r^  ru   r_  rE   filenamer   r  r  r   rF   rG   rI   r:   )rU  rd  rc  rh  rJ   r;   rV  ZzprM  r  rK   r   r   r   test_compression_dict  s"    

"rk  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   ri   r   r$   r  r   F)r  r  r   )r   r   r$   r%   rF   rG   rH   rI   r7   r8   r9   r   	enumerater   rE   r  rl  r  )r-   rJ   rK   r;   r   rS  blockr   r   r   test_chunked_categorical  s    

 ro  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	   rm  r   rl  rE   rC   r*  r  r   r   __next__r   r:   )	r&   dta_filer  r   rS  rn  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &(rt  r  )rD  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!   rp  zchunksize must be a positiver   r  )r   r  r  r   )r&   r  rr  r   r   r   test_iterator_errors  s    ru  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   )rC   r  )rk   r?  r  r   r   r'    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   r   r   r2  r  r   )r   rA   r7   r8   r9   rC   r*  r   rm  r  dtypesr   r:   r  )rJ   r;   rK   r   r^  r  rS  r   rv  r   test_iterator_value_labels  s    
rx  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littler3   z&Column converted from int64 to float64r   Fr   )r$   )r   r}  )r   r|  )r   sumrA   r7   r8   r   r   r9   r   r   rH   r   r  rw  r   rE   float)rJ   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$   ri  rV  r  r  )r   r$   r%   r7   r8   r9   r   r:   Zdecompress_filer   r  r  )rV  rJ   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 )Nrg  r  r  r  r  r  r  r  r  r  r  r  r)  r$   rT  ri  r  )	r   r   r$   r%   r7   r8   r9   r   r:   )Zcompression_onlyr  r  rV  extrj  rJ   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^   rb   r^  r?  rN  )fully_labelledpartially_labelledr  r  r   r   r   r5  )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notYr:  r;  )r_   r^   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rS  r   )r   rH   rS   rC   r  r7   r8   r   r6  r   r"  rE   r   r  r  r  )r    r;   r"  rK   r8  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   rc   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   r:  r;  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"  rE   )r    r"  rK   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)rb   r]   (   rb   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"  rE   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   rI   boolr~   r(  r   r  Fr5   Tr`  )r   r   rC   ZNAr%   r   r   Znumpy_dtyper7  r   ZBASE_MISSING_VALUESr   r7   r8   r9   r   r  r   r   )
r   r-   rJ   Z
dtype_namevaluerc  Z
expected_bZ
expected_cr;   r  r   r   r   test_nullable_support  s,    

r  )DrY  r   r  r  r   r  rW  r`  rr   r]  numpyrH   r   Zpandas.core.dtypes.commonr   r   rC   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?  rJ  rN  rR  rf  rk  ro  rt  ru  rx  r  r  r  r  r  r  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper  r   r   r   r   <module>   s   ,

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