U
    ÎZj�K ã                   @   s�  d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlZd dlmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ej'd	d
„ ƒZ(ej'dd„ ƒZ)G dd„ dƒZ*ej+ ,ddddddg¡dd„ ƒZ-ej+ ,ddddddg¡ej+ ,dddg¡ej+ ,dddg¡dd„ ƒƒƒZ.ej+ ,d d!dg¡ej+ ,d"dd#d!g¡d$d%„ ƒƒZ/ej+ ,ddddddg¡d&d'„ ƒZ0d(d)„ Z1ej+ ,d*d+¡d,d-„ ƒZ2d.d/„ Z3d0d1„ Z4d2d3„ Z5ej+ ,d4ddg¡ej+ ,d5ddg¡d6d7„ ƒƒZ6d8d9„ Z7d:d;„ Z8d<d=„ Z9ej+ ,ddddddg¡ej+ ,d>ej:ej;ej<ej=ej>ej?ej@ejAejBg	¡d?d@„ ƒƒZCdS )Aé    N)Údatetime)Úis_categorical_dtype)Ú	DataFrameÚSeries)Úensure_index)Ú_compression_to_extension©Úread_csv)	ÚCategoricalConversionWarningÚInvalidColumnNameÚPossiblePrecisionLossÚStataMissingValueÚStataReaderÚStataWriterÚStataWriterUTF8ÚValueLabelTypeMismatchÚ
read_statac                   C   s(   t ddddgddddgd	d
ddgdœƒS )Né   é   é   é   ç      ð?ç      @g      ;@g     @T@ZAtlantaZ
BirminghamZ
CincinnatiZDetroit©ÚaÚbÚc)r   © r   r   ú]/var/www/html/TRUCKING_PROJECT/venv/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(   3   s    r(   c                   @   s(  e Zd Zdd„ Zdd„ Zej ddddd	d
g¡dd„ ƒZej dddg¡dd„ ƒZ	dd„ Z
ej dddddg¡dd„ ƒZej dddddg¡dd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zej ddddd	d
g¡d(d)„ ƒZd*d+„ Zd,d-„ Zej ddddd	d
g¡d.d/„ ƒZd0d1„ Zej ddddd	d
g¡d2d3„ ƒZd4d5„ Zej ddddd	d
g¡ej dd6d7d8d9g¡d:d;„ ƒƒZej dd<d=d>d?g¡d@dA„ ƒZej ddddd	d
g¡dBdC„ ƒZej ddddd	d
g¡dDdE„ ƒZdFdG„ Zej ddddd	d
g¡dHdI„ ƒZdJdK„ ZdLdM„ ZdNdO„ Z dPdQ„ Z!dRdS„ Z"dTdU„ Z#dVdW„ Z$dXdY„ Z%ej ddddd	d
g¡ej dZd[d\g¡d]d^„ ƒƒZ&d_d`„ Z'dadb„ Z(dcdd„ Z)dedf„ Z*ej ddgdhdig¡djdk„ ƒZ+dldm„ Z,dndo„ Z-dpdq„ Z.ej ddddd	d
g¡ej /dr¡dsdt„ ƒƒZ0dudv„ Z1ej ddddd	d
g¡dwdx„ ƒZ2ej ddydzg¡d{d|„ ƒZ3ej dd}d~g¡dd€„ ƒZ4ej ddydzg¡d�d‚„ ƒZ5ej dddƒddd9d?d„did…dzd~g¡ej d†d‡dˆg¡ej d‰dŠd‹g¡ej dŒdŠd‹g¡d�dŽ„ ƒƒƒƒZ6e7e8e8d�œd�d‘„ƒZ9d’d“„ Z:ej dd”ddd8d>d•dhd–dyd}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¢„ Z@d£d¤„ ZAd¥d¦„ ZBd§d¨„ ZCd©dª„ ZDd«d¬„ ZEd­d®„ ZFd¯d°„ ZGej d±eHjIeHjI g¡d²d³„ ƒZJd´dµ„ ZKd¶d·„ ZLej d¸d‹dŠg¡d¹dº„ ƒZMd»d¼„ ZNej d½d¾d¿dÀdÁdÂdÃdÄg¡dÅdÆ„ ƒZOdÇdÈ„ ZPdÉdÊ„ ZQdËdÌ„ ZRej ddddd	d
g¡dÍdÎ„ ƒZSdÏdÐ„ ZTdÑdÒ„ ZUdÓdÔ„ ZVej ddddd	d
g¡dÕdÖ„ ƒZWej ddddd	d
g¡d×dØ„ ƒZXdÙdÚ„ ZYdÛdÜ„ ZZe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_dtaC   s
    
zTestStata.test_read_empty_dtar,   Z
stata1_114Z
stata1_117c                 C   sn   |ddd|› d�ƒ}|   |¡}ttjtjtjtjtjfgddddd	gd
�}|d  tj¡|d< t ||¡ d S )Nr    r!   r"   ú.dtaÚ
float_missÚdouble_missÚ	byte_missÚint_missÚ	long_missr4   )r-   r   ÚnpÚnanÚastypeÚfloat32r8   r;   ©r+   r,   r'   ÚparsedÚexpectedr   r   r   Útest_read_dta1L   s    
þzTestStata.test_read_dta1c                 C   s¤  t jtddddddƒdtdd	dƒtdd	d
ƒtdd	d	ƒtddd	ƒtdd	d	ƒtdd	d	ƒftddddddƒdtdddƒtdddƒtdd	d	ƒtddd	ƒtdd	d	ƒtdd	d	ƒftjtjtjtjtjtjtjtjfgddddddddgd �}|d  d!¡|d< tjd"d#��l}t d$¡ |  	|d%d&d'd(ƒ¡}|  	|d%d&d'd)ƒ¡}|  	|d%d&d'd*ƒ¡}d+d,„ |D ƒ}t
|ƒdk�sft‚W 5 Q R X tj||d"d-� tj||d"d-� tj||d"d-� d S ).NéÖ  é   é   é   é   é   l   *�}aiÚ  r   é   i¶  é   i§  é   é   r   iZléÿi¡  é
   r   iœ  é   i£  Z
datetime_cZdatetime_big_cÚdateZweekly_dateZmonthly_dateZquarterly_dateZhalf_yearly_dateZyearly_dater4   ÚOT©ÚrecordÚalwaysr    r!   r"   zstata2_114.dtazstata2_115.dtazstata2_117.dtac                 S   s   g | ]}|j tkr|‘qS r   )ÚcategoryÚUserWarning)Ú.0Úxr   r   r   Ú
<listcomp>—   s     
 z,TestStata.test_read_dta2.<locals>.<listcomp>©Úcheck_datetimelike_compat)r   Úfrom_recordsr   ÚpdÚNaTrF   ÚwarningsÚcatch_warningsÚsimplefilterr-   ÚlenÚAssertionErrorr8   r;   )r+   r'   rJ   Úwr(   Ú
parsed_115Ú
parsed_117r   r   r   Útest_read_dta2_   s`    





ø





ø
"ëøè#
ÿÿÿ	zTestStata.test_read_dta2Z
stata3_113Z
stata3_114Z
stata3_115Z
stata3_117c                 C   sv   |ddd|› d�ƒ}|   |¡}|  |ddddƒ¡}| tj¡}|d  tj¡|d< |d  tj¡|d< t ||¡ d S )Nr    r!   r"   r>   ú
stata3.csvÚyearÚquarter)	r-   r	   rF   rD   rG   Úint16Úint8r8   r;   rH   r   r   r   Útest_read_dta3£   s    
zTestStata.test_read_dta3Z
stata4_113Z
stata4_114Z
stata4_115Z
stata4_117c           	      C   s4  |ddd|› d�ƒ}|   |¡}tjdddddgdddddgd	d
d	d	d	gdddddgdddtjdgdddtjdgdddtjdgd
d	dtjd
gdddtjdgdddtjdgg
dddddgd�}|D ]d}||  ¡ }t |d | ¡  ¡}|dkrð|}| d¡j	}|j
|dd�}|jjd dd� |||< q¾t ||¡ d S )Nr    r!   r"   r>   ÚoneÚtenÚtwoÚnineÚthreeÚeightÚfourÚsevenr   ÚfiveÚsixé   rW   rS   rR   é	   Úfully_labeledÚfully_labeled2Úincompletely_labeledÚlabeled_with_missingsÚfloat_labelledr4   r]   T©Úordered©Zinplace)r-   r   rd   rD   rE   ÚcopyZasarrayZnotnarF   Ú_valuesÚset_categoriesÚ
categoriesÚrenamer8   r;   )	r+   r,   r'   rI   rJ   ÚcolÚorigr�   Úcatr   r   r   Útest_read_dta4³   s>    
öûó
zTestStata.test_read_dta4c                 C   sT   |   |ddddƒ¡}tjdddgdd	d
gdddggdddgd�}tj||dd� d S )Nr    r!   r"   zstata12_117.dtar   ÚabcZ	abcdefghir   ZcbaZqwertywertyqwertyé]   Ú Zstrlr`   ÚyÚzr4   F©Úcheck_dtype)r-   r   rd   r8   r;   )r+   r'   rn   rJ   r   r   r   Útest_read_dta12ã   s    ýú	zTestStata.test_read_dta12c                 C   s(  |   |ddddƒ¡}|d  d¡|d< tjddd	d
dddgdddtjtjtjtjgdddddddgdddddddgdddddddggdd d!d"d#dd$gd%�}|d#  tj¡|d#< |jD ]}t 	|| || ¡ 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ÚBytesrY   ZCatZBogotau   BogotÃ¡r   r   u   option b ÃœnicodeZDogZBostonu   UzunkÃ¶prÃ¼ZPlaneZRomeu   TromsÃ¸r   ç        zoption aZPotatoZTokyou	   ElÃ¢zÄ±ÄŸéüÿÿÿç      @r   r•   gþ¤�ÉTÕ?gUUUUUUÕ?ÚThingsÚCitiesÚUnicode_Cities_StrlÚIntsÚFloatsÚLongsr4   u'   Here are some strls with Ãœnicode charsz	long datazHere are some thingsz	byte datazint datazHere are some citiesz
float data)r¡   r¤   rŸ   r›   r¢   r    r£   u   This is a  Ãœnicode data label)r-   rF   r   rd   rD   rE   rG   r5   r8   Zassert_almost_equalr   Úvariable_labelsZassert_dict_equalÚ
data_labelrk   )r+   r'   Z
parsed_118rJ   r�   ÚrdrZvlZvl_expectedr   r   r   Útest_read_dta18ð   sB    ûùø
ù	zTestStata.test_read_dta18c              	   C   sv   t tjtjtjtjtjfgdddddgd�}d|j_t ¡ �0}|j|d d� |  |¡}t 	| 
d¡|¡ W 5 Q R X d S )	Nr?   r@   rA   rB   rC   r4   r%   r#   )r   rD   rE   r%   r&   r8   r9   r:   r-   r;   Ú	set_index)r+   Úoriginalr<   Úwritten_and_read_againr   r   r   Útest_read_write_dta5  s    þ

zTestStata.test_read_write_dta5c              	   C   sš   |   |ddddƒ¡}d|j_|j tj¡|_|d  tj¡|d< |d  tj¡|d< t ¡ �4}|j|d d� |  	|¡}tj
| d¡|d	d
� W 5 Q R X d S )Nr    r!   r"   rp   r%   rq   rr   r#   F©Zcheck_index_type)r	   r%   r&   rF   rD   Úint32r8   r9   r:   r-   r;   r©   )r+   r'   rª   r<   r«   r   r   r   Útest_write_dta6$  s    

ýzTestStata.test_write_dta6c              	   C   s´   t ddddt d¡ggdddddgd	�}t|d td
�|d< d|j_|j tj¡|_|d  tj¡|d< t	 
¡ �:}|j|ddi|d� |  |¡}t	j| d¡|dd� W 5 Q R X d S )NÚstringÚobjectr   çš™™™™™ñ?ú
2003-12-25ÚintegerÚfloatingr   ©r!   r5   ©Údtyper%   Útc©r$   r.   Fr­   )r   rD   Ú
datetime64r   r±   r%   r&   rF   r®   r8   r9   r:   r-   r;   r©   )r+   r.   rª   r<   r«   r   r   r   Útest_read_write_dta104  s     þ

ýzTestStata.test_read_write_dta10c              	   C   s<   t  ¡ �*}ttj dd¡tdƒd�}| |¡ W 5 Q R X d S )NrV   r   ÚABr4   )r8   r9   r   rD   ÚrandomÚrandnÚlistr:   )r+   r<   Údfr   r   r   Útest_stata_doc_examplesI  s    
z!TestStata.test_stata_doc_examplesc              	   C   st   t j d¡ tt j dd¡tdƒd�}t j|jddd…f< | ¡ }t	 
¡ �}|j|d	d
� W 5 Q R X t	 ||¡ d S )Ni§  r€   r   Úabcdr4   r   r   r   F©r7   )rD   r¾   Úseedr   r¿   rÀ   rE   ÚlocrŠ   r8   r9   r:   r;   )r+   rÁ   Zdf_copyr<   r   r   r   Útest_write_preserves_originalN  s    
z'TestStata.test_write_preserves_originalc           	   	   C   sŽ   t |ddddƒƒ}t |ddddƒƒ}|jd }|jd }||ksDt‚t|tƒsRt‚t ¡ �*}|j|d|d� t |ƒ}t ||¡ W 5 Q R X d S )Nr    r!   r"   zstata1_encoding.dtar   Fr6   )	r   Ú	kreis1849rk   Ú
isinstanceÚstrr8   r9   r:   r;   )	r+   r.   r'   ÚrawÚencodedÚresultrJ   r<   Úreread_encodedr   r   r   Útest_encodingX  s    


zTestStata.test_encodingc              
   C   s˜   t dgddddgd�}t dgdddd	gd�}d
|j_| tj¡}t ¡ �F}t t	¡� |j
|d d� W 5 Q R X |  |¡}t | d
¡|¡ W 5 Q R X d S )N©r   r   r   r   Zgoodu   bÃ¤dZ8numberZ%astringwithmorethan32characters______r4   Zb_dZ_8numberÚ astringwithmorethan32characters_r%   r#   )r   r%   r&   rF   rD   r®   r8   r9   Úassert_produces_warningr   r:   r-   r;   r©   )r+   rª   Ú	formattedr<   r«   r   r   r   Útest_read_write_dta11i  s&    üþ	
þ

zTestStata.test_read_write_dta11c              
   C   sÀ   t dgddddddgd�}t dgd	d
ddddgd�}d|j_| tj¡}t ¡ �f}tj	dd��2}t 
dt¡ |j|d |d� t|ƒdksŒt‚W 5 Q R X |  |¡}t | d¡|¡ W 5 Q R X d S )N)r   r   r   r   r€   rW   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2ú+ú-ÚshortÚdeleter4   rÑ   Z _0astringwithmorethan32characterÚ_Z_1_Z_shortÚ_deleter%   TrZ   r\   rº   r   )r   r%   r&   rF   rD   r®   r8   r9   rg   rh   ri   r   r:   rj   rk   r-   r;   r©   )r+   r.   rª   rÓ   r<   rl   r«   r   r   r   Útest_read_write_dta12�  s:    úþúþ

zTestStata.test_read_write_dta12c              	   C   s˜   t dtjd�}t dtjd�}t dtjd�}t|||dœƒ}d|j_|}|d  tj	¡|d< t
 ¡ �,}| |¡ |  |¡}t
 | d¡|¡ W 5 Q R X d S )Ni   r·   i   l        )rs   r®   Úint64r%   rÜ   )r   rD   rs   r®   rÜ   r   r%   r&   rF   Úfloat64r8   r9   r:   r-   r;   r©   )r+   Ús1Ús2Ús3rª   rÓ   r<   r«   r   r   r   Útest_read_write_dta13¦  s    


zTestStata.test_read_write_dta13Z
stata5_113Z
stata5_114Z
stata5_115Z
stata5_117c              	   C   sæ   |ddd|› d�ƒ}|   |¡}d|j_|  |ddddƒ¡}ddd	d
dg}|D ]}|| jddd�||< qL|d
  tj¡|d
< tj	|d dd�|d< t
 ||¡ t
 ¡ �6}	|j|	ddi|d� |   |	¡}
t
 |
 d¡|¡ W 5 Q R X d S )Nr    r!   r"   r>   r%   z
stata5.csvÚbyte_Úint_Úlong_Úfloat_Údouble_T)r   ÚnumericÚdate_tdZcoerce)ÚerrorsÚtdrº   )r-   r%   r&   r	   Ú_convertrF   rD   rG   re   Úto_datetimer8   r;   r9   r:   r©   )r+   r,   r(   r.   r'   rI   rJ   Úcolsr�   r<   r«   r   r   r   Útest_read_write_reread_dta14µ  s    


z&TestStata.test_read_write_reread_dta14Z
stata6_113Z
stata6_114Z
stata6_115Z
stata6_117c                 C   s¾   |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< |ddd|› d�ƒ}|  |¡}t ||¡ d S )Nr    r!   r"   ú
stata6.csvrâ   rã   rä   rå   ræ   rè   ©z%Y-%m-%d©Úargsr>   )r	   rF   rD   rt   rs   r®   rG   rÝ   Úapplyr   Ústrptimer-   r8   r;   )r+   r,   r'   rJ   rI   r   r   r   Útest_read_write_reread_dta15Ì  s     ÿ

z&TestStata.test_read_write_reread_dta15c              
   C   s~   t dgdgd�}tdddddƒ}d	}t ¡ �H}|j||||d
� t|ƒ�"}|jdksXt‚|j|ksft‚W 5 Q R X W 5 Q R X d S )N©r   Úvariabler4   éÐ  r   é   é   é   zThis is a data file.)Ú
time_stampr¦   r.   z29 Feb 2000 14:21)	r   r   r8   r9   r:   r   rü   rk   r¦   )r+   r.   rª   rü   r¦   r<   Úreaderr   r   r   Útest_timestamp_and_labelà  s    
   ÿ
z"TestStata.test_timestamp_and_labelc              
   C   sj   t dgdgd�}d}t ¡ �D}d}tjt|d�� |j|||d� W 5 Q R X tj 	|¡r\t
‚W 5 Q R X d S )Nrö   r÷   r4   z01 Jan 2000, 00:00:00z"time_stamp should be datetime type©Úmatch)rü   r.   )r   r8   r9   ÚpytestÚraisesÚ
ValueErrorr:   Úosr<   Úisfilerk   )r+   r.   rª   rü   r<   Úmsgr   r   r   Útest_invalid_timestampî  s    
z TestStata.test_invalid_timestampc              
   C   s”   t t t d¡d¡ƒ}d|j_t ¡ �d}t t	¡� | 
|¡ W 5 Q R X |  |¡}| d¡}t|jƒ}dd„ }t||ƒ|_t ||¡ W 5 Q R X d S )Ng      9@)r€   r€   r%   c                 S   s   t | d ƒS )Nr   )Úint©r`   r   r   r   Ú<lambda>  ó    z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rD   ÚreshapeÚaranger%   r&   r8   r9   rÒ   r   r:   r-   r©   rÀ   r5   Úmapr;   )r+   rª   r<   r«   r5   Zconvert_col_namer   r   r   Útest_numeric_column_namesø  s    



z#TestStata.test_numeric_column_namesc              	   C   s¤   t t d¡tjd�}t t d¡tjd�}tj|d d d…< tj|dd d…< t||dœƒ}d|j_t	 
¡ �4}|j||d� |  |¡}| d¡}t	 ||¡ W 5 Q R X d S )Nrž   r·   r   r   ©rÞ   rß   r%   ©r.   )r   rD   r  rG   rÝ   rE   r   r%   r&   r8   r9   r:   r-   r©   r;   )r+   r.   rÞ   rß   rª   r<   r«   r   r   r   Útest_nan_to_missing_value  s    


z#TestStata.test_nan_to_missing_valuec              
   C   s€   ddg}t t t d¡d¡|d�}d|j_t ¡ �D}|j|dd� |  	|¡}t
jt|jjd	�� |d  W 5 Q R X W 5 Q R X d S )
Nr`   r–   ç      $@)r€   r   r4   Zindex_not_writtenFrÄ   rÿ   )r   rD   r  r  r%   r&   r8   r9   r:   r-   r  r  ÚKeyError)r+   r5   rª   r<   r«   r   r   r   Útest_no_index  s    

zTestStata.test_no_indexc              	   C   sr   t ddgƒ}t ddgtjd�}t||dœƒ}d|j_t ¡ �,}| |¡ |  	|¡}t 
| d¡|¡ W 5 Q R X d S )Nr   zA longer stringr   ç       @r·   r  r%   )r   rD   rÝ   r   r%   r&   r8   r9   r:   r-   r;   r©   )r+   rÞ   rß   rª   r<   r«   r   r   r   Útest_string_no_dates  s    


zTestStata.test_string_no_datesc           	   
   C   s   t ddgtjd�}t ddgtjd�}t ddgtjd�}t ddgtjd�}t||||dœƒ}d|j_t 	¡ �Œ}t 
t¡� | |¡ W 5 Q R X |  |¡}| ¡ }t |d	 tjd�|d	< t |d
 tjd�|d
< t |d tjd�|d< t | d¡|¡ W 5 Q R X d S )Nr   éc   r·   é   iÿ  l   ÿÿÿÿ )Ús0rÞ   rß   rà   r%   rÞ   rß   rà   )r   rD   rt   rs   rÜ   r   r%   r&   r8   r9   rÒ   r   r:   r-   rŠ   r®   rÝ   r;   r©   )	r+   r  rÞ   rß   rà   rª   r<   r«   Úmodifiedr   r   r   Útest_large_value_conversion)  s    

z%TestStata.test_large_value_conversionc              
   C   sŒ   t tddddddƒgƒ}d|j_t ¡ �Z}t t¡� |j|dd	id
� W 5 Q R X |  	|¡}| 
¡ }dg|_t | d¡|¡ W 5 Q R X d S )NrL   rM   rN   rO   rP   rQ   r%   r   r¹   r#   Z_0)r   r   r%   r&   r8   r9   rÒ   r   r:   r-   rŠ   r5   r;   r©   )r+   rª   r<   r«   r  r   r   r   Útest_dates_invalid_column;  s    

z#TestStata.test_dates_invalid_columnc                 C   s´   |ddddƒ}t |ƒ}ddddgddddgd	dddgg}t|ƒ}d
dddg|_|d
  tj¡|d
< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< t 	| 
d¡|¡ d S )Nr    r!   r"   úS4_EDUC1.dtar   r   éþÿÿÿr   r   ZclustnumZpri_schlZpsch_numZpsch_dis)r   r   r5   rF   rD   rs   rt   rG   r8   r;   Úhead)r+   r'   ÚdpathrÁ   Zdf0r   r   r   Útest_105G  s    "zTestStata.test_105c                 C   s2   |ddddƒ}t |ƒ}| ¡ i ks&t‚| ¡  d S )Nr    r!   r"   r  )r   Úvalue_labelsrk   Úclose)r+   r'   r!  rý   r   r   r   Útest_value_labels_old_formatU  s    z&TestStata.test_value_labels_old_formatc           	   
   C   sú   dddddddg}dd	„ |D ƒ}t d
dddddƒgt|ƒ }t|g|d�}d|j_t d
dddddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒt d
ddƒg}t|g|d�}d|j_t ¡ �0}|j||d� |  |¡}t 	| 
d¡|¡ W 5 Q R X d S )Nr¹   rê   Ztwr8   ZtqÚthÚtyc                 S   s   i | ]
}||“qS r   r   ©r_   r   r   r   r   Ú
<dictcomp>a  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>rL   rM   rQ   rO   rP   r4   r%   rN   r   rV   rS   r#   )r   rj   r   r%   r&   r8   r9   r:   r-   r;   r©   )	r+   r5   Zconversionsr!   rª   Úexpected_valuesrJ   r<   r«   r   r   r   Útest_date_export_formats_  s&    





ù


z"TestStata.test_date_export_formatsc              	   C   sr   t dgd ggdgd�}t dgdggdgd�}d|j_t ¡ �,}| |¡ |  |¡}t | d¡|¡ W 5 Q R X d S )NÚ1Zfoor4   r•   r%   )	r   r%   r&   r8   r9   r:   r-   r;   r©   )r+   rª   rJ   r<   r«   r   r   r   Útest_write_missing_stringsv  s    


z$TestStata.test_write_missing_stringsÚ	byteorderú>ú<c              	   C   sD  t dddgtjd�}t dddgtjd�}t dddgtjd�}t dddgtjd�}t dddgtjd�}t ddd	gtjd�}t ddd
gtjd�}	t|||||||	dœƒ}
d|
j_|
 	¡ }tj
tj
tjtjtjtjtjf}t|j|ƒD ]\}}||  |¡||< qàt ¡ �6}|
j|||d� |  |¡}| d¡}t ||¡ W 5 Q R X d S )Nr   r   Tr·   éd   éÿ   iœ  iÿÿ  iœÿÿl   ÿÿ )r  rÞ   rß   rà   Ús4Ús5Ús6r%   )r.  r.   )r   rD   Zbool_Zuint8Zuint16Zuint32r   r%   r&   rŠ   rt   rs   r®   rÝ   Úzipr5   rF   r8   r9   r:   r-   r©   r;   )r+   r.  r.   r  rÞ   rß   rà   r3  r4  r5  rª   rJ   Zexpected_typesr   Útr<   r«   r   r   r   Útest_bool_uint  s6    ÿù	


zTestStata.test_bool_uintc           	   	   C   sž   t |ddddƒƒ�}| ¡ }W 5 Q R X t |ddddƒƒ�}| ¡ }W 5 Q R X d}d}| ¡ D ]<\}}||kspt‚||| k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¥   Úitemsrk   )	r+   r'   r§   Zsr_115Zsr_117ÚkeysÚlabelsÚkÚvr   r   r   Útest_variable_labels¡  s    zTestStata.test_variable_labelsc              
   C   sà   d}i }|D ]*}t d| d| d| gƒ|dt|ƒ < qt|ƒ}t ¡ �Ž}|j|dd� t|ƒ�l}|j}|j}|j	}	t
||	|ƒD ]F\}
}}t|
dd … ƒt|dd	… ƒks®t‚t|
dd … ƒ|ks€t‚q€W 5 Q R X W 5 Q R X d S )
N)r   r1  éô   r   r   r   ÚsFrÄ   r   éÿÿÿÿ)r   rÊ   r   r8   r9   r:   r   ÚtyplistZvarlistZfmtlistr6  r  rk   )r+   Ústr_lensrB  Ústr_lenrª   r<   ÚsrrD  Ú	variablesÚformatsr÷   ÚfmtÚtypr   r   r   Útest_minimal_size_col®  s     ÿ

$zTestStata.test_minimal_size_colc              
   C   s€   d}i }|D ]*}t d| d| d| gƒ|dt|ƒ < qt|ƒ}d}tjt|d��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )N)r   rA  éô  r   r   r   rB  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  r8   r9   r:   )r+   rE  rB  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å   r4   c                 S   s   g | ]}d t d| ƒ ‘qS )Ú.éa   )Úchr©r_   Úir   r   r   ra   Ú  s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>é   r   rQ  r   é   z<fs      s    Ð z.zz<ds         às        à)r   r8   r9   r:   r   ZVALID_RANGEÚrangeÚinsertr   r°   rk   ÚstructÚunpack)r+   ÚtypesrÁ   r<   r§   Zvalid_ranger*  r7  ÚoffsetrU  Ú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   rW  c                    s    g | ]}t ˆˆ |d    ƒ‘qS )rW  )r   )r_   Új©rU  r<  r   r   ra   ù  s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r€   r4   r    r!   r"   r>   T©Zconvert_missing)
r   ÚsortedZMISSING_VALUESr<  rX  Úappendr   r   r8   r;   )	r+   r,   r'   r5   Úsmvr!   ÚrowrJ   rI   r   rb  r   Útest_missing_value_conversionò  s     ÿz'TestStata.test_missing_value_conversionc                 C   sä  ddddddg}ddddd	d
g}ddddddg}ddddddg}ddddddg}ddddddg}g }t t|ƒƒD ]˜}	g }
t dƒD ]|}|dkr¾|
 t||	 ||	 ||	 ||	 ||	 ||	 ƒ¡ q€|dkrÞ|
 t||	 ddƒ¡ q€|
 t||	 ||	 ||	 ƒ¡ q€| |
¡ qp| tjgd ¡ dddddddg}tdddƒ|d d< tdddƒ|d d< tdddƒ|d d	< tdddƒ|d d< tdd	dƒ|d	 d< tdd	dƒ |d	 d< |d	 d	< tdddƒ |d	 d< |d	 d< tdddƒ |d d<  |d d< |d d	< tdddƒ |d d< |d d< t||td �}t|d!d"d#d$ƒƒ}t|d!d"d#d%ƒƒ}t	j
||d&d'� t	j
||d&d'� d(d)„ |D ƒ}t	 ¡ �T}d*|j_t	jtd+d,�� | ||¡ W 5 Q R X |  |¡}t	j
| d*¡|d&d'� W 5 Q R X d S )-Ni¨  rø   i'  r1  iÖ  i�  r   rT   r   r�   rU   é   rO   r   é;   rS   rW   Zdate_tcrè   Zdate_twZdate_tmZdate_tqZdate_thZdate_tyé   r   r   rV   r€   é   iŽ  )r5   r¸   r    r!   r"   zstata9_115.dtazstata9_117.dtaTrb   c                 S   s   i | ]}||d d… “qS )r  Nr   r(  r   r   r   r)  0  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r%   zkeyword-onlyrÿ   )rX  rj   re  r   re   rf   r   r±   r   r8   r;   r9   r%   r&   rÒ   ÚFutureWarningr:   r-   r©   )r+   r'   ÚyrÚmoÚddÚhrÚmmÚssrJ   rU  rg  ra  r5   rm   rn   Zdate_conversionr<   r«   r   r   r   Útest_big_dates  sd    2 ù  , 

ýzTestStata.test_big_datesc                 C   s  |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< t|ddddƒdd�}t ||¡ t|ddddƒddd�}|   |ddddƒ¡}|d
 jt	j
dd�|d
< t ||¡ d S )Nr    r!   r"   rï   râ   rã   rä   rå   ræ   rè   rð   rñ   ústata6_117.dtaTr#   F)r$   Zpreserve_dtypes)r	   rF   rD   rt   rs   r®   rG   rÝ   ró   r   rô   r   r8   r;   )r+   r'   rJ   Zno_conversionÚ
conversionr   r   r   Útest_dtype_conversion=  s4     ÿ
 ÿý ÿ
zTestStata.test_dtype_conversionc              	   C   s€  |   |ddddƒ¡}|d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d  tj¡|d< |d	  tj¡|d	< |d
 jt	j
dd�|d
< dddg}|| }t|ddddƒd|d�}t ||¡ dddg}|| }t|ddddƒd|d�}t ||¡ d}tjt|d��& ddg}t|ddddƒd|d� W 5 Q R X d}tjt|d��* ddddg}t|ddddƒd|d� W 5 Q R X d S )Nr    r!   r"   rï   râ   rã   rä   rå   ræ   rè   rð   rñ   ru  T)r$   r5   z"columns contains duplicate entriesrÿ   zEThe following columns were not found in the Stata data set: not_foundÚ	not_found)r	   rF   rD   rt   rs   r®   rG   rÝ   ró   r   rô   r   r8   r;   r  r  r  )r+   r'   rJ   r5   ZdroppedZ	reorderedr  r   r   r   Útest_drop_column[  sT     ÿ

ý
ýýýzTestStata.test_drop_columnz;ignore:\nStata value:pandas.io.stata.ValueLabelTypeMismatchc           	         s¤  t jddddddgddddddgdddddd	gd
ddd
d
dgdddtjddgdddtjddgdd
dtjddgdddtjddgdddtjddgdddtjddgg
ddddddgd�‰ ˆ  ¡ }tj‡ fdd„ˆ D ƒdd�‰ d|j_|d  	t
¡|d< |d  	t
¡|d< |D ]V}||  ¡ }| d ¡j}| ¡ }|dk�rB|j|d!d"�}|jjd d!d#� |||< �qt ¡ �4}ˆ j||d$� |  |¡}| d¡}t ||¡ W 5 Q R X d S )%Nrv   rw   r   rx   ry   r   rz   r{   r   r|   r}   r   r~   r   r€   rW   rS   rR   r�   rV   r‚   rƒ   r„   r…   r†   Z	unlabeledr4   c                    s   g | ]}ˆ |   d ¡‘qS ©r]   ©rF   ©r_   r�   ©rª   r   r   ra   «  s     z6TestStata.test_categorical_writing.<locals>.<listcomp>©Zaxisr%   r]   Tr‡   r‰   r  )r   rd   rD   rE   rŠ   re   Úconcatr%   r&   ró   rÊ   rF   r‹   Ú
as_orderedrŒ   r�   rŽ   r8   r9   r:   r-   r©   r;   )	r+   r.   rJ   r�   r�   r‘   r<   r«   Úresr   r}  r   Útest_categorical_writingŒ  sR    öúó ÿ



z"TestStata.test_categorical_writingc              
      sì   t jdd gdd gdd gdd ggdgd�‰ tj‡ fdd	„ˆ D ƒd
d�‰ t ¡ �.}d}tjt|d�� ˆ  	|¡ W 5 Q R X W 5 Q R X t jdgdgdgdgd
ggdgd�‰ tj‡ fdd	„ˆ D ƒd
d�‰ t 
t¡� ˆ  	|¡ W 5 Q R X d S )Nr   i'  r   r   ÚdZToo_longr4   c                    s   g | ]}ˆ |   d ¡‘qS rz  r{  r|  r}  r   r   ra   Ì  s     zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r~  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.rÿ   c                    s   g | ]}ˆ |   d ¡‘qS rz  r{  r|  r}  r   r   ra   Ú  s     )r   rd   re   r  r8   r9   r  r  r  r:   rÒ   r   )r+   r<   r  r   r}  r   Ú$test_categorical_warnings_and_errorsÃ  s.    "þ ÿ
ÿ ÿ ÿz.TestStata.test_categorical_warnings_and_errorsc           
   	      sÖ   dd„ t dƒD ƒ}| tjg¡ tj|dgd�‰ tj‡ fdd„ˆ D ƒdd�‰ d	ˆ j_	t
 ¡ �p}ˆ j||d
� |  |¡}| d	¡}ˆ  ¡ }|D ].}|| j}| ¡ j}	|j|	dd�}|||< qŒt
 ||¡ W 5 Q R X d S )Nc                 S   s   g | ]}d t |ƒ g‘qS )r   )rÊ   rT  r   r   r   ra   ã  s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>éx   Zmany_labelsr4   c                    s   g | ]}ˆ |   d ¡‘qS rz  r{  r|  r}  r   r   ra   ç  s     r   r~  r%   r  Tr‡   )rX  re  rD   rE   r   rd   re   r  r%   r&   r8   r9   r:   r-   r©   rŠ   r‹   Úremove_unused_categoriesr�   rŒ   r;   )
r+   r.   Úvaluesr<   r«   r�  rJ   r�   r‘   Znew_catsr   r}  r   Ú*test_categorical_with_stata_missing_valuesá  s&     ÿ





z4TestStata.test_categorical_with_stata_missing_valuesZstata10_115Zstata10_117c           
      C   s¶  dddddddgt  d¡fdd	dddddgt  d¡d d d
… fdddddddgt  dddddg¡fdddddddgt  dd¡fdddddgt  dddd
d
g¡fdddddddgt  d¡fdddddddgt  d¡fg}g }|D ]H\}}}}|�r| |tjj||dd�f¡ qÞ| |t|t jd�f¡ 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€   ÚreverserC  Znoorderr   r   r   r   r   rµ   Zfloat_missingFZnolabelr   r  r   rž   g      @Zint32_mixedr‡   r·   r    r!   r"   r>   )rD   r  Úarrayre  re   ÚCategoricalÚ
from_codesr   rG   r   Ú	from_dictÚdictr   r8   r;   r   r¸   Úassert_series_equalr‘   ÚcodesÚassert_index_equalr�   )
r+   r,   r'   rJ   rí   Zis_catr�   r=  r‘  rI   r   r   r   Útest_categorical_order÷  s4    $$ ù	ÿ
 
ÿz TestStata.test_categorical_orderZstata11_115Zstata11_117c              
   C   s�   t |ddd|› d�ƒƒ}|jddd�}t |jd ¡|_d	d	dd
d
d
ddddg
}dddddg}tjj||dd�}t	|dd�}t
 ||d ¡ d S )Nr    r!   r"   r>   ZsrhÚfirst)Zna_positionr   rC  r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r‘  r�   rˆ   ©r&   )r   Zsort_valuesrD   r  Úshaper%   re   rŒ  r�  r   r8   r�  )r+   r,   r'   rI   r‘  r�   r‘   rJ   r   r   r   Útest_categorical_sorting  s      ÿz"TestStata.test_categorical_sortingc                 C   sf   |ddd|› d�ƒ}t |ƒ}t |dd�}|D ]4}t|| jƒs@q,|| jjsPt‚|| jjr,t‚q,d S )Nr    r!   r"   r>   F)Úorder_categoricals)r   r   r¸   r‘   rˆ   rk   )r+   r,   r'   rI   Zparsed_unorderedr�   r   r   r   Útest_categorical_ordering,  s    z#TestStata.test_categorical_orderingZ
stata2_117Z
stata7_117Z
stata9_117Ú	chunksizer   r   Úconvert_categoricalsFTr$   c              
   C   s
  |ddd|› d�ƒ}t jdd�� t  d¡ t|||d�}W 5 Q R X t|d||d	�}d
}	tdƒD ]œ}
t jdd��D t  d¡ z| |¡}W n$ tk
r®   Y W 5 Q R £  qþY nX W 5 Q R X |j|	|	| …d d …f  ¡ }|  	|¡}t
j||ddd� |	|7 }	q`| ¡  d S )Nr    r!   r"   r>   TrZ   r\   ©r›  r$   )Úiteratorr›  r$   r   r€   F©r™   rc   ©rg   rh   ri   r   rX  ÚreadÚStopIterationÚilocrŠ   Ú_convert_categoricalr8   r;   r$  ©r+   r,   rš  r›  r$   r'   ÚfnamerI   ÚitrÚposra  ÚchunkÚ
from_framer   r   r   Útest_read_chunks_1178  s@    
ýü
 
   ÿ
zTestStata.test_read_chunks_117)r©  Úreturnc                 C   sT   | D ]J}| | }t |jƒr|j ¡ }|jjtkrFt|jjƒ}| |¡}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )r   r¸   r‹   r†  r�   r±   r   rŒ   )r©  r�   Zserr‘   r�   r   r   r   r£  o  s    



zTestStata._convert_categoricalc              	   C   sH  |ddddƒ}t |ƒ}t |dd��.}| d¡}t |jdd…d d …f |¡ W 5 Q R X t |dd	��0}t|ƒ}t |jdd…d d …f |d ¡ W 5 Q R X t |dd��.}| d¡}t |jdd…d d …f |¡ W 5 Q R X t |dd	��,}| ¡ }t |jdd…d d …f |¡ W 5 Q R X t |d
d	��}t |¡}W 5 Q R X t ||¡ d S )Nr    r!   r"   ústata3_117.dtaT©r�  r€   r   ©rš  r   )	r   r   r8   r;   r¢  rÀ   Z	get_chunkre   r  )r+   r'   r¥  rI   r¦  r¨  Zfrom_chunksr   r   r   Útest_iterator~  s"    
(,
((zTestStata.test_iteratorZ
stata2_115Z
stata7_115Z
stata9_115c              
   C   s
  |ddd|› d�ƒ}t jdd�� t  d¡ t|||d�}W 5 Q R X t|d||d	�}d
}	tdƒD ]œ}
t jdd��D t  d¡ z| |¡}W n$ tk
r®   Y W 5 Q R £  qþY nX W 5 Q R X |j|	|	| …d d …f  ¡ }|  	|¡}t
j||ddd� |	|7 }	q`| ¡  d S )Nr    r!   r"   r>   TrZ   r\   rœ  )r�  r$   r›  r   r€   Frž  rŸ  r¤  r   r   r   Útest_read_chunks_115˜  s@    
ýü
 
   ÿ
zTestStata.test_read_chunks_115c              	   C   s¢   |ddddƒ}dddg}d}t ||d	�}t |d
d��d}d}tdƒD ]P}|j||d	�}	|	d kr` q”|j||| …d d …f }
tj|
|	dd� ||7 }qBW 5 Q R X d S )Nr    r!   r"   r¬  rr   ZcpiÚm1r   r4   Tr­  r   r€   Fr˜   )r   rX  r   r¢  r8   r;   )r+   r'   r¥  r5   rš  rI   r¦  r§  ra  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&   r8   r9   r:   r   r¥   rk   )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&   r8   r9   r  r  r  r:   )r+   r.   r   r¥   r<   r  r   r   r   Útest_invalid_variable_labelsø  s    
  ÿz&TestStata.test_invalid_variable_labelsc              
   C   s^   d|j _ddddœ}d|d< t ¡ �0}tjtdd	�� |j|||d
� W 5 Q R X W 5 Q R X d S )Nr%   r¸  r´  rµ  r   u   invalid character Å’r   z,Variable labels must contain only charactersrÿ   r¶  rº  )r+   r.   r   r¥   r<   r   r   r   Ú$test_invalid_variable_label_encoding  s    
 ÿ  ÿz.TestStata.test_invalid_variable_label_encodingc              
   C   s²   ddddddg}ddd  |¡d	œ}d
}tjt|d��( t ¡ �}|j||d� W 5 Q R X W 5 Q R X dddd	œ}d}tjt|d��( t ¡ �}|j||d� W 5 Q R X W 5 Q R X d S )Nu   Î¡u   Î‘u   Î�u   Î”u   Î£r³  r´  r•   r   zKVariable labels must contain only characters that can be encoded in Latin-1rÿ   )r¥   zqA very, very, very long variable label that is too long for Stata which means that it has more than 80 charactersr¹  )Újoinr  r  r  r8   r9   r:   )r+   r   r‡  Zvariable_labels_utf8r  r<   Zvariable_labels_longr   r   r   Ú test_write_variable_label_errors  s$    ýÿ
"ý
z*TestStata.test_write_variable_label_errorsc                 C   s  t  ddddddd¡t  ddddddd¡t  dd	d
d	d
d	d¡g}tdddgdddg|dœƒ}t ¡ �”}|j|dd� t|dd�}t ||¡ |j|dddid� t|dd�}t ||¡ |j 	¡  
d¡}|j|d|did� t|dd�}t ||¡ W 5 Q R X d S )NéÏ  rT   rU   éà.  éÜ  rû   éR  éð  rS   r   é   r   r  r   ÚappleÚbananaÚcherry©ZnumsÚstrsÚdatesFrÄ   Tr#   rÊ  r¹   )r7   r$   )Údtr   r   r8   r9   r:   r   r;   r5   Útolistr%   )r+   rÊ  rª   r<   ÚrereadÚdirectZ	dates_idxr   r   r   Útest_default_date_conversion.  s*    ýýÿ
z&TestStata.test_default_date_conversionc              
   C   sP   t dddgiƒ}d}tjt|d��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr   y      ð?       @y       @      @z"Data type complex128 not supportedrÿ   )r   r  r  ÚNotImplementedErrorr8   r9   r:   )r+   rª   r  r<   r   r   r   Útest_unsupported_typeK  s
    
zTestStata.test_unsupported_typec                 C   s  t  ddddddd¡t  ddddddd¡t  dd	d
d	d
d	d¡g}tdddgdddg|dœƒ}d}tjt|d��, t ¡ �}|j|ddid� W 5 Q R X W 5 Q R X t	j
dddd�}tdddgdddg|dœƒ}tjtdd��$ t ¡ �}| |¡ W 5 Q R X W 5 Q R X d S )Nr¿  rT   rU   rÀ  rÁ  rû   rÂ  rÃ  rS   r   rÄ  r   r  r   rÅ  rÆ  rÇ  rÈ  zFormat %tC not implementedrÿ   rÊ  ZtCr#   z1-1-1990r   zAsia/Hong_Kong)ZperiodsÚtzzData type datetime64)rË  r   r   r  r  rÐ  r8   r9   r:   re   Z
date_range)r+   rÊ  rª   r  r<   r   r   r   Útest_unsupported_datetypeS  s0    ýýÿ
&ýÿ
z#TestStata.test_unsupported_datetypec              	   C   s8   d}t jt|d�� t|ddddƒdd� W 5 Q R X d S )	Na*  
Value labels for column ethnicsn are not unique. These cannot be converted to
pandas categoricals.

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

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




	 ÿ
G




1r)   r.   éi   él   éo   éq   r/   c                 C   sT   |dddƒ}t j |d¡}t j |d| › d�¡}t|ƒ}t|ƒ}tj||dd� d S )	Nr    r!   r"   zstata-compat-118.dtazstata-compat-r>   Fr˜   )r  r<   r½  r   r8   r;   )r.   r'   Z	data_baseÚrefÚoldrJ   Zold_dtar   r   r   Útest_backward_compat1  s    rG  r0   r1   r2   Úuse_dictTFÚinferc              
   C   s  d}| r(|r| }nt |  }|d|› �7 }| }|r4d}|r@d| i}ttj dd¡tdƒd�}d	|j_t 	|¡��Ž}|j
|||d
� | dk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�}t ||¡ W 5 Q R X d S )Nzdta_inferred_compression.dtarQ  rI  ÚmethodrV   r   r½   r4   r%   )r.   Úcompressionr  r  r6  Úrr   ÚtarÚbz2ÚzstdZ	zstandardÚxzÚlzmarî  )r   r   rD   r¾   r¿   rÀ   r%   r&   r8   r9   r:   r  r   r    rþ  r   ÚzipfileÚZipFileÚfilelistÚtarfileÚextractfileÚgetnamesrN  r  Zimportorskipr   r;   )rK  r.   rH  rI  Ú	file_nameÚfile_extZcompression_argrÁ   r<   ÚcompÚfprM  rO  rQ  rÍ  r   r   r   Útest_compression;  sN    "
(





r\  rJ  r6  rY  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�}	t |	|¡ W 5 Q R X d S )Nútest.ztest.dtarV   r   r½   r4   r%   )rJ  Úarchive_name©rK  r6  rL  r   r   rî  )r   rD   r¾   r¿   rÀ   r%   r&   r8   r9   r:   rR  rS  rj   rT  rk   Úfilenamer    rþ  r   r   r;   )
rJ  rY  rX  r^  rÁ   r<   rK  Zzpr[  rÍ  r   r   r   Útest_compression_dictj  s    

"ra  c              
   C   s¨   t dtdddddgdd�iƒ}d|j_t ¡ �p}|j|| d� t|d	d
d�}t|ƒD ]D\}}| 	d¡}d|ksrt
‚t |j|jjd	| d	|d  … ¡ qTW 5 Q R X d S )NÚcatsr   r   r   r]   r·   r%   r  r   F)rš  r˜  r   )r   r   r%   r&   r8   r9   r:   r   Ú	enumerater©   rk   r�  rb  r¢  )r.   rÁ   r<   rý   rU  Úblockr   r   r   Útest_chunked_categorical  s    

re  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   r8   rÒ   r
   rc  rÀ   rb  rk   re   ÚIndexr’  r‘   r�   Ú__next__r   r;   )	r'   Údta_filer‡  rý   rU  rd  ÚidxZlarge_chunkrÎ  r   r   r   Ú test_chunked_categorical_partialŒ  s    &(rk  rš  )rC  r   rÅ  c              	   C   s8   | ddddƒ}t jtdd�� t||d� W 5 Q R X d S )Nr    r!   r"   rf  zchunksize must be a positiverÿ   r®  )r  r  r  r   )r'   rš  ri  r   r   r   Útest_iterator_errorsŸ  s    rl  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_labelrM  c                    s"   i | ]}d |› �t jˆ dd�“qS )r�   Tr‡   )re   rŒ  )r_   r>  ©r‡  r   r   r)  ©  s      z.test_iterator_value_labels.<locals>.<dictcomp>r   FrÄ   r±   r·   r1  r®  r   )r   rX  r8   r9   r:   re   rg  r   rc  r’  Údtypesr�   r;   r¢  )rÁ   r<   rJ   rý   ra  r¨  rU  r   rm  r   Útest_iterator_value_labels¦  s    
ro  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   rT  r   r   r   Ú	<genexpr>¶  s     z&test_precision_loss.<locals>.<genexpr>é<   é4   ÚbigÚlittler4   z&Column converted from int64 to float64rÿ   FrÄ   )r%   )r   rt  )r   rs  )r   ÚsumrX  r8   r9   rÒ   r   r:   r   r   rD   rÝ   r�  rn  rÆ   rk   Úfloat)rÁ   r<   rÍ  Zexpected_dtr   r   r   Útest_precision_loss´  s    ,þ
 ÿrw  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ÚZ©r%   r5   r%   r_  ©rK  rï  rî  )r   r%   r&   r8   r9   r:   r   r;   Zdecompress_filer    rþ  r   )rK  rÁ   r<   rÍ  ÚfhÚcontentsr   r   r   Útest_compression_roundtripÅ  s    ý
r…  Úto_inferÚ
read_inferc              	   C   s    | }t | }d|› �}tdddgdddggdd	gd
ddgd�}d|j_|rNdn|}|rZdn|}t |¡�.}	|j|	|d� t|	|dd�}
t |
|¡ W 5 Q R X d S )Nr]  rx  ry  rz  r{  r|  r}  ré  rê  r~  r  r€  r�  r%   rI  r_  r‚  )	r   r   r%   r&   r8   r9   r:   r   r;   )Zcompression_onlyr‡  r†  rK  Úextr`  rÁ   Zto_compressionZread_compressionr<   rÍ   r   r   r   Útest_stata_compressionÚ  s    
ýr‰  c                  C   s2  t dddddgddtjdtjgdddd	d
gt dddddg¡dœƒ} t ¡ �Ü}ddddœdddœdœ}|dddddœi–}t|| |d�}| ¡  t	|ƒ}| 
¡ }||ks¬t‚d}tjt|d��" ddddœi}t|| |d� W 5 Q R X d}tjt|d��& ddddd d!œi}t|| |d� W 5 Q R X W 5 Q R X d S )"Nr   r   r   r   r  g      "@rS   r�   rR   rV   ra  r>  rP  )Úfully_labelledÚpartially_labelledr  r€  rv   rx   rz   r3  )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notYr9  r:  )rS   rR   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rU  rÐ   )r   rD   rE   re   rŒ  r8   r9   r   r4  r   r#  rk   r  r  r  r  )r!   r<   r#  rJ   r6  rý   Úreader_value_labelsr  r   r   r   Ú!test_non_categorical_value_labelsò  s4    üÿ	

þÿrŽ  c                  C   sü   t ddddddgddddddgddddddgddddddgddddddgd	œƒ} d
ddœd
ddœdddœddiddid	œ}d
ddœd
ddœdddœddiddidœ}t ¡ �F}t t¡� | j||d� W 5 Q R X t|ƒ}| ¡ }||ksît‚W 5 Q R X d S )Nr   r   r   r€   rR   r�   rW   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregate©r   r   r9  r:  r�  r{   ry   )rR   r�   r~   rz   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_rŒ  )	r   r8   r9   rÒ   r   r:   r   r#  rk   )r!   r#  rJ   r<   rý   r�  r   r   r   Ú0test_non_categorical_value_label_name_conversion  s4    ûÿû	û
r�  c               
   C   sº   dddddœi} t dddddddgiƒ}t ¡ �€}|j|| d� t|d	d
�}| ¡ }|| ks`t‚d}dd dg¡ }d|› d|› d�}tj	t
|d�� t|dd
� W 5 Q R X W 5 Q R X d S )NZrepeated_labelsZTenzMore than ten)rV   rQ   é(   rV   rQ   r‘  rŒ  FrÔ  zQ--------------------------------------------------------------------------------
Ú
z
Value labels for column a    are not unique. These cannot be converted to
pandas categoricals.

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

The repeated labels are:
rÿ   T)r   r8   r9   r:   r   r#  rk   r½  r  r  r  r   )r#  r!   r<   rý   r�  r�   Zrepeatsr  r   r   r   Ú;test_non_categorical_value_label_convert_categoricals_error=  s,     
ÿ ÿÿ
ÿ	÷r“  r¸   c           
   	   C   s  t tdddgƒtdtjtjg| jd�tddd gƒdœƒ}|jjjj}| d	d
¡}|dkr^d}n|dkrjd}t	j
| }t	|ƒ}td||gtdd�}tddd
gdd�}t ¡ �N}|j|d|d� t|dd�}	t |j|	j¡ t |	j|¡ t |	j|¡ W 5 Q R X d S )Nr   r  r   r   r·   r   r   r   Úur•   rÜ   r®   Úboolrt   )r¸   r&   r   r•  Fr6   Trc  )r   r   re   ZNAr&   r   r¸   Znumpy_dtyper5  r   ZBASE_MISSING_VALUESr±   r8   r9   r:   r   r�  r   r   )
r¸   r.   rÁ   Z
dtype_nameÚvaluerf  Z
expected_bZ
expected_cr<   rÍ  r   r   r   Útest_nullable_supportc  s,    ýÿ

r—  )DrN  r   rË  r  r    r  rZ  rU  rg   rR  ÚnumpyrD   r  Zpandas.core.dtypes.commonr   r  re   Zpandas._testingZ_testingr8   Zpandas.core.framer   r   Zpandas.core.indexes.apir   Z pandas.tests.io.test_compressionr   Zpandas.io.parsersr	   Zpandas.io.statar
   r   r   r   r   r   r   r   r   Zfixturer   r(   r)   r<  r=  rG  r\  ra  re  rk  rl  ro  rw  r…  r‰  rŽ  r�  r“  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper—  r   r   r   r   Ú<module>   s˜   ,

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