U
    ùQ”i±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   ú>/tmp/pip-unpacked-wheel-58ppya8e/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é   Zb1Zb2Zb3Zb4Zb5)r   r   Fr5   r   T©Zcheck_index_type)r   Úranger7   r8   r9   r   Ú
isinstancer$   ÚpdÚ
RangeIndexÚAssertionErrorÚcopyÚastypeÚnpÚint32r:   )r*   r-   Údfr;   Zread_dfÚexpectedr   r   r   Útest_read_index_col_noneK   s    
z"TestStata.test_read_index_col_noner+   Z
stata1_114Z
stata1_117c                 C   sn   |ddd|› d�ƒ}|   |¡}ttjtjtjtjtjfgddddd	gd
�}|d  tj¡|d< t ||¡ d S )Nr   r    r!   ú.dtaÚ
float_missÚdouble_missÚ	byte_missÚint_missÚ	long_missr3   )r,   r   rF   ÚnanrE   Úfloat32r7   r:   ©r*   r+   r&   ÚparsedrI   r   r   r   Útest_read_dta1X   s    
þzTestStata.test_read_dta1c                 C   s¤  t jtddddddƒdtdd	dƒtdd	d
ƒtdd	d	ƒtddd	ƒtdd	d	ƒtdd	d	ƒftddddddƒdtdddƒtdddƒtdd	d	ƒtddd	ƒtdd	d	ƒtdd	d	ƒftjtjtjtjtjtjtjtjfgddddddddgd �}|d  d!¡|d< tjd"d#��l}t d$¡ |  	|d%d&d'd(ƒ¡}|  	|d%d&d'd)ƒ¡}|  	|d%d&d'd*ƒ¡}d+d,„ |D ƒ}t
|ƒdk�sft‚W 5 Q R X tj||d"d-� tj||d"d-� tj||d"d-� d S ).NéÖ  é   é   é   é   é   l   *�}aiÚ  r   é   i¶  é   i§  é   é   r   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   rA   ÚNaTrE   ÚwarningsÚcatch_warningsÚsimplefilterr,   ÚlenrC   r7   r:   )r*   r&   rI   Úwr'   Ú
parsed_115Ú
parsed_117r   r   r   Útest_read_dta2j   s`    





ø





ø
"ëøè#
ÿÿÿ	zTestStata.test_read_dta2Z
stata3_113Z
stata3_114Z
stata3_115Z
stata3_117c                 C   sv   |ddd|› d�ƒ}|   |¡}|  |ddddƒ¡}| tj¡}|d  tj¡|d< |d  tj¡|d< t ||¡ d S )Nr   r    r!   rK   ú
stata3.csvÚyearÚquarter)	r,   r   rE   rF   rR   Úint16Úint8r7   r:   rS   r   r   r   Útest_read_dta3­   s    
zTestStata.test_read_dta3Z
stata4_113Z
stata4_114Z
stata4_115Z
stata4_117c           	      C   s4  |ddd|› d�ƒ}|   |¡}tjdddddgdddddgd	d
d	d	d	gdddddgdddtjdgdddtjdgdddtjdgd
d	dtjd
gdddtjdgdddtjdgg
dddddgd�}|D ]d}||  ¡ }t |d | ¡  ¡}|dkrð|}| d¡j	}|j
|dd�}|jjd dd� |||< q¾t ||¡ d S )Nr   r    r!   rK   ÚoneÚtenÚtwoÚnineÚthreeÚeightÚfourÚsevenr   ÚfiveÚsixr=   ra   r]   r\   é	   Úfully_labeledÚfully_labeled2Úincompletely_labeledÚlabeled_with_missingsÚfloat_labelledr3   rg   T©Úordered©Zinplace)r,   r   rn   rF   rQ   rD   ZasarrayZnotnarE   Ú_valuesÚset_categoriesÚ
categoriesÚrenamer7   r:   )	r*   r+   r&   rT   rI   ÚcolÚorigr“   Úcatr   r   r   Útest_read_dta4¼   s>    
öûó
zTestStata.test_read_dta4c                 C   sT   |   |ddddƒ¡}tjdddgdd	d
gdddggdddgd�}tj||dd� d S )Nr   r    r!   zstata12_117.dtar   ÚabcZ	abcdefghir   ZcbaZqwertywertyqwertyé]   Ú Zstrlrj   ÚyÚzr3   F©Úcheck_dtype)r,   r   rn   r7   r:   )r*   r&   rv   rI   r   r   r   Útest_read_dta12ë   s    ýú	zTestStata.test_read_dta12c                 C   s(  |   |ddddƒ¡}|d  d¡|d< tjddd	d
dddgdddtjtjtjtjgdddddddgdddddddgdddddddggdd d!d"d#dd$gd%�}|d#  tj¡|d#< |jD ]}t 	|| || ¡ 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ÚBytesrc   ZCatZBogotau   BogotÃ¡r   r   u   option b ÃœnicodeZDogZBostonu   UzunkÃ¶prÃ¼ZPlaneZRomeu   TromsÃ¸r   ç        zoption aZPotatoZTokyou	   ElÃ¢zÄ±ÄŸéüÿÿÿç      @r   r›   gþ¤�ÉTÕ?gUUUUUUÕ?ÚThingsÚCitiesÚUnicode_Cities_StrlÚIntsÚFloatsÚLongsr3   u'   Here are some strls with Ãœnicode charsz	long datazHere are some thingsz	byte datazint datazHere are some citiesz
float data)r§   rª   r¥   r¡   r¨   r¦   r©   u   This is a  Ãœnicode data label)r,   rE   r   rn   rF   rQ   rR   r4   r7   Zassert_almost_equalr   Úvariable_labelsZassert_dict_equalÚ
data_labelrC   )r*   r&   Z
parsed_118rI   r•   ÚrdrZvlZvl_expectedr   r   r   Útest_read_dta18ø   sB    ûùø
ù	zTestStata.test_read_dta18c              	   C   sŽ   t tjtjtjtjtjfgdddddgd�}d|j_t ¡ �}|j|d d� |  |¡}W 5 Q R X | 	¡ }|j 
tj¡|_t | d¡|¡ d S )	NrL   rM   rN   rO   rP   r3   r$   r"   )r   rF   rQ   r$   r%   r7   r8   r9   r,   rD   rE   rG   r:   Ú	set_index)r*   Úoriginalr;   Úwritten_and_read_againrI   r   r   r   Útest_read_write_dta5   s    þ
zTestStata.test_read_write_dta5c              	   C   sš   |   |ddddƒ¡}d|j_|j tj¡|_|d  tj¡|d< |d  tj¡|d< t ¡ �4}|j|d d� |  	|¡}tj
| d¡|d	d
� W 5 Q R X d S )Nr   r    r!   rx   r$   ry   rz   r"   Fr>   )r   r$   r%   rE   rF   rG   r7   r8   r9   r,   r:   r¯   )r*   r&   r°   r;   r±   r   r   r   Útest_write_dta6/  s    

ýzTestStata.test_write_dta6c              	   C   s´   t ddddt d¡ggdddddgd	�}t|d td
�|d< d|j_|j tj¡|_|d  tj¡|d< t	 
¡ �:}|j|ddi|d� |  |¡}t	j| d¡|dd� W 5 Q R X d S )NÚstringÚobjectr   çš™™™™™ñ?ú
2003-12-25ÚintegerÚfloatingr   ©r    r4   ©Údtyper$   Útc©r#   r-   Fr>   )r   rF   Ú
datetime64r   rµ   r$   r%   rE   rG   r7   r8   r9   r,   r:   r¯   )r*   r-   r°   r;   r±   r   r   r   Útest_read_write_dta10?  s     þ

ýzTestStata.test_read_write_dta10c              	   C   s<   t  ¡ �*}ttj dd¡tdƒd�}| |¡ W 5 Q R X d S )Nr`   r   ÚABr3   )r7   r8   r   rF   ÚrandomÚrandnÚlistr9   )r*   r;   rH   r   r   r   Útest_stata_doc_examplesT  s    
z!TestStata.test_stata_doc_examplesc              	   C   st   t j d¡ tt j dd¡tdƒd�}t j|jddd…f< | ¡ }t	 
¡ �}|j|d	d
� W 5 Q R X t	 ||¡ d S )Ni§  r=   r   Zabcdr3   r   r   r   F©r6   )rF   rÂ   Úseedr   rÃ   rÄ   rQ   ÚlocrD   r7   r8   r9   r:   )r*   rH   Zdf_copyr;   r   r   r   Útest_write_preserves_originalY  s    
z'TestStata.test_write_preserves_originalc           	   	   C   sŽ   t |ddddƒƒ}t |ddddƒƒ}|jd }|jd }||ksDt‚t|tƒsRt‚t ¡ �*}|j|d|d� t |ƒ}t ||¡ W 5 Q R X d S )Nr   r    r!   zstata1_encoding.dtar   Fr5   )	r   Ú	kreis1849rC   r@   Ústrr7   r8   r9   r:   )	r*   r-   r&   ÚrawÚencodedÚresultrI   r;   Úreread_encodedr   r   r   Útest_encodingc  s    


zTestStata.test_encodingc              
   C   s°   t dgddddgd�}t dgdddd	gd�}d
|j_| tj¡}t ¡ �4}t t	¡� |j
|d d� W 5 Q R X |  |¡}W 5 Q R X | ¡ }|j tj¡|_t | d
¡|¡ d S )N©r   r   r   r   Zgoodu   bÃ¤dZ8numberZ%astringwithmorethan32characters______r3   Zb_dZ_8numberÚ astringwithmorethan32characters_r$   r"   )r   r$   r%   rE   rF   rG   r7   r8   Úassert_produces_warningr
   r9   r,   rD   r:   r¯   )r*   r°   Ú	formattedr;   r±   rI   r   r   r   Útest_read_write_dta11s  s*    üþ	
þ
zTestStata.test_read_write_dta11c              
   C   sØ   t dgddddddgd�}t dgd	d
ddddgd�}d|j_| tj¡}t ¡ �T}tj	dd��2}t 
dt¡ |j|d |d� t|ƒdk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=   ra   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2ú+ú-ÚshortÚdeleter3   rÒ   Z _0astringwithmorethan32characterÚ_Z_1_Z_shortÚ_deleter$   Trd   rf   r¾   r   )r   r$   r%   rE   rF   rG   r7   r8   rp   rq   rr   r
   r9   rs   rC   r,   rD   r:   r¯   )r*   r-   r°   rÔ   r;   rt   r±   rI   r   r   r   Útest_read_write_dta12Ž  s>    úþúþ
zTestStata.test_read_write_dta12c           	   	   C   s°   t dtjd�}t dtjd�}t dtjd�}t|||dœƒ}d|j_|}|d  tj	¡|d< t
 ¡ �}| |¡ |  |¡}W 5 Q R X | ¡ }|j tj¡|_t
 | d¡|¡ d S )Ni   r»   i   l        )r{   rG   Úint64r$   rÝ   )r   rF   r{   rG   rÝ   r   r$   r%   rE   Úfloat64r7   r8   r9   r,   rD   r:   r¯   )	r*   Ús1Ús2Ús3r°   rÔ   r;   r±   rI   r   r   r   Útest_read_write_dta13¶  s    

zTestStata.test_read_write_dta13Z
stata5_113Z
stata5_114Z
stata5_115Z
stata5_117c           	   	   C   s’   |ddd|› d�ƒ}|   |¡}d|j_t ||¡ t ¡ �$}|j|ddi|d� |   |¡}W 5 Q R X | ¡ }|j t	j
¡|_t | d¡|¡ d S )	Nr   r    r!   rK   r$   Údate_tdÚtdr¾   )r,   r$   r%   r7   r:   r8   r9   rD   rE   rF   rG   r¯   )	r*   r+   r'   r-   r&   rT   r;   r±   rI   r   r   r   Útest_read_write_reread_dta14È  s    

z&TestStata.test_read_write_reread_dta14Z
stata6_113Z
stata6_114Z
stata6_115Z
stata6_117c                 C   s¾   |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< |ddd|› d�ƒ}|  |¡}t ||¡ d S )Nr   r    r!   ú
stata6.csvÚbyte_Úint_Úlong_Úfloat_Údouble_rã   ©z%Y-%m-%d©ÚargsrK   )r   rE   rF   r|   r{   rG   rR   rÞ   Úapplyr   Ústrptimer,   r7   r:   )r*   r+   r&   rI   rT   r   r   r   Útest_read_write_reread_dta15Û  s     ÿ

z&TestStata.test_read_write_reread_dta15c              
   C   s~   t dgdgd�}tdddddƒ}d	}t ¡ �H}|j||||d
� t|ƒ�"}|jdksXt‚|j|ksft‚W 5 Q R X W 5 Q R X d S )N©r   Úvariabler3   éÐ  r   é   é   é   zThis is a data file.)Ú
time_stampr¬   r-   z29 Feb 2000 14:21)	r   r   r7   r8   r9   r   rø   rC   r¬   )r*   r-   r°   rø   r¬   r;   Úreaderr   r   r   Útest_timestamp_and_labelî  s    
   ÿ
z"TestStata.test_timestamp_and_labelc              
   C   sj   t dgdgd�}d}t ¡ �D}d}tjt|d�� |j|||d� W 5 Q R X tj 	|¡r\t
‚W 5 Q R X d S )Nrò   ró   r3   z01 Jan 2000, 00:00:00z"time_stamp should be datetime type©Úmatch)rø   r-   )r   r7   r8   ÚpytestÚraisesÚ
ValueErrorr9   Úosr;   ÚisfilerC   )r*   r-   r°   rø   r;   Úmsgr   r   r   Útest_invalid_timestampü  s    
z TestStata.test_invalid_timestampc              
   C   s¬   t t t d¡d¡ƒ}d|j_t ¡ �0}t t	¡� | 
|¡ W 5 Q R X |  |¡}W 5 Q R X | d¡}t|jƒ}dd„ }t||ƒ|_| ¡ }|j tj¡|_t ||¡ d S )Ng      9@)r=   r=   r$   c                 S   s   t | d ƒS )Nr   )Úint©rj   r   r   r   Ú<lambda>  ó    z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rF   ÚreshapeÚaranger$   r%   r7   r8   rÓ   r
   r9   r,   r¯   rÄ   r4   ÚmaprD   rE   rG   r:   )r*   r°   r;   r±   r4   Zconvert_col_namerI   r   r   r   Útest_numeric_column_names  s    


z#TestStata.test_numeric_column_namesc              	   C   s¼   t t d¡tjd�}t t d¡tjd�}tj|d d d…< tj|dd d…< t||dœƒ}d|j_t	 
¡ �}|j||d� |  |¡}W 5 Q R X | d¡}| ¡ }|j tj¡|_t	 ||¡ d S )Nr¤   r»   r   r   ©rß   rà   r$   ©r-   )r   rF   r	  rR   rÞ   rQ   r   r$   r%   r7   r8   r9   r,   r¯   rD   rE   rG   r:   )r*   r-   rß   rà   r°   r;   r±   rI   r   r   r   Útest_nan_to_missing_value  s    

z#TestStata.test_nan_to_missing_valuec              
   C   s€   ddg}t t t d¡d¡|d�}d|j_t ¡ �D}|j|dd� |  	|¡}t
jt|jjd	�� |d  W 5 Q R X W 5 Q R X d S )
Nrj   rœ   ç      $@)r=   r   r3   Zindex_not_writtenFrÆ   rû   )r   rF   r  r	  r$   r%   r7   r8   r9   r,   rý   rþ   ÚKeyError)r*   r4   r°   r;   r±   r   r   r   Útest_no_index+  s    

zTestStata.test_no_indexc              	   C   sŠ   t ddgƒ}t ddgtjd�}t||dœƒ}d|j_t ¡ �}| |¡ |  	|¡}W 5 Q R X | 
¡ }|j tj¡|_t | d¡|¡ d S )Nr   zA longer stringr   ç       @r»   r  r$   )r   rF   rÞ   r   r$   r%   r7   r8   r9   r,   rD   rE   rG   r:   r¯   )r*   rß   rà   r°   r;   r±   rI   r   r   r   Útest_string_no_dates5  s    

zTestStata.test_string_no_datesc           	   
   C   s  t ddgtjd�}t ddgtjd�}t ddgtjd�}t ddgtjd�}t||||dœƒ}d|j_t 	¡ �0}t 
t¡� | |¡ W 5 Q R X |  |¡}W 5 Q R X | ¡ }t |d	 tjd�|d	< t |d
 tjd�|d
< t |d tjd�|d< |j tj¡|_t | d¡|¡ d S )Nr   éc   r»   é   iÿ  l   ÿÿÿÿ )Ús0rß   rà   rá   r$   rß   rà   rá   )r   rF   r|   r{   rÝ   r   r$   r%   r7   r8   rÓ   r   r9   r,   rD   rG   rÞ   rE   r:   r¯   )	r*   r  rß   rà   rá   r°   r;   r±   Úmodifiedr   r   r   Útest_large_value_conversionB  s     
z%TestStata.test_large_value_conversionc              
   C   sœ   t tddddddƒgƒ}d|j_t ¡ �8}t t¡� |j|dd	id
� W 5 Q R X |  	|¡}W 5 Q R X | 
¡ }dg|_|j tj¡|_t | d¡|¡ d S )NrV   rW   rX   rY   rZ   r[   r$   r   r½   r"   Z_0)r   r   r$   r%   r7   r8   rÓ   r
   r9   r,   rD   r4   rE   rF   rG   r:   r¯   )r*   r°   r;   r±   r  r   r   r   Útest_dates_invalid_columnV  s    
z#TestStata.test_dates_invalid_columnc                 C   s´   |ddddƒ}t |ƒ}ddddgddddgd	dddgg}t|ƒ}d
dddg|_|d
  tj¡|d
< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< t 	| 
d¡|¡ d S )Nr   r    r!   úS4_EDUC1.dtar   r   éþÿÿÿr   r   ZclustnumZpri_schlZpsch_numZpsch_dis)r   r   r4   rE   rF   r{   r|   rR   r7   r:   Úhead)r*   r&   ÚdpathrH   Zdf0r   r   r   Útest_105d  s    "zTestStata.test_105c              	   C   s6   |ddddƒ}t |ƒ�}| ¡ i ks(t‚W 5 Q R X d S )Nr   r    r!   r  )r   Úvalue_labelsrC   )r*   r&   r  rù   r   r   r   Útest_value_labels_old_formatr  s    
z&TestStata.test_value_labels_old_formatc           	   
   C   s  dddddddg}dd	„ |D ƒ}t d
dddddƒgt|ƒ }t|g|d�}d|j_t d
dddddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒg}t|gtjdgtjdd�|d�}t	 
¡ �}|j||d� |  |¡}W 5 Q R X t	 | d¡|¡ d S )Nr½   rä   Ztwr7   ZtqÚthÚtyc                 S   s   i | ]
}||“qS r   r   ©ri   r   r   r   r   Ú
<dictcomp>}  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rV   rW   r[   rY   rZ   r3   r$   rX   r   r`   r]   r   ©r¼   r%   ©r$   r4   r"   )r   rs   r   r$   r%   rA   ÚIndexrF   rG   r7   r8   r9   r,   r:   r¯   )	r*   r4   Zconversionsr    r°   Úexpected_valuesrI   r;   r±   r   r   r   Útest_date_export_formats{  s,    





ù
ý
z"TestStata.test_date_export_formatsc              	   C   s~   t dgd ggdgd�}t dgdggtjddgtjdd�dgd	�}t ¡ �}| |¡ |  |¡}W 5 Q R X t 	| 
d¡|¡ d S )
NÚ1Zfoor3   r›   r   r   r$   r%  r&  )r   rA   r'  rF   rG   r7   r8   r9   r,   r:   r¯   )r*   r°   rI   r;   r±   r   r   r   Útest_write_missing_strings—  s    
ý

z$TestStata.test_write_missing_stringsÚ	byteorderú>ú<c              	   C   sT  t dddgtjd�}t dddgtjd�}t dddgtjd�}t dddgtjd�}t dddgtjd�}t ddd	gtjd�}t ddd
gtjd�}	t|||||||	dœƒ}
d|
j_|
 	¡ }|
j 
tj¡|_tjtjtjtjtjtjtjf}t|j|ƒD ]\}}||  
|¡||< 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   rF   Zbool_Zuint8Zuint16Zuint32r   r$   r%   rD   rE   rG   r|   r{   rÞ   Úzipr4   r7   r8   r9   r,   r¯   r:   )r*   r,  r-   r  rß   rà   rá   r1  r2  r3  r°   rI   Zexpected_typesr   Útr;   r±   r   r   r   Útest_bool_uint¦  s8    ÿù	

zTestStata.test_bool_uintc           	   	   C   sž   t |ddddƒƒ�}| ¡ }W 5 Q R X t |ddddƒƒ�}| ¡ }W 5 Q R X d}d}| ¡ D ]<\}}||kspt‚||| k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«   ÚitemsrC   )	r*   r&   r­   Zsr_115Zsr_117ÚkeysÚlabelsÚkÚvr   r   r   Útest_variable_labelsÊ  s    zTestStata.test_variable_labelsc           
   
   C   sÜ   d}i }|D ]*}t d| d| d| gƒ|dt|ƒ < qt|ƒ}t ¡ �Š}|j|dd� t|ƒ�h}| ¡  t|j	|j
|jƒD ]F\}}}	t|dd … ƒt|dd	… ƒksªt‚t|dd … ƒ|	ks|t‚q|W 5 Q R X W 5 Q R X d S )
N)r   r/  éô   r   r   r   ÚsFrÆ   r   éÿÿÿÿ)r   rË   r   r7   r8   r9   r   Z_ensure_openr4  Z_varlistZ_fmtlistZ_typlistr  rC   )
r*   Ústr_lensr@  Ústr_lenr°   r;   Úsrró   ÚfmtÚtypr   r   r   Útest_minimal_size_col×  s    ÿ

$zTestStata.test_minimal_size_colc              
   C   s€   d}i }|D ]*}t d| d| d| gƒ|dt|ƒ < qt|ƒ}d}tjt|d��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )N)r   r?  éô  r   r   r   r@  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*   rB  r@  rC  r°   r  r;   r   r   r   Útest_excessively_long_stringè  s    ÿÿ
z&TestStata.test_excessively_long_stringc              
   C   sD  d}t dggdgd�}t ¡ �*}| |¡ t|ƒ�}|j}W 5 Q R X W 5 Q R X dd„ tdƒD ƒ}| dd	¡ |D ]B}|| d
 }tddƒD ]&}	t|d
 |	 ƒ}
|
j	||	 k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©ri   Úir   r   r   rk     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>é   r   rL  r   é   z<fs      s    Ð z.zz<ds         às        à)r   r7   r8   r9   r   ZVALID_RANGEr?   Úinsertr   r´   rC   ÚstructÚunpack)r*   ÚtypesrH   r;   r­   Zvalid_ranger(  r5  ÚoffsetrP  Úvalr   r   r   Útest_missing_value_generatorú  s2    


ÿÿz&TestStata.test_missing_value_generatorZ
stata8_113Z
stata8_115Z
stata8_117c           	         s�   dddddg}t dƒ}t|j ¡ ƒ‰g }tdƒD ]&‰ ‡ ‡fdd	„td
ƒD ƒ}| |¡ q0t||d�}t|ddd|› d�ƒdd�}t 	||¡ d S )NZint8_Zint16_Zint32_Zfloat32_Zfloat64_ée   rR  c                    s    g | ]}t ˆˆ |d    ƒ‘qS )rR  )r   )ri   Új©rP  r:  r   r   rk      s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r=   r3   r   r    r!   rK   T©Zconvert_missing)
r   ÚsortedZMISSING_VALUESr:  r?   Úappendr   r   r7   r:   )	r*   r+   r&   r4   Úsmvr    ÚrowrI   rT   r   r\  r   Útest_missing_value_conversion  s     ÿz'TestStata.test_missing_value_conversionc                 C   sÆ  ddddddg}ddddd	d
g}ddddddg}ddddddg}ddddddg}ddddddg}g }t ||||||ƒD ]|\}	}
}}}}g }tdƒD ]T}|dkr¸| t|	|
||||ƒ¡ q’|dkrÔ| t|	ddƒ¡ q’| t|	|
|ƒ¡ q’| |¡ qv| tjgd ¡ dddddddg}tdddƒ|d d< tdddƒ|d d< tdddƒ|d d	< tdddƒ|d d< tdd	dƒ|d	 d< tdd	dƒ |d	 d< |d	 d	< tdddƒ |d	 d< |d	 d< tdddƒ |d d<  |d d< |d d	< tdddƒ |d d< |d d< t||td �}t|d!d"d#d$ƒƒ}t|d!d"d#d%ƒƒ}t	j
||d&d'� t	j
||d&d'� d(d)„ |D ƒ}t	 ¡ �&}d*|j_|j||d+� |  |¡}W 5 Q R X t	j
| d*¡| |j tj¡¡d&d'� d S ),Ni¨  rô   i'  r/  iÖ  i�  r   r^   r   rˆ   r_   é   rY   r   é;   r]   ra   Zdate_tcrã   Zdate_twZdate_tmZdate_tqZdate_thZdate_tyé   r   r   r`   r=   é   iŽ  )r4   r¼   r   r    r!   zstata9_115.dtazstata9_117.dtaTrl   c                 S   s   i | ]}||d d… “qS )r  Nr   r#  r   r   r   r$  W  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r$   r"   )r4  r?   r_  r   rA   ro   r   rµ   r   r7   r:   r8   r$   r%   r9   r,   r¯   rE   rF   rG   )r*   r&   ÚyrÚmoÚddÚhrÚmmÚssrI   ry   ÚmonthÚdayÚhourÚminuteÚsecondra  r[  r4   ru   rv   Zdate_conversionr;   r±   r   r   r   Útest_big_dates)  sb    "ù  , 
ýzTestStata.test_big_datesc                 C   s  |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< t|ddddƒdd�}t ||¡ t|ddddƒddd�}|   |ddddƒ¡}|d
 jt	j
dd�|d
< t ||¡ d S )Nr   r    r!   ræ   rç   rè   ré   rê   rë   rã   rì   rí   ústata6_117.dtaTr"   F)r#   Zpreserve_dtypes)r   rE   rF   r|   r{   rG   rR   rÞ   rï   r   rð   r   r7   r:   )r*   r&   rI   Zno_conversionÚ
conversionr   r   r   Útest_dtype_conversiond  s4     ÿ
 ÿý ÿ
zTestStata.test_dtype_conversionc              	   C   s€  |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< dddg}|| }t|ddddƒd|d�}t ||¡ dddg}|| }t|ddddƒd|d�}t ||¡ d}tjt|d��& ddg}t|ddddƒd|d� W 5 Q R X d}tjt|d��* ddddg}t|ddddƒd|d� W 5 Q R X d S )Nr   r    r!   ræ   rç   rè   ré   rê   rë   rã   rì   rí   rs  T)r#   r4   z"columns contains duplicate entriesrû   zEThe following columns were not found in the Stata data set: not_foundÚ	not_found)r   rE   rF   r|   r{   rG   rR   rÞ   rï   r   rð   r   r7   r:   rý   rþ   rÿ   )r*   r&   rI   r4   ZdroppedZ	reorderedr  r   r   r   Útest_drop_column‚  sT     ÿ

ý
ýýýzTestStata.test_drop_columnz;ignore:\nStata value:pandas.io.stata.ValueLabelTypeMismatchc           	         s²  t jddddddgddddddgdddddd	gd
ddd
d
dgdddtjddgdddtjddgdd
dtjddgdddtjddgdddtjddgdddtjddgg
ddddddgd�‰ ˆ  ¡ }tj‡ fdd„ˆ D ƒdd�‰ |j d¡ 	tj
¡|_|d  t¡|d< |d  t¡|d< |D ]V}||  ¡ }| 	d ¡j}| ¡ }|dk�rP|j|d!d"�}|jjd d!d#� |||< �qt ¡ �}ˆ j||d$� |  |¡}W 5 Q R X | d¡}t ||¡ d S )%Nr~   r   r   r€   r�   r   r‚   rƒ   r   r„   r…   r   r†   r‡   r=   ra   r]   r\   rˆ   r`   r‰   rŠ   r‹   rŒ   r�   Z	unlabeledr3   c                    s   g | ]}ˆ |   d ¡‘qS ©rg   ©rE   ©ri   r•   ©r°   r   r   rk   Ò  s     z6TestStata.test_categorical_writing.<locals>.<listcomp>©Zaxisr$   rg   TrŽ   r�   r  )r   rn   rF   rQ   rD   rA   Úconcatr$   Z	set_namesrE   rG   rï   rË   r‘   Ú
as_orderedr’   r“   r”   r7   r8   r9   r,   r¯   r:   )	r*   r-   rI   r•   r–   r—   r;   r±   Úresr   r{  r   Útest_categorical_writing³  sR    öúó ÿ


z"TestStata.test_categorical_writingc              
      sì   t jdd gdd gdd gdd ggdgd�‰ tj‡ fdd	„ˆ D ƒd
d�‰ t ¡ �.}d}tjt|d�� ˆ  	|¡ W 5 Q R X W 5 Q R X t jdgdgdgdgd
ggdgd�‰ tj‡ fdd	„ˆ D ƒd
d�‰ t 
t¡� ˆ  	|¡ W 5 Q R X d S )Nr   i'  r   r   ÚdZToo_longr3   c                    s   g | ]}ˆ |   d ¡‘qS rx  ry  rz  r{  r   r   rk   ô  s     zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r|  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.rû   c                    s   g | ]}ˆ |   d ¡‘qS rx  ry  rz  r{  r   r   rk     s     )r   rn   rA   r}  r7   r8   rý   rþ   rÿ   r9   rÓ   r   )r*   r;   r  r   r{  r   Ú$test_categorical_warnings_and_errorsë  s.    "þ ÿ
ÿ ÿ ÿz.TestStata.test_categorical_warnings_and_errorsc           
   	      sæ   dd„ t dƒD ƒ}| tjg¡ tj|dgd�‰ tj‡ fdd„ˆ D ƒdd�‰ d	ˆ j_	t
 ¡ �}ˆ j||d
� |  |¡}W 5 Q R X | d	¡}ˆ  ¡ }|D ].}|| j}| ¡ j}	|j|	dd�}|||< q–|j tj¡|_t
 ||¡ d S )Nc                 S   s   g | ]}d t |ƒ g‘qS )r   )rË   rO  r   r   r   rk     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>éx   Zmany_labelsr3   c                    s   g | ]}ˆ |   d ¡‘qS rx  ry  rz  r{  r   r   rk     s     r   r|  r$   r  TrŽ   )r?   r_  rF   rQ   r   rn   rA   r}  r$   r%   r7   r8   r9   r,   r¯   rD   r‘   Úremove_unused_categoriesr“   r’   rE   rG   r:   )
r*   r-   Úvaluesr;   r±   r  rI   r•   r—   Znew_catsr   r{  r   Ú*test_categorical_with_stata_missing_values	  s(     ÿ




z4TestStata.test_categorical_with_stata_missing_valuesZstata10_115Zstata10_117c           
      C   s¶  dddddddgt  d¡fdd	dddddgt  d¡d d d
… fdddddddgt  dddddg¡fdddddddgt  dd¡fdddddgt  dddd
d
g¡fdddddddgt  d¡fdddddddgt  d¡fg}g }|D ]H\}}}}|�r| |tjj||dd�f¡ qÞ| |t|t jd�f¡ 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=   ÚreverserA  Znoorderr   r   r   r   r   r¹   Zfloat_missingFZnolabelr   r  r   r¤   g      @Zint32_mixedrŽ   r»   r   r    r!   rK   )rF   r	  Úarrayr_  rA   ÚCategoricalÚ
from_codesr   rR   r   Ú	from_dictÚdictr   r7   r:   r   r¼   Úassert_series_equalr—   ÚcodesÚassert_index_equalr“   )
r*   r+   r&   rI   ÚcolsZis_catr•   r;  r�  rT   r   r   r   Útest_categorical_order!  s4    $$ ù	ÿ
 
ÿz TestStata.test_categorical_orderZstata11_115Zstata11_117c              
   C   sŽ   t |ddd|› d�ƒƒ}|jddd�}t t|ƒ¡|_ddd	d
d
d
ddddg
}dddddg}tjj||dd�}t|dd�}t	 
||d ¡ d S )Nr   r    r!   rK   ZsrhÚfirst)Zna_positionrA  r   r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r�  r“   r�   ©r%   )r   Zsort_valuesrA   rB   rs   r$   rŠ  r‹  r   r7   rŽ  )r*   r+   r&   rT   r�  r“   r—   rI   r   r   r   Útest_categorical_sortingE  s      ÿz"TestStata.test_categorical_sortingc                 C   sf   |ddd|› d�ƒ}t |ƒ}t |dd�}|D ]4}t|| jƒs@q,|| jjsPt‚|| jjr,t‚q,d S )Nr   r    r!   rK   F)Úorder_categoricals)r   r   r¼   r—   r�   rC   )r*   r+   r&   rT   Zparsed_unorderedr•   r   r   r   Útest_categorical_orderingV  s    z#TestStata.test_categorical_orderingZ
stata2_117Z
stata7_117Z
stata9_117Ú	chunksizer   r   Úconvert_categoricalsFTr#   c                 C   s  |ddd|› d�ƒ}t jdd�� t  d¡ t|||d�}W 5 Q R X t|d||d	��²}d
}	tdƒD ]ž}
t jdd��F t  d¡ z| |¡}W n& tk
r²   Y W 5 Q R £  �qY nX W 5 Q R X |j|	|	| …d d …f  ¡ }|  	|¡}t
j||ddd� |	|7 }	qbW 5 Q R X d S )Nr   r    r!   rK   Trd   rf   ©r™  r#   )Úiteratorr™  r#   r   r=   F©rŸ   rm   ©rp   rq   rr   r   r?   ÚreadÚStopIterationÚilocrD   Ú_convert_categoricalr7   r:   ©r*   r+   r˜  r™  r#   r&   ÚfnamerT   ÚitrÚposr[  ÚchunkÚ
from_framer   r   r   Útest_read_chunks_117b  s@    
ýü
"
   ÿzTestStata.test_read_chunks_117)r§  Úreturnc                 C   sX   | D ]N}| | }t |jƒr|j ¡ }|jjtkrJtj |jj¡}| 	|¡}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )
r   r¼   r‘   r„  r“   rµ   rA   r'  Z_with_inferr’   )r§  r•   Zserr—   r“   r   r   r   r¡  –  s    



zTestStata._convert_categoricalc              	   C   sH  |ddddƒ}t |ƒ}t |dd��.}| d¡}t |jdd…d d …f |¡ W 5 Q R X t |dd	��0}t|ƒ}t |jdd…d d …f |d ¡ W 5 Q R X t |dd��.}| d¡}t |jdd…d d …f |¡ W 5 Q R X t |dd	��,}| ¡ }t |jdd…d d …f |¡ W 5 Q R X t |d
d	��}t |¡}W 5 Q R X t ||¡ d S )Nr   r    r!   ústata3_117.dtaT©r›  r=   r   ©r˜  r   )	r   rž  r7   r:   r   rÄ   Z	get_chunkrA   r}  )r*   r&   r£  rT   r¤  r¦  Zfrom_chunksr   r   r   Útest_iterator¥  s"    
(,
((zTestStata.test_iteratorZ
stata2_115Z
stata7_115Z
stata9_115c                 C   s  |ddd|› d�ƒ}t jdd�� t  d¡ t|||d�}W 5 Q R X t|d||d	��²}d
}	tdƒD ]ž}
t jdd��F t  d¡ z| |¡}W n& tk
r²   Y W 5 Q R £  �qY nX W 5 Q R X |j|	|	| …d d …f  ¡ }|  	|¡}t
j||ddd� |	|7 }	qbW 5 Q R X d S )Nr   r    r!   rK   Trd   rf   rš  )r›  r#   r™  r   r=   Frœ  r�  r¢  r   r   r   Útest_read_chunks_115¿  s@    
ýü
"
   ÿzTestStata.test_read_chunks_115c              	   C   s¢   |ddddƒ}dddg}d}t ||d	�}t |d
d��d}d}tdƒD ]P}|j||d	�}	|	d kr` q”|j||| …d d …f }
tj|
|	dd� ||7 }qBW 5 Q R X d S )Nr   r    r!   rª  rz   ZcpiÚm1r   r3   Tr«  r   r=   Frž   )r   r?   rž  r   r7   r:   )r*   r&   r£  r4   r˜  rT   r¤  r¥  r[  r¦  r§  r   r   r   Útest_read_chunks_columnsõ  s    
z"TestStata.test_read_chunks_columnsc              
   C   sÆ   d|j _ddddœ}t ¡ �L}|j|||d� t|ƒ�}| ¡ }W 5 Q R X dddddœ}||ksdt‚W 5 Q R X d	|d< t ¡ �>}|j|||d� t|ƒ�}| ¡ }W 5 Q R X ||k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«   rC   )r*   r-   r   r«   r;   rD  Zread_labelsZexpected_labelsr   r   r   Útest_write_variable_labels  s$    

ü

z$TestStata.test_write_variable_labelsc              
   C   sZ   d|j _ddddœ}t ¡ �4}d}tjt|d�� |j|||d� W 5 Q R X W 5 Q R X d S )	Nr$   úZvery longvery longvery longvery longvery longvery longvery longvery longvery longvery longr²  r³  r   ú.Variable labels must be 80 characters or fewerrû   r´  ©r$   r%   r7   r8   rý   rþ   rÿ   r9   )r*   r-   r   r«   r;   r  r   r   r   Útest_invalid_variable_labels  s    
  ÿz&TestStata.test_invalid_variable_labelsc              
   C   s^   d|j _ddddœ}d|d< t ¡ �0}tjtdd	�� |j|||d
� W 5 Q R X W 5 Q R X d S )Nr$   r¶  r²  r³  r   u   invalid character Å’r   z,Variable labels must contain only charactersrû   r´  r¸  )r*   r-   r   r«   r;   r   r   r   Ú$test_invalid_variable_label_encoding(  s    
 ÿ  ÿz.TestStata.test_invalid_variable_label_encodingc              
   C   s²   ddddddg}ddd  |¡d	œ}d
}tjt|d��( t ¡ �}|j||d� W 5 Q R X W 5 Q R X dddd	œ}d}tjt|d��( t ¡ �}|j||d� W 5 Q R X W 5 Q R X d S )Nu   Î¡u   Î‘u   Î�u   Î”u   Î£r±  r²  r›   r   zKVariable labels must contain only characters that can be encoded in Latin-1rû   )r«   zqA very, very, very long variable label that is too long for Stata which means that it has more than 80 charactersr·  )Újoinrý   rþ   rÿ   r7   r8   r9   )r*   r   r…  Zvariable_labels_utf8r  r;   Zvariable_labels_longr   r   r   Ú test_write_variable_label_errors5  s$    ýÿ
"ý
z*TestStata.test_write_variable_label_errorsc                 C   s  t  ddddddd¡t  ddddddd¡t  dd	d
d	d
d	d¡g}tdddgdddg|dœƒ}t ¡ �”}|j|dd� t|dd�}t ||¡ |j|dddid� t|dd�}t ||¡ |j 	¡  
d¡}|j|d|did� t|dd�}t ||¡ W 5 Q R X d S )NéÏ  r^   r_   éà.  éÜ  r÷   éR  éð  r]   r   é   r   r  r   ÚappleÚbananaÚcherry©ÚnumsÚstrsÚdatesFrÆ   Tr"   rÉ  r½   )r6   r#   )Údtr   r   r7   r8   r9   r   r:   r4   Útolistr$   )r*   rÉ  r°   r;   ÚrereadÚdirectZ	dates_idxr   r   r   Útest_default_date_conversionS  s*    ýýÿ
z&TestStata.test_default_date_conversionc              
   C   sP   t dddgiƒ}d}tjt|d��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr   y      ð?       @y       @      @z"Data type complex128 not supportedrû   )r   rý   rþ   ÚNotImplementedErrorr7   r8   r9   )r*   r°   r  r;   r   r   r   Útest_unsupported_typep  s
    
zTestStata.test_unsupported_typec                 C   s  t  ddddddd¡t  ddddddd¡t  dd	d
d	d
d	d¡g}tdddgdddg|dœƒ}d}tjt|d��, t ¡ �}|j|ddid� W 5 Q R X W 5 Q R X t	j
dddd�}tdddgdddg|dœƒ}tjtdd��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr½  r^   r_   r¾  r¿  r÷   rÀ  rÁ  r]   r   rÂ  r   r  r   rÃ  rÄ  rÅ  rÆ  zFormat %tC not implementedrû   rÉ  ZtCr"   z1-1-1990r   zAsia/Hong_Kong)ZperiodsÚtzzData type datetime64)rÊ  r   r   rý   rþ   rÏ  r7   r8   r9   rA   Z
date_range)r*   rÉ  r°   r  r;   r   r   r   Útest_unsupported_datetypex  s0    ýýÿ
&ýÿ
z#TestStata.test_unsupported_datetypec              	   C   s8   d}t jt|d�� t|ddddƒdd� W 5 Q R X d S )	Na*  
Value labels for column ethnicsn are not unique. These cannot be converted to
pandas categoricals.

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

The repeated labels are:
-+
wolof
rû   r   r    r!   zstata15.dtaT©r™  )rý   rþ   rÿ   r   )r*   r&   r  r   r   r   Útest_repeated_column_labels—  s    
þz%TestStata.test_repeated_column_labelsc                 C   sš   t |ddddƒƒ}tdddddddtjddg
ddddtjd	dd
ddg
dtjd
dd	d	ddddg
ddddddddddg
dœƒ}|ddddg }t ||¡ d S )Nr   r    r!   zstata7_111.dtar   r   r   r   r   r=   ra   r   r   r   r�  r‡  r›   ÚgrJ  rP  r[  )rœ   rj   rt   r�   rœ   rj   rt   r�   )r   r   rF   ÚNaNr7   r:   )r*   r&   rH   r°   r   r   r   Útest_stata_111©  s    üÿzTestStata.test_stata_111c              
   C   sx   t dt tj¡jdgdt tj¡jt tj¡jgdœƒ}d}tjt|d��$ t	 
¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr¢   g      Ð©ZColumnOkÚColumnTooBigzZColumn ColumnTooBig has a maximum value \(.+\) outside the range supported by Stata \(.+\)rû   )r   rF   ÚfinfoÚdoubleÚepsÚmaxrý   rþ   rÿ   r7   r8   r9   )r*   rH   r  r;   r   r   r   Útest_out_of_range_double¹  s    þÿÿ
z"TestStata.test_out_of_range_doublec              	   C   sÔ   t dt tj¡jt tj¡jd gdt tj¡jt tj¡jgdœƒ}d|j_|D ]}||  tj¡||< qRt	 
¡ �}| |¡ t|ƒ}W 5 Q R X |d  tj¡|d< | ¡ }|j tj¡|_t	 | d¡|¡ d S )Nr¢   r  rØ  r$   rÙ  )r   rF   rÚ  rR   rÜ  rÝ  r$   r%   rE   r7   r8   r9   r   rÞ   rD   rG   r:   r¯   )r*   r°   r•   r;   rÌ  rI   r   r   r   Útest_out_of_range_floatÉ  s*    ýýúÿ

z!TestStata.test_out_of_range_floatÚinfvalc              
   C   sV   t ddgd|gdœƒ}d}tjt|d��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr¢   r   r  )Z
WithoutInfZWithInfz[Column WithInf contains infinity or -infinitywhich is outside the range supported by Stata.rû   )r   rý   rþ   rÿ   r7   r8   r9   )r*   rà  rH   r  r;   r   r   r   Útest_infå  s    ÿ
zTestStata.test_infc                 C   s6   t  ¡ }d|j_dd„ }t  |j|¡}t  ||¡ d S )Nr$   c                 S   s   t | ƒ d¡S ©Nr$   ©r   r¯   r  r   r   r   r  ô  r  z-TestStata.test_path_pathlib.<locals>.<lambda>)r7   ÚmakeDataFramer$   r%   Zround_trip_pathlibr9   r:   ©r*   rH   rù   rÎ   r   r   r   Útest_path_pathlibñ  s
    zTestStata.test_path_pathlibc                 C   s6   t  ¡ }d|j_dd„ }t  |j|¡}t  ||¡ d S )Nr$   c                 S   s   t | ƒ d¡S râ  rã  r  r   r   r   r  û  r  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)r7   rä  r$   r%   Zround_trip_localpathr9   r:   rå  r   r   r   Útest_pickle_path_localpathø  s
    z$TestStata.test_pickle_path_localpathr6   c              
   C   sŽ   ddddddgi}t |d�}|d  d¡|d< t ¡ �4}|j||d� t|dd	��}| ¡ }W 5 Q R X W 5 Q R X |dddddd
œiksŠt‚d S )NÚAÚBÚEÚC)r    rg   rÆ   Tr«  )r   r   r   r   )r   rE   r7   r8   r9   r   r  rC   )r*   r6   r�  rH   r;   Zdta_iterr  r   r   r   Útest_value_labels_iteratorÿ  s    

z$TestStata.test_value_labels_iteratorc              	   C   sJ   t  ¡ }d|j_t  ¡ �}| |¡ t|dd�}W 5 Q R X t  ||¡ d S )Nr$   ©Ú	index_col)r7   rä  r$   r%   r8   r9   r   r:   )r*   rH   r;   rÌ  r   r   r   Útest_set_index  s    

zTestStata.test_set_indexÚcolumnÚmsrn  Úweekrm  ZqtrZhalfrg  c                 C   sB   t |ddddƒƒ}|jd|f }|jd|d f }||ks>t‚d S )Nr   r    r!   zstata13_dates.dtar   Ú_fmt)r   rÈ   rC   )r*   rð  r&   rH   ZunformattedrÔ   r   r   r   Ú(test_date_parsing_ignores_format_details  s    z2TestStata.test_date_parsing_ignores_format_detailsc                 C   sN  t dddddddt d¡dddd dgd	d
dddddt d¡ddddggddddddddddddgd�}t|d td�|d< t|d tjd�|d< t|d tjd�|d< |d  tj¡|d< t|d tj	d�|d< d|j
_|j
 tj¡|_
| ¡ }t ¡ �J}|j|ddidgdd� |  |¡}tj| d¡|dd � t ||¡ W 5 Q R X d S )!Nr´   rµ   r   r¶   r·   r   Aý  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ  zstring-1zobject-1z
2003-12-26r   Aý  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr›   r|   r{   rG   rR   rÞ   r   rß   Zs2045ZsrtlZforced_strlrº   r»   r$   r½   r/   )r#   Úconvert_strlr-   Fr>   )r   rF   r¿   r   rµ   r|   r{   rE   rG   rR   r$   r%   rD   r7   r8   r9   r,   r:   r¯   )r*   r°   rD   r;   r±   r   r   r   Útest_writer_117)  s€    ôôñôá.
ü
ýzTestStata.test_writer_117c              
   C   s˜   t dddgdddggddd	gd
�}d|j_t t¡�Z t ¡ �F}|j|dd	gdd� |  |¡}| 	d¡}|j
|_
tj||dd� W 5 Q R X W 5 Q R X d S )NA¸  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarè  rÃ  Aè  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbré  rÄ  Z2long1long1long1long1long1long1long1long1long1long1Úlongr   r3   r$   r/   )rõ  r-   Fr>   )r   r$   r%   r7   rÓ   r
   r8   r9   r,   r¯   r4   r:   )r*   r°   r;   rÌ  r   r   r   Útest_convert_strl_name_swapp  s    þ


z%TestStata.test_convert_strl_name_swapc                 C   s¤   t  ddddddd¡t  ddddddd¡t  dd	d
d	d
d	d¡g}tdddgdddg|dœƒ}t ¡ �6}d}tjt|d�� |j|ddid� W 5 Q R X W 5 Q R X d S )Nr½  r^   r_   r¾  r¿  r÷   rÀ  rÁ  r]   r   rÂ  r   r  r   rÃ  rÄ  rÅ  rÆ  z0convert_dates key must be a column or an integerrû   Z
wrong_namer½   r"   )	rÊ  r   r   r7   r8   rý   rþ   rÿ   r9   )r*   rÉ  r°   r;   r  r   r   r   Útest_invalid_date_conversion  s    ýýÿ
z&TestStata.test_invalid_date_conversionc              
   C   s„   t  ¡ }t ¡ }d|j_t ¡ �N}|j||d� | d¡ t	|dƒ�}| 
| ¡ ¡ W 5 Q R X t|dd�}W 5 Q R X t ||¡ d S )Nr$   r  r   Úwbrí  )r   ÚBytesIOr7   rä  r$   r%   r8   r9   ÚseekÚopenÚwriterž  r   r:   )r*   r-   ÚbiorH   r;   ÚdtarÌ  r   r   r   Útest_nonfile_writing“  s    

zTestStata.test_nonfile_writingc              
   C   s~   t  ¡ }d|j_t  ¡ �P}t |d¡�}|j|dd� W 5 Q R X t |d¡�}t|dd�}W 5 Q R X W 5 Q R X t  	||¡ d S )Nr$   rú  r.   r  Úrbrí  )
r7   rä  r$   r%   r8   ÚgzipÚGzipFiler9   r   r:   )r*   rH   r;   ÚgzrÌ  r   r   r   Útest_gzip_writing¡  s    
 zTestStata.test_gzip_writingc                 C   s–   |   |ddddƒ¡}ddddd	g}d
ddd
dgdddddgdddddgdddddgdddddgdddddgdddddgg}t||d�}t ||¡ d S )Nr   r    r!   zstata16_118.dtaÚutf8Úlatin1ÚasciiZ	utf8_strlZ
ascii_strlu   Ï�Î±Î·Î´Î±Ï‚u   PÃ„NDÃ„SÚpu   Æ¤Ä€Å„Ä�Ä…Åœõ   Ã–r   u   á´˜á´€á´Žá´…á´€Sõ   ÃœÚnz      r�  ú r›   r@  r3   )r,   r   r7   r:   )r*   r&   Z
unicode_dfr4   r…  rI   r   r   r   Útest_unicode_dta_118¬  s    ù	zTestStata.test_unicode_dta_118c              	   C   sª   dddœd ddœg}t |ƒ}|j d¡|_t ¡ �n}|j|ddd� t|ƒ}| d	¡}t ||¡ d |d
< |j|dd
gdd� t|ƒ}| d	¡}t ||¡ W 5 Q R X d S )NA¸  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )ÚmixedÚnumberr   rG   Fr/   r5   r›   r  )r6   rõ  r-   )	r   r  rE   r7   r8   r9   r   Úfillnar:   )r*   Úoutputr;   rÌ  rI   r   r   r   Útest_mixed_string_strl½  s$    

   ÿ
z TestStata.test_mixed_string_strlc              
   C   sd   dddœd ddœg}t |ƒ}d |d< t ¡ �.}tjtdd�� |j||d� W 5 Q R X W 5 Q R X d S )NÚnoner   )r  r  r   z Column `none` cannot be exportedrû   r  )r   r7   r8   rý   rþ   rÿ   r9   )r*   r-   r  r;   r   r   r   Útest_all_none_exceptionÒ  s    
z!TestStata.test_all_none_exceptionc              
   C   sb   d}t |gdgd�}t ¡ �<}d}d}tjt|› d|› �d�� | |¡ W 5 Q R X W 5 Q R X d S )Nu9   Here is one __ï¿½__ Another one __Â·__ Another one __Â½__Úinvalidr3   z\'latin-1' codec can't encode character '\\ufffd' in position 14: ordinal not in range\(256\)zP'ascii' codec can't decode byte 0xef in position 14: ordinal not in range\(128\)ú|rû   )r   r7   r8   rý   rþ   ÚUnicodeEncodeErrorr9   )r*   r-   ÚcontentrH   r;   Zmsg1Zmsg2r   r   r   Útest_invalid_file_not_writtenÛ  s    
ÿÿz'TestStata.test_invalid_file_not_writtenc           
   
   C   sò   t dgd dgd gddgd�}t ¡ �À}|j|ddgd� t|d	ƒ�˜}| ¡ }d}| d
¡|ksft‚| d¡|ksxt‚| d¡d dd… }| d¡dd … D ]8}| d¡d }|| 	d¡d  }	t
|ƒ|	d k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ž  ÚencoderC   ÚsplitÚfindrs   )
r*   r  r;   rÌ  r  rI   ZgsosZgsorX  Úsizer   r   r   Útest_strl_latin1ë  s      ÿ
zTestStata.test_strl_latin1c              	   C   s~   d}|ddddƒ}t  t¡�6}t|ƒ}t|ƒdks6t‚|d jjd |ksNt‚W 5 Q R X tdggd d	gd
�}t  	||¡ d S )Na  
One or more strings in the dta file could not be decoded using utf-8, and
so the fallback encoding of latin-1 is being used.  This can happen when a file
has been incorrectly encoded by Stata or some other software. You should verify
the string values returned are correct.r   r    r!   zstata1_encoding_118.dtaé—   r   u   DÃ¼sseldorfrÊ   r3   )
r7   rÓ   ÚUnicodeWarningr   rs   rC   Úmessagerî   r   r:   )r*   r&   r  r;   rt   rÍ   rI   r   r   r   Útest_encoding_latin1_118þ  s    "z"TestStata.test_encoding_latin1_118c              
   C   s˜   t  |ddddƒd¡�}t|ƒ}W 5 Q R X |jdks8t‚|jd dksJt‚|jd	 d
ks\t‚|jd dksnt‚|jd t tddddddƒ¡ks”t‚d S )Nr   r    r!   zstata1_119.dta.gzr  )r   iç€  )r   ra   A¸  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   r]   g…ëQ¸	@)r   rA  r   )r   r   r¿  r^   r÷   )	r  rý  r   ÚshaperC   r   rA   Z	Timestampr   )r*   r&   r  rH   r   r   r   Útest_stata_119  s     ÿzTestStata.test_stata_119c                 C   sb  t jdddgdd�}tdddd	gd
dddgdddd ggddddgd�}||d< ddddddœ}d}dddddœi}|d  tj¡|d< t ¡ �Ê}t|||dg|d||d �}| 	¡  t
|ƒ}	|d  d¡|d< |d  |d ¡ d!¡j ¡ |d< t ||	¡ t|ƒ�(}
|
j|k�st‚|
 ¡ |k�s&t‚W 5 Q R X |j||dd"� t
|ƒ}t ||¡ W 5 Q R X d S )#Nr   õ   Î²õ   Ä‰TrŽ   r   r   u   á´¬u   á´€ relatively long Å�tringr  r   u   á´®r›   r   r   u   á´°õ   Ã…Ústrlsr3   õ	   á´�á´¬áµ€rÃ  u	   áµˆáµ‰áµŠu   á´Žáƒ¢áƒ„á‚²á‚³á‚´á‚¶á‚ºzLong Strings)r,  r*  r+  r-  r.  u   á´…aáµ€a-labelÚlabelu   Ã¦Ã¸Ã¥u   Å‹ot valid latin-1©r   r   r   F)r¬   rõ  r«   r6   r-   r  rg   )r-   r6   )rA   rŠ  r   rE   rF   rG   r7   r8   r   Ú
write_filer   r  Úreplacer—   r~  r:   r   r¬   rC   r«   r9   )r*   r-   r—   r    r«   r¬   r  r;   ÚwriterrÏ   rù   Zreread_to_statar   r   r   Útest_utf8_writer  sR    


ý
úû
ø
ÿ
zTestStata.test_utf8_writerc              
   C   s�   t tjdtjd�ƒ}t ¡ �.}tjtdd�� t	||dd� W 5 Q R X W 5 Q R X t ¡ �.}tjtdd�� t	||dd� W 5 Q R X W 5 Q R X d S )	N)r   iè€  r»   z"version must be either 118 or 119.rû   r/   r  zYou must use version 119r0   )
r   rF   Úzerosr|   r7   r8   rý   rþ   rÿ   r   )r*   rH   r;   r   r   r   Útest_writer_118_exceptionsP  s    
"
z$TestStata.test_writer_118_exceptions)`Ú__name__Ú
__module__Ú__qualname__r,   r   rý   ÚmarkÚparametrizer<   rJ   rU   rw   r}   r˜   r    r®   r²   r³   rÀ   rÅ   rÉ   rÐ   rÕ   rÜ   râ   rå   rñ   rú   r  r  r  r  r  r  r  r  r   r)  r+  r6  r>  rG  rI  rY  rb  rr  ru  rw  Úfilterwarningsr€  r‚  r†  r’  r•  r—  r¨  Ústaticmethodr   r¡  r­  r®  r°  rµ  r¹  rº  r¼  rÎ  rÐ  rÒ  rÔ  r×  rÞ  rß  rF   Úinfrá  ræ  rç  rì  rï  rô  rö  rø  rù  r  r  r  r  r  r  r#  r'  Zslowr)  r4  r6  r   r   r   r   r(   :   sV  


C 
ÿ
 
ÿ
,(



' 
ÿ 
ÿ


	

	"
;1ÿ4

#

õþ!öþ$





	 ÿ
G




1r(   r-   éi   él   éo   éq   r.   c                 C   sT   |dddƒ}t j |d¡}t j |d| › d�¡}t|ƒ}t|ƒ}tj||dd� d S )	Nr   r    r!   ústata-compat-118.dtazstata-compat-rK   Frž   )r   r;   r»  r   r7   r:   )r-   r&   Z	data_baseÚrefÚoldrI   Zold_dtar   r   r   Útest_backward_compatZ  s    rF  c                 C   sì   | ddddƒ}t |ƒ�&}| ¡ jr&t‚t|jtjƒr8t‚W 5 Q R X t|dƒ�6}t |ƒ�"}| ¡ jrft‚|j|kstt‚W 5 Q R X W 5 Q R X t|dƒ�P}t | ¡ ¡�6}t |ƒ�"}| ¡ j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!   rC  r  )	r   rž  ÚemptyrC   r@   Z_path_or_bufr   rû  rý  )r&   ZmonkeypatchÚ	file_pathrù   Úfprÿ  r   r   r   Útest_direct_readd  s    

"
rJ  c              	   C   s^   | ddddƒ}t jtdd�� t|ƒ}| ¡  W 5 Q R X t jtdd�� | ¡  W 5 Q R X d S )Nr   r    r!   rC  zwithout using a context managerrû   zis not part of the public API)r7   rÓ   ÚResourceWarningr   rž  ÚFutureWarningÚclose)r&   rH  rD  r   r   r   Ú0test_statareader_warns_when_used_without_context{  s    þþrN  r/   r0   r1   Úuse_dictTFÚinferc              
   C   s  d}| r(|r| }nt |  }|d|› �7 }| }|r4d}|r@d| i}ttj dd¡tdƒd�}d	|j_t 	|¡��‚}|j
|||d
� | dk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.dtarL  rP  Úmethodr`   r   rÁ   r3   r$   )r-   Úcompressionr  r  r4  Úrr   ÚtarÚbz2ÚzstdZ	zstandardÚxzÚlzmarí  )r   r   rF   rÂ   rÃ   rÄ   r$   r%   r7   r8   r9   r  rý  r   rû  rž  ÚzipfileÚZipFileÚfilelistÚtarfileÚextractfileÚgetnamesrU  rý   Zimportorskipr   rD   rE   rG   r:   )rR  r-   rO  rP  Ú	file_nameÚfile_extZcompression_argrH   r;   ÚcomprI  rT  rV  rX  rÌ  rI   r   r   r   Útest_compressionŠ  sR    "
(





rb  rQ  r4  r`  r   c              
   C   sü   d|› �}d}t tj dd¡tdƒd�}d|j_t |¡�”}| |dœ}|j	||d	� | d
ksd|d
k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.dtar`   r   rÁ   r3   r$   )rQ  Úarchive_name©rR  r4  rS  r   r   rí  )r   rF   rÂ   rÃ   rÄ   r$   r%   r7   r8   r9   rY  rZ  rs   r[  rC   Úfilenamer   rû  rž  r   rD   rE   rG   r:   )rQ  r`  r_  rd  rH   r;   rR  ZzprI  rÌ  rI   r   r   r   Útest_compression_dict¼  s"    

"rg  c                 C   sÌ   t dtdddddgdd�iƒ}d|j_| ¡ }|j tj¡|_t 	¡ �|}|j
|| d� t|d	d
d��T}t|ƒD ]D\}}| d¡}d|k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   rg   r»   r$   r  r   F)r˜  r–  r   )r   r   r$   r%   rD   rE   rF   rG   r7   r8   r9   r   Ú	enumerater¯   rC   rŽ  rh  r   )r-   rH   rI   r;   rù   rP  Úblockr   r   r   Útest_chunked_categoricalÔ  s    

 ÿrk  c           	   
   C   s
  | ddddƒ}dddddg}t |dd	��Ž}t t¡�x t|ƒD ]h\}}t|jƒ|d| d|d
  … kslt‚|dk 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	   ri  rÄ   rh  rC   rA   r'  r�  r—   r“   Ú__next__r   r:   )	r&   Údta_filer…  rù   rP  rj  ÚidxZlarge_chunkrÍ  r   r   r   Ú test_chunked_categorical_partialç  s    &(rp  r˜  )rA  r   rÃ  c              
   C   sD   | ddddƒ}t jtdd�� t||d�� W 5 Q R X W 5 Q R X d S )Nr   r    r!   rl  zchunksize must be a positiverû   r¬  )rý   rþ   rÿ   r   )r&   r˜  rn  r   r   r   Útest_iterator_errorsú  s    rq  c               
      sÔ   ddgdgd  ‰ t ‡ fdd„tdƒD ƒƒ} t ¡ �–}| j|dd	� tjdddgd
d�}t|dd��\}t|ƒD ]L\}}tdƒD ]}t 	|j
| j|¡ q~t || j|d |d d … ¡ qnW 5 Q R X W 5 Q R X d S )NZc_labelZb_labelZa_labelrH  c                    s"   i | ]}d |› �t jˆ dd�“qS )r•   TrŽ   )rA   rŠ  )ri   r<  ©r…  r   r   r$    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   FrÆ   rµ   r»   r/  r¬  r   )r   r?   r7   r8   r9   rA   r'  r   ri  r�  Údtypesr“   r:   r   )rH   r;   rI   rù   r[  r¦  rP  r   rr  r   Útest_iterator_value_labels  s    
rt  c               
   C   sÜ   t tdd„ tdƒD ƒƒtdd„ tdƒD ƒƒggddgd�} t ¡ ��}tjtdd	�� | j|d
d� W 5 Q R X t|ƒ}t	t
jt
jgddgd�}t |j|¡ |jd | jd k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   rO  r   r   r   Ú	<genexpr>  s     z&test_precision_loss.<locals>.<genexpr>é<   é4   ÚbigÚlittler3   z&Column converted from int64 to float64rû   FrÆ   )r$   )r   ry  )r   rx  )r   Úsumr?   r7   r8   rÓ   r   r9   r   r   rF   rÞ   rŽ  rs  rÈ   rC   Úfloat)rH   r;   rÌ  Zexpected_dtr   r   r   Útest_precision_loss  s    ,þ
 ÿr|  c              
   C   s®   t dddgdddggddgd	d
dgd�}d|j_t ¡ �l}|j|| d� t|| dd�}t ||¡ t || ¡�}t	 
| ¡ ¡}W 5 Q R X t|dd�}t ||¡ W 5 Q R X d S )Nç¿¶~úÏš¿?ç9DÜœJÎ?ç>éD‚)â?çÜ.4×i¤(@ç33333þ@çÍÌÌÌ¤œArè  ré  ÚXÚYÚZr&  r$   re  ©rR  rî  rí  )r   r$   r%   r7   r8   r9   r   r:   Zdecompress_filer   rû  rž  )rR  rH   r;   rÌ  ÚfhÚcontentsr   r   r   Útest_compression_roundtrip!  s    ý
r‰  Úto_inferÚ
read_inferc              	   C   s    | }t | }d|› �}tdddgdddggdd	gd
ddgd�}d|j_|rNdn|}|rZdn|}t |¡�.}	|j|	|d� t|	|dd�}
t |
|¡ W 5 Q R X d S )Nrc  r}  r~  r  r€  r�  r‚  rè  ré  rƒ  r„  r…  r&  r$   rP  re  r†  )	r   r   r$   r%   r7   r8   r9   r   r:   )Zcompression_onlyr‹  rŠ  rR  Úextrf  rH   Zto_compressionZread_compressionr;   rÎ   r   r   r   Útest_stata_compression5  s    
ýr�  c                  C   s>  t dddddgddtjdtjgdddd	d
gt dddddg¡dœƒ} t ¡ �è}ddddœdddœdœ}|dddddœi–}t|| |d�}| ¡  t	|ƒ�}| 
¡ }||k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\   r`   r[  r<  rK  )Úfully_labelledÚpartially_labelledr„  r…  r~   r€   r‚   r0  )r   r  )rŽ  r�  r…  )r   r   r   ©r  zCCan't create value labels for notY, it wasn't found in the dataset.rû   ZnotYr7  r8  )r]   r\   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rP  rÑ   )r   rF   rQ   rA   rŠ  r7   r8   r   r1  r   r  rC   rý   rþ   r  rÿ   )r    r;   r  rI   r3  rù   Úreader_value_labelsr  r   r   r   Ú!test_non_categorical_value_labelsM  s4    üÿ	

þ
ÿr’  c                  C   s  t ddddddgddddddgddddddgddddddgddddddgd	œƒ} d
ddœd
ddœdddœddiddid	œ}d
ddœd
ddœdddœddiddidœ}t ¡ �R}t t¡� | j||d� W 5 Q R X t|ƒ�}| ¡ }||ksðt‚W 5 Q R X W 5 Q R X d S )Nr   r   r   r=   r\   rˆ   ra   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregate©r   r   r7  r8  r“  rƒ   r�   )r\   rˆ   r†   r‚   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r�  )	r   r7   r8   rÓ   r
   r9   r   r  rC   )r    r  rI   r;   rù   r‘  r   r   r   Ú0test_non_categorical_value_label_name_conversions  s4    ûÿû	û

r”  c               
   C   sÆ   dddddœi} t dddddddgiƒ}t ¡ �Œ}|j|| d� t|d	d
��}| ¡ }W 5 Q R X || kslt‚d}dd dg¡ }d|› d|› d�}tj	t
|d�� t|dd
� W 5 Q R X W 5 Q R X d S )NZrepeated_labelsZTenzMore than ten)r`   r[   é(   r`   r[   r•  r�  FrÓ  zQ--------------------------------------------------------------------------------
Ú
z
Value labels for column a    are not unique. These cannot be converted to
pandas categoricals.

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

The repeated labels are:
rû   T)r   r7   r8   r9   r   r  rC   r»  rý   rþ   rÿ   r   )r  r    r;   rù   r‘  r•   Zrepeatsr  r   r   r   Ú;test_non_categorical_value_label_convert_categoricals_error˜  s,     
ÿ ÿÿ
ÿ	÷r—  r¼   c           
   	   C   s  t tdddgƒtdtjtjg| jd�tddd gƒdœƒ}|jjjj}| d	d
¡}|dkr^d}n|dkrjd}t	j
| }t	|ƒ}td||gtdd�}tddd
gdd�}t ¡ �N}|j|d|d� t|dd�}	t |j|	j¡ t |	j|¡ t |	j|¡ W 5 Q R X d S )Nr   r  r   r   r»   r   r   r   Úur›   rÝ   rG   Úboolr|   r%  r   r”  Fr5   Tr]  )r   r   rA   ZNAr%   r   r¼   Znumpy_dtyper2  r   ZBASE_MISSING_VALUESrµ   r7   r8   r9   r   rŽ  r   r   )
r¼   r-   rH   Z
dtype_nameÚvaluer`  Z
expected_bZ
expected_cr;   rÌ  r   r   r   Útest_nullable_support¾  s,    ýÿ

r›  )DrU  r   rÊ  r  r   r   rT  r\  rp   rY  ZnumpyrF   rý   Zpandas.core.dtypes.commonr   r  rA   Zpandas._testingZ_testingr7   Zpandas.core.framer   r   Z pandas.tests.io.test_compressionr   Zpandas.io.parsersr   Zpandas.io.statar	   r
   r   r   r   r   r   r   r   Zfixturer   r'   r(   r:  r;  rF  rJ  rN  rb  rg  rk  rp  rq  rt  r|  r‰  r�  r’  r”  r—  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper›  r   r   r   r   Ú<module>   sš   ,

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