o
    Ehj                    @   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   :lib/python3.10/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 Z8e9de:de:f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1dˡejdg d̢dd΄ Z_ddЄ Z`ejddejadebcdӡdԍgddք ZddS )	TestStatac                 C      t |ddS )NTr"   )r   selffiler   r   r   read_dta:   s   zTestStata.read_dtac                 C   r)   )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 }|j|d|d t|}t|| W d    d S 1 s(w   Y  d S )NZ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 #}|j|d	|d
 t|}t|| t|j|j W d    d S 1 sw   Y  d S )Nr   dtype)
Zi8Zi16Zi32i64u8u16u32u64Zf32Zf64rA   rB   rC   rD   r@   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   s2   
"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 s&w   Y  t|jtj	s4J |
 }|d tj|d< tj||dd d S )	N   )Zb1Zb2Zb3Zb4Zb5r   r   Fr6   r   TZcheck_index_type)r   ranger8   r9   r:   r   
isinstancer$   pd
RangeIndexrP   rQ   rE   rI   r;   )r+   r.   dfr<   Zread_dfrT   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   rb   )r-   r   rE   nanrQ   rN   r8   r;   r+   r,   r&   parsedrT   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 sw   Y  tt | 	|}W d    n1 sw   Y  tt | 	|}W d    n1 sw   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   rt   Or   r    r!   zstata2_114.dtazstata2_115.dtazstata2_117.dtaTcheck_datetimelike_compat)r   from_recordsr   r[   NaTrQ   r8   assert_produces_warningUserWarningr-   r;   )	r+   r&   rT   Zpath1Zpath2Zpath3r'   
parsed_115
parsed_117r   r   r   test_read_dta2   sN   











"
#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!   r`   
stata3.csvyearquarter)	r-   r   rQ   rE   rN   rH   rG   r8   r;   rd   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 ]2}||  }t|d |  }|dkri|}|dj	}|j
|dd}|jjd dd |||< qPt|| d S ) Nr   r    r!   r`   )onetenr   r   r   )twoniner   r   r   )threeeightr   r   r   )foursevenr   r   r   fivesixrV   rr   r   r   rn   r   r   rm   r   r   	   r   r   )fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr4   r   r   categoryTorderedZinplace)r-   r   rx   rE   rc   rP   ZasarrayZnotnarQ   _valuesset_categories
categoriesrenamer8   r;   )	r+   r,   r&   re   rT   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   rx   r8   r;   )r+   r&   r}   rT   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	|| ||  qAt
|dddd$}| }dddddddd}t|| |jdkssJ W d    d S 1 s~w   Y  d S )Nr   r    r!   zstata14_118.dtaBytesru   )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-   rQ   r   rx   rE   rc   rN   r5   r8   Zassert_almost_equalr   variable_labelsZassert_dict_equal
data_label)r+   r&   Z
parsed_118rT   r   rdrZvlZvl_expectedr   r   r   test_read_dta18  s6   
	"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 s2w   Y  |	 }|j
tj|_t|d| d S )Nra   r4   r$   r"   )r   rE   rc   r$   r%   r8   r9   r:   r-   rP   rQ   rI   r;   	set_index)r+   originalr<   written_and_read_againrT   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    d S 1 sQw   Y  d S )Nr   r    r!   r   r$   r   r   r"   FrX   )r   r$   r%   rQ   rE   rI   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	
 }|j|ddi|d | |}W d    n1 sOw   Y  | }|rc|d d|d< t	j|d	|dd d S )Nstringobjectr   皙?
2003-12-25)r   r   integerfloatingr   r    r5   r>   r$   r   r   tcr#   r.   strFrX   )r   rE   
datetime64r   r   r$   r%   rQ   rI   r8   r9   r:   r-   rP   r;   r   )r+   r.   using_infer_stringr   r<   r   rT   r   r   r   test_read_write_dta10\  s(   

zTestStata.test_read_write_dta10c                 C   sV   t  }ttjddtdd}|| W d    d S 1 s$w   Y  d S )Nr   rq   r   ABr4   )	r8   r9   r   rE   randomdefault_rngstandard_normallistr:   )r+   r<   r]   r   r   r   test_stata_doc_examplesv  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 s3w   Y  t	|| d S )	Nr   )rV   r   Zabcdr4   r   r   Fr7   )r   rE   r   r   r   r   rc   locrP   r8   r9   r:   r;   )r+   r]   Zdf_copyr<   r   r   r   test_write_preserves_original}  s   
z'TestStata.test_write_preserves_originalc           	      C   s   t |dddd}t |dddd}|jd }|jd }||ks"J t|ts)J t }|j|d|d t |}t|| W d    d S 1 sKw   Y  d S )Nr   r    r!   zstata1_encoding.dtar   Fr6   )r   	kreis1849rZ   r   r8   r9   r:   r;   )	r+   r.   r&   rawencodedresultrT   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 )}tt	 |j
|d d W d    n1 s8w   Y  | |}W d    n1 sLw   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%   rQ   rE   rI   r8   r9   rz   r	   r:   r-   rP   r;   r   )r+   r   	formattedr<   r   rT   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	 |j
|d |d W d    n1 s9w   Y  | |}W d    n1 sMw   Y  | }|jtj|_t|d| d S )Nr   r   r   r   rV   rr   )Z!astringwithmorethan32characters_1Z!astringwithmorethan32characters_2+-Zshortdeleter4   )r   Z _0astringwithmorethan32character_Z_1_Z_shortZ_deleter$   r   r   )r+   r.   r   r   r<   r   rT   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 sFw   Y  | }|jtj|_t
|d| d S )Ni   r>   i   l        )rH   rI   rJ   r$   rJ   )r   rE   rH   rI   rJ   r   r$   r%   rQ   rO   r8   r9   r:   r-   rP   r;   r   )	r+   s1s2s3r   r   r<   r   rT   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 s7w   Y  | }|jt	j
|_t|d| d S )	Nr   r    r!   r`   r$   date_tdtdr   )r-   r$   r%   r8   r;   r9   r:   rP   rQ   rE   rI   r   )	r+   r,   r'   r.   r&   re   r<   r   rT   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argsr`   )r   rQ   rE   rG   rH   rI   rN   rO   applyr   strptimer-   r8   r;   )r+   r,   r&   rT   re   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 <}|j||||d
 t|}|jdks,J |j|ks3J W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   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 2}d}tjt|d |j|||d W d    n1 s+w   Y  tj	|r8J W d    d S 1 sCw   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 '}tt	 |
| W d    n1 s)w   Y  | |}W d    n1 s=w   Y  |d}t|j}dd }t|||_| }|jtj|_t|| d S )Ng      9@)rV   rV   r$   c                 S   s   t | d S )Nr   )intr   r   r   r   <lambda>6  s    z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rE   reshapearanger$   r%   r8   r9   rz   r	   r:   r-   r   r   r5   maprP   rQ   rI   r;   )r+   r   r<   r   r5   Zconvert_col_namerT   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 sJw   Y  |d}| }|jtj|_t	|| d S )Nr   r>   r   r   r   r   r$   r.   )r   rE   r  rN   rO   rc   r   r$   r%   r8   r9   r:   r-   r   rP   rQ   rI   r;   )r+   r.   r   r   r   r<   r   rT   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 :}|j|dd | 	|}t
jt|jjd	 |d  W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )
Nr   r         $@)rV   r   r4   Zindex_not_writtenFr   r  )r   rE   r  r  r$   r%   r8   r9   r:   r-   r
  r  KeyError)r+   r5   r   r<   r   r   r   r   test_no_indexO  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 s3w   Y  |
 }|jtj|_t|d| d S )Nr   zA longer stringr          @r>   r  r$   )r   rE   rO   r   r$   r%   r8   r9   r:   r-   rP   rQ   rI   r;   r   )r+   r   r   r   r<   r   rT   r   r   r   test_string_no_datesY  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	 '}t
t || W d    n1 sKw   Y  | |}W d    n1 s_w   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   rE   rG   rH   rJ   r   r$   r%   r8   r9   rz   r
   r:   r-   rP   rI   rO   rQ   r;   r   )	r+   r"  r   r   r   r   r<   r   modifiedr   r   r   test_large_value_conversionf  s$   
z%TestStata.test_large_value_conversionc              	   C   s   t tddddddg}d|j_t +}tt |j|dd	id
 W d    n1 s.w   Y  | 	|}W d    n1 sBw   Y  |
 }dg|_|jtj|_t|d| d S )Nrg   rh   ri   rj   rk   rl   r$   r   r   r"   Z_0)r   r   r$   r%   r8   r9   rz   r	   r:   r-   rP   r5   rQ   rE   rI   r;   r   )r+   r   r<   r   r#  r   r   r   test_dates_invalid_columnz  s   
z#TestStata.test_dates_invalid_columnc                 C   s   |dddd}t |}g dg dg dg}t|}g d|_|d	 tj|d	< |d
 tj|d
< |d tj|d< |d tj|d< t	|
d| d S )Nr   r    r!   S4_EDUC1.dta)r   r   r   )r   r   r   r'  )r   r   r   r'  )clustnumpri_schlpsch_numpsch_disr(  r)  r*  r+  r   )r   r   r5   rQ   rE   rH   rG   rN   r8   r;   head)r+   r&   dpathr]   Zdf0r   r   r   test_105  s   
zTestStata.test_105c                 C   sL   |dddd}t |}| i ksJ W d    d S 1 sw   Y  d S )Nr   r    r!   r&  )r   value_labels)r+   r&   r-  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 sww   Y  t	|d
| d S )N)r   r   Ztwr8   ZtqthZtyc                 S   s   i | ]}||qS r   r   .0r   r   r   r   
<dictcomp>  s    z6TestStata.test_date_export_formats.<locals>.<dictcomp>rg   rh   rl   rj   rk   r4   r$   ri   r   rq   rn   r   r?   r%   r$   r5   r"   )r   lenr   r$   r%   r[   IndexrE   rI   r8   r9   r:   r-   r;   r   )	r+   r5   Zconversionsr    r   expected_valuesrT   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 s9w   Y  t	|
d| d S )
N1Zfoor4   r   r   r   r$   r5  r6  )r   r[   r8  rE   rI   r8   r9   r:   r-   r;   r   )r+   r   rT   r<   r   r   r   r   test_write_missing_strings  s   


z$TestStata.test_write_missing_strings	byteorder><c              	   C   sZ  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 ]\}}|| 
|||< qqt }|
j|||d | |}W d    n1 sw   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$   )r=  r.   )r   rE   Zbool_rK   rL   rM   r   r$   r%   rP   rQ   rI   rG   rH   rO   zipr5   r8   r9   r:   r-   r   r;   )r+   r=  r.   r"  r   r   r   rB  rC  rD  r   rT   Zexpected_typesr   tr<   r   r   r   r   test_bool_uint  s:   	

zTestStata.test_bool_uintc           	      C   s   t |dddd}| }W d    n1 sw   Y  t |dddd}| }W d    n1 s5w   Y  d}d}| D ]\}}||v sLJ ||| ksTJ ||v sZJ ||v s`J qBd 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|9}|  t|j	|j
|jD ]#\}}}	t|dd  t|dd	 ksUJ t|dd  |	ksaJ q>W d    n1 slw   Y  W d    d S W d    d S 1 sw   Y  d S )
N)r   r@     r   r   r   sFr   r   )r   r   r   r8   r9   r:   r   _ensure_openrE  Z_varlistZ_fmtlistZ_typlistr  )
r+   str_lensrQ  str_lenr   r<   srr   Z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 d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )N)r   rP    r   r   r   rQ  zFixed width strings in Stata \.dta files are limited to 244 \(or fewer\)\ncharacters\.  Column 's500' does not satisfy this restriction\. Use the\n'version=117' parameter to write the newer \(Stata 13 and later\) format\.r  )	r   r   r   r
  r  r  r8   r9   r:   )r+   rT  rQ  rU  r   r  r<   r   r   r   test_excessively_long_string  s    
"z&TestStata.test_excessively_long_stringc              	   C   sf  d}t dggdgd}t $}|| t|}|j}W d    n1 s'w   Y  W d    n1 s6w   Y  dd tdD }|dd	 |D ] }|| d
 }tdD ]}	t|d
 |	 }
|
j	||	 kskJ qXqLtt
ddd }
|
j	d	ks~J tt
ddd }
|
j	dksJ tt
ddd }
|
j	d	ksJ tt
ddd }
|
j	dksJ d S )N)r   hlr   r   r4   c                 S   s   g | ]
}d t d|  qS ).a   )chrr3  ir   r   r   
<listcomp>%  s    z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   r]  r      z<fs      s     z.zz<ds         s        )r   r8   r9   r:   r   ZVALID_RANGErY   insertr   r   structunpack)r+   typesr]   r<   r   Zvalid_ranger9  rF  offsetra  valr   r   r   test_missing_value_generator  s:   


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   rd  c                    s    g | ]}t  |d    qS )rd  )r   )r3  jra  rK  r   r   rb  D  s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>rV   r4   r   r    r!   r`   TZconvert_missing)
r   sortedZMISSING_VALUESrK  rY   appendr   r   r8   r;   )	r+   r,   r&   r5   smvr    rowrT   re   r   rp  r   test_missing_value_conversion=  s   z'TestStata.test_missing_value_conversionc                 C   s  g d}g d}g d}g d}g d}g d}g }t ||||||D ]>\}	}
}}}}g }tdD ]*}|dkrD|t|	|
|||| q1|dkrR|t|	d	d	 q1|t|	|
| q1|| q#|tjgd  g d
}tddd|d d< tddd	|d d< tddd	|d d< tddd	|d d< tddd|d d< tddd	 |d d< |d d< tdd	d	 |d d< |d d< tddd	 |d d<  |d d< |d d< tdd	d	 |d d< |d d< t||td}t|dddd}t|dddd}t	j
||dd t	j
||dd dd  |D }t	 }d!|j_|j||d" | |}W d    n	1 s7w   Y  t	j
|d!||jtjdd d S )#N)i  r  '  r@      )r   r   ro   r   r   r   )r   r   rp   r      rj   )r   r   rj   r   r   r   )r   r   ;   r   r   r   rn   r   rr   r   )Zdate_tcr   Zdate_twZdate_tmZdate_tqZdate_thZdate_tyrw  ro      r   r   rq   r   rV   rx     ry  i  )r5   r?   r   r    r!   zstata9_115.dtazstata9_117.dtaTrv   c                 S   s   i | ]	}||d d qS )r'  Nr   r2  r   r   r   r4  {      z,TestStata.test_big_dates.<locals>.<dictcomp>r$   r"   )rE  rY   rs  r   r[   ry   r   r   r   r8   r;   r9   r$   r%   r:   r-   r   rQ   rE   rI   )r+   r&   yrmoddhrZmmssrT   r   monthdayZhourZminutesecondru  ro  r5   r|   r}   Zdate_conversionr<   r   r   r   r   test_big_datesM  sV   "  , 

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   rQ   rE   rG   rH   rI   rN   rO   r   r   r   r   r8   r;   )r+   r&   rT   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 ddg}t|ddddd|d W d    n1 sw   Y  d}tjt|d g d}t|ddddd|d W d    d S 1 sw   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   Z	not_found)r   rQ   rE   rG   rH   rI   rN   rO   r   r   r   r   r8   r;   r
  r  r  )r+   r&   rT   r5   ZdroppedZ	reorderedr  r   r   r   test_drop_column  sV   
"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 ])}||  }|	dj}| }|dkr|j|dd }|jjd dd! |||< qvt } j||d" | |}W d    n1 sw   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   rV   rr   r   r   rn   r   r   rm   r   r   r   r   r   rq   )r   r   r   r   r   	unlabeledr4   c                       g | ]	} |  d qS r   rQ   r3  r   r   r   r   rb    r~  z6TestStata.test_categorical_writing.<locals>.<listcomp>r   Zaxisr$   r   r  r   Tr   r   r  )r   rx   rE   rc   rP   r[   concatr$   Z	set_namesrQ   rI   r   r   r   
as_orderedr   r   r   r8   r9   r:   r-   r   r;   )	r+   r.   rT   r   r   r   r<   r   resr   r  r   test_categorical_writing  sF   


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 d    n1 sDw   Y  W d    n1 sSw   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    d S 1 sw   Y  d S )Nr   i'  r   r   dZToo_longr4   c                    r  r  r  r  r  r   r   rb    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                    r  r  r  r  r  r   r   rb  &  r~  )r   rx   r[   r  r8   r9   r
  r  r  r:   rz   r   )r+   r<   r  r   r  r   $test_categorical_warnings_and_errors  s0   "
"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 sEw   Y  |d	}  }|D ]}|| j}| j}	|j|	dd}|||< qU|jtj|_t
|| d S )Nc                 S   s   g | ]	}d t | gqS )r   )r   r`  r   r   r   rb  /  r~  zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   Zmany_labelsr4   c                    r  r  r  r  r  r   r   rb  3  r~  r   r  r$   r  Tr   )rY   rs  rE   rc   r   rx   r[   r  r$   r%   r8   r9   r:   r-   r   rP   r   remove_unused_categoriesr   r   rQ   rI   r;   )
r+   r.   valuesr<   r   r  rT   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 ]#\}}}}|rm||tjj||ddf qV||t|t jdf qVt	
t|}|ddd| d}t|}	t||	 |D ]&}t|| jtrt|| jj|	| jj t|| jj|	| jj qd S )NTr   r   r   r   r  erV   reverserR  Znoorder)r   r   r   r   r   r   r   Zfloat_missing)r   r  r  )r   r   r   rR  rR  FZnolabel)r   r  r   r   g      @Zint32_mixed)r  r   r  r   r   r   r>   r   r    r!   r`   )rE   r  rF   rs  r[   Categorical
from_codesr   rN   r   Z	from_dictdictr   r8   r;   rZ   r?   r   rR   r   codesassert_index_equalr   )
r+   r,   r&   rT   ZcolsZis_catr   rL  r  re   r   r   r   test_categorical_orderE  s6   	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!   r`   Zsrhfirst)Zna_position)
rR  rR  r   r   r   r   r   r   r   r   )ZPoorZFairZGoodz	Very goodZ	ExcellentT)r  r   r   r%   )r   Zsort_valuesr[   r\   r7  r$   r  r  r   r8   rR   )r+   r,   r&   re   r  r   r   rT   r   r   r   test_categorical_sortingi  s   z"TestStata.test_categorical_sortingc                 C   sh   |ddd| d}t |}t |dd}|D ]}t|| jts!q|| jjs)J || jjr1J qd S )Nr   r    r!   r`   F)order_categoricals)r   rZ   r?   r   r   r   )r+   r,   r&   re   Zparsed_unorderedr   r   r   r   test_categorical_orderingz  s   z#TestStata.test_categorical_orderingzignore::UserWarning)r_   Z
stata2_117r   r   r   r   Z
stata7_117rm  Z
stata9_117r  r  	chunksizer   r   convert_categoricalsFTr#   c              
   C   s   |ddd| d}t |||d}t |d||dM}d}	td	D ]5}
z||}W n
 ty3   Y  n+w |j|	|	| d d f  }| |}tj||d
dd |	|7 }	q W d    d S W d    d S 1 siw   Y  d S )Nr   r    r!   r`   r  r#   T)iteratorr  r#   r   rV   Fr   rw   	r   rY   readStopIterationilocrP   _convert_categoricalr8   r;   r+   r,   r  r  r#   r&   fnamere   itrposro  chunk
from_framer   r   r   test_read_chunks_117  s<   

"zTestStata.test_read_chunks_117r  returnc                 C   s   | D ]A}| | }t |jtrC|j }|jjtkr'tj	|jj}|
|}n|jjdkr?t|jdkr?|jt}|
|}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        r   r   )rZ   r?   r   r   r  r   r   r[   r8  Z_with_inferr   r7  rQ   )r  r   Zserr   r   r   r   r   r    s   

zTestStata._convert_categoricalc                 C   s  |dddd}t |}t |dd}|d}t|jddd d f | W d    n1 s0w   Y  t |dd	}t|}t|jddd d f |d  W d    n1 s[w   Y  t |dd}|d}t|jddd d f | W d    n1 sw   Y  t |dd	}| }t|jddd d f | W d    n1 sw   Y  t |d
d	}t|}W d    n1 sw   Y  t|| d S )Nr   r    r!   stata3_117.dtaTr  rV   r   r  r   )	r   r  r8   r;   r  r   Z	get_chunkr[   r  )r+   r&   r  re   r  r  Zfrom_chunksr   r   r   test_iterator  s,   
 $
  zTestStata.test_iterator)
Z
stata2_115r   r   r   r   Z
stata7_115rl  Z
stata9_115r  r  c              
   C   s   |ddd| d}t |||d}t |d||dM}d}	td	D ]5}
z||}W n
 ty3   Y  n+w |j|	|	| d d f  }| |}tj||d
dd |	|7 }	q W d    d S W d    d S 1 siw   Y  d S )Nr   r    r!   r`   r  T)r  r#   r  r   rV   Fr  r  r  r   r   r   test_read_chunks_115  s<   

"zTestStata.test_read_chunks_115c                 C   s   |dddd}g d}d}t ||d}t |dd	@}d
}tdD ](}|j||d}	|	d u r/ n"|j||| d d f }
tj|
|	dd ||7 }q W d    d S W d    d S 1 s\w   Y  d S )Nr   r    r!   r  )r   ZcpiZm1r   r4   Tr  r   rV   Fr   )r   rY   r  r  r8   r;   )r+   r&   r  r5   r  re   r  r  ro  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 5}|j|||d t|}| }W d    n1 s*w   Y  ddddd}||ks<J W d    n1 sFw   Y  d	|d< t /}|j|||d t|}| }W d    n1 sow   Y  ||kszJ W d    d S 1 sw   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<   rV  Zread_labelsZexpected_labelsr   r   r   test_write_variable_labels'  s,   





"z$TestStata.test_write_variable_labelsc              	   C   s   d|j _dddd}t 2}d}tjt|d |j|||d W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   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_labels?  s   
"z&TestStata.test_invalid_variable_labelsr0   r1   c              	   C   s   d|j _dddd}d|d< t 0}tjtdd	 |j|||d
 W d    n1 s-w   Y  W d    d S W d    d S 1 sEw   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_encodingJ  s   
"z.TestStata.test_invalid_variable_label_encodingc              	   C   s  g d}ddd |d}d}tjt|d# t }|j||d W d    n1 s-w   Y  W d    n1 s<w   Y  ddd	d}d
}tjt|d, t }|j||d W d    n1 sgw   Y  W d    d S W d    d S 1 sw   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_errorsW  s2   

"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 P}|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    d S 1 sw   Y  d S )N  ro   rp   .    r  R    rn   r     r   r  r   applebananaZcherryZnumsZ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_conversionu  s,   
"z&TestStata.test_default_date_conversionc              	   C   s   t dddgi}d}tjt|d* t }|| W d    n1 s&w   Y  W d    d S W d    d S 1 s>w   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   sb  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% t }|j|ddid W d    n1 sNw   Y  W d    n1 s]w   Y  t	j
dddd}tg dg d|d}tjtdd* t }|| W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr  ro   rp   r  r  r  r  r  rn   r   r  r  r  r  zFormat %tC not implementedr  r  ZtCr"   z1-1-1990r   zAsia/Hong_Kong)periodsZ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  s>   

"z#TestStata.test_unsupported_datetypec                 C   sN   d}t jt|d t|dddddd W d    d S 1 s w   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   rV   rr   )
r   r   r   r  r  r   gr[  ra  ro  )r   r   wr   )r   r   rE   rc   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* t	
 }|| W d    n1 s:w   Y  W d    d S W d    d S 1 sRw   Y  d S )Nr   g      ZColumnOkColumnTooBigzZColumn ColumnTooBig has a maximum value \(.+\) outside the range supported by Stata \(.+\)r  )r   rE   finfoZ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||< q)t	
 }|| t|}W d    n1 sNw   Y  |d tj|d< | }|jtj|_t	|d| d S )Nr   r  r  r$   r  )r   rE   r  rN   r  r  r$   r%   rQ   r8   r9   r:   r   rO   rP   rI   r;   r   )r+   r   r   r<   r  rT   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* t }|| W d    n1 s)w   Y  W d    d S W d    d S 1 sAw   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   j   t dtdd ttdtdd tdD d}d	|j_	d
d }t
|j|}t
|| d S )Nr   r     r   ABCDc                 S      g | ]}d | qS zi-r   r`  r   r   r   rb        z/TestStata.test_path_pathlib.<locals>.<listcomp>r  r5   r$   r$   c                 S      t | dS Nr$   r   r   r  r   r   r   r        z-TestStata.test_path_pathlib.<locals>.<lambda>)r   rE   r  r  r[   r8  r   rY   r$   r%   r8   Zround_trip_pathlibr:   r;   r+   r]   r  r   r   r   r   test_path_pathlib     zTestStata.test_path_pathlibc                 C   r  )Nr   r  r  r  c                 S   r  r  r   r`  r   r   r   rb  "  r  z8TestStata.test_pickle_path_localpath.<locals>.<listcomp>r  r  r$   c                 S   r   r  r  r  r   r   r   r  %  r  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)r   rE   r  r  r[   r8  r   rY   r$   r%   r8   Zround_trip_localpathr:   r;   r  r   r   r   test_pickle_path_localpath  r  z$TestStata.test_pickle_path_localpathr7   c              	   C   s   dg di}t |d}|d d|d< t )}|j||d t|dd}| }W d    n1 s5w   Y  W d    n1 sDw   Y  |dddd	d
diksVJ d S )NA)BECr  r
  r    r   r   Tr  r	  r  r
  )r   r   r   r   )r   rQ   r8   r9   r:   r   r/  )r+   r7   r  r]   r<   Zdta_iterr/  r   r   r   test_value_labels_iterator)  s   


z$TestStata.test_value_labels_iteratorc                 C   s   t dtdd ttdtdd tdD d}d	|j_	t
 }|| t|d	d
}W d    n1 s<w   Y  t
|| d S )Nr   r  r  r  c                 S   r  r  r   r`  r   r   r   rb  ;  r  z,TestStata.test_set_index.<locals>.<listcomp>r  r  r$   	index_col)r   rE   r  r  r[   r8  r   rY   r$   r%   r8   r9   r:   r   r;   )r+   r]   r<   r  r   r   r   test_set_index6  s   

zTestStata.test_set_indexcolumn)msr  Z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   Z_fmt)r   r   )r+   r  r&   r]   Zunformattedr   r   r   r   (test_date_parsing_ignores_format_detailsC  s   z2TestStata.test_date_parsing_ignores_format_detailsc                 C   sl  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 }|j|ddidgdd | |}W d    n1 sw   Y  |d d  }|r|d d|d< t|d| t|| d S )Nr   r   r   r   r   r   A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai  zstring-1zobject-1z
2003-12-26r   A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   )r   r   rG   rH   rI   rN   rO   r   r   Zs2045Zsrtlforced_strlr   r>   rG   rH   rI   rN   r$   r   r   r  r1   )r#   convert_strlr.   r   )r   rE   r   r   r   rG   rH   rQ   rI   rN   r$   r%   rP   r8   r9   r:   r-   r;   r   )r+   r   r   rP   r<   r   rT   r   r   r   test_writer_117W  sn   .
	zTestStata.test_writer_117c              	   C   s   t g dg dgg dd}d|j_ttE t (}|j|ddgdd	 | |}|	d}|j
|_
tj||d
d W d    n1 sGw   Y  W d    d S W d    d S 1 s_w   Y  d S )N)A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r  )A  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr	  r  )Z2long1long1long1long1long1long1long1long1long1long1longr   r4   r$   r  r   r1   )r  r.   FrX   )r   r$   r%   r8   rz   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 3}d}tjt|d |j|ddid W d    n1 sNw   Y  W d    d S W d    d S 1 sfw   Y  d S )Nr  ro   rp   r  r  r  r  r  rn   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tdtdd t	dD d}d	|j
_t 6}|j||d
 |d t|d}||  W d    n1 sNw   Y  t|d	d}W d    n1 scw   Y  t|| d S )Nr   r  r  r  c                 S   r  r  r   r`  r   r   r   rb    r  z2TestStata.test_nonfile_writing.<locals>.<listcomp>r  r  r$   r  r   wbr  )r   BytesIOr   rE   r  r  r[   r8  r   rY   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tdtdd tdD d}d	|j_	t
 A}t|d
}|j|dd W d    n1 s?w   Y  t|d}t|d	d}W d    n1 s[w   Y  W d    n1 sjw   Y  t
|| d S )Nr   r  r  r  c                 S   r  r  r   r`  r   r   r   rb    r  z/TestStata.test_gzip_writing.<locals>.<listcomp>r  r  r$   r  r0   r  rbr  )r   rE   r  r  r[   r8  r   rY   r$   r%   r8   r9   gzipZGzipFiler:   r   r;   )r+   r]   r<   gzr  r   r   r   test_gzip_writing  s    
zTestStata.test_gzip_writingc                 C   sf   |  |dddd}g d}g dg dg dg d	g d
g dg dg}t||d}t|| d S )Nr   r    r!   zstata16_118.dta)utf8latin1asciiZ	utf8_strlZ
ascii_strl)   ραηδαςu   PÄNDÄSpr)  r*  )   ƤĀńĐąŜ   Ör   r+  r   )   ᴘᴀᴎᴅᴀS   Ünr-  r/  )      r0  r  r0  r  ) r   r   r1  r   )r   r   rQ  r   rQ  )r   r   r1  r   r1  r4   )r-   r   r8   r;   )r+   r&   Z
unicode_dfr5   r  rT   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 L}|j|ddd t|}|d	}t|| d |d
< |j|dd
gdd t|}|	 }|rR|d
 d|d
< |d	}t|| W d    d S 1 shw   Y  d S )NA  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   rI   Fr1   r6   r   r3  )r7   r  r.   r   )
r   r4  rQ   r8   r9   r:   r   fillnar;   rP   )r+   r   outputr<   r  rT   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 /}tjtdd |j||d W d    n1 s0w   Y  W d    d S W d    d S 1 sHw   Y  d S )Nnoner   )r8  r4  r   z Column `none` cannot be exportedr  r  )r   r8   r9   r
  r  r  r:   )r+   r.   r6  r<   r   r   r   test_all_none_exception  s   
"z!TestStata.test_all_none_exceptionc              	   C   s   d}t |gdgd}t 6}d}d}tjt| d| d || W d    n1 s/w   Y  W d    d S W d    d S 1 sGw   Y  d S )Nu9   Here is one __�__ Another one __·__ Another one __½__Z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 x}|j|ddgd t|d	Q}| }d}|d
|v s3J |d|v s<J |dd dd }|ddd  D ]}|dd }||dd  }	t	||	d kslJ qPW d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )Npandasr   u   þâÑÐÅ§Zvar_strZvar_strlr4   r1   )r.   r  r"  zlatin-1zutf-8s   strlsr   r'  s   GSO       )
r   r8   r9   r:   r  r  encodesplitfindr7  )
r+   r6  r<   r  r<  rT   ZgsosZgsorj  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s)J W d    n1 s3w   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   rz   UnicodeWarningr   r7  messager   r   r;   )r+   r&   r  r<   r  r   rT   r   r   r   test_encoding_latin1_118;  s   z"TestStata.test_encoding_latin1_118c              	   C   s   t |ddddd0}t|}|  |jdksJ W d    n1 s&w   Y  W d    d S W d    d S 1 s>w   Y  d S )Nr   r    r!   zstata1_119.dta.gzr"  i  )r#  r  r   rS  Z_nvar)r+   r&   r$  r  r   r   r   test_stata_119O  s   
"zTestStata.test_stata_119z)ignore:Downcasting behavior:FutureWarning)r2   r3   Nc                 C   sv  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 s}t|||dg|d||d}|	  t
|}	|d d|d< |d |d dj |d< t||	 t|}
|
j|ksJ |
 |ksJ W d    n1 sw   Y  |j||dd t
|}t|| W d    d S 1 sw   Y  d S )N)r      β   ĉTr   )r   r   u   ᴬu   ᴀ relatively long ŝtring)r  r   u   ᴮr   )r   r   u   ᴰN)   ÅrL  rM  strlsr4   	   ᴐᴬᵀr  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Stringsr   )rN  rL  rM  rO  rP  u   ᴅaᵀa-labelrL  Zlabelu   æøåu   ŋot valid latin-1r   r   r   rO  F)r   r  r   r7   r.   r/  r   )r.   r7   )r[   r  r   rQ   rE   rI   r8   r9   r   
write_filer   r5  replacer   r  r;   r   r   r   r:   )r+   r.   r   r    r   r   r/  r<   writerr   r  Zreread_to_statar   r   r   test_utf8_writer[  sV   


"zTestStata.test_utf8_writerc              	   C   s   t tjdtjd}t &}tjtdd t	||dd W d    n1 s(w   Y  W d    n1 s7w   Y  t /}tjtdd t	||dd W d    n1 sZw   Y  W d    d S W d    d S 1 srw   Y  d S )	N)r   i  r>   z"version must be either 118 or 119.r  r1   r  zYou must use version 119r2   )
r   rE   ZzerosrG   r8   r9   r
  r  r  r   )r+   r]   r<   r   r   r   test_writer_118_exceptions  s   

"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 sGw   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  Zfreqr  r   r   r   r$   r  r$   )rW  ztest_stata.dtar2   r  r   r   r   r   )r%   r?   )r   r[   r  r8  Zconvert_dtypesr:   r8   r9   r-   rE   rc   rI   r;   r   )r+   rW  r]   r<   r   rT   r   r   r   test_read_write_ea_dtypes  s2   




z#TestStata.test_read_write_ea_dtypesN)e__name__
__module____qualname__r-   r   r
  markparametrizer=   rU   r^   rf   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.  r0  r:  r<  rG  rO  rX  rZ  rk  rv  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  rE   infr  r  r  r  r  r  r  r  r  r!  r%  r2  r7  r9  r=  rE  rJ  ZslowrK  rU  rV  Zparamr   Z
skip_if_nor[  r   r   r   r   r(   9   s8   

"

>

,(


%


	

	"
;14

#



 






K




1	r(   r.   )i   l   o   q   r0   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-r`   Fr   )r  r<   r  r   r8   r;   )r.   r&   Z	data_baserefoldrT   Zold_dtar   r   r   test_backward_compat  s   rk  c              
   C   sv  | dddd}t |}| jrJ t|jtjrJ W d    n1 s&w   Y  t|d*}t |}| jr=J |j|u sDJ W d    n1 sNw   Y  W d    n1 s]w   Y  t|dJ}t| *}t |}| jr|J |j|u sJ W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r    r!   rh  r"  )r   r  emptyrZ   Z_path_or_bufr   r  r  )r&   Zmonkeypatch	file_pathr  fpr  r   r   r   test_direct_read  s.   


"ro  c                 C   s   | dddd}t jtdd t|}|  W d    n1 s!w   Y  t jtdd |  W d    d S 1 s=w   Y  d S )Nr   r    r!   rh  zwithout using a context managerr  zis not part of the public API)r8   rz   ResourceWarningr   r  FutureWarningclose)r&   rm  rV  r   r   r   0test_statareader_warns_when_used_without_context  s   

"rs  r/   use_dictTFinferc              	   C   s  d}| r|r	| }n||  }|d| 7 }| }|rd}|r d| i}t tjddtdd}d	|j_t	|}	|j
|	||d
 | dkrct|	d}
t|
 }W d    n1 s]w   Y  n| dkrt|	d}
t|
|
jd }W d    n1 sw   Y  n| dkrt|	}t|| d  }W d    n1 sw   Y  ny| dkrt|	d}
t|
 }W d    n1 sw   Y  nW| dkrtd}||	d}
t|
 }W d    n1 sw   Y  n0| dkr#td}||	d}
t|
 }W d    n	1 sw   Y  n| d u r*|	}t|d	d}W d    n	1 s;w   Y  | }|jtj|_t|| d S )Nzdta_inferred_compression.dtar]  ru  methodr   r   r   r4   r$   )r.   compressionr#  r"  rE  rr   tarbz2zstdZ	zstandardxzlzmar  )r   rE   r   r   r   r   r$   r%   r8   r9   r:   r#  r  r   r  r  zipfileZipFilefilelisttarfileZextractfileZgetnamesrz  r
  Zimportorskipr   rP   rQ   rI   r;   )rw  r.   rt  ru  compression_to_extension	file_namefile_extZcompression_argr]   r<   comprn  ry  r{  r}  r  rT   r   r   r   test_compression  sp   



r  rv  rE  r  )Nr   rE  c              	   C   s(  d| }d}t tjddtdd}d|j_t	|Y}| |d}|j
||d	 | d
ks4|d
krit|d&}t|jdksDJ |jd j|ksNJ t||jd }W d    n1 scw   Y  n|}t|dd}	W d    n1 s{w   Y  | }
|
jtj|
_t|	|
 d S )Ntest.ztest.dtar   r   r   r4   r$   )rv  archive_namerw  rE  rx  r   r   r  )r   rE   r   r   r   r   r$   r%   r8   r9   r:   r~  r  r7  r  filenamer   r  r  r   rP   rQ   rI   r;   )rv  r  r  r  r]   r<   rw  Zzprn  r  rT   r   r   r   test_compression_dict  s,   

r  c                 C   s   t dtg dddi}d|j_| }|jtj|_t	 V}|j
|| d t|ddd	/}t|D ]"\}}|d}d|v sCJ t|j|jjd| d|d
    q4W d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )Ncats)r   r   r   r   r   r   r>   r$   r  r   F)r  r  r   )r   r   r$   r%   rP   rQ   rE   rI   r8   r9   r:   r   	enumerater   rR   r  r  )r.   r]   rT   r<   r  ra  blockr   r   r   test_chunked_categorical9  s$   

"r  c           	   	   C   sT  | dddd}g d}t |ddV}ttA t|D ]4\}}t|j|d| d|d   ks3J |dk r?td	d
g}ntjdgdd}t	|jj
j| qW d    n1 s[w   Y  W d    n1 sjw   Y  tt" t |dd}| }W d    n1 sw   Y  W d    n1 sw   Y  t|}t|| d S )Nr   r    r!   stata-dta-partially-labeled.dta)r   r   r   r   r   r   r  r   r   r   r   rO   r>   rV   )r   r8   rz   r   r  r   r  r[   r8  r  r   r   __next__r   r;   )	r&   dta_filer  r  ra  r  idxZlarge_chunkr  r   r   r    test_chunked_categorical_partialL  s,   &	
r  r  )rR  r   r  c              	   C   s~   | dddd}t jtdd' t||d W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )Nr   r    r!   r  zchunksize must be a positiver  r  )r
  r  r  r   )r&   r  r  r   r   r   test_iterator_errors_  s   "r  c               
      s
  ddgdgd   t  fddtdD } t a}| j|dd	 tg d
}t|dd4}t|D ]'\}}tdD ]}t	|j
j| j| q<t|| j|d |d d   q4W d    n1 sfw   Y  W d    d S W d    d S 1 s~w   Y  d S )Nc_labelb_labela_labelrY  c                    s"   i | ]}d | t j ddqS )r   Tr   )r[   r  )r3  rM  r  r   r   r4  j  s   " z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   )r  r  r  r@  r  r   )r   rY   r8   r9   r:   r[   r8  r   r  r  rS   r  r   r;   )r]   r<   rT   r  ro  r  ra  r   r  r   test_iterator_value_labelsg  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 X}tjtdd	 | j|d
d W d    n1 s;w   Y  t|}t	t
jt
jgddgd}t|j| |jd | jd kscJ |jd t| jd ksqJ W d    d S 1 s|w   Y  d S )Nc                 s   s    | ]}d | V  qdS )r   Nr   r`  r   r   r   	<genexpr>w  s    z&test_precision_loss.<locals>.<genexpr><   4   biglittler4   z&Column converted from int64 to float64r  Fr   rZ  )r   r  )r   r  )r   sumrY   r8   r9   rz   r
   r:   r   r   rE   rO   rR   rS   r   float)r]   r<   r  Zexpected_dtr   r   r   test_precision_lossu  s    ,
"r  c              	   C   s   t g dg dgddgg dd}d|j_t F}|j|| d t|| dd	}t|| t|| }t	
| }W d    n1 sFw   Y  t|dd
}t|| W d    d S 1 sbw   Y  d S )Ng~Ϛ?g9DܜJ?g>D)?g.4i(@g33333@g̤Ar  r	  XYZr6  r$   r  rw  r  r  )r   r$   r%   r8   r9   r:   r   r;   Zdecompress_filer   r  r  )rw  r]   r<   r  Zfhcontentsr   r   r   test_compression_roundtrip  s    
"r  to_infer
read_inferc                 C   s   | }|| }d| }t g dg dgddgg dd}d|j_|r$d	n|}|r*d	n|}	t|}
|j|
|d
 t|
|	dd}t|| W d    d S 1 sQw   Y  d S )Nr  r  r  r  r	  r  r6  r$   ru  r  r  )r   r$   r%   r8   r9   r:   r   r;   )Zcompression_onlyr  r  r  rw  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 }dd	d
ddd	dd}i |dddddi}t|| |d}|  t	|}|
 }||ksPJ W d    n1 sZw   Y  d}tjt|d ddddi}t|| |d W d    n1 sw   Y  d}tjt|d ddddddi}t|| |d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N)r   r   r   r   r   r   r  g      "@)rn   rn   r   rm   rq   )ro  rM  r\  rM  ro  )fully_labelledpartially_labelledr  r  r   r   r   rQ  )r   r  )r  r  r  ro  rM  r\  rY  r/  zCCan't create value labels for notY, it wasn't found in the dataset.r  ZnotYrH  rI  )rn   rm   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   ra  r   )r   rE   rc   r[   r  r8   r9   r   rR  r   r/  r
  r  r  r  )r    r<   r/  rT   rT  r  reader_value_labelsr  r   r   r   !test_non_categorical_value_labels  s@   
	

"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 K}tt | j||d W d    n1 sZw   Y  t|}| }||ksnJ W d    n1 sxw   Y  W d    d S W d    d S 1 sw   Y  d S )N)r   r   r   r   rV   rm   )rm   rm   r   r   rm   rm   )r   rV   rV   rr   rr   r   r   )z	invalid~!Z	6_invalidZ&invalid_name_longer_than_32_charactersZ	aggregater   r   rH  rI  r  r   r   )rm   r   rV   r   r   r   )Z	invalid__Z
_6_invalidZ invalid_name_longer_than_32_charZ
_aggregateZ_1__2_r  )r   r8   r9   rz   r	   r:   r   r/  )r    r/  rT   r<   r  r  r   r   r   0test_non_categorical_value_label_name_conversion  s>   	

"r  c               	   C   s  dddddi} t dg di}t h}|j|| d t|dd}| }W d    n1 s1w   Y  || ks<J d}d	d
dg }d| d| d
}tjt	|d t
|dd W d    n1 sgw   Y  W d    d S W d    d S 1 sw   Y  d S )NZrepeated_labelsZTenzMore than ten)rq   rl   (   )rq   rq   rl   rl   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   r/  r  r
  r  r  r   )r/  r    r<   r  r  r   Zrepeatsr  r   r   r   ;test_non_categorical_value_label_convert_categoricals_error  s2   

	"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r-d	}n|d
kr3d}t	j
| }t	|}td||gtdd}tg ddd}t -}|j|d|d t|dd}	t|j|	j t|	j| t|	j| W d    d S 1 sw   Y  d S )Nr  r   r>   )r   r   Nr   ur   rJ   rI   boolrG   r   r5  )r   r   r   r   r  Fr6   Trq  )r   r   r[   ZNAr%   r   r?   Znumpy_dtyperS  r   ZBASE_MISSING_VALUESr   r8   r9   r:   r   rR   r   r   )
r?   r.   r]   Z
dtype_namevaluert  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 G}| j|ddd t|}d	|v s&J tt	d
t	dd}t
|j| t|dgd}d	|vsGJ t
|j|jdg  W d    d S 1 s]w   Y  d S )Nr   r  rW   r  r   Fr1   r6   r   rI   rO   r   r4   )r   rY   r,  r8   r9   r:   r   r   rE   r?   rR   rS   r   )r]   r<   Zdf2rS   Zdf3r   r   r   test_empty_frameO	  s   
"r  )Erz  r   r  r#  r   r  rf  r  r~  ZnumpyrE   r
  Zpandas.util._test_decoratorsutilZ_test_decoratorsr   r>  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(   r_  r`  rk  ro  rs  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

&%&