o
    iK                    @   sv  d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlZd dlmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ej'd	d
 Z(ej'dd Z)G dd dZ*ej+,dg ddd Z-ej+,dg dej+,dddgej+,dddgdd Z.ej+,dddgej+,dg ddd Z/ej+,dg dd d! Z0d"d# Z1ej+,d$d%d&d' Z2d(d) Z3d*d+ Z4d,d- Z5ej+,d.ddgej+,d/ddgd0d1 Z6d2d3 Z7d4d5 Z8d6d7 Z9ej+,dg dej+,d8ej:ej;ej<ej=ej>ej?ej@ejAejBg	d9d: ZCdS );    N)datetime)is_categorical_dtype)	DataFrameSeries)ensure_index)_compression_to_extensionread_csv)	CategoricalConversionWarningInvalidColumnNamePossiblePrecisionLossStataMissingValueStataReaderStataWriterStataWriterUTF8ValueLabelTypeMismatch
read_statac                   C   s   t g dg dg ddS )N            )      ?      @g      ;@g     @T@)Atlanta
Birmingham
CincinnatiDetroitabc)r    r"   r"   U/var/www/edux/Edux_v2/venv/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)datapath	dta14_114
parsed_114r"   r"   r#   r.   3   s   r.   c                   @   s  e Zd Zdd Zdd Zejdg ddd Zejd	d
dgdd Z	dd Z
ejd	g ddd Zejd	g ddd Zdd Zdd Zdd Zdd Zejdg ddd Zd d! Zd"d# Zejdg dd$d% Zd&d' Zejdg dd(d) Zd*d+ Zejdg dejd	g d,d-d. Zejd	g d/d0d1 Zejdg dd2d3 Zejdg dd4d5 Zd6d7 Zejdg dd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%ejdg dejdJdKdLgdMdN Z&dOdP Z'dQdR Z(dSdT Z)dUdV Z*ejd	g dWdXdY Z+dZd[ Z,d\d] Z-d^d_ Z.ejdg dej/d`dadb Z0dcdd Z1ejdg ddedf Z2ejd	dgdhgdidj Z3ejd	dkdlgdmdn Z4ejd	dgdhgdodp Z5ejd	g dqejdrdsdtgejdudvdwgejdxdvdwgdydz Z6e7d{e8d|e8fd}d~Z9dd Z:ejd	g dejdrdsdtgejdudvdwgejdxdvdwgdd Z;dd Z<ejdg ddd Z=ejdg ddd Z>ejdddgdd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGejdeHjIeHjI gdd ZJdd ZKdd ZLejddwdvgdd ZMdd ZNejdg ddd ZOdd ZPdd ZQdd ZRejdg ddd ZSdd ZTdd ZUdd ZVejdg ddd ZWejdg ddd ZXdd ZYddÄ ZZejj[ddń Z\ejdg dƢddȄ Z]ddʄ Z^dS )	TestStatac                 C      t |ddS )NTr(   )r   selffiler"   r"   r#   read_dta<   s   zTestStata.read_dtac                 C   r0   )NT)parse_datesr   r1   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 )NunitcolumnsFwrite_indexr6   )r   tmensure_cleanto_statar   assert_frame_equal)r2   r6   empty_dspath	empty_ds2r"   r"   r#   test_read_empty_dtaC   s   
"zTestStata.test_read_empty_dtar3   
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_missdouble_miss	byte_missint_miss	long_missr=   rM   )r4   r   npnanastypefloat32rA   rD   r2   r3   r,   parsedexpectedr"   r"   r#   test_read_dta1L   s   
zTestStata.test_read_dta1c                 C   s  t jtdddddddtdd	dtdd	d
tdd	d	tddd	tdd	d	tdd	d	ftdddddddtdddtdddtdd	d	tddd	tdd	d	tdd	d	ftjtjtjtjtjtjtjtjfgg dd}|d d|d< tjdd:}td | 	|dd d!d"}| 	|dd d!d#}| 	|dd d!d$}d%d& |D }t
|dksJ 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  )
datetime_cdatetime_big_cdateweekly_datemonthly_datequarterly_datehalf_yearly_dateyearly_dater=   rm   OTrecordalwaysr%   r&   r'   zstata2_114.dtazstata2_115.dtazstata2_117.dtac                 S   s   g | ]	}|j tu r|qS r"   )categoryUserWarning).0xr"   r"   r#   
<listcomp>       z,TestStata.test_read_dta2.<locals>.<listcomp>check_datetimelike_compat)r   from_recordsr   pdNaTrT   warningscatch_warningssimplefilterr4   lenrA   rD   )r2   r,   rX   wr.   
parsed_115
parsed_117r"   r"   r#   test_read_dta2_   sR   











"
#
	zTestStata.test_read_dta2)
stata3_113
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'   rK   
stata3.csvyearquarter)	r4   r	   rT   rR   rU   int16int8rA   rD   rV   r"   r"   r#   test_read_dta3   s   
zTestStata.test_read_dta3)
stata4_113
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'   rK   )onetenr   r   r   )twoniner   r   r   )threeeightr   r   r   )foursevenr   r   r   fivesix   re   r   r   ra   r   r   r`   r   r   	   r   r   )fully_labeledfully_labeled2incompletely_labeledlabeled_with_missingsfloat_labelledr=   r   r   rr   Torderedinplace)r4   r   rz   rR   rS   copyasarraynotnarT   _valuesset_categories
categoriesrenamerA   rD   )	r2   r3   r,   rW   rX   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   abc	abcdefghi)r   cbaqwertywertyqwerty)]    strl)ru   yzr=   Fcheck_dtype)r4   r   rz   rA   rD   )r2   r,   r   rX   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Bytesrn   )CatBogotau   Bogotár   r   u   option b Ünicoder   DogBostonu   Uzunköprü)PlaneRomeu   Tromsør           option ar   )PotatoTokyou	   Elâzığ      @r   r   )r   r   r   r   gT?r   gUUUUUU?)ThingsCitiesUnicode_Cities_StrlIntsFloatsr   Longsr=   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)r4   rT   r   rz   rR   rS   rU   r>   rA   assert_almost_equalr   variable_labelsassert_dict_equal
data_label)r2   r,   
parsed_118rX   r   rdrvl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 | |}t	|
d| W d    d S 1 s<w   Y  d S )NrL   r=   r*   r(   )r   rR   rS   r*   r+   rA   rB   rC   r4   rD   	set_index)r2   originalrF   written_and_read_againr"   r"   r#   test_read_write_dta5  s   

"zTestStata.test_read_write_dta5c                 C   s   |  |dddd}d|j_|jtj|_|d tj|d< |d tj|d< t  }|j|d d | 	|}tj
|d|d	d
 W d    d S 1 sQw   Y  d S )Nr%   r&   r'   r   r*   r   r   r(   Fcheck_index_type)r	   r*   r+   rT   rR   int32rA   rB   rC   r4   rD   r   )r2   r,   r   rF   r   r"   r"   r#   test_write_dta6$  s   

"zTestStata.test_write_dta6c                 C   s   t ddddtdggg dd}t|d td|d< d	|j_|jtj|_|d
 tj|d
< t	
 #}|j|ddi|d | |}t	j|d	|dd W d    d S 1 s[w   Y  d S )Nstringobjectr   皙?
2003-12-25)r   r   integerfloatingr   r&   r>   dtyper*   r   r   tcr)   r6   Fr   )r   rR   
datetime64r   r   r*   r+   rT   r   rA   rB   rC   r4   rD   r   )r2   r6   r   rF   r   r"   r"   r#   test_read_write_dta104  s"   

"zTestStata.test_read_write_dta10c                 C   sR   t  }ttjddtdd}|| W d    d S 1 s"w   Y  d S )Nrd   r   ABr=   )rA   rB   r   rR   randomrandnlistrC   )r2   rF   dfr"   r"   r#   test_stata_doc_examplesI  s   
"z!TestStata.test_stata_doc_examplesc                 C   s   t jd tt jddtdd}t j|jdddf< | }t	
 }|j|d	d
 W d    n1 s7w   Y  t	|| d S )Ni  r   r   abcdr=   r   r   r!   Fr@   )rR   r   seedr   r   r   rS   locr   rA   rB   rC   rD   )r2   r   df_copyrF   r"   r"   r#   test_write_preserves_originalN  s   
z'TestStata.test_write_preserves_originalc           	      C   s   t |dddd}t |dddd}|jd }|jd }||k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   Fr?   )r   	kreis1849
isinstancestrrA   rB   rC   rD   )	r2   r6   r,   rawencodedresultrX   rF   reread_encodedr"   r"   r#   test_encodingX  s   


"zTestStata.test_encodingc              	   C   s   t dgg dd}t dgg dd}d|j_|tj}t 3}tt	 |j
|d d W d    n1 s8w   Y  | |}t|d| W d    d S 1 sVw   Y  d S )Nr   )goodu   bäd8number%astringwithmorethan32characters______r=   )r  b_d_8number astringwithmorethan32characters_r*   r(   )r   r*   r+   rT   rR   r   rA   rB   assert_produces_warningr   rC   r4   rD   r   )r2   r   	formattedrF   r   r"   r"   r#   test_read_write_dta11i  s"   	

"zTestStata.test_read_write_dta11c              	   C   s   t dgg dd}t dgg dd}d|j_|tj}t C}tj	dd}t
dt |j|d |d	 t|d
ks>J W d    n1 sHw   Y  | |}t|d| W d    d S 1 sfw   Y  d S )Nr   r   r   r   r   re   )!astringwithmorethan32characters_1!astringwithmorethan32characters_2+-shortdeleter=   )r	   _0astringwithmorethan32character__1__short_deleter*   Tro   rq   r   r   )r   r*   r+   rT   rR   r   rA   rB   r}   r~   r   r   rC   r   r4   rD   r   )r2   r6   r   r  rF   r   r   r"   r"   r#   test_read_write_dta12  s&   

"zTestStata.test_read_write_dta12c                 C   s   t dtjd}t dtjd}t dtjd}t|||d}d|j_|}|d tj	|d< t
 }|| | |}t
|d| W d    d S 1 sPw   Y  d S )Ni   r   i   l        )r   r   int64r*   r  )r   rR   r   r   r  r   r*   r+   rT   float64rA   rB   rC   r4   rD   r   )r2   s1s2s3r   r  rF   r   r"   r"   r#   test_read_write_dta13  s   


"zTestStata.test_read_write_dta13)
stata5_113
stata5_114
stata5_115
stata5_117c                 C   s   |ddd| d}|  |}d|j_| |dddd}g d}|D ]}|| jddd	||< q#|d
 tj|d
< tj	|d dd|d< t
|| t
 !}	|j|	ddi|d |  |	}
t
|
d| W d    d S 1 stw   Y  d S )Nr%   r&   r'   rK   r*   z
stata5.csv)byte_int_long_float_double_T)r   numericr'  date_tdcoerce)errorstdr   )r4   r*   r+   r	   _convertrT   rR   rU   r{   to_datetimerA   rD   rB   rC   r   )r2   r3   r.   r6   r,   rW   rX   colsr   rF   r   r"   r"   r#   test_read_write_reread_dta14  s   


"z&TestStata.test_read_write_reread_dta14)
stata6_113
stata6_114
stata6_115
stata6_117c                 C   s   |  |dddd}|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d	 tj|d	< |d
 jt	j
dd|d
< |ddd| d}| |}t|| d S )Nr%   r&   r'   
stata6.csvr$  r%  r&  r'  r(  r*  z%Y-%m-%dargsrK   )r	   rT   rR   r   r   r   rU   r  applyr   strptimer4   rA   rD   )r2   r3   r,   rX   rW   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   variabler=     r            zThis is a data file.)
time_stampr   r6   z29 Feb 2000 14:21)r   r   rA   rB   rC   r   rC  r   )r2   r6   r   rC  r   rF   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>  r=   z01 Jan 2000, 00:00:00z"time_stamp should be datetime typematch)rC  r6   )
r   rA   rB   pytestraises
ValueErrorrC   osrF   isfile)r2   r6   r   rC  rF   msgr"   r"   r#   test_invalid_timestamp  s   
"z TestStata.test_invalid_timestampc              	   C   s   t ttdd}d|j_t B}tt	 |
| W d    n1 s)w   Y  | |}|d}t|j}dd }t|||_t|| W d    d S 1 sXw   Y  d S )Ng      9@)r   r   r*   c                 S   s   t | d S )Nr   )intru   r"   r"   r#   <lambda>  s    z5TestStata.test_numeric_column_names.<locals>.<lambda>)r   rR   reshapearanger*   r+   rA   rB   r
  r   rC   r4   r   r   r>   maprD   )r2   r   rF   r   r>   convert_col_namer"   r"   r#   test_numeric_column_names  s   



"z#TestStata.test_numeric_column_namesc                 C   s   t tdtjd}t tdtjd}tj|d d d< tj|dd d< t||d}d|j_t	
  }|j||d | |}|d}t	|| W d    d S 1 sVw   Y  d S )Nr   r   r   r   r  r  r*   r6   )r   rR   rS  rU   r  rS   r   r*   r+   rA   rB   rC   r4   r   rD   )r2   r6   r  r  r   rF   r   r"   r"   r#   test_nan_to_missing_value  s   


"z#TestStata.test_nan_to_missing_valuec              	   C   s   ddg}t ttdd|d}d|j_t :}|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 )
Nru   r         $@)r   r   r=   index_not_writtenFr   rF  )r   rR   rR  rS  r*   r+   rA   rB   rC   r4   rH  rI  KeyError)r2   r>   r   rF   r   r"   r"   r#   test_no_index  s   


"zTestStata.test_no_indexc                 C   s   t ddg}t ddgtjd}t||d}d|j_t }|| | 	|}t
|d| W d    d S 1 s=w   Y  d S )Nr   zA longer stringr          @r   rW  r*   )r   rR   r  r   r*   r+   rA   rB   rC   r4   rD   r   )r2   r  r  r   rF   r   r"   r"   r#   test_string_no_dates  s   


"zTestStata.test_string_no_datesc           	   	   C   s*  t ddgtjd}t ddgtjd}t ddgtjd}t ddgtjd}t||||d}d|j_t	 V}t
t || W d    n1 sKw   Y  | |}| }t |d	 tjd|d	< t |d
 tjd|d
< t |d tjd|d< t|d| W d    d S 1 sw   Y  d S )Nr   c   r      i  l    )s0r  r  r  r*   r  r  r  )r   rR   r   r   r  r   r*   r+   rA   rB   r
  r   rC   r4   r   r   r  rD   r   )	r2   rb  r  r  r  r   rF   r   modifiedr"   r"   r#   test_large_value_conversion)  s"   

"z%TestStata.test_large_value_conversionc              	   C   s   t tddddddg}d|j_t =}tt |j|dd	id
 W d    n1 s.w   Y  | 	|}|
 }dg|_t|d| W d    d S 1 sTw   Y  d S )NrZ   r[   r\   r]   r^   r_   r*   r   r   r(   _0)r   r   r*   r+   rA   rB   r
  r   rC   r4   r   r>   rD   r   )r2   r   rF   r   rc  r"   r"   r#   test_dates_invalid_column;  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   rh  )r   r   r   rh  )clustnumpri_schlpsch_numpsch_disri  rj  rk  rl  r   )r   r   r>   rT   rR   r   r   rU   rA   rD   head)r2   r,   dpathr   df0r"   r"   r#   test_105G  s   
zTestStata.test_105c                 C   s2   |dddd}t |}| i ksJ |  d S )Nr%   r&   r'   rg  )r   value_labelsclose)r2   r,   rn  rD  r"   r"   r#   test_value_labels_old_formatU  s   z&TestStata.test_value_labels_old_formatc           	   
   C   s  g d}dd |D }t ddddddgt| }t|g|d	}d
|j_t ddddddt dddt dddt dddt dddt dddt dddg}t|g|d	}d
|j_t }|j||d | |}t	|
d
| W d    d S 1 s|w   Y  d S )N)r   r-  twrA   tqthtyc                 S   s   i | ]}||qS r"   r"   rt   r!   r"   r"   r#   
<dictcomp>a  s    z6TestStata.test_date_export_formats.<locals>.<dictcomp>rZ   r[   r_   r]   r^   r=   r*   r\   r   rd   ra   r(   )r   r   r   r*   r+   rA   rB   rC   r4   rD   r   )	r2   r>   conversionsr&   r   expected_valuesrX   rF   r   r"   r"   r#   test_date_export_formats_  s(   








"z"TestStata.test_date_export_formatsc                 C   s   t dgd ggdgd}t dgdggdgd}d|j_t }|| | |}t|d| W d    d S 1 s=w   Y  d S )N1foor=   r   r*   )	r   r*   r+   rA   rB   rC   r4   rD   r   )r2   r   rX   rF   r   r"   r"   r#   test_write_missing_stringsv  s   


"z$TestStata.test_write_missing_strings	byteorder><c              	   C   sL  t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g dtjd}t g dtjd}	t|||||||	d	}
d
|
j_|
	 }tj
tj
tjtjtjtjtjf}t|j|D ]\}}|| |||< qit !}|
j|||d | |}|d
}t|| W d    d S 1 sw   Y  d S )N)r   r   Tr   )r   r   d   )r   r      )r   r   i  )r   r   i  )r   r   i)r   r   l    )rb  r  r  r  s4s5s6r*   )r  r6   )r   rR   bool_uint8uint16uint32r   r*   r+   r   r   r   r   r  zipr>   rT   rA   rB   rC   r4   r   rD   )r2   r  r6   rb  r  r  r  r  r  r  r   rX   expected_typesr!   trF   r   r"   r"   r#   test_bool_uint  s8   	


"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)var1var2var3)label1label2label3)r   r   items)	r2   r,   r   sr_115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|;}|j}|j}|j	}	t
||	|D ]#\}
}}t|
dd  t|dd	 ksWJ t|
dd  |kscJ q@W d    n1 snw   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   rA   rB   rC   r   typlistvarlistfmtlistr  rO  )r2   str_lensr  str_lenr   rF   srr  	variablesformatsr>  fmttypr"   r"   r#   test_minimal_size_col  s*   

$"zTestStata.test_minimal_size_colc              	   C   s   d}i }|D ]}t d| d| d| g|dt| < qt|}d}tjt|d* t }|| W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )N)r   r    r   r    r!   r  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\.rF  )	r   r   r   rH  rI  rJ  rA   rB   rC   )r2   r  r  r  r   rM  rF   r"   r"   r#   test_excessively_long_string  s    
"z&TestStata.test_excessively_long_stringc              	   C   sh  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D ]}	t|d
 |	 }
|
j	||	 kslJ qYqLt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'  r=   c                 S   s   g | ]
}d t d|  qS ).a   )chrrt   ir"   r"   r#   rv     s    z:TestStata.test_missing_value_generator.<locals>.<listcomp>   r   r  r      z<fs      s     z.zz<ds         s        )r   rA   rB   rC   r   VALID_RANGErangeinsertr   r   structunpack)r2   typesr   rF   r   valid_ranger{  r  offsetr  valr"   r"   r#   test_missing_value_generator  s:   


z&TestStata.test_missing_value_generator)
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)int8_int16_int32_float32_float64_e   r  c                    s    g | ]}t  |d    qS )r  )r   )rt   jr  r  r"   r#   rv     s     z;TestStata.test_missing_value_conversion.<locals>.<listcomp>r   r=   r%   r&   r'   rK   Tconvert_missing)
r   sortedMISSING_VALUESr  r  appendr   r   rA   rD   )	r2   r3   r,   r>   smvr&   rowrX   rW   r"   r  r#   test_missing_value_conversion  s   z'TestStata.test_missing_value_conversionc                 C   s  g d}g d}g d}g d}g d}g d}g }t t|D ]L}	g }
t dD ]>}|dkrG|
t||	 ||	 ||	 ||	 ||	 ||	  q(|dkrW|
t||	 d	d	 q(|
t||	 ||	 ||	  q(||
 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_t	jtd"d# ||| W d    n	1 sDw   Y  | |}t	j
|d!|dd W d    d S 1 sew   Y  d S )$N)i  r?  '  r      )r   r   rb   r   r   r   )r   r   rc   r      r]   )r   r   r]   r   r   r   )r   r   ;   r   r   r   ra   r   re   r   )date_tcr*  date_twdate_tmdate_tqdate_thdate_tyr  rb      r   r   rd   r   r   r     r  i  )r>   r   r%   r&   r'   zstata9_115.dtazstata9_117.dtaTrx   c                 S   s   i | ]	}||d d qS )rh  Nr"   rx  r"   r"   r#   ry  0  rw   z,TestStata.test_big_dates.<locals>.<dictcomp>r*   zkeyword-onlyrF  )r  r   r  r   r{   r|   r   r   r   rA   rD   rB   r*   r+   r
  FutureWarningrC   r4   r   )r2   r,   yrmoddhrmmssrX   r  r  r  r>   r   r   date_conversionrF   r   r"   r"   r#   test_big_dates  sZ   2   , 

$zTestStata.test_big_datesc                 C   s  |  |dddd}|d tj|d< |d tj|d< |d tj|d< |d tj|d< |d	 tj|d	< |d
 jt	j
dd|d
< t|dddddd}t|| t|ddddddd}|  |dddd}|d
 jt	j
dd|d
< t|| d S )Nr%   r&   r'   r6  r$  r%  r&  r'  r(  r*  r7  r8  stata6_117.dtaTr(   F)r)   preserve_dtypes)r	   rT   rR   r   r   r   rU   r  r:  r   r;  r   rA   rD   )r2   r,   rX   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'   r6  r$  r%  r&  r'  r(  r*  r7  r8  )r$  r%  r&  r  T)r)   r>   )r%  r&  r$  z"columns contains duplicate entriesrF  zEThe following columns were not found in the Stata data set: not_found)r$  r%  r&  	not_found)r	   rT   rR   r   r   r   rU   r  r:  r   r;  r   rA   rD   rH  rI  rJ  )r2   r,   rX   r>   dropped	reorderedrM  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 d|j_|d 	t
|d< |d 	t
|d< |D ])}||  }|dj}| }|dkr|j|dd }|jjd dd! |||< qot  } j||d" | |}|d}t|| W d    d S 1 sw   Y  d S )#N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   re   r   r   ra   r   r   r`   r   r   r   r   r   rd   )r   r   r   r   r   	unlabeledr=   c                       g | ]	} |  d qS rr   rT   rt   r   r   r"   r#   rv     rw   z6TestStata.test_categorical_writing.<locals>.<listcomp>r   axisr*   r   r  rr   Tr   r   rX  )r   rz   rR   rS   r   r{   concatr*   r+   r:  r   rT   r   
as_orderedr   r   r   rA   rB   rC   r4   r   rD   )	r2   r6   rX   r   r   r   rF   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!   dToo_longr=   c                    r  r  r  r  r  r"   r#   rv     rw   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\.rF  c                    r  r  r  r  r  r"   r#   rv     rw   )r   rz   r{   r  rA   rB   rH  rI  rJ  rC   r
  r   )r2   rF   rM  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
 | |}|d	}  }|D ]}|| j}| j}	|j|	dd}|||< qFt
|| W d    d S 1 sow   Y  d S )Nc                 S   s   g | ]	}d t | gqS )r   )r   r  r"   r"   r#   rv     rw   zHTestStata.test_categorical_with_stata_missing_values.<locals>.<listcomp>x   many_labelsr=   c                    r  r  r  r  r  r"   r#   rv     rw   r   r  r*   rX  Tr   )r  r  rR   rS   r   rz   r{   r  r*   r+   rA   rB   rC   r4   r   r   r   remove_unused_categoriesr   r   rD   )
r2   r6   valuesrF   r   r  rX   r   r   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rt|| jj|	| jj t|| jj|	| jj qd S )NTr   )r   r    r!   r  er   reverser  noorder)r   r   r   r   r   r   r   float_missing)r   r  r
  )r   r   r   r  r  Fnolabel)r   r^  r   r   g      @int32_mixed)r  r   r
  r    r   r   r   r%   r&   r'   rK   )rR   rS  arrayr  r{   Categorical
from_codesr   rU   r   	from_dictdictr   rA   rD   r   r   assert_series_equalr   codesassert_index_equalr   )
r2   r3   r,   rX   r0  is_catr   r  r  rW   r"   r"   r#   test_categorical_order  s6   	z TestStata.test_categorical_orderstata11_115stata11_117c                 C   sz   t |ddd| d}|jddd}t|jd |_g d	}g d
}tjj||dd}t	|dd}t
||d  d S )Nr%   r&   r'   rK   srhfirst)na_positionr   )
r  r  r   r   r   r   r   r   r   r   )PoorFairGoodz	Very good	ExcellentT)r  r   r   r+   )r   sort_valuesrR   rS  shaper*   r{   r  r  r   rA   r  )r2   r3   r,   rW   r  r   r   rX   r"   r"   r#   test_categorical_sorting  s   z"TestStata.test_categorical_sortingc                 C   sf   |ddd| d}t |}t |dd}|D ]}t|| js q|| jjs(J || jjr0J qd S )Nr%   r&   r'   rK   F)order_categoricals)r   r   r   r   r   )r2   r3   r,   rW   parsed_unorderedr   r"   r"   r#   test_categorical_ordering,  s   z#TestStata.test_categorical_ordering)rJ   
stata2_117r   r   r#  r5  
stata7_117r  
stata9_117r	  r  	chunksizer   r   convert_categoricalsFTr)   c              
   C   s.  |ddd| d}t jdd t d t|||d}W d    n1 s'w   Y  t|d||d	}d
}	tdD ]V}
t jdd% t d z||}W n ty_   Y W d     n2w W d    n1 sjw   Y  |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	q:|  d S )Nr%   r&   r'   rK   Tro   rq   r.  r)   )iteratorr.  r)   r   r   Fr   ry   r}   r~   r   r   r  readStopIterationilocr   _convert_categoricalrA   rD   rr  r2   r3   r-  r.  r)   r,   fnamerW   itrposr  chunk
from_framer"   r"   r#   test_read_chunks_1178  sD   



zTestStata.test_read_chunks_117r<  returnc                 C   sT   | D ]%}| | }t |jr'|j }|jjtkr#t|jj}||}|| |< q| S )zX
        Emulate the categorical casting behavior we expect from roundtripping.
        )r   r   r   r  r   r   r   r   )r<  r   serr   r   r"   r"   r#   r6  o  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r0  r   r   r-  r   )	r   r3  rA   rD   r5  r   	get_chunkr{   r  )r2   r,   r8  rW   r9  r;  from_chunksr"   r"   r#   test_iterator~  s,   
 $
  zTestStata.test_iterator)

stata2_115r   r   r"  r4  
stata7_115r  
stata9_115r  r  c              
   C   s.  |ddd| d}t jdd t d t|||d}W d    n1 s'w   Y  t|d||d	}d
}	tdD ]V}
t jdd% t d z||}W n ty_   Y W d     n2w W d    n1 sjw   Y  |j|	|	| d d f  }| 	|}t
j||ddd |	|7 }	q:|  d S )Nr%   r&   r'   rK   Tro   rq   r/  )r0  r)   r.  r   r   Fr1  r2  r7  r"   r"   r#   test_read_chunks_115  sD   
	


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   cpim1r   r=   TrA  r   r   Fr   )r   r  r3  r5  rA   rD   )r2   r,   r8  r>   r-  rW   r9  r:  r  r;  r<  r"   r"   r#   test_read_chunks_columns  s"   
"z"TestStata.test_read_chunks_columnsc              	   C   s  d|j _dddd}t 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   r6   r   )r*   r   r    r!   z	The Index)r*   r+   rA   rB   rC   r   r   )r2   r6   r$   r   rF   r  read_labels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 longrN  rO  r   .Variable labels must be 80 characters or fewerrF  rP  r*   r+   rA   rB   rH  rI  rJ  rC   )r2   r6   r$   r   rF   rM  r"   r"   r#   test_invalid_variable_labels  s   
"z&TestStata.test_invalid_variable_labelsr8   r9   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*   rT  rN  rO  r   u   invalid character Œr   z,Variable labels must contain only charactersrF  rP  rV  )r2   r6   r$   r   rF   r"   r"   r#   $test_invalid_variable_label_encoding  s   
"z.TestStata.test_invalid_variable_label_encodingc              	   C   s  g d}ddd |d}d}tjt|d# 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   ΔrY  u   ΣrM  rN  r   r   zKVariable labels must contain only characters that can be encoded in Latin-1rF  )r   zqA very, very, very long variable label that is too long for Stata which means that it has more than 80 charactersrU  )joinrH  rI  rJ  rA   rB   rC   )r2   r$   r  variable_labels_utf8rM  rF   variable_labels_longr"   r"   r#    test_write_variable_label_errors  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  rb   rc   .    rB  R    ra   r     r   r^  r   applebananacherrynumsstrsdatesFr   Tr(   rl  r   )r@   r)   )dtr   r   rA   rB   rC   r   rD   r>   tolistr*   )r2   rl  r   rF   rereaddirect	dates_idxr"   r"   r#   test_default_date_conversion.  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 supportedrF  )r   rH  rI  NotImplementedErrorrA   rB   rC   )r2   r   rM  rF   r"   r"   r#   test_unsupported_typeK  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^  rb   rc   r_  r`  rB  ra  rb  ra   r   rc  rd  re  ri  zFormat %tC not implementedrF  rl  tCr(   z1-1-1990r   zAsia/Hong_Kong)periodstzzData type datetime64)rm  r   r   rH  rI  rs  rA   rB   rC   r{   
date_range)r2   rl  r   rM  rF   r"   r"   r#   test_unsupported_datetypeS  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
rF  r%   r&   r'   zstata15.dtaTr.  )rH  rI  rJ  r   )r2   r,   rM  r"   r"   r#   test_repeated_column_labelsr  s   
"z%TestStata.test_repeated_column_labelsc                 C   s   t |dddd}tdddddddtjddg
ddddtjd	dd
ddg
dtjd
dd	d	ddddg
g dd}|g d }t|| d S )Nr%   r&   r'   zstata7_111.dtar   r   r   r   r   r   re   )
r   r    r!   r  r
  r   gr  r  r  )r   ru   r   r   )r   r   rR   NaNrA   rD   )r2   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      ColumnOkColumnTooBigzZColumn ColumnTooBig has a maximum value \(.+\) outside the range supported by Stata \(.+\)rF  )r   rR   finfodoubleepsmaxrH  rI  rJ  rA   rB   rC   )r2   r   rM  rF   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|}|d tj|d< t	||d W d    d S 1 sbw   Y  d S )Nr   rZ  r  r*   r  )r   rR   r  rU   r  r  r*   r+   rT   rA   rB   rC   r   r  rD   r   )r2   r   r   rF   ro  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^  )
WithoutInfWithInfz[Column WithInf contains infinity or -infinitywhich is outside the range supported by Stata.rF  )r   rH  rI  rJ  rA   rB   rC   )r2   r  r   rM  rF   r"   r"   r#   test_inf  s   
"zTestStata.test_infc                 C   6   t  }d|j_dd }t |j|}t || d S )Nr*   c                 S      t | dS Nr*   r   r   rP  r"   r"   r#   rQ        z-TestStata.test_path_pathlib.<locals>.<lambda>)rA   makeDataFramer*   r+   round_trip_pathlibrC   rD   r2   r   rD  r  r"   r"   r#   test_path_pathlib  
   zTestStata.test_path_pathlibc                 C   r  )Nr*   c                 S   r  r  r  rP  r"   r"   r#   rQ    r  z6TestStata.test_pickle_path_localpath.<locals>.<lambda>)rA   r  r*   r+   round_trip_localpathrC   rD   r  r"   r"   r#   test_pickle_path_localpath  r  z$TestStata.test_pickle_path_localpathr@   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&   rr   r   TrA  r  r  r  )r   r   r   r   )r   rT   rA   rB   rC   r   rq  )r2   r@   r  r   rF   dta_iterrq  r"   r"   r#   test_value_labels_iterator  s   


z$TestStata.test_value_labels_iteratorc                 C   s^   t  }d|j_t  }|| t|dd}W d    n1 s"w   Y  t || d S )Nr*   	index_col)rA   r  r*   r+   rB   rC   r   rD   )r2   r   rF   ro  r"   r"   r#   test_set_index  s   

zTestStata.test_set_indexcolumn)msdayweekmonthqtr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   )r2   r  r,   r   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 +}|j|ddidgdd | |}tj|d|dd t|| W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai  zstring-1zobject-1z
2003-12-26r      bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   )r   r   r   r   r   rU   r  r   r  s2045srtlforced_strlr   r   r   r   r   rU   r*   r   r   r  r9   )r)   convert_strlr6   Fr   )r   rR   r   r   r   r   r   rT   r   rU   r*   r+   r   rA   rB   rC   r4   rD   r   )r2   r   r   rF   r   r"   r"   r#   test_writer_117  sj   .

"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)  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  rf  )  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr  rg  )2long1long1long1long1long1long1long1long1long1long1longr   r=   r*   r  r   r9   )r  r6   Fr   )r   r*   r+   rA   r
  r   rB   rC   r4   r   r>   rD   )r2   r   rF   ro  r"   r"   r#   test_convert_strl_name_swapH  s    


"z%TestStata.test_convert_strl_name_swapc                 C   s   t dddddddt dddddddt dd	d
d	d
d	dg}tg dg d|d}t 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^  rb   rc   r_  r`  rB  ra  rb  ra   r   rc  rd  re  ri  z0convert_dates key must be a column or an integerrF  
wrong_namer   r(   )	rm  r   r   rA   rB   rH  rI  rJ  rC   )r2   rl  r   rF   rM  r"   r"   r#   test_invalid_date_conversionW  s$   
"z&TestStata.test_invalid_date_conversionc              	   C   s   t  }t }d|j_t 6}|j||d |d t	|d}|
|  W d    n1 s4w   Y  t|dd}W d    n1 sIw   Y  t|| d S )Nr*   rX  r   wbr  )r%   BytesIOrA   r  r*   r+   rB   rC   seekopenwriter3  r   rD   )r2   r6   bior   rF   dtaro  r"   r"   r#   test_nonfile_writingk  s   

zTestStata.test_nonfile_writingc              	   C   s   t  }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 sAw   Y  W d    n1 sPw   Y  t 	|| d S )Nr*   r  r8   rX  rbr  )
rA   r  r*   r+   rB   gzipGzipFilerC   r   rD   )r2   r   rF   gzro  r"   r"   r#   test_gzip_writingy  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ascii	utf8_strl
ascii_strl)   ραηδαςu   PÄNDÄSpr  r  )   ƤĀńĐąŜ   Ör   r  r   )   ᴘᴀᴎᴅᴀS   Ünr  r  )      r  r  r  r  ) r   r   r  r   )r   r   r  r   r  )r   r   r  r   r  r=   )r4   r   rA   rD   )r2   r,   
unicode_dfr>   r  rX   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 =}|j|ddd t|}|d	}t|| d |d
< |j|dd
gdd t|}|d	}t|| W d    d S 1 sYw   Y  d S )N  stringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringstringr   )mixednumberr   r   Fr9   r?   r   r  )r@   r  r6   )	r   r  rT   rA   rB   rC   r   fillnarD   )r2   outputrF   ro  rX   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   )r  r  r   z Column `none` cannot be exportedrF  rX  )r   rA   rB   rH  rI  rJ  rC   )r2   r6   r  rF   r"   r"   r#   test_all_none_exception  s   
"z!TestStata.test_all_none_exceptionc              
   C   s   d}t |gdgd}t K}d}d}tjt| d| d" tt || W d    n1 s5w   Y  W d    n1 sDw   Y  W d    d S W d    d S 1 s\w   Y  d S )Nu9   Here is one __�__ Another one __·__ Another one __½__invalidr=   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\)|rF  )	r   rA   rB   rH  rI  UnicodeEncodeErrorr
  ResourceWarningrC   )r2   r6   contentr   rF   msg1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   þâÑÐÅ§var_strvar_strlr=   r9   )r6   r  r  zlatin-1zutf-8s   strlsr   rh  s   GSO       )
r   rA   rB   rC   r  r3  encodesplitfindr   )
r2   r  rF   ro  r  rX   gsosgsor  sizer"   r"   r#   test_strl_latin1  s(   
"zTestStata.test_strl_latin1c                 C   s   d}t t%}t|dddd}t|dksJ |d jjd |ks%J W d    n1 s/w   Y  tdggd d	gd
}t || d S )Na  
One or more strings in the dta file could not be decoded using utf-8, and
so the fallback encoding of latin-1 is being used.  This can happen when a file
has been incorrectly encoded by Stata or some other software. You should verify
the string values returned are correct.r%   r&   r'   zstata1_encoding_118.dta   r   u   Düsseldorfr   r=   )	rA   r
  UnicodeWarningr   r   messager9  r   rD   )r2   r,   rM  r   r   rX   r"   r"   r#   test_encoding_latin1_118  s   z"TestStata.test_encoding_latin1_118c              
   C   s   t |ddddd}t|}W d    n1 sw   Y  |jdks&J |jd dks/J |jd	 d
ks8J |jd dksAJ |jd ttddddddksTJ d S )Nr%   r&   r'   zstata1_119.dta.gzr  )r   i  )r   re     AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)r   ra   gQ	@)r   r  r   )r   r   r`  rb   rB  )r  r  r   r%  r5  r{   	Timestampr   )r2   r,   r  r   r"   r"   r#   test_stata_119  s   
*zTestStata.test_stata_119)r:   r;   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 c}t|||dg|d||d}|	  t
|}	|d d|d< |d |d dj |d< t||	 t|}
|
j|ksJ |
 |ksJ |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)   År  r  strlsr=   	   ᴐᴬᵀrf  u	   ᵈᵉᵊu   ᴎტჄႲႳႴႶႺzLong Stringsr   )r  r  r  r  r  u   ᴅaᵀa-labelr  labelu   æøåu   ŋot valid latin-1r   r   r   r  F)r   r  r   r@   r6   rq  rr   )r6   r@   )r{   r  r   rT   rR   r   rA   rB   r   
write_filer   r  replacer   r  rD   r   r   r   rC   )r2   r6   r   r&   r   r   rq  rF   writerr  rD  reread_to_statar"   r"   r#   test_utf8_writer  sT   

"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.rF  r9   rX  zYou must use version 119r:   )
r   rR   zerosr   rA   rB   rH  rI  rJ  r   )r2   r   rF   r"   r"   r#   test_writer_118_exceptions'  s   

"z$TestStata.test_writer_118_exceptionsN)___name__
__module____qualname__r4   r	   rH  markparametrizerH   rY   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r1  r<  rE  rN  rV  rY  r]  r_  rd  rf  rp  rs  r|  r  r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  r&  r)  r=  staticmethodr   r6  rE  rI  rL  rS  rW  rX  r]  rr  rt  ry  r{  r~  r  r  rR   infr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  slowr  r  r  r"   r"   r"   r#   r/   ;   s    

D

-(



$


	



	 
;13

#

$&





	
G




1r/   r6   )i   l   o   q   r8   c                 C   sT   |ddd}t j|d}t j|d|  d}t|}t|}tj||dd d S )	Nr%   r&   r'   zstata-compat-118.dtazstata-compat-rK   Fr   )rK  rF   rZ  r   rA   rD   )r6   r,   	data_baserefoldrX   old_dtar"   r"   r#   test_backward_compat1  s   r  r7   use_dictTFinferc              	   C   s  d}| r|r	| }nt |  }|d| 7 }| }|rd}|r d| i}ttjddtdd}d	|j_t	|}|j
|||d
 | dkrbt|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}t|| W d    d S 1 sAw   Y  d S )Nzdta_inferred_compression.dtar  r  methodrd   r   r   r=   r*   )r6   compressionr  r  r  rr   tarbz2zstd	zstandardxzlzmar  )r   r   rR   r   r   r   r*   r+   rA   rB   rC   r  r  r%   r  r3  zipfileZipFilefilelisttarfileextractfilegetnamesr  rH  importorskipr   rD   )r  r6   r  r  	file_namefile_extcompression_argr   rF   compfpr  r   r#  ro  r"   r"   r#   test_compression;  sh   



$r0  r  r  r,  )Nr  r  c           
   	   C   s  d| }d}t tjddtdd}d|j_t|`}| |d}|j	||d	 | d
ks2|d
krgt
|d&}t|jdksBJ |jd j|ksLJ t||jd }W d    n1 saw   Y  n|}t|dd}	t|	| W d    d S 1 sw   Y  d S )Ntest.ztest.dtard   r   r   r=   r*   )r  archive_namer  r  r  r   r   r  )r   rR   r   r   r   r*   r+   rA   rB   rC   r$  r%  r   r&  filenamer%   r  r3  r   rD   )
r  r,  r+  r2  r   rF   r  zpr/  ro  r"   r"   r#   test_compression_dictj  s$   

"r6  c              
   C   s   t dtg dddi}d|j_t >}|j|| d t|ddd	}t|D ]"\}}|	d}d|v s6J t
|j|jjd| d|d
    q'W d    d S 1 sUw   Y  d S )Ncats)r   r    r   r    r!   rr   r   r*   rX  r   F)r-  r'  r   )r   r   r*   r+   rA   rB   rC   r   	enumerater   r  r7  r5  )r6   r   rF   rD  r  blockr"   r"   r#   test_chunked_categorical  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   rB  r   r   r    r   r  r   r   )r   rA   r
  r
   r8  r   r7  r{   Indexr  r   r   __next__r   rD   )	r,   dta_filer  rD  r  r9  idxlarge_chunkrp  r"   r"   r#    test_chunked_categorical_partial  s,   &	
rA  r-  )r  r   rf  c                 C   sN   | dddd}t jtdd t||d W d    d S 1 s w   Y  d S )Nr%   r&   r'   r;  zchunksize must be a positiverF  rB  )rH  rI  rJ  r   )r,   r-  r>  r"   r"   r#   test_iterator_errors  s   "rB  c               
      s  ddgdgd   t  fddtdD } t b}| j|dd	 tjg d
dd}t|dd3}t|D ]&\}}tdD ]}t	|j
| j| q>t|| j|d |d d   q6W d    n1 sgw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc_labelb_labela_labelr  c                    s"   i | ]}d | t j ddqS )r   Tr   )r{   r  )rt   r  r  r"   r#   ry    s   " z.test_iterator_value_labels.<locals>.<dictcomp>r   Fr   )rE  rD  rC  r   r   r  rB  r   )r   r  rA   rB   rC   r{   r<  r   r8  r  dtypesr   rD   r5  )r   rF   rX   rD  r  r;  r  r"   rF  r#   test_iterator_value_labels  s   
$"rH  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>  s    z&test_precision_loss.<locals>.<genexpr><   4   biglittler=   z&Column converted from int64 to float64rF  Fr   )r*   )r   rM  )r   rL  )r   sumr  rA   rB   r
  r   rC   r   r   rR   r  r  rG  r   float)r   rF   ro  expected_dtr"   r"   r#   test_precision_loss  s    ,
"rQ  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Zr*   r>   r*   r3  r  r  r  )r   r*   r+   rA   rB   rC   r   rD   decompress_filer%   r  r3  )r  r   rF   ro  fhcontentsr"   r"   r#   test_compression_roundtrip  s    
"r]  to_infer
read_inferc                 C   s   | }t | }d| }tg dg dgddgg dd}d|j_|r$d	n|}|r*d	n|}t|}	|j|	|d
 t|	|dd}
t|
| W d    d S 1 sQw   Y  d S )Nr1  rR  rS  r  r  rT  rX  r*   r  r3  rY  )	r   r   r*   r+   rA   rB   rC   r   rD   )compression_onlyr_  r^  r  extr4  r   to_compressionread_compressionrF   r  r"   r"   r#   test_stata_compression  s    
"rd  c               	   C   sr  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sOJ d}tjt|d ddddi}t|| |d W d    n1 sqw   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      "@)ra   ra   r   r`   rd   )r  r  r  r  r  )fully_labelledpartially_labelledrV  rW  r   r   r   r  )r   r^  )re  rf  rW  r  r  r  )r   r   r   rq  zCCan't create value labels for notY, it wasn't found in the dataset.rF  notYr  r  )ra   r`   zUCan't create value labels for Z, value labels can only be applied to numeric columns.r   r  r   )r   rR   rS   r{   r  rA   rB   r   r   r   rq  rH  rI  r\  rJ  )r&   rF   rq  rX   r  rD  reader_value_labelsrM  r"   r"   r#   !test_non_categorical_value_labels  s>   
	
"rj  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 3}tt | j||d W d    n1 sZw   Y  t|}| }||ksmJ W d    d S 1 sxw   Y  d S )N)r   r   r   r   r   r`   )r`   r`   r   r   r`   r`   )r   r   r   re   re   r   r  )z	invalid~!	6_invalid&invalid_name_longer_than_32_characters	aggregater   r   r  r  rn  r   r   )r`   r   r   r   r   r   )	invalid__
_6_invalid invalid_name_longer_than_32_char
_aggregate_1__2_rg  )r   rA   rB   r
  r   rC   r   rq  )r&   rq  rX   rF   rD  ri  r"   r"   r#   0test_non_categorical_value_label_name_conversion  s8   	
"rt  c               	   C   s   dddddi} t dg di}t X}|j|| d t|dd}| }|| ks,J d}d	d
dg }d| d| d
}tjt	|d t
|dd W d    n1 sWw   Y  W d    d S W d    d S 1 sow   Y  d S )Nrepeated_labelsTenzMore than ten)rd   r_   (   )rd   rd   r_   r_   rw  rw  rg  Frz  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:
rF  T)r   rA   rB   rC   r   rq  rZ  rH  rI  rJ  r   )rq  r&   rF   rD  ri  r   repeatsrM  r"   r"   r#   ;test_non_categorical_value_label_convert_categoricals_error=  s0   
	"rz  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 )Nrd  r   r   )r   r    Nr   ur   r  r   boolr   r    )r   r+   )r   r    r   r!   r#  Fr?   Tr  )r   r   r{   NAr+   r    r   numpy_dtyper  r   BASE_MISSING_VALUESr   rA   rB   rC   r   r  r   r!   )
r   r6   r   
dtype_namevaluer  
expected_b
expected_crF   ro  r"   r"   r#   test_nullable_supportc  s.   



"r  )Dr  r   rm  r  r%   rK  r  r'  r}   r$  numpyrR   rH  pandas.core.dtypes.commonr   r  r{   pandas._testing_testingrA   pandas.core.framer   r   pandas.core.indexes.apir    pandas.tests.io.test_compressionr   pandas.io.parsersr	   pandas.io.statar
   r   r   r   r   r   r   r   r   fixturer$   r.   r/   r
  r  r  r0  r6  r:  rA  rB  rH  rQ  r]  rd  rj  rt  rz  BooleanDtype	Int8Dtype
Int16Dtype
Int32Dtype
Int64Dtype
UInt8DtypeUInt16DtypeUInt32DtypeUInt64Dtyper  r"   r"   r"   r#   <module>   s    ,


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