a
    Pfh                    @   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  mZ d dlZd dlmZ d dlmZ d dlmZ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+dd Z,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)*d0ddgej)*d1ddgd2d3 Z6d4d5 Z7d6d7 Z8d8d9 Z9ej)*dg dej)*d:ej:ej;ej<ej=ej>ej?ej@ejAejBg	d;d< ZCd=d> ZDdS )?    N)datetime)CategoricalDtype)	DataFrameSeries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   S/var/www/ai-form-bot/venv/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'   1   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g d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 d0d1d2 Zejdg d3d4d5 Zejdg dd6d7 Zejdg dd8d9 Zd:d; Zejdg dd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'ejdg dejdNdOdPgdQdR Z(dSdT Z)dUdV Z*dWdX Z+dYdZ Z,ejdg d[d\d] Z-d^d_ Z.d`da Z/dbdc Z0ejdg dej1dddedf Z2dgdh Z3ejdg ddidj Z4ejddkdlgdmdn Z5ejddodpgdqdr Z6ejddkdlgdsdt Z7ej1duejdg dvejdwdxdygejdzd{d|gejd}d{d|gd~d Z8e9e:e:dddZ;dd Z<ej1duejdg dejdwdxdygejdzd{d|gejd}d{d|gdd Z=dd Z>ejdg ddd Z?ejdg ddd Z@ejdddgdd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIejdeJjKeJjK gdd ZLdd ZMdd ZNejdd|d{gdd ZOdd ZPejdg ddd ZQdd ZRdd ZSdd ZTejdg ddd ZUdd ZVdd ZWdd ZXejdg ddd ZYejdg dddÄ ZZddń Z[ddǄ Z\ejj]ddɄ Z^ejdg dʢdd̄ Z_dd΄ Z`ejddejadebcdѡdҍgddԄ ZddS )	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_dtaA   s
    
zTestStata.test_read_empty_dtac                 C   sx  t tjdgtjdtjdgtjdtjdgtjdtjdgtjdtjdgtjdtjdgtjdtjdgtj	dtjdgtj
dtjdgtjdtjdgtjdd
}| }|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d tj|d< t D}|j|d	|d
 t|}t|| t|j|j W d    n1 sj0    Y  d S )Nr   dtype)
i8Zi16Zi32i64u8u16u32u64Zf32Zf64rB   rC   rD   rE   rA   Fr6   )r   nparrayint8int16int32int64uint8uint16uint32Zuint64float32float64copyastyper8   r9   r:   r   r;   assert_series_equaldtypes)r*   r-   Zempty_df_typedexpectedr<   Zempty_rereadr   r   r   test_read_empty_dta_with_dtypesJ   s0    
z)TestStata.test_read_empty_dta_with_dtypesc                 C   s   t tdg dd}t (}|j|d|d t|}W d    n1 sL0    Y  t|jtj	shJ |
 }|d tj|d< tj||dd d S )	N   )b1b2Zb3Zb4Zb5r   r   Fr6   r   TZcheck_index_type)r   ranger8   r9   r:   r   
isinstancer$   pd
RangeIndexrQ   rR   rF   rJ   r;   )r*   r-   dfr<   Zread_dfrU   r   r   r   test_read_index_col_nonem   s    
&z"TestStata.test_read_index_col_noner+   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_missr4   re   )r,   r   rF   nanrR   rO   r8   r;   r*   r+   r&   parsedrU   r   r   r   test_read_dta1z   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< |dddd}|dddd }|dddd!}tt | 	|}W d    n1 s<0    Y  tt | 	|}W d    n1 sr0    Y  tt | 	|}W d    n1 s0    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_dater4   rw   Or   r    r!   zstata2_114.dtazstata2_115.dtazstata2_117.dtaTcheck_datetimelike_compat)r   from_recordsr   r^   NaTrR   r8   assert_produces_warningUserWarningr,   r;   )	r*   r&   rU   Zpath1Zpath2Zpath3r'   
parsed_115
parsed_117r   r   r   test_read_dta2   sH    












"#***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!   rc   
stata3.csvyearquarter)	r,   r   rR   rF   rO   rI   rH   r8   r;   rg   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!   rc   )onetenr   r   r   )twoniner   r   r   )threeeightr   r   r   )foursevenr   r   r   fivesixrW   ru   r   r   rq   r   r   rp   r   r   	   r   r   )fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr4   r   r   categoryTorderedZinplace)r,   r   r{   rF   rf   rQ   ZasarrayZnotnarR   _valuesset_categories
categoriesrenamer8   r;   )	r*   r+   r&   rh   rU   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)xyzr4   Fcheck_dtype)r,   r   r{   r8   r;   )r*   r&   r   rU   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Bytesrx   )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   Longsr4   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,   rR   r   r{   rF   rf   rO   r5   r8   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_label)r*   r&   Z
parsed_118rU   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 | |}W d    n1 sd0    Y  |	 }|j
tj|_t|d| d S )Nrd   r4   r$   r"   )r   rF   rf   r$   r%   r8   r9   r:   r,   rQ   rR   rJ   r;   	set_index)r*   originalr<   written_and_read_againrU   r   r   r   test_read_write_dta5=  s    
(zTestStata.test_read_write_dta5c                 C   s   |  |dddd}d|j_|jtj|_|d tj|d< |d tj|d< t >}|j|d d | 	|}tj
|d|d	d
 W d    n1 s0    Y  d S )Nr   r    r!   r   r$   r   r   r"   Fr[   )r   r$   r%   rR   rF   rJ   r8   r9   r:   r,   r;   r   )r*   r&   r   r<   r   r   r   r   test_write_dta6L  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    r5   r>   r$   r   r   tcr#   r-   Fr[   )r   rF   
datetime64r   r   r$   r%   rR   rJ   r8   r9   r:   r,   r;   r   )r*   r-   r   r<   r   r   r   r   test_read_write_dta10\  s     

zTestStata.test_read_write_dta10c                 C   sT   t  8}ttjddtdd}|| W d    n1 sF0    Y  d S )Nr   rt   r   ABr4   )	r8   r9   r   rF   randomdefault_rngstandard_normallistr:   )r*   r<   r`   r   r   r   test_stata_doc_examplesq  s
    
z!TestStata.test_stata_doc_examplesc                 C   s   t tjddtdd}tj|jdddf< | }t	
 }|j|dd W d    n1 sf0    Y  t	|| d S )	Nr   )rW   r   abcdr4   r   r   Fr7   )r   rF   r   r   r   r   rf   locrQ   r8   r9   r:   r;   )r*   r`   Zdf_copyr<   r   r   r   test_write_preserves_originalx  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   Fr6   )r   	kreis1849r]   strr8   r9   r:   r;   )	r*   r-   r&   rawencodedresultrU   r<   reread_encodedr   r   r   test_encoding  s    


zTestStata.test_encodingc              	   C   s   t dgg dd}t dgg dd}d|j_|tj}t R}tt	 |j
|d d W d    n1 sp0    Y  | |}W d    n1 s0    Y  | }|jtj|_t|d| d S )Nr   )goodu   bädZ8numberZ%astringwithmorethan32characters______r4   )r   Zb_dZ_8number astringwithmorethan32characters_r$   r"   r   r$   r%   rR   rF   rJ   r8   r9   r}   r	   r:   r,   rQ   r;   r   )r*   r   	formattedr<   r   rU   r   r   r   test_read_write_dta11  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}tt	  |j
|d |d W d    n1 sr0    Y  | |}W d    n1 s0    Y  | }|jtj|_t|d| d S )Nr   r   r   r   rW   ru   )Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-shortdeleter4   )r   Z _0astringwithmorethan32character_Z_1_Z_short_deleter$   r   r   )r*   r-   r   r   r<   r   rU   r   r   r   test_read_write_dta12  s"    
.(zTestStata.test_read_write_dta12c           	      C   s   t dtjd}t dtjd}t dtjd}t|||d}d|j_|}|d tj	|d< t
 $}|| | |}W d    n1 s0    Y  | }|jtj|_t
|d| d S )Ni   r>   i   l        )rI   rJ   rK   r$   rK   )r   rF   rI   rJ   rK   r   r$   r%   rR   rP   r8   r9   r:   r,   rQ   r;   r   )	r*   s1s2s3r   r   r<   r   rU   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_t|| t .}|j|ddi|d |  |}W d    n1 sn0    Y  | }|jt	j
|_t|d| d S )	Nr   r    r!   rc   r$   date_tdtdr   )r,   r$   r%   r8   r;   r9   r:   rQ   rR   rF   rJ   r   )	r*   r+   r'   r-   r&   rh   r<   r   rU   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.csvbyte_int_long_float_double_r   z%Y-%m-%dargsrc   )r   rR   rF   rH   rI   rJ   rO   rP   applyr   strptimer,   r8   r;   )r*   r+   r&   rU   rh   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   variabler4     r            zThis is a data file.)
time_stampr   r-   z29 Feb 2000 14:21)r   r   r8   r9   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  r4   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)r
  r-   )
r   r8   r9   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 N}tt	 |
| W d    n1 sR0    Y  | |}W d    n1 sz0    Y  |d}t|j}dd }t|||_| }|jtj|_t|| d S )Ng      9@)rW   rW   r$   c                 S   s   t | d S )Nr   )intr   r   r   r   <lambda>1      z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rF   reshapearanger$   r%   r8   r9   r}   r	   r:   r,   r   r   r5   maprQ   rR   rJ   r;   )r*   r   r<   r   r5   Zconvert_col_namerU   r   r   r   test_numeric_column_names%  s    
((

z#TestStata.test_numeric_column_namesc                 C   s   t tdtjd}t tdtjd}tj|d d d< tj|dd d< t||d}d|j_t	
 (}|j||d | |}W d    n1 s0    Y  |d}| }|jtj|_t	|| d S )Nr   r>   r   r   r   r   r$   r-   )r   rF   r  rO   rP   rf   r   r$   r%   r8   r9   r:   r,   r   rQ   rR   rJ   r;   )r*   r-   r   r   r   r<   r   rU   r   r   r   test_nan_to_missing_value8  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 )
Nr   r         $@)rW   r   r4   Zindex_not_writtenFr   r  )r   rF   r  r  r$   r%   r8   r9   r:   r,   r  r  KeyError)r*   r5   r   r<   r   r   r   r   test_no_indexJ  s    

zTestStata.test_no_indexc                 C   s   t ddg}t ddgtjd}t||d}d|j_t $}|| | 	|}W d    n1 sf0    Y  |
 }|jtj|_t|d| d S )Nr   zA longer stringr          @r>   r  r$   )r   rF   rP   r   r$   r%   r8   r9   r:   r,   rQ   rR   rJ   r;   r   )r*   r   r   r   r<   r   rU   r   r   r   test_string_no_datesT  s    

(zTestStata.test_string_no_datesc           	   	   C   s8  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	 N}t
t || W d    n1 s0    Y  | |}W d    n1 s0    Y  | }t |d	 tjd|d	< t |d
 tjd|d
< t |d tjd|d< |jtj|_t|d| d S )Nr   c   r>      i  l    )s0r   r   r   r$   r   r   r   )r   rF   rH   rI   rK   r   r$   r%   r8   r9   r}   r
   r:   r,   rQ   rJ   rP   rR   r;   r   )	r*   r(  r   r   r   r   r<   r   modifiedr   r   r   test_large_value_conversiona  s     
((z%TestStata.test_large_value_conversionc              	   C   s   t tddddddg}d|j_t V}tt" |j|dd	id
 W d    n1 s\0    Y  | 	|}W d    n1 s0    Y  |
 }dg|_|jtj|_t|d| d S )Nrj   rk   rl   rm   rn   ro   r$   r   r   r"   Z_0)r   r   r$   r%   r8   r9   r}   r	   r:   r,   rQ   r5   rR   rF   rJ   r;   r   )r*   r   r<   r   r)  r   r   r   test_dates_invalid_columnu  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/  r0  r1  r   )r   r   r5   rR   rF   rI   rH   rO   r8   r;   head)r*   r&   dpathr`   Zdf0r   r   r   test_105  s    
zTestStata.test_105c                 C   sJ   |dddd}t | }| i ks(J W d    n1 s<0    Y  d S )Nr   r    r!   r,  )r   value_labels)r*   r&   r3  r  r   r   r   test_value_labels_old_format  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tjdgtjd
d|d}t	
 (}|j||d | |}W d    n1 s0    Y  t	|d
| d S )N)r   r   Ztwr8   Ztqthtyc                 S   s   i | ]
}||qS r   r   .0r   r   r   r   
<dictcomp>  r  z6TestStata.test_date_export_formats.<locals>.<dictcomp>rj   rk   ro   rm   rn   r4   r$   rl   r   rt   rq   r   r?   r%   r$   r5   r"   )r   lenr   r$   r%   r^   IndexrF   rJ   r8   r9   r:   r,   r;   r   )	r*   r5   Zconversionsr    r   expected_valuesrU   r<   r   r   r   r   test_date_export_formats  s,    







(z"TestStata.test_date_export_formatsc                 C   s   t dgd ggdgd}t dgdggtjddgtjdddgd	}t $}|| | |}W d    n1 sr0    Y  t	|
d| d S )
N1Zfoor4   r   r   r   r$   r<  r=  )r   r^   r?  rF   rJ   r8   r9   r:   r,   r;   r   )r*   r   rU   r<   r   r   r   r   test_write_missing_strings  s    


(z$TestStata.test_write_missing_strings	byteorder><c              	   C   s\  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_|
	 }|
j
tj|_tjtjtjtjtjtjtjf}t|j|D ]\}}|| 
|||< qt *}|
j|||d | |}W d    n1 s80    Y  |d
}t|| 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$   )rD  r-   )r   rF   Zbool_rL   rM   rN   r   r$   r%   rQ   rR   rJ   rH   rI   rP   zipr5   r8   r9   r:   r,   r   r;   )r*   rD  r-   r(  r   r   r   rI  rJ  rK  r   rU   Zexpected_typesr   tr<   r   r   r   r   test_bool_uint  s8    	
*
zTestStata.test_bool_uintc           	      C   s   t |dddd}| }W 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|r}|  t|j	|j
|jD ]F\}}}	t|dd  t|dd	 ksJ t|dd  |	ks|J q|W d    n1 s0    Y  W d    n1 s0    Y  d S )
N)r   rG     r   r   r   sFr   r   )r   r   r   r8   r9   r:   r   _ensure_openrL  Z_varlistZ_fmtlistZ_typlistr  )
r*   str_lensrX  str_lenr   r<   srr  fmttypr   r   r   test_minimal_size_col  s    

$zTestStata.test_minimal_size_colc              	   C   s   d}i }|D ]*}t d| d| d| g|dt| < qt|}d}tjt|dB t }|| W d    n1 s|0    Y  W d    n1 s0    Y  d S )N)r   rW    r   r   r   rX  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  r8   r9   r:   )r*   r[  rX  r\  r   r  r<   r   r   r   test_excessively_long_string  s    
z&TestStata.test_excessively_long_stringc              	   C   sl  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 ]@}|| d
 }t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sDJ tt
ddd }
|
j	dkshJ d S )N)r   hlr   r   r4   c                 S   s   g | ]}d t d|  qS ).a   )chrr:  ir   r   r   
<listcomp>   r  z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   re  r      z<fs      s     z.zz<ds         s        )r   r8   r9   r:   r   ZVALID_RANGEr\   insertr   r   structunpack)r*   typesr`   r<   r   Zvalid_ranger@  rM  offsetri  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   rl  c                    s    g | ]}t  |d    qS )rl  )r   )r:  jri  rR  r   r   rj  ?  r  z;TestStata.test_missing_value_conversion.<locals>.<listcomp>rW   r4   r   r    r!   rc   TZconvert_missing)
r   sortedZMISSING_VALUESrR  r\   appendr   r   r8   r;   )	r*   r+   r&   r5   smvr    rowrU   rh   r   rx  r   test_missing_value_conversion8  s    z'TestStata.test_missing_value_conversionc                 C   s  g d}g d}g d}g d}g d}g d}g }t ||||||D ]|\}	}
}}}}g }tdD ]T}|dkr|t|	|
|||| qb|dkr|t|	d	d	 qb|t|	|
| qb|| qF|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	 0}d!|j_|j||d" | |}W d    n1 sn0    Y  t	j
|d!||jtjdd d S )#N)i  r  '  rG      )r   r   rr   r   r   r   )r   r   rs   r      rm   )r   r   rm   r   r   r   )r   r   ;   r   r   r   rq   r   ru   r   )Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_tyr  rr      r   r   rt   r   rW   r     r  i  )r5   r?   r   r    r!   zstata9_115.dtazstata9_117.dtaTry   c                 S   s   i | ]}||d d qS )r-  Nr   r9  r   r   r   r;  v  r  z,TestStata.test_big_dates.<locals>.<dictcomp>r$   r"   )rL  r\   r{  r   r^   r|   r   r   r   r8   r;   r9   r$   r%   r:   r,   r   rR   rF   rJ   )r*   r&   yrmoddhrmmssrU   r   monthdayhourminutesecondr}  rw  r5   r   r   Zdate_conversionr<   r   r   r   r   test_big_datesH  sT    "  , 
*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   rR   rF   rH   rI   rJ   rO   rP   r  r   r  r   r8   r;   )r*   r&   rU   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#   r5   )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   rR   rF   rH   rI   rJ   rO   rP   r  r   r  r   r8   r;   r  r  r  )r*   r&   rU   r5   ZdroppedZ	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 |jd	t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" | |}W d    n1 sz0    Y  |d}t|| 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   rW   ru   r   r   rq   r   r   rp   r   r   r   r   r   rt   )r   r   r   r   r   	unlabeledr4   c                    s   g | ]} |  d qS r   rR   r:  r   r   r   r   rj    r  z6TestStata.test_categorical_writing.<locals>.<listcomp>r   Zaxisr$   r   r  r   Tr   r   r  )r   r{   rF   rf   rQ   r^   concatr$   Z	set_namesrR   rJ   r  r   r   
as_orderedr   r   r   r8   r9   r:   r,   r   r;   )	r*   r-   rU   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_longr4   c                    s   g | ]} |  d qS r  r  r  r  r   r   rj    r  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   rj  !  r  )r   r{   r^   r  r8   r9   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
 (} j||d
 | |}W d    n1 s0    Y  |d	}  }|D ].}|| j}| j}	|j|	dd}|||< q|jtj|_t
|| d S )Nc                 S   s   g | ]}d t | gqS )r   )r   rh  r   r   r   rj  *  r  zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr4   c                    s   g | ]} |  d qS r  r  r  r  r   r   rj  .  r  r   r  r$   r  Tr   )r\   r{  rF   rf   r   r{   r^   r  r$   r%   r8   r9   r:   r,   r   rQ   r   remove_unused_categoriesr   r   rR   rJ   r;   )
r*   r-   valuesr<   r   r  rU   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 ]P}t|| jtr.t|| jj|	| jj t|| jj|	| jj q.d S )NTr   r   r   r   r  erW   reverserY  Znoorder)r   r   r   r   r   r   r   Zfloat_missing)r   r  r  )r   r   r   rY  rY  FZnolabel)r   r$  r   r   g      @Zint32_mixed)r  r   r  r   r   r   r>   r   r    r!   rc   )rF   r  rG   r{  r^   Categorical
from_codesr   rO   r   	from_dictdictr   r8   r;   r]   r?   r   rS   r   codesassert_index_equalr   )
r*   r+   r&   rU   colsZis_catr   rS  r  rh   r   r   r   test_categorical_order@  s2    	z TestStata.test_categorical_orderstata11_115stata11_117c                 C   sx   t |ddd| d}|jddd}tt||_g d}g d	}tjj||d
d}t|dd}t	
||d  d S )Nr   r    r!   rc   Zsrhfirst)Zna_position)
rY  rY  r   r   r   r   r   r   r   r   )ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r%   )r   Zsort_valuesr^   r_   r>  r$   r  r  r   r8   rS   )r*   r+   r&   rh   r  r   r   rU   r   r   r   test_categorical_sortingd  s    z"TestStata.test_categorical_sortingc                 C   sh   |ddd| d}t |}t |dd}|D ]6}t|| jtsBq,|| jjsRJ || jjr,J q,d S )Nr   r    r!   rc   F)order_categoricals)r   r]   r?   r   r   r   )r*   r+   r&   rh   Zparsed_unorderedr   r   r   r   test_categorical_orderingu  s    z#TestStata.test_categorical_orderingzignore::UserWarning)rb   Z
stata2_117r   r   r   r   Z
stata7_117ru  Z
stata9_117r  r  	chunksizer   r   convert_categoricalsFTr#   c              
   C   s   |ddd| d}t |||d}t |d||d}d}	td	D ]n}
z||}W n tyj   Y  qY n0 |j|	|	| d d f  }| |}tj||d
dd |	|7 }	q@W d    n1 s0    Y  d S )Nr   r    r!   rc   r  r#   T)iteratorr  r#   r   rW   Fr   rz   	r   r\   readStopIterationilocrQ   _convert_categoricalr8   r;   r*   r+   r  r  r#   r&   fnamerh   itrposrw  chunk
from_framer   r   r   test_read_chunks_117  s2    
zTestStata.test_read_chunks_117)r  returnc                 C   sZ   | D ]P}| | }t |jtr|j }|jjtkrLtj	|jj}|
|}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )r]   r?   r   r   r  r   r   r^   r?  Z_with_inferr   )r  r   Zserr   r   r   r   r   r    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  rW   r   r  r   )	r   r  r8   r;   r  r   Z	get_chunkr^   r  )r*   r&   r  rh   r  r  Zfrom_chunksr   r   r   test_iterator  s"    
<@
>>*zTestStata.test_iterator)
Z
stata2_115r   r   r   r   Z
stata7_115rt  Z
stata9_115r  r  c              
   C   s   |ddd| d}t |||d}t |d||d}d}	td	D ]n}
z||}W n tyj   Y  qY n0 |j|	|	| d d f  }| |}tj||d
dd |	|7 }	q@W d    n1 s0    Y  d S )Nr   r    r!   rc   r  T)r  r#   r  r   rW   Fr  r  r  r   r   r   test_read_chunks_115  s2    
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  )r   Zcpim1r   r4   Tr  r   rW   Fr   )r   r\   r  r  r8   r;   )r*   r&   r  r5   r  rh   r  r  rw  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%   r8   r9   r:   r   r   )r*   r-   r   r   r<   r]  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%   r8   r9   r  r  r  r:   )r*   r-   r   r   r<   r  r   r   r   test_invalid_variable_labels6  s    
z&TestStata.test_invalid_variable_labelsr/   r0   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_encodingA  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  r8   r9   r:   )r*   r   r  Zvariable_labels_utf8r  r<   Zvariable_labels_longr   r   r    test_write_variable_label_errorsN  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  rr   rs   .    r	  R    rq   r     r   r$  r   applebananaZcherryZnumsstrsdatesFr   Tr"   r  r   )r7   r#   )dtr   r   r8   r9   r:   r   r;   r5   tolistr$   )r*   r  r   r<   rereaddirectZ	dates_idxr   r   r   test_default_date_conversionl  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  NotImplementedErrorr8   r9   r:   )r*   r   r  r<   r   r   r   test_unsupported_type  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  rr   rs   r  r  r	  r  r  rq   r   r  r  r  r  zFormat %tC not implementedr  r  ZtCr"   z1-1-1990r   zAsia/Hong_Kong)periodstzzData type datetime64)r  r   r   r  r  r  r8   r9   r:   r^   
date_range)r*   r  r   r  r<   r   r   r   test_unsupported_datetype  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_labels  s    
z%TestStata.test_repeated_column_labelsc                 C   s   t |dddd}tdddddddtjddg
ddddtjd	dd
ddg
dtjd
dd	d	ddddg
g dd}|g d }t|| d S )Nr   r    r!   zstata7_111.dtar   r   r   r   r   rW   ru   )
r   r   r   r  r  r   grc  ri  rw  )r   r   wr   )r   r   rF   rf   r8   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   rF   finfodoubleepsmaxr  r  r  r8   r9   r:   )r*   r`   r  r<   r   r   r   test_out_of_range_double  s    
z"TestStata.test_out_of_range_doublec                 C   s   t dttjjttjjd gdttjjttjjgd}d|j_|D ]}|| tj||< qRt	
 "}|| t|}W d    n1 s0    Y  |d tj|d< | }|jtj|_t	|d| d S )Nr   r!  r  r$   r  )r   rF   r   rO   r  r  r$   r%   rR   r8   r9   r:   r   rP   rQ   rJ   r;   r   )r*   r   r   r<   r  rU   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  r8   r9   r:   )r*   r  r`   r  r<   r   r   r   test_inf  s    
zTestStata.test_infc                 C   sr   t dtdd tjtdtdtjdd tdD tdd	}d
|j	_
dd }t|j|}t|| d S )Nr   r     r   ABCDr>   c                 S   s   g | ]}d | qS zi-r   rh  r   r   r   rj    r  z/TestStata.test_path_pathlib.<locals>.<listcomp>r	  r5   r$   r$   c                 S   s   t | dS Nr$   r   r   r  r   r   r   r    r  z-TestStata.test_path_pathlib.<locals>.<lambda>)r   rF   r  r  r^   r?  r   r   r\   r$   r%   r8   Zround_trip_pathlibr:   r;   r*   r`   r  r   r   r   r   test_path_pathlib
  s    zTestStata.test_path_pathlibc                 C   sr   t dtdd tjtdtdtjdd tdD tdd	}d
|j	_
dd }t|j|}t|| d S )Nr   r  r  r
  r>   c                 S   s   g | ]}d | qS r  r   rh  r   r   r   rj    r  z8TestStata.test_pickle_path_localpath.<locals>.<listcomp>r	  r  r$   c                 S   s   t | dS r  r  r  r   r   r   r    r  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)r   rF   r  r  r^   r?  r   r   r\   r$   r%   r8   Zround_trip_localpathr:   r;   r  r   r   r   test_pickle_path_localpath  s    z$TestStata.test_pickle_path_localpathr7   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   rR   r8   r9   r:   r   r5  )r*   r7   r  r`   r<   Zdta_iterr5  r   r   r   test_value_labels_iterator   s    

Dz$TestStata.test_value_labels_iteratorc                 C   s   t dtdd tjtdtdtjdd tdD tdd	}d
|j	_
t &}|| t|d
d}W d    n1 s0    Y  t|| d S )Nr   r  r  r
  r>   c                 S   s   g | ]}d | qS r  r   rh  r   r   r   rj  2  r  z,TestStata.test_set_index.<locals>.<listcomp>r	  r  r$   	index_col)r   rF   r  r  r^   r?  r   r   r\   r$   r%   r8   r9   r:   r   r;   )r*   r`   r<   r  r   r   r   test_set_index-  s    

*zTestStata.test_set_indexcolumn)msr  weekr  Z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   rH   rI   rJ   rO   rP   r   r   Zs2045Zsrtlforced_strlr   r>   rH   rI   rJ   rO   r$   r   r   r   r0   )r#   convert_strlr-   Fr[   )r   rF   r   r   r   rH   rI   rR   rJ   rO   r$   r%   rQ   r8   r9   r:   r,   r;   r   )r*   r   rQ   r<   r   r   r   r   test_writer_117N  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   r4   r$   r#  r   r0   )r!  r-   Fr[   )r   r$   r%   r8   r}   r	   r9   r:   r,   r   r5   r;   )r*   r   r<   r  r   r   r   test_convert_strl_name_swap  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  rr   rs   r  r  r	  r  r  rq   r   r  r  r  r  z0convert_dates key must be a column or an integerr  Z
wrong_namer   r"   )	r  r   r   r8   r9   r  r  r  r:   )r*   r  r   r<   r  r   r   r   test_invalid_date_conversion  s    
z&TestStata.test_invalid_date_conversionc              	   C   s   t  }tdtdd tjtdt	dtjdd t
dD t	dd	}d
|j_t l}|j||d |d t|d}||  W d    n1 s0    Y  t|d
d}W d    n1 s0    Y  t|| d S )Nr   r  r  r
  r>   c                 S   s   g | ]}d | qS r  r   rh  r   r   r   rj    r  z2TestStata.test_nonfile_writing.<locals>.<listcomp>r	  r  r$   r  r   wbr  )r   BytesIOr   rF   r  r  r^   r?  r   r   r\   r$   r%   r8   r9   r:   seekopenwriter  r   r;   )r*   r-   bior`   r<   dtar  r   r   r   test_nonfile_writing  s    

,*zTestStata.test_nonfile_writingc              	   C   s   t dtdd tjtdtdtjdd tdD tdd	}d
|j	_
t }t|d}|j|dd W d    n1 s0    Y  t|d}t|d
d}W d    n1 s0    Y  W d    n1 s0    Y  t|| d S )Nr   r  r  r
  r>   c                 S   s   g | ]}d | qS r  r   rh  r   r   r   rj    r  z/TestStata.test_gzip_writing.<locals>.<listcomp>r	  r  r$   r&  r/   r  rbr  )r   rF   r  r  r^   r?  r   r   r\   r$   r%   r8   r9   gzipGzipFiler:   r   r;   )r*   r`   r<   gzr  r   r   r   test_gzip_writing  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pr6  r7  )   ƤĀńĐąŜ   Ör   r8  r   )   ᴘᴀᴎᴅᴀS   Ünr:  r<  )      r=  r  r=  r  ) r   r   r>  r   )r   r   rX  r   rX  )r   r   r>  r   r>  r4   )r,   r   r8   r;   )r*   r&   Z
unicode_dfr5   r  rU   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   rJ   Fr0   r6   r   r@  )r7   r!  r-   )	r   rA  rR   r8   r9   r:   r   fillnar;   )r*   outputr<   r  rU   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   )rE  rA  r   z Column `none` cannot be exportedr  r  )r   r8   r9   r  r  r  r:   )r*   r-   rC  r<   r   r   r   test_all_none_exception  s    
z!TestStata.test_all_none_exceptionc              	   C   s   d}t |gdgd}t Z}d}d}tjt| d| d || W d    n1 s^0    Y  W d    n1 s|0    Y  d S )Nu9   Here is one __�__ Another one __·__ Another one __½__invalidr4   z\'latin-1' codec can't encode character '\\ufffd' in position 14: ordinal not in range\(256\)zP'ascii' codec can't decode byte 0xef in position 14: ordinal not in range\(128\)|r  )r   r8   r9   r  r  UnicodeEncodeErrorr:   )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   þâÑÐÅ§Zvar_strZvar_strlr4   r0   )r-   r!  r.  zlatin-1zutf-8s   strlsr   r-  s   GSO       )
r   r8   r9   r:   r)  r  encodesplitfindr>  )
r*   rC  r<   r  rJ  rU   ZgsosZgsorr  sizer   r   r   test_strl_latin1  s    
zTestStata.test_strl_latin1c                 C   s   d}|dddd}t jtdd@}t|}t|dks:J |d	 jjd	 |ksRJ W d    n1 sf0    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once)Zfilter_levelr   r   u   Düsseldorf   r   r4   )	r8   r}   UnicodeWarningr   r>  messager   r   r;   )r*   r&   r  r<   r  r   rU   r   r   r   test_encoding_latin1_118+  s    6z"TestStata.test_encoding_latin1_118c              	   C   sx   t |dddddN}t|&}|  |jdks8J W d    n1 sL0    Y  W d    n1 sj0    Y  d S )Nr   r    r!   zstata1_119.dta.gzr.  i  )r/  r)  r   rZ  Z_nvar)r*   r&   r1  r  r   r   r   test_stata_119?  s    
zTestStata.test_stata_119)r1   r2   Nc                 C   s|  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|2}
|
j|ksJ |
 |ksJ W d    n1 s*0    Y  |j||dd t
|}t|| W d    n1 sn0    Y  d S )N)r      β   ĉTr   )r   r   u   ᴬu   ᴀ relatively long ŝtring)r$  r   u   ᴮr   )r   r   u   ᴰN)   ÅrZ  r[  strlsr4   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Stringsr   )r\  rZ  r[  r]  r^  u   ᴅaᵀa-labelrZ  labelu   æøåu   ŋot valid latin-1r   r   r   r]  F)r   r!  r   r7   r-   r5  r   )r-   r7   )r^   r  r   rR   rF   rJ   r8   r9   r   
write_filer   rB  replacer   r  r;   r   r   r   r:   )r*   r-   r   r    r   r   r5  r<   writerr   r  Zreread_to_statar   r   r   test_utf8_writerK  sR    


2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  r0   r  zYou must use version 119r1   )
r   rF   ZzerosrH   r8   r9   r  r  r  r   )r*   r`   r<   r   r   r   test_writer_118_exceptions}  s    
J
z$TestStata.test_writer_118_exceptionsdtype_backendZnumpy_nullableZpyarrow)Zmarksc              
   C   s   t g dg dg dg dtjddddd	tjg d
ddd}|j|d}|jddd t $}|| | |}W d    n1 s0    Y  t ddt	j
gg dddt	j
gg dtjddddd	tjg d
dt	jdd}t|d| d S )N)r   r   Nr   )TFN)g      ?g      @g      @z
2020-12-31r   D)r  freqr  r   r   r   r$   r  r$   )rf  ztest_stata.dtar1   r  r   r   r   r   )r%   r?   )r   r^   r  r?  Zconvert_dtypesr:   r8   r9   r,   rF   rf   rJ   r;   r   )r*   rf  r`   r<   r   rU   r   r   r   test_read_write_ea_dtypes  s0    


(

z#TestStata.test_read_write_ea_dtypesN)e__name__
__module____qualname__r,   r   r  markparametrizer=   rV   ra   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r#  r%  r*  r+  r4  r6  rA  rC  rN  rV  r`  rb  rs  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  rF   infr  r  r  r  r  r  r"  r$  r%  r-  r2  r?  rD  rF  rK  rS  rX  ZslowrY  rd  re  paramr   Z
skip_if_nork  r   r   r   r   r(   9   s4  

"

>

,(


%


	

	"
;14

#



 






G




1	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!   stata-compat-118.dtazstata-compat-rc   Fr   )r  r<   r  r   r8   r;   )r-   r&   Z	data_baserefoldrU   Zold_dtar   r   r   test_backward_compat  s    r|  c              
   C   sl  | dddd}t |0}| jr&J t|jtjr8J W d    n1 sL0    Y  t|dT}t |,}| jrzJ |j|u sJ W d    n1 s0    Y  W d    n1 s0    Y  t|d}t| X}t |.}| jrJ |j|u sJ W d    n1 s0    Y  W d    n1 s>0    Y  W d    n1 s^0    Y  d S )Nr   r    r!   ry  r.  )r   r  emptyr]   Z_path_or_bufr   r'  r)  )r&   Zmonkeypatch	file_pathr  fpr+  r   r   r   test_direct_read  s    
0
J
r  c                 C   s   | dddd}t jtdd  t|}|  W d    n1 sB0    Y  t jtdd |  W d    n1 sx0    Y  d S )Nr   r    r!   ry  zwithout using a context managerr  zis not part of the public API)r8   r}   ResourceWarningr   r  FutureWarningclose)r&   r~  r]  r   r   r   0test_statareader_warns_when_used_without_context  s    &r  r.   use_dictTFinferc              	   C   s  d}| r(|r| }n||  }|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rpt|	,}t|| d  }W d    n1 sd0    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r\td}||	d}
t|
 }W d    n1 sP0    Y  n| d u rj|	}t|d	d}W d    n1 s0    Y  | }|jtj|_t|| d S )Nzdta_inferred_compression.dtare  r  methodr   r   r   r4   r$   )r-   compressionr/  r.  rL  rr   tarbz2zstdZ	zstandardxzlzmar  )r   rF   r   r   r   r   r$   r%   r8   r9   r:   r/  r)  r   r'  r  zipfileZipFilefilelisttarfileextractfilegetnamesr  r  Zimportorskipr   rQ   rR   rJ   r;   )r  r-   r  r  compression_to_extension	file_namefile_extZcompression_argr`   r<   compr  r  r  r  r  rU   r   r   r   test_compression  sV    0
:
>
0

0

0
,r  r  rL  r  )Nr,  rL  c              	   C   s(  d| }d}t tjddtdd}d|j_t	|}| |d}|j
||d	 | d
ksh|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}	W d    n1 s0    Y  | }
|
jtj|
_t|	|
 d S )Ntest.ztest.dtar   r   r   r4   r$   )r  archive_namer  rL  r  r   r   r  )r   rF   r   r   r   r   r$   r%   r8   r9   r:   r  r  r>  r  filenamer   r'  r  r   rQ   rR   rJ   r;   )r  r  r  r  r`   r<   r  Zzpr  r  rU   r   r   r   test_compression_dict  s&    

6*r  c                 C   s   t dtg dddi}d|j_| }|jtj|_t	 }|j
|| d t|ddd	^}t|D ]D\}}|d}d|v sJ t|j|jjd| d|d
    qhW d    n1 s0    Y  W 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%   rQ   rR   rF   rJ   r8   r9   r:   r   	enumerater   rS   r  r  )r-   r`   rU   r<   r  ri  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   rP   r>   rW   )r   r8   r}   r   r  r   r  r^   r?  r  r   r   __next__r   r;   )	r&   dta_filer  r  ri  r  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partial;  s    &PHr  r  )rY  r   r  c              	   C   sl   | dddd}t jtdd< t||d W d    n1 s@0    Y  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_errorsN  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h}t|D ]N\}}tdD ]}t	|j
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_labelra  c                    s"   i | ]}d | t j ddqS )r   Tr   )r^   r  )r:  rT  r  r   r   r;  Y  r  z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   )r  r  r  r   r>   rG  r  r   )r   r\   r8   r9   r:   r^   r?  r   r  r  rT   r  r   r;   )r`   r<   rU   r  rw  r  ri  r   r  r   test_iterator_value_labelsV  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   rh  r   r   r   	<genexpr>f  r  z&test_precision_loss.<locals>.<genexpr><   4   biglittler4   z&Column converted from int64 to float64r  Fr   rj  )r   r  )r   r  )r   sumr\   r8   r9   r}   r
   r:   r   r   rF   rP   rS   rT   r   float)r`   r<   r  Zexpected_dtr   r   r   test_precision_lossd  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Zr=  r$   r  r  r  r  )r   r$   r%   r8   r9   r:   r   r;   Zdecompress_filer   r'  r  )r  r`   r<   r  fhcontentsr   r   r   test_compression_roundtripu  s    
,r  to_infer
read_inferc                 C   s   | }|| }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$   r  r  r  )r   r$   r%   r8   r9   r:   r   r;   )Zcompression_onlyr  r  r  r  extr  r`   Zto_compressionZread_compressionr<   r   r   r   r   test_stata_compression  s    
r  c               	   C   s  t g dddtjdtjgg dtg dd} t 6}dd	d
ddd	dd}i |dddddi}t|| |d}|  t	|$}|
 }||ksJ W d    n1 s0    Y  d}tjt|d, ddddi}t|| |d W d    n1 s0    Y  d}tjt|d0 ddddddi}t|| |d W d    n1 sZ0    Y  W d    n1 sz0    Y  d S )N)r   r   r   r   r   r   r$  g      "@)rq   rq   r   rp   rt   )rw  rT  rd  rT  rw  )fully_labelledpartially_labelledr  r  r   r   r   r`  )r   r$  )r  r  r  rw  rT  rd  ri  r5  zCCan't create value labels for notY, it wasn't found in the dataset.r  ZnotYrO  rP  )rq   rp   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   ri  r   )r   rF   rf   r^   r  r8   r9   r   ra  r   r5  r  r  r"  r  )r    r<   r5  rU   rc  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 }tt | j||d W d    n1 s0    Y  t|$}| }||ksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )N)r   r   r   r   rW   rp   )rp   rp   r   r   rp   rp   )r   rW   rW   ru   ru   r   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   rO  rP  r  r   r   )rp   r   rW   r   r   r   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )r   r8   r9   r}   r	   r:   r   r5  )r    r5  rU   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}| }W d    n1 sb0    Y  || 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)rt   ro   (   )rt   rt   ro   ro   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   r8   r9   r:   r   r5  r  r  r  r  r   )r5  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   rK   rJ   boolrH   r   r<  )r   r   r   r   r  Fr6   Try  )r   r   r^   ZNAr%   r   r?   Znumpy_dtyperb  r   ZBASE_MISSING_VALUESr   r8   r9   r:   r   rS   r   r   )
r?   r-   r`   Z
dtype_namevaluer|  Z
expected_bZ
expected_cr<   r  r   r   r   test_nullable_support	  s,    



r  c                  C   s   t tdg dddd} t }| j|ddd t|}d	|v sLJ tt	d
t	dd}t
|j| t|dgd}d	|vsJ t
|j|jdg  W d    n1 s0    Y  d S )Nr   r  rZ   r  r   Fr0   r6   r   rJ   rP   r   r4   )r   r\   r2  r8   r9   r:   r   r   rF   r?   rS   rT   r   )r`   r<   Zdf2rT   Zdf3r   r   r   test_empty_frame>	  s    
r  )Er  r   r  r/  r   r  rn  r  r  numpyrF   r  Zpandas.util._test_decoratorsutilZ_test_decoratorsr   rL  r^   r   Zpandas._testingZ_testingr8   Zpandas.core.framer   r   Zpandas.io.parsersr   Zpandas.io.statar   r	   r
   r   r   r   r   r   r   Zfixturer   r'   r(   ro  rp  r|  r  r  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   r   <module>   s   ,


                
	1

&%&