U
    +ifM                    @   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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  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' dd	 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& Z0ej,-ddddddgd'd( Z1d)d* Z2d+d, Z3d-d. Z4d/d0 Z5d1d2 Z6ej,-d3ddgej,-d4ddgd5d6 Z7d7d8 Z8d9d: Z9d;d< Z:ej,-ddddddgej,-d=ej;ej<ej=ej>ej?ej@ejAejBejCg	d>d? ZDdS )@    N)datetime)is_categorical_dtype)	DataFrameSeries)ensure_index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   M/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/io/test_stata.pymixed_frame'   s    


r   c                 C   s   | dddS )Niodatastatar   )datapathr   r   r   dirpath2   s    r#   c                 C   s&   t j| d}t|dd}d|j_|S )Nstata5_114.dtaTconvert_datesindex)ospathjoinr   r'   name)r#   	dta14_114
parsed_114r   r   r   r-   7   s    r-   c                   @   s  e Zd Zejddd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d0d1 Zej	d	d
ddddgd2d3 Zd4d5 Zej	d	d
ddddgd6d7 Zd8d9 Zej	d	d
ddddgej	dd:d;d<d=gd>d? Zej	dd@dAdBdCgdDdE Zej	d	d
ddddgdFdG Zej	d	d
ddddgdHdI ZdJdK Zej	d	d
ddddgdLdM ZdNdO Z dPdQ Z!dRdS Z"dTdU Z#dVdW Z$dXdY Z%dZd[ Z&d\d] Z'ej	d	d
ddddgej	d^d_d`gdadb Z(dcdd Z)dedf Z*dgdh Z+didj Z,ej	ddkdldmgdndo Z-dpdq Z.drds Z/dtdu Z0ej	d	d
ddddgej1dvdwdx Z2dydz Z3ej	d	d
ddddgd{d| Z4ej	dd}d~gdd Z5ej	dddgdd Z6ej	dd}d~gdd Z7ej	ddddd!d=dCddmdd~dgej	dddgej	dddgej	dddgdd Z8e9e:e:dddZ;dd Z<ej	dddd d<dBddldd}dg
ej	dddgej	dddgej	dddgdd Z=dd Z>ej	d	d
ddddgdd Z?ej	d	d
ddddgdd Z@ej	d	d
dgdd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKej	dddgdd ZLdd ZMej	ddddddddgddƄ ZNddȄ ZOddʄ ZPdd̄ ZQej	d	d
ddddgdd΄ ZRddЄ ZSdd҄ ZTddԄ ZUej	d	d
ddddgddք ZVej	d	d
ddddgdd؄ ZWddڄ ZXdd܄ ZYejjZddބ Z[ej	d	dddgdd Z\dd Z]dS )	TestStataT)Zautousec                 C   s<  |ddd| _ tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d	| _	tj| j d
| _
tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d| _tj| j d | _ tj| j d!| _!tj| j d"| _"tj| j d#| _#tj| j d$| _$tj| j d%| _%tj| j d&| _&tj| j d'| _'tj| j d(| _(tj| j d)| _)tj| j d*| _*tj| j d+| _+tj| j d,| _,tj| j d-| _-tj| j d.| _.tj| j d/| _/tj| j d0| _0d S )1Nr   r    r!   zstata1_114.dtazstata1_117.dtazstata2_113.dtazstata2_114.dtazstata2_115.dtazstata2_117.dtazstata3_113.dtazstata3_114.dtazstata3_115.dtazstata3_117.dtaz
stata3.csvzstata4_113.dtazstata4_114.dtazstata4_115.dtazstata4_117.dtazstata1_encoding.dtazstata1_encoding_118.dtaz
stata5.csvzstata5_113.dtar$   zstata5_115.dtazstata5_117.dtaz
stata6.csvzstata6_113.dtazstata6_114.dtazstata6_115.dtazstata6_117.dtazstata7_115.dtazstata7_117.dtazstata8_113.dtazstata8_115.dtazstata8_117.dtazstata9_115.dtazstata9_117.dtazstata10_115.dtazstata10_117.dtazstata11_115.dtazstata11_117.dtazstata12_117.dtazstata14_118.dtazstata15.dtazstata7_111.dtazstata16_118.dtazstata1_119.dta.gzzstata13_dates.dta)1r#   r(   r)   r*   dta1_114dta1_117Zdta2_113dta2_114dta2_115dta2_117dta3_113dta3_114dta3_115dta3_117csv3dta4_113dta4_114dta4_115dta4_117dta_encodingdta_encoding_118csv14	dta14_113r,   	dta14_115	dta14_117csv15	dta15_113	dta15_114	dta15_115	dta15_117	dta16_115	dta16_117	dta17_113	dta17_115	dta17_117	dta18_115	dta18_117	dta19_115	dta19_117	dta20_115	dta20_117	dta21_117	dta22_118dta23	dta24_111	dta25_118	dta26_119stata_dates)selfr"   r   r   r   setup_method@   s\    zTestStata.setup_methodc                 C   s   t |ddS )NTr%   )r   rZ   filer   r   r   read_dta   s    zTestStata.read_dtac                 C   s   t |ddS )NT)Zparse_datesr   r\   r   r   r   r      s    zTestStata.read_csvversionr   u   v   w   Nc              	   C   sH   t dgd}t *}|j|d|d t|}t|| W 5 Q R X d S )NunitcolumnsFwrite_indexr_   )r   tmensure_cleanto_statar   assert_frame_equal)rZ   r_   Zempty_dsr)   Z	empty_ds2r   r   r   test_read_empty_dta   s
    
zTestStata.test_read_empty_dtar]   r/   r0   c                 C   sd   t | |}| |}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 )N
float_missdouble_miss	byte_missint_miss	long_missre   )	getattrr^   r   npnanastypefloat32ri   rl   rZ   r]   parsedexpectedr   r   r   test_read_dta1   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#T}td$ | 	| j
}| 	| j}| 	| j}d%d& |D }t|dksNtW 5 Q R X tj||d"d' tj||d"d' tj||d"d' d S )(N                 l   *}ai  r      i     i        r   iZli  
   r   i     i  Z
datetime_cZdatetime_big_cdateZweekly_dateZmonthly_dateZquarterly_dateZhalf_yearly_dateZyearly_datere   OTrecordalwaysc                 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NaTrv   warningscatch_warningssimplefilterr^   r1   r2   r3   lenAssertionErrorri   rl   )rZ   rz   wr-   
parsed_115
parsed_117r   r   r   test_read_dta2   sT    












"#
zTestStata.test_read_dta2r4   r5   r6   r7   c                 C   sd   t | |}| |}| | j}|tj}|d tj|d< |d tj|d< t	
|| d S )Nyearquarter)rs   r^   r   r8   rv   rt   rw   int16int8ri   rl   rx   r   r   r   test_read_dta3   s    

zTestStata.test_read_dta3r9   r:   r;   r<   c                 C   s*  t | |}| |}tjdddddgdddddgdddddgddd	ddgd
ddtjd
gdd
dtjdgdddtjdgdddtjdgdddtjdgdddtjdgg
dddddgd}|D ]d}||  }t|d |  }|dkr|}|	dj
}|j|dd}|jjd dd |||< qt|| d S )Nonetentwoninethreeeightfoursevenr   fivesix   r   r   r   	   fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledre   r   TorderedZinplace)rs   r^   r   r   rt   ru   copyZasarrayZnotnarv   _valuesset_categories
categoriesrenameri   rl   )rZ   r]   ry   rz   colorigr   catr   r   r   test_read_dta4   s>    


zTestStata.test_read_dta4c                 C   sL   |  | j}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   abcZ	abcdefghir   ZcbaZqwertywertyqwerty]    Zstrlr   yzre   Fcheck_dtype)r^   rS   r   r   ri   rl   )rZ   r   rz   r   r   r   test_read_dta12  s    	zTestStata.test_read_dta12c                 C   s  |  | j}|d d|d< tjdddddddgd	d
dtjtjtjtjgdddddddgdddddddgdddddddggddddddd gd!}|d tj|d< |jD ]}t	
|| ||  qt| j>}| }d"d#d$d%d&d'd(d)}t	|| |jd*ks
tW 5 Q R X d S )+NBytesr   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Longsre   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^   rT   rv   r   r   rt   ru   rw   rf   ri   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_labelr   )rZ   Z
parsed_118rz   r   rdrZvlZvl_expectedr   r   r   test_read_dta18)  sB    
	zTestStata.test_read_dta18c              	   C   st   t tjtjtjtjtjfgdddddgd}d|j_t .}||d  | |}t	|
d| W 5 Q R X d S )Nrn   ro   rp   rq   rr   re   r'   )r   rt   ru   r'   r+   ri   rj   rk   r^   rl   	set_indexrZ   originalr)   written_and_read_againr   r   r   test_read_write_dta5Q  s    

zTestStata.test_read_write_dta5c              	   C   s   |  | j}d|j_|jtj|_|d tj|d< |d tj|d< t 2}|	|d  | 
|}tj|d|dd W 5 Q R X d S )Nr'   r   r   FZcheck_index_type)r   r8   r'   r+   rv   rt   int32ri   rj   rk   r^   rl   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    rf   dtyper'   tcr_   Fr   )r   rt   
datetime64r   r   r'   r+   rv   r   ri   rj   rk   r^   rl   r   )rZ   r_   r   r)   r   r   r   r   test_read_write_dta10m  s     

zTestStata.test_read_write_dta10c              	   C   s<   t  *}ttjddtdd}|| W 5 Q R X d S )Nr   r   ABre   )ri   rj   r   rt   randomrandnlistrk   )rZ   r)   dfr   r   r   test_stata_doc_examples  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   abcdre   r   r   r   Frh   )rt   r   seedr   r   r   ru   locr   ri   rj   rk   rl   )rZ   r   Zdf_copyr)   r   r   r   test_write_preserves_original  s    
z'TestStata.test_write_preserves_originalc              	   C   s~   t | j}t | j}|jd }|jd }||ks4tt|tsBtt *}|j|d|d t |}t	|| W 5 Q R X d S )Nr   Frg   )
r   r=   	kreis1849r   
isinstancestrri   rj   rk   rl   )rZ   r_   rawencodedresultrz   r)   reread_encodedr   r   r   test_encoding  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 D}tt	 |
|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______re   Zb_dZ_8number astringwithmorethan32characters_r'   )r   r'   r+   rv   rt   r   ri   rj   assert_produces_warningr
   rk   r^   rl   r   )rZ   r   	formattedr)   r   r   r   r   test_read_write_dta11  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stW 5 Q R X | |}t|d| W 5 Q R X d S )N)r   r   r   r   r   r   Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeletere   r  Z _0astringwithmorethan32character_Z_1_Z_short_deleter'   Tr   r   r   r   )r   r'   r+   rv   rt   r   ri   rj   r   r   r   r
   rk   r   r   r^   rl   r   )rZ   r_   r   r  r)   r   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        )r   r   int64r'   r  )r   rt   r   r   r  r   r'   r+   rv   float64ri   rj   rk   r^   rl   r   )rZ   s1s2s3r   r  r)   r   r   r   r   test_read_write_dta13  s    


zTestStata.test_read_write_dta13r@   r,   rA   rB   c           
   	   C   s   t | |}| |}d|j_| | j}dddddg}|D ]}|| jddd||< q:|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'   byte_int_long_float_double_T)r   numericdate_tdZcoerce)errorstdr   )rs   r^   r'   r+   r   r?   _convertrv   rt   rw   r   to_datetimeri   rl   rj   rk   r   )
rZ   r]   r-   r_   ry   rz   colsr   r)   r   r   r   r   test_read_write_reread_dta14  s    



z&TestStata.test_read_write_reread_dta14rD   rE   rF   rG   c                 C   s   |  | j}|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| |}| |}t|| d S )	Nr  r  r  r  r  r  z%Y-%m-%dargs)r   rC   rv   rt   r   r   r   rw   r  applyr   strptimers   r^   ri   rl   )rZ   r]   rz   ry   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   variablere     r            zThis is a data file.)
time_stampr   r_   z29 Feb 2000 14:21)	r   r   ri   rj   rk   r   r+  r   r   )rZ   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&  re   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r+  r_   )r   ri   rj   pytestraises
ValueErrorrk   r(   r)   isfiler   )rZ   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   rt   reshapearanger'   r+   ri   rj   r  r
   rk   r^   r   r   rf   maprl   )rZ   r   r)   r   rf   Zconvert_col_namer   r   r   test_numeric_column_names1  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   rt   r;  rw   r  ru   r   r'   r+   ri   rj   rk   r^   r   rl   )rZ   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   re   Zindex_not_writtenFr   r.  )r   rt   r:  r;  r'   r+   ri   rj   rk   r^   r0  r1  KeyError)rZ   rf   r   r)   r   r   r   r   test_no_indexN  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   rt   r  r   r'   r+   ri   rj   rk   r^   rl   r   )rZ   r  r  r   r)   r   r   r   r   test_string_no_datesX  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   rt   r   r   r  r   r'   r+   ri   rj   r  r   rk   r^   r   r   r  rl   r   )	rZ   rG  r  r  r  r   r)   r   modifiedr   r   r   test_large_value_conversionb  s    

z%TestStata.test_large_value_conversionc              
   C   s   t tddddddg}d|j_t X}tt ||dd	i W 5 Q R X | 	|}|
 }d
g|_t|d| W 5 Q R X d S )Nr|   r}   r~   r   r   r   r'   r   r   Z_0)r   r   r'   r+   ri   rj   r  r
   rk   r^   r   rf   rl   r   )rZ   r   r)   r   rH  r   r   r   test_dates_invalid_columnt  s    

z#TestStata.test_dates_invalid_columnc                 C   s   t j| j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 )NS4_EDUC1.dtar   r   r   r   ZclustnumZpri_schlZpsch_numZpsch_dis)r(   r)   r*   r#   r   r   rf   rv   rt   r   r   rw   ri   rl   head)rZ   dpathr   Zdf0r   r   r   test_105  s    "zTestStata.test_105c                 C   s4   t j| jd}t|}| i ks(t|  d S )NrK  )r(   r)   r*   r#   r   value_labelsr   close)rZ   rN  r,  r   r   r   test_value_labels_old_format  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 .}||| | |}t	|
d| W 5 Q R X d S )Nr   r  Ztwri   Ztqthtyc                 S   s   i | ]
}||qS r   r   r   r   r   r   r   
<dictcomp>  s      z6TestStata.test_date_export_formats.<locals>.<dictcomp>r|   r}   r   r   r   re   r'   r~   r   r   r   )r   r   r   r'   r+   ri   rj   rk   r^   rl   r   )	rZ   rf   Zconversionsr    r   expected_valuesrz   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foore   r   r'   )	r   r'   r+   ri   rj   rk   r^   rl   r   )rZ   r   rz   r)   r   r   r   r   test_write_missing_strings  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 ]\}}|| |||< qt 6}|
j|||d | |}|d}t|| W 5 Q R X d S )Nr   r   Tr   d      i  i  il    )rG  r  r  r  s4s5s6r'   )r[  r_   )r   rt   Zbool_Zuint8Zuint16Zuint32r   r'   r+   r   r   r   r   r  ziprf   rv   ri   rj   rk   r^   r   rl   )rZ   r[  r_   rG  r  r  r  r`  ra  rb  r   rz   Zexpected_typesr   tr)   r   r   r   r   test_bool_uint  s6    	


zTestStata.test_bool_uintc              	   C   s   t | j}| }W 5 Q R X t | j}| }W 5 Q R X d}d}| D ]<\}}||ks`t||| kspt||ks|t||ksLtqLd S )N)Zvar1Zvar2Zvar3)label1label2Zlabel3)r   rH   r   rI   itemsr   )rZ   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stt|
dd  |kstqW 5 Q R X W 5 Q R X d S )
N)r   r^     r   r   r   sFr   r   )r   r   r   ri   rj   rk   r   typlistZvarlistZfmtlistrc  r6  r   )rZ   str_lensro  str_lenr   r)   srrq  	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   rn    r   r   r   ro  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   r0  r1  r2  ri   rj   rk   )rZ   rr  ro  rs  r   r4  r)   r   r   r   test_excessively_long_string  s    
z&TestStata.test_excessively_long_stringc              
   C   sD  d}t dggdgd}t *}|| t|}|j}W 5 Q R X W 5 Q R X dd tdD }|dd	 |D ]B}|| d
 }tddD ]&}	t|d
 |	 }
|
j	||	 kst
qqpttddd }
|
j	d	kst
ttddd }
|
j	dkst
ttddd }
|
j	d	kst
ttddd }
|
j	dks@t
d S )N)r   hlr   r  re   c                 S   s   g | ]}d t d|  qS ).a   )chrr   ir   r   r   r     s     z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   r~  r      z<fs      s     z.zz<ds         s        )r   ri   rj   rk   r   ZVALID_RANGErangeinsertr   r   r   structunpack)rZ   typesr   r)   r   Zvalid_rangerW  rd  offsetr  valr   r   r   test_missing_value_generator  s2    


z&TestStata.test_missing_value_generatorrJ   rK   rL   c                    s   dddddg}t d}t|j g }tdD ]&  fdd	td
D }|| q0t||d}tt| |dd}t	
|| d S )NZint8_Zint16_Zint32_Zfloat32_Zfloat64_e   r  c                    s    g | ]}t  |d    qS )r  )r   )r   jr  ri  r   r   r   2  s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r   re   TZconvert_missing)r   sortedZMISSING_VALUESri  r  appendr   r   rs   ri   rl   )rZ   r]   rf   smvr    rowrz   ry   r   r  r   test_missing_value_conversion+  s    z'TestStata.test_missing_value_conversionc                 C   s  ddddddg}ddddd	d
g}ddddddg}ddddddg}ddddddg}ddddddg}g }t 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| j	}t| j
}tj||d!d" tj||d!d" d#d$ |D }t :}d%|j_||| | |}tj|d%|d!d" W 5 Q R X d S )&Ni  r'  i'  r^  i  i  r   r   r   r   r      r   r   ;   r   r   Zdate_tcr  Zdate_twZdate_tmZdate_tqZdate_thZdate_ty   r   r   r   r      i  )rf   r   Tr   c                 S   s   i | ]}||d d qS )rL  Nr   rU  r   r   r   rV  g  s      z,TestStata.test_big_dates.<locals>.<dictcomp>r'   )r  r   r  r   r   r   r   r   r   rM   rN   ri   rl   rj   r'   r+   rk   r^   r   )rZ   yrmoddhrmmssrz   r  r  r  rf   r   r   Zdate_conversionr)   r   r   r   r   test_big_dates9  sb    2   , 



zTestStata.test_big_datesc                 C   s   |  | j}|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| jd	d
}t|| t| jd	dd}|  | j}|d j	t
jdd|d< t|| d S )Nr  r  r  r  r  r  r  r   Tr%   F)r&   Zpreserve_dtypes)r   rC   rv   rt   r   r   r   rw   r  r"  r   r#  r   rG   ri   rl   )rZ   rz   Zno_conversion
conversionr   r   r   test_dtype_conversions  s.     
   
zTestStata.test_dtype_conversionc              	   C   sX  |  | j}|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| jd	|d
}t|| dddg}|| }t| jd	|d
}t|| d}tjt|d ddg}t| jd	|d
 W 5 Q R X d}tjt|d" ddddg}t| jd	|d
 W 5 Q R X d S )Nr  r  r  r  r  r  r  r   T)r&   rf   z"columns contains duplicate entriesr.  zEThe following columns were not found in the Stata data set: not_found	not_found)r   rC   rv   rt   r   r   r   rw   r  r"  r   r#  r   rG   ri   rl   r0  r1  r2  )rZ   rz   rf   Zdropped	reorderedr4  r   r   r   test_drop_column  s4     


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 )%Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	unlabeledre   c                    s   g | ]} |  d qS r   rv   r   r   r   r   r   r     s     z6TestStata.test_categorical_writing.<locals>.<listcomp>Zaxisr'   r   Tr   r   r   )r   r   rt   ru   r   r   concatr'   r+   r"  r   rv   r   Z
as_orderedr   r   r   ri   rj   rk   r^   r   rl   )	rZ   r_   rz   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_longre   c                    s   g | ]} |  d qS r  r  r  r  r   r   r     s     zBTestStata.test_categorical_warnings_and_errors.<locals>.<listcomp>r   r  zbStata value labels for a single variable must have a combined length less than 32,000 characters\.r.  c                    s   g | ]} |  d qS r  r  r  r  r   r   r     s     )r   r   r   r  ri   rj   r0  r1  r2  rk   r  r   )rZ   r)   r4  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}|||< qt
|| W 5 Q R X d S )Nc                 S   s   g | ]}d t | gqS )r   )r   r  r   r   r   r     s     zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsre   c                    s   g | ]} |  d qS r  r  r  r  r   r   r   	  s     r   r  r'   r   Tr   )r  r  rt   ru   r   r   r   r  r'   r+   ri   rj   rk   r^   r   r   r   remove_unused_categoriesr   r   rl   )
rZ   r_   valuesr)   r   r  rz   r   r   Znew_catsr   r  r   *test_categorical_with_stata_missing_values  s&     





z4TestStata.test_categorical_with_stata_missing_valuesrO   rP   c           	      C   s  dddddddgt dfdd	dddddgt dd d d
 fdddddddgt dddddgfdddddddgt ddfdddddgt dddd
d
gfdddddddgt dfdddddddgt dfg}g }|D ]H\}}}}|r||tjj||ddf q||t|t jdf qt	
t|}t| |}t|}t|| |D ]N}t|| jrXt|| jj|| jj t|| jj|| jj qXd S )NTr   r   r   r   r  er   reverserp  Znoorderr   r   r   r   r   r   Zfloat_missingFZnolabelr   rC  r   r   g      @Zint32_mixedr   r   )rt   r;  arrayr  r   Categorical
from_codesr   rw   r   	from_dictdictrs   r   ri   rl   r   r   assert_series_equalr   codesassert_index_equalr   )	rZ   r]   rz   r  Zis_catr   rj  r  ry   r   r   r   test_categorical_order  s4    $$ 	

 
z TestStata.test_categorical_orderrQ   rR   c              
   C   s   t t| |}|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 )NZsrhfirst)Zna_positionr   rp  r   r   r   r   ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r+   )r   rs   Zsort_valuesrt   r;  shaper'   r   r  r  r   ri   r  )rZ   r]   ry   r  r   r   rz   r   r   r   test_categorical_sorting=  s      z"TestStata.test_categorical_sortingc                 C   s\   t | |}t|}t|dd}|D ]4}t|| js6q"|| jjsFt|| jjr"tq"d S )NF)order_categoricals)rs   r   r   r   r   r   r   )rZ   r]   ry   Zparsed_unorderedr   r   r   r   test_categorical_orderingN  s    
z#TestStata.test_categorical_orderingr3   rI   rN   	chunksizer   r   convert_categoricalsFr&   c              
   C   s   t | |}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   qY nX W 5 Q R X |j||| d d f 	 }| 
|}tj||
ddd	 ||7 }qV|  d S )
NTr   r   r  r&   )iteratorr  r&   r   r   Fr   r   rs   r   r   r   r   r  readStopIterationilocr   _convert_categoricalri   rl   rQ  rZ   r]   r  r  r&   fnamery   itrposr  chunk
from_framer   r   r   test_read_chunks_117Z  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    s    



zTestStata._convert_categoricalc              	   C   s@  | j }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 )NTr  r   r   r  r   )
r7   r   r  ri   rl   r  r   Z	get_chunkr   r  )rZ   r  ry   r  r  Zfrom_chunksr   r   r   test_iterator  s"    
(,
((zTestStata.test_iteratorr2   rH   rM   c              
   C   s   t | |}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   qY nX W 5 Q R X |j||| d d f 	 }| 
|}tj||
ddd	 ||7 }qV|  d S )
NTr   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   | j }dddg}d}t||d}t|ddd}d}td	D ]P}|j||d}|d krX q|j||| d d f }	tj|	|d
d ||7 }q:W 5 Q R X d S )Nr   Zcpim1r   re   Tr  r   r   Fr   )r7   r   r  r  r  ri   rl   )
rZ   r  rf   r  ry   r  r  r  r  r  r   r   r   test_read_chunks_columns  s    
z"TestStata.test_read_chunks_columnsc              
   C   s   d|j _dddd}t L}|j|||d t|}| }W 5 Q R X ddddd}||ksdtW 5 Q R X d	|d< t >}|j|||d t|}| }W 5 Q R X ||kstW 5 Q R X d S )
Nr'   	City RankCity ExponentCityr   r   r_   r   )r'   r   r   r   z	The Index)r'   r+   ri   rj   rk   r   r   r   )rZ   r_   r   r   r)   rt  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+   ri   rj   r0  r1  r2  rk   )rZ   r_   r   r   r)   r4  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  )rZ   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  )r*   r0  r1  r2  ri   rj   rk   )rZ   r   r  Zvariable_labels_utf8r4  r)   Zvariable_labels_longr   r   r    test_write_variable_label_errors3  s$    
"
z*TestStata.test_write_variable_label_errorsc                 C   s  t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}t }|j|dd t|dd}t|| |j|dddid t|dd}t|| |j	 
d}|j|d|did t|dd}t|| W 5 Q R X d S )N  r   r   .    r*  R    r   r     r   rC  r   applebananacherrynumsstrsdatesFr   Tr%   r  r   )rh   r&   )dtr   r   ri   rj   rk   r   rl   rf   tolistr'   )rZ   r  r   r)   rereaddirectZ	dates_idxr   r   r   test_default_date_conversionQ  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   r0  r1  NotImplementedErrorri   rj   rk   )rZ   r   r4  r)   r   r   r   test_unsupported_typen  s
    
zTestStata.test_unsupported_typec                 C   s  t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}d}tjt|d, t }|j|ddid W 5 Q R X W 5 Q R X t	j
dddd}tdddgdddg|d}tjtdd$ t }|| W 5 Q R X W 5 Q R X d S )Nr  r   r   r  r  r*  r  r  r   r   r  r   rC  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   r0  r1  r  ri   rj   rk   r   Z
date_range)rZ   r  r   r4  r)   r   r   r   test_unsupported_datetypev  s0    
&
z#TestStata.test_unsupported_datetypec              	   C   s0   d}t jt|d t| j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.  Tr  )r0  r1  r2  r   rU   )rZ   r4  r   r   r   test_repeated_column_labels  s    
z%TestStata.test_repeated_column_labelsc                 C   s   t | j}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   r   r   r   r   r   r   r   r  r  r   gr|  r  r  )r   r   r   r   r   r   r   r   )r   rV   r   rt   NaNri   rl   )rZ   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$ t	
 }|| W 5 Q R X W 5 Q R X tj|j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   r  aColumn ColumnTooBig has a maximum value of infinity which is outside the range supported by Stata)r   rt   finfodoubleepsmaxr0  r1  r2  ri   rj   rk   infr   )rZ   r   r4  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 tj|jd< d}tjt|d$ t	
 }|| W 5 Q R X W 5 Q R X d S )	Nr   r@  r  r'   r  r  r  r.  )r   rt   r  rw   r	  r
  r'   r+   rv   ri   rj   rk   r   r  rl   r   r  r   r0  r1  r2  )rZ   r   r   r)   r  r4  r   r   r   test_out_of_range_float  s2    


z!TestStata.test_out_of_range_floatc                 C   s6   t  }d|j_dd }t |j|}t || d S )Nr'   c                 S   s   t | dS Nr'   r   r   r7  r   r   r   r8    r9  z-TestStata.test_path_pathlib.<locals>.<lambda>)ri   makeDataFramer'   r+   Zround_trip_pathlibrk   rl   rZ   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  r7  r   r   r   r8    r9  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)ri   r  r'   r+   Zround_trip_localpathrk   rl   r  r   r   r   test_pickle_path_localpath  s
    z$TestStata.test_pickle_path_localpathrh   c              
   C   s   ddddddgi}t |d}|d d|d< t 4}|j||d t|dd	}| }W 5 Q R X W 5 Q R X |dddddd
ikstd S )NABEC)r    r   r   Tr  )r   r   r   r   )r   rv   ri   rj   rk   r   rP  r   )rZ   rh   r  r   r)   Zdta_iterrP  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)ri   r  r'   r+   rj   rk   r   rl   )rZ   r   r)   r  r   r   r   test_set_index
  s    

zTestStata.test_set_indexcolumnmsdayweekmonthZqtrZhalfr  c                 C   s:   t | j}|jd|f }|jd|d f }||ks6td S )Nr   _fmt)r   rY   r   r   )rZ   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   r   r   r   rw   r  r   r  Zs2045ZsrtlZforced_strlr   r   r'   r   ra   )r&   convert_strlr_   Fr   )r   rt   r   r   r   r   r   rv   r   rw   r'   r+   r   ri   rj   rk   r^   rl   r   )rZ   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   re   r'   ra   )r#  r_   Fr   )r   r'   r+   ri   r  r
   rj   rk   r^   r   rf   rl   )rZ   r   r)   r  r   r   r   test_convert_strl_name_swapn  s    


z%TestStata.test_convert_strl_name_swapc                 C   s   t dddddddt dddddddt dd	d
d	d
d	dg}tdddgdddg|d}t 6}d}tjt|d |j|ddid W 5 Q R X W 5 Q R X d S )Nr  r   r   r  r  r*  r  r  r   r   r  r   rC  r   r  r  r  r  z0convert_dates key must be a column or an integerr.  Z
wrong_namer   r%   )	r  r   r   ri   rj   r0  r1  r2  rk   )rZ   r  r   r)   r4  r   r   r   test_invalid_date_conversion}  s    
z&TestStata.test_invalid_date_conversionc              
   C   s   t  }t }d|j_t N}|j||d |d t	|d}|
|  W 5 Q R X t|dd}W 5 Q R X t|| d S )Nr'   r   r   wbr  )r   BytesIOri   r  r'   r+   rj   rk   seekopenwriter  r   rl   )rZ   r_   Zbior   r)   dtar  r   r   r   test_nonfile_writing  s    

zTestStata.test_nonfile_writingc              
   C   s~   t  }d|j_t  P}t|d}|j|dd W 5 Q R X t|d}t|dd}W 5 Q R X W 5 Q R X t 	|| d S )Nr'   r(  r`   r   rbr  )
ri   r  r'   r+   rj   gzipGzipFilerk   r   rl   )rZ   r   r)   gzr  r   r   r   test_gzip_writing  s    
 zTestStata.test_gzip_writingc                 C   s   |  | 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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 )Nutf8latin1asciiZ	utf8_strlZ
ascii_strlu   ραηδαςu   PÄNDÄSpu   ƤĀńĐąŜ   Ör   u   ᴘᴀᴎᴅᴀS   Ünz      r   r   ro  re   )r^   rW   r   ri   rl   )rZ   Z
unicode_dfrf   r  rz   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 |j	d d d
f< |j|dd
gdd t|}|d	}t|| W 5 Q R X d S )NA  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   r   Fra   rg   r   r=  )rh   r#  r_   )
r   r>  rv   ri   rj   rk   r   fillnarl   r   )rZ   outputr)   r  rz   r   r   r   test_mixed_string_strl  s$    

   
z TestStata.test_mixed_string_strlc              
   C   sn   dddd ddg}t |}d |jd d df< t .}tjtdd |j||d W 5 Q R X W 5 Q R X d S )Nnoner   )rB  r>  r   z Column `none` cannot be exportedr.  r   )r   r   ri   rj   r0  r1  r2  rk   )rZ   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 __½__invalidre   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   ri   rj   r0  r1  UnicodeEncodeErrorr  ResourceWarningrk   )rZ   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stqW 5 Q R X W 5 Q R X d S )Npandasr   u   þâÑÐÅ§Zvar_strZvar_strlre   ra   )r_   r#  r/  zlatin-1zutf-8s   strlsr   rL  s   GSO       )r   ri   rj   rk   r+  r  encoder   splitfindr   )
rZ   r@  r)   r  rH  rz   ZgsosZgsor  sizer   r   r   test_strl_latin1  s      
zTestStata.test_strl_latin1c              	   C   sr   d}t t8}t| j}t|dks*t|d jjd |ksBt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   u   Düsseldorfr   re   )ri   r  UnicodeWarningr   r>   r   r   messager!  r   rl   )rZ   r4  r   r   rz   r   r   r   test_encoding_latin1_118  s    
"z"TestStata.test_encoding_latin1_118c              
   C   s   t | jd}t|}W 5 Q R X |jdks0t|jd dksBt|jd dksTt|jd dksft|jd	 tt	d
dddddkstd S )Nr/  )r   i  )r   r   A  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   r   gQ	@)r   rp  r   )r   r   r  r   r*  )
r0  r+  rX   r   r  r   r  r   	Timestampr   )rZ   r2  r   r   r   r   test_stata_119  s    zTestStata.test_stata_119c              
   C   s  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 tj|d< t }t|||dg|d|d}|	  t
|}|d d|d< t|| t|}	|	j|kst|	 |kst|j||dd t
|}
t||
 W 5 Q R X d S )Nr      β   ĉTr   r   r   u   ᴬu   ᴀ relatively long ŝtringrC  r   u   ᴮr   r   r   u   ᴰstrlsre   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Strings)r   rX  rY  rZ  r[  u   ᴅaᵀa-labelF)r   r#  r   rh   r_   )r_   rh   )r   r  r   rv   rt   r   ri   rj   r   
write_filer   r?  rl   r   r   r   r   rk   )rZ   r_   r   r    r   r   r)   writerr   r,  Zreread_to_statar   r   r   test_utf8_writer  sJ    




	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.  ra   r   zYou must use version 119rb   )
r   rt   Zzerosr   ri   rj   r0  r1  r2  r   )rZ   r   r)   r   r   r   test_writer_118_exceptionsC  s    
"
z$TestStata.test_writer_118_exceptions)^__name__
__module____qualname__r0  fixturer[   r^   r   markparametrizerm   r{   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r-  r5  r=  r?  rB  rD  rI  rJ  rO  rR  rX  rZ  re  rm  ry  r{  r  r  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  r  r  r  r  r"  r$  r&  r'  r.  r3  r<  rA  rC  rI  rQ  rU  ZslowrW  r^  r_  r   r   r   r   r.   ?   sF  

@

<

-(



$ 
 



	



	 
:!3

#

$&



"
	 
G





+r.   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-z.dtaFr   )r(   r)   r*   r   ri   rl   )r_   r"   Z	data_baserefoldrz   Zold_dtar   r   r   test_backward_compatM  s    rn  ra   rb   rc   use_dictTFinferc              
   C   s  d}| r*|r| }n
t j|  }|d| 7 }| }|r6d}|rBd| i}ttjddtdd}d	|j_t	
|N}|j|||d
 | dkrt|d}	t|	 }
W 5 Q R X n| dkrt|d}	t|	|	jd }
W 5 Q R X n| dkrt|d}	t|	 }
W 5 Q R X n| dkrXtd}||d}	t|	 }
W 5 Q R X nJ| dkrtd}||d}	t|	 }
W 5 Q R X n| d kr|}
t|
d	d}t	|| W 5 Q R X d S )Nzdta_inferred_compression.dtar~  rp  methodr   r   r   re   r'   )r_   compressionr0  r/  rc  rr   bz2zstdZ	zstandardxzlzmar  )icom_compression_to_extensionr   rt   r   r   r   r'   r+   ri   rj   rk   r0  r+  r   r)  r  zipfileZipFilefilelistrt  r0  Zimportorskipr   rl   )rr  r_   ro  rp  	file_namefile_extZcompression_argr   r)   compfpru  rw  r  r   r   r   test_compressionW  sH    
"





r  rq  rc  r~  r-  c           
   
   C   s   d| }d}t tjddtdd}d|j_t|}| |d}|j	||d	 | d
ksd|d
krt
|dB}t|jdkst|jd j|kstt||jd }W 5 Q R X n|}t|dd}	t|	| W 5 Q R X d S )Ntest.ztest.dtar   r   r   re   r'   )rq  archive_namerr  rc  rs  r   r   r  )r   rt   r   r   r   r'   r+   ri   rj   rk   rz  r{  r   r|  r   filenamer   r)  r  r   rl   )
rq  r~  r}  r  r   r)   rr  Zzpr  r  r   r   r   test_compression_dict  s    

"r  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+   ri   rj   rk   r   	enumerater   r   r  r  r  )r_   r   r)   r,  r  blockr   r   r   test_chunked_categorical  s    

r  c           	   
   C   s
  t j| d}dddddg}t|dd}ttx t|D ]h\}}t|j	|d| d|d   kslt
|dk rtddg}ntjdgdd	}t|j	jj| q>W 5 Q R X W 5 Q R X tt& t|d
d}| }W 5 Q R X W 5 Q R X t|}t|| d S )Nstata-dta-partially-labeled.dtar   r   r   r   r  r   r  r   r   )r(   r)   r*   r   ri   r  r	   r  r   r  r   r   Indexr  r   r   __next__r   rl   )	r#   dta_filer  r,  r  r  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial  s    &(r  c              	   C   s   t j| d}tjtdd t|dd W 5 Q R X tjtdd t|dd W 5 Q R X tjtdd t|dd W 5 Q R X d S )Nr  zchunksize must be a positiver.  rp  r  r   r  )r(   r)   r*   r0  r1  r2  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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_labelrz  c                    s"   i | ]}d | t j ddqS )r   Tr   )r   r  )r   rk  r  r   r   rV    s      z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   r   r   r^  r  r   )r   r  ri   rj   rk   r   r  r   r  r  dtypesr   rl   r  )r   r)   rz   r,  r  r  r  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 5 Q R X t|}t	t
jt
jgddgd}t|j| |jd | jd kst|jd t| jd kstW 5 Q R X d S )Nc                 s   s   | ]}d | V  qdS )r   Nr   r  r   r   r   	<genexpr>  s     z&test_precision_loss.<locals>.<genexpr><   4   biglittlere   z&Column converted from int64 to float64r.  Fr   )r'   )r   r  )r   r  )r   sumr  ri   rj   r  r   rk   r   r   rt   r  r  r  r   r   float)r   r)   r  Zexpected_dtr   r   r   test_precision_loss  s    ,
 r  c              
   C   s   t dddgdddggddgd	d
dgd}d|j_t l}|j|| d t|| dd}t|| t|| }t	
| }W 5 Q R X t|dd}t|| W 5 Q R X d S )N翶~Ϛ?9DܜJ?>D)?.4i(@33333@̤Ar  r  XYZr'   rf   r'   r  rr  r  r  )r   r'   r+   ri   rj   rk   r   rl   Zdecompress_filer   r)  r  )rr  r   r)   r  fhcontentsr   r   r   test_compression_roundtrip  s    
r  to_infer
read_inferc              	   C   s   | }t j| }d| }tdddgdddggdd	gd
ddgd}d|j_|rPdn|}|r\dn|}t|.}	|j|	|d t|	|dd}
t	|
| W 5 Q R X d S )Nr  r  r  r  r  r  r  r  r  r  r  r  r  r'   rp  r  r  )
rx  ry  r   r'   r+   ri   rj   rk   r   rl   )Zcompression_onlyr  r  rr  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st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   rC  g      "@r   r   r   r   r  rk  r}  )fully_labelledpartially_labelledr  r  r   r   r   )r   r   r   )r   rC  )r  r  r  )r   r   r   rP  zCCan't create value labels for notY, it wasn't found in the dataset.r.  ZnotYrf  rg  )r   r   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   r  r   )r   rt   ru   r   r  ri   rj   r   r\  r   rP  r   r0  r1  rA  r2  )r    r)   rP  rz   r]  r,  reader_value_labelsr4  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stW 5 Q R X d S )Nr   r   r   r   r   r   r   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   rf  rg  r  r   r   )r   r   r   r   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )	r   ri   rj   r  r
   rk   r   rP  r   )r    rP  rz   r)   r,  r  r   r   r   0test_non_categorical_value_label_name_conversion4  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)r   r   (   r   r   r  r  Fr  zQ--------------------------------------------------------------------------------

z
Value labels for column a    are not unique. These cannot be converted to
pandas categoricals.

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

The repeated labels are:
r.  T)r   ri   rj   rk   r   rP  r   r*   r0  r1  r2  r   )rP  r    r)   r,  r  r   Zrepeatsr4  r   r   r   ;test_non_categorical_value_label_convert_categoricals_errorY  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   rC  r   r   r   r   r   r   ur   r  r   boolr   )r   r+   r   r  Frg   Tr  )r   r   r   ZNAr+   r   r   Znumpy_dtypereplacer   ZBASE_MISSING_VALUESr   ri   rj   rk   r   r  r   r   )
r   r_   r   Z
dtype_namevaluer  Z
expected_bZ
expected_cr)   r  r   r   r   test_nullable_support  s,    

r  )Ert  r   r  r0  r   r(   r  r   rz  numpyrt   r0  Zpandas.core.dtypes.commonr   rJ  r   Zpandas._testingZ_testingri   Zpandas.core.framer   r   Zpandas.core.indexes.apir   Zpandas.io.commoncommonrx  Zpandas.io.parsersr   Zpandas.io.statar	   r
   r   r   r   r   r   r   r   rc  r   r#   r-   r.   rd  re  rn  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   ,

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