U
    ¾mœd±W ã                   @   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   úS/home/sam/Atlas/atlas_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d€g¡d�d‚„ ƒZ5ej dd{d|g¡dƒd„„ ƒZ6ej ddd…ddd;dAd†dkd‡d|d€g¡ej dˆd‰dŠg¡ej d‹dŒd�g¡ej dŽdŒd�g¡d�d�„ ƒƒƒƒZ7e8e9e9d‘œd’d“„ƒZ:d”d•„ Z;ej dd–ddd:d@d—djd˜d{dg
¡ej dˆd‰dŠg¡ej d‹dŒd�g¡ej dŽdŒd�g¡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¤„ ZAd¥d¦„ ZBd§d¨„ ZCd©dª„ ZDd«d¬„ ZEd­d®„ ZFd¯d°„ ZGd±d²„ ZHej d³eIjJeIjJ g¡d´dµ„ ƒZKd¶d·„ ZLd¸d¹„ ZMej dºd�dŒg¡d»d¼„ ƒZNd½d¾„ ZOej d¿dÀdÁdÂdÃdÄdÅdÆg¡dÇdÈ„ ƒZPdÉdÊ„ ZQdËdÌ„ ZRdÍdÎ„ ZSej ddddd	d
g¡dÏdÐ„ ƒZTdÑdÒ„ ZUdÓdÔ„ ZVdÕdÖ„ ZWej ddddd	d
g¡d×dØ„ ƒZXej ddddd	d
g¡dÙdÚ„ ƒZYdÛdÜ„ ZZdÝdÞ„ Z[ejj\dßdà„ ƒZ]ej ddd	d
g¡dádâ„ ƒZ^dãdä„ 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Úversionér   é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   iZléÿi¡  é
   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� |||< q¾t ||¡ 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 	|| || ¡ q´t
|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sŒt‚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 ]\}}||  
|¡||< qðt ¡ � }|
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s€t‚||ksŒt‚||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sªt‚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  zÝFixed 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sŠt
‚qŠqptt dd¡d ƒ}
|
j	d	ksÖt
‚tt dd¡d ƒ}
|
j	dksøt
‚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¡ qÞt	 
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s¸t‚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sŠt‚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s t‚q W 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s”t‚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r¼t‚|j|ksÊt‚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r²t |d¡�}	t |	 ¡ ¡}
W 5 Q R X �n.| dkrêt |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�r–t d¡}| |d¡�}	t |	 ¡ ¡}
W 5 Q R X nJ| dk�rÒt 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rºt
 |d¡�B}t|jƒdks„t‚|jd j|ks˜t‚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sŒt‚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 r„t 	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s²t‚|jd t| jd ƒksÎt‚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‚)â?çÜ.4×i¤(@ç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s®t‚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sðt‚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š   ,

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