a
    j=icK                    @   sv  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g ddd Z-ej+,dg dej+,dddgej+,dddgdd Z.ej+,dddgej+,dg ddd Z/ej+,dg dd d! Z0d"d# Z1ej+,d$d%d&d' Z2d(d) Z3d*d+ Z4d,d- Z5ej+,d.ddgej+,d/ddgd0d1 Z6d2d3 Z7d4d5 Z8d6d7 Z9ej+,dg dej+,d8ej:ej;ej<ej=ej>ej?ej@ejAejBg	d9d: ZCdS );    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 g dg dg ddS )N            )      ?      @g      ;@g     @T@)ZAtlantaZ
BirminghamZ
CincinnatiZDetroitabc)r    r   r   k/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/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g ddd Zejd	d
dgdd Z	dd Z
ejd	g ddd Zejd	g ddd Zdd Zdd Zdd Zdd Zejdg ddd Zd d! Zd"d# Zejdg dd$d% Zd&d' Zejdg dd(d) Zd*d+ Zejdg dejd	g d,d-d. Zejd	g d/d0d1 Zejdg dd2d3 Zejdg dd4d5 Zd6d7 Zejdg dd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%ejdg dejdJdKdLgdMdN Z&dOdP Z'dQdR Z(dSdT Z)dUdV Z*ejd	g dWdXdY Z+dZd[ Z,d\d] Z-d^d_ Z.ejdg dej/d`dadb Z0dcdd Z1ejdg ddedf Z2ejd	dgdhgdidj Z3ejd	dkdlgdmdn Z4ejd	dgdhgdodp Z5ejd	g dqejdrdsdtgejdudvdwgejdxdvdwgdydz Z6e7e8e8d{d|d}Z9d~d Z:ejd	g dejdrdsdtgejdudvdwgejdxdvdwgdd Z;dd Z<ejdg ddd Z=ejdg ddd Z>ejdddgdd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGejdeHjIeHjI gdd ZJdd ZKdd ZLejddwdvgdd ZMdd ZNejdg ddd ZOdd ZPdd ZQdd ZRejdg ddd ZSdd ZTdd ZUdd ZVejdg ddd ZWejdg ddd ZXdd ZYdd ZZejj[ddĄ Z\ejdg dŢddǄ Z]ddɄ Z^dS )	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   s\   t dgd}t 4}|j|d|d t|}t|| W d    n1 sN0    Y  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_114
stata1_117c                 C   sh   |ddd| d}|  |}ttjtjtjtjtjfgg dd}|d tj|d< t|| d S )Nr!   r"   r#   .dta
float_missZdouble_missZ	byte_missZint_missZ	long_missr6   rC   )r.   r   npnanastypefloat32r:   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g dd}|d d|d< tjddv}td | 	|dd d!d"}| 	|dd d!d#}| 	|dd d!d$}d%d& |D }t
|dksZJ W d    n1 sp0    Y  tj||dd' tj||dd' tj||dd' d S )(N                 l   *}ai  r      i     i        r   iZli  
   r   i     i  )Z
datetime_cZdatetime_big_cdateZweekly_dateZmonthly_dateZquarterly_dateZhalf_yearly_dateyearly_dater6   rY   OTrecordalwaysr!   r"   r#   zstata2_114.dtazstata2_115.dtazstata2_117.dtac                 S   s   g | ]}|j tu r|qS r   )categoryUserWarning).0xr   r   r   
<listcomp>       z,TestStata.test_read_dta2.<locals>.<listcomp>check_datetimelike_compat)r   from_recordsr   pdNaTrF   warningscatch_warningssimplefilterr.   lenr:   r=   )r,   r(   rJ   wr)   
parsed_115
parsed_117r   r   r   test_read_dta2_   sP    












"#
	2zTestStata.test_read_dta2)Z
stata3_113Z
stata3_114
stata3_115
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#   rA   
stata3.csvyearquarter)	r.   r	   rF   rD   rG   int16int8r:   r=   rH   r   r   r   test_read_dta3   s    
zTestStata.test_read_dta3)Z
stata4_113Z
stata4_114
stata4_115
stata4_117c           	      C   s  |ddd| d}|  |}tjg dg dg dg d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
g dd}|D ]d}||  }t|d |  }|dkr|}|dj	}|j
|dd}|jjd dd |||< qt|| d S ) Nr!   r"   r#   rA   )onetenr{   r{   r{   )twoniner}   r}   r}   )threeeightr   r   r   )foursevenr   r   r   fivesix   rW   r   r   rS   r   r   rR   r~   r}   	   r|   r{   )fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr6   r   r   r^   TorderedZinplace)r.   r   rf   rD   rE   copyZasarrayZnotnarF   _valuesset_categories
categoriesrenamer:   r=   )	r,   r-   r(   rI   rJ   colorigr   catr   r   r   test_read_dta4   s4    

zTestStata.test_read_dta4c                 C   sL   |  |dddd}tjg dg dg dgg dd	}tj||d
d d S )Nr!   r"   r#   zstata12_117.dta)r   abcZ	abcdefghi)r   ZcbaZqwertywertyqwerty)]    Zstrl)ra   yzr6   Fcheck_dtype)r.   r   rf   r:   r=   )r,   r(   ro   rJ   r   r   r   test_read_dta12   s    	zTestStata.test_read_dta12c              	   C   s  |  |dddd}|d d|d< tjg ddd	d
tjtjtjtjgg dg dg dgg dd}|d tj|d< |jD ]}t	|| ||  qt
|ddddF}| }dddddddd}t|| |jdksJ W d    n1 s0    Y  d S )Nr!   r"   r#   zstata14_118.dtaBytesrZ   )ZCatZBogotau   Bogotár   r   u   option b Ünicoder   ZDogZBostonu   Uzunköprü)ZPlaneZRomeu   Tromsør           option ar   )ZPotatoZTokyou	   Elâzığ      @r   r   )r   r   r   r   gT?r   gUUUUUU?)ThingsCitiesUnicode_Cities_StrlIntsFloatsr   Longsr6   r   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   rf   rD   rE   rG   r7   r:   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_label)r,   r(   Z
parsed_118rJ   r   rdrZvlZvl_expectedr   r   r   test_read_dta18   s4    
	zTestStata.test_read_dta18c                 C   s   t tjtjtjtjtjfgg dd}d|j_t :}|j|d d | |}t	|
d| W d    n1 sv0    Y  d S )NrB   r6   r&   r$   )r   rD   rE   r&   r'   r:   r;   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 >}|j|d d | 	|}tj
|d|d	d
 W d    n1 s0    Y  d S )Nr!   r"   r#   rs   r&   rt   ru   r$   FZcheck_index_type)r	   r&   r'   rF   rD   int32r:   r;   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g dd}t|d td|d< d	|j_|jtj|_|d
 tj|d
< t	
 D}|j|ddi|d | |}t	j|d	|dd W d    n1 s0    Y  d S )Nstringobjectr   皙?
2003-12-25)r   r   integerfloatingr   r"   r7   dtyper&   r   r   tcr%   r/   Fr   )r   rD   
datetime64r   r   r&   r'   rF   r   r:   r;   r<   r.   r=   r   )r,   r/   r   r>   r   r   r   r   test_read_write_dta104  s     

zTestStata.test_read_write_dta10c                 C   sP   t  4}ttjddtdd}|| W d    n1 sB0    Y  d S )NrV   r   ABr6   )r:   r;   r   rD   randomrandnlistr<   )r,   r>   dfr   r   r   test_stata_doc_examplesI  s    
z!TestStata.test_stata_doc_examplesc                 C   s   t jd tt jddtdd}t j|jdddf< | }t	
 }|j|d	d
 W d    n1 sn0    Y  t	|| d S )Ni  r   r   abcdr6   r   r   r   Fr9   )rD   r   seedr   r   r   rE   locr   r:   r;   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sDJ t|tsRJ t 4}|j|d|d t |}t|| W d    n1 s0    Y  d S )Nr!   r"   r#   zstata1_encoding.dtar   Fr8   )r   	kreis1849
isinstancestrr:   r;   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g dd}t dgg dd}d|j_|tj}t d}tt	 |j
|d d W d    n1 sp0    Y  | |}t|d| W d    n1 s0    Y  d S )Nr   )goodu   bädZ8numberZ%astringwithmorethan32characters______r6   )r   Zb_dZ_8number astringwithmorethan32characters_r&   r$   )r   r&   r'   rF   rD   r   r:   r;   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g dd}t dgg dd}d|j_|tj}t }tj	dd<}t
dt |j|d |d	 t|d
ks|J W d    n1 s0    Y  | |}t|d| W d    n1 s0    Y  d S )Nr   r   r   r   r   rW   )Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleter6   )r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter&   Tr[   r]   r   r   )r   r&   r'   rF   rD   r   r:   r;   ri   rj   rk   r   r<   rl   r.   r=   r   )r,   r/   r   r   r>   rm   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
 6}|| | |}t
|d| W d    n1 s0    Y  d S )Ni   r   i   l        )rv   r   int64r&   r   )r   rD   rv   r   r   r   r&   r'   rF   float64r:   r;   r<   r.   r=   r   )r,   s1s2s3r   r   r>   r   r   r   r   test_read_write_dta13  s    


zTestStata.test_read_write_dta13)Z
stata5_113Z
stata5_114
stata5_115
stata5_117c                 C   s   |ddd| d}|  |}d|j_| |dddd}g d}|D ]}|| jddd	||< qF|d
 tj|d
< tj	|d dd|d< t
|| t
 @}	|j|	ddi|d |  |	}
t
|
d| W d    n1 s0    Y  d S )Nr!   r"   r#   rA   r&   z
stata5.csv)byte_int_long_float_double_T)r   numericr   date_tdcoerce)errorstdr   )r.   r&   r'   r	   _convertrF   rD   rG   rg   to_datetimer:   r=   r;   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_dta14)Z
stata6_113Z
stata6_114
stata6_115
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argsrA   )r	   rF   rD   rw   rv   r   rG   r   applyr   strptimer.   r:   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 f}|j||||d
 t|,}|jdksXJ |j|ksfJ W d    n1 sz0    Y  W d    n1 s0    Y  d S )Nr   variabler6     r            zThis is a data file.)
time_stampr   r/   z29 Feb 2000 14:21)r   r   r:   r;   r<   r   r  r   )r,   r/   r   r  r   r>   readerr   r   r   test_timestamp_and_label  s    

z"TestStata.test_timestamp_and_labelc              	   C   s   t dgdgd}d}t b}d}tjt|d  |j|||d W d    n1 sV0    Y  tj	|rpJ W d    n1 s0    Y  d S )Nr  r  r6   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r  r/   )
r   r:   r;   pytestraises
ValueErrorr<   osr>   isfile)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 }tt	 |
| W d    n1 sR0    Y  | |}|d}t|j}dd }t|||_t|| W d    n1 s0    Y  d S )Ng      9@)r   r   r&   c                 S   s   t | d S )Nr   )intra   r   r   r   <lambda>  rc   z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rD   reshapearanger&   r'   r:   r;   r   r   r<   r.   r   r   r7   mapr=   )r,   r   r>   r   r7   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	
 >}|j||d | |}|d}t	|| W d    n1 s0    Y  d S )Nr   r   r   r   r   r   r&   r/   )r   rD   r  rG   r   rE   r   r&   r'   r:   r;   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 b}|j|dd | 	|}t
jt|jjd	 |d  W d    n1 s|0    Y  W d    n1 s0    Y  d S )
Nra   r         $@)r   r   r6   Zindex_not_writtenFr   r  )r   rD   r  r  r&   r'   r:   r;   r<   r.   r  r  KeyError)r,   r7   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 6}|| | 	|}t
|d| W d    n1 sx0    Y  d S )Nr   zA longer stringr          @r   r  r&   )r   rD   r   r   r&   r'   r:   r;   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 d    n1 s0    Y  | |}| }t |d	 tjd|d	< t |d
 tjd|d
< t |d tjd|d< t|d| W d    n1 s0    Y  d S )Nr   c   r      i  l    )s0r   r   r   r&   r   r   r   )r   rD   rw   rv   r   r   r&   r'   r:   r;   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 x}tt" |j|dd	id
 W d    n1 s\0    Y  | 	|}|
 }dg|_t|d| W d    n1 s0    Y  d S )NrL   rM   rN   rO   rP   rQ   r&   r   r   r$   Z_0)r   r   r&   r'   r:   r;   r   r   r<   r.   r   r7   r=   r   )r,   r   r>   r   r&  r   r   r   test_dates_invalid_column;  s    
0
z#TestStata.test_dates_invalid_columnc                 C   s   |dddd}t |}g dg dg dg}t|}g d|_|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.dta)r   r   r   )r   r   r   r*  )r   r   r   r*  )clustnumpri_schlpsch_numpsch_disr+  r,  r-  r.  r   )r   r   r7   rF   rD   rv   rw   rG   r:   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&J |  d S )Nr!   r"   r#   r)  )r   value_labelsclose)r,   r(   r0  r	  r   r   r   test_value_labels_old_formatU  s    z&TestStata.test_value_labels_old_formatc           	   
   C   s  g d}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 :}|j||d | |}t	|
d
| W d    n1 s0    Y  d S )N)r   r   Ztwr:   Ztqthtyc                 S   s   i | ]
}||qS r   r   r`   r   r   r   r   
<dictcomp>a  rc   z6TestStata.test_date_export_formats.<locals>.<dictcomp>rL   rM   rQ   rO   rP   r6   r&   rN   r   rV   rS   r$   )r   rl   r   r&   r'   r:   r;   r<   r.   r=   r   )	r,   r7   Zconversionsr"   r   expected_valuesrJ   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dgd}d|j_t 6}|| | |}t|d| W d    n1 sx0    Y  d S )N1Zfoor6   r   r&   )	r   r&   r'   r:   r;   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   sL  t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g d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 ]\}}|| |||< qt @}|
j|||d | |}|d
}t|| W d    n1 s>0    Y  d S )N)r   r   Tr   )r   r   d   )r   r      )r   r   i  )r   r   i  )r   r   i)r   r   l    )r%  r   r   r   s4s5s6r&   )r=  r/   )r   rD   Zbool_Zuint8Zuint16Zuint32r   r&   r'   r   rw   rv   r   r   zipr7   rF   r:   r;   r<   r.   r   r=   )r,   r=  r/   r%  r   r   r   rB  rC  rD  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 d    n1 s00    Y  t |dddd}| }W d    n1 sj0    Y  d}d}| D ]<\}}||v sJ ||| ksJ ||v sJ ||v sJ qd S )Nr!   r"   r#   zstata7_115.dtazstata7_117.dta)Zvar1Zvar2Zvar3)label1label2Zlabel3)r   r   items)	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|v}|j}|j}|j	}	t
||	|D ]F\}
}}t|
dd  t|dd	 ksJ t|
dd  |ksJ qW d    n1 s0    Y  W d    n1 s0    Y  d S )
N)r   r@     r   r   r   sFr   r   )r   r   r   r:   r;   r<   r   typlistZvarlistZfmtlistrE  r  )r,   str_lensrQ  str_lenr   r>   srrS  	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B t }|| W d    n1 s|0    Y  W d    n1 s0    Y  d S )N)r   rP    r   r   r   rQ  zFixed width strings in Stata \.dta files are limited to 244 \(or fewer\)\ncharacters\.  Column 's500' does not satisfy this restriction\. Use the\n'version=117' parameter to write the newer \(Stata 13 and later\) format\.r  )	r   r   r   r  r  r  r:   r;   r<   )r,   rT  rQ  rU  r   r  r>   r   r   r   test_excessively_long_string  s    
z&TestStata.test_excessively_long_stringc              	   C   sn  d}t dggdgd}t H}|| t|}|j}W d    n1 sN0    Y  W d    n1 sl0    Y  dd tdD }|dd	 |D ]B}|| d
 }tddD ]&}	t|d
 |	 }
|
j	||	 ksJ qqtt
ddd }
|
j	d	ksJ tt
ddd }
|
j	dks"J tt
ddd }
|
j	d	ksFJ tt
ddd }
|
j	dksjJ d S )N)r   hlr   r   r6   c                 S   s   g | ]}d t d|  qS ).a   )chrr`   ir   r   r   rb     rc   z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   r`  r      z<fs      s     z.zz<ds         s        )r   r:   r;   r<   r   ZVALID_RANGErangeinsertr   r   structunpack)r,   typesr   r>   r   Zvalid_ranger9  rF  offsetrd  valr   r   r   test_missing_value_generator  s2    


Bz&TestStata.test_missing_value_generator)Z
stata8_113
stata8_115
stata8_117c           	         s   g d}t d}t|j g }tdD ]&  fddtdD }|| q*t||d}t|dd	d
| ddd}t	|| d S )N)Zint8_Zint16_Zint32_Zfloat32_Zfloat64_e   rf  c                    s    g | ]}t  |d    qS )rf  )r   )r`   jrd  rK  r   r   rb     rc   z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r   r6   r!   r"   r#   rA   TZconvert_missing)
r   sortedZMISSING_VALUESrK  rg  appendr   r   r:   r=   )	r,   r-   r(   r7   smvr"   rowrJ   rI   r   rs  r   test_missing_value_conversion  s    z'TestStata.test_missing_value_conversionc                 C   s  g d}g d}g d}g d}g d}g d}g }t t|D ]}	g }
t dD ]|}|dkr|
t||	 ||	 ||	 ||	 ||	 ||	  qP|dkr|
t||	 d	d	 qP|
t||	 ||	 ||	  qP||
 q@|tjgd  g 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< 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 d    n1 s0    Y  | |}t	j
|d!|dd W d    n1 s0    Y  d S )$N)i  r  '  r@      )r   r   rT   r   r   r   )r   r   rU   r      rO   )r   r   rO   r   r   r   )r   r   ;   r   r   r   rS   r   rW   r   )Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_tyrz  rT      r   r   rV   r   r   r{     r|  i  )r7   r   r!   r"   r#   zstata9_115.dtazstata9_117.dtaTrd   c                 S   s   i | ]}||d d qS )r*  Nr   r7  r   r   r   r8  0  rc   z,TestStata.test_big_dates.<locals>.<dictcomp>r&   zkeyword-onlyr  )rg  rl   rv  r   rg   rh   r   r   r   r:   r=   r;   r&   r'   r   FutureWarningr<   r.   r   )r,   r(   yrmoddhrmmssrJ   rd  rx  rr  r7   rn   ro   Zdate_conversionr>   r   r   r   r   test_big_dates  sV    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   rw   rv   r   rG   r   r   r   r   r   r:   r=   )r,   r(   rJ   Zno_conversion
conversionr   r   r   test_dtype_conversion=  s.    

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
< g d}|| }t|ddddd|d}t|| g d}|| }t|ddddd|d}t|| d}tjt|d0 ddg}t|ddddd|d W d    n1 sB0    Y  d}tjt|d0 g d}t|ddddd|d W d    n1 s0    Y  d S )Nr!   r"   r#   r   r   r   r   r   r   r   r   r   )r   r   r   r  T)r%   r7   )r   r   r   z"columns contains duplicate entriesr  zEThe following columns were not found in the Stata data set: not_found)r   r   r   	not_found)r	   rF   rD   rw   rv   r   rG   r   r   r   r   r   r:   r=   r  r  r  )r,   r(   rJ   r7   Zdropped	reorderedr  r   r   r   test_drop_column[  sR    
&zTestStata.test_drop_columnz;ignore:\nStata value:pandas.io.stata.ValueLabelTypeMismatchc           	         s  t jg dg dg dg d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
g dd   }tj fdd D dd d|j_|d 	t
|d< |d 	t
|d< |D ]T}||  }|dj}| }|dkr|j|dd }|jjd dd! |||< qt >} j||d" | |}|d}t|| W d    n1 s0    Y  d S )#N)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   rW   r   r   rS   r   r   rR   r~   r}   r   r|   r{   rV   )r   r   r   r   r   	unlabeledr6   c                    s   g | ]} |  d qS r^   rF   r`   r   r   r   r   rb     rc   z6TestStata.test_categorical_writing.<locals>.<listcomp>r   Zaxisr&   r   r  r^   Tr   r   r  )r   rf   rD   rE   r   rg   concatr&   r'   r   r   rF   r   
as_orderedr   r   r   r:   r;   r<   r.   r   r=   )	r,   r/   rJ   r   r   r   r>   r   resr   r  r   test_categorical_writing  sD    




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 L}d}tjt|d  	| W d    n1 s0    Y  W d    n1 s0    Y  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 d    n1 s0    Y  d S )Nr   i'  r   r   dZToo_longr6   c                    s   g | ]} |  d qS r  r  r  r  r   r   rb     rc   zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.r  c                    s   g | ]} |  d qS r  r  r  r  r   r   rb     rc   )r   rf   rg   r  r:   r;   r  r  r  r<   r   r   )r,   r>   r  r   r  r   $test_categorical_warnings_and_errors  s(    "
F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
 z} j||d
 | |}|d	}  }|D ].}|| j}| j}	|j|	dd}|||< qt
|| W d    n1 s0    Y  d S )Nc                 S   s   g | ]}d t | gqS )r   )r   rc  r   r   r   rb     rc   zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr6   c                    s   g | ]} |  d qS r  r  r  r  r   r   rb     rc   r   r  r&   r  Tr   )rg  rv  rD   rE   r   rf   rg   r  r&   r'   r:   r;   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_valuesstata10_115stata10_117c           
      C   s  ddg dt dfddg dt dd d d fddg dt g dfdd	g dt d
dfddg dt g dfddg dt dfddg dt dfg}g }|D ]F\}}}}|r||tjj||ddf q||t|t jdf qt	
t|}|ddd| d}t|}	t||	 |D ]N}t|| jr.t|| jj|	| jj t|| jj|	| jj q.d S )NTr   )r   r   r   r  er   reverserR  Znoorder)r   r   r   r   r   r   r   Zfloat_missing)r   r  r  )r   r   r   rR  rR  FZnolabel)r   r!  r   r   g      @Zint32_mixed)r  r   r  r   r   r   r   r!   r"   r#   rA   )rD   r  arrayrv  rg   Categorical
from_codesr   rG   r   	from_dictdictr   r:   r=   r   r   assert_series_equalr   codesassert_index_equalr   )
r,   r-   r(   rJ   r   Zis_catr   rL  r  rI   r   r   r   test_categorical_order  s2    	z TestStata.test_categorical_orderstata11_115stata11_117c                 C   sz   t |ddd| d}|jddd}t|jd |_g d	}g d
}tjj||dd}t	|dd}t
||d  d S )Nr!   r"   r#   rA   Zsrhfirst)Zna_positionr   )
rR  rR  r   r   r   r   r   r   r   r   )ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r'   )r   Zsort_valuesrD   r  shaper&   rg   r  r  r   r:   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sPJ || jjr,J q,d S )Nr!   r"   r#   rA   F)order_categoricals)r   r   r   r   r   )r,   r-   r(   rI   Zparsed_unorderedr   r   r   r   test_categorical_ordering,  s    z#TestStata.test_categorical_ordering)r@   Z
stata2_117rr   rz   r   r   Z
stata7_117rp  Z
stata9_117r  r  	chunksizer   r   convert_categoricalsFTr%   c              
   C   s4  |ddd| d}t jdd( t d t|||d}W d    n1 sN0    Y  t|d||d	}d
}	tdD ]}
t jddP t d z||}W n& ty   Y W d     q(Y n0 W d    n1 s0    Y  |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	qt|  d S )Nr!   r"   r#   rA   Tr[   r]   r  r%   )iteratorr  r%   r   r   Fr   re   ri   rj   rk   r   rg  readStopIterationilocr   _convert_categoricalr:   r=   r3  r,   r-   r  r  r%   r(   fnamerI   itrposrr  chunk
from_framer   r   r   test_read_chunks_1178  s:    
$
8

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   s  |dddd}t |}t |dd8}|d}t|jddd d f | W d    n1 s`0    Y  t |dd	:}t|}t|jddd d f |d  W d    n1 s0    Y  t |dd8}|d}t|jddd d f | W d    n1 s0    Y  t |dd	6}| }t|jddd d f | W d    n1 s`0    Y  t |d
d	}t|}W d    n1 s0    Y  t|| d S )Nr!   r"   r#   stata3_117.dtaTr  r   r   r  r   )	r   r  r:   r=   r  r   Z	get_chunkrg   r  )r,   r(   r  rI   r  r  Zfrom_chunksr   r   r   test_iterator~  s"    
<@
>>*zTestStata.test_iterator)
Z
stata2_115rq   ry   r   r   Z
stata7_115ro  Z
stata9_115r  r  c              
   C   s4  |ddd| d}t jdd( t d t|||d}W d    n1 sN0    Y  t|d||d	}d
}	tdD ]}
t jddP t d z||}W n& ty   Y W d     q(Y n0 W d    n1 s0    Y  |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	qt|  d S )Nr!   r"   r#   rA   Tr[   r]   r  )r  r%   r  r   r   Fr  r  r  r   r   r   test_read_chunks_115  s:    
$
8

zTestStata.test_read_chunks_115c                 C   s   |dddd}g d}d}t ||d}t |dd	n}d
}tdD ]P}|j||d}	|	d u r^ q|j||| d d f }
tj|
|	dd ||7 }q@W d    n1 s0    Y  d S )Nr!   r"   r#   r  )ru   Zcpim1r   r6   Tr  r   r   Fr   )r   rg  r  r  r:   r=   )r,   r(   r  r7   r  rI   r  r  rr  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 j}|j|||d t|}| }W d    n1 sT0    Y  ddddd}||ksxJ W d    n1 s0    Y  d	|d< t \}|j|||d t|}| }W d    n1 s0    Y  ||ksJ W d    n1 s
0    Y  d S )
Nr&   	City RankCity ExponentCityr   r   r/   r   )r&   r   r   r   z	The Index)r&   r'   r:   r;   r<   r   r   )r,   r/   r    r   r>   rV  Zread_labelsZexpected_labelsr   r   r   test_write_variable_labels  s$    

&*

&z$TestStata.test_write_variable_labelsc              	   C   s   d|j _dddd}t R}d}tjt|d  |j|||d W d    n1 sV0    Y  W d    n1 st0    Y  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'   r:   r;   r  r  r  r<   )r,   r/   r    r   r>   r  r   r   r   test_invalid_variable_labels  s    
z&TestStata.test_invalid_variable_labelsr1   r2   c              	   C   s   d|j _dddd}d|d< t N}tjtdd	  |j|||d
 W d    n1 sZ0    Y  W d    n1 sx0    Y  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   g d}ddd |d}d}tjt|dF t }|j||d W d    n1 sZ0    Y  W d    n1 sx0    Y  ddd	d}d
}tjt|dF t }|j||d W d    n1 s0    Y  W d    n1 s0    Y  d S )N)u   Ρ   Αu   Νu   Δr  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  r:   r;   r<   )r,   r    r  Zvariable_labels_utf8r  r>   Zvariable_labels_longr   r   r    test_write_variable_label_errors  s$    
J
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g dg d|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 d    n1 s0    Y  d S )N  rT   rU   .    r  R    rS   r     r   r!  r   applebananaZcherrynumsstrsdatesFr   Tr$   r  r   )r9   r%   )dtr   r   r:   r;   r<   r   r=   r7   tolistr&   )r,   r  r   r>   rereaddirectZ	dates_idxr   r   r   test_default_date_conversion.  s*    
z&TestStata.test_default_date_conversionc              	   C   sx   t dddgi}d}tjt|dB t }|| W d    n1 sL0    Y  W d    n1 sj0    Y  d S )Nr   y      ?       @y       @      @z"Data type complex128 not supportedr  )r   r  r  NotImplementedErrorr:   r;   r<   )r,   r   r  r>   r   r   r   test_unsupported_typeK  s
    
zTestStata.test_unsupported_typec                 C   sT  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g dg d|d}d}tjt|dJ t "}|j|ddid W d    n1 s0    Y  W d    n1 s0    Y  t	j
dddd}tg dg d|d}tjtddD t }|| W d    n1 s&0    Y  W d    n1 sF0    Y  d S )Nr  rT   rU   r  r  r  r  r  rS   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  r:   r;   r<   rg   Z
date_range)r,   r  r   r  r>   r   r   r   test_unsupported_datetypeS  s0    
N
z#TestStata.test_unsupported_datetypec                 C   sL   d}t jt|d& t|dddddd W d    n1 s>0    Y  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
g dd}|g d }t|| d S )Nr!   r"   r#   zstata7_111.dtar   r   r   r   r   r   rW   )
r   r   r   r  r  r   gr^  rd  rr  )r   ra   rm   r   )r   r   rD   NaNr:   r=   )r,   r(   r   r   r   r   r   test_stata_111  s    zTestStata.test_stata_111c              	   C   s   t dttjjdgdttjjttjjgd}d}tjt|dB t	
 }|| W d    n1 st0    Y  W d    n1 s0    Y  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  r:   r;   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	
 H}|| t|}|d tj|d< t	||d W d    n1 s0    Y  d S )Nr   r  r  r&   r  )r   rD   r  rG   r  r  r&   r'   rF   r:   r;   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   s~   t ddgd|gd}d}tjt|dB t }|| W d    n1 sR0    Y  W d    n1 sp0    Y  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  r:   r;   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    rc   z-TestStata.test_path_pathlib.<locals>.<lambda>)r:   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    rc   z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)r:   r  r&   r'   Zround_trip_localpathr<   r=   r  r   r   r   test_pickle_path_localpath  s
    z$TestStata.test_pickle_path_localpathr9   c              	   C   s   dg di}t |d}|d d|d< t R}|j||d t|dd}| }W d    n1 sj0    Y  W d    n1 s0    Y  |dddd	d
diksJ d S )NA)BECr  r  )r"   r^   r   Tr  r  r	  r  )r   r   r   r   )r   rF   r:   r;   r<   r   r2  )r,   r9   r  r   r>   Zdta_iterr2  r   r   r   test_value_labels_iterator  s    

Dz$TestStata.test_value_labels_iteratorc                 C   s^   t  }d|j_t  &}|| t|dd}W d    n1 sD0    Y  t || d S )Nr&   	index_col)r:   r  r&   r'   r;   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halfr  c                 C   sB   t |dddd}|jd|f }|jd|d f }||ks>J d S )Nr!   r"   r#   zstata13_dates.dtar   _fmt)r   r   )r,   r  r(   r   Zunformattedr   r   r   r   (test_date_parsing_ignores_format_details  s    z2TestStata.test_date_parsing_ignores_format_detailsc                 C   sP  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g d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 T}|j|ddidgdd | |}tj|d|dd t|| W d    n1 sB0    Y  d S )Nr   r   r   r   r   r   A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai  zstring-1zobject-1z
2003-12-26r   A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   )r   r   rw   rv   r   rG   r   r   r   Zs2045Zsrtlforced_strlr   r   rw   rv   r   rG   r&   r   r   r  r2   )r%   convert_strlr/   Fr   )r   rD   r   r   r   rw   rv   rF   r   rG   r&   r'   r   r:   r;   r<   r.   r=   r   )r,   r   r   r>   r   r   r   r   test_writer_117  sh    .

zTestStata.test_writer_117c              	   C   s   t g dg dgg dd}d|j_ttx t P}|j|ddgdd	 | |}|	d}|j
|_
tj||d
d W d    n1 s0    Y  W d    n1 s0    Y  d S )N)A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r  )A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr  r  )Z2long1long1long1long1long1long1long1long1long1long1longr   r6   r&   r  r   r2   )r  r/   Fr   )r   r&   r'   r:   r   r   r;   r<   r.   r   r7   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g dg d|d}t T}d}tjt|d" |j|ddid W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr  rT   rU   r  r  r  r  r  rS   r   r  r  r  r  z0convert_dates key must be a column or an integerr  Z
wrong_namer   r$   )	r  r   r   r:   r;   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 l}|j||d |d t	|d}|
|  W d    n1 sh0    Y  t|dd}W d    n1 s0    Y  t|| d S )Nr&   r  r   wbr  )r!   BytesIOr:   r  r&   r'   r;   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  }t|d}|j|dd W d    n1 sJ0    Y  t|d}t|dd}W d    n1 s0    Y  W d    n1 s0    Y  t 	|| d S )Nr&   r  r1   r  rbr  )
r:   r  r&   r'   r;   gzipGzipFiler<   r   r=   )r,   r   r>   gzr  r   r   r   test_gzip_writingy  s    
,HzTestStata.test_gzip_writingc                 C   sf   |  |dddd}g d}g dg dg dg d	g d
g dg dg}t||d}t|| d S )Nr!   r"   r#   zstata16_118.dta)utf8latin1asciiZ	utf8_strlZ
ascii_strl)   ραηδαςu   PÄNDÄSpr*  r+  )   ƤĀńĐąŜ   Ör   r,  r   )   ᴘᴀᴎᴅᴀS   Ünr.  r0  )      r1  r  r1  r  ) r   r   r2  r   )r   r   rQ  r   rQ  )r   r   r2  r   r2  r6   )r.   r   r:   r=   )r,   r(   Z
unicode_dfr7   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 x}|j|ddd t|}|d	}t|| d |d
< |j|dd
gdd t|}|d	}t|| W d    n1 s0    Y  d S )NA  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   r   Fr2   r8   r   r4  )r9   r  r/   )	r   r5  rF   r:   r;   r<   r   fillnar=   )r,   outputr>   r  rJ   r   r   r   test_mixed_string_strl  s    



z TestStata.test_mixed_string_strlc              	   C   s   dddd ddg}t |}d |d< t L}tjtdd |j||d W d    n1 s`0    Y  W d    n1 s~0    Y  d S )Nnoner   )r9  r5  r   z Column `none` cannot be exportedr  r  )r   r:   r;   r  r  r  r<   )r,   r/   r7  r>   r   r   r   test_all_none_exception  s    
z!TestStata.test_all_none_exceptionc              
   C   s   d}t |gdgd}t }d}d}tjt| d| dD tt || W d    n1 sj0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nu9   Here is one __�__ Another one __·__ Another one __½__invalidr6   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   r:   r;   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
|v sfJ |d|v sxJ |dd dd }|ddd  D ]8}|dd }||dd  }	t	||	d ksJ qW d    n1 s0    Y  W d    n1 s0    Y  d S )Npandasr   u   þâÑÐÅ§var_strZvar_strlr6   r2   )r/   r  r"  zlatin-1zutf-8s   strlsr   r*  s   GSO       )
r   r:   r;   r<   r  r  encodesplitfindrl   )
r,   r7  r>   r  r?  rJ   ZgsosZgsorm  sizer   r   r   test_strl_latin1  s    
zTestStata.test_strl_latin1c                 C   s   d}t tJ}t|dddd}t|dks2J |d jjd |ksJJ W d    n1 s^0    Y  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   r6   )	r:   r   UnicodeWarningr   rl   messager   r   r=   )r,   r(   r  rm   r   rJ   r   r   r   test_encoding_latin1_118  s    6z"TestStata.test_encoding_latin1_118c              
   C   s   t |ddddd}t|}W d    n1 s40    Y  |jdksLJ |jd dks^J |jd	 d
kspJ |jd dksJ |jd ttddddddksJ d S )Nr!   r"   r#   zstata1_119.dta.gzr"  )r   i  )r   rW   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   rS   gQ	@)r   rR  r   )r   r   r  rT   r  )r#  r  r   r  r  rg   	Timestampr   )r,   r(   r%  r   r   r   r   test_stata_119  s    &zTestStata.test_stata_119)r3   r4   Nc                 C   sX  t jg ddd}tg dg dg dgg d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sJ |
 |ksJ |j||dd t
|}t|| W d    n1 sJ0    Y  d S )N)r      β   ĉTr   )r   r   u   ᴬu   ᴀ relatively long ŝtring)r!  r   u   ᴮr   )r   r   u   ᴰN)   ÅrP  rQ  strlsr6   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Stringsr   )rR  rP  rQ  rS  rT  u   ᴅaᵀa-labelrP  labelu   æøåu   ŋot valid latin-1r   r   r   rS  F)r   r  r   r9   r/   r2  r^   )r/   r9   )rg   r  r   rF   rD   r   r:   r;   r   
write_filer   r6  replacer   r  r=   r   r   r   r<   )r,   r/   r   r"   r   r   r2  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 L}tjtdd t	||dd W d    n1 sP0    Y  W d    n1 sn0    Y  t L}tjtdd t	||dd W d    n1 s0    Y  W d    n1 s0    Y  d S )	N)r   i  r   z"version must be either 118 or 119.r  r2   r  zYou must use version 119r3   )
r   rD   Zzerosrw   r:   r;   r  r  r  r   )r,   r   r>   r   r   r   test_writer_118_exceptions'  s    
J
z$TestStata.test_writer_118_exceptionsN)___name__
__module____qualname__r.   r	   r  markparametrizer?   rK   rp   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r   r"  r'  r(  r1  r4  r:  r<  rG  rO  r[  r]  rn  ry  r  r  r  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&  r3  r8  r:  r@  rI  rM  ZslowrO  rZ  r[  r   r   r   r   r*   ;   s  

D

-(



$


	



	 
;13

#

$&





	
G




1r*   r/   )i   l   o   q   r1   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-rA   Fr   )r  r>   r  r   r:   r=   )r/   r(   Z	data_baserefoldrJ   Zold_dtar   r   r   test_backward_compat1  s    rj  r0   use_dictTFinferc              	   C   s  d}| r(|r| }nt |  }|d| 7 }| }|r4d}|r@d| i}ttjddtdd}d	|j_t	|}|j
|||d
 | dkrt|d}	t|	 }
W d    n1 s0    Y  n| dkrt|d&}	t|	|	jd }
W d    n1 s
0    Y  nN| dkrlt|,}t|| d  }
W d    n1 s`0    Y  n| dkrt|d}	t|	 }
W d    n1 s0    Y  n| dkrtd}||d}	t|	 }
W d    n1 s0    Y  n`| dkrXtd}||d}	t|	 }
W d    n1 sL0    Y  n| d u rf|}
t|
d	d}t|| W d    n1 s0    Y  d S )Nzdta_inferred_compression.dtar`  rl  methodrV   r   r   r6   r&   )r/   compressionr#  r"  rE  rr   tarbz2zstdZ	zstandardxzlzmar  )r   r   rD   r   r   r   r&   r'   r:   r;   r<   r#  r  r!   r  r  zipfileZipFilefilelisttarfileextractfilegetnamesrq  r  Zimportorskipr   r=   )rn  r/   rk  rl  	file_namefile_extZcompression_argr   r>   compfprp  rr  rt  r  r   r   r   test_compression;  sN    0
:
>
0

0

0
r  rm  rE  r|  )Nr   rE  c           
   	   C   s  d| }d}t tjddtdd}d|j_t|}| |d}|j	||d	 | d
ksd|d
krt
|dL}t|jdksJ |jd j|ksJ t||jd }W d    q1 s0    Y  n|}t|dd}	t|	| W d    n1 s0    Y  d S )Ntest.ztest.dtarV   r   r   r6   r&   )rm  archive_namern  rE  ro  r   r   r  )r   rD   r   r   r   r&   r'   r:   r;   r<   ru  rv  rl   rw  filenamer!   r  r  r   r=   )
rm  r|  r{  r  r   r>   rn  Zzpr~  r  r   r   r   test_compression_dictj  s    

6r  c              
   C   s   t dtg dddi}d|j_t z}|j|| d t|ddd	}t|D ]D\}}|	d}d|v slJ t
|j|jjd| d|d
    qNW d    n1 s0    Y  d S )Ncats)r   r   r   r   r   r^   r   r&   r  r   F)r  r  r   )r   r   r&   r'   r:   r;   r<   r   	enumerater   r  r  r  )r/   r   r>   r	  rd  blockr   r   r   test_chunked_categorical  s    

r  c           	   	   C   sX  | dddd}g d}t |dd}tt t|D ]h\}}t|j|d| d|d   ksfJ |dk r~td	d
g}ntjdgdd}t	|jj
j| q8W d    n1 s0    Y  W d    n1 s0    Y  ttF t |dd}| }W d    n1 s0    Y  W d    n1 s60    Y  t|}t|| d S )Nr!   r"   r#   stata-dta-partially-labeled.dta)r   r   r   r   r   r   r  r   r   r   r   r   r   r   )r   r:   r   r
   r  r   r  rg   Indexr  r   r   __next__r   r=   )	r(   dta_filer  r	  rd  r  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &PHr  r  )rR  r   r  c                 C   sL   | dddd}t jtdd t||d W d    n1 s>0    Y  d S )Nr!   r"   r#   r  zchunksize must be a positiver  r  )r  r  r  r   )r(   r  r  r   r   r   test_iterator_errors  s    r  c               
      s   ddgdgd   t  fddtdD } t }| j|dd	 tjg d
dd}t|ddf}t|D ]L\}}tdD ]}t	|j
| j| q|t|| j|d |d d   qlW d    n1 s0    Y  W d    n1 s0    Y  d S )Nc_labelb_labela_labelr\  c                    s"   i | ]}d | t j ddqS )r   Tr   )rg   r  )r`   rM  r  r   r   r8    rc   z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   )r  r  r  r   r   r@  r  r   )r   rg  r:   r;   r<   rg   r  r   r  r  dtypesr   r=   r  )r   r>   rJ   r	  rr  r  rd  r   r  r   test_iterator_value_labels  s    
r  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 d    n1 sv0    Y  t|}t	t
jt
jgddgd}t|j| |jd | jd ksJ |jd t| jd ksJ W d    n1 s0    Y  d S )Nc                 s   s   | ]}d | V  qdS )r   Nr   rc  r   r   r   	<genexpr>  rc   z&test_precision_loss.<locals>.<genexpr><   4   biglittler6   z&Column converted from int64 to float64r  Fr   )r&   )r   r  )r   r  )r   sumrg  r:   r;   r   r   r<   r   r   rD   r   r  r  r   float)r   r>   r  Zexpected_dtr   r   r   test_precision_loss  s    ,
,r  c              	   C   s   t g dg dgddgg dd}d|j_t }|j|| d t|| dd	}t|| t|| }t	
| }W d    n1 s0    Y  t|dd
}t|| W d    n1 s0    Y  d S )Ng~Ϛ?g9DܜJ?g>D)?g.4i(@g33333@g̤Ar  r  XYZr&   r7   r&   r  rn  r  r  )r   r&   r'   r:   r;   r<   r   r=   Zdecompress_filer!   r  r  )rn  r   r>   r  fhcontentsr   r   r   test_compression_roundtrip  s    
,r  to_infer
read_inferc                 C   s   | }t | }d| }tg dg dgddgg dd}d|j_|rHd	n|}|rTd	n|}t|8}	|j|	|d
 t|	|dd}
t|
| W d    n1 s0    Y  d S )Nr  r  r  r  r  r  r  r&   rl  r  r  )	r   r   r&   r'   r:   r;   r<   r   r=   )Zcompression_onlyr  r  rn  extr  r   Zto_compressionZread_compressionr>   r   r   r   r   test_stata_compression  s    
r  c               	   C   sf  t g dddtjdtjgg dtg dd} t }dd	d
ddd	dd}i |dddddi}t|| |d}|  t	|}|
 }||ksJ d}tjt|d, ddddi}t|| |d W d    n1 s0    Y  d}tjt|d0 ddddddi}t|| |d W d    n1 s80    Y  W d    n1 sX0    Y  d S )N)r   r   r   r   r   r   r!  g      "@)rS   rS   r   rR   rV   )rr  rM  r_  rM  rr  )fully_labelledpartially_labelledr  r  r{   r}   r   rV  )r   r!  )r  r  r  rr  rM  r_  )r   r   r   r2  zCCan't create value labels for notY, it wasn't found in the dataset.r  ZnotYrH  rI  )rS   rR   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   rd  r   )r   rD   rE   rg   r  r:   r;   r   rW  r   r2  r  r  r  r  )r"   r>   r2  rJ   rY  r	  reader_value_labelsr  r   r   r   !test_non_categorical_value_labels  s4    	
,r  c               	   C   s   t g dg dg dg dg d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 d}tt | j||d W d    n1 s0    Y  t|}| }||ksJ W d    n1 s0    Y  d S )N)r   r   r   r   r   rR   )rR   rR   r   r   rR   rR   )r   r   r   rW   rW   r   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   rH  rI  r  r   r~   )rR   r   r   r   r   r   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )r   r:   r;   r   r   r<   r   r2  )r"   r2  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g di}t }|j|| d t|dd}| }|| ksXJ d}d	d
dg }d| d| d
}tjt	|d t
|dd W d    n1 s0    Y  W d    n1 s0    Y  d S )NZrepeated_labelsZTenzMore than ten)rV   rQ   (   )rV   rV   rQ   rQ   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   r:   r;   r<   r   r2  r  r  r  r  r   )r2  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g dtdtjtjg| jdtg dd}|jjjj}|dd}|dkrZd	}n|d
krfd}t	j
| }t	|}td||gtdd}tg ddd}t X}|j|d|d t|dd}	t|j|	j t|	j| t|	j| W d    n1 s0    Y  d S )Nr  r   r   )r   r   Nr   ur   r   r   boolrw   r   )r   r'   )r   r   r   r   r  Fr8   Trt  )r   r   rg   ZNAr'   r   r   Znumpy_dtyperX  r   ZBASE_MISSING_VALUESr   r:   r;   r<   r   r  r   r   )
r   r/   r   Z
dtype_namevaluerw  Z
expected_bZ
expected_cr>   r  r   r   r   test_nullable_supportc  s,    



r  )Drq  r   r  r#  r!   r  ri  rx  ri   ru  numpyrD   r  Zpandas.core.dtypes.commonr   rA  rg   Zpandas._testingZ_testingr:   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`  rj  r  r  r  r  r  r  r  r  r  r  r  r  ZBooleanDtypeZ	Int8DtypeZ
Int16DtypeZ
Int32DtypeZ
Int64DtypeZ
UInt8DtypeZUInt16DtypeZUInt32DtypeZUInt64Dtyper  r   r   r   r   <module>   s   ,

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